自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DB2 9.5 數(shù)據(jù)庫分區(qū)管理及應(yīng)用實(shí)踐

運(yùn)維 數(shù)據(jù)庫運(yùn)維 數(shù)據(jù)庫
本文主要介紹什么是 DB2 數(shù)據(jù)庫分區(qū),為什么采用數(shù)據(jù)庫分區(qū),并以 Balanced Warehouse E7100 為例介紹數(shù)據(jù)庫分區(qū)管理的基本方法及應(yīng)用實(shí)踐。

本文主要介紹什么是 DB2 數(shù)據(jù)庫分區(qū),為什么采用數(shù)據(jù)庫分區(qū),并以 Balanced Warehouse E7100 為例介紹數(shù)據(jù)庫分區(qū)管理的基本方法及應(yīng)用實(shí)踐。

DB2 數(shù)據(jù)庫分區(qū)是 DB2 企業(yè)版 DPF(Data Partitioning Feature)選件提供的,它主要用來為大規(guī)模數(shù)據(jù)處理、高并發(fā)數(shù)據(jù)訪問提供支持。DB2 數(shù)據(jù)庫分區(qū)采用 Share-nothing 體系結(jié)構(gòu),數(shù)據(jù)庫在一個(gè)非共享的環(huán)境中被分解為獨(dú)立的分區(qū),每個(gè)分區(qū)都具有自己的資源,例如內(nèi)存,CPU 和磁盤以及自己的數(shù)據(jù)、索引、配置文件和事務(wù)日志。數(shù)據(jù)庫分區(qū)有時(shí)稱為節(jié)點(diǎn)或數(shù)據(jù)庫節(jié)點(diǎn)。如下圖所示:

圖 1. DB2 數(shù)據(jù)庫分區(qū)示例圖

數(shù)據(jù)通過 Hash 算法均允地散列到不同的分區(qū)內(nèi),每個(gè)分區(qū)只負(fù)責(zé)處理自己的數(shù)據(jù)。當(dāng)用戶發(fā)出 SQL 操作后,被連接的分區(qū)被稱為 Coordinate Node,它負(fù)責(zé)處理用戶的請(qǐng)求,并根據(jù) Partition key 將用戶的請(qǐng)求分解成多個(gè)子任務(wù)交由不同分區(qū)并行處理,最后將不同分區(qū)的執(zhí)行結(jié)果經(jīng)過匯總返回給用戶,分區(qū)對(duì)應(yīng)用來說是透明的。

在 DB2 中,數(shù)據(jù)庫分區(qū)可以部署在集群或 MPP 環(huán)境下,也就是說數(shù)據(jù)庫分區(qū)分布在不同的機(jī)器上;數(shù)據(jù)庫分區(qū)也可以部署在同一臺(tái) SMP 機(jī)器上,在同一臺(tái)機(jī)器上的分區(qū)我們稱為邏輯分區(qū)。同時(shí),我們還可以在集群或 MPP 環(huán)境下部署多個(gè)分區(qū),在集群或 MPP 每一個(gè)節(jié)點(diǎn)上部署多個(gè)邏輯分區(qū)。

DB2 數(shù)據(jù)庫分區(qū)提供了強(qiáng)大的可擴(kuò)展能力。由于采用 Share-nothing 體系結(jié)構(gòu),每個(gè)分區(qū)(節(jié)點(diǎn))只處理它那一部分?jǐn)?shù)據(jù),分區(qū)之間盡可能獨(dú)立,這就減少了節(jié)點(diǎn)間共享資源的爭(zhēng)用,允許數(shù)據(jù)庫有效地伸縮以支持更大的數(shù)據(jù)規(guī)模及更多的用戶訪問。DB2 數(shù)據(jù)庫分區(qū)提供 scale up (垂直擴(kuò)展)及 scale out (水平擴(kuò)展)能力。垂直擴(kuò)展是通過增加機(jī)器的物理資源如 cpu、磁盤、內(nèi)存來實(shí)現(xiàn)的;水平擴(kuò)展是通過增加物理機(jī)器來實(shí)現(xiàn)的,DB2 中,最多可以支持 1000 個(gè)分區(qū)。在規(guī)劃 DB2 數(shù)據(jù)庫分區(qū)時(shí),我們需要考慮是通過增加邏輯分區(qū)還是物理分區(qū)來實(shí)現(xiàn)擴(kuò)展能力。如果一臺(tái)物理機(jī)器上有多個(gè) CPU,其物理資源可以允許多個(gè)分區(qū)共享該資源,我們可以通過增加邏輯分區(qū)來實(shí)現(xiàn)擴(kuò)展;如果一臺(tái)物理機(jī)器上的物理資源不能滿足應(yīng)用需求,我們就需要通過增加機(jī)器,也就是物理分區(qū)來實(shí)現(xiàn)擴(kuò)展能力。

DB2 數(shù)據(jù)庫分區(qū)還提供了強(qiáng)大的并行處理能力。首先,它提供了 inter-partition parallelism 分區(qū)間的并行機(jī)制,通過hash算法將數(shù)據(jù)庫請(qǐng)求分成多個(gè)任務(wù)在不同的分區(qū)上并行執(zhí)行,同時(shí),提供了 intra-partition parallelism 分區(qū)內(nèi)的并行機(jī)制,將任務(wù)分解成不同的子任務(wù),在不同的 CPU 上并行執(zhí)行,另外,我們還可以同時(shí)利用 inter-partition parallelism、intra-partition parallelism 來實(shí)現(xiàn)完全的并行處理能力。DB2 數(shù)據(jù)庫的查詢操作、backup/restore/load 等實(shí)用程序及 I/O 操作都可以通過上述的并行處理能力來顯著提高其性能。如下圖所示:

圖 2. DB2 數(shù)據(jù)庫分區(qū)并行處理示例圖

為什么采用數(shù)據(jù)庫分區(qū)

采用數(shù)據(jù)庫分區(qū),可以為您帶來如下好處:

查詢擴(kuò)展性

這是采用數(shù)據(jù)庫分區(qū)最主要的原因之一。將一個(gè)大的數(shù)據(jù)庫分成多個(gè)小的數(shù)據(jù)庫可以提高查詢的性能,因?yàn)槊總€(gè)數(shù)據(jù)庫分區(qū)擁有自己的一小部分?jǐn)?shù)據(jù)。假設(shè)您想掃描1億條記錄,對(duì)一個(gè)單一分區(qū)的數(shù)據(jù)庫來講,該掃描操作需要數(shù)據(jù)庫管理器獨(dú)立掃描一億條記錄,如果您將數(shù)據(jù)庫系統(tǒng)做成50個(gè)分區(qū),并將這1億條記錄平均分配到這50個(gè)分區(qū)上,那么每個(gè)數(shù)據(jù)庫分區(qū)的數(shù)據(jù)庫管理器將只掃描200萬記錄。

架構(gòu)限制

在DB2 V8和以前版本,非分區(qū)數(shù)據(jù)庫的最大的表取決于頁面大小,4K頁最大支持64 GB,32K頁最大支持512 GB數(shù)據(jù)量。表和表空間大小限制是每個(gè)分區(qū)上的限制,因此將數(shù)據(jù)庫分成N個(gè)分區(qū)可以將表的最大尺寸增加為單個(gè)分區(qū)表最大尺寸的N倍。內(nèi)存也可能是個(gè)限制,特別是在32為操作系統(tǒng)環(huán)境,因?yàn)槊總€(gè)數(shù)據(jù)庫分區(qū)管理并擁有自己的資源,因此通過數(shù)據(jù)庫分區(qū)可以克服這個(gè)限制。

數(shù)據(jù)庫裝載性能

