导出与导入后对象采用不同表空间的实现方法
如果是整个表空间的 导出导入,则可直接采用可传输的表空间特性,具体步骤如下:
1.先检测要导出的表空间:即检查该表空间的所有对象是否都在这个表空间中,如果有部分对象在别的表空间,则无法导出该表空间。
采用sys.dbms_tts.transport_set_check过程进行检测
执行好后,查看表transport_set_violations是否有记录,若有则表明有对象存在于别的表空间中
select * from sys.transport_set_violations;
总结:如果该表有记录,则必须对该表指出的这些对象重新置于本表空间中,否则会提示ora-29341:可传送集不是自包含的。
检测成功后,在执行第二步
2.将表空间置于只读状态
执行后提示输入用户,此时输入:sys/change_on_install@fd as sysdba
注:1)执行可传输的表空间导出,必须采用sys用户,否则提示:
EXP-00000: 导出终止失败
2)sys/change_on_install@fd as sysdba 该用户名密码不能直接在exp导出语句中写,如果写成
则提示 LRM-00112: 参数 'userid' 不允许有多个值
4.拷贝dmp文件到需要导入的机器,如放在d盘下
5.执行导入
imp file=d:\dd.dmp transport_tablespace=y datafiles=/home/oradba/ff.dbf
同样会提示输入用户名,与导出的一样,采用sys用户
但如果只是想导出表空间某几个表,而表空间又不一样,则执行步骤如下
1.导出
exp username/password@sid file=d:\xx.dmp tables=(table1,table2)
2.拷贝dmp文件到目的机器
3.在准备导入的库上先创建好要导入的表
可以采用将源库上的创建表脚本导出后修改下表空间先创建好
4.执行导入,导入时将错误忽略 ignore=y