年初需要迁移一台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)就不会删除.
导入也是同样.所以源数据库有一些系统表
而在目标数据库执行导入的时候,也会创建同名的表,导致冲突.可以直接在源数据库删除这些系统表即可.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1392657/
,如需转载,请注明出处,否则将追究法律责任。