程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 日常維護技巧,第 3 部分:表的使用狀態、用戶連接、日志管理與數據恢復等

DB2 日常維護技巧,第 3 部分:表的使用狀態、用戶連接、日志管理與數據恢復等

編輯:DB2教程

快速查找沒有索引表的辦法

如果想快速查看系統中哪些表沒有建立索引,可以通過查詢系統視圖 syscat.tables 和 syscat.indexes 來獲得,比如我們想查看我們的示例數據庫 SAMPLE 中有哪些表沒有建立索引,可以在當前 DB2CLP 窗口中,發出 SELECT 命令檢索系統視圖 syscat.tables 和 syscat.indexes 來獲得,具體如清單 7 所示:

清單 7. 快速查找沒有索引的表的辦法

C:\> db2 connect to sample 
 
數據庫連接信息 
 
數據庫服務器 = DB2 / NT 9.1.0 
 SQL 授權標識 = RHETTE 
本地數據庫別名 = SAMPLE 
 
 C:\> db2 select tabname from syscat.tables where tabname not in 
       (select tabname from syscat.indexes) 
 TABNAME 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 ABC 
 ADEFUSR 
 CL_SCHED 
 DEPT 
 EMP 
 EMPACT 
 EMPPROJACT 
 EMP_ACT 
 IN_TRAY 
 ORG 
 PROJ 
 SALES 
 STAFF 
 STAFFG 
 TEST1 
 TEST2 
 TEST3 
 TEST4 
 TEST5 
 TEST6 
 TEST7_EXCEPTION 
 TEST8 
 TEST9 
 
 . . . . . . . . . . . . . . . . . . 
 
 354 條記錄已選擇。

命令成功完成。為了節省篇幅,清單 7 中只顯示了部分結果。

查找發生全表掃描的表

我們在維護數據庫的過程中,經常需要查看哪些表發生了全表掃描,發生的頻率高不高,並把這些表根據快照監控中得到的 dynamic sql 對索引進行調整。我們可以利用 DB2 V9 提供的 db2pd 工具來完成這個操作。

下面我們繼續在當前 DB2CLP 窗口中,發出“ db2pd -db sample-tcbstats ”命令,查找系統發生過的全表掃描的表,具體如清單 8 所示:

清單 8. 使用 DB2PD 查找發生過全表掃描的表

C:\> db2 connect to sample 
 
數據庫連接信息 
 
數據庫服務器 = DB2 / NT 9.1.0 
 SQL 授權標識 = RHETTE 
