Oracle的传输表空间是指,可以将一个数据库上的一个或多个表空间的全表数据文件拷贝到另一个数据库服务器上,通过导入的方式将表空间加载当目标数据库。
使用这种方法的最大好处是速度快,所需要的时间和拷贝数据文件差不多,比执行EXP/IMP的导入导出要快得多。
传输表空间的限制条件:
源和目标数据库必须处于相同的平台,在10g中,这条约束被放宽了;
源和目标数据库必须使用相同的字符集和国家字符集;
目标数据库不能已经包含同名的表空间;
传输表空间不支持:物化视图或复制、基于函数的索引、Scoped REFs和兼容性设置为8.0时,带有多个收件人的高级队列。
使用传输表空间应该使源和目标数据库的兼容性都在8.1以上,如果源数据库中的表空间的block_size和目标数据库的db_block_size不相等,那么目标数据库的兼容性必须设置为9.0以上。
步骤:
1 测试表空间是否可以传输.
execute dbms_tts.transport_set_check('TEST', true);
若报过程dbms_tts.transport_set_check不存在,
则用sys的数据库用户执行脚本"$ORACLE_HOME/rdbms/admin/dbmsplts.sql"建立之.
2 select * from transport_set_violations;
SQL> select * from transport_set_violations;
no rows selected
3 设置表空间TEST 为只读.
alter tablespace TEST read only;
4 表空间导出.
exp """sys/sa123@itmsdb as sysdba""" transport_tablespace=y tablespaces=TEST file=c:\test.dmp
5 复制源表空间的数据文件(注意文件要只读)
复制完成后把源表空间设置可读写.
alter tablespace TEST read write;
6 把导出的dmp文件和数据文件,复制到目标数据库目录下.
ftp TEST_DB.DBF and test.dmp
7 目标数据库上建立一个和源表空间的相同的表空间,然后建立用户,指定表空间到TEST.
然后删除目标数据库上建立的表空间TEST.
8 复制源数据库的数据文件到目标目录下.
9 把导出的dmp和数据文件为基础,倒入数据到目标表空间下即可.
imp """sys/sa123@recbak as sysdba""" transport_tablespace=y tablespaces=TEST file=c:\test.dmp datafiles=c:\test.dbf