--传输表空间相关sql语句

1,准备工作,检查字节顺序,blocksize,字符集

--1.1,查询Endia Format字节顺序是否相同

select d.name,i.version ,d.PLATFORM_NAME ,tp.ENDIAN_FORMAT 
from V$TRANSPORTABLE_PLATFORM tp,v$database d,v$instance i 
where tp.PLATFORM_NAME=d.PLATFORM_NAME andupper(d.NAME)=upper(i.INSTANCE_NAME);

--源端服务器是win2008 64位

p_w_picpath

--目标服务器是win2003 32位

p_w_picpath

经检查源端与目标端字节顺序是一致的

--1.2 检查blocksize

------源数据库

select block_size from dba_tablespaces where tablespace_name='V3XSPACE';

p_w_picpath

------目标数据库

show parameter db_block_size

p_w_picpath

--经检查,源端表空间blocksize为8K,与目标端db_block_size一致

如果blocksize不一致的话需要在目标数据库中设置对应的db_nK_cache_size参数


--2自包含检查

----需要sysdba执行;

----TS_LIST多个表空间逗号隔开;

----INCL_CONSTRAINTS是否检查约束;

----FULL_CHECK是否执行严格检查,如索引在其他表空间

exec DBMS_TTS.TRANSPORT_SET_CHECK(TS_LIST=>'V3XSPACE',INCL_CONSTRAINTS=>TRUE,FULL_CHECK=>FALSE)

--3查询子包含检查情况

select * from transport_Set_violations;

--远端表空间对象都是自包含的

p_w_picpath


--4,将源数据库表空间置于只读

alter database v3xspace read only;


--5,在目标服务器上通过链接数据库导出表空间元数据文件

------说明:其实可以在源端导出表空间元数据,这里只是为了方便

------创建服务名称,链接服务器步骤略,需要注意的是链接服务器中使用的用户名必须要有exp_full_database角色或DBA角色

------transport_tablespaces导出的表空间;transport_Full_check 指定为Y 表示执行严格自包含导出

expdp "'system/abc123 as sysdba'" directory=dir_test dumpfile=v3.dmp transport_tablespaces=v3xspace network_link=zstoa_link

p_w_picpath


--6,将源数据库表空间对应的文件拷贝到目标服务器上

copy源表空间对应的文件到目标服务器上


--7,在目标服务器上执行导入

--transport_datafiles表示从源数据库服务器上拷贝过来的数据文件路径,逗号隔开,最好拷贝到希望存放的地方

impdp "'system/abc123 as sysdba'" direc tory=dir_test dumpfile=v3.dmp transport_datafiles=F:\OracleAPP\DIR_TEST\TBS_V3XSPACE_01.DBF,F:\OracleAPP\DIR_TEST\TBS_V3XSPACE_02.DBF,F:\OracleAPP\DIR_TEST\TBS_V3XSPACE_03.DBF

p_w_picpath

8,导入完毕后记得将原数据库和目标数据库的表空间状态修改为可写

alter database v3xspace read write;



我的博客:www.fanmeng.net.cn