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

歡迎訪問 生活随笔!

生活随笔

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

数据库

利用oracle快照dblink解决数据库表同步问题

發(fā)布時間:2025/5/22 数据库 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用oracle快照dblink解决数据库表同步问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

單向,雙向同步都可使用.

--名詞說明:源——被同步的數(shù)據(jù)庫
??????????? 目的——要同步到的數(shù)據(jù)庫

前6步必須執(zhí)行,第6以后是一些輔助信息.

--1、在目的數(shù)據(jù)庫上,創(chuàng)建dblink
drop public database link dblink_orc92_182;
Create public DATABASE LINK dblink_orc92_182 CONNECT TO bst114 IDENTIFIED BY password USING 'orc92_192.168.254.111';
--dblink_orc92_182 是dblink_name
--bst114 是 username
--password 是 password
--'orc92_192.168.254.111' 是遠程數(shù)據(jù)庫名


--2、在源和目的數(shù)據(jù)庫上創(chuàng)建要同步的表(最好有主鍵約束,快照才可以快速刷新)
drop table test_user;
create table test_user(id number(10) primary key,name varchar2(12),age number(3));

--3、在目的數(shù)據(jù)庫上,測試dblink
select * from test_user@dblink_orc92_182;??? //查詢的是源數(shù)據(jù)庫的表
select * from test_user;

--4、在源數(shù)據(jù)庫上,創(chuàng)建要同步表的快照日志
Create snapshot log on test_user;

--5、創(chuàng)建快照,在目的數(shù)據(jù)庫上創(chuàng)建快照
Create snapshot sn_test_user as select * from test_user@dblink_orc92_182;

--6、設置快照刷新時間(只能選擇一種刷新方式,推薦使用快速刷新,這樣才可以用觸發(fā)器雙向同步)
快速刷新
Alter snapshot sn_test_user refresh fast Start with sysdate next sysdate with primary key;
--oracle馬上自動快速刷新,以后不停的刷新,只能在測試時使用.真實項目要正確權衡刷新時間.

完全刷新
Alter snapshot sn_test_user refresh complete Start with sysdate+30/24*60*60 next sysdate+30/24*60*60;
--oracle自動在30秒后進行第一次完全刷新,以后每隔30秒完全刷新一次

--7、手動刷新快照,在沒有自動刷新的情況下,可以手動刷新快照.
手動刷新方式1
begin
dbms_refresh.refresh('sn_test_user');
end;

手動刷新方式2
EXEC DBMS_SNAPSHOT.REFRESH('sn_test_user','F'); //第一個參數(shù)是快照名,第二個參數(shù) F 是快速刷新 C 是完全刷新.

--8.修改會話時間格式
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

--9.查看快照最后一次刷新時間
SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES;

--10.查看快照下次執(zhí)行時間
select last_date,next_date,what from user_jobs order by next_date;

--11.打印調(diào)試信息
dbms_output.put_line('use '||'plsql');

--12.如果你只想單向同步,那么在目的數(shù)據(jù)庫創(chuàng)建以下觸發(fā)器(當源數(shù)據(jù)庫表改變時,目的數(shù)據(jù)庫表跟著改變,但目的數(shù)據(jù)庫表改變時,源數(shù)據(jù)庫表不改變).
create or replace trigger TRI_test_user_AFR
after insert or update or delete on sn_test_user
for each row
begin
if deleting then
????? delete from test_user where id=:old.id;
end if;
if inserting then
????? insert into test_user(id,name)
????? values(:new.id,:new.name);
end if;
if updating then
???? update test_user set name=:new.name where id=:old.id;
end if;
end TRI_test_user_AFR;

--13.如果你想雙向同步,請在源數(shù)據(jù)庫中執(zhí)行前6步,并在雙方都創(chuàng)建以下觸發(fā)器(當源數(shù)據(jù)庫表改變時,目的數(shù)據(jù)庫表跟著改變,目的數(shù)據(jù)庫表改變時,源數(shù)據(jù)庫表也改變)
CREATE OR REPLACE TRIGGER BST114.TRI_TEST_USER_AFR
AFTER DELETE OR INSERT OR UPDATE
ON BST114.SN_TEST_USER
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
??? tmp_id number(10):=-1;
begin

dbms_output.put_line('begin');
if inserting then
????? --select id into tmp_id from test_user where id=:new.id;???
????? for p in(select id from test_user where id=:new.id)
????? loop
??????? tmp_id:=p.id;
????? end loop;
?????
????? dbms_output.put_line(tmp_id||'===------------');
????? if (tmp_id=-1) then
????????? insert into test_user(id,name,age)
????????? values(:new.id,:new.name,:new.age);
????? end if;
end if;

if updating then
???? dbms_output.put_line('updated');
???? for p in(select name,age from test_user where id=:old.id)
???? loop
???????? if (p.name!=:new.name) or (p.age!=:new.age) then
????????????? update test_user set name=:new.name,age=:new.age where id=:old.id;
???????? end if;
???? end loop;
end if;

