公司需要做数据集中,某区需要建立一个完全与生产库同步的库,尽量需要减小对生产库性能的影响,同步频率为每天一次.
生产库环境:Linux下 64位的 Oracle 11G
目标库环境:win 2003、Oracle 10G
查了下资料,Oracle有高级复制和Stream实现数据库同步,但实现起来配置较复杂,而且数据库需要归档模式,对性能有较大影响。决定还是用自带的Exp、imp导出导入功能实现同步。在2003下用At命令建立一个每天晚上1点多执行Bat批处理的计划任务:
at 01:01 /every:M,T,W,Th,F,S,SU E:\databak\SynchronizeData.bat
其中SynchronizeData.bat内容为:
rem ========================================================================================== rem 本批处理实现支持exp数据库的Oracle数据库版本的数据库逻辑备份,流程为:导出数据到 rem dump_bak 数据库目录下,然后把dmp文件以rar格式放入当天备份日期命名的目录下,便于以后按 rem 照日期恢复。 rem rem 需要配置的参数说明: rem BAT_HOME:即本批处理所在的目录; rem BKDIR:是调用本批处理时传进来的参数 dump_dir,即要备份到的数据文件目录。 rem BKFILE:备份日期 rem HHMMSS:备份时间 rem FilePrefix:备份文件名的前缀 rem UserName:备份的用户名 rem Password:备份的密码 rem NetServer:连接数据库的NET服务名 rem ========================================================================================== rem cd.. set dump_bak=e:\databak set BKFILE=%Date:~0,4%%Date:~5,2%%Date:~8,2% set HHMMSS=%time:~0,2%%time:~3,2%%time:~6,2% set FilePrefix=ff set UserName=user_from set Password=user_frompassword set NetServer=fromServer cd %dump_bak% start /b /wait exp %UserName%/%Password%@%NetServer% file=%dump_bak%\%FilePrefix%_%BKFILE%.dmp rem 还原到目标库 @echo off start /b /wait sqlplus system/manager@work @DropAndCreateUser.sql set UserName1=User_to set Password1=User_toPassword set NetServer=Work imp %UserName1%/%Password1%@%NetServer% file=%dump_bak%\%FilePrefix%_%BKFILE%.dmp fromuser=%UserName% touser=%UserName1% log=%BKFILE%imp.log
说明:
start /b /wait sqlplus system/manager@work @DropAndCreateUser.sql为执行建用户脚本,此sql脚本的内容为
conn system/manager@work as sysdba --删除用户 DROP USER User_to CASCADE / create user User_to identified by User_toPassword default tablespace estate temporary tablespace temp / grant connect,resource,dba to User_to / exit
上面批处理脚本和sql脚本必须放同一目录下