Oracle使用impdp的network_link迁移数据库

年初需要迁移一台Oracle数据库,由于数据量不大,
可以采用impdp的方式
不同于以往,这次采用了network_link,在源数据库和目标数据库都没有文件的存留,并且过程更加简化.

源数据库
    172.16.1.38

目标数据库
    192.168.16.114

1.首先,在目标数据库创建dblink

创建源数据库的TNS
SOURCE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.38)(PORT = 3025))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = mvbox)
    )
  )

创建源数据库的DBLink
create public database link source connect to mvbox_space identified by 123456 using ‘source‘;

2.停止源数据库的所有应用
关闭所有的应用服务器,然后停止Oracle监听器,检查是否还有活动的数据库连接
select ‘alter system kill session ‘‘‘||sid||‘,‘||serial#||‘‘‘ immediate;‘ sql from v$session where username in(‘MVBOX_DB‘);
如果有,则执行SQL强制退出.

3.目标数据库创建用户
create or replace directory test as ‘F:\\‘;
create user mvbox_db identified by "654321";
grant resource,connect,unlimited tablespace to mvbox_db;
GRANT CREATE MATERIALIZED VIEW TO mvbox_db; 
grant read,write on directory test to mvbox_db;

因为源数据库有物化视图,所以在目标数据库需要授予CREATE MATERIALIZED VIEW权限.

4.目标数据库上执行导入
impdp ‘mvbox_db/"654321"‘ network_link=source directory=test  schemas=mvbox_db PARALLEL=8


在生产数据库上,使用这种方式跨机房迁移数据库,停机时间大致5分钟,数据量在500M左右
(没有必要迁移的日志数据等,已经提前删除)

遇到的问题.
1.目标数据库的用户角色不能高于源数据库.
 假设源数据库只有connect,resource角色,而目标数据库直接给予dba解决,导入时会报错.
 这是基于安全的一个考虑吧.

2.ORA-39129错误
 可能出现以下错误.
ORA-39129: Object type TABLE:"MVBOX_DB"."SYS_IMPORT_SCHEMA_01 not imported. Name conflicts with the master table
ORA-39129: Object type TABLE:"MVBOX_DB"."SYS_EXPORT_SCHEMA_01 not imported. Name conflicts with the master table
因为源数据库一直在使用expdp做备份,如果导出失败,则这次导出的日志表(SYS_EXPORT_SCHEMA_01)就不会删除.
导入也是同样.所以源数据库有一些系统表

而在目标数据库执行导入的时候,也会创建同名的表,导致冲突.可以直接在源数据库删除这些系统表即可.


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。