如何彻底删除DB2中的Database以及DB2文件配置

如何彻底删除DB2中的Database以及DB2文件配置

首先我不是专门做DB2的,只是工作中遇到了一些问题并且X文个DB2根本无法跟它沟通,所以对删除DB这个新手问题做一些个人解释。

背景操作(类似)

1、在“配置助手”中选择数据库A点击右键,选择“除去数据库”
2、手工删除D:\DB2\NODE0000下的数据库对应的SQL00003

然后你会发现再也不能建数据库A,原因是数据库A没有彻底删除

这时候你可以在db2cmd控制台用DB2 CATALOG DB A重新编目数据库A,之后你会发现A已经可视但是仍然无法DROP,你需要手动恢复SQL00003目录内容,可以COPY002后改名为003,之后在CMD控制台DB2 DROP DB A, 来删除数据库A,这样你会发现A已经被彻底删除了,因为你已经可以重建它了。

说明:

DB2中数据库和DB2文件两者是分开的,也就是说无论删除实例,还是卸载DB2,都不会影响数据库,想删除数据库,使用drop database。

 

因此你的问题就简单了,在控制台执行db2 list db directory on dbpath, 比如

D:\Program Files\IBM\SQLLIB\BIN>DB2 LIST DB DIRECTORY

你会找到当前已经CATALOG的DB,你也可以使用DB2 CATALOG / UNCATALOG DB dbname 来编目/取消DB。

引用:

我创建的数据库存储在什么地方

从DB2 的架构上来看,DB2 中的数据库的层次位于实例之下。实例实际上就是一个逻辑的数据库管理器,它提供了一个相对独立的运行环境。数据库必须要被创建在某个实例之下,因此,在创 建数据库之前,必须要先创建实例。每当一个新的实例被创建,DB2都会在DB2安装目录sqllib下生成一个目录,其目录名称与实例名称相同,该目录下 的文件用于对该实例进行管理和控制。另外,在使用CREATE DATABSE创建数据库之后,系统还将会生成一系列子目录,具体的目录结构如图1所示。

图1:数据库缺省目录结构

LIST DB DIRECTORY ON <驱动器/路径>

数据库内部结构

不同的数据库中可能有不同的存储设定,因此子目录可能会有些差异。 很多初学者在安装了DB2后都会创建一个样本数据库,我们就以这个数据库为例介绍一下数据库内部的结构,请参见图2。

图2. 数据库内部目录结构

走进 SMS 表空间

DMS 表空间的容器类型是文件或者设备,其内部有独特的映射机制来控制存储空间的分配。而 SMS 表空间则不同,表中数据的分配会非常有规律地体现在文件结构中。很容易分辨,由于本文介绍的是 DB2 中不同文件的作用,因此我们会着重探讨 SMS 表空间下数据的分配。下面我们来看一看样本数据库中缺省用户表空间下的文件。

图3:缺省用户表空间下的文件

SELECT TBSPACE, TBSPACEID FROM SYSCAT.TABLESPACES

通过上面语句的查询结果可以得出 USERSPACE1 的 表空间 ID 为 2,然后再通过下面的命令得出 USERSPACE1 中 表名称和表ID的对应关系。

SELECT TABNAME, TABLEID FROM SYSCAT.TABLES WHERE TBSPACEID =2

假 定我们看到样本数据库中表 EMP_PHOTO的 ID 为 8,则文件名称形如 SQL00008.<type> 的文件都与 EMP_PHOTO 相关联。如果文件的扩展名为 .DAT,则说明该文件中包含的是 EMP_PHOTO 表中的常规(REGULAR)数据,也就是除了LONG VARCHAR、LONG VARGRAPHIC、CLOB,BLOB 以及 DBCLOB之外的数据,每个数据行中这类数据的大小不能超过一个数据页;如果文件的扩展名为 .LF,则说明该文件中包含的是表中的 LONG VARCHAR 或者 LONG VARGRAPHIC 数据,由于 EMP_PHOTO 表中不存在这类数据,因此不存在 SQL00008.LF 文件;如果文件的扩展名为 .LB,则说明该文件中包含的是 EMP_PHOTO 表中的 BLOB、CLOB 和 DBCLOB 数据;如果文件的扩展名为 .LBA,则说明该文件中包含的是 EMP_PHOTO 表中 BLOB、CLOB 和 DBCLOB 数据的空间分配信息,该文件与 .LB 文件是成对出现的;如果文件的扩展名为 .INX,则说明该文件中包含的是 EMP_PHOTO 表上建立的索引数据。除此之外,如果创建了多维群集(MDC) 或者对表进行了重组,则还可能会出现其他一些扩展名,我们这里就不再介绍了。

DB2 实例目录中的重要文件

在 前面我们已经提到过,在创建一个实例以后,DB2 还会在 sqllib 目录下生成一个目录,其目录名称与实例名称相同。该目录下包含了很多与控制该实例运行的重要文件。当删除一个实例的时候,DB2 实际上只是删除该目录,而不是真正删除实例中的所有数据。因此重新创建实例后,还可以通过编目命令使原来实例下的数据库重新投入使用。该实例下的文件如图 4 所示:

图4: DB2 实例目录下的文件和目录

  • db2systm 文件db2systm 就是对应实例的数据库管理器配置文件,里面包含着数据库管理器配置参数的值。由于该文件是二进制格式,因此不能使用文本编辑器编辑,而应该使用 GET DBM CFG 以及 UPDATE DBM CFG 命令来察看和修改。
  • db2diag.log 文件db2diag.log 文件是一个文本格式的错误诊断文件,其中记录的信息可以用来判断系统问题的根源。用户可以通过数据库管理器配置参数 DIAGLEVEL 来调整被记录信息的详细程度,也可以通过数据库管理器配置参数 DIAGPATH 来改变该文件的位置。
  • SQLDBDIR 目录这 个目录虽然与我们前面介绍的 SQLDBDIR 目录同名,但里面包含的内容是不一样的。我们先前介绍的 SQLDBDIR 中存储的是本地数据库目录的信息,而这个 SQLDBDIR 目录中存放的是系统数据库目录的信息。在 DB2 中,如果想对一个数据库进行存取,就必须通过编目为其在系统数据库目录中创建相应条目。要想察看系统数据库目录的内容,可以通过下列命令:
    LIST DB DIRECTORY
  • SQLNODIR 目录SQLNODIR 目录中包含的则是另外一种 DB2 目录-节点目录的信息,节点目录中包含了客户端可以存取的所有数据库实例的网络连接信息。要想察看节点目录的内容,可以通过下列命令:
    LIST NODE DIRECTORY

注:如果想要向系统数据库目录和节点数据库目录中添加条目,可以通过CATALOG DB 和 CATALOG NODE 命令;如果想要删除条目,可以使用UNCATALOG DB 和 UNCATALOG NODE 命令。

posted @ 2013-03-06 20:29  胡.杰  阅读(1274)  评论(0编辑  收藏  举报