DB2數據庫學習之數據庫備份還原

一、數據庫離線(脫機)備份

1、cd /db2_backup 切換到存放備份文件的目錄,如果沒有要新建

2、db2 list applications for db dbName(數據庫名) 確保沒人使用數據庫斷開連接

3、db2stop force

4、db2stop db2start  重啓數據庫實例保證斷開全部連接

5、db2 backup db dbName 執行備份命令

6、ll  查看備份目錄會有一個後綴爲.001的一個備份文件生成其中包含當前時間戳。

二、數據庫在線備份

1、在線備份

$ db2 backup db dbname online to 路徑 include logs

$ db2 restore db dbname from 路徑 taken at 時間戳

$ db2 "rollforward db dbname to 2013-02-31-20.00.00.000000 using local time and complete overflow log path (/backup/logs)"    前滾日誌恢復至指定時間點

2、查看備份記錄

$ db2 list history backup all for dbname   可以看到備份的紀錄

三、數據庫直接還原

1、cd /db2_backup  進入到備份目錄

2、db2 restore db dbName taken at  20101122205614 without rolling forward

執行上述命令則可以還原數據庫,如果有同名數據庫將會提示是否覆蓋,如果選擇Y將會覆蓋本地數據庫。20101122205614 是備份文件的時間戳,如備份文件名是PBCMONEY.0.lilax.NODE0000.CATN0000.20101122205614.001,則20101122205614即是時間戳Times。

還原完成後則要測試連接是否正確 db2 connect to dbName 如果成功則顯示數據庫信息,否則還原失敗。

3、可能遇到的問題:

注意:如果還原後提示一個或者多個表空間無法還原則可能是磁盤空間不夠,需要擴容後重新還原

注意:如果還原後提示SQL1117N  由於 ROLL-FORWARD PENDING,不能連接或激活數據庫 "XXX"。

SQLSTATE=57019

執行命令:rollforward db XXX to end of logs and complete 

 報錯:SQL4970N 由於數據庫分區 "0" 上的日誌文件丟失或損壞,所以對數據庫 "XXX" 

執行的前滾恢復操作無法到達指定的停止點(日誌末尾或時間點)。前滾恢復操作在處理日 

志文件 "S0036188.LOG" 時停止。 

 

從客戶環境數據庫服務器獲取S0036188.LOG 

 

3.查詢該還原目標數據庫日誌文件路徑 

 

執行命令:get db cfg for XXX 

 

找到日誌文件路徑,把第3點獲得的日誌拷貝到該路徑 

 

4.前滾數據庫 

 

命令:rollforward db XXX to end of logs and complete 

 

5.還原數據庫完成。 

四、數據庫重定向還原

1、獲得A庫備份文件,考到B庫服務器上;

2、執行命令通過備份文件自動生成重定向腳本;

$ db2 restore db [A庫名稱] <from ‘[備份文件存放地址]’> taken at [備份文件時間戳] redirect generate script [生成腳本名稱]

Eg:

$ db2 restore db regiedb taken at 20160817162305 redirect generate script 20160818_regiedb2sznhm_redirect.sql

[db2hyzm@hyzmdb2sertemplate ~]$ cd hnzmbackup201608

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ ll

總用量 1442180

-rw-r--r--. 1 db2hyzm db2iadm1 1476788224 8月  18 18:47 REGIEDB.0.db2hyzm.DBPART000.20160817162305.001

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ db2 restore db regiedb taken at 20160817162305 redirect generate script 20160818_regiedb2sznhm_redirect.sql

SQL1433N  應用程序已與 "SZMHN"

相連,同時在發出命令時要求與 "REGIEDB"

連接,以便成功執行該命令。

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ db2 connect reset

DB20000I  SQL 命令成功完成。

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ db2 restore db regiedb taken at 20160817162305 redirect generate script 20160818_regiedb2sznhm_redirect.sql

DB20000I  RESTORE DATABASE 命令成功完成。

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$ ll

總用量 1442196

-rw-r--r--. 1 db2hyzm db2iadm1      13495 8月  18 22:55 20160818_regiedb2sznhm_redirect.sql

-rw-r--r--. 1 db2hyzm db2iadm1 1476788224 8月  18 18:47 REGIEDB.0.db2hyzm.DBPART000.20160817162305.001

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$

3、不用創建庫直接回復就會創建數據庫了,查看生成的腳本,參考腳本將一些目錄修改成想要還原導的地址即可;

Eg:修改後的腳本

