前言
今天做了数据表的定时同步任务,做一下文档记录,权当经验积累,后续备用。
一、建立用户登录验证脚本
之所以要单独建立用户登录验证脚本,是因为在安全管理侧,每隔一段时间数据用户就需要更换密码,如果每次修改用户密码后,所有用到这个数据库用户的数据脚本都要逐一修改的话,将是一件非常麻烦的事情,所以为了方便维护,建议将用户登录脚本单独维护,后续如果用户更换密码了,只需要维护这一个脚本即可。
登录 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
© 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

发表评论