[DB2]線上備份資料庫與表空間
線上備份資料庫和線上備份表空間,應該是大多數生產環境下使用的備份方式。其最大的優點是,能夠在不斷開使用者連線的情況下,對資料進行備份。
在還原的時候,若是針對資料庫級的還原,則需要斷開所有使用者的連線;而表空間級別的還原,則可以在online狀態下進行,且還原可直接使用資料庫的備份檔案進行。
一、線上備份與資料庫“離線”還原
1、 備份資料庫,並且備份日誌(備份的是備份期間其他使用者的事務操作,產生的日誌):
在另一個會話中,當備份開始時,就插入一條記錄,並進行提交,本例中將該資料提交完之後,發現備份還在進行之中:
Session A進行備份:
db2 => commit
DB20000I The SQL command completed successfully.
db2 => backup database sample online to /home/db2inst1/bak_sample include logs
Backup successful. The timestamp for this backup image is : 20100804225927
Session B在Session A備份開始後,立刻插入資料:
db2 => insert into newtable values(777)
DB20000I The SQL command completed successfully.
db2 => commit
DB20000I The SQL command completed successfully.
Session A在備份完成之後,再次連上資料庫,就發現已經多了一條資料:
db2 => connect to sample
Database Connection Information
Database server = DB2/LINUX 9.7.1
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2 => select * from newtable
AA
-----------
123
222
333
444
555
777
6 record(s) selected.
2、現在模擬故障,表newtable所在的表空間容器,意外丟失:
[db2inst1@localhost ~]$ rm -f /home/db2inst1/db2inst1/NODE0000/SAMPLE/T0000002/C0000000.LRG
db2 => select * from newtable
AA
-----------
SQL0290N Table space access is not allowed. SQLSTATE=55039
3斷開所有連線,對資料庫進行restore和rollforward:
db2 => force applications all
DB20000I The FORCE APPLICATION command completed successfully.
DB21024I This command is asynchronous and may not be effective immediately.
db2 => restore database sample from /home/db2inst1/bak_sample taken at 20100804225927
SQL2539W Warning! Restoring to an existing database that is the same as the
backup image database. The database files will be deleted.
Do you want to continue ? (y/n) y
DB20000I The RESTORE DATABASE command completed successfully.
db2 => rollforward database sample to end of logs and stop
Rollforward Status
Input database alias = sample
Number of nodes have returned status = 1
Node number = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = S0000004.LOG - S0000005.LOG
Last committed transaction = 2010-08-04-23.18.19.000000 Local
DB20000I The ROLLFORWARD command completed successfully.
4登陸上資料庫,發現在步驟1中插入的記錄,也恢復成功了:
db2 => connect to sample
Database Connection Information
Database server = DB2/LINUX 9.7.1
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2 => select * from newtable
AA
-----------
123
222
333
444
555
777
6 record(s) selected.
通過上述實驗發現,直接restore和rollforward資料庫,需要斷開所有使用者的連線,“代價”過大。
二、使用資料庫備份檔案,進行表空間線上還原
下面,還是使用上面實驗中的資料庫的備份,我們僅對錶空間進行online狀態下的操作,可以在不斷開使用者連線的情況下進行。
1、 先將表空間容器刪除
[db2inst1@localhost ~]$ rm -f /home/db2inst1/db2inst1/NODE0000/SAMPLE/T0000002/C0000000.LRG
2、 進行restore,用資料庫的備份檔案來還原,僅還原表空間,狀態處於online:
db2 => restore database sample TABLESPACE ( USERSPACE1 ) ONLINE from /home/db2inst1/bak_sample taken at 20100804225927
DB20000I The RESTORE DATABASE command completed successfully.
3、進行rollforward,狀態同樣是online:
db2 => rollforward database sample to end of logs and stop tablespace (USERSPACE1) online
Rollforward Status
Input database alias = sample
Number of nodes have returned status = 1
Node number = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = -
Last committed transaction = 2010-08-04-23.18.19.000000 Local
DB20000I The ROLLFORWARD command completed successfully.
4、其他已經連線上的使用者,此時就能查詢到結果了。並且在DBA進行恢復的時候,不會強制斷開使用者的連線:
db2 => select * from newtable
AA
-----------
SQL0290N Table space access is not allowed. SQLSTATE=55039
db2 => select * from newtable
AA
-----------
123
333
444
555
777
5 record(s) selected.
問:第一次查詢時,怎麼顯示了“SQL0290N Table space access is not allowed. SQLSTATE=55039”的結果?
答:表空間未完成恢復,狀態不是normal時,是不允許其他使用者訪問表空間的資料的。一旦恢復成功,使用者就能夠進行相應的操作。
問:對錶空間進行restore和rollforward操作的使用者,其本身與資料的連線,是否會被斷開?
答:會被斷開。詳情如下:
db2 => rollforward database sample to end of logs and stop tablespace (USERSPACE1) online
Rollforward Status
Input database alias = sample
Number of nodes have returned status = 1
Node number = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = -
Last committed transaction = 2010-08-04-23.18.19.000000 Local
DB20000I The ROLLFORWARD command completed successfully.
db2 => select * from newtable
SQL1024N A database connection does not exist. SQLSTATE=08003
db2 => connect to sample
Database Connection Information
Database server = DB2/LINUX 9.7.1
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2 => select * from newtable
AA
-----------
123
333
444
555
777
5 record(s) selected.
db2 =>
小結:表空間的線上還原,可以在不斷開已有資料庫使用者連線的情況下進行。且當我們沒有表空間的備份檔案的時候,可以選擇一個合適的資料庫的備份檔案來進行還原。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14600958/viewspace-670310/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DB2 使用表空間備份恢復庫DB2
- 表空間級資料庫備份恢復資料庫
- Oracle12c多租戶資料庫備份與恢復 - 備份表空間Oracle資料庫
- DB2建立資料庫,建立表空間DB2資料庫
- 備份與恢復--一個表空間能否被多個資料庫讀寫?資料庫
- DB2的資料庫備份與恢復DB2資料庫
- Backup And Recovery User's Guide-備份資料庫-使用RMAN備份表空間和資料檔案GUIIDE資料庫
- DB2線上備份與恢復DB2
- RMAN說,我能備份(3)--RMAN全庫備份和表空間備份
- mysql 無備份恢復drop資料-共享表空間MySql
- 備份與恢復--一個表空間能否被多個資料庫同時開啟?資料庫
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- 如何用rman 不備份只讀表空間的資料
- DB2資料庫的備份測試--開始備份DB2資料庫
- db2備份和恢復資料庫DB2資料庫
- MySQL 遷移表空間,備份單表MySql
- 線上遷移表空間資料檔案
- db2表空間DB2
- 檢視資料庫表空間資料庫
- oracle清除資料庫表空間Oracle資料庫
- 刪除資料庫表空間資料庫
- db2修改資料庫的日誌空間DB2資料庫
- DB2資料庫自動備份方法TRDB2資料庫
- DB2資料庫的備份和恢復DB2資料庫
- 資料庫(表)的邏輯備份與恢復資料庫
- Oracle 11g資料庫恢復:場景10:新建表空間沒有備份Oracle資料庫
- 淺談DB2資料庫的備份與恢復(下) (轉)DB2資料庫
- 備份表空間並上傳磁帶庫的指令碼指令碼
- 備份與恢復系列 九 丟失表空間資料檔案的還原與恢復
- 資料庫和表空間資料移動資料庫
- DB2表空間增加DB2
- 使用Oracle可傳輸表空間的特性複製資料(7)實戰RMAN備份傳輸表空間Oracle
- 改變資料庫undo表空間資料庫
- 資料庫物件遷移表空間資料庫物件
- 實戰RMAN備份傳輸表空間
- oracle監控表空間,JOB,rman備份Oracle
- OracleDatabase——資料庫表空間dmp匯出與匯入OracleDatabase資料庫
- Oracle 11g RAN恢復-表空間在只讀時做了資料庫的備份Oracle資料庫