下面的文章主要介紹的是DB2備份恢復在實際操作中的有感有問,如果你對DB2備份恢復心存好奇的話,以下的文章將會揭開它的神秘面紗,以下就是具體內容的描述,希望在你今後的學習中會有所幫助。
練手DB2備份與恢復,盲人摸象一般搗騰了好幾天,終於成功實現聯機DB2備份恢復了。
先講下我怎麼做的
創建數據庫testdb
- db2 create database testdb using codeset UTF-8 territory US
開啟聯機備份
- db2 update db cfg for testdb using userexit on logretain on trackmod on
創建備份目錄
- mkdir /backup/db2inst1
- chown db2inst1:db2grp1 /backup/db2inst1
重啟db2實例,進行一次冷備,時間戳為20100224111110
- db2stop force
- db2start
- db2 backup db testdb to /backup/db2inst1
創建數據庫表
- create table T(
- a int,
- b int,
- c int
- )
在T表中插入100條數據0,0,0
進行一次聯機備份,時間戳為20100224113029
- db2 backup db testdb online to /backup/db2inst1
查看首個活動日志,為S00000001.LOG
- db2 get db cfg for testdb
在T表中插入100條數據1,1,1
進行一次聯機備份,時間戳為20100224113530
- db2 backup db testdb online to /backup/db2inst1
查看首個活動日志,為S0000002.LOG
- db2 get db cfg for testdb
在T表中刪除100條0,0,0
將活動日志目錄SQLOGDIR下的所有歸檔日志和活動日志都拷到/temp目錄下
將testdb整個刪除
- db2 drop db testdb
DB2備份恢復到最後一個備份點20100224113530
- db2 restore database testdb from /backup/db2inst1 taken at 20100224113530
將所有歸檔日志和活動日志都拷到SQLOGDIR下,並更改用戶和用戶組
- chown db2inst1:db2grp1 *
日志回滾
因為備份的時間戳日期和歸檔日志的時間似乎有點不同,我現在的做法只能是先執行下面這句,得到一個時間,然後再rollforward到那個時間才能成功回滾
- db2 rollforward db testdb stop
執行上面語句以後提示以下內容
- SQL1276N Database "TESTDB" cannot be brought out of rollforward pending state
- until roll-forward has passed a point in time greater than or equal to
- "2010-02-24-03.12.34.000000 UTC", because node "0" contains information later
than the specified time.
根據這裡的提示信息,得到時間2010-02-24-03.12.34.000000,再rollforward到這個時間
- db2 rollforward db testdb to 2010-02-24-03.12.34.000000 and stop
不知道正常情況下高手們是怎麼知道回滾到什麼時間點的?特別請教一下。謝謝!
在做回滾的時候我還發現了一個情況:根據活動日志可以DB2備份恢復到故障點到最後一次備份點之間的數據。
在rollforward的時候將時間點往後多寫一點
- $ db2 rollforward db testdb to 2010-02-24-03.15.00 and stop
- 然後他會提示SQL4970N Roll-forward recovery on database "TESTDB" cannot reach the
- specified stop point (end-of-log or point-in-time) on database partition(s)
- "0". Roll-forward recovery processing has halted on log file "S0000005.LOG".
在這個時候數據庫依舊是pending狀態,再執行一次db2 rollforward db testdb stop就可以DB2備份恢復到刪除數據庫之前的狀態了