exp/imp还有一个TRANSPORT_TABLESPACE的功能,可以传输整个表空间的数据,就是把一个数据库上的数据文件加到另外一个数据库中,而不是把数据导出成Dmp文件。用这个传输还有一定的限制:
关于传输表空间有一些规则,即:
·源数据库和目标数据库必须运行在相同的硬件平台上。
·源数据库与目标数据库必须使用相同的字符集。
·源数据库与目标数据库一定要有相同大小的数据块
·目标数据库不能有与迁移表空间同名的表空间
·SYS的对象不能迁移
·必须传输自包含的对象集
·有一些对象,如物化视图,基于函数的索引等不能被传输
可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准:
exec sys.dbms_tts.transport_set_check('tablespace_name',true);
select * from sys.transport_set_violation;
如果没有行选择,表示该表空间只包含表数据,可以传输。
其步骤:
1. 源数据库表空间设为只读:
alter tablespace hygeia read only;
2. 发出exp命令,用户必须是sysdba:
C:\Documents and Settings\Administrator>exp 'sys/ocp as sysdba' transport_tables
pace=y tablespaces=hygeia file=d:\oracle\hygeia.dmp log=d:\oracle\hygeia.log
3.将导出文件hygeia.dmp和表空间hygeia的数据文件hygeia01.dbf和hygeia02.dbf拷贝到目标机器上
4. 源数据库表空间设为可读写:
alter tablespace hygeia read write;
如果在修改表空间为读写后再复制数据文件和导出的dmp文件到目标数据库那么在执行imp导入时会报
IMP-00003:遇到ORACLE错误19722
ORA-19722:数据文件D:\oracle\hygeia版本错误
ORA-06512:在"SYS.DBMS_PLUGTS", line 2065
ORA-06512:在line 1
IMP-00000:未成功终止导入
5.在目数据库中创建一个hygeia用户不用指定缺省表空间
Create User insur_changde Identified By "changde"
6. 目标数据库imp文件:
C:\Documents and Settings\Administrator>imp 'sys/ocp as sysdba' file=d:\hygeia.d
mp transport_tablespace=y tablespaces=hygeia datafiles=('D:\oracle\product\10.2
.0\oradata\ocp\HYGEIA01.DBF','D:\oracle\product\10.2.0\oradata\ocp\HYGEIA02.DBF'
)
7.修改目标数据库中insur_changde用户的缺省表空间为hygeia
Alter User insur_changde Default Tablespace hygeia
8. 目标数据库表hygeia空间设为可读写:
alter tablespace users read write;