數(shù)據(jù)庫分區(qū)可以并行裝載數(shù)據(jù)到所有數(shù)據(jù)庫分區(qū),極大減少單表的裝載時(shí)間,這對(duì)于像實(shí)時(shí)商業(yè)智能系統(tǒng)那樣對(duì)數(shù)據(jù)裝載的時(shí)間要求特別高的系統(tǒng)特別重要。

數(shù)據(jù)庫維護(hù)性能

將數(shù)據(jù)庫分散到多個(gè)數(shù)據(jù)庫分區(qū)服務(wù)器可以加快系統(tǒng)維護(hù),因?yàn)槊總€(gè)操作都運(yùn)行在分區(qū)所管理的一個(gè)數(shù)據(jù)子集上面,這樣可以通過數(shù)據(jù)庫分區(qū)進(jìn)一步減少創(chuàng)建索引的時(shí)間,減少搜集統(tǒng)計(jì)信息的時(shí)間,因?yàn)閞unstats僅運(yùn)行在一個(gè)數(shù)據(jù)庫分區(qū)上面,減少表重整(reorg)的時(shí)間。

備份/恢復(fù)性能

將數(shù)據(jù)庫分區(qū)到不同的數(shù)據(jù)庫服務(wù)器上可以大大減少數(shù)據(jù)庫備份的時(shí)間,這往往是決定是否使用數(shù)據(jù)庫分區(qū)很重要的一點(diǎn)。DB2 通過為每個(gè)表空間分配獨(dú)立的進(jìn)程或線程來實(shí)現(xiàn)備份和恢復(fù)操作的并行處理的。在分區(qū)數(shù)據(jù)庫環(huán)境的備份中,每個(gè)分區(qū)的備份是獨(dú)立的,通過并行備份數(shù)據(jù)庫分區(qū)可以大大減少備份整個(gè)數(shù)據(jù)庫的時(shí)間。

日志

在高度活動(dòng)的系統(tǒng)中,數(shù)據(jù)庫日志的性能可能會(huì)限制系統(tǒng)的整體吞吐量。在分區(qū)數(shù)據(jù)庫環(huán)境中,每個(gè)分區(qū)有自己一套日志。當(dāng)大量插入、更新、刪除操作時(shí),多個(gè)數(shù)據(jù)庫分區(qū)可以提高性能,因?yàn)槿罩臼窃诿總€(gè)數(shù)據(jù)庫分區(qū)上是并行寫的,且每個(gè)單一的分區(qū)需要記錄的日志更少。

DB2 隨數(shù)據(jù)量或處理器和分區(qū)的增加,提供近線性的擴(kuò)展能力,可是,數(shù)據(jù)庫分區(qū)是否提供最多的益處依賴于處理的工作負(fù)荷、最大表的大小及其他因素。

什么時(shí)候采用數(shù)據(jù)庫分區(qū)

設(shè)計(jì)數(shù)據(jù)庫分區(qū)的基本原則是,盡量將大表分布在所有的分區(qū)上,提高并行處理能力;將小表放置在盡量少的分區(qū)上,一般是建議放在單一分區(qū)上;盡量減少分區(qū)間的通信。對(duì)于是否采用數(shù)據(jù)庫分區(qū),除了考慮上一節(jié)提到的分區(qū)的優(yōu)勢(shì)之外,我們也要根據(jù)分區(qū)設(shè)計(jì)原則來考慮:

選擇數(shù)據(jù)庫分區(qū)的一個(gè)比較理想的場(chǎng)景是執(zhí)行一條像 ” select count(*) from big_table”這樣的語句。如果將這個(gè)表放在所有分區(qū)上,則每個(gè)分區(qū)都可以計(jì)算該表在其上的行數(shù),并將這個(gè)局部總數(shù)(subtotal)發(fā)送到協(xié)調(diào)分區(qū),以便計(jì)算總和,而這里的通信成本比起每個(gè)分區(qū)上所做的工作來可以忽略不計(jì)。

另一個(gè)非常合適的場(chǎng)景是, 一個(gè)大表與幾個(gè)非常小的很少更新的表相連接。大表是分區(qū)的,小表則被復(fù)制到每個(gè)分區(qū)上,這樣就可以并置連接。

不適合使用分區(qū)的是那些在連接時(shí)涉及很多大表和各種各樣的表和列的 ad hoc 查詢環(huán)境。在那些情況下, 很難或者不可能選擇表的分區(qū)鍵,使得所有大的查詢執(zhí)行起來沒有很多的分區(qū)間通信。

同樣不適合使用分區(qū)的是那些有多條不能在單個(gè)分區(qū)內(nèi)處理的非常小的語句。在這種情況下,分區(qū)間通信的開銷比起這些語句的本地執(zhí)行來就相當(dāng)高,而如果使用分區(qū)的話(尤其是跨多個(gè)物理系統(tǒng)),響應(yīng)時(shí)間就會(huì)大大惡化。

大多數(shù)工作負(fù)載和一些特定的任務(wù)都處于剛才討論的這兩種極端之間,這些地方都需要通過原型來研究使用分區(qū)所帶來的影響。

#p#

數(shù)據(jù)庫分區(qū)實(shí)現(xiàn)

下邊,我們以 IBM InfoSphere Balanced Warehouse E7100 為例,介紹一下DB2 分區(qū)數(shù)據(jù)庫在AIX下的基本管理方法及應(yīng)用實(shí)踐。DB2 分區(qū)數(shù)據(jù)庫在 Windows 環(huán)境下的管理方法和 AIX 略有不同,具體請(qǐng)參閱相關(guān)手冊(cè)。

IBM InfoSphere Balanced Warehouse 是IBM針對(duì)客戶數(shù)據(jù)倉庫系統(tǒng)提出的一整套完整的解決方案。當(dāng)用戶實(shí)施一個(gè)數(shù)據(jù)倉庫系統(tǒng)時(shí),對(duì)用戶來說,一個(gè)非常大的挑戰(zhàn)就是未來的數(shù)據(jù)倉庫系統(tǒng)應(yīng)該選擇什么樣的服務(wù)器,服務(wù)器的配置是什么,選擇多少臺(tái)服務(wù)器;選擇什么樣的存儲(chǔ)設(shè)備,存儲(chǔ)容量要多大,存儲(chǔ)設(shè)備配置是什么;選擇什么樣的網(wǎng)絡(luò)設(shè)備,它的配置是什么才能保證系統(tǒng)性能高效、穩(wěn)定。同時(shí),隨著系統(tǒng)的應(yīng)用,數(shù)據(jù)量會(huì)急劇增長(zhǎng),如何在保證系統(tǒng)性能的前提下,提供更好的系統(tǒng)擴(kuò)展能力也是用戶非常關(guān)心的問題。為了解決上述問題,IBM 結(jié)合自己多年實(shí)施客戶數(shù)據(jù)倉庫系統(tǒng)的經(jīng)驗(yàn),并協(xié)同IBM軟件部門、服務(wù)器部門、存儲(chǔ)部門及實(shí)驗(yàn)室,共同推出了 InfoSphere Balanced Warehouse 解決方案,有時(shí)也稱為 BCU(Balanced Configuration Unit)。InfoSphere Balanced Warehouse 是一個(gè)包含服務(wù)器、存儲(chǔ)、數(shù)據(jù)倉庫軟件在內(nèi)的完整解決方案,它基于 IBM 最佳實(shí)踐并得到充分驗(yàn)證,是一個(gè)預(yù)先配置好的、可立即使用的解決方案,客戶無需靠猜測(cè)或假象去配置并驗(yàn)證,實(shí)現(xiàn)開箱即用。InfoSphere Balanced Warehouse 采用平衡的理念,每個(gè)組件(數(shù)據(jù)庫、服務(wù)器和存儲(chǔ))提供均衡的性能確保整體方案性能最優(yōu)。同時(shí),它采用可擴(kuò)展的模塊化設(shè)計(jì),數(shù)據(jù)倉庫系統(tǒng)在整個(gè)生命周期中,可以以增量的方式進(jìn)行擴(kuò)展,達(dá)到的性能可預(yù)見、可度量。

