日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步

發布時間:2024/9/27 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求背景:與第三方廠商合作使用sql_loadv1.0進行數據加載,他們負責推數,我拉數。

執行流程:
1.ODS推數--------》sftp服務器
2.拉數--------》sftp服務器
3.將數據文件解析到臨時表中
4.將臨時表中的數據通過【存儲過程】同步到目標表模型中
5.待全部加載同步完成后,進行邏輯SQL處理

目前情況:
每張表是并行執行的,無法判斷哪張表會最后執行,但是每張表執行完成后,會在加載日志表中生成一條成功的記錄。

文章目錄

          • 一、設計總思路
            • 1.1. 總流程設計原則
            • 1.2. 方案選取
            • 1.3. 評估方案利弊及影響范圍
            • 1.4. 總流程概要設計
            • 1.5. 存儲過程概要設計
          • 二、監聽和shell腳本
            • 2.1. 添加監聽串
            • 2.2. 編寫配置文件
            • 2.3. 編寫存儲過程
            • 2.4. 編寫腳本
            • 2.5. 編寫sql文件
            • 2.6. 手動執行腳本
          • 三、表設計
            • 3.1. 加載日志表
            • 3.2. 數據同步日志表
          • 四、存儲過程
            • 4.1. 存儲過程實現流程
            • 4.2. 存儲過程案例
          • 五、定時調度
            • 5.1. 編輯定時文件
            • 5.2. 配置執行頻次
            • 5.3.重新加載cron服務
            • 5.4. 查看當前用戶下的定時任務列表
            • 5.5. 監控是否執行

一、設計總思路

聲明:此邏輯SQL處理一天執行一次,每次同步需要清除數據

1.1. 總流程設計原則
定時啟動,輪訓調度 場景判斷,分支流轉 日志記錄,進度追蹤 容錯機制,實時定位
1.2. 方案選取

第一種方案:
首先,和廠商交流分析每天數據同步的數據量有多少,最多能達到多少,最長數據加載的時長。
然后評估一下執行邏輯SQL有沒有時間限制,比如說上午10點之前必須同步處理完成。
最后,評估一下影響范圍。

假設,數據加載開始時間為凌晨6點,最大1000000數據量,最長時長為1小時,執行邏輯SQL需要1小時,在上午10點之前執行完成,那么我們可以寫一個定時任務一天執行一次,上午8點定時調用邏輯SQL。

第二種方案:
定時輪訓,以當前日期為條件查詢加載日志表的數據量,當滿足條件時,在查詢日志表是否已經執行過,因此,執行之前要有軌跡記錄,方便進度追蹤,執行執行邏輯SQL完畢后,更新日志表。

1.3. 評估方案利弊及影響范圍

第一種方案分析:
正常場景可以滿足,但是,如果遇到時間超長簡言之,超過了評估的時間范圍,就會在數據加載尚未完成之前,提前執行邏輯SQL導致生成錯誤數據,后期要進行數據治理。

第二種方案分析(推薦使用):
定時輪訓調度,為了在數據加載之后,再進行邏輯SQL處理,確保優先級,不會漏批
軌跡記錄和軌跡更新是為了進度追蹤
分支判斷為了滿足場景的條件
容錯機制處理,為了快速解決問題

1.4. 總流程概要設計
已知,每張表執行完成后會在load_pl_log生成一條成功的記錄,假設有4張表,數據加載完成后,在load_pl_log日志表就會生成4條為當前日期的記錄。 1.以當前日志為條件查詢load_pl_log表的總條數是否為4 2.場景分支,走向流轉1》滿足總條數為4時,執行下一步處理2》當不滿足總條數為4時,執行跳過下一步處理,直接結束 3.根據已知,邏輯SQL處理一天只執行一次,因此,需要創建一張SYNC_FINISH_LOG同步軌跡表記錄是否執行過1》如果執行過,就跳過邏輯SQL處理,直接結束。2》當尚未執行過2.1》日志記錄2.2》清除數據2.3》邏輯SQ流處理2.4》軌跡更新2.5》容錯處理
1.5. 存儲過程概要設計
1.判斷什么時間跑存儲過程?標志是什么? 2.判斷跑步跑的? 3.執行存儲工程之前要先落庫留存軌跡,方便進度跟蹤 4.執行邏輯SQL 5.完成之后,更新軌跡表 6.在執行過程中出現異常,要有容錯機制處理
二、監聽和shell腳本
2.1. 添加監聽串
# 進入oracle客戶端監聽串的目錄 cd /app/oracle/product/11.2.0/db_1/network/admin/samples # 編輯監聽文件 vim tnsnames.ora# 添加監聽串 xxx_dev= (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 數據庫ip地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = xxx)) )
2.2. 編寫配置文件

