日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Oracle使用dblink同步數(shù)據(jù)

作者:kangaroo. 更新時(shí)間: 2022-07-11 編程語(yǔ)言

兩臺(tái)Oracle之間進(jìn)行數(shù)據(jù)同步,可以借助Oracle的dblink完成,如果是Oracle與其他數(shù)據(jù)庫(kù)之間,則可以使用Oracle提供的Database Gateways+dblink實(shí)現(xiàn),當(dāng)然,也可以使用開(kāi)源ETL工具如kettle完成。

這里提供兩種在Oracle之間同步數(shù)據(jù)的簡(jiǎn)單解決方案。

0 需求

A(192.168.68.129)、B(192.168.68.143)兩個(gè)數(shù)據(jù)庫(kù),當(dāng) A 中的表 T_TEST 數(shù)據(jù)發(fā)生改變時(shí),B 數(shù)據(jù)庫(kù)中的 表 T_TEST 自動(dòng)更新,實(shí)現(xiàn)數(shù)據(jù)主動(dòng)推送或者主動(dòng)拉取

1 dblink + 觸發(fā)器

1.1 源庫(kù) A 創(chuàng)建dblink

在 源數(shù)據(jù)庫(kù) A 中創(chuàng)建 dblink,指向 目標(biāo)庫(kù) B

CREATE database link DBLINK_TEST CONNECT TO SCOTT IDENTIFIED BY "123456" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.143)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SID = ORCL) ) )';

查詢是否創(chuàng)建成功

SELECT * FROM T_TEST @DBLINK_TEST;

1.2 源庫(kù) A 創(chuàng)建觸發(fā)器

在 源數(shù)據(jù)庫(kù) A 中創(chuàng)建觸發(fā)器,更新 目標(biāo)庫(kù) B

CREATE OR REPLACE TRIGGER TRIGGER_SYN_TEST
AFTER INSERT OR UPDATE OR DELETE ON T_TEST FOR each ROW
BEGIN
	IF INSERTING THEN
		INSERT INTO T_TEST @DBLINK_TEST
		VALUES
			( : new.ID,: new.ROLE_NAME,: new.NOTE );
	ELSIF UPDATING THEN
		UPDATE T_TEST @DBLINK_TEST 
		SET ROLE_NAME = : new.ROLE_NAME,NOTE = : new.NOTE
		WHERE
			ID = : new.ID;
	ELSIF DELETING THEN
		DELETE 
		FROM
			T_TEST @DBLINK_TEST 
		WHERE
			ID = : old.ID;
	END IF;
END;

測(cè)試是否生效

INSERT INTO T_TEST VALUES(2, '測(cè)試角色','測(cè)試角色');

UPDATE T_TEST SET ROLE_NAME = '測(cè)試角色更新' WHERE ID = 2;

DELETE FROM T_TEST WHERE ID = 2;

2 dblink + 物化視圖

2.1 源庫(kù) A 創(chuàng)建物化視圖日志表

在源庫(kù)中創(chuàng)建物化視圖日志表

CREATE MATERIALIZED VIEW LOG ON "T_TEST" WITH ROWID;

2.2 目標(biāo)庫(kù) B 創(chuàng)建dblink

在 目標(biāo)庫(kù) B 中創(chuàng)建指向 源庫(kù) A 的dblink

CREATE PUBLIC database link DBLINK_TEST CONNECT TO SCOTT IDENTIFIED BY "123456" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.129)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SID = ORCL) ) )';

2.3 目標(biāo)庫(kù) B 創(chuàng)建物化視圖

# 創(chuàng)建,不會(huì)自動(dòng)刷新
CREATE MATERIALIZED VIEW MV_TEST refresh fast ON demand WITH ROWID AS 
SELECT * FROM T_TEST @DBLINK_TEST;

# 每分鐘刷新一次
CREATE MATERIALIZED VIEW MV_TEST refresh fast ON demand WITH ROWID NEXT to_date( to_char( SYSDATE + 1/1440, 'dd-mm-yyyy hh24:mi:ss' ), 'dd-mm-yyyy hh24:mi:ss' ) AS 
SELECT * FROM T_TEST @DBLINK_TEST;

# 刪除
DROP MATERIALIZED VIEW mv_name

一天為24個(gè)小時(shí) 1440分鐘 86400秒
故:
一個(gè)小時(shí)后時(shí)間為 sysdate+1/24

select sysdate + 1/24 from dual

一分鐘后時(shí)間為 sysdate+1/1440

select sysdate + 1/1440 from dual

一秒鐘后時(shí)間為 sysdate+1/86400

select sysdate + 1/86400 from dual

2.4 手動(dòng)同步數(shù)據(jù)

call dbms_mview.refresh ( 'MV_TEST' );

原文鏈接:https://blog.csdn.net/Vampire_1122/article/details/125092229

欄目分類
最近更新