db2move和幾個常用的db2命令

lars發表於2010-04-13

db2move 是一個資料移動工具,可以用來在 DB2 資料庫之間移動大量的表。該命令中支援的操作有 EXPORT、IMPORT 和 LOAD。
db2move 的語法可以象下面那樣簡單:
db2move database_name action options

該工具先從系統目錄表中抽取使用者表列表,接著以 PC/IXF 格式匯出每個表。然後,可以將這些 PC/IXF 檔案匯入或裝入到另一個
DB2 資料庫。
以下是一些示例。下面這條命令用指定的使用者標識和密碼以 REPLACE 方式匯入 sample 資料庫中的所有表:

db2move sample import -io replace -u userid -p password
而下面這條命令則以 REPLACE 方式裝入 db2admin 和 db2user 模式下的所有表:

db2move sample load -sn db2admin, db2user -lo REPLACE
   ##db2look 是一個方便的工具,可以從命令提示符或控制中心對其進行呼叫。該工具可以:

從資料庫物件抽取資料庫定義語言(DDL)語句
生成 UPDATE 語句來更新資料庫管理器和資料庫配置引數
生成 db2set 命令來設定 DB2 概要檔案登錄檔
抽取和生成資料庫統計報告
生成 UPDATE 語句來複制有關資料庫物件的統計資訊
類似 LOAD 的實用程式都要求存在目標表。您可以使用 db2look 來抽取表的 DDL,對目標資料庫執行該 DLL,然後呼叫裝入操作。如同下面
的示例所演示的那樣,db2look 使用起來非常方便。下面這條命令為(來自資料庫 department 的)peter 所建立的所有物件生成 DDL 語句,
同時將輸出儲存在 alltables.sql 中。


db2look -d department -u peter -e -o alltables.sql


接下來這條命令生成:

資料庫 department 中所有物件的 DLL(由選項 -d、-a 和 -e 指定)。
複製資料庫中所有表和索引的統計資訊的 UPDATE 語句(由選項 -m 指定)。
GRANT 授權語句(由選項 -x 指定)。
用於資料庫管理器和資料庫配置引數的 UPDATE 語句,以及用於概要檔案登錄檔的 db2set 命令(由選項 -f 指定)。

db2look -d department -a -e -m -x -f -o db2look.sql

##RUNSTATS 實用程式

DB2 利用一個完善的、基於成本的優化器來確定如何訪問資料。其決策在很大程度上受到了一些統計資訊的影響,這些統計資訊是關於資料庫
表和索引的大小的。因此,要時刻使資料庫統計資訊保持最新狀態,以便能夠選擇有效的資料存取方案,這一點十分重要。RUNSTATS 實用程
序用於更新表的物理特徵及其相關索引的統計資訊。這些特徵包括記錄數(基數)、頁數和平均記錄長度等。
讓我們用一些示例來演示此實用程式的用法。下面的命令收集表 db2user.employee 的統計資訊。在計算統計資訊期間允許閱讀器和記錄器訪
問該表:

RUNSTATS ON TABLE db2user.employee ALLOW WRITE ACCESS

以下命令用分散式統計收集表 db2user.employee 以及列 empid 和 empname 的統計資訊。在此命令執行期間,該表只能用於只讀請求。

RUNSTATS ON TABLE db2user.employee WITH DISTRIBUTION ON COLUMNS ( empid, empname )
    ALLOW READ ACCESS
以下命令收集表 db2user.employee 的統計資訊及其全部索引的詳細統計資訊:

RUNSTATS ON TABLE db2user.employee AND DETAILED INDEXES ALL

##REORG 和 REORGCHK 實用程式

從資料庫增刪的資料在物理上可能並不是按順序放置的。在這種情況下,DB2 必須執行額外的讀操作來訪問資料。通常,這意味著需要更多的
磁碟 I/O 操作,而我們都知道進行這類操作的代價是昂貴的。在這種情況下,您應該考慮根據索引對錶進行物理上的重組,以便相關資料相
互之間靠得更近一些,從而儘可能地減少 I/O 操作。
REORG 是一個為表和/或索引重組資料的實用程式。雖然在物理上對資料進行了重新安排,但 DB2 卻提供了聯機或離線執行該操作的選項。
在預設情況下,離線 REORG 允許其他使用者讀取該表。您可以通過指定 ALLOW NO ACCESS 選項來限制表訪問。聯機 REORG(也稱為現場 REORG)
不支援對錶的讀訪問或寫訪問。由於重新安排了資料頁,因此併發應用程式可能必須等待 REORG 完成當前頁。您可以使用適當的選項來輕鬆
地停止、暫停或重新開始重組過程:
下面的示例都是非常容易看懂的:

REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE ALLOW WRITE ACCESS
REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE PAUSE

REORGCHK 是另一個資料維護實用程式,它有一個選項可以用來檢索當前的資料庫統計資訊或更新資料庫統計資訊。它還會生成帶有 REORG
指示符的統計資訊報告。REORGCHK 根據統計規則在需要 REORG 的地方用星號(*)標記表或索引。
讓我們考慮一些示例。下面這條命令生成當前(關於執行時授權標識擁有的全部表的)統計資訊的報告:
REORGCHK CURRENT STATISTICS ON TABLE USER

下面的命令更新統計資訊,然後生成在模式 smith 下建立的全部表的報告:

REORGCHK UPDATE STATISTICS ON SCHEMA smith

##REBIND 實用程式和 FLUSH PACKAGE CACHE 命令

在執行資料庫應用程式或任何 SQL 語句之前,必須先由 DB2 對它們進行預編譯,並生成一個包。包是一種資料庫物件,其中含有應用程式
原始檔中所使用的已編譯 SQL 語句。DB2 使用該包來訪問 SQL 語句中引用的資料。DB2 優化器如何為這些包選擇資料存取方案呢?它依靠
包建立時的資料庫統計資訊。
對於靜態 SQL 語句,包在編譯時建立,並且被繫結到資料庫上。如果對統計資訊進行了更新,以反映物理資料庫特徵,那麼也應該更新現有
的包。REBIND 實用程式允許您重新建立包,以便可以利用當前的資料庫統計資訊。命令十分簡單:

REBIND PACKAGE package_name


不過,如果您要更改應用程式原始碼,那麼就得顯式地刪除現有的相關包,然後重新建立包。REBIND 實用程式不用於這一目的。這裡,
我們之所以就此對您加以提醒,是因為 DBA 經常誤解了 REBIND 的用法。
對於動態 SQL 語句,它們是在執行時預編譯的,而且被儲存在包快取記憶體中。如果更新了統計資訊,那麼您可能會重新整理快取記憶體,以便
重新編譯動態 SQL 語句,從而獲取更新的統計資訊。命令類似下面的樣子:

FLUSH PACKAGE CACHE DYNAMIC

##資料庫維護過程
RUNSTATS -- REORGCHK--YES--REORG
              |      |
              |      |
              NO   |----- RUNSTATS
              |----|---------|
              REBIND      FLUSH PACKAGE CACHE
                 |      |
                 APPLICATION EXECUTION
                
##DB2效能顧問程式
1,圖形化工具CONFIGURATION ADVISOR
2,CLP AUTOCONFIGURE USING mem_percent 60 workload_type complex num_stmts 20 APPLY DB AND DBM

##DB2 設計顧問程式

設計顧問程式可以幫您找到 SQL 語句的最佳索引。它使用 DB2 優化器、資料庫統計資訊和解釋(Explain)
機制來為特定查詢或一組 SQL 語句(也稱為工作負載)生成推薦索引。您可以從命令列用 db2advis 加上必要的輸入啟動該顧問程式。
下面的示例使用輸入檔案
input.sql 對 sample 資料庫執行設計顧問程式,該輸入檔案含有一組 SQL 語句。然後將輸出儲存在 output.out 中。
db2advis -d sample -i input.sql -o output.out

圖形化工具:desigen Advisor

### 備份與恢復

##資料庫恢復概念
系統故障,事務故障,介質故障,災難。
#恢復策略
    問題:可以再次從另一個來源裝入資料嗎?能夠承受丟失多少資料?
          能化多少時間來恢復資料庫?哪些儲存資源可用於儲存備份和日誌?
#恢復型別
    崩潰恢復(系統崩潰,DB2重新啟動執行回滾),版本恢復(使用從BACKUP命令
    獲取的備份中恢復先前的資料庫版本),前滾恢復(通過使用完全資料庫備份,結合
    日誌檔案來擴充套件版本恢復,要求使用歸檔日誌記錄)
    db2採用先寫日誌後寫磁碟資料庫的方式。