db2 RESTORE DATABASE REGIEDB[p1]  TAKEN AT 20160817162305[p2]  ON '/home/db2server/zmyhn'[p3]  DBPATH ON'/home/db2server/zmyhn/zmhn'[p4]  INTO SZMHN[p5]  REDIRECT WITHOUT ROLLING FORWARD

-------------------------------------------

db2 SET TABLESPACE CONTAINERS FOR 4 USING "( FILE '/home/db2server/zmyhn/tablesps/zmhn/[p6] datafile01.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile02.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile03.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile04.dat' 32000, FILE '/home/db2server/zmyhn/tablesps/zmhn/datafile05.dat' 32000)"[p7] 

-----------------------------------------

db2 RESTORE DATABASE REGIEDB[p8]  CONTINUE

-----------------------------------------

提示:整個過程需一氣呵成,否則會很多意想不到錯誤。有問題就從頭再來一次就好了。

4、恢復完成後,連接數據庫檢查是否正常。

$ db2 connect to SZMHN user db2admin using db2admin

如有此類錯誤:

SQL1762N 不能與數據庫相連,因爲沒有足夠的空間用來分配活動的日誌文件。SQLSTATE=08004

【01】可先查看數據庫配置:

$ db2 get db cfg for SZMHN|grep LOG

 目錄高速緩存大小 (4KB)                (CATALOGCACHE_SZ) = 300

 日誌緩衝區大小 (4KB)                          (LOGBUFSZ) = 2150

 日誌文件大小 (4KB)                          (LOGFILSIZ) = 2048

 主日誌文件的數目                           (LOGPRIMARY) = 5

 輔助日誌文件的數目                          (LOGSECOND) = 20

 已更改的至日誌文件的路徑                   (NEWLOGPATH) =

 日誌文件路徑                                            = /home/db2server/zmyhn/zmhn/db2hyzm/NODE0000/SQL00001/LOGSTREAM0000/

 溢出日誌路徑                          (OVERFLOWLOGPATH) =

 鏡像日誌路徑                            (MIRRORLOGPATH) =

 磁盤上已滿的塊日誌                    (BLK_LOG_DSK_FUL) = NO

 非記錄塊操作                          (BLOCKNONLOGGED) = NO

 事務使用的最大主日誌空間的百分比        (MAX_LOG)= 0

 1 個活動 UOW 的活動日誌文件的數目        (NUM_LOG_SPAN) = 0

 第一個日誌歸檔方法                        (LOGARCHMETH1) = OFF

 logarchmeth1 的歸檔壓縮   (LOGARCHCOMPR1) = OFF

 logarchmeth1 的選項                        (LOGARCHOPT1) =

 第二個日誌歸檔方法                        (LOGARCHMETH2) = OFF

 logarchmeth2 的歸檔壓縮   (LOGARCHCOMPR2) = OFF

 logarchmeth2 的選項                        (LOGARCHOPT2) =

 在索引構建期間記錄頁                    (LOGINDEXBUILD) = OFF

 日誌 DDL 語句                           (LOG_DDL_STMTS) = NO

 日誌應用程序信息                        (LOG_APPL_INFO) = NO

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$

【02】查看磁盤設備空間使用情況:

$ df -h

Filesystem            Size  Used Avail[p9]  Use% Mounted on

/dev/mapper/vg_hyzm-lv_root

                       50G   39G  7.7G  84% /

tmpfs                 2.9G  248K  2.9G   1% /dev/shm

/dev/sda1             477M   42M  410M  10% /boot

/dev/mapper/vg_hyzm-lv_home

                       43G   36G  5.2G[p10]   88% /home

/dev/sr0              3.6G  3.6G     0 100% /media/RHEL-6.7 Server.x86_64

[db2hyzm@hyzmdb2sertemplate hnzmbackup201608]$

由於把歸檔日誌主日誌大小和個數設置過大,導致日誌文件所在盤空間不足連接數據庫時提示上述錯誤。此時需要修改主日誌大小或個數。

Eg:

$ db2 update db cfg for szmhn[p11]  using logfilsiz 2048[p12]  logprimary 5[p13] 

 

再次連接,檢查表,nickname、視圖的可用性。

員數據庫名稱

備份文件的時間戳。

數據的存儲目錄,系統管理表空間會在此目錄以【原實例名】/【NODE0000】/【新庫名】/* 的結構創建。

數據庫的主目錄,存放日誌、管理文件等。

新庫名稱。

序號爲4的表空間文件存放的目錄,自行定義,但要先用Linux系統用戶 root創建,並賦予至少775的權限。

括號首位加雙引號,否則報語句錯誤。

原庫的名稱。

剩餘的空間

此掛節點設備剩餘空間

數據庫名

日誌文件大小

主日誌文件個數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章