Oracle数据库定时同步

Oracle数据库定时同步

通过执行定时任务从源数据库(sourceDb)向目标数据库(targetDb)进行数据同步操作。

  1. 数据库版本一致 是进行数据同步的前置条件;

从源数据库导出数据

在配置oracle客户端的服务器上执行以下命令:

exp username/password@sourceDb  file=/export/home/oracle/DataSync/table/tableA.dmp  tables="(tableA)" &     
exp username/password@sourceDb  file=/export/home/oracle/DataSync/table/tableB.dmp  tables="(tableB)" & 
exp username/password@sourceDb  file=/export/home/oracle/DataSync/table/tableC.dmp  tables="(tableC)" &  

如果需要多导出几张表的话,可以进行扩展,该命令需要注意以下事项:

  1. sourceDb 对应了%ORACLE_HOME%\network\admin\tnsnames.ora 配置文件的数据库名称;
  2. 每行导出命令后都需要用 &符号 进行连接,这样可以实现同时导出,提高导出效率;
  3. 执行导出命令的服务器需要与源数据库网络互通;

清空目标数据库数据

清空数据库数据是通过脚本去执行 .sql 文件
脚本:

#!/bin/sh
sqlplus username/password@targetDb <<EOF
@/export/home/oracle/DataSync/list_table.sql;
EOF

.sql文件:

truncate table tableA ;
delete from tableB where 1=1 ;
drop table tableC ;

需要注意以下事项:

  1. 主键约束 如果要清空的表和其他表有主键约束,需要先将从表drop,再将主表drop;
  2. 主键约束的小表,可以通过 delete from 命令进行清空;
  3. 其他的表通过truncate、drop都可以;

可以通过sql语句查看当前数据库的主键约束情况

select (select a.table_name from user_constraints a where a.constraint_name = c.r_constraint_name) 主表表名, c.r_constraint_name 主表主键键约束名, c.table_name 从表表名, c.constraint_name 从表外键约束名 from user_constraints c where c.constraint_type = 'R' ;

目标数据库的数据导入

在进行数据导入时,需要注意主键约束表的导入先后顺序,先导入主表再导入从表,这样的话才能建立起主键约束关系

imp username/password@targetDb   full=y  file=/export/home/oracle/DataSync/table/tableA.dmp   ignore=y  
imp username/password@targetDb   full=y  file=/export/home/oracle/DataSync/table/tableB.dmp   ignore=y  
imp username/password@targetDb   full=y  file=/export/home/oracle/DataSync/table/tableC.dmp   ignore=y  

定时任务的制定

在这里提一下自己遇到的坑:

  1. 最开始的时候是直接在root用户下新增定时任务,然后定时任务执行脚本时失败,因为root用户下不能够直接执行 exp imp脚本命令;
  2. 后来把定时任务添加到oracle用户下,新增一个定时任务还是不能直接执行exp imp命令;
  3. 通过查看网上资料,可以通过配置环境变量 /etc/profile ,在环境变量里面新增oracle的配置,后续在定时任务中新增source /etc/profile 即可执行导出导入命令;
    定时任务如下:
    30 00 * * * source /etc/profile;cd /export/home/oracle/DataSync;nohup ./clear.sh > clear.out 2>&1
    新增环境变量如下
#Oracle
ORACLE_BASE=/export/home/oracle
ORACLE_HOME=/export/home/oracle/product/11.2.0
export ORACLE_BASE ORACLE_HOME 
export NLS_LANG=american_america.ZHS16GBK
export LC_ALL=zh_CN.gb2312 
LD_LIBRARY_PATH=/export/home/oracle/product/11.2.0/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib:$CLASSPATH
export CLASSPATH
export PATH=/export/home/oracle/product/11.2.0/bin:$PATH:.

总结

该方式仅仅适用于对数据实时性要求不高的需求,如果要求实时性很高的话,可以考虑通过高级复制的方式来进行数据同步

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值