db2 前滾最小恢復時間和時間戳問題

keeptrying發表於2012-11-30

前滾的最小恢復時間

 

該時間是系統目錄表對錶空間或其中表的最後一次更新操作的時間戳記,也就是任何rollforward命令要成功執行必須前滾的一個最小的時間點。這個最小的時間點可以確保表空間和日誌與系統目錄表中的資訊一致。

當對錶空間或表空間中的表執行DDL語句時,最小時間點將被更新

考慮下面這個例子:

  1. 假設在時間 t1 上您做了一個完整資料庫備份,其中包括表空間 mytbls1
  2. 在時間 t2 上,您在表空間 mytbls1 中建立了表 myTable。這將為表空間 mytbs1 t2 的恢復設定最小時間點。
  3. 在時間 t3 上,您決定使用 t1 時做的完整資料庫備份只恢復表空間 mytbls1
  4. 恢復完成之後,表空間 mytbls1 將被置於 rollforward pending 狀態。如果您可以前滾到最小時間點之前的一個時間點上,那麼表空間 mytbls1 中將不包括表 myTable;然而,系統編目卻說這個表的確在 mytbls1 中。為了避免出現這樣的不一致,當您恢復一個表空間時,DB2 將強制使您至少前滾到最小時間點上。

 

使用兩種方法確定一個表空間的最小恢復時間:

l     list tablespaces show detail

l     get snapshot for tablespace on db_name.

 

如:

db2 => list tablespaces show detail

最小恢復時間                            = 2012-11-29-07.00.45.000000

 

db2 => get snapshot for tablespaces on test

最小恢復時間                            = 2012-11-29 07:00:45.000000

 

 

此外,SNAPSHOT_TBS_CFG表函式所返回的表的MIN_RECOVERY_TIME欄位中的值也為最小恢復時間。例如:

db2 => select substr(tablespace_name,1,15) as tablespace_name,min_recovery_time from table

 (snapshot_tbs_cfg('TEST',-1))

 

TABLESPACE_NAME MIN_RECOVERY_TIME

--------------- --------------------------

SYSCATSPACE     -

TEMPSPACE1      -

USERSPACE1      -

SYSTOOLSPACE    -

TEST            2012-11-29-15.00.45.000000

SYSTOOLSTMPSPAC -

 

  6 條記錄已選擇。

 

這種方法獲得的最小恢復時間與前兩種不同。前兩種方法返回的時間戳使用的時UTC(Coordinated Universal Time,也為GMT),即標準世界時,與“格林威治時間”是一樣的,使用此計時方式不用考慮不同時區的問題。而後SNAPSHOT_TBS_CFG表函式返回的時間戳使用的是本機所設時區的本地時間。兩種計時方式都可用於DB2前滾命令中的前滾時間戳引數,預設情況下使用的是UTC方式,如果要使用本地時間戳記,必須在時間戳後加上USING LOCAL TIME選項。

可通過專用暫存器CURRENT TIMEZONE返回本地時間與UTC時間之間的差

db2 => values(CURRENT TIMEZONE)

 

1

--------

  80000.

這表示它們之間的時差為+8小時,即UTC時間加上8小時即為本地時間

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-750311/,如需轉載,請註明出處,否則將追究法律責任。

相關文章