本地數據庫別名 = SAMPLE 
 
 C:\> db2 select * from test1 
 
 ID 
 - - - - - - - - - - - - - - - - - - - - - 
 1 
 1 
 1 
 1 
 1 
 
 5 條記錄已選擇。 
 
 
 
 C:\> db2 select * from test2 
 
 ID NAMEJL 
 - - - - - - - - - - - - - - - - - - - - - 
 1 rhetteaaa 
 2 danIElbbb 
 3 richardccc 
 4 henryddd 
 5 vivianeee 
 
 5 條記錄已選擇。 
 
 C:\> db2pd -db sample-tcbstats 
 
 Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:15:24 
 
 TCB Table Information: 
 Address TbspaceID TableID PartID MasterTbs MasterTab TableNameSchemaNm 
 0x7EF2AAA0 0 1 n/a 0 1 SYSBOOT SYSIBM 
 0x7EAAD4A0 0 5 n/a 0 5 SYSTABLES SYSIBM 
 0x7EAF1920 0 7 n/a 0 7 SYSINDEXES SYSIBM 
 0x7EAF38A0 3 6 n/a 3 6 TEST1 RHETTE 
 0x7EAF41A0 3 7 n/a 3 7 TEST2 RHETTE 
 0x7EAABBA0 0 13 n/a 0 13 SYSPLAN SYSIBM 
 0x7EAA5320 0 17 n/a 0 17 SYSDBAUTH SYSIBM 
 0x7EF2B4A0 0 22 n/a 0 22 SYSROUTINES SYSIBM 
 0x7EAA8BA0 0 31 n/a 0 31 SYSEVENTMONITORS SYSIBM 
 0x7EAA2AA0 0 33 n/a 0 33 SYSTABLESPACES SYSIBM 
 0x7EA918A0 0 86 n/a 0 86 SYSVERSIONS SYSIBM 
 0x7EF2FC20 0 102 n/a 0 102 SYSXMLSTRINGS SYSIBM 
 0x7EA90AA0 0 103 n/a 0 103 SYSXMLPATHS SYSIBM 
 0x7EAA7E20 0 113 n/a 0 113 SYSTASKS SYSIBM 
 0x7EAA02A0 0 134 n/a 0 134 SYSSURROGATEAUTHID SYSIBM 
 0x7EF2EB20 0 137 n/a 0 137 SYSROLES SYSIBM 
 0x7EAA3EA0 0 138 n/a 0 138 SYSROLEAUTH SYSIBM 
 0x7EA9D620 0 139 n/a 0 139 SYSCONTEXTS SYSIBM 
 0x7EA9F5A0 0 140 n/a 0 140 SYSCONTEXTATTRIBUT SYSIBM 
 0x7EAF02A0 0 141 n/a 0 141 SYSCOLLATIONS SYSIBM 
 0x7EA92420 0 144 n/a 0 144 SYSWORKLOADS SYSIBM 
 0x7EA93C20 0 145 n/a 0 145 SYSWORKLOADCONNATT SYSIBM 
 0x7EA94CA0 0 146 n/a 0 146 SYSWORKLOADAUTH SYSIBM 
 0x7EA99620 0 147 n/a 0 147 SYSSERVICECLASSES SYSIBM 
 0x7EA9C220 0 150 n/a 0 150 SYSWORKACTIONSETS SYSIBM 
 0x7EA96220 0 152 n/a 0 152 SYSTHRESHOLDS SYSIBM 
 0x7EA978A0 0 153 n/a 0 153 SYSHISTOGRAMTEMPLA SYSIBM 
 0x7EA98B20 0 154 n/a 0 154 SYSHISTOGRAMTEMPLA SYSIBM 
 0x7EA9A820 0 155 n/a 0 155 SYSHISTOGRAMTEMPLA SYSIBM 
 0x7EAA1420 0 157 n/a 0 157 SYSAUDITPOLICIES SYSIBM 
 0x7EF2AEA0 0 -1 n/a 0 -1 INTERNAL SYSIBM 
 0x7EAF3CA0 3 -1 n/a 3 -1 INTERNAL SYSIBM 
 
 TCB Table Stats: 
 Address TableName Scans UDI RTSUDI PgReorgs 
 0x7EF2AAA0 SYSBOOT 1 0 0 0 
 0x7EAAD4A0 SYSTABLES 0 713 713 0 
 0x7EAF1920 SYSINDEXES 0 309 309 0 
 0x7EAF38A0 TEST1 2 0 0 0 
 0x7EAF41A0 TEST2 1 0 0 0 
 0x7EAABBA0 SYSPLAN 0 2 2 0 
 0x7EAA5320 SYSDBAUTH 0 0 0 0 
 0x7EF2B4A0 SYSROUTINES 0 8 8 0 
 0x7EAA8BA0 SYSEVENTMONITORS 0 0 0 0 
 0x7EAA2AA0 SYSTABLESPACES 0 0 0 0 
 0x7EA918A0 SYSVERSIONS 1 0 0 0 
 0x7EF2FC20 SYSXMLSTRINGS 0 0 0 0 
 0x7EA90AA0 SYSXMLPATHS 0 0 0 0 
 0x7EAA7E20 SYSTASKS 0 0 0 0 
 0x7EAA02A0 SYSSURROGATEAUTHID 0 0 0 0 
 0x7EF2EB20 SYSROLES 0 0 0 0 
 0x7EAA3EA0 SYSROLEAUTH 0 0 0 0 
 0x7EA9D620 SYSCONTEXTS 0 0 0 0 
 0x7EA9F5A0 SYSCONTEXTATTRIBUT 0 0 0 0 
 0x7EAF02A0 SYSCOLLATIONS 0 0 0 0 
 0x7EA92420 SYSWORKLOADS 0 0 0 0 
 0x7EA93C20 SYSWORKLOADCONNATT 0 0 0 0 
 0x7EA94CA0 SYSWORKLOADAUTH 0 0 0 0 
 0x7EA99620 SYSSERVICECLASSES 1 0 0 0 
 0x7EA9C220 SYSWORKACTIONSETS 1 0 0 0 
 0x7EA96220 SYSTHRESHOLDS 1 0 0 0 
 0x7EA978A0 SYSHISTOGRAMTEMPLA 0 0 0 0 
 0x7EA98B20 SYSHISTOGRAMTEMPLA 0 0 0 0 
 0x7EA9A820 SYSHISTOGRAMTEMPLA 0 0 0 0 
 0x7EAA1420 SYSAUDITPOLICIES 0 0 0 0 
 0x7EF2AEA0 INTERNAL 0 0 0 0 
 0x7EAF3CA0 INTERNAL 0 0 0 0

