新聞中心
隨著互聯(lián)網(wǎng)的發(fā)展,人們對數(shù)據(jù)共享的需求與日俱增。特別是在企業(yè)、機(jī)構(gòu)等組織內(nèi)部,數(shù)據(jù)共享對于提高工作效率、優(yōu)化流程、創(chuàng)新業(yè)務(wù)模式等都具有至關(guān)重要的作用。而分布式數(shù)據(jù)庫同步技術(shù)則成為了實現(xiàn)高效數(shù)據(jù)共享的必備工具。

創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護(hù)、公眾號搭建、微信小程序定制開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!
什么是分布式數(shù)據(jù)庫同步技術(shù)?
分布式數(shù)據(jù)庫同步技術(shù)是指將同一數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)在多個不同的節(jié)點(diǎn)上進(jìn)行備份和更新。每個節(jié)點(diǎn)都可以向其他節(jié)點(diǎn)發(fā)送或接收數(shù)據(jù),以便保持?jǐn)?shù)據(jù)在所有節(jié)點(diǎn)之間的同步和一致性。在這種情況下,每個節(jié)點(diǎn)都可以獨(dú)立地處理不同的事務(wù),而無需效率降低或數(shù)據(jù)沖突的問題。
分布式數(shù)據(jù)庫同步技術(shù)的實現(xiàn)需要考慮的因素
為了實現(xiàn)高效的數(shù)據(jù)共享,分布式數(shù)據(jù)庫同步技術(shù)需要考慮以下因素:
1. 數(shù)據(jù)一致性問題:為了保持?jǐn)?shù)據(jù)在所有節(jié)點(diǎn)之間的一致性,必須通過某種機(jī)制來確保每個節(jié)點(diǎn)上的數(shù)據(jù)都是最新的。
2. 通信效率問題:由于所有節(jié)點(diǎn)之間都要相互通信,必須確保通信效率高,否則會導(dǎo)致系統(tǒng)性能下降。
3. 數(shù)據(jù)安全問題:如果數(shù)據(jù)在傳輸過程中被攻擊或泄露,將會對組織的利益造成嚴(yán)重?fù)p害。
如何實現(xiàn)高效數(shù)據(jù)共享?
為了實現(xiàn)高效數(shù)據(jù)共享,需要考慮以下步驟:
1. 構(gòu)建數(shù)據(jù)同步模型:根據(jù)組織的需求和數(shù)據(jù)處理過程,建立一個合適的數(shù)據(jù)同步模型。例如,關(guān)系型數(shù)據(jù)庫、主從復(fù)制數(shù)據(jù)庫等。
2. 設(shè)計合適的數(shù)據(jù)同步算法:數(shù)據(jù)同步算法是關(guān)鍵問題,在設(shè)計時需要考慮數(shù)據(jù)一致性、通信效率和數(shù)據(jù)安全等問題。
3. 實現(xiàn)數(shù)據(jù)同步:為了實現(xiàn)高效數(shù)據(jù)共享,必須實現(xiàn)數(shù)據(jù)同步算法,并確保所有節(jié)點(diǎn)的數(shù)據(jù)都能夠保持一致。
4. 測試數(shù)據(jù)同步效果:在實現(xiàn)數(shù)據(jù)同步后,需要進(jìn)行測試,以驗證數(shù)據(jù)同步算法是否滿足組織的需求,并檢查數(shù)據(jù)同步效果是否良好。
5. 優(yōu)化數(shù)據(jù)同步性能:如果數(shù)據(jù)同步效果不佳,需要考慮一些優(yōu)化策略,例如分區(qū)和負(fù)載均衡等。
分布式數(shù)據(jù)庫同步技術(shù)的優(yōu)缺點(diǎn)
分布式數(shù)據(jù)庫同步技術(shù)的優(yōu)點(diǎn)在于可以實現(xiàn)數(shù)據(jù)在不同節(jié)點(diǎn)間的同步和共享,并且能夠提高組織的效率和響應(yīng)速度。此外,分布式數(shù)據(jù)庫同步技術(shù)還具有以下優(yōu)點(diǎn):
1. 數(shù)據(jù)冗余:如果某個節(jié)點(diǎn)無法使用或發(fā)生故障,備份節(jié)點(diǎn)可以頂替并快速恢復(fù)。
2. 高可擴(kuò)展性:可以將備份節(jié)點(diǎn)添加到系統(tǒng)以提高系統(tǒng)性能。
3. 數(shù)據(jù)備份:在節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)復(fù)制,以防止數(shù)據(jù)丟失。
然而,分布式數(shù)據(jù)庫同步技術(shù)也存在一些缺點(diǎn):
1. 治理復(fù)雜性:由于節(jié)點(diǎn)之間需要相互通信,因此需要管理和維護(hù)大量的網(wǎng)絡(luò)連接和配置。
2. 通信開銷:由于節(jié)點(diǎn)之間需要頻繁地通信和同步數(shù)據(jù),因此可能會增加系統(tǒng)通信慢的風(fēng)險。
3. 數(shù)據(jù)安全問題:在分布式數(shù)據(jù)庫中,數(shù)據(jù)安全問題往往是一個大問題。數(shù)據(jù)在傳輸和存儲過程中必須進(jìn)行加密和驗證。
結(jié)論
分布式數(shù)據(jù)庫同步技術(shù)可以有效地實現(xiàn)數(shù)據(jù)在多個節(jié)點(diǎn)之間的同步和共享,從而提高組織的效率和響應(yīng)速度。然而,為了充分發(fā)揮這種技術(shù)的優(yōu)勢,您需要深入了解分布式數(shù)據(jù)庫同步技術(shù),并且在設(shè)計及實現(xiàn)過程中,要考慮到數(shù)據(jù)一致性、通信效率、數(shù)據(jù)安全等重要因素。最終,通過優(yōu)化策略,盡可能地提高分布式數(shù)據(jù)庫同步技術(shù)的性能,以獲得更好的使用效果。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220分布式數(shù)據(jù)庫 與 集群數(shù)據(jù)庫 之間的關(guān)系
分并汪鍵布式, 往往指數(shù)據(jù)被割裂, 分置不同地方
集群指絕巧, 在任何實例上, 看到的數(shù)據(jù)都是一致陵隱的.
兩者有非常大的不同.
mysql 做不了集群, 只能做分布. 可以認(rèn)為你必須先知道數(shù)據(jù)在哪個mysql實例上.
問題1:
首先認(rèn)清楚:集群是個物理形態(tài),磨拆分布式是個工作方式。
分布式:一個業(yè)務(wù)分拆多個子業(yè)務(wù),部署在不同的服務(wù)器上;
集群:同一個業(yè)務(wù),部署在多個服數(shù)胡務(wù)器上。
問題2:
跨機(jī)房要根據(jù)網(wǎng)絡(luò)線上IP數(shù)據(jù)同步 如果同步到當(dāng)前操作電腦必須 對方IP必須能通 ,然后在進(jìn)行相關(guān)操作!(比如日志同步數(shù)據(jù) 、工具同步數(shù)據(jù)、觸發(fā)器存儲過程同步數(shù)據(jù)等)
問題3:
瞎畢棗 oralce、MySQL等(具體要看你做那些分布式操作)
兩個oracle數(shù)據(jù)庫個有部分?jǐn)?shù)據(jù)要同步給對方怎么辦?
用數(shù)據(jù)庫快照就能實現(xiàn)啊.
Oracle快照原理及實現(xiàn)總結(jié)
Oracle數(shù)據(jù)庫的快照是一個表,它包含有對一個本地或遠(yuǎn)程數(shù)據(jù)庫上一個或多個表或視圖的查詢的結(jié)果。對于中大型數(shù)據(jù)庫,業(yè)務(wù)數(shù)據(jù)庫里所有的數(shù)據(jù)同步到另外一個處理服務(wù)器上更佳的選擇還是使用SnapShot方式,即快照的方式。
由于工作需要,今天需要將業(yè)務(wù)數(shù)據(jù)庫里所有的數(shù)據(jù)同步到另外一個處理服務(wù)器上。在做方案的時候,想了很多方法,當(dāng)然最快的辦法還是使用物理熱備的方式。
但是我個人認(rèn)為如果對于中大型數(shù)據(jù)庫(我們的數(shù)據(jù)庫有300G左右)更佳的選擇還是使用SnapShot方式,即快照的方式。
Oracle數(shù)據(jù)庫的快照是一巧態(tài)個表,它包含有對一個本地或遠(yuǎn)程數(shù)據(jù)庫上一個或多個表或視圖的查詢的結(jié)果。也就是說快照根本的原理就是將本地或遠(yuǎn)程數(shù)據(jù)庫上的一個查詢結(jié)果保存在一個表中。
以下是我建立的Snapshot,目的是從業(yè)務(wù)數(shù)據(jù)庫上將數(shù)據(jù)Copy到處理數(shù)據(jù)庫上,是不同的兩個服務(wù)器之間對數(shù)據(jù)copy。
之一步:在處理服務(wù)器上的Oracle終端,建立database link,業(yè)務(wù)數(shù)據(jù)庫服務(wù)器SID為判旁TEST
create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using ‘test’;
第二步:在業(yè)務(wù)數(shù)據(jù)庫上對應(yīng)的表建立快照日志
Create snapshot log on A_Table;
第三步:建立Snapshot 快照名稱為:Test_SnapShot
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK
說明:REFRESH是刷新方法
刷新方式有:COMPLETE和掘?qū)捪餏AST兩種,而START WITH是說明開始執(zhí)行的時間。
Next是下次執(zhí)行的時間
而AS以后是構(gòu)成快照的查詢方法。
相關(guān)的方法:
更改快照
ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;
手動刷新快照 在命令界面執(zhí)行:
EXEC DBMS_SNAPSHOT.REFRESH(‘Test_SnapShot ‘,’C’);
之一個參數(shù)是要刷新的快照名
第二個參數(shù)是刷新的方式,F(xiàn)—-FAST, C—COMPLETE
查看快照最后刷新的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES;
最后非常的方案:
1:為需要做Snapshot的表建立Snapshot日志
create snapshot log on t1 with rowid; 這里使用ROWID建立日記的參數(shù)
2:采用Fast的方式建立快照,使用rowid做為參考參數(shù)
create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;
更好能按照rowid來建立快照。要不然就必須要為表建立Primary Key。
Oracle dblink詳解
Oracle日常管理
database link概述
database link是定義一個數(shù)據(jù)庫到另一個數(shù)據(jù)庫的路徑的對象,database link允許你查詢遠(yuǎn)程表及執(zhí)行遠(yuǎn)程程序。在任何分布式環(huán)境里,database都是必要的。另外要注意的是database link是單向的連接。
在創(chuàng)建database link的時候,Oracle再櫻漏數(shù)據(jù)字典中保存相關(guān)的database link的信息,在使用database link的時候,Oracle通過Oracle Net用用戶預(yù)先定義好的連接信息訪問相應(yīng)的脊大爛遠(yuǎn)程數(shù)據(jù)庫以完成相應(yīng)的工作。
建立database link之前需要確認(rèn)的事項:
確認(rèn)從local database到remote database的網(wǎng)絡(luò)連接是正常的,tnsping要能成功。
確認(rèn)在remote database上面有相應(yīng)的訪問權(quán)限。
database link分類
類型Owner描述
Private 創(chuàng)建database link的user擁有該database link 在本地數(shù)據(jù)庫的特定的schema下建立的database link。只有建立該database link的schema的session能使用這個database link來訪問遠(yuǎn)程的數(shù)據(jù)庫仿山。同時也只有Owner能刪除它自己的private database link。
Public Owner是PUBLIC. Public的database link是數(shù)據(jù)庫級的,本地數(shù)據(jù)庫中所有的擁有數(shù)據(jù)庫訪問權(quán)限的用戶或pl/sql程序都能使用此database link來訪問相應(yīng)的遠(yuǎn)程數(shù)據(jù)庫。
Global Owner是PUBLIC. Global的database link是網(wǎng)絡(luò)級的,When an Oracle network uses a directory server, the directory server automatically create and manages global database links (as net service names) for every Oracle Database in the network. Users and PL/SQL subprograms in any database can use a global link to access objects in the corresponding remote database.
Note: In earlier releases of Oracle Database, a global database link referred to a database link that was registered with an Oracle Names server. The use of an Oracle Names server has been deprecated. In this document, global database links refer to the use of net service names from the directory server.
創(chuàng)建dblink所需的權(quán)限
PrivilegeDatabaseRequired For
CREATE DATABASE LINK Local Creation of a private database link.
CREATE PUBLIC DATABASE LINK Local Creation of a public database link.
CREATE SESSION Remote Creation of any type of database link.
database link的使用
基本語法
CREATE database link link_name
IDENTIFIED BY password>
說明:
1) 權(quán)限:創(chuàng)建數(shù)據(jù)庫鏈接的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統(tǒng)權(quán)限,用來登錄到遠(yuǎn)程數(shù)據(jù)庫的帳號必須有CREATE SESSION權(quán)限。這兩種權(quán)限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權(quán)限在DBA中)。一個公用數(shù)據(jù)庫鏈接對于數(shù)據(jù)庫中的所有用戶都是可用的,而一個私有鏈接僅對創(chuàng)建它的用戶可用。由一個用戶給另外一個用戶授權(quán)私 有數(shù)據(jù)庫鏈接是不可能的,一個數(shù)據(jù)庫鏈接要么是公用的,要么是私有的。
2)link : 當(dāng)source端的數(shù)據(jù)庫GLOBAL_NAME=TRUE時,link名必須與遠(yuǎn)程數(shù)據(jù)庫的全局?jǐn)?shù)據(jù)庫名global_name)相同;否則,可以任意命名。
3)current_user使用該選項是為了創(chuàng)建global類型的dblink。在分布式體系中存在多個數(shù)據(jù)庫的話。如果想要在每一個數(shù)據(jù)庫中都可以使用同樣的名字來訪問數(shù)據(jù)庫a,那在每個數(shù)據(jù)庫中都要創(chuàng)建一個到數(shù)據(jù)庫a的db_link,太麻煩了。所以現(xiàn)在有這個選項。你只要創(chuàng)建一次。所有的數(shù)據(jù)庫都可以使用這個db_link來訪問了。要使用這個特性,必須有oracle nameserver或者ORACLE目錄服務(wù)器。并且數(shù)據(jù)庫a的參數(shù)global_names=true.具體我也沒有創(chuàng)建過,沒有這個環(huán)境。
4)connectstring:連接字符串,tnsnames.ora中定義遠(yuǎn)程數(shù)據(jù)庫的連接串,也可以在創(chuàng)建dblink的時候直接指定。
5)username、password:遠(yuǎn)程數(shù)據(jù)庫的用戶名,口令。如果不指定,則使用當(dāng)前的用戶名和口令登錄到遠(yuǎn)程數(shù)據(jù)庫,當(dāng)創(chuàng)建connected user類型的dblink時,需要如果采用數(shù)據(jù)字典驗證,則需要兩邊數(shù)據(jù)庫的用戶名密碼一致。
創(chuàng)建database link選項說明
取值說明
不指定 默認(rèn)值建立一個dedicated的連接,每一個使用database link的本地session都會對應(yīng)有一個遠(yuǎn)程數(shù)據(jù)庫的session。
SHARED 創(chuàng)建一個共享的數(shù)據(jù)庫連接,同時要指定database link_authentication。
使用shared方式的 database link是數(shù)據(jù)庫會限制到遠(yuǎn)程數(shù)據(jù)庫的連接的數(shù)量,這樣以避免過多的連接對遠(yuǎn)程數(shù)據(jù)庫造成太大的壓力。在使用shared database link的時候,到database link的連接會在連接以后與本地連接斷開,為防止未授權(quán)的session使用此鏈接而要求在創(chuàng)建shared database link的時候必須要指定database link_authentication。
(from Oracle document: A shared database link is a link between a local server process and the remote database. The link is shared because multiple client processes can use the same link simultaneously.)
共享鏈接更多資料
共享數(shù)據(jù)庫鏈接是指該鏈接的多個用戶可以共享同一個底層網(wǎng)絡(luò)連接。例如,在有四位用戶的MTS(多線程服務(wù)器)環(huán)境下,每一個共享服務(wù)器進(jìn)程都將與遠(yuǎn)程服務(wù)器有一個物理鏈接,這四位用戶共享這兩個鏈接。
表面上,共享鏈接乍一聽起來像是一件好事。在某些環(huán)境下的確如此,但是,當(dāng)你考慮使用共享鏈接時,應(yīng)當(dāng)意識到這有許多局限性和警告:
如果你使用一個專用的服務(wù)器連接來連接到你的本地數(shù)據(jù)庫,鏈接只能在你從那些連接中創(chuàng)建的多重會話間共享 。在MTS環(huán)境里,每一個共享服務(wù)器進(jìn)程潛在地打開一個鏈接。所有的會話被同一共享服務(wù)器進(jìn)程提供并且分享被那個進(jìn)程打開的任意共享鏈接。因為在MTS環(huán)境里的一個共享服務(wù)器進(jìn)程能夠服務(wù)于許多用戶連接,共享鏈接的使用可能導(dǎo)致打開的鏈接遠(yuǎn)多于所必須的鏈接。用SHARED關(guān)鍵字建立共享數(shù)據(jù)庫鏈接。還必須使用AUTHENTICATED BY 子句在遠(yuǎn)程系統(tǒng)上指定一有效的用戶名和口令。如下命令建立一個共享的、公用的、連接用戶數(shù)據(jù)庫鏈接:
CREATE SHARED PUBLIC database link GNIS
AUTHENTICATED BY DUMMY_USER IDENTIFIED BY SECRET
USING ‘GNIS’;
要獲得創(chuàng)建鏈接和管理分布式系統(tǒng)的更多資料,請查閱Oracle Technology Network (
)。
使用AUTHENTICATED BY子句稍微有些困擾,但是由于實現(xiàn)共享鏈接的方式安全性決定它是必須的。這個例子中的用戶名和口令DUMMY_USER/SECRET必須在遠(yuǎn)程系統(tǒng)上有效。然而,遠(yuǎn)程系統(tǒng)上使用的帳戶仍就是連接用戶的帳戶。如果我以JEFF/SECRET登陸到我的本地數(shù)據(jù)庫并使用我剛建好的共享鏈接,將會發(fā)生以下一系列事件:
為了打開鏈接,Oracle使用DUMMY_USER/SECRET向遠(yuǎn)程數(shù)據(jù)庫授權(quán)。然后,Oracle試圖使用HMAD/SECRET使我登陸到遠(yuǎn)程數(shù)據(jù)庫。共享鏈接的主要目的是減少兩個數(shù)據(jù)庫服務(wù)器之間的底層網(wǎng)絡(luò)連接數(shù)量。它們最適合于MTS環(huán)境,在那你擁有大量的通過這一鏈接訪問遠(yuǎn)程數(shù)據(jù)庫的用戶。觀念上,你想讓用戶數(shù)量超過共享服務(wù)器進(jìn)程的數(shù)量。那么你可以通過為每一共享服務(wù)器進(jìn)程打開一個鏈接而不是每位用戶打開一個鏈接的方法,節(jié)省資源。
database link使用方式
取值說明
不指定 默認(rèn)值建立一個private的database link
PUBLIC 公共連接,這樣的連接可以被數(shù)據(jù)的所有的用戶訪問
database link用戶驗證方法
取值說明
不指定 默認(rèn)值采取Connected User的驗證方法
CONNECT TO CURRENT_USER 采取CURRENT_USER的驗證方式
CONNECT TO user_name IDENTIFIED BY password 采取Fiexed User的驗證方式
database link創(chuàng)建舉例
SQL StatementConnects To DatabaseConnects AsLink Type
CREATE database link
sales.us.americas.acme_auto.com USING ‘sales_us’; sales using net service name sales_us Connected user Private connected user
CREATE database link foo
CONNECT TO CURRENT_USER USING
‘a(chǎn)m_sls’; sales using service name am_sls Current global user Private current user
CREATE database link
sales.us.americas.acme_auto.com
CONNECT TO scott IDENTIFIED
BY tiger USING ‘sales_us’; sales using net service name sales_us scott using password tiger Private fixed user
CREATE PUBLIC database link
sales CONNECT TO scott
IDENTIFIED BY tiger USING ‘rev’; sales using net service name rev scott using password tiger Public fixed user
CREATE SHARED PUBLIC database link
sales.us.americas.acme_auto.com
CONNECT TO scott IDENTIFIED
BY tiger AUTHENTICATED BY
anupam IDENTIFIED BY bhide USING ‘sales’; sales using net service name sales scott using password tiger, authenticated as anupam using password bhide Shared public fixed user
不使用TNS Name一例:
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = sales.company.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)’;
database link的使用
— 最簡單的用法
SELECT * FROM table_name@database link;
— 不想讓使用的人知道database link的名字的時候
— 建一個別名包裝一下
CREATE SYNONYM table_name FOR table_name@database link;
SELECT * FROM table_name;
— 或者,也可以建立一個視圖來封裝
CREATE VIEW table_name AS SELECT * FROM table_name@database link;
database link刪除
— 刪除public類型的database link
DROP PUBLIC database link link_name;
— 刪除非public類型的database link
— 注意:只有owner自己能刪除自己的非public類型database link
DROP database link link_name;
查看database link的信息
查看系統(tǒng)database link的基本信息
DBA_DB_LINKS (ALL_DB_LINKS/USER_DB_LINKS)
DBA_DB_LINKS視圖為每一定義的鏈接返回一行。OWNER 列和DB_LINK列分別顯示了這一鏈接的所有者及名稱。對公用數(shù)據(jù)庫鏈接,OWNER列將包含’PUBLIC’。如果你建立固定用戶鏈接,用戶名應(yīng)在DBA_DB_LINKS視圖的USERNAME列里。ALL_DB_LINKS 視圖和 USER_DB_LINKS視圖與 DBA_DB_LINKS視圖相類似-它們分別顯示了你能夠訪問的所有鏈接及你所擁有的全部鏈接。
COL OWNER FOR A15
COL DB_LINK FOR A25
COL HOST FOR A25
COL USERNAME FOR A15
SELECT * FROM DBA_DB_LINKS;
DBA_OBJECTS (ALL_OBJECTS/USER_OBJECTS)
在這個視圖里面只能查詢到系統(tǒng)有那些database link以及他們的owner,創(chuàng)建時間等信息。
COL OWNER FOR A15
COL OBJECT_NAME FOR A25
COL OBJECT_TYPE FOR A25
SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE ‘database link’;
查看保存的Fixed user database link所保存的用戶密碼,該密碼是經(jīng)過加密的。
這是比較危險的一件事,有必要對表sys.link$的權(quán)限進(jìn)行限制。
col host for a15
col userid for a15
col passwordx for a40
col name for a20
select name, host, userid, passwordx from sys.link$;
通過database link去SELECT遠(yuǎn)程數(shù)據(jù)庫的一個表也是一個事務(wù)嗎?
select * from v$transaction;
— 沒有記錄,說明沒有事務(wù)
— 通過database link連接遠(yuǎn)程數(shù)據(jù)庫,select 其中一個表
select * from bbs_news@mylink
select * from v$transaction;
— 發(fā)現(xiàn)有一條記錄。
解釋
因為本地數(shù)據(jù)庫只是將對應(yīng)的sql發(fā)送給遠(yuǎn)程數(shù)據(jù)庫執(zhí)行,接受remote db返回的結(jié)果,但他并不知道是否該sql修改了數(shù)據(jù); 所以需要為select 語句也標(biāo)示一個事務(wù)。
具體可以參考o(jì)tn 分布式數(shù)據(jù)庫手冊,所以在用database link遠(yuǎn)程訪問時,要加上set transaction read only;
close database link
ALTER SESSION CLOSE database link sales;
其實,dblink的相應(yīng)屬性對應(yīng)了Oracle的數(shù)據(jù)字典link$,任何針對dblink的操作都是操作該數(shù)據(jù)字典。在9i的時候,如果Oracle的global_name僅包括db_name,也就是說DB_DOMAIN的值為空。那么這個時候建立的數(shù)據(jù)庫鏈,在數(shù)據(jù)庫修改全局名GLOBAL_NAME之后(修改為db_name.db_domain格式),會無法刪除。
如果要產(chǎn)生數(shù)據(jù)庫鏈,必須將GLOBAL_NAME改回DB_NAME格式,即去掉后面的DOMAIN,但是這個時候,RENAME操作會自動添加域名,使得Oracle全局名無法恢復(fù)到初始狀態(tài)。因此在這情況下,如果需要刪除dblink,只能直接操作link$數(shù)據(jù)字典
delete from link$ where owner#=user_id and name=dblink_name
當(dāng)然直接操作數(shù)據(jù)字典是危險的,更好做好備份,然后再進(jìn)行操作。
利用dblink執(zhí)行ddl
我們知道任何ddl語句都無法在dblink中直接執(zhí)行,示例如下
SQL> desc db_test;
Name Null? Type
ID NUMBER(38)
SQL> drop table db_test@DBLINK_CONNECTED_HR;
drop table db_test@DBLINK_CONNECTED_HR
*
ERROR at line 1:
ORA-02023: DDL operations are not allowed on a remote database
通過創(chuàng)建存儲過程,使得能在dblink中執(zhí)行ddl語句。 注意需在目標(biāo)數(shù)據(jù)庫的相應(yīng)用戶下創(chuàng)建存儲過程 ,具體如下
SQL> exec dbms_utility.EXEC_DDL_STATEMENT@dblink(‘drop table db_test’)
PL/SQL procedure successfully completed.
SQL> desc db_test;
ERROR:
ORA-04043: object db_test does not exist
dblink的限制
You cannot perform the following operations using database links:
Grant privileges on remote objects
Execute DESCRIBE operations on some remote objects. The following remote objects, however, do support DESCRIBE operations:
Tables
Views
Procedures
Functions
Analyze remote objects
Define or enforce referential integrity
Grant roles to users in a remote database
Obtain nondefault roles on a remote database. For example, if jane connects to the local database and executes a stored procedure that uses a fixed user link connecting as scott, jane receives scott’s default roles on the remote database. Jane cannot issue SET ROLE to obtain a nondefault role.
Execute hash query joins that use shared server connections
Use a current user link without authentication through SSL, password, or NT native authentication
轉(zhuǎn)自
作者:czmmiao
方法一:通過物化視圖來實現(xiàn)
1 創(chuàng)建姿判扮dblink 2 創(chuàng)建物化視圖
方法二沖拿:通過dataguard來實現(xiàn)
全庫同步,并且跡灶備庫不能進(jìn)行操作
方法三:通過godengate來實現(xiàn)
關(guān)于分布式 數(shù)據(jù)庫同步的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。
文章標(biāo)題:實現(xiàn)高效數(shù)據(jù)共享:分布式數(shù)據(jù)庫同步技術(shù)初探(分布式數(shù)據(jù)庫同步)
當(dāng)前網(wǎng)址:http://m.fisionsoft.com.cn/article/dhjccji.html


咨詢
建站咨詢