#主日誌檔案和輔助日誌檔案
    主日誌檔案是在首次資料庫連線時或資料庫啟用時直接分配的。輔助日誌檔案需要時每次動態地分配一個。

有幾個與日誌記錄相關的資料庫配置引數。其中一些引數是:

LOGPRIMARY:該引數確定要分配的主日誌檔案數。
LOGSECOND:該引數確定可分配的輔助日誌檔案的最大數目。(最大254)
LOGFILSIZ:該引數用於指定日誌檔案的大小(用 4 KB 頁為單位)。
讓我們考慮一個示例。假設資料庫配置檔案中有下列值:

Log file size (4 KB)                        (LOGFILSIZ) = 250
Number of primary log files                (LOGPRIMARY) = 3
Number of secondary log files               (LOGSECOND) = 2
Path to log files                                       = C:/mylogs/

一旦首次建立與資料庫的連線,就分配三個主日誌檔案,它們均由 250 個 4 KB 頁組成。
DB2 將填滿第一個日誌,然後繼續填滿第二個和第三個日誌。填滿第三個日誌檔案後,沒有更多的主
(預分配的)日誌檔案,因此 DB2 將動態地分配第一個輔助日誌檔案,因為 LOGSECOND 大於零。一旦
這個日誌檔案被填滿,DB2 將繼續分配另一個輔助日誌檔案,並將重複該過程,直到達到 LOGSECOND 日
志檔案數目的最大值為止。對於該示例,當 DB2 嘗試分配第三個輔助日誌檔案時,它將返回一個錯誤,
指出已經達到事務滿條件。此時,將回滾該事務。

#無限日誌記錄
要允許無限的活動日誌記錄:

將 USEREXIT 資料庫配置引數設定為 ON。
將 LOGSECOND 設定為值 -1。
#日誌型別
活動日誌。如果滿足下面兩個條件中的任何一個,則認為該日誌是活動的:
它包含有關還未提交或回滾的事務的資訊。
它包含有關已經提交但其更改還未被寫入資料庫磁碟(外部化)的事務的資訊。
聯機歸檔日誌。這種型別的日誌包含已提交的且已外部化的事務的資訊。這種日誌被儲存在與活動日誌相同的目錄中。
離線歸檔日誌。是指已經從活動日誌目錄移動到另一個目錄或介質的歸檔日誌。可以手工或使用使用者出口(userexit)
的自動過程來完成這個移動。

   ##日誌記錄型別
   迴圈日誌型別:迴圈日誌記錄是 DB2 的預設日誌記錄方式。從其名稱可以知道,這種型別的日誌記錄以迴圈方式重用日誌。例如,如果
有四個主日誌檔案
   ,那麼 DB2 將以如下順序使用它們:Log #1,Log #2,Log #3,Log #4,Log #1,Log #2 等。
只要日誌僅包含有關已經提交的且被外部化到資料庫磁碟的事務的資訊,就可以用迴圈日誌記錄方式重用它。換言之,如果日誌仍
是一個活動日誌,則不能重用它。
採用上面的示例,如果一個長期執行的事務使用五個日誌,那麼將發生什麼情況呢?
在這種情況下,DB2 將分配另一個日誌檔案 — 輔助日誌檔案,

