1. 程式人生 > >db2重定向恢復及常見問題

db2重定向恢復及常見問題

前言 
資料庫管理和維護工作中一項重要的內容就是對資料庫進行定期的備份和恢復。這種工作的重要性除了表現在資料的保全,系統的容災方面,還表現在為應用系統的開發和測試搭建資料庫環境。 
設想在一個不斷更新升級的應用環境中,資料庫的資料在不斷的更新,程式開發人員也在不斷開發新的版本,建立測試資料和環境,對應用進行測試,再發布到生產環境下。這樣,對於一個高複雜性的應用,使用生產環境中的真實資料來建立測試環境就變成了合理的選擇。當然,在使用真實資料之前,為了保護公司利益可能需要刪除或修改一些敏感的資料。 
在上述場景下,資料庫管理員就要根據專案開發的要求,把生產環境的資料複製到開發和測試環境。資料庫重定向恢復技術就提供了一個比較快的方式幫助管理員完成這項工作。 

本文針對哪有對 DB2 恢復有初步知識的讀者,重點討論在重定向恢復和前滾的過程當中經常碰到的問題,並通過一些實際應用中遇到的問題,探討如何事先避免以及問題發生之後的解決辦法。 
回頁首 
DB2 重定向恢復和前滾知識簡介 
從上一節假定的場景中,我們知道 DB2 重定向恢復常用於在不同的環境中進行資料庫的恢復。這些環境的不同就會給重定向恢復造成一些麻煩。比如:生產環境的記憶體通常比測試環境的都要大,生產環境中給事物日誌分配的空間也要大一些,另外,最明顯的區別就是測試環境中表空間的位置和原來在生產環境上不一樣了。對於這些區別,提前瞭解和掌握以後就有助於預防和解決在資料庫恢復時遇到的問題。下面就分別介紹重定向恢復和前滾的操作方法和相關命令。 

自動生成重定向恢復指令碼以及重定向恢復狀態查詢 
DB2 提供了命令,供使用者從一次資料庫備份檔案中提取資料庫重定向恢復指令碼。示例如下,其中 /db2_backup/db2inst1/sample 是資料庫備份檔案所在的目錄,20101023180128 是資料庫備份檔案的時間戳。 
db2 restore db sample from /db2_backup/db2inst1/sample taken at 20101023180128 
redirect generate script redirect_sample.sql 
DB20000I The RESTORE DATABASE command completed successfully. 


所生成的重定向檔案 redirect_sample.sql,可以分為三個部分: 
1. Restore 語句 
此語句用來標示一個重定向的恢復操作命令開始,它在普通恢復的命令上加了 redirect 引數。 
RESTORE DATABASE SAMPLE 
FROM '/db2_backup/db2inst1/sample' 
TAKEN AT 20101023180128 
INTO SAMPLE 
REDIRECT; 

2. set containers 語句: 
當目標資料庫所的物理儲存裝置與原來的資料庫不一樣時,就需要下面的命令來指定新的物理容器。 
SET TABLESPACE CONTAINERS FOR 0 
USING ( 
  PATH '/db2inst1/SAMPLE' 
); 
SET TABLESPACE CONTAINERS FOR 1 
USING ( 
  PATH '/ db2inst1/temp' 
); 
SET TABLESPACE CONTAINERS FOR 2 
USING ( 
  DEVICE '/dev/rsample_1G' 131072 
); 
…… 

3. restore continue 語句: 
此語句代表重定向恢復語句序列完成,系統開始恢復資料庫。 
RESTORE DATABASE SAMPLE CONTINUE; 

在資料庫進行恢復的過程中,我們可以通過 list utilities 命令檢視 restore 的狀態。示例如下: 
db2 list utilities show detail 

ID = 4 
Type = RESTORE 
Database Name = SAMPLE 
Partition Number = 0 
Description = db 
Start Time = 10/24/2010 13:49:17.515893 
State = Executing 
Invocation Type = User 
Progress Monitoring: 
  Completed Work = 2938126336 bytes 
  Start Time = 10/24/2010 13:49:17.515898 

其中的 Completed Work 代表已完成的資料量,與備份檔案的大小比較可以估算出大概的完成時間。 
常用前滾命令 , 所需日誌檔案的確定以及狀態查詢 
前滾命令多種多樣,這裡不一一列舉。最常用的語句就是 rollforward to 和 rollforward complete。 
例如,使用指定目錄的日誌檔案,前滾到某一時刻點: 
rollforward db sample to 2010-11-21-17.00.00.000000 
using local time overflow log path ( /db2_backup/sample/logs ) 

