传输表空间-TTS

传输表空间:sql

可传输表空间的特性主要用于进行库对库的表空间复制,要进行传输的表空间必须置于read-only模式。若是生产库不容许表空间置为只读模式,不要紧,方法仍是有的,经过RMAN备份也能够建立可传输表空间集。要使用可传输表空间的特性,oracle至少是8i企业版或更高版本。若是是相同操做系统平台相互导入,则8i及以上版本都可支持,但若是是不一样操做系统平台,数据库版本至少10g。被传输的表空间便可以是字典管理,也能够是本地管理。而且自oracle9i开始,被传输表空间的block size能够与目标数据库的block size不一样。数据库

模拟环境(传输表空间):windows

一、首先检查环境信息:包括平台,OS版本,数据库版本,字节序等。oracle

 source:app

OS:Red Hat Enterprise Linux Server release 5.4 (Tikangaless

DB:ide

SQL> select * from v$version;工具

 

BANNERui

--------------------------------------------------------------------------------spa

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获得字节序信息

二、检查要转换的对象是否符合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

 

内存脚本的内容:

{

相关文章
相关标签/搜索