利用bat批处理调用Exp、Imp自动实现Oracle数据库用户数据同步

公司需要做数据集中,某区需要建立一个完全与生产库同步的库,尽量需要减小对生产库性能的影响,同步频率为每天一次.

生产库环境: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脚本必须放同一目录下

你可能感兴趣的:(利用bat批处理调用Exp、Imp自动实现Oracle数据库用户数据同步)