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個月。短連接這個之前工作中發送短信是用到過,一般大的網站都會有自己的短連接生成網站,我們公司也有。當然這次我是想在自己的服務器上弄。 短連接原理:將網站地址傳到