爱生活,爱分享


oracle数据表定时同步(linux)

haiten 2019-09-08 662浏览 0条评论
首页/正文
分享到: / / / /

前言

今天做了数据表的定时同步任务,做一下文档记录,权当经验积累,后续备用。

一、建立用户登录验证脚本

之所以要单独建立用户登录验证脚本,是因为在安全管理侧,每隔一段时间数据用户就需要更换密码,如果每次修改用户密码后,所有用到这个数据库用户的数据脚本都要逐一修改的话,将是一件非常麻烦的事情,所以为了方便维护,建议将用户登录脚本单独维护,后续如果用户更换密码了,只需要维护这一个脚本即可。

登录 linux 系统的 oracle 用户
nano /home/oracle/login_username.sh
----------------------------------------------------------------------------------------------------------------
#!/bin/bash
# v20190717
sqlplus username/password@dbname
exit;
----------------------------------------------------------------------------------------------------------------

进行阶段测试:

su - root
cd /home/oracle
chmod +x login_username.sh
su - oracle
./login_username.sh

二、建立数据库脚本

建立一个 sql 脚本,将需要执行的 sql 语句写在该脚本内,我这里由于需要同步的表较小,不想搞得太麻烦,直接将原表数据清空,再全量拉取目标数据装进来,这里需要根据自己的实际需求情况编写。

nano /home/oracle/shell_task/RPT_PERSON_MONTH.sql
----------------------------------------------------------------------------------------------------------------
TRUNCATE TABLE RPT_PERSON_MONTH;

INSERT INTO 
RPT_PERSON_MONTH(
 ID
,DATETIME
,BRANCH
,TYPE
,SERV_MON_TARGET
,SERV_DATE_NUM
,SERV_MON_NUM
,SERV_MON_RATE
,INCOME_MON_TARGET
,INCOME_DATE_NUM
,INCOME_MON_NUM
,INCOME_MON_RATE
)
SELECT 
 ID
,DATETIME
,BRANCH
,TYPE
,SERV_MON_TARGET
,SERV_DATE_NUM
,SERV_MON_NUM
,SERV_MON_RATE
,INCOME_MON_TARGET
,INCOME_DATE_NUM
,INCOME_MON_NUM
,INCOME_MON_RATE
FROM RPT_PERSON_MONTH_OLD
WHERE DATETIME < '20190101';

INSERT INTO 
RPT_PERSON_MONTH(
 ID
,DATETIME
,BRANCH
,TYPE
,SERV_MON_TARGET
,SERV_DATE_NUM
,SERV_MON_NUM
,SERV_MON_RATE
,INCOME_MON_TARGET
,INCOME_DATE_NUM
,INCOME_MON_NUM
,INCOME_MON_RATE
)
SELECT 
 ID
,DATETIME
,BRANCH
,decode(type, '视频包','视频包拓展','流量包拓展','流量包销售',type) TYPE
,rtrim(to_char(SERV_MON_TARGET/10000,'FM99999999990D9999999999'),to_char(0,'D')) SERV_MON_TARGET
,rtrim(to_char(SERV_DATE_NUM/10000,'FM99999999990D9999999999'),to_char(0,'D')) SERV_DATE_NUM
,rtrim(to_char(SERV_MON_NUM/10000,'FM99999999990D9999999999'),to_char(0,'D')) SERV_MON_NUM
,rtrim(to_char(SERV_MON_RATE,'FM99999999990D9999999999'),to_char(0,'D')) SERV_MON_RATE
,rtrim(to_char(INCOME_MON_TARGET/10000,'FM99999999990D9999999999'),to_char(0,'D')) INCOME_MON_TARGET
,rtrim(to_char(INCOME_DATE_NUM/10000,'FM99999999990D9999999999'),to_char(0,'D')) INCOME_DATE_NUM
,rtrim(to_char(INCOME_MON_NUM/10000,'FM99999999990D9999999999'),to_char(0,'D')) INCOME_MON_NUM
,rtrim(to_char(INCOME_MON_RATE,'FM99999999990D9999999999'),to_char(0,'D')) INCOME_MON_RATE
FROM zmm2.vw_zmm_wgtx_income_yw_m@againdb
WHERE DATETIME >= '20190101';

exit;
----------------------------------------------------------------------------------------------------------------

进行阶段测试:

sqlplus username/password@dbname @/home/oracle/shell_task/RPT_PERSON_MONTH.sql

三、建立数据同步 shell 脚本

建立一个 shell 脚本,整合上面建立的用户登录验证脚本和数据库脚本,后续交由 linux 系统执行。

nano /home/oracle/shell_task/RPT_PERSON_MONTH.sh
----------------------------------------------------------------------------------------------------------------
#!/bin/bash
. /home/oracle/.bash_profile
lg=`grep sqlplus /home/oracle/login_username.sh |awk -F" " '{print $2}'`
sqlplus $lg @/home/oracle/shell_task/RPT_PERSON_MONTH.sql
echo "-----end-------"
echo $(date)
exit; 
----------------------------------------------------------------------------------------------------------------

进行阶段测试:

su - root
chmod +x /home/oracle/shell_task/RPT_PERSON_MONTH.sh
su - oracle
cd /home/oracle/shell_task
./RPT_PERSON_MONTH.sh

四、建立 linux 定制执行任务,定时执行 shell 脚本

crontab -e 
----------------------------------------------------------------------------------------------------------------
30 5,13,21 * * * /home/oracle/shell_task/RPT_PERSON_MONTH.sh >  /home/oracle/shell_task/RPT_PERSON_MONTH.log 2>&1 &
----------------------------------------------------------------------------------------------------------------

五、可能会用到的一些东西

linux 改变目录/文件属主

su - root
chown -R oracle.oinstall /home/oracle/.bash_profile

linux 授予脚本文件执行权限

su - root
chmod +x /home/oracle/shell_task/RPT_PERSON_MONTH.sh

至此,全部工作就已经做完啦。 原创不易,如需转载,请标明出处!

最后修改:2019-09-08 13:15:24 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

说点什么吧~

评论列表

还没有人评论哦~赶快抢占沙发吧~