您的位置:首页 > 大数据 > 人工智能

案例研究---db2 dba daily working

2011-05-20 14:06 288 查看
既然您已经熟悉了 DB2 环境,那么让我们通过简单的案例研究来回顾一下本文中提到的所有概念:

DB2 数据库管理员(DBA)由于突发的个人原因离开了公司,经理要您负责所有 DB2 系统。这是您担任新 DB2 DBA
的第一天,因而您想熟悉系统。您登录到安装了 DB2 的开发机器(Windows 2000),并打开 CLP 窗口。下面是您要进行的步骤:

首先,您想要知道该机器中有多少实例:

db2ilist

然后,您想要知道当前哪个实例是活动的:

db2 get instance


db2ilist

命令,您发现该机器上定义了两个实例 - 实例“DB2”和实例“MyInst”。用
db2 get instance

命令,您发现“DB2”实例是当前的活动实例。

现在您想要列出“MyInst”实例中的数据库。由于这个实例不是当前的活动实例,所以您首先得在当前 CLP 窗口中临时切换到该实例:

set DB2INSTANCE=MyInst

您再次发出
db2 get instance

,以查看 MyInst 现在是否是当前实例,然后为列出该实例中定义的数据库,请发出以下命令:

db2 list db directory

该命令显示出该实例中只有一个数据库(MYDB2)。您想试着创建一个新的数据库(您随后将删除它),为此您执行:

db2 create database temporal

数据库的创建需要花些时间,因为在缺省情况下会在数据库内部创建几个对象。发出另一个
db2 list db directory

命令将会显示两个数据库:“MYDB2”和“temporal”。

连接至“MYDB2”数据库(db2 connect to mydb2),并查看该数据库中有多少表(
db2 list tables

)。您还可以查看定义了多少表空间(
db2 list tablespaces

)。

午餐时间到了,因此您决定把某些东西复原。首先,您决定删除临时数据库。当三秒钟掉电引起机器自动重新引导时,您正处于输入命令的过程
中。您并不担心 DB2 数据库状态,因为您知道 DB2 崩溃恢复会确保其前后一致;因此您在重新引导之后打开新的 CLP
窗口,接下来删除该数据库。

db2idrop MyInst

 

啊呀!出错了,您使用了错误的命令并删除了整个 MyInst 实例而不只是删除了数据库“temporal”。您是否因此丢失了与实例“MyInst”相关的数据库“MYDB2”和“temporal”?

查看
图 1

您可能会觉得是丢失了;但是,情况并非如此。删除实例时,您并未删除与之相关的数据库。实例为您提供了链接 DB2
代码的环境,以便这些代码依据用户数据使用实例。数据库被“关联”到实例。但是安装 DB2
新版本时,您通常会将实例“升级”成新的代码版本;而数据库保持不变。

既然您已经镇定下来,知道并未丢失数据库,那么该开始思考
db2idrop

命令的工作原理。通常,如果您的实例是活动的,那么该命令会给您一个警告。然后您意识到重新引导机器后,实例“MyInst”并未自动启动,而“DB2”实例已经被配置成在引导机器后自动启动。还有,打开新的 CLP 窗口时,
db2instance

环境变量的值被设置成“DB2”而不是“MyInst”,假设“DB2”是在机器的控制面板中为该环境变量指定的值。

既然您意识到了这一点,那么您该继续努力使一切恢复原样:

首先,您需要再次创建实例 MyInst:

db2icrt MyInst

现在,切换到该实例(set DB2INSTANCE=MyInst)。如果发出
list db directory

命令,您会得到一个指出系统 db 目录不存在的错误。如果看一下
图 1

您会明白:第一次删除实例时,所有实例范围内的配置文件和目录也都被删掉了。因此,实例级概要注册表、dbm cfg、系统 db 目录、节点目录和
dcs 目录都不见了。创建实例时,也创建了带有缺省值的 dbm cfg 和实例级注册表。庆幸的是,前任 DBA
存储了所有这些文件的内容备份。他发出类似于下面这样的命令:

db2 get dbm cfg > dbmcfg.bk

db2set -all > db2set.bk

db2 list db directory > systemdbdir.bk

db2 list node directory > nodedir.bk

db2 list dcs directory > dcsdir.bk

您必须使用适当的命令来手工恢复基于这些文件内容的值。对于您创建的“temporal”数据库,它是需要再次编目的本地数据库。发出命令“
db2 catalog db temporal on <drive/path>

”将足以在系统 db 目录中创建一个项,它将指向现有的本地 db 目录,因为您用缺省值创建了该数据库。本地 db 目录属于数据库;因此,当您删除实例时,并未将其删掉。

db2 catalog db student on c:/student

db2 catalog db pratise on c:/pratise

db2 catalog db training on c:/db2/node0000

但在启动cc后报这个错误:[IBM][CLI Driver] SQL1013N  The database alias name or database

name "PRSTISE" could not be found.  SQLSTATE=42705

既然一切都恢复了,那么现在您可以删除数据库 temporal 了:

db2 drop database temporal

将 DB2INSTANCE 的值设回“DB2”(
set DB2INSTANCE=DB2

)。

好了,大功告成了!

<
4000
/div>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息