InfoSphere Balanced Warehouse主要由以下幾個(gè)模塊組成:如下圖:

圖 3. InfoSphere Balanced Warehouse 模塊組成
 

Foundation Module: 有時(shí)也稱為 administration BCU。該模塊主要包括編目分區(qū)、協(xié)調(diào)分區(qū)以及單分區(qū)表。系統(tǒng)必須要有 1 個(gè) Foundation Module。

Data Module: 有時(shí)也稱為 data BCU。該模塊主要保存分區(qū)表數(shù)據(jù)。根據(jù)數(shù)據(jù)量,可以有 1 個(gè)或多個(gè) Data Module。

User Module: 如果系統(tǒng)有大量用戶訪問,我們可以考慮增加 User Module。

Failover Module: 用于滿足 HA 的需求。

Application Module: 用于運(yùn)行應(yīng)用程序,比如說 ETL 應(yīng)用就可以配置在 Application Module 上。

本次配置環(huán)境包括一個(gè) administration BCU 和 2 個(gè) data BCU,如下圖所示:

圖 4. InfoSphere Balanced Warehouse 配置圖

創(chuàng)建實(shí)例及配置通信連接

使用db2icrt命令創(chuàng)建實(shí)例

/opt/IBM/db2/V9.1/instance/db2icrt -u bcufenc bcuaix

配置TCPIP通信服務(wù)

db2set DB2COMM=tcpip

修改DBM CFG 中的 SVCENAME參數(shù)

db2 update dbm config using svcename xbcuaix

在實(shí)例級(jí)禁用fault monitor

db2fm -i instance_name -f no

創(chuàng)建診斷文件目錄

缺省的情況下,db2diag.log 文件創(chuàng)建在 ~/sqllib/db2dump 目錄下,這個(gè)目錄是 NFS-mounted,我們一般建議要將 db2diag.log 文件放在非 NFS-mounted 目錄下。在 E7100 實(shí)施中,我們建議將該文件放到外部的存儲(chǔ)上。

Administration BCU:

mkdir -p /db2path/bcuaix/NODE0000/SQL00001/db2dump

Data BCU 1:

mkdir -p /db2path/bcuaix/NODE0001/SQL00001/db2dump

Data BCU 2:

mkdir -p /db2path/bcuaix/NODE0009/SQL00001/db2dump

Administration BCU:

ln -s /db2path/bcuaix/NODE0000/SQL00001/db2dump /db2path/bcuaix/db2dump

Data BCU 1:

ln -s /db2path/bcuaix/NODE0001/SQL00001/db2dump /db2path/bcuaix/db2dump

Data BCU 2:

ln -s /db2path/bcuaix/NODE0009/SQL00001/db2dump /db2path/bcuaix/db2dump

db2 update dbm config using diagpath /db2path/bcuaix/db2dump

定義數(shù)據(jù)庫分區(qū)

在數(shù)據(jù)庫分區(qū)環(huán)境下,數(shù)據(jù)庫被分為多個(gè)分區(qū),分區(qū)之間彼此獨(dú)立工作,實(shí)現(xiàn)并行操作。數(shù)據(jù)庫分區(qū)可以是物理分區(qū)也可以是邏輯分區(qū)。在一臺(tái)物理機(jī)器上部署的一個(gè)分區(qū),我們稱為物理分區(qū),如果是在一臺(tái) SMP 機(jī)器上部署多個(gè)分區(qū),這些分區(qū)我們稱為邏輯分區(qū)。我們可以選擇物理分區(qū),也可以選擇邏輯分區(qū)。通常,如果決定采用大的 SMP 機(jī)器,有更多的 CPU、內(nèi)存及硬盤,我們會(huì)采用邏輯分區(qū);如果決定采用多臺(tái)物理機(jī)器,我們會(huì)通過非共享的體系結(jié)構(gòu)采用物理分區(qū);如果決定采用多臺(tái) SMP 機(jī)器,我們則會(huì)采用物理分區(qū)和邏輯分區(qū)結(jié)合的方式。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,執(zhí)行 CREATE DATABASE 語句所在的分區(qū)稱為編目分區(qū)(catalog partition)。編目分區(qū)保存系統(tǒng)編目表。編目分區(qū)只能創(chuàng)建在一個(gè)分區(qū)上。通常,在實(shí)際生產(chǎn)環(huán)境中,我們建議采用一個(gè)專用編目分區(qū),這個(gè)分區(qū)只包含編目表,不包含用戶數(shù)據(jù)。這對(duì) DB2 的一些實(shí)用程序運(yùn)行效率有較大的提高。比如說 BACKUP 和 RESTORE 命令,需要先在編目分區(qū)上運(yùn)行,之后才能在其他分區(qū)上執(zhí)行。由于編目分區(qū)上沒有用戶數(shù)據(jù),因此它的備份和恢復(fù)就可以很快完成,并且可以最小程度地延遲對(duì)其他分區(qū)的(并行)操作的開始。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,應(yīng)用程序連接的分區(qū),我們稱為協(xié)調(diào)分區(qū)(coordinate partition)。它負(fù)責(zé)處理用戶的請(qǐng)求,并根據(jù) Partition key 將用戶的請(qǐng)求分解成多個(gè)子任務(wù)交由不同分區(qū)并行處理,最后將不同分區(qū)的執(zhí)行結(jié)果經(jīng)過匯總返回給用戶。任何一個(gè)數(shù)據(jù)庫分區(qū)都可以是協(xié)調(diào)分區(qū)。在實(shí)際生產(chǎn)環(huán)境中,我們建議采用一個(gè)或幾個(gè)專用協(xié)調(diào)分區(qū)。因?yàn)閼?yīng)用程序要通過一個(gè)或多個(gè)協(xié)調(diào)分區(qū)為用戶連接轉(zhuǎn)移大量的數(shù)據(jù)的話,那么就會(huì)消耗那些分區(qū)上的大部分 CPU,并降慢了數(shù)據(jù)訪問速度。如果讓分區(qū)什么也不做,只是充當(dāng)協(xié)調(diào)者(coordinator),就不會(huì)降低數(shù)據(jù)分區(qū)數(shù)據(jù)訪問速度。

在 InfoSphere Balanced Warehouse E7100 的設(shè)計(jì)中,我們?cè)?administration BCU 中,分別為編目分區(qū)和協(xié)調(diào)分區(qū)分配了專用的分區(qū),同時(shí),根據(jù)數(shù)據(jù)庫分區(qū)的基本原則,我們將系統(tǒng)中的小表創(chuàng)建在了一個(gè)單一分區(qū)上。用戶的數(shù)據(jù),我們創(chuàng)建在 data BCU 上,同時(shí),根據(jù)數(shù)據(jù)庫分區(qū)的基本原則,我們將系統(tǒng)中的大表盡量地分布到 data BCU 上的所有分區(qū)上。當(dāng)用戶數(shù)據(jù)增加后,我們可以通過增加更多的 data BCU 來實(shí)現(xiàn)增量的方式擴(kuò)展、提供均衡的性能。如下說明:

Database partition 0 (BPU 0) 包含:

Catalog function (only one database partition has the database catalog)

Coordinator function

Single-partition data function

Query Patroller server and control tables (if implemented)

Located on the administration BCU

Database partition 1 - n (BPU1 - BPUn) 包含:

Database partitions with partitioned data

Located on the data BCUs