命令成功完成。部分輸出結果如清單 8 所示,想查看都有哪些表發生了表掃描可以看輸出結果中“ TCB Table Information ”部分,其 “ TableName ”部分顯示了發生過全表掃的表的名字。如果想查看全表掃發生的次數,可以查看“ TCB Table Stats ” 部分。

強行中斷用戶連接方法

我們在維護數據庫的過程中,經常需要斷開所有的用戶連接,通常我們使用“ FORCE APPLICATIONS ALL ”命令,但是,這個命令並不能解決我們的所有問題。比如,當前有用戶不停試圖連接上來時,通過“ FORE APPLICATIONS ALL ”命令,就不能斷開在命令發出之後試圖連接上來的應用程序。

面對這個問題,如果 B/S 的程序,一般情況下需要先關閉應用服務器,比如 WAS ( Websphere Admin Server ),再在 DB2 服務器上多次運行“ FORCE APPLICATIONS ALL ”命令,以便斷開所有的連接,這種方式不太容易斷開其他繞過應用服務器試圖直接連接數據庫的應用程序。

如果想徹底斷開所有的連接,可以考慮只開放給用戶一個數據庫別名,而不是把數據庫名直接提供給客戶。比如,我們現在服務器上有示例數據庫 SAMPLE ,我們通過 CATALOG 命令給示例數據庫 SAMPLE 定義一個別名,別名為 ABC ,然後將別名提供給用戶。當我們需要斷開所有連接的時候,我們先停掉應用服務器,比如 WAS ,然後在 DB2 服務器上多次運行“ FORE APPLICATIONS ALL ”命令,然後再通過 UNCATALOG 命令取消 SAMPLE 數據庫的別名 ABC ,當我們單用戶管理完成後,再將 SAMPLE 數據庫的別名 ABC 恢復就可以了,關於注冊別名和取消別名具體如清單 9 所示:

清單 9 . 編目數據庫別名、取消編目數據庫別名

/* 在 DB2 服務器上執行 */ 
 
 C:\> db2 catalog db sample as abc 
 DB20000ICATALOG DATABASE 命令成功完成。 
 DB21056W 直到刷新目錄高速緩存之後,目錄更改才生效。 
 
 C:\> db2 terminate 
 DB20000ITERMINATE 命令成功完成。 
 
 
 /* 對用戶只開放數據庫別名 ABC,用戶在在客戶端上都使用 ABC 來編目 SAMPLE 數據庫 */ 
 
 C:\> DB2 catalog tcpip node myremoteremote123.124.78.115server50000 
 DB20000ICATALOG TCPIP NODE 命令成功完成。 
 DB21056W 直到刷新目錄高速緩存之後,目錄更改才生效。 
 
 C:\> db2 terminate 
 DB20000ITERMINATE 命令成功完成。 
 
 C:\> db2catalogdbabc as myabcatnodemyremote 
 DB20000ICATALOG DATABASE 命令成功完成。 
 DB21056W 直到刷新目錄高速緩存之後,目錄更改才生效。 
 
 C:\> db2 terminate 
 DB20000ITERMINATE 命令成功完成。 
 
 C:\> db2 connect to myabc user rhette using passw0rd 
 
