DB2數據庫有時會出現意外,導致表、表空間甚至整個數據庫都不可訪問,這時候如果沒有備份、也沒有IBM的支持,可以使用db2dart工具來搶救數據,這也是最后的辦法了。
分兩種情況來討論,第一種:數據庫可以連接,僅僅表無法訪問,比如訪問的時候遇到SQL1477N,或者壞頁;第二種:數據庫無法連接。1.) 數據庫可以連接如果數據庫可以連接,那么可以先根據syscat.tables這個視圖查到該表對應的table ID和表空間ID,然后使用db2dart的/DDEL選項導出,以EMPLOYEE表為例:
$ db2 "select tableid, tbspaceid, substr(tbspace,1,30) as tbspace from syscat.tables where tabschema='E97Q6C' and tabname='EMPLOYEE'"TABLEID TBSPACEID TBSPACE ------- --------- ------------------------------ 6 2 USERSPACE1 1 record(s) selected./**停庫操作略**/ $ db2dart SAMPLE /DDEL Table object data formatting start. Please enter Table ID or name, tablespace ID, first page, num of pages:6,2,0,999999999 <--這里的四項分別輸入Table ID、 tablespace ID、 起始頁、要導出的頁數(一般選一個比較大的數字以確保所有的頁都能被導出來) 1 of 1 columns in the table will be dumped. Column numbers and datatypes of the columns dumped: 0 INTEGER Default filename for output data file is TS2T6.DEL, do you wish to change filename used? y/nN Filename used for output data file is TS2T6.DEL. If existing file, data will be appended to it. Formatted data being dumped ... Dumping Page 0 .... Dumping Page 1 .... .. Dumping Page 122 .... Table object data formatting end. The requested DB2DART PRocessing has completed successfully! Complete DB2DART report found in:/home/db2users/e97q6c/sqllib/db2dump/DART0000/SAMPLE.RPT 完成之后,可以在/home/db2users/e97q6c/sqllib/db2dump/DART0000/目錄里找到TS2T6.DEL,便是對應的數據。2.) 數據庫無法連接由于無法連庫,則需要把所有的表(或者您認為比較重要的表)使用db2dart導出來。并且因為無法查詢,無法直接得知庫中有哪些表、這些表對應的table ID和tablespace ID是什么。這時候可以先把 SYSIBM.SYSTABLES這個系統表導出來,方法如下:$ db2dart SAMPLE /DDEL Table object data formatting start. Please enter Table ID or name, tablespace ID, first page, num of pages:(may suffix page number with 'p' for pool relative if working with a pool-relative tablespace)5,0,0,9999999999999 67 of 75 columns in the table will be dumped. Column numbers and datatypes of the columns dumped: 0 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 1 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 2 CHAR() -FIXED LENGTH CHARACTER STRING 3 TIMESTAMP 4 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 7 SMALLINT 8 SMALLINT 9 SMALLINT 10 BIGINT 11 BIGINT 12 BIGINT 13 BIGINT 14 SMALLINT 15 SMALLINT 16 SMALLINT 17 SMALLINT 18 SMALLINT 20 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 21 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 22 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 23 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 24 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 25 SMALLINT 26 SMALLINT 28 TIMESTAMP 29 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 31 CHAR() -FIXED LENGTH CHARACTER STRING 32 CHAR() -FIXED LENGTH CHARACTER STRING 33 CHAR() -FIXED LENGTH CHARACTER STRING 34 SMALLINT 35 CHAR() -FIXED LENGTH CHARACTER STRING 36 SMALLINT 37 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 38 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 39 CHAR() -FIXED LENGTH CHARACTER STRING 40 CHAR() -FIXED LENGTH CHARACTER STRING 41 CHAR() -FIXED LENGTH CHARACTER STRING 42 TIMESTAMP 43 CHAR() -FIXED LENGTH CHARACTER STRING 44 CHAR() -FIXED LENGTH CHARACTER STRING 46 CHAR() -FIXED LENGTH CHARACTER STRING 48 CHAR() -FIXED LENGTH CHARACTER STRING 49 CHAR() -FIXED LENGTH CHARACTER STRING 50 VARCHAR() -VARIABLE LENGTH CHARACTER STRING 52 CHAR() -FIXED LENGTH CHARACTER STRING 53 CHAR() -FIXED LENGTH CHARACTER STRING 54 BIGINT 55 SMALLINT 56 SMALLINT 57 REAL -SINGLE PRECISION FLOATING-POINT 58 SMALLINT 59 REAL -SINGLE PRECISION FLOATING-POINT 60 SMALLINT 61 SMALLINT 62 TIMESTAMP 63 INTEGER 64 CHAR() -FIXED LENGTH CHARACTER STRING 65 TIMESTAMP 66 CHAR() -FIXED LENGTH CHARACTER STRING 67 TIMESTAMP 68 INTEGER 69 CHAR() -FIXED LENGTH CHARACTER STRING 70 CHAR() -FIXED LENGTH CHARACTER STRING 71 CHAR() -FIXED LENGTH CHARACTER STRING 72 CHAR() -FIXED LENGTH CHARACTER STRING 73 CHAR() -FIXED LENGTH CHARACTER STRING 74 DATE Column numbers of columns not dumped: 5 6 19 27 30 45 47 51 Warning: Some columns within the specified table cannot be processed by DB2DART, they will be skipped and not included in the delimited ASCII dumped data. Default filename for output data file is TS0T5.DEL, do you wish to change filename used? y/nn Filename used for output data file is TS0T5.DEL. If existing file, data will be appended to it. Formatted data being dumped ... Dumping Page 0 .... Dumping Page 1 .... Dumping Page 2 .... Dumping Page 3 .... Dumping Page 4 .... Dumping Page 5 .... Dumping Page 6 .... Dumping Page 7 .... Dumping Page 8 .... Dumping Page 9 .... Dumping Page 10 .... Dumping Page 11 .... Dumping Page 12 .... Dumping Page 13 .... Dumping Page 14 .... Dumping Page 15 .... Dumping Page 16 .... Dumping Page 17 .... Dumping Page 18 .... Dumping Page 19 .... Dumping Page 20 .... Dumping Page 21 .... Dumping Page 22 .... Dumping Page 23 .... Dumping Page 24 .... Dumping Page 25 .... Dumping Page 26 .... Dumping Page 27 .... Dumping Page 28 .... Dumping Page 29 .... Table object data formatting end. DB2DART Processing completed with warning(s)! Complete DB2DART report found in:/home/db2users/e97q9a/sqllib/db2dump/DART0000/SAMPLE.RPT 導出的文件 TS0T5.DEL中,第1、2、7、8、20列(逗號為分割線)分別表示 table name, schema name, table ID, tablespace ID, tablespace name,有了這個對應關系之后,就可以使用db2dart挨個導出每個表了。說明1:db2dart僅能導出以下字段:SMALLINT, FLOAT, REAL,INTEGER,TIME,DECIMAL,CHAR(),VARCHAR(),DATE,TIMESTAMP,BIGINT。 其他的,比如LOB字段就會被跳過。說明2:分區表的table ID和 tablespace ID和普通表不一樣,不能直接導出說明3:db2dart導出的過程中,需要有交互輸入,不適合寫成腳本批量導出。 如果想要避免交互,可以參考鏈接說明4:db2dart運行之前,要求數據庫處于離線狀態參考資料:db2dart命令
新聞熱點
疑難解答