oracle小知識點12--傳輸表空間通過rman
傳輸表空間可通過rman,imp/exp或impdp/expdp去實現,以下通過rman實現.
os: centos 6.6
db version:11.2.0.4.0
以下測試:
##方便測試,源庫和目標庫為同一個庫
##源庫
[oracle@ct6605 ct66]$ sqlplus / as sysdba
##建立要傳輸的test表空間
SQL> create tablespace test datafile '/u02/oradata/ct66/test01.dbf' size 10m ;
[oracle@ct6605 ct66]$ rman target /
##備份資料庫用於自動輔助例項使用
RMAN> backup database;
[oracle@ct6605 ct66]$ sqlplus / as sysdba
##在test表空間下建表scott.test01
SQL> create table scott.test01 tablespace test as select 1 i from dual;
##在users表空間下建表scott.test01的索引scott.idx_testtts_01
SQL> create index scott.idx_testtts_01 on scott.test01(i) tablespace users;
##查詢表
SQL> select * from scott.test01;
/*
I
1
*/
##切換日誌.切換日誌是為了演示還原傳輸表空間在某個日誌序列
SQL> alter system switch logfile;
##檢視當前日誌序列
SQL> select sequence# from v$log where status='CURRENT';
/*
SEQUENCE#
41
*/
##往表scott.test01插入資料
SQL> insert into scott.test01 select 2 from dual;
SQL> commit;
##查詢表
SQL> select * from scott.test01;
/*
I
1
2
*/
##切換日誌
SQL> alter system switch logfile;
##檢視當前日誌序列
SQL> select sequence# from v$log where status='CURRENT';
/*
SEQUENCE#
42
*/
##確認平臺的版本和endian format是否支援
##這裡因為測試在同一個庫,肯定是支援.如果兩個庫的endian format不同,是需要有轉換的步驟
SQL> select b.name,i.version,b.platform_name, a.ENDIAN_FORMAT
from v$transportable_platform a,v$database b,v$instance i
where a.PLATFORM_ID=b.PLATFORM_ID;
/*
NAME VERSION PLATFORM_NAME ENDIAN_FORMAT
CT66 11.2.0.4.0 Linux x86 64-bit Little
*/
##確認表空間test是否是自包含
SQL> begin
dbms_tts.transport_set_check('test', true,true);
end;
/
##因為前面把表scott.test01的索引建在了users表空間下,這裡查詢出來不是自包含
SQL> select * from transport_set_violations;
VIOLATIONS
ORA-39907: Index SCOTT.IDX_TESTTTS_01 in tablespace USERS points to table SCOTT.TEST01 in tablespace TEST.
##重建索引到test表空間
SQL> alter index scott.idx_testtts_01 rebuild tablespace test;
##再次查檢表空間的自包含
SQL> begin
dbms_tts.transport_set_check('test', true,true);
end;
##已經滿足
SQL> select * from transport_set_violations;
VIOLATIONS
[oracle@ct6605 ct66]$ rman target /
##生成test表空間傳輸集.只要此一條命令即可.
RMAN> transport tablespace 'TEST'
tablespace destination '/home/oracle'
auxiliary destination '/home/oracle'
until logseq 41;
##檢視產生的匯入指令碼,表空間後設資料dmp和資料檔案.
[oracle@ct6605 ~]$ cd /home/oracle
[oracle@ct6605 ~]$ ls
CT66 dmpfile.dmp impscrpt.sql test01.dbf
##目標庫
##此處因為測試,源庫和目標庫為同一個庫,先刪除原有的test表空間.
[oracle@ct6605 ct66]$ sqlplus / as sysdba
SQL> drop tablespace test including contents and datafiles;
##通過指令碼匯入.此處可以根據自己的需要修改指令碼再執行,例如需要把test01.dbf移到資料檔案目錄.當然也可以不用匯入指令碼,通過impdp手動匯入dmpfile.dmp和test01.dbf.
[oracle@ct6605 ~]$ sqlplus / as sysdba @impscrpt.sql
##查詢表確認已經匯入
[oracle@ct6605 ct66]$ sqlplus / as sysdba
SQL> select * from scott.test01;
/*
I
1
*/
備註:
1.rman基於表空間的傳輸,可以不用象impdp/expdp方式將源庫表空間暫時read only即可
2.生成傳輸集之前不一定需要backup database,一般只需要備份system,sysaux,undo表空間和要傳輸的表空間即可.
3.通過rman實現,原理和tspitr相似,都是通過自動輔助例項,在輔助例項上還原出需要的表空間.和tspitr不同的是,tspitr自動通過impdp/expdp還原到源庫,而rman tts只是生成需要匯入的指令碼,
表空間後設資料dmp和資料檔案.
4.rman的transport 命令生成表空間傳輸集時,可能會報RMAN-06024: no backup or copy of the control file found to restore,和其它基於自動輔助例項clone 還原時報這個錯誤一樣,檢查自動
指令碼 set until scn 的值是否是小於我們已有的備份控制檔案Ckp_SCN值,然後再做相應處理.
5.rman的transport 命令生成表空間傳輸集時,會對要傳輸的表空間做自包含驗證,如果不通過無法執行.測試發現,就算是你要生成的表空間集是之前的沒有自包含的時間點,只要源庫當前是自
包即可.只是生成的傳輸集匯入之後,自然不在此表空間的依賴物件不會匯入.
6.除了用於表空間的遷移,個人覺得它比較實用的一點是,若使用者誤刪除了資料,無法通過各種閃回機制還原時.通過rman的transport生成基於時間的傳輸表空間,匯入到測試庫,再把刪除的資料
匯出來.比手動建立一個臨時不完全恢復的庫要自動化,比tspitr雖自動化但直接覆蓋源庫表空間要實用.
os: centos 6.6
db version:11.2.0.4.0
以下測試:
##方便測試,源庫和目標庫為同一個庫
##源庫
[oracle@ct6605 ct66]$ sqlplus / as sysdba
##建立要傳輸的test表空間
SQL> create tablespace test datafile '/u02/oradata/ct66/test01.dbf' size 10m ;
[oracle@ct6605 ct66]$ rman target /
##備份資料庫用於自動輔助例項使用
RMAN> backup database;
[oracle@ct6605 ct66]$ sqlplus / as sysdba
##在test表空間下建表scott.test01
SQL> create table scott.test01 tablespace test as select 1 i from dual;
##在users表空間下建表scott.test01的索引scott.idx_testtts_01
SQL> create index scott.idx_testtts_01 on scott.test01(i) tablespace users;
##查詢表
SQL> select * from scott.test01;
/*
I
1
*/
##切換日誌.切換日誌是為了演示還原傳輸表空間在某個日誌序列
SQL> alter system switch logfile;
##檢視當前日誌序列
SQL> select sequence# from v$log where status='CURRENT';
/*
SEQUENCE#
41
*/
##往表scott.test01插入資料
SQL> insert into scott.test01 select 2 from dual;
SQL> commit;
##查詢表
SQL> select * from scott.test01;
/*
I
1
2
*/
##切換日誌
SQL> alter system switch logfile;
##檢視當前日誌序列
SQL> select sequence# from v$log where status='CURRENT';
/*
SEQUENCE#
42
*/
##確認平臺的版本和endian format是否支援
##這裡因為測試在同一個庫,肯定是支援.如果兩個庫的endian format不同,是需要有轉換的步驟
SQL> select b.name,i.version,b.platform_name, a.ENDIAN_FORMAT
from v$transportable_platform a,v$database b,v$instance i
where a.PLATFORM_ID=b.PLATFORM_ID;
/*
NAME VERSION PLATFORM_NAME ENDIAN_FORMAT
CT66 11.2.0.4.0 Linux x86 64-bit Little
*/
##確認表空間test是否是自包含
SQL> begin
dbms_tts.transport_set_check('test', true,true);
end;
/
##因為前面把表scott.test01的索引建在了users表空間下,這裡查詢出來不是自包含
SQL> select * from transport_set_violations;
VIOLATIONS
ORA-39907: Index SCOTT.IDX_TESTTTS_01 in tablespace USERS points to table SCOTT.TEST01 in tablespace TEST.
##重建索引到test表空間
SQL> alter index scott.idx_testtts_01 rebuild tablespace test;
##再次查檢表空間的自包含
SQL> begin
dbms_tts.transport_set_check('test', true,true);
end;
##已經滿足
SQL> select * from transport_set_violations;
VIOLATIONS
[oracle@ct6605 ct66]$ rman target /
##生成test表空間傳輸集.只要此一條命令即可.
RMAN> transport tablespace 'TEST'
tablespace destination '/home/oracle'
auxiliary destination '/home/oracle'
until logseq 41;
##檢視產生的匯入指令碼,表空間後設資料dmp和資料檔案.
[oracle@ct6605 ~]$ cd /home/oracle
[oracle@ct6605 ~]$ ls
CT66 dmpfile.dmp impscrpt.sql test01.dbf
##目標庫
##此處因為測試,源庫和目標庫為同一個庫,先刪除原有的test表空間.
[oracle@ct6605 ct66]$ sqlplus / as sysdba
SQL> drop tablespace test including contents and datafiles;
##通過指令碼匯入.此處可以根據自己的需要修改指令碼再執行,例如需要把test01.dbf移到資料檔案目錄.當然也可以不用匯入指令碼,通過impdp手動匯入dmpfile.dmp和test01.dbf.
[oracle@ct6605 ~]$ sqlplus / as sysdba @impscrpt.sql
##查詢表確認已經匯入
[oracle@ct6605 ct66]$ sqlplus / as sysdba
SQL> select * from scott.test01;
/*
I
1
*/
備註:
1.rman基於表空間的傳輸,可以不用象impdp/expdp方式將源庫表空間暫時read only即可
2.生成傳輸集之前不一定需要backup database,一般只需要備份system,sysaux,undo表空間和要傳輸的表空間即可.
3.通過rman實現,原理和tspitr相似,都是通過自動輔助例項,在輔助例項上還原出需要的表空間.和tspitr不同的是,tspitr自動通過impdp/expdp還原到源庫,而rman tts只是生成需要匯入的指令碼,
表空間後設資料dmp和資料檔案.
4.rman的transport 命令生成表空間傳輸集時,可能會報RMAN-06024: no backup or copy of the control file found to restore,和其它基於自動輔助例項clone 還原時報這個錯誤一樣,檢查自動
指令碼 set until scn 的值是否是小於我們已有的備份控制檔案Ckp_SCN值,然後再做相應處理.
5.rman的transport 命令生成表空間傳輸集時,會對要傳輸的表空間做自包含驗證,如果不通過無法執行.測試發現,就算是你要生成的表空間集是之前的沒有自包含的時間點,只要源庫當前是自
包即可.只是生成的傳輸集匯入之後,自然不在此表空間的依賴物件不會匯入.
6.除了用於表空間的遷移,個人覺得它比較實用的一點是,若使用者誤刪除了資料,無法通過各種閃回機制還原時.通過rman的transport生成基於時間的傳輸表空間,匯入到測試庫,再把刪除的資料
匯出來.比手動建立一個臨時不完全恢復的庫要自動化,比tspitr雖自動化但直接覆蓋源庫表空間要實用.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-1973394/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle小知識點11--傳輸表空間通過impdp/expdpOracle
- oracle小知識點14--xtts傳輸表空間OracleTTS
- Oracle 傳輸表空間-RmanOracle
- Oracle表空間小知識Oracle
- 通過RMAN-transport獲取傳輸表空間檔案
- oracle可傳輸表空間TTS小結OracleTTS
- Oracle 表空間傳輸Oracle
- oracle表空間傳輸Oracle
- Oracle傳輸表空間Oracle
- oracle小知識點13--rman convert轉換表空間位元組順序Oracle
- oracle小知識點10--表空間時間點恢復(TSPITR)Oracle
- 傳輸表空間操作-OracleOracle
- Oracle傳輸表空間(TTS)OracleTTS
- 使用Oracle可傳輸表空間的特性複製資料(7)實戰RMAN備份傳輸表空間Oracle
- 實戰RMAN備份傳輸表空間
- Oracle傳輸表空間學習Oracle
- Oracle 傳輸表空間-EXPDP/IMPDPOracle
- Oracle 傳輸表空間-EXP/IMPOracle
- Oracle表空間傳輸詳解Oracle
- 使用RMAN實現可傳輸的表空間
- RMAN跨小版本跨平臺與位元組序傳輸表空間
- oracle 傳輸表空間一例Oracle
- Oracle可傳輸表空間測試Oracle
- 【TTS】傳輸表空間Linux ->AIX 基於rmanTTSLinuxAI
- RMAN跨平臺傳輸表空間(different Endian)
- RMAN跨平臺傳輸表空間(same endian)
- MySQL 傳輸表空間MySql
- MySQL表空間傳輸MySql
- 【XTTS】Oracle傳輸表空間xtts增量方式TTSOracle
- oracle表空間傳輸的限制條件Oracle
- RMAN跨平臺傳輸資料庫和表空間資料庫
- 【TTS】傳輸表空間AIX->linux基於rmanTTSAILinux
- mysql之 表空間傳輸MySql
- 總結-表空間傳輸
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(上)Oracle
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(中)Oracle
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(下)Oracle
- Oracle TTS ORA-39322: 表空間傳輸OracleTTS