if deleting then
????? dbms_output.put_line('deleted');
????? delete from test_user where id=:old.id;
end if;
dbms_output.put_line('end');
end TRI_test_user_AFR;
--為防止雙向同步觸發(fā)器死循環(huán),所以要在觸發(fā)器中增加一些判斷,阻止死循環(huán).

--以上同步原理
1.首先創(chuàng)建一個dblink,可以訪問遠程數(shù)據(jù)庫
2.在本地創(chuàng)建一個快照,映射遠程數(shù)據(jù)表,當遠程數(shù)據(jù)表有變化時,會反應到快照中.
3.由于快照類似于視圖表,所以在本地為快照創(chuàng)建一個觸發(fā)器,當快照有變化時,會觸發(fā)相應事件.
4.在觸發(fā)器中寫同步數(shù)據(jù)的代碼.

--附:快照刷新時間參數(shù)說明
一天的秒數(shù)=24小時*60分鐘*60鈔
所以要想在30秒后刷新,參數(shù)應該這樣寫 sysdate+30/(24*60*60)
1分鐘==sysdate+60/(24*60*60)

一天的分鐘數(shù)=24小時*60分鐘
一分鐘也可以這樣寫 sysdate+1/(24*60)
30分鐘==sysdate+30/(24*60)
60分鐘==sysdate+60/(24*60)

以此類推
1小時==sysdate+1/24==sysdate+60/(24*60)
1天==sysdate+1
一個月==sysdate+30

轉(zhuǎn)載于:https://www.cnblogs.com/fhuafeng/archive/2011/10/10/2205388.html

總結

以上是生活随笔為你收集整理的利用oracle快照dblink解决数据库表同步问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久91亚洲精品中文字幕奶水 | 性大毛片视频 | 国产高清黄色 | 日本一区二区视频在线播放 | 91丨porny丨尤物 | 国产一区不卡在线 | 中文字幕久久久久久久 | 欧美久久久影院 | 国产白丝一区二区三区 | 欧美大肥婆大肥bbbbb | 精品国产免费一区二区三区 | 日韩欧美一区二区免费 | 翔田千里x88aⅴ | 日韩欧美国产成人 | av大片网站 | 色综合av综合无码综合网站 | 欧美日韩人妻精品一区在线 | 性做久久久久久久 | 成年人福利网站 | 女性女同性aⅴ免费观女性恋 | 国产精品免费一区二区三区四区 | 国产精品亚洲一区二区三区在线观看 | 土耳其xxxx性hd极品 | 打屁股黄文| 毛片一区二区 | 性歌舞团一区二区三区视频 | 影音av在线| 999国产精品视频 | 日韩av色 | xxxx久久| 秘密爱大尺度做爰呻吟 | 琪琪射| 五月婷激情 | 国产欧美精品一区二区三区app | 丰满少妇一区二区三区视频 | 操操色| 美女av免费看 | 国产超碰在线观看 | 国产精品sm | 亚洲欧美日韩偷拍 | 美女啪啪网 | 影音先锋亚洲精品 | 亚洲黄色在线网站 | 毛片无码一区二区三区a片视频 | 国产又大又黄又粗 | 国产三级久久久 | 亚洲性片 | 牛牛免费视频 | 狠狠入 | 日本高清不卡一区 | 德国艳星videos极品hd | 香蕉视频日本 | 漂亮人妻被中出中文字幕 | 久草视频福利在线 | 蜜臀av性久久久久蜜臀av麻豆 | 色5月婷婷 | 播五月婷婷 | 爱爱色图| 中文字幕在线观看播放 | 亚洲欧美福利 | 欲求不满的岳中文字幕 | 亚洲天堂资源在线 | 无码少妇一区二区 | 精品久久免费 | 国产一二三在线视频 | www.在线播放 | 日韩精品一 | 色wwwwww| 亚洲成人av中文字幕 | 国产精品无码电影 | 国产调教视频在线观看 | 免费亚洲婷婷 | 一级黄色片一级黄色片 | 亚洲国产不卡 | 男女男网站 | 欧美性天天| 337p日本欧洲亚洲大胆精筑 | 国产亚洲在线观看 | 成人黄色片免费看 | 久久久精品人妻一区二区三区四 | 日本中文视频 | 午夜精品福利视频 | 亚洲永久免费网站 | 超碰97成人 | 久久视频在线免费观看 | 欧美日韩少妇精品 | √天堂在线 | 成熟了的熟妇毛茸茸 | 18视频在线观看网站 | 久久精品5| 国产一线二线在线观看 | 日韩美女一级片 | 久久岛国 | 亚洲一区亚洲二区 | 99热热99| 美女露出让男生揉的视频 | 中文字幕av亚洲精品一部二部 | 欧美一区二区公司 | 91精品国产高清一区二区三区蜜臀 |