国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Oracle通過函數調用dblink同步表數據方案(全量/增量)

這篇具有很好參考價值的文章主要介紹了Oracle通過函數調用dblink同步表數據方案(全量/增量)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Oracle通過函數調用dblink同步表數據方案(全量/增量),oracle,SQL,oracle,數據庫

創(chuàng)建對應的包,以方便觸發(fā)調用

/*包聲明*/
CREATE OR REPLACE PACKAGE yjb.pkg_scene_job AS 
	/*創(chuàng)建同步任務*/
	FUNCTION F_SYNC_DRUG_STOCK RETURN NUMBER;
	/*同步*/
	PROCEDURE PRC_SYNC_DRUG_STOCK(RUNJOB  VARCHAR2) ;	
END pkg_scene_job;
/*包體*/
CREATE OR REPLACE PACKAGE body yjb.pkg_scene_job AS 
	/*創(chuàng)建任務*/
	FUNCTION F_SYNC_DRUG_STOCK RETURN NUMBER AS
		/*同步*/
		pragma autonomous_transaction;
	    sync_stock_sql varchar2(3000);
	    V_JOB_NAME varchar2(50):='SYNC_DRUG_STOCK_JOB';--JOB任務名稱
	    SYNC_DRUG_STOCK_JOBCNT NUMBER:=0;
	    JOBEXETIME NUMBER:=0 ;--任務執(zhí)行時間(分鐘)
	    plsqlblk varchar2(800);
	BEGIN
		BEGIN
			SELECT count(1) INTO SYNC_DRUG_STOCK_JOBCNT FROM user_scheduler_jobs a WHERE a.JOB_NAME=V_JOB_NAME;
			IF SYNC_DRUG_STOCK_JOBCNT =1 THEN
				SELECT to_number((SYSDATE - a.START_DATE)*24*60)  INTO JOBEXETIME FROM user_scheduler_jobs a WHERE a.JOB_NAME=V_JOB_NAME;
				/*如果任務執(zhí)行時間超過20分鐘 則將任務刪除*/
				IF JOBEXETIME >=20 THEN
		--			sys.dbms_scheduler.drop_job();
					-- 特別說明: force => false  
					-- false:job 執(zhí)行完成后再刪除  
					-- true :立即刪除(job 未必執(zhí)行完成哦)
					sys.dbms_scheduler.drop_job(
					  job_name => V_JOB_NAME,
					  force    => true);
			    ELSE 
			    	RETURN 1;
				END IF;
			END IF;
		    plsqlblk:='begin pkg_scene_job.PRC_SYNC_DRUG_STOCK(' ||chr(39)|| V_JOB_NAME ||chr(39)|| '); end;';
		    sys.dbms_scheduler.create_job(job_name => V_JOB_NAME,
		                                job_type => 'PLSQL_Block',
		                                job_action => plsqlblk,
		                                number_of_arguments =>0,
		                                start_date => SYSDATE,
		                                repeat_interval => NULL,
		                                end_date => NULL,
		                                job_class => 'DEFAULT_JOB_CLASS',
		                                enabled => TRUE,
		                                auto_drop => TRUE,
		                                comments => '同步數據',
		                                credential_name => null,
		                                destination_name => NULL);
		END;
		COMMIT;
	    RETURN 1;
	EXCEPTION 
	 	WHEN OTHERS then
		RETURN 0;    
	END F_SYNC_DRUG_STOCK;

	/*同步表數據(全量/增量)數據量上萬時 建議將數據量拆分進行*/
	PROCEDURE PRC_SYNC_DRUG_STOCK(RUNJOB  VARCHAR2) 
	    IS
	    pragma autonomous_transaction;
		BEGIN
	--		  SYS.DBMS_LOCK.SLEEP(10);
	--		  EXECUTE IMMEDIATE INBLOCK;
			  merge into table1 v
		      using (SELECT
							i1.HOSPITAL_AREA,
							i1.DRUG_CODE,
							i1.AMOUNT_PER_PACKAGE,
							i1.PACKAGE_UNITS_CODE,
							i1.FIRM_ID,
							i1.STORAGE,
							i1.ITEM_PRICE,
							i1.QUANTITY,
							i1.AVAILABLE_STORAGE,
							i1.SUPPLY_INDICATOR,
							i1.DRUG_SPEC
						FROM
							table2@interface i1) d
				on (v.HOSPITAL_AREA = d.HOSPITAL_AREA AND v.DRUG_CODE=d.DRUG_CODE AND v.STORAGE=d.STORAGE)   -- 這里通過主鍵判斷,數據是否存在
				 when matched then
				       update set 
				            v.QUANTITY = d.QUANTITY,
				            v.AVAILABLE_STORAGE = d.AVAILABLE_STORAGE
				when not matched then
				        insert (
				            v.HOSPITAL_AREA,
							v.DRUG_CODE,
							v.AMOUNT_PER_PACKAGE,
							v.PACKAGE_UNITS_CODE,
							v.FIRM_ID,
							v.STORAGE,
							v.ITEM_PRICE,
							v.QUANTITY,
							v.AVAILABLE_STORAGE,
							v.SUPPLY_INDICATOR,
							v.DRUG_SPEC)
				        values (
				            d.HOSPITAL_AREA,
							d.DRUG_CODE,
							d.AMOUNT_PER_PACKAGE,
							d.PACKAGE_UNITS_CODE,
							d.FIRM_ID,
							d.STORAGE,
							d.ITEM_PRICE,
							d.QUANTITY,
							d.AVAILABLE_STORAGE,
							d.SUPPLY_INDICATOR,
							d.DRUG_SPEC
				        ) ;
	--		  DBMS_OUTPUT.PUT_LINE('===========執(zhí)行' || INBLOCK || '成功=============');
			  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE(NAME      => RUNJOB,
			                                   ATTRIBUTE => 'auto_drop',
			                                   VALUE     => TRUE);
		  	--SYS.DBMS_SCHEDULER.DISABLE(NAME => RUNJOB);
	    COMMIT;
	    EXECUTE immediate 'ALTER SESSION CLOSE DATABASE link hisinterface' ;
		END PRC_SYNC_DRUG_STOCK;