DB2 節(jié)點(diǎn)配置文件(db2nodes.cfg)

用來定義數(shù)據(jù)庫分區(qū)。在創(chuàng)建分區(qū)數(shù)據(jù)庫之前,一定要先定義 db2nodes.cfg 文件。該文件放置在用戶實(shí)例主目錄下。系統(tǒng)中的每一個(gè)分區(qū)在該文件中都會(huì)有一項(xiàng)。

db2nodes.cfg 文件的基本格式如下:

dbpartitionnum hostname logical-port netnam

其中:

dbpartitionnum

數(shù)據(jù)庫分區(qū)號(hào)唯一地定義數(shù)據(jù)庫分區(qū),可在 0 到 999 之間。數(shù)據(jù)庫分區(qū)號(hào)必須以升序順序排序。該順序中可以有間隔。一旦指定了數(shù)據(jù)庫分區(qū)號(hào),就不能對(duì)其進(jìn)行更改。否則,分布圖(它指定數(shù)據(jù)分發(fā)方式)中的信息可能不正確。

hostname

用作分區(qū)間通信的 IP 地址的主機(jī)名。

logical-port

它指定該數(shù)據(jù)庫分區(qū)的邏輯端口號(hào)。此號(hào)碼與數(shù)據(jù)庫管理器實(shí)例名一起用來標(biāo)識(shí) etc/services 文件中的 TCP/IP 服務(wù)名稱條目。 對(duì)于每個(gè)主機(jī)名,一個(gè)邏輯端口必須為 0(零) 。

netname

指定用于 FCM 高速互聯(lián)的主機(jī)名稱 。

下邊是包括一個(gè) administration BCU 和 2 個(gè) data BCU 環(huán)境的 db2nodes.cfg 文件內(nèi)容:

 

0 adminbcu001 0 adminbcu001_fcm

1 databcu001 0 databcu001_fcm

2 databcu001 1 databcu001_fcm

3 databcu001 2 databcu001_fcm

4 databcu001 3 databcu001_fcm

5 databcu001 4 databcu001_fcm

6 databcu001 5 databcu001_fcm

7 databcu001 6 databcu001_fcm

8 databcu001 7 databcu001_fcm

9 databcu002 0 databcu002_fcm

10 databcu002 1 databcu002_fcm

11 databcu002 2 databcu002_fcm

12 databcu002 3 databcu002_fcm

13 databcu002 4 databcu002_fcm

14 databcu002 5 databcu002_fcm

15 databcu002 6 databcu002_fcm

16 databcu002 7 databcu002_fcm

在分區(qū)號(hào)的分配上,我們建議,catalog partition 分區(qū)號(hào)分配為 0,因?yàn)橐粋€(gè)實(shí)例下只能有 1 個(gè) catalog partition,分區(qū)號(hào) 990-999 分配給另外需要增加的 coordinator partitions,分區(qū)號(hào) 980-989 分配給另外需要增加的單分區(qū)的表。

配置分區(qū)間通信

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,分區(qū)之間需要通過 DB2 Fast Communication

Manager 進(jìn)行通信。在 /etc/services 文件中,需要為 DB2 FCM 通信設(shè)置相應(yīng)的通信端口。

xbcuaix 50000/tcp
xbcuaix_int 50001/tcp
DB2_bcuaix 60000/tcp
DB2_bcuaix_END 60016/tcp

創(chuàng)建數(shù)據(jù)庫

我們?cè)?administration BCU 上創(chuàng)建數(shù)據(jù)庫testdb。

db2 "create database testdb automatic storage no on /db2path \
pagesize 16384 autoconfigure apply none"

創(chuàng)建數(shù)據(jù)庫分區(qū)組(database partition groups)

數(shù)據(jù)庫分區(qū)組是一個(gè)或多個(gè)數(shù)據(jù)庫分區(qū)的集合。在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,數(shù)據(jù)庫表空間創(chuàng)建在數(shù)據(jù)庫分區(qū)組中。

在設(shè)計(jì)數(shù)據(jù)庫分區(qū)組時(shí),我們一般建議:

幾乎總要為小的表創(chuàng)建至少一個(gè)單分區(qū)的數(shù)據(jù)庫分區(qū)組。

幾乎總要為大的表使用至少一個(gè)由所有分區(qū)組成的數(shù)據(jù)庫分區(qū)組。這個(gè)數(shù)據(jù)庫分區(qū)組可以是缺省的 IBMDEFAULTGROUP。

分區(qū)數(shù)越多,就越可能存在一些對(duì)單分區(qū)來說太大、而要展開到所有分區(qū)上又太小的表,那么就越需要?jiǎng)?chuàng)建包含數(shù)個(gè)分區(qū)、但不是全部分區(qū)的數(shù)據(jù)庫分區(qū)組。

當(dāng)我們創(chuàng)建一個(gè)數(shù)據(jù)庫后,系統(tǒng)會(huì)缺省創(chuàng)建 3 個(gè)數(shù)據(jù)庫分區(qū)組:

IBMCATGROUP:編目數(shù)據(jù)庫分區(qū)組,用來存儲(chǔ)系統(tǒng)編目表。它只包含一個(gè)數(shù)據(jù)庫分區(qū)。

SYSCATSPACE 表空間創(chuàng)建在這個(gè)分區(qū)組中。

在 BCU 設(shè)計(jì)中,IBMCATGROUP 創(chuàng)建在 0 號(hào)數(shù)據(jù)庫分區(qū)上。

IBMTEMPGROUP.:臨時(shí)數(shù)據(jù)庫分區(qū)組,tempspace1 系統(tǒng)臨時(shí)表空間創(chuàng)建在這個(gè)分區(qū)組中。它包含系統(tǒng)中的所有數(shù)據(jù)庫分區(qū)。

IBMDEFAULTGROUP:缺省數(shù)據(jù)庫分區(qū)組。用戶表空間缺省創(chuàng)建在該分區(qū)組中。USERSPACE1 表空間包含在 IBMDEFAULTGROUP 中。

在BCU設(shè)計(jì)中,建議不使用IBMDEFAULTGROUP,而是創(chuàng)建了2個(gè)新的數(shù)據(jù)庫分區(qū)組:

PDPG: 分布在data BCU分區(qū)上的數(shù)據(jù)包含在此數(shù)據(jù)庫分區(qū)組中。PDPG 只包括data BCU 上的分區(qū),但不包含administration BCU上的分區(qū)。它適用于中等數(shù)據(jù)規(guī)模到大數(shù)據(jù)規(guī)模的表。

SDPG:該數(shù)據(jù)庫分區(qū)只包含 administration BCU 分區(qū)上的數(shù)據(jù),它只包含一個(gè)數(shù)據(jù)庫分區(qū),即 0 號(hào)數(shù)據(jù)庫分區(qū)。系統(tǒng)中的一些小表保存在此數(shù)據(jù)庫分區(qū)組中,這些小表通常是一些維表(dimension tables)或 lookup tables。

CREATE DATABASE PARTITION GROUP PDPG ON DBPARTITIONNUMS (1 to 16)
CREATE DATABASE PARTITION GROUP SDPG ON DBPARTITIONNUMS (0)

創(chuàng)建 buffer pools

在本示例中,我們創(chuàng)建 2 個(gè) 16K 頁的 buffer pools:

CREATE BUFFERPOOL BP_16K ALL DBPARTITIONNUMS SIZE 53760 PAGESIZE 16K;
CREATE BUFFERPOOL BPTMP_16K ALL DBPARTITIONNUMS SIZE 10752 PAGESIZE 16K;

創(chuàng)建表空間

在本次實(shí)例中,我們將創(chuàng)建如下表空間:

db2tmp ---臨時(shí)表空間