數據庫連接信息 
 
數據庫服務器 = DB2 / NT 9.1.0 
 SQL 授權標識 = RHETTE 
本地數據庫別名 = MYABC 
 
 /* 在 DB2 服務器上斷開所有連接,取消別名 */ 
 
 C:\> db2 force applications all 
 DB20000IFORCE APPLICATION 命令成功完成。 
 DB21024I 此命令為異步的,可能未能立即生效。 
 
 
 C:\> db2 uncatalog db abc 
 DB20000IUNCATALOG DATABASE 命令成功完成。 
 DB21056W 直到刷新目錄高速緩存之後,目錄更改才生效。 
 
 C:\> db2 terminate 
 DB20000ITERMINATE 命令成功完成。 
 
 /* 此時在客戶端試圖連接數據庫 ABC,將會失敗 */ 
 
 C:\> db2 connect to myabc user rhette using passw0rd 
 SQL30061N 在遠程節點上找不到數據庫別名或數據庫名稱 " ABC" 。 
 SQLSTATE = 08004 
 
 /* 在 DB2 服務器上執行完單用戶操作後,可以再把別名 ABC 恢復 */ 
 
 C:\> db2 catalog db sample as abc 
 DB20000ICATALOG DATABASE 命令成功完成。 
 DB21056W 直到刷新目錄高速緩存之後,目錄更改才生效。 
 
 C:\> db2 terminate 
 DB20000ITERMINATE 命令成功完成。 
 
 
 /* 此時再在客戶端連接數據庫 ABC(在本地別名 MYABC),就可以成功了 */ 
 
 C:\> db2 connect to myabc user rhette using passw0rd 
 
數據庫連接信息 
 
數據庫服務器 = DB2 / NT 9.1.0 
 SQL 授權標識 = RHETTE 
本地數據庫別名 = MYABC

通過結果集創建表

如果你想通過結果集創建表,可以使用“ create table as ( select * from table_name )definition only ”語句。

下面我們新打開一個 DB2CLP 窗口,發出“ CONNECT TO SAMPLE ”命令,連上示例數據庫 SAMPLE ,再發出“ create table newtest1 as ( select * from test1 ) definition only ”命令創建表 newtest1 ,其結構和 test1 完全相同,具體如清單 10 所示:

清單 10 . 通過結果集創建表

C:\> db2 connect to sample 
 
數據庫連接信息 
 
數據庫服務器 = DB2 / NT 9.1.0 
 SQL 授權標識 = RHETTE 
本地數據庫別名 = SAMPLE 
 
 
 C:\> db2 create table newtest1 as ( select * from test1 ) definition only 
 DB20000ISQL 命令成功完成。 
 
 C:\> db2 select * from test1 
 
 ID 
 - - - - - - - - - - - - - - - - - - - 
 1 
 1 
 1 
 1 
 1 
 
 5 條記錄已選擇。 
 
 
 C:\> db2 select * from newtest1 
 
 ID 
 - - - - - - - - - - - - - - - - - - - 
 
 0 條記錄已選擇。

命令成功完成。

單引號轉換

我們在使用 DB2 數據庫的時候,不能直接插入單引號,而是要用兩個單引號代表一個單引號,也就是需要進行轉譯。比如我們在插入 TEST2 表時,想對 NAME 列中插入帶單引號的值,可以使用兩個單引號代表一個單引號,具體如清單 11 所示:

清單 11. 單引號轉換