創建sync_db_conn.unl連接數據庫配置文件

# 格式:用戶名|密碼|連接串 username|password|xxx_dev
2.3. 編寫存儲過程

下面會詳細介紹

2.4. 編寫腳本
vim data_sync.sh #!bin/bash line=`cat ./sync_db_conn.unl` DBUSER=`echo $line|awk -F "|" '{print $1}'` PASSWORD=`echo $line|awk -F "|" '{print $2}'` DSN=`echo $line|awk -F "|" '{print $3}'` echo "starting..." sqlplus $DBUSER/$PASSWORD@$DSN @/home/oracle/shell_sync/sql/sync_data.sql<<EOF EOF echo "end..."
2.5. 編寫sql文件

sync_data.sql

# 存儲過程名稱 call C_C_G_CP();
2.6. 手動執行腳本
sh data_sync.sh
三、表設計
3.1. 加載日志表

LOAD_PL_LOG 記錄成功軌跡
LOAD_PL_ERROR_LOG 記錄異常軌跡

CREATE TABLE LOAD_PL_LOG (s_procname VARCHAR2(64),s_time DATE not null,s_msg VARCHAR2(4000),s_user VARCHAR2(64) ); CREATE TABLE LOAD_PL_ERROR_LOG (S_PROCNAME VARCHAR2(64),S_TIME DATE NOT NULL,S_MSG VARCHAR2(4000),S_USER VARCHAR2(64) );
3.2. 數據同步日志表

SYNC_FINISH_LOG記錄成功軌跡
SYNC_FINISH_ERROR_LOG 記錄異常軌跡