ts_pd_data_001---分區(qū)表數(shù)據(jù)空間

ts_pd_idx_001---索引表空間

ts_sd_small---單分區(qū)表空間。如圖所示:

圖 5. 表空間創(chuàng)建示例圖:
 

在 data BCU 上創(chuàng)建如下表空間:

CREATE TEMPORARY TABLESPACE db2tmp

IN DATABASE PARTITION GROUP ibmtempgroup

PAGESIZE 16K

MANAGED BY DATABASE

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/db2tmp’ 25G)

ON DBPARTITIONNUMS (0)

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/db2tmp’ 25G,

FILE ’/db2fs2p $N /bcuaix/databasename/db2tmp’ 25G,

FILE ’/db2fs3p $N /bcuaix/databasename/db2tmp’ 25G,

FILE ’/db2fs4p $N /bcuaix/databasename/db2tmp’ 25G)

ON DBPARTITIONNUMS (1 to 16)

EXTENTSIZE 16

PREFETCHSIZE AUTOMATIC

BUFFERPOOL BPTMP_16K

OVERHEAD 5.75 TRANSFERRATE 0.4

AUTORESIZE YES MAXSIZE 400G

NO FILE SYSTEM CACHING;

CREATE TABLESPACE ts_pd_data_001

IN DATABASE PARTITION GROUP pdpg

PAGESIZE 16K

MANAGED BY DATABASE

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/ts_pd_data_001’ 50G,

FILE ’/db2fs2p $N /bcuaix/databasename/ts_pd_data_001’ 50G,

FILE ’/db2fs3p $N /bcuaix/databasename/ts_pd_data_001’ 50G,

FILE ’/db2fs4p $N /bcuaix/databasename/ts_pd_data_001’ 50G)

EXTENTSIZE 16

PREFETCHSIZE AUTOMATIC

BUFFERPOOL BP_16K

OVERHEAD 5.75 TRANSFERRATE 0.4

AUTORESIZE YES MAXSIZE 400G

NO FILE SYSTEM CACHING;

CREATE TABLESPACE ts_pd_idx_001

IN DATABASE PARTITION GROUP pdpg

PAGESIZE 16K

MANAGED BY DATABASE

USING (

FILE ’/db2fs1p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,

FILE ’/db2fs2p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,

FILE ’/db2f3p $N /bcuaix/databasename/ts_pd_idx_001’ 25G,

FILE ’/db2fs4p $N /bcuaix/databasename/ts_pd_idx_001’ 25G)

EXTENTSIZE 16

PREFETCHSIZE AUTOMATIC

BUFFERPOOL BP_16K

OVERHEAD 5.75 TRANSFERRATE 0.4

AUTORESIZE YES MAXSIZE 200G

NO FILE SYSTEM CACHING;

在administration BCU上創(chuàng)建如下表空間:

CREATE TABLESPACE ts_sd_small_001 
IN DATABASE PARTITION GROUP sdpg
PAGESIZE 16K
MANAGED BY DATABASE
USING (
FILE ‘/db2fs1p0/bcuaix/databasename/ts_sd_data_001’ 100G)
EXTENTSIZE 16
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BP_16K
OVERHEAD 5.75 TRANSFERRATE 0.4
AUTORESIZE YES MAXSIZE 200G
NO FILE SYSTEM CACHING;

在創(chuàng)建分區(qū)數(shù)據(jù)庫表空間時(shí),我們經(jīng)常會(huì)使用數(shù)據(jù)庫分區(qū)表達(dá)式。它是由參數(shù) ' $N (注意在 $N 之前有一個(gè)空格)來指定的,DB2 會(huì)將 $N 替換成數(shù)據(jù)庫分區(qū)組中已定義的分區(qū)號(hào)。

創(chuàng)建表

當(dāng)創(chuàng)建數(shù)據(jù)庫分區(qū)組時(shí),每一個(gè)數(shù)據(jù)庫分區(qū)組都會(huì)對(duì)應(yīng)一個(gè)分區(qū)圖(partitioning map),它是一個(gè)包含 4096 個(gè)條目的數(shù)組,每個(gè)條目的值對(duì)應(yīng)于數(shù)據(jù)庫分區(qū)組中的某一個(gè)分區(qū)號(hào)。

分區(qū)鍵(partitioning key)是由一個(gè)表上的一個(gè)列或者多個(gè)列組成,用于確定某一行特定數(shù)據(jù)分布在哪個(gè)分區(qū)上。分區(qū)鍵是在 CREATE TABLE 語句來定義的。如果沒有指定分區(qū)鍵,缺省的分區(qū)鍵是主鍵的第一列,如果沒有這么一列,則選擇有適合數(shù)據(jù)類型的第一列。

當(dāng)向表中插入一條記錄時(shí),DB2 將該記錄的分區(qū)鍵值散列(hash)到分區(qū)圖中的一個(gè)條目上,并根據(jù)該條目找到要使用的分區(qū)號(hào)。

在定義分區(qū)表時(shí),分區(qū)鍵的定義對(duì)今后性能的影響非常大,因此,在選擇上一定要慎重。通常,在選擇分區(qū)鍵時(shí),要遵從如下原則:

選擇經(jīng)常用于連接的列作為分區(qū)鍵。

分區(qū)鍵應(yīng)該不包括經(jīng)常更新的列。

除非一個(gè)表不是很重要,或者不知道一個(gè)好的分區(qū)鍵選擇是什么,否則不應(yīng)該隨缺省情況選擇分區(qū)鍵。缺省的分區(qū)鍵是主鍵的第一列,如果沒有這么一列,則選擇有適合數(shù)據(jù)類型的第一列。

將一個(gè)表創(chuàng)建為分區(qū)表之后,就不能直接更改它的分區(qū)鍵。

通過 ALTER TABLE 可以添加或刪除分區(qū)鍵,但是這只對(duì)未分區(qū)表有效。

那些處于表上定義的惟一性約束或主鍵約束中的列必須是分區(qū)鍵的一個(gè)超集(superset)

數(shù)據(jù)類型:LOB 和 LONG 型的列不能作為分區(qū)鍵的一部分

就效率而言,整數(shù)類型的列是最可取的,其次是字符型,然后是小數(shù)。

選擇基數(shù)較大的分區(qū)鍵列,以避免表中的行在各分區(qū)上分布不均衡。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境下,數(shù)據(jù)在不同分區(qū)的分布會(huì)影響表的連接策略。分區(qū)數(shù)據(jù)庫環(huán)境下表連接策略主要包括:

并置連接(Collocated joins)--采用該種連接方式,表的連接以本地方式在數(shù)據(jù)所在的數(shù)據(jù)庫分區(qū)上進(jìn)行,不會(huì)在分區(qū)之間傳輸數(shù)據(jù),這是效率最高的表連接方式。在分區(qū)數(shù)據(jù)環(huán)境下,應(yīng)盡量采用該種連接方式。

定向連接(Directed joins)--采用該種連接方式,一個(gè)表中的數(shù)據(jù)會(huì)按照連接對(duì)中的另一個(gè)表的分區(qū)鍵值重新分發(fā)到其他分區(qū)上來完成表連接操作。它會(huì)在分區(qū)之間移動(dòng)數(shù)據(jù),對(duì)性能會(huì)有一定影響。當(dāng)并置連接及未被采用,DB2優(yōu)化器會(huì)選擇定向連接方式。

廣播連接( Broadcast joins)--采用該種連接方式,一個(gè)表中的所有數(shù)據(jù)會(huì)廣播到另外表所在的所有分區(qū)上來完成表連接操作。如果在分區(qū)之間廣播的數(shù)據(jù)量較大,對(duì)性能影響也會(huì)很大。當(dāng)并置連接及定向表連接未被采用,DB2 優(yōu)化器會(huì)選擇廣播連接方式。

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境下,應(yīng)盡量采用并置連接方式。要使用并置連接方式,被并置的表必須:

在相同的數(shù)據(jù)庫分區(qū)組內(nèi)

分區(qū)鍵必須有相同數(shù)量的列。

分區(qū)鍵中相應(yīng)的列必須是分區(qū)兼容的。

分區(qū)兼容性是在分區(qū)鍵中相應(yīng)列的基本數(shù)據(jù)類型之間定義的。分區(qū)兼容的(partition-compatible)數(shù)據(jù)類型有一個(gè)特性,那就是對(duì)于兩種不同類型的兩個(gè)變量,假設(shè)變量有相同的值,則它們將通過相同的分區(qū)函數(shù)映射到相同的分區(qū)鍵索引。分區(qū)兼容性有以下特征:

內(nèi)部格式用于 DATE、TIME 和 TIMESTAMP。這些類型彼此不兼容,并且沒有哪一個(gè)與 CHAR 或 VARCHAR 兼容。

分區(qū)兼容性不受具有 NOT NULL 或 FOR BIT DATA 定義的列的影響。

對(duì)于兼容數(shù)據(jù)類型的 NULL 值是一致處理的。而不兼容數(shù)據(jù)類型的 NULL 值可能產(chǎn)生不同的結(jié)果。

可以使用 UDT 的基本數(shù)據(jù)類型來分析分區(qū)兼容性。

分區(qū)鍵中具有相同值的小數(shù)是一致處理的,即使它們的標(biāo)度(scale)和精度(precision)不一樣也是如此。

系統(tǒng)提供的散列函數(shù)將忽略字符串(CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC)的結(jié)尾空白。

不同長(zhǎng)度的 CHAR 或 VARCHAR 是兼容的數(shù)據(jù)類型。

相等的 REAL 或 DOUBLE 值,即使它們的精度不同,也將被一致處理。

另外,我們也經(jīng)常使用復(fù)制的具體化查詢表(replicated MQT)來實(shí)現(xiàn)并置連接。我們往往會(huì)選擇更新不多而又經(jīng)常與大表進(jìn)行連接的小表或中等大小的表來作為復(fù)制的具體化查詢表。

下面是對(duì)復(fù)制表的一個(gè)示例定義:

create table t1_rep as (select * from t1) data initially deferred \
refresh deferred in ts_pd_data_001 replicated

下邊的例子,我們?cè)?ts_pd_data_001 表空間上創(chuàng)建一個(gè) LINEITEM 表:

CREATE TABLE "DB2INST1"."LINEITEM" (

"L_ORDERKEY" INTEGER NOT NULL ,

"L_PARTKEY" INTEGER NOT NULL ,

"L_SUPPKEY" INTEGER NOT NULL ,

"L_LINENUMBER" INTEGER NOT NULL ,

"L_QUANTITY" DECIMAL(15,2) NOT NULL ,

"L_EXTENDEDPRICE" DECIMAL(15,2) NOT NULL ,

"L_DISCOUNT" DECIMAL(15,2) NOT NULL ,

"L_TAX" DECIMAL(15,2) NOT NULL ,

"L_RETURNFLAG" CHAR(1) NOT NULL ,

"L_LINESTATUS" CHAR(1) NOT NULL ,

"L_SHIPDATE" DATE NOT NULL ,

"L_COMMITDATE" DATE NOT NULL ,

"L_RECEIPTDATE" DATE NOT NULL ,

"L_SHIPINSTRUCT" CHAR(25) NOT NULL ,

"L_SHIPMODE" CHAR(10) NOT NULL ,

"L_COMMENT" VARCHAR(44) NOT NULL )

DISTRIBUTE BY HASH("L_ORDERKEY")

IN " ts_pd_data_001"

#p#

數(shù)據(jù)庫分區(qū)管理相關(guān)命令

確定編目分區(qū)

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中, ROLLFORWARD DATABASE 等命令需要在編目分區(qū)上執(zhí)行。我們可以通過 LIST DATABASE DIRECTORY 命令來確定編目分區(qū)。

db2 LIST DATABASE DIRECTORY

分區(qū)切換

在 DB2 數(shù)據(jù)庫分區(qū)環(huán)境中,我們可以通過設(shè)置 DB2NODE 環(huán)境變量 或使用 set client 命令進(jìn)行分區(qū)間的切換。

export DB2NODE=2
db2 terminate
OR
db2 set client connect_dbpartitionnum 2

增加數(shù)據(jù)庫分區(qū)

該命令會(huì)自動(dòng)在 db2nodes.cfg 中增加新定義的分區(qū)信息,并在新的數(shù)據(jù)庫分區(qū)上創(chuàng)建

TEMPSPACE1 表空間。

我們也可以用如下命令增加數(shù)據(jù)庫分區(qū):

export DB2NODE=4
db2 terminate
db2 connect to testdb
db2 ADD DBPARTITIONNUM

使用該命令時(shí),必須事先修改 db2nodes.cfg 文件包含新定義的分區(qū)信息,并在新增加的數(shù)據(jù)庫分區(qū)上執(zhí)行該命令。

刪除數(shù)據(jù)庫分區(qū)

在刪除數(shù)據(jù)庫分區(qū)時(shí),只有那些不包含數(shù)據(jù)的分區(qū)才可以被刪除。因此,在刪除分區(qū)時(shí),必須要先執(zhí)行 DROP PARTITIONNUM VERIFY 命令檢查一下該分區(qū)是否可以被刪除。如果某一個(gè)分區(qū)正在被使用,要先執(zhí)行 REDISTRIBUTE DATABASE PARTITION GROUP 命令將該分區(qū)上的數(shù)據(jù)分布到其他分區(qū)上。

export DB2NODE=4
db2 TERMINATE
db2 DROP DBPARTITIONNUM VERIFY
SQL6034W Node "4" is not being used by any databases.
db2stop DROP DBPARTITIONNUM 4

如果數(shù)據(jù)庫分區(qū) 4 上有數(shù)據(jù),則執(zhí)行下述命令:

redistribute database partition group pg123 uniform drop dbpartitionnum (4)
db2 for application all
export DB2NODE=4
db2 drop dbpartitionnum verify
db2stop drop dbpartitionnum 4

查看數(shù)據(jù)庫分區(qū)組

db2 LIST DATABASE PARTITION GROUPS SHOW DETAIL

重新分布數(shù)據(jù)庫分區(qū)組數(shù)據(jù)

db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 UNIFORM"
or
db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 using TARGETMAP pg123.map"

增加數(shù)據(jù)庫分區(qū)到數(shù)據(jù)庫分區(qū)組中

db2 "ALTER DATABASE PARTITION GROUP pg123 ADD DBPARTITIONNUMS (4) WITHOUT TABLESPACES"
db2 "REDISTRIBUTE DATABASE PARTITION GROUP pg123 UNIFORM"

從數(shù)據(jù)庫分區(qū)組中刪除數(shù)據(jù)庫分區(qū)

db2 drop dbpartitionnum verify
SQL6034W Node "4" is not being used by any databases.
db2stop DROP DBPARTITIONNUM 4

刪除數(shù)據(jù)庫分區(qū)組

db2 "DROP DATABASE PARTITION GROUP pg123"

查看表中的數(shù)據(jù)在各分區(qū)的分布情況

SELECT DBPARTITIONNUM(distribution key), COUNT( * )
FROM schema.table
GROUP BY DBPARTITIONNUM(distribution key)
ORDER BY DBPARTITIONNUM(distribution key)

查看表中的數(shù)據(jù)在分區(qū)圖(partition map)中的分布情況