C:\>db2 insert into test2 values ( 11 , ''' 單引 ''' , ' ' ) 
 DB20000ISQL 命令成功完成。 
 
 C:\> db2 selectid ,name from test2 
 
 IDNAME 
 - - - - - - - - - - - - - - - - - - - - - 
 1 
   rhette 
 2    danIEl 
 3 
   richard 
 4    henry 
 5 
   vivian 
 11 
   ' 單引 ' 
 
 6 條記錄已選擇。

命令成功完成。在清單 11 中我們看到,為了插入 NAME 列 ' 單引 ' 字符串,在 INSERT 語句中使用了 '' 單引 '' 字符串進行替代,查詢表 TEST2,可以看到插入的值為 ' 單引 ' 。

DB2 備份歷史文件損壞

在維護 DB2 數據庫,進行數據庫備份操作時,我們偶爾會遇上錯誤代碼為 SQL2048 錯誤,錯誤碼為 5 。通過在 DB2CLP 窗口發出命令 “ db2 ? SQL2048 ” 查詢錯誤代碼為 SQL2048 (錯誤碼為 5 )代表的含義,可以發現備份歷史文件 db2rhist.asc 損壞(本示例假定實例所有者可訪問 db2rhist 文件),具體如清單 12 所示:

清單 12. 查詢錯誤代碼為 SQL2048(錯誤碼為 5)代表的含義

C:\> db2 ? SQL2048 
 
 
 SQL2048N 訪問對象 "< 對象 >" 時出錯。原因碼:"< 原因碼 >" 。 
 
說明 : 
 
數據庫實用程序的處理期間,在訪問對象時出錯。下面是原因碼列表: 
 
 1 遇到無效對象類型。 
 
 2 鎖定對象操作失敗。鎖定等待可能已達到數據庫配置中指定的鎖定超時 
限制。 
 
 3 數據庫實用程序的處理期間,解鎖對象操作失敗。 
 
 4 訪問對象失敗。5數據庫中的對象已毀壞。 
 
 . . . . . . . . . . . . . 
 
實用程序停止了處理過程。 
 
用戶響應 : 
 
 1 確保 "< 對象 >" 屬於有效類型。 
 
 2 增大數據庫配置參數 locktimeout 。 
 
 3 請檢查在鎖定 "< 對象 >" 時沒有任何問題,然後再次嘗試執行該操作。 
 
 4 和 7 請檢查 "< 對象 >" 確實存在並且可訪問。確保您具有訪問它的正確特 
權 / 許可權。 
 
 5 
 
如果對象是db2rhist.asc,那麼確保實例所有者可訪問db2rhist文 
件。如果正確設置了許可權,那麼說明db2rhist文件可能已被破壞。 
將現有文件從它的現有位置移開,或者刪除該文件。當DB2下一次需 
要訪問db2rhist文件時,DB2將創建新的db2rhist文件。注意:刪 
除db2rhist文件將導致丟失db2rhist文件中的歷史信息。 
 
 
 
如果"<對象>"是任何其他數據庫控制文件,那麼可能需要恢復數據 
庫。 
 

遇到這種錯誤,可以參照下列步驟進行解決:

進入到 NODE000x/SQL000x 目錄下,找到該文件 db2rhist.asc 文件以及其備份文件 db2rhist.bak,然後把 db2rhist.asc 文件移動到其他目錄中。

重新執行數據庫備份命令,在執行過程中,DB2 仍然會報錯,不過會自動用 db2rhist.bak 文件來生成 db2rhist.asc 文件,當然前提是之前的錯誤只是由於 db2rhist.asc 文件損壞引起的,而 db2rhist.bak 文件沒有損壞。

再次執行數據庫備份命令,就可以備份成功了。

如果按照上述步驟執行後,還報這個錯誤,則可能是因為 db2rhist.bak 文件也損壞了,此時我們可以重新執行上面的三步操作,只是在第一步的時候,在挪走 db2rhist.asc 文件的同時把 db2rhist.bak 文件也挪走。這樣,在執行第二步的時候,DB2 會自動生成 db2rhist.asc 文件和 db2rhist.bak 文件。

編譯 SQL 語句時出現 SQL0101N 錯誤

