傳輸表空間-TTS

傳輸表空間:

可傳輸表空間的特性主要用於進行庫對庫的表空間複製,要進行傳輸的表空間必須置於read-only模式。如果生產庫不允許表空間置爲只讀模式,沒關係,方法還是有的,通過RMAN備份也可以創建可傳輸表空間集。要使用可傳輸表空間的特性,oracle至少是8i企業版或更高版本。如果是相同操作系統平臺相互導入,則8i及以上版本均可支持,但如果是不同操作系統平臺,數據庫版本至少10g。被傳輸的表空間即可以是字典管理,也可以是本地管理。並且自oracle9i開始,被傳輸表空間的block size可以與目標數據庫的block size不同。

模擬環境(傳輸表空間):

1、首先檢查環境信息:包括平臺,OS版本,數據庫版本,字節序等。

 source:

OS:Red Hat Enterprise Linux Server release 5.4 (Tikanga

DB:

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE 11.2.0.1.0 Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

 

target:

OS:windows 7

DB:

SQL> select * from v$version;

 

BANNER

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

----------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE 11.2.0.1.0 Production

TNS for 64-bit Windows: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

平臺不同,數據庫版本一致,原則上oracle支持低版本向高版本導入數據。字節序也是一致都是小字節序。

可以查詢 v$transportable_platform得到字節序信息

2、檢查要轉換的對象是否符合TTS規範

conn / as sysdba

exec dbms_tts.transport_set_check('P1,P2',true,true);

 

SQL> select * from transport_set_violations;

 

VIOLATIONS

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

VIOLATIONS

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

ORA-39908: Index SH.OBJ_IDX in tablespace USERS enforces primary constraints of

table SH.OBJ_RANGE in tablespace P1.

 

ORA-39911: Index SH.OBJ_INDX in tablespace USERS points to partition R1 of table

SH.OBJ in tablespace P1 outside of transportable set.

 

 

10 rows selected

 

SQL> select index_name,table_name,tablespace_name from user_indexes where table_name='OBJ' or table_name='OBJ_RANGE';

 

INDEX_NAME TABLE_NAME TABLESPACE_NAME

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

OBJ_IDX OBJ_RANGE USERS

OBJ_INDX OBJ USERS

 

 

可見,TTS規範檢查有問題,如上所示,表空間的索引對象‘SH.OBJ_IND’,'SH.OBJ_INDX' 在users表空間,故而報錯。要麼索引重建要麼把users表空間一併傳輸過來。

 

重建索引:

SQL> alter index OBJ_IDX rebuild tablespace p1;

 

Index altered.

 

SQL> alter index OBJ_INDX rebuild tablespace p1;

 

Index altered.

 

SQL> select index_name,table_name,tablespace_name from user_indexes where table_name='OBJ' or table_name='OBJ_RANGE';

 

INDEX_NAME TABLE_NAME TABLESPACE_NAME

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

OBJ_IDX OBJ_RANGE P1

OBJ_INDX OBJ P1

 

重新檢查TTS規範:

SQL> exec dbms_tts.transport_set_check('P1,P2',true,true);

 

PL/SQL procedure successfully completed.

 

SQL> select * from transport_set_violations;

 

VIOLATIONS

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

ORA-39911: Index SH.OBJ_INDX in tablespace P1 points to partition R3 of table SH.OBJ in tablespace USERS outside of transportable set.

 

 

ORA-39921: Default Partition (Table) Tablespace USERS for OBJ not contained in transportable set.

ORA-39901: Partitioned table SH.OBJ is partially contained in the transportable set.

 

VIOLATIONS

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

ORA-39921: Default Partition (Table) Tablespace P1 for OBJ not contained in transportable set.

 

ORA-39921: Default Partition (Table) Tablespace P2 for OBJ not contained in transportable set.

 

8 rows selected.

 

SQL> select table_name,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='OBJ';

TABLE_NAME PARTITION_NAME TABLESPACE_NAME

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

OBJ R1 P1

OBJ R2 P2

OBJ R3 USERS

 

 

發現分區R3 在user表空間,所以這裏需要修改分區基本信息(在修改之前一定要把原分區數據遷移出來,避免操作失誤數據丟失)。

 

 

刪除非法的分區:

SQL> alter table obj drop partition r3;

新增分區:

SQL> alter table obj add partition r3 values less than(maxvalue) tablespace p3;

 

Table altered.

 

SQL> select table_name,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='OBJ';

 

TABLE_NAME PARTITION_NAME TABLESPACE_NAME

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

OBJ R1 P1

OBJ R2 P2

OBJ R3 P3

 

重新驗證TTS規範:

 

SQL> exec dbms_tts.transport_set_check('P1,P2,P3',true,true);

SQL> select * from transport_set_violations;

 

VIOLATIONS

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

ORA-39921: Default Partition (Table) Tablespace USERS for OBJ not contained in transportable set.

 

OBJ分區表 默認的表空間是user,這裏需要修改掉。

QL> select TABLE_NAME,PARTITION_COUNT,DEF_TABLESPACE_NAME from user_part_tables where table_name='OBJ';

 

TABLE_NAME PARTITION_COUNT DEF_TABLESPACE_NAME

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

OBJ 3 USERS

 

待完成:

 

 

 

可傳輸表空間(還有個集)最大的優勢是其速度比export/import或unload/load要快的多。因爲可傳輸表空間主要是複製數據文件到目標路徑,然後再使用export/import或Data Pump export/import等應用僅導出/導入表空間對象的元數據到新數據庫。

關於可傳輸表空間,還有個集(Transportable Tablespace Sets)的創建,其中都提到了很重要一點,就是被傳輸的表空間在傳輸過程中必須置爲 read-only。而在實際操作過程中,對於某些生產數據庫,將表空間置爲 read-only 是件非常複雜的事情甚至完全不允許,有了 RMAN 的 Transportable Tablespace,這一切都得以避免。RMAN 通過備份創建可傳輸表空間集,它並不需要存取活動的數據文件,相應也就不需要將表空間置爲 read-only。因此,數據庫可用性得到提升,尤其對於超大的表空間,因爲被傳輸的表空間在此期間仍可進行讀寫操作,而且把表空間置爲 read-only 模式可能會花費較長時間,

使用 RMAN 創建可傳輸表空間集,允許你在傳輸過程中指定目標恢復時間點或 SCN,這樣傳輸的數據可以更靈活,不必完全複製現有表空間,只要備份中存在,你就可以選擇性的恢復數據。例如,你的備份策略爲保留一週,你希望創建的可傳輸表空間中數據是截止本月底最後一天的數據,那麼你在下個月第一週內任何時候都可以進行傳輸操作而不需要考慮這期間生產庫是否會有寫入操作。

限制:

1.數據庫版本至少是8或8以上的企業版版本才支持TTS特性

2.源庫和目標庫的字符集必須相同

3.要傳輸的表空間名字不能與目標庫原有的表空間名字重複

4.有關聯對象(物化視圖,外部表)或包函對象(分區表,分區索引)一般情況下是不能被傳輸的,需要人爲手動處理。

5.自10gR2開始,可以傳輸XMLType對象,不過此時必須得使用IMP/EXP工具,且參數consttraints和triggers設置爲‘Y’。

6.不能傳輸system表空間或者sys用戶對象

7.浮點類型的數據不支持impdp/expdp工具,需要使用imp/exp

 

環境模擬:

 

 

 

由於表空間之間存在索引等其他約束及關係,光遷移表空間勢必產生影響,所以在遷移表空間之前需要做依賴檢查,檢查apptbs1,apptbs2表空間是否有交叉依賴:

execute dbms_tts.transport_set_check('apptbs1,apptbs2',true);

SQL> select * from transport_set_violations;

 

未選定行

 

結論: 此時這個表空間集已經不在違背自包含的條件,可以確定爲一個可傳輸表空間集。

對源數據庫執行備份,在執行備份時一定要加上include current controlfile否則執行transport tablespace命令時會出現以下錯誤信息:

Automatic instance removed

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of tranport tablespace command at 03/26/2015 20:24:22

RMAN-03015: error occurred in stored script Memory Script

RMAN-06026: some targets not found - aborting restore

RMAN-06024: no backup or copy of the control file found to restore

 

RMAN> backup as backupset database  format  '/u05/oracle/oracle_bk/orclasm/full_%n_%T_%t_%s_%p.bak' include current controlfile plus archivelog delete input;

使用目標數據庫控制文件替代恢復目錄

RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點

 

表空間列表要求具有 UNDO 段

表空間 SYSTEM

表空間 UNDOTBS1

 

使用 SID='ORCL' 創建自動實例

 

供自動實例使用的初始化參數:

db_name=ORCLASM

db_unique_name=ypkw_tspitr_ORCLASM

compatible=11.2.0.0.0

db_block_size=8192

db_files=200

sga_target=280M

processes=50

db_create_file_dest=/u05/tmp

log_archive_dest_1='location=/u05/tmp'

#No auxiliary parameter file used

 

啓動自動實例 ORCL

 

Oracle 實例已啓動

 

系統全局區域總計 292278272 字節

 

Fixed Size 2175128 字節

Variable Size 100667240 字節

Database Buffers 184549376 字節

Redo Buffers 4886528 字節

自動實例已創建

對恢復集表空間運行 TRANSPORT_SET_CHECK

TRANSPORT_SET_CHECK 已成功完成

 

內存腳本的內容:

{

# set requested point in time

set until scn 1897575;

# restore the controlfile

restore clone controlfile;

# mount the controlfile

sql clone 'alter database mount clone database';

# archive current online log

sql 'alter system archive log current';

}

正在執行內存腳本

 

正在執行命令: SET until clause

 

啓動 restore 於 29-3月 -18

分配的通道: ORA_AUX_DISK_1

通道 ORA_AUX_DISK_1: SID=81 設備類型=DISK

 

通道 ORA_AUX_DISK_1: 正在開始還原數據文件備份集

通道 ORA_AUX_DISK_1: 正在還原控制文件

通道 ORA_AUX_DISK_1: 正在讀取備份片段 D:\FULL_05SV118N_1_1.BAK

通道 ORA_AUX_DISK_1: 段句柄 = D:\FULL_05SV118N_1_1.BAK 標記 = TAG20180329T174606

 

通道 ORA_AUX_DISK_1: 已還原備份片段 1

通道 ORA_AUX_DISK_1: 還原完成, 用時: 00:00:01

輸出文件名=E:\APP\ARCH\ORCL\CONTROLFILE\O1_MF_FCSG7PG4_.CTL

完成 restore 於 29-3月 -18

 

sql 語句: alter database mount clone database

 

sql 語句: alter system archive log current

 

內存腳本的內容:

{

# set requested point in time

set until scn 1897575;

# set destinations for recovery set and auxiliary set datafiles

set newname for clone datafile 1 to new;

set newname for clone datafile 3 to new;

set newname for clone datafile 2 to new;

set newname for clone tempfile 1 to new;

set newname for datafile 7 to

"E:/app/arch\APPLTS1.DBF";

set newname for datafile 8 to

"E:/app/arch\APPLTS2.DBF";

set newname for datafile 9 to

"E:/app/arch\APPLTS3.DBF";

# switch all tempfiles

switch clone tempfile all;

# restore the tablespaces in the recovery set and the auxiliary set

restore clone datafile 1, 3, 2, 7, 8, 9;

switch clone datafile all;

}

正在執行內存腳本

 

正在執行命令: SET until clause

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

正在執行命令: SET NEWNAME

 

臨時文件 1 在控制文件中已重命名爲 E:\APP\ARCH\ORCL\DATAFILE\O1_MF_TEMP_%U_.TMP

 

啓動 restore 於 29-3月 -18

使用通道 ORA_AUX_DISK_1

 

通道 ORA_AUX_DISK_1: 正在開始還原數據文件備份集

通道 ORA_AUX_DISK_1: 正在指定從備份集還原的數據文件

通道 ORA_AUX_DISK_1: 將數據文件 00001 還原到 E:\APP\ARCH\ORCL\DATAFILE\O1_MF_SYS

TEM_%U_.DBF

通道 ORA_AUX_DISK_1: 將數據文件 00003 還原到 E:\APP\ARCH\ORCL\DATAFILE\O1_MF_UND

OTBS1_%U_.DBF

通道 ORA_AUX_DISK_1: 將數據文件 00002 還原到 E:\APP\ARCH\ORCL\DATAFILE\O1_MF_SYS

AUX_%U_.DBF

通道 ORA_AUX_DISK_1: 將數據文件 00007 還原到 E:/app/arch\APPLTS1.DBF

通道 ORA_AUX_DISK_1: 將數據文件 00008 還原到 E:/app/arch\APPLTS2.DBF

通道 ORA_AUX_DISK_1: 將數據文件 00009 還原到 E:/app/arch\APPLTS3.DBF

通道 ORA_AUX_DISK_1: 正在讀取備份片段 D:\FULL_04SV116V_1_1.BAK

通道 ORA_AUX_DISK_1: 段句柄 = D:\FULL_04SV116V_1_1.BAK 標記 = TAG20180329T174606

 

通道 ORA_AUX_DISK_1: 已還原備份片段 1

通道 ORA_AUX_DISK_1: 還原完成, 用時: 00:00:35

完成 restore 於 29-3月 -18

 

數據文件 1 已轉換成數據文件副本

輸入數據文件副本 RECID=8 STAMP=972064802 文件名=E:\APP\ARCH\ORCL\DATAFILE\O1_MF_

SYSTEM_FCSG7YKR_.DBF

數據文件 3 已轉換成數據文件副本

輸入數據文件副本 RECID=9 STAMP=972064802 文件名=E:\APP\ARCH\ORCL\DATAFILE\O1_MF_

UNDOTBS1_FCSG7YNK_.DBF

數據文件 2 已轉換成數據文件副本

輸入數據文件副本 RECID=10 STAMP=972064803 文件名=E:\APP\ARCH\ORCL\DATAFILE\O1_MF

_SYSAUX_FCSG7YN7_.DBF

數據文件 7 已轉換成數據文件副本

輸入數據文件副本 RECID=11 STAMP=972064803 文件名=E:\APP\ARCH\APPLTS1.DBF

數據文件 8 已轉換成數據文件副本

輸入數據文件副本 RECID=12 STAMP=972064804 文件名=E:\APP\ARCH\APPLTS2.DBF

數據文件 9 已轉換成數據文件副本

輸入數據文件副本 RECID=13 STAMP=972064805 文件名=E:\APP\ARCH\APPLTS3.DBF

 

內存腳本的內容:

{

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