rman只讀表空間的備份和恢復
阿新 • • 發佈:2022-05-15
目錄
rman只讀表空間備份和恢復
當使用alter tablespace tbs read only時,資料檔案會執行檢查點程序(將所有髒緩衝區的內容寫至磁碟),
當前的SCN號會被標註,同時儲存了SCN的資料檔案頭部被凍結不再變化.控制檔案內也會記錄該資料檔案的凍結資訊。
特點:
1) 減少啟動和關閉時間:當表空間設定為只讀後,在啟動和關閉時就不會對只讀表空間對應的資料檔案進行處理。從而減少了資料庫啟動和關閉的時間。
2) 減少備份恢復時間:備份只讀表空間後,不需要在對其進行備份,減少了備份量
3)不同分割槽表放在不同表空間,歷史的資料做只讀,便於管理
備份只讀表空間
方式:
1)exclude排除不需要備份的表空間(需要手動指定,不方便)
2)skip readonly跳過只讀表空間(自動跳過)
exclude方式
1建立測試的只讀表空間test01
create tablespace TEST1 datafile '/u01/app/oracle/oradata/ORCL/test1.dbf' size 10m; create table t1(a int) tablespace test1; insert into t1 select rownum from dual connect by rownum<=10; alter tablespace test1 read only; SQL> select tablespace_name,contents,status from dba_tablespaces; TABLESPACE_NAME CONTENTS STATUS ------------------------------ --------------------- --------- SYSTEM PERMANENT ONLINE SYSAUX PERMANENT ONLINE UNDOTBS1 UNDO ONLINE TEMP TEMPORARY ONLINE USERS PERMANENT ONLINE TEST1 PERMANENT READ ONLY
2.備份只讀表空間
backup tablespace test1 format '/tmp/test/%d_test1_%s.bk'; RMAN> list backup of database; 備份集列表 =================== BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間 ------- ---- -- ---------- ----------- ------------ ---------- 60 Full 1.12M DISK 00:00:00 14-5月 -22 BP 關鍵字: 60 狀態: AVAILABLE 已壓縮: NO 標記: TAG20220514T103917 段名:/tmp/test/ORCL_test1_80.bk 備份集 60 中的資料檔案列表 File LV Type Ckp SCN Ckp 時間 Abs Fuz SCN Sparse Name ---- -- ---- ---------- ---------- ----------- ------ ---- 15 Full 4202861 14-5月 -22 NO /u01/app/oracle/oradata/ORCL/test1.dbf
3.備份時排除只讀表空間
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
configure exclude for tablespace test1;
backup as compressed backupset incremental level 0 database format '/tmp/test/%d_%s.bk';
configure exclude for tablespace test1 clear;
backup current controlfile format '/tmp/test/control_%s.bk';
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup archivelog all delete input format '/tmp/test/arch_%s';
release channel ch1;
release channel ch2;
}
skip readonly方式
backup tablespace test1 format '/tmp/test/%d_test1_%s.bk';
備份只讀表空間之後
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup as compressed backupset incremental level 0 database format '/tmp/test/%d_%s.bk' include current controlfile skip readonly;
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup archivelog all delete input format '/tmp/test/arch_%s';
release channel ch1;
release channel ch2;
}
恢復只讀表空間
分三種情況:
- 備份是read only狀態,被破壞時是時read only(只需要recover)
- 備份是read only狀態,被破壞時是時read write
- 備份是read write狀態,被破壞時是時read only
備份是read only狀態,被破壞時是時read only
只需要resotore即可
--先備份
backup tablespace test1 format '/tmp/test/test1_%s.bk';
--檢視對應的檢查點資訊
SQL> select name,checkpoint_change# from v$datafile;
......
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf 4307981
/u01/app/oracle/oradata/ORCL/sysaux01.dbf 4307981
/u01/app/oracle/oradata/ORCL/undotbs01.dbf 4307981
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf 2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf 2159413
/u01/app/oracle/oradata/ORCL/users01.dbf 4307981
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf 2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf 3272499
/u01/app/oracle/oradata/ORCL/test1.dbf 4202861
--生成一個完全檢查點,強行寫髒塊更新資料檔案和控制檔案的檢查點
SQL> alter system checkpoint;
--檢視對比檢查點變化情況,只讀表空間檢查點鎖死不變
--同時也側面證明了cdb的系統操作不會作用pdb的資料檔案
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf 4308474
/u01/app/oracle/oradata/ORCL/sysaux01.dbf 4308474
/u01/app/oracle/oradata/ORCL/undotbs01.dbf 4308474
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf 2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf 2159413
/u01/app/oracle/oradata/ORCL/users01.dbf 4308474
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf 2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf 3272499
/u01/app/oracle/oradata/ORCL/test1.dbf 4202861
--刪除,模擬破壞資料檔案,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;
--資料檔案15號不見了
資料檔案 15: '/u01/app/oracle/oradata/ORCL/test1.dbf'
--rman恢復
run{
sql'alter database datafile 15 offline';
restore datafile 15;
sql'alter database datafile 15 online';
}
備份是read only狀態,被破壞時是時read write
--備份
backup tablespace test1 format '/tmp/test/test1_%s.bk';
--轉化為read write
SQL> alter tablespace test1 read write;
SQL> select tablespace_name,contents,status from dba_tablespaces;
TABLESPACE_NAME CONTENTS STATUS
------------------------------ --------------------- ---------
SYSTEM PERMANENT ONLINE
SYSAUX PERMANENT ONLINE
UNDOTBS1 UNDO ONLINE
TEMP TEMPORARY ONLINE
USERS PERMANENT ONLINE
TEST1 PERMANENT ONLINE
SQL> col table_name for a30;
SQL> select table_name,tablespace_name from user_tables where table_name='T1';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T1 TEST1
--修改表,同時檢查點號改變
SQL> insert into t1 select * from t1;
SQL> commit;
SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> select count(*) from t1;
COUNT(*)
----------
20
--刪除,模擬破壞資料檔案,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;
--rman恢復,可以從告警日誌中檢視詳細動作,利用歸檔或者沒有日誌切換就使用redo進行了進行恢復
run{
sql'alter database datafile 15 offline';
restore datafile 15;
recover datafile 15;
sql'alter database datafile 15 online';
}
備份是read write狀態,被破壞時是時read only
SQL> select tablespace_name,contents,status from dba_tablespaces;
TABLESPACE_NAME CONTENTS STATUS
------------------------------ --------------------- ---------
SYSTEM PERMANENT ONLINE
SYSAUX PERMANENT ONLINE
UNDOTBS1 UNDO ONLINE
TEMP TEMPORARY ONLINE
USERS PERMANENT ONLINE
TEST1 PERMANENT ONLINE
--先做備份
backup tablespace test1 format '/tmp/test/test1_%s.bk';
RMAN> list backup of tablespace test1;
備份集列表
===================
BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間
------- ---- -- ---------- ----------- ------------ ----------
117 Full 1.12M DISK 00:00:00 15-5月 -22
BP 關鍵字: 117 狀態: AVAILABLE 已壓縮: NO 標記: TAG20220515T110328
段名:/tmp/test/test1_139.bk
備份集 117 中的資料檔案列表
File LV Type Ckp SCN Ckp 時間 Abs Fuz SCN Sparse Name
---- -- ---- ---------- ---------- ----------- ------ ----
15 Full 4833216 15-5月 -22 NO /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> insert into t1 select * from t1;
SQL> commit;
SQL> select count(*) from t1;
COUNT(*)
----------
40960
--變為read only狀態,注意檢查點
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf 4829465
/u01/app/oracle/oradata/ORCL/sysaux01.dbf 4829465
/u01/app/oracle/oradata/ORCL/undotbs01.dbf 4829465
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf 2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf 2159413
/u01/app/oracle/oradata/ORCL/users01.dbf 4829465
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf 2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf 3272499
/u01/app/oracle/oradata/ORCL/test1.dbf 4833216
SQL> alter tablespace test1 read only;
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf 4829465
/u01/app/oracle/oradata/ORCL/sysaux01.dbf 4829465
/u01/app/oracle/oradata/ORCL/undotbs01.dbf 4829465
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf 2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf 2159413
/u01/app/oracle/oradata/ORCL/users01.dbf 4829465
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf 2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf 3272499
/u01/app/oracle/oradata/ORCL/test1.dbf 4833415
--生成完全檢查點
SQL> alter system checkpoint;
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf 4833517
/u01/app/oracle/oradata/ORCL/sysaux01.dbf 4833517
/u01/app/oracle/oradata/ORCL/undotbs01.dbf 4833517
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf 2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf 2159413
/u01/app/oracle/oradata/ORCL/users01.dbf 4833517
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf 2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf 3272499
/u01/app/oracle/oradata/ORCL/test1.dbf 4833415
--現在是read only
SQL> select tablespace_name,contents,status from dba_tablespaces;
TABLESPACE_NAME CONTENTS STATUS
------------------------------ --------------------- ---------
SYSTEM PERMANENT ONLINE
SYSAUX PERMANENT ONLINE
UNDOTBS1 UNDO ONLINE
TEMP TEMPORARY ONLINE
USERS PERMANENT ONLINE
TEST1 PERMANENT READ ONLY
SQL> select count(*) from t1;
COUNT(*)
----------
40960
--刪除,模擬破壞資料檔案,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;
SQL> select count(*) from t1;
COUNT(*)
----------
40960
SQL> insert into t1 select * from t1;
insert into t1 select * from t1
*
第 1 行出現錯誤:
ORA-00372: 此時無法修改檔案 15
ORA-01110: 資料檔案 15: '/u01/app/oracle/oradata/ORCL/test1.dbf'
--rman恢復
run{
sql'alter database datafile 15 offline';
restore datafile 15;
recover datafile 15;
sql'alter database datafile 15 online';
}
--對比檢查點,沒有變化
SQL> select name,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf 4833517
/u01/app/oracle/oradata/ORCL/sysaux01.dbf 4833517
/u01/app/oracle/oradata/ORCL/undotbs01.dbf 4833517
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf 2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf 2159413
/u01/app/oracle/oradata/ORCL/users01.dbf 4833517
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf 2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf 3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf 3272499
/u01/app/oracle/oradata/ORCL/test1.dbf 4833415