END pkg_scene_job;

觸發(fā)同步任務:

SELECT yjb.pkg_scene_job.F_SYNC_DRUG_STOCK() AS a FROM dual WHERE 1=0;

沒有結果行時是不會觸發(fā)的,以下方式可觸發(fā):

SELECT yjb.pkg_scene_job.F_SYNC_DRUG_STOCK() AS a FROM dual;

PS:一定是使用(調用)到 觸發(fā)函數yjb.pkg_scene_job.F_SYNC_DRUG_STOCK(),才可完成觸發(fā)。如:

/*無法觸發(fā)情況*/
with t1 as (select 1 as a,unicorn.pkg_scene_job.F_SYNC_DRUG_STOCK() as f from dual)
select a from t1
; 

/*可觸發(fā)情況*/

with t1 as (select 1 as a,unicorn.pkg_scene_job.F_SYNC_DRUG_STOCK() as f from dual)
select f from t1
; 
或
with t1 as (select 1 as a,unicorn.pkg_scene_job.F_SYNC_DRUG_STOCK() as f from dual)
select a from t1 where f=1
; 

查看后臺任務:

SELECT * FROM user_scheduler_jobs;

查看后臺任務日志:

SELECT * FROM user_scheduler_job_run_details a WHERE instr(a.job_name,'SYNC_DRUG_STOCK_JOB')>=1 ORDER BY a.log_date DESC;


優(yōu)化

利用后臺任務方式實現時,每一次執(zhí)行都會產生JOB日志,為了避免日志產生過多,可在執(zhí)行任務前清除對應的日志記錄(調用SYS.DBMS_SCHEDULER.PURGE_LOG),如:

--清除日志
SYS.DBMS_SCHEDULER.PURGE_LOG(job_name => RUNJOB);

調用此函數清除對應JOB日志,需執(zhí)行用戶具有JOB任務管理權限(MANAGE SCHEDULER):文章來源地址http://www.zghlxwxcb.cn/news/detail-560741.html

GRANT MANAGE SCHEDULER TO USER

