前滾會話 - CLP 示例

ROLLFORWARD DATABASE 命令允許每次指定多個操作,各個操作由關鍵字?AND?隔開。例如,要前滾至日志末尾,然后完成,可將下列獨立的命令:

??????db2?rollforward?db?sample?to?end?of?logsdb2?rollforward?db?sample?complete

組合為:

??????db2?rollforward?db?sample?to?end?of?logs?and?complete

雖然這兩種方法是等效的,但建議您分兩個步驟來完成此類操作。在停止前滾操作前驗證它是否具有預期的進度,以免丟失任何日志,這一點很重要。

如果前滾命令遇到錯誤,前滾操作就無法完成。在此情況下,將返回該錯誤,這樣,您就能夠修正該錯誤并重新發出以上命令。但是,如果無法修正該錯誤,那么可以通過發出以下命令強制前滾完成:

??????db2?rollforward?db?sample?complete

此命令使數據庫聯機并復原到發生故障前日志點。

示例 2

將數據庫前滾至日志末尾(已復原了兩個表空間):

??????db2?rollforward?db?sample?to?end?of?logsdb2?rollforward?db?sample?to?end?of?logs?and?stop

這兩個語句是等效的。不需要 AND STOP 或 AND COMPLETE 表空間就可以前滾恢復至日志末尾。不需要表空間名稱。如果未指定,將包括所有需要前滾恢復的表空間。如果將只前滾這些表空間的一個子集,那么必須指定它們的名稱。

示例 3

復原了 3 個表空間后,將其中一個前滾至日志末尾,另兩個前滾到某時間點,所有操作都要聯機執行:

??????db2?rollforward?db?sample?to?end?of?logs?tablespace(TBS1)?onlinedb2?rollforward?db?sample?to?1998-04-03-14.21.56?and?stoptablespace(TBS2,?TBS3)?online

應注意,兩個前滾操作不能并發運行。只有在成功地完成了第一個前滾操作后,才能調用第二個命令。

示例 4

復原數據庫后,前滾到某時間點,使用 OVERFLOW LOG PATH 來指定用戶出口用來保存已歸檔日志的目錄:

???db2?rollforward?db?sample?to?1998-04-03-14.21.56?and?stopoverflow?log?path?(/logs)

示例 5

在以下示例中,有一個稱為 sample 的數據庫。備份該數據庫,在備份映像中包含恢復日志;復原該數據庫;然后,將該數據庫前滾到備份時間戳記末尾。

備份該數據庫,在備份映像中包含恢復日志:

???db2?backup?db?sample?online?include?logs

使用備份映像復原該數據庫:

??????db2?restore?db?sample

將該數據庫前滾到備份時間戳記末尾:

???db2?rollforward?db?sample?to?end?of?backup

示例 6(分區數據庫環境)

有三個數據庫分區:0、1 和 2。在所有數據庫分區上定義表空間 TBS1,在數據庫分區 0 和 2 上定義表空間 TBS2。在數據庫分區 1 上復原了數據庫,并在數據庫分區 0 和 2 上復原了 TBS1 之后,在數據庫分區 1 上前滾數據庫:

??????db2?rollforward?db?sample?to?end?of?logs?and?stop

這會返回警告 SQL1271(已恢復數據庫,但數據庫分區 0 和 2 上的一個或多個表空間處于脫機狀態)。

???db2?rollforward?db?sample?to?end?of?logs

此命令在數據庫分區 0 和 2 上前滾 TBS1。在此情況下,子句 TABLESPACE(TBS1) 是可選的。

示例 7(分區數據庫環境)

在以下示例中,有一個稱為 sample 的分區數據庫。使用單系統視圖備份備份所有數據庫分區;在所有數據庫分區上復原該數據庫;將該數據庫前滾到備份時間戳記末尾。

執行單系統視圖 (SSV) 備份:

???db2?backup?db?sample?on?all?nodes?online?include?logs

在所有數據庫分區上復原該數據庫:

???db2_all?"db2?restore?db?sample?taken?at?1998-04-03-14.21.56"

將該數據庫前滾到備份時間戳記末尾:

???db2?rollforward?db?sample?to?end?of?backup?on?all?nodes

示例 8(分區數據庫環境)

在以下示例中,有一個稱為 sample 的分區數據庫。使用 db2_all,通過一個命令備份所有數據庫分區;在所有數據庫分區上復原該數據庫;并將該數據庫前滾到備份時間戳記末尾。

使用 db2_all,通過一個命令備份所有數據庫分區:

???db2_all?"db2?backup?db?sample?include?logs?to?/shared/dir/"

在所有數據庫分區上復原該數據庫:

???db2_all?"db2?restore?db?sample?from?/shared/dir/"

將該數據庫前滾到備份時間戳記末尾:

???db2?rollforward?db?sample?to?end?of?backup?on?all?nodes

示例 9(分區數據庫環境)

只在數據庫分區 0 和 2 上復原表空間 TBS1 之后,在數據庫分區 0 和 2 上前滾 TBS1:

??????db2?rollforward?db?sample?to?end?of?logs

忽略數據庫分區 1。

???db2?rollforward?db?sample?to?end?of?logs?tablespace(TBS1)

此命令失敗,因為 TBS1 未對在數據庫分區 1 上進行前滾恢復作好準備。報告 SQL4906N。

???db2?rollforward?db?sample?to?end?of?logs?ondbpartitionnums?(0,?2)?tablespace(TBS1)

成功完成。

???db2?rollforward?db?sample?to?1998-04-03-14.21.56?and?stoptablespace(TBS1)

此命令失敗,因為 TBS1 未對在數據庫分區 1 上進行前滾恢復做好準備;必須將所有段一起前滾。

注:?在將表空間前滾到某時間點之后,將不接受 dbpartitionnum 子句。前滾操作必須在表空間所在的所有數據庫分區上進行。

在數據庫分區 1 上復原 TBS1 后:

???db2?rollforward?db?sample?to?1998-04-03-14.21.56?and?stoptablespace(TBS1)

成功完成。

示例 10(分區數據庫環境)

在所有數據庫分區上復原表空間后前滾至 PIT2,但不指定?AND STOP。前滾操作仍在進行中。取消并前滾至 PIT1:

???db2?rollforward?db?sample?to?pit2?tablespace(TBS1)db2?rollforward?db?sample?cancel?tablespace(TBS1)**?restore?TBS1?on?all?dbpartitionnums?**db2?rollforward?db?sample?to?pit1?tablespace(TBS1)db2?rollforward?db?sample?stop?tablespace(TBS1)

示例 11(分區數據庫環境)

前滾恢復?db2nodes.cfg?文件中列示的 8 個數據庫分區(3 至 10)上的表空間:

??????db2?rollforward?database?dwtest?to?end?of?logs?tablespace?(tssprodt)

前滾恢復至日志末尾(而不是時間點)的操作成功完成。不必指定表空間所在的數據庫分區。實用程序缺省到?db2nodes.cfg?文件。

示例 12(分區數據庫環境)

前滾恢復單一數據庫分區數據庫分區組(在數據庫分區 6 上)上的 6 個小表空間:

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

前滾恢復至日志末尾(而不是時間點)的操作成功完成。

示例 13(分區表 - 在所有數據分區上前滾至日志末尾)

使用表空間 tbsp1、tbsp2 和 tbsp3 創建了分區表,索引在 tbsp0 中。后來,用戶對 tbsp4 中的表添加了數據分區,并從 tbsp5 中的表連接了數據分區。可以將所有表空間前滾至日志末尾。

???db2?rollforward?db?PBARDB?to?END?OF?LOGS?and?stoptablespace(tbsp0,?tbsp1,?tbsp2,?tbsp3,?tbsp4,?tbsp5)

成功完成。

示例 14(分區表 - 在一個表空間上前滾至日志末尾)

最初使用表空間 tbsp1、tbsp2 和 tbsp3 創建了分區表,索引在 tbsp0 中。后來,用戶對 tbsp4 中的表添加了數據分區,并從 tbsp5 中的表連接了數據分區。表空間 tbsp4 損壞并要求復原和前滾至日志末尾。

???db2?rollforward?db?PBARDB?to?END?OF?LOGS?and?stop?tablespace(tbsp4)

成功完成。

示例 15(分區表 - 在所有數據分區上前滾到時間點,這些數據分區包括那些已添加、已連接、已拆離或帶索引的數據分區)

使用表空間 tbsp1、tbsp2 和 tbsp3 創建了分區表,索引在 tbsp0 中。后來,用戶對 tbsp4 中的表添加了數據分區,從 tbsp5 中的表連接了數據分區,并從 tbsp1 拆離了數據分區。用戶對分區表使用的所有表空間(包括 INDEX IN 子句中指定的那些表空間)執行前滾到 PIT 操作。

???db2?rollforward?db?PBARDB?to?2005-08-05-05.58.53?and?stop?tablespace(tbsp0,?tbsp1,?tbsp2,?tbsp3,?tbsp4,?tbsp5)

成功完成。

示例 16(分區表 - 在一小部分表空間上前滾到 PIT)

使用三個表空間(tbsp1、tbsp2 和 tbsp3)創建了分區表。后來,用戶從 tbsp3 中拆離了所有數據分區。只允許在 tbsp1 和 tbsp2 上前滾到 PIT。

???db2?rollforward?db?PBARDB?to?2005-08-05-06.02.42?and?stop?tablespace(?tbsp1,?tbsp2)