DROP TABLE SYNC_FINISH_LOG; CREATE TABLE SYNC_FINISH_LOG ( PROCNAME VARCHAR2(64),START_DATE DATE,END_DATE DATE,SYNC_FLAG NUMBER(1),SYNC_MSG VARCHAR2(4000),PRIMARY KEY(PROCNAME,START_DATE) );DROP TABLE SYNC_FINISH_ERROR_LOG; CREATE TABLE SYNC_FINISH_ERROR_LOG (S_PROCNAME VARCHAR2(64),S_TIME DATE not null,S_MSG VARCHAR2(4000),S_USER VARCHAR2(64) );
四、存儲過程
4.1. 存儲過程實現流程
1.判斷什么時間跑存儲過程?標志是什么? 2.判斷跑步跑的? 3.執行存儲工程之前要先落庫留存軌跡,方便進度跟蹤 4.執行邏輯SQL 5.完成之后,更新軌跡表 6.在執行過程中出現異常,要有容錯機制處理
4.2. 存儲過程案例
DROP PROCEDURE PERSONP ; CREATE OR REPLACE PROCEDURE PERSONP as v_backtrace varchar2(1000); --返回錯誤行 v_error_cont varchar2(1000); --整合錯誤內容 sync_finish_flag number(2); --是否開啟同步標識 SYNC_MARK number(2); BEGINSELECT count(1) into sync_finish_flagFROM load_pl_logwhere to_date(to_char(S_TIME, 'YYYY-MM-DD'), 'YYYY-MM-DD') =to_date(to_char(sysdate, 'YYYY-MM-DD'), 'YYYY-MM-DD') and s_msg='success';if sync_finish_flag = 4thenDBMS_OUTPUT.PUT_LINE('這是第1層的if');SELECT count(1) into SYNC_MARK FROM SYNC_FINISH_LOG sl where to_date(to_char(sl.END_DATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') = to_date(to_char(sysdate, 'YYYY-MM-DD'), 'YYYY-MM-DD') ;if (SYNC_MARK = 0)thenDBMS_OUTPUT.PUT_LINE('這是第2層的if');insert into SYNC_FINISH_LOG sfb (PROCNAME, START_DATE, END_DATE, SYNC_FLAG,SYNC_MSG) values('PERSONP',sysdate,'','0','數據同步中');commit;delete from PERSONP;commit;insert into PERSONP (select * from PERSONP2);commit;UPDATE SYNC_FINISH_LOG f SET f.END_DATE = SYSDATE,f.SYNC_FLAG = '1',f.SYNC_MSG = '同步完成' WHERE 1 = 1 AND to_date(to_char(f.START_DATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') = to_date(to_char(sysdate, 'yyyy/mm/dd'), 'yyyy/mm/dd') AND PROCNAME='EXPORT_LOAN_INFOP';COMMIT;end if;end if; --異常錯誤記錄處理 exceptionwhen others thenv_backtrace:=dbms_utility.format_error_backtrace;--回滾未提交部分rollback;v_error_cont:='異常錯誤為:'||sqlerrm||'--'||sqlcode||'--'||v_backtrace;insert into SYNC_FINISH_ERROR_LOG values('PERSONP',sysdate,v_error_cont,user);commit; end PERSONP; /
五、定時調度
5.1. 編輯定時文件
crontab -e
5.2. 配置執行頻次
*/30 * * * * /bin/sh /home/oracle/shell_sync/data_sync.sh

保存,退出

5.3.重新加載cron服務
/sbin/service crond restart
5.4. 查看當前用戶下的定時任務列表
crontab -l
5.5. 監控是否執行

1》可以借助根據日志查看
2》可以借助plsql工具查詢

總結

以上是生活随笔為你收集整理的linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美a级片视频 | 国产av成人一区二区三区 | a免费在线观看 | 欧美人与性动交xxⅹxx | 白浆av| 欧美黄网站 | 亚洲九九爱| 午夜视频在线观看视频 | 邻居少妇张开腿让我爽了在线观看 | 国产在线观看99 | 熟妇高潮一区二区 | 色播五月激情 | 久久99精品国产.久久久久 | 成年人看的网站 | 空姐吹箫视频大全 | 外国电影免费观看高清完整版 | 黄色片一区二区三区 | 影音先锋一区 | wwwxxxx欧美 | 香蕉网在线 | 日韩精品免费在线 | 欧美aa| 日韩免费网站 | 亚洲69| 日韩精品一二三四 | 久久国产人妻一区二区免色戒电影 | av黄色免费网站 | 国产女同91疯狂高潮互磨 | 亚洲福利 | 国产精品成人免费一区二区视频 | 桃色成人网 | 亚洲AV无码成人精品区先锋 | 亚洲高清久久 | 真人抽搐一进一出视频 | av毛片在线看 | 俄罗斯毛片 | 成人免费一区二区 | 欧洲女同同性吃奶 | 国产福利观看 | 91精品国产一区二区三区香蕉 | 影音先锋在线中文字幕 | 三上悠亚人妻中文字幕在线 | 黄色在线免费观看网站 | 老鸭窝成人 | 日本一区二区三区在线播放 | 免费av在线网站 | 欧美成人免费观看 | 无码少妇精品一区二区免费动态 | 午夜精品国产精品大乳美女 | 中文天堂在线观看 | 任你操精品视频 | 国产乱来 | 一级久久久久久久 | 黄色a免费| 亚欧精品视频一区二区三区 | 精品在线免费观看 | 在线免费av播放 | 日韩人妻无码精品久久久不卡 | 小萝莉末成年一区二区 | 久草网视频在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 三级自拍视频 | 亚洲一区二区黄 | 色婷婷免费视频 | 网红av在线 | 日日碰狠狠添天天爽无码 | zzji欧美大片 | 亚州av一区| 日韩三级av在线 | www.中文字幕在线观看 | 欧美精品入口蜜桃 | 亚洲天堂资源在线 | 天天色天天综合 | 日韩精品在线免费观看视频 | 天天摸天天做天天爽水多 | 福利二区 | 欧州一级片 | 亚洲国产一区二区在线 | 欧美性生交片4 | 国产精品国产三级国产专区52 | 欧美经典一区二区三区 | 99视频观看 | 日韩视频在线播放 | 波多野结衣办公室双飞 | 精品婷婷色一区二区三区蜜桃 | 操人视频网站 | 特大黑人巨人吊xxxx | 91超碰在线免费观看 | 国产黄免费 | 国产一级生活片 | 久久爱成人 | 露脸丨91丨九色露脸 | 日本欧美在线观看 | 日韩不卡在线 | h文在线观看 | 操你妹影院 | 999xxxx| 精品国产乱码久久久久久郑州公司 | 中文字幕在线播 |