利用DB Link實現資料庫間的表同步

來源:互聯網
上載者:User

目的

  使用create Database link語句建立資料庫連結。資料庫連結是本機資料庫中的模式對象,利用它可以訪問遠端資料庫的對象。遠端資料庫不必是Oracle系統。

  一旦建立了資料庫連結,就可以用它來引用遠端資料庫上的表和視圖。在表或視圖名後附加@[dblink],就可以在SQL語句中引用遠端資料表或視圖。用select語句可以查詢遠端資料表或視圖。如果正以分布式選項使用Oracle,還可以使用任何insert、update、delete或lock table語句訪問遠端資料表或視圖。

前提

  要建立私人資料庫連結,必須具有create Database link系統許可權。要建立公用資料庫連結,必須具有create public Database link系統許可權。另外,在遠程Oracle資料庫上必須具有create session許可權。

  在本地和遠程Oracle資料庫上必須安裝了Oracle Net。

  要訪問非Oracle系統,必須使用Oracle異種服務(Oracle Heterogeneous Service)。

文法

  CREATE [SHARED][PUBLIC] DATABASE LINK dblink

  CONNECT TO [username IDENTIFIED BY password authenticated_clause|| CURRENT_USER]

  USING ‘connectstring’

關鍵字和參數

  shared:指定shared使用一個單獨的網路連接建立可被多個使用者共用的公用資料庫連結。

  public:建立可被全體使用者使用的公用資料庫連結。若省略該子句,資料庫連結為私人的,只能由建立者使用。

  dblink:指定資料庫連結的完整名或部分名。GLOBAL_NAMES初始化參數決定資料庫連結是否必須具有與該連結相連的資料庫的相同的名字。

    在一個會話或真正的應用叢集配置中的一個執行個體可以開啟的資料庫連結的最大數量,取決於初始化參數OPEN_LINKS和OPEN_LINKS_PER_INSTANCE的值。

  限定:不能在其他使用者的模式中建立資料庫連結,不能用模式名限定dblink(在資料庫連結名中允許有“.”字元,所以Oracle將全名,如RALPH.LINKTOSALES,解釋為你的模式中的資料庫連結名,而不是RALPH模式中的LINKTOSALES資料庫連結。

  connect to子句:connect to子句允許啟用對遠端資料庫的串連。

  CURRENT_USER子句:使用CURRENT_USER建立目前使用者的資料庫連結。為使連結成功,目前使用者必須是在遠端資料庫上具有有效賬戶的全域使用者。

  若直接使用資料庫連結(即不是從儲存物件中使用),目前使用者即為被串連的使用者。

  當執行儲存物件(如過程、視圖或觸發器)啟用資料庫連結時,CURRENT_USER是擁有儲存對象的使用者名稱,而不是調用對象的使用者名稱。例如,若資料庫連結出現在過程SCOTT.P(由SCOTT建立)內部並且使用者JANE調用過程SCOTT.P,目前使用者是SCOTT。

  但是,若儲存物件是一個調用方權利(invoker-right)函數、過程或包,調用方的授權ID用於串連作為遠端使用者。例如,資料庫連結出現在過程SCOTT.P(由SCOTT建立的調用方權利過程)的內部,使用者JANE調用該過程,那麼CURRENT_USER是JANE並且用JANE的許可權執行該過程。

  user IDENTIFIED BY password:是使用固定使用者資料庫連結串連遠端資料庫的使用者名稱和口令。若省略該子句,資料庫連結使用串連到資料庫的每個的使用者的名字和口令(這稱為串連的使用者資料庫連結)。

  authenticated_clause:指定目標執行個體上的使用者名稱和口令。該子句在遠程伺服器驗證使用者,是安全性所必須的。指定的使用者名稱和口令必須是遠程執行個體上的有效使用者名稱和口令。使用者名稱和口令只用於驗證。其他動作不以該使用者的名義執行。

   使用SHARED子句時必須指定該子句。

  USING 'connect string':指定遠端資料庫的服務名。

 

example:

create public database link erpsales
 connect to sales identified by sales
 using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.217.6)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = heksales)
    )
  )';

 

host=資料庫的ip地址

service_name=資料庫的ssid。

資料庫連接字串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裡定義

資料庫全域名稱可以用以下命令查出

  SELECT * FROM GLOBAL_NAME;

  可建立同義字省略@dblink尾碼

  CREATE SYNONYM 同義字名FOR 表名;

  CREATE SYNONYM 同義字名FOR 表名@資料庫連結名;

 

  刪除dblink:DROP PUBLIC DATABASE LINK dblink。

  如果建立全域dblink,必須使用systm或sys使用者,在database前加public。

 

需要DB支援Advanced replication(進階複製)功能,是否支援,可用如下SQL查看:
select * from v$option where PARAMETER='Advanced replication';

如果是返回True就表示支援。

查看Global_name參數是true還是False
執行語句: show parameter global_name;

該參數為true時,在本地建立的DBLINK的名稱必須和遠端Global_name一致才行。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.