前滾結束: 
rollforward db sample complete overflow log path ( /db2_backup/sample/logs ) 

最有效的查詢 rollforward 狀態的語句: 
db2 rollforward db db_name query status 

例如,restore 成功結束,rollforward 還沒有開始,檢視狀態會得到類似結果: 
db2 rollforward db sample query status 

  Rollforward Status 

Input database alias = sample 
Number of nodes have returned status = 1 

Node number = 0 
Rollforward status = DB pending 
Next log file to be read = S0001519.LOG 
Log files processed = - 
Last committed transaction = 2010-10-23-08.41.52.000000 UTC 

我們可以得知,rollforward 要讀取的下一個日誌檔案是 S0001519.LOG。 
在資料庫前滾的過程中,我們也可以通過 list utilities 檢視前滾的狀態。 
$ db2 list utilities show detail 

ID = 5 
Type = ROLLFORWARD RECOVERY 
Database Name = SAMPLE 
Partition Number = 0 
Description = Database Rollforward Recovery 
Start Time = 10/25/2010 01:45:44.392021 
State = Executing 
Invocation Type = User 
Progress Monitoring: 
  Phase Number [Current] = 1 
  Description = Forward 
  Completed Work = 824384727 bytes 
  Start Time = 10/25/2010 01:45:44.392051 

  Phase Number = 2 
  Description = Backward 
  Completed Work = 0 bytes 
  Start Time = Not Started 

回頁首 
DB2 重定向恢復常見問題解析 
在 DB2 重定向恢復的三個階段中,錯誤常常發生在第二階段,也就是 set tablespace containers 的時候。在這裡列舉了一些常見的錯誤,和這些錯誤的解決方法及預防。供大家參考。 
對裸裝置型別的容器,大小計算錯誤 
命令及結果: 
db2 set tablespace containers for 8 using( DEVICE '/dev/rsample_1G' 262144 ) 
SQL1422N The size of the container is invalid. SQLSTATE=54039 

解決方法以及預防: 
容器大小 262144 不正確。結合 lslv 的檢查結果和表空間的 pagesize,重新計算容器大小。 
lslv rsample_1G 
LOGICAL VOLUME: rsample_1G  VOLUME GROUP: datavg3 
LV IDENTIFIER: 00c790ea00004c000000011fb9a36069.112 PERMISSION: read/write 
VG STATE: active/complete 
LV STATE: opened/syncd 
TYPE: raw 
WRITE VERIFY: off 
MAX LPs: 512 

PP SIZE: 64 megabyte(s) 
COPIES: 1 
SCHED POLICY: parallel 
LPs: 16  
PPs: 16 
STALE PPs: 0 
BB POLICY: relocatable 
INTER-POLICY: minimum 
RELOCATABLE: yes 
INTRA-POLICY: middle 
UPPER BOUND: 1024 
MOUNT POINT: N/A 
LABEL: None 
MIRROR WRITE CONSISTENCY: on/ACTIVE 
EACH LP COPY ON A SEPARATE PV ?: yes 
Serialize IO ?: NO 
DEVICESUBTYPE : DS_LVZ 

計算公式如下:PPs * PP Size / pagesize 
此處,pagesize 按照8 K 計算 。 
db2 set tablespace containers for 8 using( DEVICE '/dev/rsample_1G' 131072 ) 
DB20000I The SET TABLESPACE CONTAINERS command completed successfully. 

指定的容器,已經被使用了 
命令及結果: 
db2 set tablespace containers for 64 using( DEVICE '/dev/rsample_4G' 524288 ) 
SQL0294N The container is already in use. SQLSTATE=42730 