歸檔日誌記錄。同樣,可以從其名稱知道,當使用歸檔日誌記錄時,將歸檔(保留)日誌。在迴圈日誌記錄中,要覆蓋已提交且已外部化的
事務,而在歸檔日誌記錄中,將儲存它們。
例如,如果有四個主日誌,DB2 可能以如下順序使用它們:Log #1,Log #2,Log #3,Log #4,(如果 Log #1 的所有事務都已被提
交且外部化,則將其歸檔),Log #5,
(如果 Log #2 的所有事務都已被提交且外部化,則將其歸檔),Log #6 等。
正如您從上面的示例所看到的那樣,DB2 將使四個主日誌檔案保持可用,並且將不重用那些已經用某些事務填滿的日誌檔案,這些
事務已經被提交且外部化。換言之,
它不會覆蓋已變成歸檔日誌的日誌。
注:在使用歸檔日誌記錄之前,需要啟用它。要啟用它,必須同時開啟下列引數或開啟其中的任意一個:

LOGRETAIN (db2 update db cfg for database_name using LOGRETAIN ON)
USEREXIT (db2 update db cfg for database_name using USEREXIT ON)
迴圈日誌記錄僅支援崩潰和版本恢復,而歸檔日誌記錄支援所有型別的恢復:崩潰恢復、版本恢復和前滾恢復。

使用者出口

我們在前幾章中多次提到使用者出口。使用者出口是允許將聯機歸檔日誌移到另一個目錄(非活動日誌目錄)或另一個介質的程式。當為完全資料庫
恢復進行 ROLLFORWARD 操作期間需要離線歸檔日誌時,使用者出口還會將它們檢索到活動日誌目錄中。要啟用使用者出口,將 USEREXIT 資料庫配置參
數設定為 ON。一旦啟用,DB2 將根據需要自動呼叫使用者出口程式。需要將該程式命名為 db2uext2,在 Windows 中,應該將它儲存在 sqllib/bin
目錄中,在 UNIX 中,應該將它儲存在 sqllib/bin 目錄中。

## 資料庫和表空間備份

#資料庫備份 第 2 頁(共6 頁)

 


資料庫備份是資料庫的完整副本。除了資料外,備份副本還會包含有關表空間、容器、資料庫配置、日誌控制檔案以及恢復歷史記錄檔案的資訊。注:備份將不儲存資料庫管理器配置檔案或登錄檔變數。只備份資料庫配置檔案。

要執行備份,需要 SYSADM、SYSCTRL 或 SYSMAINT 許可權。

下面是用於這種備份的 BACKUP 命令實用程式的語法:


BACKUP DATABASE database-alias [USER username [USING password]]
      [TABLESPACE (tblspace-name [ {,tblspace-name} ... ])] [ONLINE]
      [INCREMENTAL [DELTA]] [USE {TSM | XBSA} [OPEN num-sess SESSIONS]] |
   TO dir/dev [ {,dir/dev} ... ] | LOAD lib-name [OPEN num-sess SESSIONS]]
      [WITH num-buff BUFFERS] [BUFFER buffer-size] [PARALLELISM n]
      [WITHOUT PROMPTING]


要使用其它備份選項來執行資料庫“sample”的完全離線備份,可以使用以下命令:


(1) BACKUP DATABASE sample                     
(2)   TO /db2backup/dir1, /db2backup/dir2    
(3)   WITH 4 BUFFERS                         
(4)   BUFFER 4096                            
(5)   PARALLELISM 2                          


讓我們更仔細地研究該命令:

指明要備份的資料庫的名稱(或別名)。
指定用來儲存備份的一個或多個位置。
確定在備份操作期間可以使用記憶體中的多少緩衝區。使用多個緩衝區可以改善效能。
確定每個緩衝區的大小。
確定使用多少個介質閱讀器/記錄器程式/執行緒來執行備份。
注:語法中沒有關鍵字 OFFLINE,因為這是預設方式。要執行 sample 資料庫的完全聯機備份,必須指定關鍵字 ONLINE,如下所示:


BACKUP DATABASE sample                  
ONLINE                              
TO /dev/rdir1, /dev/rdir2           


我們先前提到過:聯機備份允許其他使用者在備份資料庫時對它進行訪問。這些使用者所做的一些更改很可能在備份時沒有儲存在備份副本中。
因此,恢復時需要聯機備份和一組完整的歸檔日誌。此外,聯機備份一完成,DB2 就強制當前的活動日誌關閉;結果,將歸檔該日誌。

注:聯機備份要求為資料庫啟用歸檔日誌記錄。 DB CFG: LOGHEAD指向活動的最低編號的日誌,小於LOGHEAD的日誌
是歸檔日誌且可以移動。可以使用ARCHIVE LOG 命令來對日誌進行歸檔。

 

#表空間備份
   在只有一些表空間有相當大更改的資料庫中,可以選擇不備份整個資料庫,而只備份特定表空間。
要執行表空間備份,請使用以下語法:

(1) BACKUP DATABASE sample
(2) TABLESPACE ( syscatspace, userspace1, userspace2 )
(3) ONLINE
(4) TO /db2tbsp/backup1, /db2tbsp/backup2
通常,您想要將相關的表空間備份在一起,如資料,索引,LOB
或定義了表間引用約束的表的表空間

注意:此備份方式只能用於ARCHIVAL LOGGIN 環境中。

#增量備份
有兩種型別的增量備份:

增量:DB2 備份自上次完全資料庫備份以來所更改的所有資料。
delta:DB2 將只備份自上一次成功的完全、增量或差異備份以來所更改的資料。