SELECT HASHEDVALUE(distribution key), COUNT( * )
FROM schema.table
GROUP BY HASHEDVALUE(distribution key)
ORDER BY HASHEDVALUE(distribution key)

DB2 分區(qū)數(shù)據(jù)庫相關(guān)實(shí)用程序

db2_all 命令

在 DB2 分區(qū)環(huán)境下,很多操作都需要在各個(gè)分區(qū)上分別執(zhí)行,如果每次都要到各個(gè)分區(qū)上單獨(dú)執(zhí)行,對(duì)用戶來說非常繁瑣。在 DB2 中,可以使用 db2_all 命令,它可以在指定的所有數(shù)據(jù)庫分區(qū)服務(wù)器上運(yùn)行該命令?!?/P>

db2_all "db2 UPDATE DB CFG FOR TESTDB USING LOGRETAIN ON"
db2_all ";db2 UPDATE DB CFG FOR TESTDB USING LOGRETAIN ON"
db2_all "db2 CONNECT TO testdb ;db2 LIST TABLESPACES SHOW DETAIL"

rah 命令

它指定在所有計(jì)算機(jī)上運(yùn)行該命令。

如果想為多臺(tái)物理機(jī)器創(chuàng)建一個(gè)目錄,那么可以發(fā)出下面的命令

rah ")mkdir /tmp/$USER“

數(shù)據(jù)庫備份

要備份分區(qū)數(shù)據(jù)庫,您必須要首先在編目分區(qū)上調(diào)用備份實(shí)用程序,然后在其他數(shù)據(jù)庫分區(qū)上調(diào)用備份實(shí)用程序。

db2_all "<<+0< db2 BACKUP DB testdb to /home/db2inst1/BACKUPS"
db2_all "|<<-0< db2 BACKUP DB testdb ONLINE to /home/db2inst1/BACKUPS"

 

其中,“+0”表示只在 0 號(hào)分區(qū)上執(zhí)行,“-0”表示在除了 0 號(hào)分區(qū)之外的所有分區(qū)上執(zhí)行。

在版本 9.5 之前,您必須一次一個(gè)數(shù)據(jù)庫分區(qū)地備份分區(qū)數(shù)據(jù)庫。一次一個(gè)數(shù)據(jù)庫分區(qū)地備份多個(gè)數(shù)據(jù)庫分區(qū)可能會(huì)出錯(cuò)并且費(fèi)時(shí)。如果一次一個(gè)數(shù)據(jù)庫分區(qū)地備份分區(qū)數(shù)據(jù)庫,那么您無法在備份映像中包括復(fù)原和恢復(fù)所需要的日志文件。在版本 9.5 中,您可以通過在 b 編目數(shù)據(jù)庫分區(qū)上執(zhí)行單一系統(tǒng)視圖(SSV)備份同時(shí)備份多個(gè)數(shù)據(jù)庫分區(qū)。您從編目數(shù)據(jù)庫分區(qū)執(zhí)行備份操作時(shí),可以使用 ON DBPARTITIONNUMS 選項(xiàng)來指定要在備份中包含哪些分區(qū)。它將同時(shí)備份指定的分區(qū),并且與指定的分區(qū)相關(guān)聯(lián)的備份時(shí)間戳記將相同。此外,您還可以在 SSV 備份中包含數(shù)據(jù)庫日志。

db2 BACKUP DATABASE testdb ON DBPARTITIONNUMS (1, 2) \
TABLESPACE (USERSPACE1) ONLINE USE TSM
Or
db2 backup db testdb on all dbpartitionnums tablespace(T1)

監(jiān)控?cái)?shù)據(jù)庫備份命令執(zhí)行情況

export DB2NODE=0
db2 terminate
db2 LIST UTILITIES SHOW DETAIL

數(shù)據(jù)庫恢復(fù)

要恢復(fù)分區(qū)數(shù)據(jù)庫,您必須要首先在編目分區(qū)上調(diào)用恢復(fù)實(shí)用程序,然后在其他數(shù)據(jù)庫分區(qū)上調(diào)用恢復(fù)實(shí)用程序。

db2_all "<<+0< db2 RESTORE DATABASE testdb \
FROM /home/db2inst1/BACKUPS INTO testdb REPLACE EXISTING"
db2_all "<<-0< db2 RESTORE DATABASE testdb \
FROM /home/db2inst1/BACKUPS INTO testdb REPLACE EXISTING"

 

前滾恢復(fù)(ROLLFORWARD DATABASE)

在分區(qū)數(shù)據(jù)庫中,ROLLFORWARD DATABASE 命令只能在編目分區(qū)上運(yùn)行。如果需要前滾恢復(fù)數(shù)據(jù)庫或表空間到某一時(shí)間點(diǎn)(point in time ),則該命令會(huì)涉及到db2nodes.cfg 文件中定義的所有數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)。如果需要根據(jù)整個(gè)事務(wù)日志(to the end of logs)來前滾恢復(fù)數(shù)據(jù)庫或表空間, 則該命令會(huì)涉及到所有指定的數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)。如果沒有指定數(shù)據(jù)庫分區(qū),該命令會(huì)涉及到db2nodes.cfg 文件中定義的所有數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)。如果某一分區(qū)不需要執(zhí)行前滾恢復(fù),則該分區(qū)會(huì)被忽略掉。

當(dāng)數(shù)據(jù)庫處于一致狀態(tài)時(shí)(當(dāng)數(shù)據(jù)庫目錄中列示的對(duì)象與磁盤中實(shí)際存在的對(duì)象匹配時(shí)),最小恢復(fù)時(shí)間是前滾期間的最早時(shí)間點(diǎn)。手動(dòng)確定要將數(shù)據(jù)庫前滾至的正確時(shí)間點(diǎn)比較困難,尤其是對(duì)于分區(qū)數(shù)據(jù)庫更是如此。在版本 9.5 中,通過在 ROLLFORWARD DATABASE 命令中使用 TO END OF BACKUP 參數(shù),可以將數(shù)據(jù)庫前滾至由數(shù)據(jù)庫管理器確定的最小恢復(fù)時(shí)間。

前滾恢復(fù)分區(qū) 0 及分區(qū) 2 上的表空間TBS1: 

db2 rollforward db testdb to end of logs on dbpartitionnums (0, 2) tablespace(TBS1)

前滾恢復(fù)分區(qū) 6 上的 6 個(gè)小表:

db2 rollforward database testdb to end of logs on dbpartitionnum (6) \
tablespace(tsstore, tssbuyer, tsstime, tsswhse, tsslscat, tssvendor)

前滾至由數(shù)據(jù)庫管理器確定的最小恢復(fù)時(shí)間:

db2 rollforward db testdb to end of backup and complete

EXPORT 命令

export 用于將表中的數(shù)據(jù)卸載到文件中。

db2 "EXPORT TO lineitem.del OF DEL SELECT * FROM db2inst1.lineitem"

在分區(qū)數(shù)據(jù)庫環(huán)境下,import 或 LOAD 命令不支持 IFX 文件格式。

IMPORT 命令

用于將外部文件中的數(shù)據(jù)插入到表中。

db2 "IMPORT FROM lineitem.tbl OF DEL MODIFIED BY COLDEL| \
COMMITCOUNT 100000 REPLACE INTO lineitem"

LOAD 命令

在多分區(qū)數(shù)據(jù)庫環(huán)境中,大量的數(shù)據(jù)放在多個(gè)數(shù)據(jù)庫分區(qū)中。分區(qū)鍵用來確定每部分?jǐn)?shù)據(jù)所在的數(shù)據(jù)庫分區(qū)。必須先分布數(shù)據(jù),然后才能將該數(shù)據(jù)裝入到正確的數(shù)據(jù)庫分區(qū)中。