我們在編譯 SQL 語句,特別是復雜的 SQL 語句時,如果調用多個表或觸發多個觸發器,可能會占用大量的系統資源,此時,如果資源不夠,可能會報錯誤代碼為 SQL0101N 的錯誤。

遇到這樣的錯誤,我們首先還是在 DB2CLP 窗口中,查詢錯誤代碼為 SQL0101N 的錯誤號的幫助信息,具體如清單 13 所示:

清單 13 . 查詢錯誤代碼為 SQL0101N 代表的含義

C:\> db2 ? SQL0101N 
 
 
 SQL0101N 語句太長或者太復雜。 
 
說明 : 
 
因為超過長度或復雜度方面的系統限制,或因為涉及到太多的約束或觸發器,所以不能處理該語句。 
 
如果該語句是創建或修改壓縮描述的語句,那麼新的壓縮描述對系統目錄中相應的列而言可能太大。 
 
聯合系統用戶還應檢查該語句是否: 
 * 超過對長度或復雜性的聯合服務器系統限制或數據源系統限制。 
 * 違反其他某些特定於數據源的限制。 
 
不能處理該語句。 
 
注 : 在對運行於不同代碼頁下的應用程序和數據庫執行字符數據轉換時,轉換的 
結果超過長度限制。 
 
用戶響應 : 
 
執行下列任意一項操作: 
 * 將該語句分成為更短或簡單些的 SQL 語句。 
 * 增大數據庫配置文件中語句堆(stmtheap)的大小。 
 * 減少語句中涉及的檢查或引用約束的數量,或者減少外鍵的索引數量。 
 * 減少該語句中涉及的觸發器數。 
 * 聯合系統用戶:請確定哪個數據源使該語句失敗(請參閱《故障診斷指南》以 
了解標識失敗的數據源所要遵循的過程),並確定拒絕的原因。如果拒絕來自 
聯合服務器,那麼在數據庫配置文件中增大語句堆(stmtheap)的大小。 
 
 sqlcode:-101 
 
 sqlstate:54001

如清單 13 所提供的提示,這是由於語句太長或者太復雜引起的,我們首先應該確認一下系統中沒有遞歸的觸發器存在(如果有的話,要取消這樣的觸發器),然後可以考慮修改以下數據庫配置參數來解決這個問題:

增大數據庫配置文件中語句堆( stmtheap )的大小。

APPLHEAPSZ 缺省應用程序堆( application heap4KB )。

PCKCACHESZ 程序包高速緩存大小( package cache4KB )。

恢復已刪除的表 (Dropped Table Recovery)

我們在維護 DB2 數據庫的過程中,偶爾會發生誤刪除表( DROP TABLE )的操作,這種誤操作和刪除表中的數據不一樣。誤刪除數據,對於歸檔日志管理模式的數據庫來說,可以通過前滾恢復來恢復數據,而誤刪除表則需要在前滾恢復的時候加上“ recover dropped table tableid to target_dir ”選項,具體的步驟如下:

確保數據庫可以進行前滾恢復( DB2 V9 之前的版本要保證數據庫配置參數 logretain 或 userexit 打開, DB2 V9 則除了打開 logretain 或 userexit 參數可以把數據庫改成歸檔管理模式,還可以通過修改 logarchmeth1 數據庫配置參數來更改日志管理模式)。注意,需要在誤刪除表操作發生之前,數據庫已經處於歸檔日志管理模式狀態。

確保要被恢復的表所在的表空間“允許已廢棄的表可恢復”, 在 DB2 V9 之前版本的數據庫中,僅限常規表空間( regular tablespace ),在 DB2 V9 的版本中,由於對大型表空間做了修改,已經用來替代 V9 之前版本的常規表空間,所以,大型表空間也可以“允許已廢棄的表可恢復”。如果誤刪除的表所在的表空間沒有啟用“允許已廢棄的表可恢復”功能,可以通過命令啟用這個功能:
ALTER TABLESPACE表空間名DROPPED TABLE RECOVERY ON
也可以通過在控制中心使用圖形化的方式進行修改,如圖 3 所示:

圖 3. 修改表空間屬性,啟用“允許已廢棄的表可恢復”功能
DB2 日常維護技巧,第 3 部分:表的使用狀態、用戶連接、日志管理與數據恢復等

查看原圖(大圖)

通過發出 “ list history dropped table all for 數據庫名”命令,得到被刪除表的 tableid 和表結構的 DDL 語句。記錄下 tableid 和 DDL 語句,以便我們在第四步操作以及以後的恢復操作中使用。

利用誤刪除操作發生之前的數據庫全備恢復數據庫。

前滾數據庫,在前滾時加上“ recover dropped table tableid to target_dir ”選項,其中 tableid 是第三步中得到的 tableid , target_dir 表示目的目錄(在此目錄中,將會創建 ../NODE000X/data 文件)用來存放誤刪除表中的數據。

利用第三步得到的 DDL 語句創建誤刪除的表,並將第五步中 target_dir 目錄中的文件導入數據到表中。

下面我們通過具體的例子來看一下如何恢復已經刪除的表。

首先我們需要把示例數據庫 SAMPLE 的日志模式改成歸檔模式。下面在 DB2CLP 窗口中,先發出“ CONNECT TO SAMPLE ”命令,連上示例數據庫 SAMPLE ,再發出“ UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 DISK:C:\DB2\IMMEDIATE ”命令,修改數據庫配置參數 LOGARCHMETH1 ,使其自動歸檔日志到 C 盤 DB2 目錄下,具體如清單 14 所示:

清單 14 . 修改示例數據庫 SAMPLE 的配置參數

C:\> db2 connect to sample 
 
數據庫連接信息 
 
數據庫服務器 = DB2 / NT 9.1.0 
 SQL 授權標識 = RHETTE 
本地數據庫別名 = SAMPLE 
 
 C:\> DB2 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 DISK:C:\DB2\IMMEDIATE 
 DB20000IUPDATE DATABASE CONFIGURATION 命令成功完成。 
 SQL1363W 未動態更改為立即修改而提交的一個或多個參數。對於這些配置參數,必須在所有應用程序都與此數據庫斷開連接之後,更改才會生效。

命令執行成功,這樣我們就把示例數據庫 SAMPLE 的日志模式改成了歸檔。在清單 14 中的命令執行成功後,由於 LOGARCHMETH1 配置參數更改成功後,需要等數據庫上所有的連接都斷開後才會生效,所以我們在 DB2CLP 窗口中,發出“ FORCE   APPLICATIONS ALL ”命令斷開所有的連接,具體如清單 15 所示:

清單 15. 斷開所有應用程序連接

C:\> DB2 FORCE APPLICATIONS ALL 
 DB20000IFORCE APPLICATION 命令成功完成。 
 DB21024I 該命令為異步的,可能不會立即生效。

命令成功後,用 LIST   APPLICATIONS 看所有應用程序是否都斷開了,如果沒有斷開,再重復執行 FORCE APPLICATIONS ALL ,保證所有連接都斷開後,把數據庫做一次全備。在我們首次把數據庫的日志模式由循環模式改成歸檔模式後,數據庫會處於 BACKUP   PENDING 狀態,強制我們進行一次全量備份,在全量備份完成之前,不能訪問數據庫或表空間。

下面我們繼續在 DB2CLP 窗口中,發出“ BACKUP DB SAMPLE ”命令,全量備份示例數據庫 SAMPLE ,具體如清單 16 所示:

清單 16 . 對示例數據庫做一次全備

C:\> DB2 LIST   APPLICATIONS 
 DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。在 
 SQL 處理期間,它返回: 
 SQL1224N 由於錯誤或強制中斷,導致數據庫管理器不能接受新請求,已終止正在處理的所有請求,或者已終止特定請求。 SQLSTATE = 55032 
 
 C:\> db2 backup db sample 
 
備份成功。此備份映像的時間戳記是:20080405000129

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved