文章主要向大家讲述的是正确使用DB2dart 工具来对DB2 数据存储方式进行理解的实际操作,尤其是 DB2 数据在每个页中进行存储的实际操作步骤,以下就是文章的主要内容的详细描述,望大家在浏览之后会对其有更深的了解。
简介
DB2 数据库中的数据表存放在表空间中,每个表空间可以有一个或者多个容器(Container),页(page)是容器中最基本的存储单元,每个页可以存储一定数量的记录。可是每一条记录在页中的存储是什么样子的?有没有什么工具能够看到每个页中存储了哪几条记录?
DB2dart 是 DB2 中自带的一个数据库分析利器,可以分析数据库、表空间和表等,验证数据库及其对象的体系结构是否正确,还可以使用它来显示数据库控制文件的内容,以便从其他情况下可能无法访问的表中抽取数据。
在本文中将通过 DB2dart 来显示和分析数据库中的数据,从而深入理解 DB2 的数据存储方式,这对于提高 DBA 数据恢复技能也有一定的帮助。
DB2 中数据存储方式概述
DB2 数据库中有两种类型的表空间,它们都可以在单个数据库中使用:
系统管理的空间(SMS),操作系统的文件管理器控制其中的存储空间。
数据库管理的空间(DMS),数据库管理器控制其中的存储空间。
还可以创建自动存储器表空间,该表空间将使用 SMS 或 DMS 作为基本表空间类型。数据库管理器将根据其中包含的数据类型选择实际类型 SMS 或 DMS(SMS 用于临时表空间,DMS 则用于其他表空间)。
本文中我们只针对 DMS 类型的表空间进行讨论。
表空间是一种存储结构,它包含表、索引、大对象和长型数据。它们允许将数据库和表数据的位置直接指定到容器上。容器可以是目录名、设备名或文件名,单个表空间可跨多个容器,如图 1 所示。
图 1. 数据库中的表空间、容器和表
DB2 数据库管理器会平衡分布在所有容器中的数据负荷,所有容器都将用于存储数据。数据库管理器在使用另一个容器之前写入一个容器的页数称为扩展数据块(extent)大小。数据库管理器并非始终从***个容器开始存储表数据。在图 2 中,表空间 HUMANERS 有 4 个容器,扩展数据库大小为 2 页,每个页大小是 4K 字节。 DEPARTMENT 和 EMPLOYEE 表都有 7 页,并且都跨越所有四个容器。
图 2. 表空间中的容器和扩展数据库
那每个页中的记录是如何存储的呢,接下来我们利用 DB2dart 工具来更为直观的进行理解。
DB2dart 使用简介
工欲善其事必先利其器,那我们就先来看看 DB2dart(DB2 Database Analysis and Reporting Tool)这个工具。如上文所述,DB2dart 更多的是一个诊断工具,可以用来验证数据库以及相关的数据库对象是否正确,是否存在问题,还可以用来显示数据库控制文件的内容,以便在重建数据库时从其他情况下无法访问的表中抽取数据。
如果想查看 DB2dart 的相关语法,可以在命令窗口(DB2CLP)中,发出 DB2dart 命令(不带任何参数),就可以看到其所有选项及其功能。在本文中我们将要用到的是:
/DD:提取格式化的表数据。命令格式:DB2dart <database name> /DD /TSI … /OI … /PS … /NP ... /V Y
在上面的命令中:
/TSI 用于指定表空间 ID(tablespace ID),
/OI 用于指定对象 ID(object ID),
/PS 用于指定开始的数据页,
/NP 用于指定所要提取的数据页的数量,
/V 用于设定是否显示详细信息,Y:显示,N:不显示。
这里的表空间 ID 和对象 ID 可以从 CATALOG 表 SYSCAT.TABLES 中获取,下文中将给出具体的 SQL 语句。此外还可以使用 /RPTN 指定用来保存结果的文件名。
注意,DB2dart 工具不能在仍具有活动连接的数据库上运行。如果存在活动连接,DB2dart 将输出警告信息,而且有可能输出错误的结果。可以通过“ FORCE APPLICATIONS ALL ”命令断开所有的数据库连接。也正是因为这一离线工作的特性,使得 DB2dart 在数据库崩溃之后的恢复中能够发挥巨大的作用。
完整内容的学习,请访问:
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0906haoqy/index.html
【编辑推荐】