到了這里,關于Oracle通過函數調用dblink同步表數據方案(全量/增量)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【大數據實時數據同步】超級詳細的生產環(huán)境OGG(GoldenGate)12.2實時異構同步Oracle數據部署方案(下)

    【大數據實時數據同步】超級詳細的生產環(huán)境OGG(GoldenGate)12.2實時異構同步Oracle數據部署方案(下)

    【大數據實時數據同步】超級詳細的生產環(huán)境OGG(GoldenGate)12.2實時異構同步Oracle數據部署方案(上) 【大數據實時數據同步】超級詳細的生產環(huán)境OGG(GoldenGate)12.2實時異構同步Oracle數據部署方案(中) 【大數據實時數據同步】超級詳細的生產環(huán)境OGG(GoldenGate)12.2實時異構同步Oracle數據

    2024年02月03日
    瀏覽(22)
  • Redis主從架構、數據同步原理、全量同步、增量同步

    Redis主從架構、數據同步原理、全量同步、增量同步

    大家好,我是哪吒。 2023年再不會Redis,就要被淘汰了 圖解Redis,談談Redis的持久化,RDB快照與AOF日志 Redis單線程還是多線程?IO多路復用原理 Redis集群的最大槽數為什么是16384個? Redis緩存穿透、擊穿、雪崩到底是個啥?7張圖告訴你 Redis分布式鎖的實現方式 Redis分布式緩存、

    2024年02月07日
    瀏覽(24)
  • OceanBase V4.2 MySQL模式下,如何通過DBLINK實現跨數據源訪問

    OceanBase V4.2 MySQL模式下,如何通過DBLINK實現跨數據源訪問

    跨數據源訪問可通過 DBLINK(以下簡稱DBLINK)實現,從而使得業(yè)務代碼能夠像訪問本地數據庫一樣輕松訪問遠端數據庫。原先,DBLINK主要服務于Oracle模式,但由于OceanBase 的MySQL模式租戶同樣存在訪問遠端數據庫的需求,因此在OceanBase 4.2版本及以后的版本中,我們開放了Mysql模式

    2024年04月16日
    瀏覽(23)
  • DBSyncer安裝_配置postgresql和mysql_sqlserver_oracel全量增量同步---數據全量增量同步之DBSyncer001

    DBSyncer安裝_配置postgresql和mysql_sqlserver_oracel全量增量同步---數據全量增量同步之DBSyncer001

    ? ? ?國內做開源的大神做的,用了一下還可以,就是不能和Phoenix這種操作hbase等數據庫一起用, 這個是官網,下載安裝非常簡單,官網也有中文詳細說明. 直接下載安裝包: 然后解壓到某個地方,主要要用unzip dbsyncer.zip -d /opt/module這樣解壓 解壓后直接啟動就可以了 ? ?解壓以后進入

    2024年02月09日
    瀏覽(22)
  • Oracle dblink 跨庫查詢詳解

    Step1: 創(chuàng)建DBLINK之前需要查看當前用戶的權限。需要使用sysdba 登錄,并查詢權限。 根據上述查詢結果顯示數據庫中dblink擁有三種權限: CREATE DATABASE LINK--所創(chuàng)建的dblink只有自己可用,其他用戶無法使用。 CREATE PUBLIC DATABASE LINK--public表示所創(chuàng)建的dblink所有用戶均可使用 DROP PUBL

    2024年02月10日
    瀏覽(22)
  • 大數據Maxwell(二):使用Maxwell增量和全量同步MySQL數據

    大數據Maxwell(二):使用Maxwell增量和全量同步MySQL數據

    文章目錄 使用Maxwell增量和全量同步MySQL數據 一、使用Maxwell同步MySQL數據

    2023年04月09日
    瀏覽(29)
  • 阿里巴巴開源DataX全量同步多個MySQL數據庫

    阿里巴巴開源DataX全量同步多個MySQL數據庫

    上次 寫了阿里巴巴高效的離線數據同步工具DataX: https://mp.weixin.qq.com/s/_ZXqA3H__Kwk-9O-9dKyOQ 安裝DataX這個開源工具,并且同步備份了幾張數據表。但是發(fā)現一個問題,就是每張表都需要單獨寫一個 job。如果數據表有幾百張是不是要寫幾百個,這個不太現實了。 正當一籌莫展之際

    2024年02月02日
    瀏覽(40)
  • 如何選擇離線數據集成方案 - 全量&增量

    如何選擇離線數據集成方案 - 全量&增量

    1 前言 我在上一篇中介紹了實時集成與離線集成該怎么選擇,接著介紹一下離線集成中的增量與全量的選擇問題。 要設計方案,我們先分析一下數據產生的方式。我們把音視頻流這種非結構化的數據集成從這里排除出去,因為這種音視頻流一般都是專業(yè)的廠商和系統(tǒng)來處理。

    2024年02月02日
    瀏覽(19)
  • 使用kettle同步全量數據到Elasticsearch(es)--elasticsearch-bulk-insert-plugin應用

    使用kettle同步全量數據到Elasticsearch(es)--elasticsearch-bulk-insert-plugin應用

    為了前端更快地進行數據檢索,需要將數據存儲到es中是一個很不錯的選擇。由于公司etl主要工具是kettle,這里介紹如何基于kettle的elasticsearch-bulk-insert-plugin插件將數據導入es。在實施過程中會遇到一些坑,這里記錄解決方案。 可能會遇到的報錯: 1、No elasticSearch nodes found 2、

    2024年02月01日
    瀏覽(28)
  • 最新DM8搭建dblink連接Oracle 11G_(19c的OCI)

    最新DM8搭建dblink連接Oracle 11G_(19c的OCI)

    本方案直接使用19c的OCI連接達夢數據庫,即便Oracle版本是11g也沒有關系,因為oci版本是向下兼容的。如使用11g的OCI而達夢的版本是1.3.12及以后版本大概率會搭建不起來。 本方案操作之前請先確認oracle到dm的網絡端口暢通并且orale的監(jiān)聽已經配置完成。 以下的下載包已經放到資

    2024年02月16日
    瀏覽(40)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包