解決方法以及預防: 
通過 lslv 檢查裸裝置的狀態,注意其中 LV STATE 的值。如果是 opened/syncd,意味著這個容器正在被其他的系統佔用。如果是 closed/syncd,就可能是可用的裝置。這裡說“可能”是因為有些時候,比如資料庫停掉以後,它所使用的所有的裸裝置就都是 closed/syncd 狀態,但如果這時其他應用使用了這個裸裝置,就會讓這個資料庫受損。所以在使用前一定要確認,沒有其他系統在使用這個裸裝置。 
DB2 在使用一個裸裝置的時候會設定一些標誌位,表明哪一個例項的資料庫正在使用這個裸裝置。但是當 DB2 刪除一個表空間或者其中一個容器的時候,有時候這些標誌位不會被清空,這時候雖然沒有其他的資料庫在使用這個裝置,依然會出現上面的錯誤。在確認沒有其他系統使用之後,就可以用下面的 DB2 命令手動清空這些標誌位。 
db2untag -f /dev/rsample_4G 

指定的容器型別,與原有容器不一致 
命令及結果: 
db2 set tablespace containers for 3 using( PATH '/db2inst1/SAMPLE/TBS/SYSTOOL’) 
SQL0298N Bad container path. SQLSTATE=428B2 

解決方法以及預防: 
原有容器是 FILE 型別,如果在重定向恢復的時候指定為 PATH,就會報錯。 
修改後: 
db2 set tablespace containers for 3 
using( File '/db2inst1/SAMPLE/TBS/SYSTOOL.DAT' 100 ) 
DB20000I The SET TABLESPACE CONTAINERS command completed successfully. 

指定的容器名發生錯誤 
命令及結果: 
db2 set tablespace containers for 106 
using( DEVICE '/dev/dev/rsample_500M' 65536 ) 
SQL0298N Bad container path. SQLSTATE=428B2 

解決方法以及預防: 
確保容器名及路徑的正確性。 
db2 set tablespace containers for 106 
using( DEVICE '/dev/rsample_500M' 65536) 
DB20000I The SET TABLESPACE CONTAINERS command completed successfully. 

Restore db continue 的時候發生錯誤,資料庫恢復目錄滿 
db2 restore db sample continue 
SQL2544N The directory where the database is being restored has become full. 

解決方法以及預防: 
檢查包含 PATH 的語句, 
set tablespace containers for 0 using( 
  PATH '/db2inst1/SAMPLE' 
) ; 

可能的原因: 
目錄 /db2inst1/SAMPLE 滿了。 
重點檢查 SMS 表空間所在目錄的使用情況。更換或者擴充檔案系統。也可以通過 db2diag.log 檔案得到更詳細的資訊。 
回頁首 
前滾常見問題解析 
執行 rollforward 時,日誌檔案缺失 
命令及結果: 
db2 "rollforward db sample to 2010-10-24-17.00.00 
using local time overflow log path (/db2_backup/db2inst1/logs)" 

SQL4970N Roll-forward recovery on database "SAMPLE" 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 "S0102805.LOG". 

錯誤日誌(db2diag.log): 
2010-11-23-03.03.17.731773-300 I2966741A419 LEVEL: Error 
PID : 1089734 TID : 2615 PROC : db2sysc 0 
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE 
EDUID : 2615 EDUNAME: db2loggr (SAMPLE) 0 
FUNCTION: DB2 UDB, data protection services, sqlpgasn, probe:650 
RETCODE : ZRC=0x801000BB=-2146434885=SQLPR_MISSING_LOGFILES 
"rollforward missing log files" 

解決方法以及預防: 
從備份磁盤獲取所需的日誌檔案。然後再次執行 rollforward 命令。 
也可以通過以下命令來提前準備所需日誌檔案,避免出錯。可以從“Start Time”和“End Time”判斷 rollforward 到某個時間點所需的最後的一個日誌檔案。 
db2 list history archive log since 20101023040030 for sample | more 
  List History File for sample 
Number of matching file entries = 30 
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID 
-- --- -------- ---- --- ------- ------- -------- 
  X D 20101023045856 1 U S0102805.LOG C0000000 
------------------------------------------- 
------------------------------------------- 
  Comment: 
Start Time: 20101023045856 
  End Time: 20101026033936 
  Status: A 
------------------------------------------- 

執行 rollforward complete 時,活動日誌空間滿 
命令及結果: 
db2 "rollforward db sample complete overflow log path /db2_backup/db2inst1/logs)" 
SQL1004C There is not enough storage on the file system to process the command. 

錯誤日誌(db2diag.log): 
2010-10-27-23.06.28.470787-240 I172869537A496 LEVEL: Error 
PID : 1970552 TID : 5655 PROC : db2sysc 0 
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE 
APPHDL : 0-61 APPID: *LOCAL.db2inst1.101028030442 
AUTHID : DB2inst1 
EDUID : 5655 EDUNAME: db2agent (SAMPLE) 0 
FUNCTION: DB2 UDB, recovery manager, sqlpForwardRecovery, probe:2610 
RETCODE : ZRC=0x850F000C=-2062614516=SQLO_DISK "Disk full." 
  DIA8312C Disk was full. 

解決方法以及預防: 
修改資料庫配置引數 NEWLOGPATH,指定空間更大的目錄作為活動日誌目錄。然後再次執行 rollforward 命令。 
db2 update db cfg for sample using NEWLOGPATH /db2_backup/db2inst1_log01/sample 


或者提前修改 redirect restore 命令,在做資料庫恢復的時候就指定更大的目錄作為活動日誌目錄。這樣可以避免在 rollforward 的過程中遇到問題。 
db2 "restore db sample \ 
  from /db2_backup/db2inst1/backup \ 
  taken at 20101023084025 newlogpath /db2_backup/db2inst1_log01/sample \ 
  redirect" 


與緩衝池相關的錯誤 ,解決方法以及預防 
命令及結果: 
db2 "rollforward db sample to 2010-11-21-17.00.00.000000 
using local time overflow log path ( /db2_backup/db2inst1/SAMPLE/logs ) " 
SQL1218N There are no pages currently available in bufferpool "". 
SQLSTATE=57011 

錯誤日誌(db2diag.log): 
2010-11-24-05.19.14.842891-300 I67571A941 LEVEL: Error 
PID : 296330 TID : 75304 
PROC : db2sysc 0 
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE 
APPHDL : 0-27 APPID: *LOCAL.db2inst1.101124101914 
AUTHID : DB2INST1 
EDUID : 75304 EDUNAME: db2agent (SAMPLE) 0 
FUNCTION: DB2 UDB, SQO Memory Management, SqloMemController::registerConsumer, p 
robe:1000 
MESSAGE : ZRC=0x8B0F0000=-1961951232=SQLO_NOMEM "No Memory Available" 

相關推薦

db2定向恢復常見問題

前言 資料庫管理和維護工作中一項重要的內容就是對資料庫進行定期的備份和恢復。這種工作的重要性除了表現在資料的保全,系統的容災方面,還表現在為應用系統的開發和測試搭建資料庫環境。 設想在一個不斷更新升級的應用環境中,資料庫的資料在不斷的更新,程式開發人員也在不斷開發新的版本,

DB2異庫(異機)定向恢復步驟

建立例項 # cd /opt/IBM/db2/v9.7/instance # ./db2icrt -p 50004 -u db2inst4 db2inst4   建庫 $ db2 create db payment on /home/db2inst4 using code

rman結合netbackup定向恢復oracle數據庫

linux oracle rman 數據庫恢復 1.創建數據庫目錄2.從原來主機復制pfile文件,並更改oracle_sidvi .bash_profile source .bash_profile3.啟動數據到nomount狀態$ sqlplus / as sysdba SQL> s

BAT 批處理指令碼教程 BAT 批處理指令碼教程 DOS的定向命令在安全方面的應用

BAT 批處理指令碼教程 第一章 批處理基礎第一節 常用批處理內部命令簡介批處理定義:顧名思義,批處理檔案是將一系列命令按一定的順序集合為一個可執行的文字檔案,其副檔名為BAT或者CMD。這些命令統稱批處理命令。小知識:可以在鍵盤上按下Ctrl+C組合鍵來強行終止一個批處理的執行過程。瞭解了大

Http協議3XX定向介紹301跳轉和302跳轉應用場景

 一 總體介紹Http協議中的3XX都是重定向(Redirection),在Http 1.1的rfc中介紹了300-307總共7個,它們分別是:300 Multiple Choices301 Moved Permanently 302 Found303 See Other

D_db2定向恢復+日誌前滾,恢復誤刪除的資料

UPDATE COMMAND OPTIONS USING S ON Z ON HIS_NODE0000.out V ON; SET CLIENT ATTACH_DBPARTITIONNUM  0; SET CLIENT CONNECT_DBPARTITIONNUM 0; RESTORE DATABASE my

Linux基礎入門--IO定向管道

linux_io重定向、管道IO重定向及管道 一直都提到,程序:指令+數據 其實程序也有IO,數據的來源有多個地方:文件、外部可用於輸入的設備:文件(linux一切皆文件) 鍵盤設備、文件系統上的常規文件加載內容、網卡等;可用於輸出的設備:文件(linux一切皆文件) 顯示器、文件系統

linux管理IO定向

linux 重定向 linux管理及IO重定向

ajax請求不能定向問題探究解決【借鑒、參考】

images 攔截 意見 請求 變化 代碼示例 log blog header 【聲明】本文章是為了解決個人項目中遇到的ajax請求與重定向的問題,參考了多位網友的博客和意見,感謝這些網友! 1.原因探究及解決方法(參考網友,只做以後查詢用) response.sen

Linux 入門記錄:十六、Linux 多命令協作:管道定向

不同的 重定向 協作 border 定向 等等 錯誤 錯誤信息 logs 一、多命令協作 在 Linux 系統當中,大多數命令都很簡單,很少出現復雜功能的命令,每個命令往往只實現一個或多個很簡單的功能。通過將不同功能的命令組合一起使用,可以實現某個復雜功能的。 Linu

2.2-IO定向,管道文本處理工具

io 重定向 管道 bash的IO重定向及管道 程序:指令+數據(數據結構+算法) 讀入數據:input 輸出數據:output 打開的文件都有一個fd:file descriptor(文件描述符) 標準輸入:keyborad,

管道IO定向

zl管道和重定向:|、>、>>、<、<<運算器、控制器:CPU存儲器:RAM(易失性存儲器)輸入/輸出設備程序:指令和數據寄存器:CPU暫時存儲器系統設定:默認輸出設備:標準輸出,STDOUT,1 默認輸入設備:標準輸入,STDIN,0

Linux基礎管理—— " 標準IO定向管道 "

輸入輸出重定向 管道 標準輸入 標準錯誤輸入 1、標準輸入和輸出 一般來說程序是由指令+數據組成;那麽就不可避免的要讀入和輸出數據,即input和output。 打開的文件都有一個fd: file descriptor (文件描述符),可以在/proc/$$/fd中查看當前終端打開的文件

網站建設之網站301定向跳轉對介紹

行業 display get 404頁 新網 調整 內容 暫時 class 在之前我們介紹了網站404頁面的制作及作用,今天我們來聊聊網站建設優化中必可可少的網址301重定向跳轉。 一. 為什麽要做網頁301重定向操作? 在網站長期打理運營過

Servlet 請求轉發與定向

style pattern load 需要 shutdown att nbsp host 瀏覽器 Servlet: Java編寫的服務器端程序,處理客戶端的http請求並將其結果發送到客戶端。Servlet容器Tomcat: 最熟悉的是容器就是tomcat。在tomcat中

請教一下linux中程序定向輸出到文...[模式實現]

zcl inux log www. tar xxd html lin scm 56e3xa陌緣唾詠爍蹤http://blog.sina.com.cn/s/blog_17da0698f0102xdu0.html8vbt4y轎匣彩凸莆庇http://blog.sina.com.

nginx的多域http、https同時訪問配置http定向https

nginx https http nginx的多域http、https同時訪問配置及http重定向https 1、關於ssl 服務證書的申請或生成就略過 2、nginx關於多域名訪問服務器(1)配置nginx中conf文件夾下的nginx.conf加入代碼(環境是windows 2008 ser

系統啟動流程&&管道定向

備註 -a linux 系統 初始 stdout runlevel 關註 gpo 發生 System startup process && pipeline and redirection. 試驗環境:debian9 物理機。 第一部分,系統啟動流程: 系統

shell介紹,history,別名,通配符定向

通配符 重定向 shell介紹 shell是一個命令解釋器,提供用戶和機器之間的交互 支持特定的語法,比如邏輯判斷,循環 每個用戶都可以有自己特定的shell CentOS7默認shell為bash,(Bourne Agin Shell紀念Bourne命名的) 還有zsh,ksh等 歷史命令 h

laravel路由 實現短連接生成跳轉(php 301定向

AC ont pla 分享圖片 eve 生成 rst val mage   最近懶癌犯了,本來早想做的事拖了1個月。短連接這個之前工作中發送短信是用到過,一般大的網站都會有自己的短連接生成網站,我們公司也有。當然這次我是想在自己的服務器上弄。   短連接原理:將網站地址傳到