用DB2dart 工具來理解DB2數(shù)據(jù)存儲(chǔ)方式
文章主要向大家講述的是正確使用DB2dart 工具來對(duì)DB2 數(shù)據(jù)存儲(chǔ)方式進(jìn)行理解的實(shí)際操作,尤其是 DB2 數(shù)據(jù)在每個(gè)頁(yè)中進(jìn)行存儲(chǔ)的實(shí)際操作步驟,以下就是文章的主要內(nèi)容的詳細(xì)描述,望大家在瀏覽之后會(huì)對(duì)其有更深的了解。
簡(jiǎn)介
DB2 數(shù)據(jù)庫(kù)中的數(shù)據(jù)表存放在表空間中,每個(gè)表空間可以有一個(gè)或者多個(gè)容器(Container),頁(yè)(page)是容器中最基本的存儲(chǔ)單元,每個(gè)頁(yè)可以存儲(chǔ)一定數(shù)量的記錄??墒敲恳粭l記錄在頁(yè)中的存儲(chǔ)是什么樣子的?有沒有什么工具能夠看到每個(gè)頁(yè)中存儲(chǔ)了哪幾條記錄?
DB2dart 是 DB2 中自帶的一個(gè)數(shù)據(jù)庫(kù)分析利器,可以分析數(shù)據(jù)庫(kù)、表空間和表等,驗(yàn)證數(shù)據(jù)庫(kù)及其對(duì)象的體系結(jié)構(gòu)是否正確,還可以使用它來顯示數(shù)據(jù)庫(kù)控制文件的內(nèi)容,以便從其他情況下可能無法訪問的表中抽取數(shù)據(jù)。
在本文中將通過 DB2dart 來顯示和分析數(shù)據(jù)庫(kù)中的數(shù)據(jù),從而深入理解 DB2 的數(shù)據(jù)存儲(chǔ)方式,這對(duì)于提高 DBA 數(shù)據(jù)恢復(fù)技能也有一定的幫助。
DB2 中數(shù)據(jù)存儲(chǔ)方式概述
DB2 數(shù)據(jù)庫(kù)中有兩種類型的表空間,它們都可以在單個(gè)數(shù)據(jù)庫(kù)中使用:
系統(tǒng)管理的空間(SMS),操作系統(tǒng)的文件管理器控制其中的存儲(chǔ)空間。
數(shù)據(jù)庫(kù)管理的空間(DMS),數(shù)據(jù)庫(kù)管理器控制其中的存儲(chǔ)空間。
還可以創(chuàng)建自動(dòng)存儲(chǔ)器表空間,該表空間將使用 SMS 或 DMS 作為基本表空間類型。數(shù)據(jù)庫(kù)管理器將根據(jù)其中包含的數(shù)據(jù)類型選擇實(shí)際類型 SMS 或 DMS(SMS 用于臨時(shí)表空間,DMS 則用于其他表空間)。
本文中我們只針對(duì) DMS 類型的表空間進(jìn)行討論。
表空間是一種存儲(chǔ)結(jié)構(gòu),它包含表、索引、大對(duì)象和長(zhǎng)型數(shù)據(jù)。它們?cè)试S將數(shù)據(jù)庫(kù)和表數(shù)據(jù)的位置直接指定到容器上。容器可以是目錄名、設(shè)備名或文件名,單個(gè)表空間可跨多個(gè)容器,如圖 1 所示。
圖 1. 數(shù)據(jù)庫(kù)中的表空間、容器和表
DB2 數(shù)據(jù)庫(kù)管理器會(huì)平衡分布在所有容器中的數(shù)據(jù)負(fù)荷,所有容器都將用于存儲(chǔ)數(shù)據(jù)。數(shù)據(jù)庫(kù)管理器在使用另一個(gè)容器之前寫入一個(gè)容器的頁(yè)數(shù)稱為擴(kuò)展數(shù)據(jù)塊(extent)大小。數(shù)據(jù)庫(kù)管理器并非始終從***個(gè)容器開始存儲(chǔ)表數(shù)據(jù)。在圖 2 中,表空間 HUMANERS 有 4 個(gè)容器,擴(kuò)展數(shù)據(jù)庫(kù)大小為 2 頁(yè),每個(gè)頁(yè)大小是 4K 字節(jié)。 DEPARTMENT 和 EMPLOYEE 表都有 7 頁(yè),并且都跨越所有四個(gè)容器。
圖 2. 表空間中的容器和擴(kuò)展數(shù)據(jù)庫(kù)
那每個(gè)頁(yè)中的記錄是如何存儲(chǔ)的呢,接下來我們利用 DB2dart 工具來更為直觀的進(jìn)行理解。
DB2dart 使用簡(jiǎn)介
工欲善其事必先利其器,那我們就先來看看 DB2dart(DB2 Database Analysis and Reporting Tool)這個(gè)工具。如上文所述,DB2dart 更多的是一個(gè)診斷工具,可以用來驗(yàn)證數(shù)據(jù)庫(kù)以及相關(guān)的數(shù)據(jù)庫(kù)對(duì)象是否正確,是否存在問題,還可以用來顯示數(shù)據(jù)庫(kù)控制文件的內(nèi)容,以便在重建數(shù)據(jù)庫(kù)時(shí)從其他情況下無法訪問的表中抽取數(shù)據(jù)。
如果想查看 DB2dart 的相關(guān)語(yǔ)法,可以在命令窗口(DB2CLP)中,發(fā)出 DB2dart 命令(不帶任何參數(shù)),就可以看到其所有選項(xiàng)及其功能。在本文中我們將要用到的是:
/DD:提取格式化的表數(shù)據(jù)。命令格式:DB2dart <database name> /DD /TSI … /OI … /PS … /NP ... /V Y
在上面的命令中:
/TSI 用于指定表空間 ID(tablespace ID),
/OI 用于指定對(duì)象 ID(object ID),
/PS 用于指定開始的數(shù)據(jù)頁(yè),
/NP 用于指定所要提取的數(shù)據(jù)頁(yè)的數(shù)量,
/V 用于設(shè)定是否顯示詳細(xì)信息,Y:顯示,N:不顯示。
這里的表空間 ID 和對(duì)象 ID 可以從 CATALOG 表 SYSCAT.TABLES 中獲取,下文中將給出具體的 SQL 語(yǔ)句。此外還可以使用 /RPTN 指定用來保存結(jié)果的文件名。
注意,DB2dart 工具不能在仍具有活動(dòng)連接的數(shù)據(jù)庫(kù)上運(yùn)行。如果存在活動(dòng)連接,DB2dart 將輸出警告信息,而且有可能輸出錯(cuò)誤的結(jié)果。可以通過“ FORCE APPLICATIONS ALL ”命令斷開所有的數(shù)據(jù)庫(kù)連接。也正是因?yàn)檫@一離線工作的特性,使得 DB2dart 在數(shù)據(jù)庫(kù)崩潰之后的恢復(fù)中能夠發(fā)揮巨大的作用。
完整內(nèi)容的學(xué)習(xí),請(qǐng)?jiān)L問:
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0906haoqy/index.html
【編輯推薦】