日韩性视频-久久久蜜桃-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 存储过程实现数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美日韩激情一区二区 | 人妻 丝袜美腿 中文字幕 | 一二三四av | 玖玖999| 在线观看日韩av电影 | 羞羞的网站在线观看 | 小视频在线播放 | 国产午夜在线播放 | 精品一区av | 天天射干 | 欧美精品自拍偷拍 | aaa在线 | 欧美精品免费播放 | 最新国产黄色网址 | 成人午夜影院 | 国产在线精品一区二区三区 | 日本美女动态 | 男人猛进女人爽的大叫 | 一级黄色美女视频 | 欧美精品久久久久性色 | 3344av| 国产精品久久久久久av | 亚洲福利| 国产福利观看 | 精品黑人一区二区三区在线观看 | 成人动漫视频 | 青草青草视频 | 激情五月av | 日本福利一区二区 | 欧美jizzhd精品欧美18 | 妇女一级片 | 粉嫩av国产一区二区三区 | 亚洲干综合 | 天天干干干 | 日韩大片免费在线观看 | 日韩av影片在线观看 | 撸久久| 日本欧美久久久久免费播放网 | 中文字幕av第一页 | 日韩欧美卡一卡二 | 人人澡人人澡人人澡 | 午夜草逼 | 久久大陆| 小毛片在线观看 | 国产精品爱啪在线线免费观看 | 国产ts变态重口人妖hd | 国产成人午夜精品 | 一本大道熟女人妻中文字幕在线 | 亚洲精品视频国产 | 成人午夜激情 | 少妇一级淫片免费播放 | 欧洲色网站 | 欧美一卡| 国产无限资源 | 日日爱夜夜爱 | 国内av片 | www在线播放 | 国产视频手机在线 | 欧美在线小视频 | 久久亚洲av无码西西人体 | 视频在线观看你懂的 | 成年人黄国产 | 性欢交69精品久久久 | 精品不卡一区二区 | 成人二区三区 | 中日韩av电影 | 涩涩涩涩涩涩涩涩涩涩 | 91亚洲成人 | 国产美女一级片 | 加勒比一区二区三区 | 国产视频www | 按摩害羞主妇中文字幕 | 97麻豆| 亚洲高清视频网站 | 国产精品国产精品 | 日皮视频免费观看 | 中国久久久 | 女同毛片一区二区三区 | 国产成人综合在线视频 | 亚洲高清无码久久 | 免费操片 | 欧美日韩一区二区在线播放 | 亚洲一级二级三级 | 午夜在线免费视频 | 午夜av免费在线观看 | 久久精品66 | 97在线观看 | 日韩中文字幕在线免费观看 | 精品人妻久久久久久888不卡 | 男女视频在线观看免费 | 日本视频h| 成人无码www在线看免费 | 中文人妻熟女乱又乱精品 | 国产精品区在线 | 99热这里只有精品9 日韩综合在线 | 欧美男人亚洲天堂 | 午夜小影院 | 91狠狠爱| 正在播放日韩 |