--传输表空间相关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位
--目标服务器是win2003 32位
经检查源端与目标端字节顺序是一致的
--1.2 检查blocksize
------源数据库
select block_size from dba_tablespaces where tablespace_name='V3XSPACE';
------目标数据库
show parameter db_block_size
--经检查,源端表空间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;
--远端表空间对象都是自包含的
--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
--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
8,导入完毕后记得将原数据库和目标数据库的表空间状态修改为可写
alter database v3xspace read write;
我的博客:www.fanmeng.net.cn