两个不同城市的oracle数据库,暂定为ora01与ora02,ora01的表结构包含ora02的表结构,但比它字段多、表结构多,所以在同步时,ora01只需要将部分内容同步到ora02中即可:
最终选定方案为:定期执行批bat文件,通过ora01的存储过程,将数据通过DBLINK同步到ora02中。
在执行过程中碰到一下几个问题:
1、ora02中存在对部分表的触发器,直接同步会报错:ORA-04088: error during execution of trigger '(触发器名称)’
解决办法(很笨,但又不知道其他办法):
(1)在ora02中建立2个存储过程,将所有碍事的触发器关掉:execute immediate 'alter trigger (触发器名称) disable',开启:execute immediate 'alter trigger (触发器名称) ensable'
(2)在ora01中建立2个存储过程,通过dblinkl调用ora02中的2个存储过程(不能够直接 ’远程trigger名称@dblink‘ 调用)。
(3)在脚本中,先执行ora01中关闭触发器的存储过程,在执行同步内容,最后再执行开启内容。
2、事务rollback处理:(不会弄,希望看到的同志们帮解决一下)
最终内容如下:
databack.bat:
@echo off
set wind=%date:~0,4%%date:~5,2%%date:~8,2%
sqlplus name/password@oracle @c:\file.sql >> c:\logs\%wind%.log
file.sql:
exec remote_alter_trigger_disable;
exec remote_to_table01;
.
.
.
exec remote_alter_trigger_enable;
exit;
将databack.bat加入到windows定时任务里就行了
结束语:方法比较笨,不知道达人们有什么其他办法,希望指点一二,万分感谢