原文引自:http://topic.csdn.net/u/20100522/16/97201BFE-E1AE-4540-ACD5-ADD6F475E713.html
SQL code
-- DB2 恢複已刪除的表測試:(測試平台:RHEL 5.4 DB2 V9.7.0)
-- 哈哈,小弟菜鳥一個! 剛看牛大師的書,做了一下例子,混個臉熟,順便來賣弄一下自己,滿足一下自己的虛榮心!
-- 下面我們舉一個dropped table recovery的例子。
-- *(1) 執行完全Database Backup,需要注意備份鏡像的時間戳記。
(Instance:DB2INST1, Database: TEST1):backup db test1 to /home/db2inst1/db2_backup
Backup successful. The timestamp for this backup image is : 20100522140304
(Instance:DB2INST1, Database: TEST1):
-- *(2) 串連到資料庫並建立表,執行組建記錄檔記錄的操作,插入幾條記錄:
CONNECT TO test1
CREATE TABLE tab1(no INTEGER) IN tbsp1
INSERT INTO tab1 VALUES(1), (2), (3), (4), (5)
-- *(3) 類比意外丟棄表的情境:
DROP TABLE tab1
COMMIT
SELECT * FROM tab1
-- 將返回以下錯誤訊息:
Error: SQL0204N "Administrator.TAB1" is an undefined name
-- *(4) 恢複資料庫。
-- 要恢複已被丟棄的表,先恢複Database Backup,然後執行向前恢複(rollforward)操作:
RESTORE DATABASE test1 FROM /home/db2inst1/db2_backup TAKEN AT 20100522140304 INTO test1
-- 將返回以下訊息:
......
-- *(5) 檢索已丟棄的對象ID。
-- 使用以下命令檢索意外丟棄的表的對象ID:
LIST HISTORY DROPPED TABLE ALL FOR DATABASE test1
-- 可以將返回的資訊(例如表7-3中顯示的樣本)複製到某個檔案中以供未來引用。
(Instance:DB2INST1, Database: TEST1):list history dropped table all for database test1
List History File for test1
Number of matching file entries = 1
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
D T 20100522141107 000000000000684300080004
----------------------------------------------------------------------------
"DB2INST1"."TAB1" resides in 1 tablespace(s):
00001 TBSP1
----------------------------------------------------------------------------
Comment: DROP TABLE
Start Time: 20100522141107
End Time: 20100522141107
Status: A
----------------------------------------------------------------------------
EID: 33
DDL: CREATE TABLE "DB2INST1"."TAB1" ( "NO" INTEGER ) IN "TBSP1" ;
----------------------------------------------------------------------------
(Instance:DB2INST1, Database: TEST1):
-- 表7-3中的Backup ID欄顯示被丟棄的表的ID為000000000000684300080004。這一資訊對於恢複表非常重要。
-- *(6) 向前恢複資料庫。
-- 現在已經獲得了被丟棄的表的ID,下一步需要使用該表的備份ID恢複資料庫,這樣才能夠匯入表的資料。在向前恢複資料庫之前,
-- 需要確保有一個目錄可以供儲存匯入資料,比如說/home/db2inst1/test1/exporttab1。使用以下命令向前恢複資料庫:
mkdir -p /home/db2inst1/test1/exporttab1
-- ROLLFORWARD DATABASE test1 TO END OF LOGS AND STOP RECOVER DROPPED TABLE 000000000000684300080004 TO /home/db2inst1/test1/exporttab1
(Instance:DB2INST1, Database: TEST1):rollforward database test1 to end of logs and stop \
(Instance:DB2INST1, Database: TEST1):recover dropped table 000000000000684300080004 \
(Instance:DB2INST1, Database: TEST1):to /home/db2inst1/test1/exporttab1
Rollforward Status
Input database alias = test1
Number of nodes have returned status = 1
Node number = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = S0000007.LOG - S0000007.LOG
Last committed transaction = 2010-05-22-06.11.07.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
-- END OF LOGS選項的作用是讓DB2在執行備份操作後應用所有可用記錄檔。
-- *(7) 檢查匯入的資料檔案。
-- 完成資料庫向前恢複之後,需要檢查在ROLLFORWARD命令中指定的路徑。應該能夠找到一個.TXT檔案,
-- 開啟該檔案並驗證其中包含的資料與意外丟棄表之前的資料是否相同。
-- *(8) 串連到資料庫並重新建立被丟棄的表。
-- 驗證匯出檔案之後,我們需要重新建立被丟棄的表並重新填入資料。被丟棄的表的定義包含在步驟(5)的LIST HISTORY命令的輸出中。
-- 串連到資料庫並執行CREATE TABLE語句:
CONNECT TO test1
CREATE TABLE "DB2INST1"."TAB1" ( "NO" INTEGER ) IN "TBSP1" ;
-- *(9) 匯入資料
-- 重新建立表之後,可以使用以下命令將資料庫重新匯入到表中:
IMPORT FROM /home/db2inst1/test1/exporttab1/NODE0000/data OF DEL INSERT INTO "DB2INST1"."TAB1"
-- IMPORT工具將匯出檔案中的所有資料導回到表中,並在成功後發送報告(未顯示)。
-- *(10) 驗證恢複後的資料
-- 確保IMPORT過程中沒有錯誤或警示,並且所有資料都已導回表中:
SELECT * FROM tab1
-- 如果一切運行正常,則意外丟棄點之前的所有資料應該都在表中。