注意:要執行增量備份,DB CFG中的TRACKMOD必須設定為 YES(跟蹤表空間中發生變化的頁面).
在控制中心執行備份。

#備份檔案
磁碟上的 DB2 備份檔案的命名約定包含下列幾項:

資料庫別名
表示備份型別的數字(0 表示完全資料庫備份,3 表示表空間備份,4 表示來自 LOAD 的副本)
例項名
資料庫節點(對於單一分割槽資料庫始終是 NODE0000)
目錄節點號(對於單一分割槽資料庫始終是 CATN0000)
備份的時間戳記
映像序列號

分割槽資料庫的備份:
In the following example, the database WSDB is defined on all 4 partitions,
numbered 0 through 3. The path /dev3/backup is accessible from all
partitions. Partition 0 is the catalog partition, and needs to be backed-up
separately since this is an offline backup. To perform an offline backup of all
the WSDB database partitions to /dev3/backup, issue the following
commands from one of the database partitions:

db2_all ’<<+0< db2 BACKUP DATABASE wsdb TO /dev3/backup’
db2_all ’|<<-0< db2 BACKUP DATABASE wsdb TO /dev3/backup’


##資料庫和表空間恢復
#資料庫恢復

下面是 RESTORE 命令的語法:


RESTORE DATABASE source-database-alias { restore-options | CONTINUE | ABORT }

