網站首頁 編程語言 正文
兩臺Oracle之間進行數據同步,可以借助Oracle的dblink完成,如果是Oracle與其他數據庫之間,則可以使用Oracle提供的Database Gateways+dblink實現,當然,也可以使用開源ETL工具如kettle完成。
這里提供兩種在Oracle之間同步數據的簡單解決方案。
0 需求
A(192.168.68.129)、B(192.168.68.143)兩個數據庫,當 A 中的表 T_TEST 數據發生改變時,B 數據庫中的 表 T_TEST 自動更新,實現數據主動推送或者主動拉取
1 dblink + 觸發器
1.1 源庫 A 創建dblink
在 源數據庫 A 中創建 dblink,指向 目標庫 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) ) )';
查詢是否創建成功
SELECT * FROM T_TEST @DBLINK_TEST;
1.2 源庫 A 創建觸發器
在 源數據庫 A 中創建觸發器,更新 目標庫 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;
測試是否生效
INSERT INTO T_TEST VALUES(2, '測試角色','測試角色');
UPDATE T_TEST SET ROLE_NAME = '測試角色更新' WHERE ID = 2;
DELETE FROM T_TEST WHERE ID = 2;
2 dblink + 物化視圖
2.1 源庫 A 創建物化視圖日志表
在源庫中創建物化視圖日志表
CREATE MATERIALIZED VIEW LOG ON "T_TEST" WITH ROWID;
2.2 目標庫 B 創建dblink
在 目標庫 B 中創建指向 源庫 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 目標庫 B 創建物化視圖
# 創建,不會自動刷新
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個小時 1440分鐘 86400秒
故:
一個小時后時間為 sysdate+1/24select sysdate + 1/24 from dual
一分鐘后時間為 sysdate+1/1440
select sysdate + 1/1440 from dual
一秒鐘后時間為 sysdate+1/86400
select sysdate + 1/86400 from dual
2.4 手動同步數據
call dbms_mview.refresh ( 'MV_TEST' );
原文鏈接:https://blog.csdn.net/Vampire_1122/article/details/125092229
相關推薦
- 2022-07-08 Python數據分析之使用matplotlib繪制折線圖、柱狀圖和柱線混合圖_python
- 2022-11-08 PostgreSQL查看帶有綁定變量SQL的通用方法詳解_PostgreSQL
- 2022-09-10 親自教你在netty中使用TCP協議請求DNS服務器的詳細過程_服務器其它
- 2023-05-23 Golang拾遺之實現一個不可復制類型詳解_Golang
- 2022-11-12 react項目中@路徑簡單配置指南_React
- 2022-08-03 C++?sort排序函數用法詳解_C 語言
- 2022-10-11 Android自動縮放上下限折線圖示例_Android
- 2022-05-21 淺談GO中的Channel以及死鎖的造成_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支