在多分區(qū)數(shù)據(jù)庫中裝入表時(shí),load 實(shí)用程序可以:

并行地分布輸入數(shù)據(jù)

同時(shí)在各個(gè)相應(yīng)數(shù)據(jù)庫分區(qū)中裝入數(shù)據(jù)

將數(shù)據(jù)裝入到多分區(qū)數(shù)據(jù)庫中分兩階段完成:第一階段為設(shè)置階段,在此階段獲取數(shù)據(jù)庫分區(qū)資源(如表鎖定);第二階段為裝入階段,在此階段將數(shù)據(jù)裝入到數(shù)據(jù)庫分區(qū)中。在將數(shù)據(jù)裝入多分區(qū)數(shù)據(jù)庫時(shí),可以使用下列其中一種方式:

PARTITION_AND_LOAD

對(duì)數(shù)據(jù)進(jìn)行分布(有可能以并行方式進(jìn)行分布),并且同時(shí)在各個(gè)相應(yīng)數(shù)據(jù)庫分區(qū)上裝入數(shù)據(jù)。

PARTITION_ONLY

對(duì)數(shù)據(jù)進(jìn)行分布(有可能以并行方式進(jìn)行分布),并將輸出寫入每個(gè)裝入數(shù)據(jù)庫分區(qū)上指定位置中的文件。每個(gè)文件都包含分區(qū)頭,該分區(qū)頭指定數(shù)據(jù)在數(shù)據(jù)庫分區(qū)上的分布方式,并指定可以使用 LOAD_ONLY 方式將該文件裝入到數(shù)據(jù)庫中。

LOAD_ONLY

假定數(shù)據(jù)已分布在數(shù)據(jù)庫分區(qū)上;將跳過分布過程,并且在相應(yīng)的數(shù)據(jù)庫分區(qū)上同時(shí)裝入數(shù)據(jù)。

ANALYZE

生成最佳分布圖(在所有數(shù)據(jù)庫分區(qū)之間均勻地分布數(shù)據(jù))。

下邊是 LOAD 命令的一些示例:

要將 load.del 中的數(shù)據(jù)裝入到所有定義了 TABLE1 的數(shù)據(jù)庫分區(qū)中,請(qǐng)發(fā)出以下命令: 

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1

要在數(shù)據(jù)分布在數(shù)據(jù)庫分區(qū) 3 和數(shù)據(jù)庫分區(qū) 4 上的位置執(zhí)行裝入操作,請(qǐng)發(fā)出以下命令:

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1 PARTITIONED DB \
CONFIG PARTITIONING_DBPARTNUMS (3,4)

在使用數(shù)據(jù)庫分區(qū) 3 和數(shù)據(jù)庫分區(qū) 4 的情況下,要將 load.del 分布(而不裝入)到所有定義 TABLE1 的數(shù)據(jù)庫分區(qū)中,請(qǐng)發(fā)出以下命令:

LOAD FROM LOAD.DEL of DEL REPLACE INTO TABLE1 PARTITIONED DB
  CONFIG MODE PARTITION_ONLY
  PART_FILE_LOCATION /db2/data PARTITIONING_DBPARTNUMS (3,4)

如果已經(jīng)以 PARTITION_ONLY 方式執(zhí)行了裝入操作,并且要將每個(gè)裝入數(shù)據(jù)庫分區(qū)的 /db2/data 目錄中的分區(qū)文件裝入到所有定義了 TABLE1 的數(shù)據(jù)庫分區(qū)中,請(qǐng)發(fā)出以下命令:

LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED
  DB CONFIG MODE LOAD_ONLY
  PART_FILE_LOCATION /db2/data

要僅裝入到數(shù)據(jù)庫分區(qū) 4 中,請(qǐng)發(fā)出以下命令:

LOAD FROM LOAD.DEL OF DEL REPLACE INTO TABLE1 PARTITIONED
DB CONFIG MODE LOAD_ONLY
PART_FILE_LOCATION /db2/data OUTPUT_DBPARTNUMS (4)

REORG 命令

在分區(qū)數(shù)據(jù)庫中,同樣使用DB2 REORG 命令重組表及索引。

db2 "REORG INDEXES ALL FOR TABLE lineitem ALLOW WRITE ACCESS"
  db2 "REORG TABLE lineitem INPLACE ALLOW WRITE ACCESS ON ALL DBPARTITIONNUMS"

RUNSTATS 命令

在分區(qū)數(shù)據(jù)庫中,同樣使用RUNSTATS命令收集統(tǒng)計(jì)信息。

db2 "RUNSTATS ON TABLE db2inst1.lineitem WITH DISTRIBUTION AND \
  DETAILED INDEXES ALL ALLOW WRITE ACCESS"

在分區(qū)數(shù)據(jù)庫中,RUNSTATS 命令運(yùn)行時(shí)所在分區(qū)的統(tǒng)計(jì)信息才會(huì)被收集,再對(duì)這些統(tǒng)計(jì)信息加以推斷(前提是行在各分區(qū)上是均勻分布的)以反映整個(gè)數(shù)據(jù)庫。這意味著,SYSCAT.TABLES 中的 CARD 列可能不包含該表中確切的行數(shù)。我們要盡量讓數(shù)據(jù)均勻地分布在各分區(qū)上。

結(jié)論

本文以 Balanced Warehouse E7100 為例,為大家介紹了數(shù)據(jù)庫分區(qū)設(shè)計(jì)、實(shí)現(xiàn)及管理的基本方法。希望大家能夠?qū)?DB2 數(shù)據(jù)庫分區(qū)技術(shù)及使用有一個(gè)比較全面的了解。另外,關(guān)于數(shù)據(jù)庫分區(qū)監(jiān)控及性能調(diào)優(yōu)等方面內(nèi)容,大家可以參考 DB2 信息中心相關(guān)內(nèi)容。

db2start DBPARTITIONNUM 4 ADD DBPARTITIONNUM HOSTNAME Clyde PORT 4

【編輯推薦】

  1. DB2 Version 9.5 pureXML的增強(qiáng)和新特性
  2. DB2 9存儲(chǔ)過程的規(guī)劃和實(shí)施技巧
  3. DB2數(shù)據(jù)庫性能優(yōu)化技巧詳解
責(zé)任編輯:book05 來源: it158
相關(guān)推薦

2010-08-19 16:47:14

DB2 9.5分區(qū)管理

2010-08-26 16:15:25

DB2數(shù)據(jù)庫管理

2010-08-13 15:42:22

DB2數(shù)據(jù)庫分區(qū)

2010-08-20 13:17:50

DB2數(shù)據(jù)庫分區(qū)管理

2010-08-03 14:40:05

DB2數(shù)據(jù)庫

2010-11-02 10:35:59

DB2分區(qū)數(shù)據(jù)庫

2010-08-06 09:39:27

DB2數(shù)據(jù)庫分區(qū)

2010-08-26 10:37:40

DB2Q復(fù)制

2010-08-05 09:03:27

DB2 9.5高可用性

2010-08-04 13:37:43

2011-03-25 15:39:47

DB2 9數(shù)據(jù)庫

2010-08-25 10:50:48

DB2數(shù)據(jù)庫

2011-03-11 16:02:03

DB2數(shù)據(jù)庫安裝

2010-11-02 10:16:22

DB2分區(qū)數(shù)據(jù)庫備份

2009-06-25 10:30:30

2010-08-05 16:08:12

輕松掌握DB2 9.5

2011-06-20 06:22:18

ibmdwDB2

2010-11-01 11:30:41

DB2數(shù)據(jù)庫權(quán)限

2010-09-30 11:49:21

DB2數(shù)據(jù)庫權(quán)限

2010-11-03 16:21:18

DB2數(shù)據(jù)庫授權(quán)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)