restore-options:
[USER username [USING password]] [{TABLESPACE [ONLINE] |
TABLESPACE (tblspace-name [ {,tblspace-name} ... ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory]
[INTO target-database-alias] [NEWLOGPATH directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]


讓我們研究一個示例。要執行 sample 資料庫的恢復,請使用以下命令:


(1)RESTORE DATABASE sample
(2) FROM C:/DBBACKUP
(3) TAKEN AT 20030314131259
(4) WITHOUT ROLLING FORWARD
(5) WITHOUT PROMPTING


讓我們更仔細地研究該命令:

指明要恢復的資料庫映像的名稱。
指定要從什麼位置讀取輸入備份檔案。
如果目錄中有多個備份映像,那麼該選項將根據時間戳記(它是備份名稱的一部分)確定特定的備份。
如果為資料庫啟用了歸檔日誌記錄,那麼當恢復該資料庫時,它將自動被置於前滾暫掛狀態。這行告訴 DB2 不要使資料庫處於前滾暫掛狀態。
在執行 RESTORE 時,不會提示您。
請注意,語法中沒有關鍵字 OFFLINE,因為這是預設方式。事實上,對於 RESTORE 實用程式,這是資料庫允許的唯一方式。

#表空間恢復

表空間恢復需要相當仔細的規劃,因為比較容易犯錯,這會使資料處於不一致狀態。

下面是表空間 RESTORE 命令的示例:


(1)RESTORE DATABASE sample
(2) TABLESPACE ( mytblspace1 )
(3) ONLINE
(4) FROM /db2tbsp/backup1, /db2tbsp/backup2


讓我們更仔細地研究該命令:

指明要恢復的資料庫映像的名稱。
指出這是表空間 RESTORE,並指定要恢復的一個或多個表空間的名稱。
指出這是聯機恢復。注:對於使用者表空間,既允許聯機恢復也允許離線恢復。正如前面所提到的那樣,對於資料庫,只允許離線恢復。
指定輸入備份檔案所在的位置。
表空間恢復注意事項

恢復表空間之後,它將始終處於前滾暫掛狀態。要使表空間可訪問並復位該狀態,必須至少將表空間前滾到最小的時間點
(point in time,PIT)。該最小的 PIT 確保表空間和日誌與系統目錄中的內容保持一致。

請考慮下面的示例:

假設在時間 t1 您執行了完全資料庫備份,該備份包括了表空間 mytbls1
在時間 t2,您在表空間 mytbls1 中建立了表 myTable。這會將表空間 mytbs1 恢復的最小 PIT 設定為 t2。
在時間 t3,您決定僅從在 t1 進行的完全資料庫備份恢復表空間 mytbls1。
恢復完成之後,表空間 mytbls1 將處於前滾暫掛狀態。如果允許前滾到最小 PIT 之前的某一點,則表空間 mytbls1 將失去表 myTable;然而,系統目錄將顯示該表確實存在於 mytbls1 中。因此,為了避免類似的不一致,DB2 會在您恢復表空間時強制您至少前滾到最小 PIT。
當針對表空間或表空間中的表執行 DDL 語句時,會更新最小的 PIT。為了確定表空間恢復的最小 PIT,可以使用下列兩種方法之一:

使用 LIST TABLESPACES SHOW DETAIL 命令
通過 GET SNAPSHOT FOR TABLESPACE ON db_name 命令獲取表空間快照。
另外,系統目錄表空間(SYSCATSPACE)必須前滾到日誌的末尾並處於離線方式。

#重定向恢復
我們前面提到過備份檔案包括有關表空間和容器的資訊。如果過去存在的容器在進行備份時不再存在時,會發生什麼情況?如果 RESTORE 實用程式找不到該容器,那麼您將得到一個錯誤。

如果您不想在這個位置恢復該備份,而想在別的位置進行恢復,但在那個地方又使用了其它配置,該怎麼辦?同樣,在該情況下恢復備份將會產生問題。

重定向恢復解決了這些問題。重定向恢復的恢復備份過程只有四個步驟:

獲取記錄在輸入備份中的、有關容器和表空間的資訊。通過將 REDIRECT 關鍵字包含在 RESTORE 命令中就能完成這一任務。例如:

RESTORE DATABASE DB2CERT FROM C:/DBBACKUP
        INTO NEWDB REDIRECT WITHOUT ROLLING FORWARD

不需要事先產生資料庫NEWDB
下面是該命令的輸出:


SQL1277N Restore has detected that one or more table space containers are
inaccessible, or has set their state to 'storage must be defined'.
DB20000I The RESTORE DATABASE command completed successfully.

注意:此時已經建立了資料庫NEWDB。

複查來自(部分)恢復資料庫 newdb 的表空間資訊:

LIST TABLESPACES SHOW DETAIL
表空間還沒有產生。

為每個表空間設定新容器。表空間有一個標識,可以從 LIST TABLESPACES 命令的輸出獲取這個標識。如下使用該標識:

SET TABLESPACE CONTAINERS FOR 0 USING (FILE "d:/newdb/cat0.dat" 5000)
SET TABLESPACE CONTAINERS FOR 1 USING (FILE "d:/newdb/cat1.dat" 5000)
...
SET TABLESPACE CONTAINERS FOR n USING (PATH "d:/newdb2")

上面命令將產生表空間。

在上面的示例中,n 表示備份中某一個表空間的標識。另外請注意,對於重定向恢復,不能更改表空間的型別;即,如果表空間是 SMS,那麼就不能將它更改為 DMS。

通過將關鍵字 CONTINUE 包含在 RESTORE 命令中,開始將資料本身恢復到新容器中,如下所示:

RESTORE DATABASE DB2CERT CONTINUE
現在,您已經瞭解了重定向恢復是如何工作的。也可以將它用於為 SMS 表空間新增容器。如果您閱讀過本系列的第二篇教程,那麼您應該知道在大多數情況下不能對 SMS 表空間進行修改以新增容器。重定向恢復為這一限制提供了一種變通方法。

分割槽資料庫的恢復::

In the following example, the database WSDB is defined on all 4 partitions,
numbered 0 through 3. The path /dev3/backup is accessible from all
partitions. The following offline backup images are available from
/dev3/backup:
wsdb.0.db2inst1.NODE0000.CATN0000.20020331234149.001
wsdb.0.db2inst1.NODE0001.CATN0000.20020331234427.001
wsdb.0.db2inst1.NODE0002.CATN0000.20020331234828.001
wsdb.0.db2inst1.NODE0003.CATN0000.20020331235235.001
To restore the catalog partition first, then all other database partitions of the
WSDB database from the /dev3/backup directory, issue the following
commands from one of the database partitions:

db2_all ’<<+0< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331234149
INTO wsdb REPLACE EXISTING’
db2_all ’<<+1< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331234427
INTO wsdb REPLACE EXISTING’
db2_all ’<<+2< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331234828
INTO wsdb REPLACE EXISTING’
db2_all ’<<+3< db2 RESTORE DATABASE wsdb FROM /dev3/backup
TAKEN AT 20020331235235
INTO wsdb REPLACE EXISTING’


##資料庫和表空間前滾
#資料庫前滾
在上一章中,我們簡要地討論了 ROLLFORWARD 命令。在本章中,我們將更詳細地討論它。ROLLFORWARD 命令允許恢復到某一時間點;
這意味著該命令將讓您遍歷 DB2 日誌,並重做或撤銷記錄在日誌中的操作直到某個特定的時間點。雖然可以將資料庫或表空間前滾到最小
PIT 之後的任何時間點,但不能保證您選擇前滾到的結束時間將使所有資料保持一致。

我們將不在本教程中討論 QUIESCE 命令。然而,值得提一下的是:可以在常規資料庫操作期間使用該命令來設定一致性點。通過設定
這些一致性點,您可以始終執行至其中任何一點的時間點恢復,並保證資料同步。

一致性點和許多其它資訊一起被記錄在 DB2 歷史記錄檔案中,可以使用 LIST HISTORY 命令來檢視該檔案。

在前滾處理期間,DB2 將:

在當前日誌路徑中查詢必需的日誌檔案。
如果找到該日誌,重新從日誌檔案應用事務。
如果在當前路徑中找不到該日誌檔案,並且使用了 OVERFLOWLOGPATH 選項,那麼 DB2 將在該選項指定的路徑中搜尋並且將使用該位置中的
日誌。
如果在當前路徑中找不到該日誌檔案並且沒有使用 OVERFLOWLOGPATH 選項,則呼叫使用者出口來檢索歸檔路徑中的日誌檔案。
僅當前滾完全資料庫恢復並且啟用了使用者出口時,才會呼叫使用者出口來檢索日誌檔案。
一旦日誌在當前日誌路徑或 OVERFLOWLOGPATH 中,就將重新應用事務。
執行 ROLLFORWARD 命令需要 SYSADM、SYSCTRL 或 SYSMAINT 許可權。

下面是 ROLLFORWARD 命令的語法:


ROLLFORWARD DATABASE database-alias [USER username [USING password]]
[TO {isotime [ON ALL DBPARTITIONNUMS] [USING LOCAL TIME] | END OF LOGS
[On-DbPartitionNum-Clause]}] [AND {COMPLETE | STOP}] |
{COMPLETE | STOP | CANCEL | QUERY STATUS [USING LOCAL TIME]}
[On-DbPartitionNum-Clause] [TABLESPACE ONLINE | TABLESPACE (tblspace-name
[ {,tblspace-name} ... ]) [ONLINE]] [OVERFLOW LOG PATH (log-directory
[{,log-directory ON DBPARTITIONNUM db-partition-number} ... ])] [NORETRIEVE]
[RECOVER DROPPED TABLE dropped-table-id TO export-directory]

On-DbPartitionNum-Clause:
ON {{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
[TO db-partition-number] , ... ) | ALL DBPARTITIONNUMS [EXCEPT
{DBPARTITIONNUM | DBPARTITIONNUMS} (db-partition-number
[TO db-partition-number] , ...)]}


讓我們研究一個示例。要執行樣本資料庫的前滾,可以使用下列任意一條語句:


(1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE
(2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE
(3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE


讓我們仔細地研究每一條語句:

在該示例中,我們將前滾到日誌的結尾,這意味著將遍歷所有歸檔和活動日誌。最終它將完成前滾並通過回滾任何未提交的事務來除去
前滾暫掛狀態。
對於該示例,DB2 將前滾到指定的時間點。使用的時間戳記形式必須是 CUT(全球標準時間,Coordinated Universal Time),這可以通
過從當前時區減去本地時間來計算。
該示例類似於上一個示例,但可以用本地時間表示時間戳記。
請注意,語法中沒有關鍵字 OFFLINE,因為這是預設方式。事實上,對於 ROLLFORWARD 命令,這是資料庫允許的唯一方式。

#表空間前滾 第 2 頁(共4 頁)


表空間前滾通常可以聯機或離線。但系統目錄表空間(SYSCATSPACE)是例外,它只能進行離線前滾。

下面是一個表空間前滾示例:

ROLLFORWARD DATABASE sample
TO END OF LOGS AND COMPLETE
TABLESPACE ( userspace1 ) ONLINE


上面示例中的選項已經在資料庫前滾一章中說明過了。這裡唯一的新選項是 TABLESPACE,它指定要前滾的表空間。

表空間前滾考慮事項

如果啟用登錄檔變數 DB2_COLLECT_TS_REC_INFO,則只處理恢復表空間所需的日誌檔案;ROLLFORWARD 命令將跳過不需要的日誌檔案,這可以加快恢復時間。
ROLLFORWARD 命令的 QUERY STATUS 選項可用於列出 DB2 已經前滾的日誌檔案、下一個需要的歸檔日誌檔案以及自前滾處理開始以來最後一次提交的事務的時間戳記。例如:
ROLLFORWARD DATABASE sample QUERY STATUS USING LOCAL TIME
在表空間時間點前滾操作完成後,表空間處於備份暫掛狀態。必須對錶空間或資料庫進行備份,因為在表空間恢復到的時間點和當前時間之間對它所做的所有更新都已經丟失。

##索引的重新建立
#重建索引

如果由於一些硬體或作業系統原因而使資料庫崩潰,那麼在資料庫重新啟動階段一些索引可能被標記為無效。配置引數 INDEXREC 確定 DB2 何時將試圖重建無效索引。

INDEXREC 在資料庫管理器和資料庫配置檔案中都進行了定義。該引數有三個可能的設定:

SYSTEM:只能在資料庫配置檔案中指定該值。當將 INDEXREC 設定為該值時,DB2 將查詢在資料庫管理器配置檔案中指定的 INDEXREC 設定,並使用該值。
ACCESS:這意味著在第一次訪問索引時重建無效索引。
RESTART:這意味著在資料庫重新啟動期間重建無效索引。


###管理伺服器
get admin cfg
update admin cfg using <p> <v>


備份表空間
BACKUP DATABASE SAMPLE TABLESPACE ( USERSPACE1 ) ONLINE TO "d:/db2/" WITH 1 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING;

生成表的DDL
db2look -d SAMPLE -t MY_EMPLOYEE -a -e -l -x -c ;
包括表的統計資訊的DDL
db2look -d SAMPLE -t MY_EMPLOYEE -a -e -l -x -m -r -c ;

svmon

5.1 maintrcie 4
db2 fixpak 2

## 資料庫空間需求
# 系統目錄表的空間需求 3.5MB

# 使用者表資料的空間需求
每頁面255行
4KB頁面 68位元組用於管理開銷,4028用於資料,行長度不能超過4005位元組,最多500列。
8,16,32KB 頁面                                     8101,16293,32677     1012列
       估計大小公式4KB:
          (4028/(AVERAGE ROW SIZE + 10)) = RECORDS_PER_PAGE
          (NUMBER_OF_RECORDS/RECORDS_PER_PAGE)*1.1 = NUMBER_OF_PAGES
長型欄位資料的空間需求
儲存在單獨的表物件中。資料儲存在大小為32KB的區域中。
大物件資料的空間需求
#索引的空間的需求
(平均索引鍵大小+9)×行數×2
建立索引的臨時空間需求
         (平均索引鍵大小+9)×行數×3.2
對每個葉子頁的平均鍵數的粗略估計是
#日誌檔案的空間需求
(logprimary + logsecond)*(logfilesiz+2)*4096
如果以對資料庫啟用了無限記錄(logsecond 設定為-1),則必須啟用userexit配置引數。
#臨時空間需求

##分割槽資料庫驗證
select distinct dbpartitionnum(empno) from employee;
#分割槽鍵
未指定則使用主鍵的第一列,無主鍵則使用第一個非長型別列。
選擇能否使資料分佈均勻及經常使用的列,可以用列的組合但不能超過16列,列越少,效能越好。
分割槽鍵不能更改,任何唯一鍵或主鍵必須包含分割槽鍵列

#表並置
需要經常進行關聯的表在指定分割槽鍵時,每個分割槽鍵中對應列的資料型別必須是分割槽相容的,並稱為表並置
具有相同值但有不同型別的兩個變數會安相同的分割槽演算法對映至同一個分割槽號。
        如:INTEGER,SMALLINT,BIGINT
    REAL,FLOAT
    CHAR,VARCHAR

#隔離級別
隔離級確定了在資料被訪問時,如何鎖定資料或將資料與其它程式隔離。您可以在應用程式預編譯或在
靜態 SQL 程式中繫結到資料庫時指定隔離級,或者也可以將它指定為連線或語句選項。
選擇的隔離級可同時影響 DB2 選擇的鎖定策略和 S 行鎖定可以由應用程式持有的時間。
隔離級只應用於被讀取的行。對於更改的行,應用程式需要獲取一個 X 或 W 鎖。無論應用程式的隔離級是什麼,
X 或 W 鎖在回滾或提交之前不被釋放。

相關文章