database link ,我們習慣稱為db link。作用:用於從a資料庫到b資料庫之間訪問的一種手段。類似於 ogg 中的表同步(用戶同步)。如上所述,db link 的主要作用是跨庫查詢。有很多業務都需要進行跨庫查詢。在我們公司有時就不得不去去創建一些db link。 優點:創建方式簡單、易 ...
database link ,我們習慣稱為db link。
作用:用於從a資料庫到b資料庫之間訪問的一種手段。類似於 ogg 中的表同步(用戶同步)。如上所述,db link 的主要作用是跨庫查詢。有很多業務都需要進行跨庫查詢。在我們公司有時就不得不去去創建一些db link。
優點:創建方式簡單、易懂、可以擁有創建用戶的所有許可權。
缺點:自然,方便的手段就會有更多的不利。
1 大量消耗資料庫資源;本地系統每通過DBLINK鏈接遠端系統一次,都會生成一個本地session,如本地session不退出或者手動釋放,只有通過session超時才能自動釋放,會浪費大量的系統資源
2 容易出現資料庫BUG:大量使用DBLINK,本地系統極易出現ORA-02068、ORA-03113、ORA-02080、ORA-02054、ORA-02050等Oracle錯誤,這種錯誤大部分會影響當前session正在處理的業務
3 性能較差:由於使用DBLINK,本地系統在獲取數據時,每次鏈接都會對遠端資料庫進行一次全表掃描,且所有數據都會傳輸回本地資料庫內,導致性能降低並且嚴重浪費當前系統資源。尤其出現一條sql語句從兩個DBLINK中取數,更被稱之為“性能殺手”,尤其是OLTP型資料庫
4 數據傳輸不穩定,占用帶寬嚴重,容易產生丟包風險:DBLINK本身沒有數據存儲、監控等功能,是通過網路中的資料庫進行傳輸時,如果在傳輸過程中出現數據丟包現象,DBLINK本身不會發現,只用當業務進行完畢才能發現丟包現象,這樣會影響當前正在處理的業務;另外,通過DBLINK查詢的數據會像數據全部傳至本地資料庫進行操作,數據傳輸量很大,占用帶寬嚴重,可能會導致網路堵塞
5 Oracle數據功能受限:DBLINK本身不支持對oracle LOB大對象的操作,在使用PROCDURE時,使用COMMIT等操作時可能會出現錯誤
6 可擴展性較差:如果多系統之間 使用DBLINK進行傳輸,每增加一個系統,都會增加一個或多個DBLINK鏈接或者修改對應的介面程式,如果修改其中一個介面,需要修改所有關聯繫統內的介面程式
7 維護性差、安全性較低:通過DBLINK進行鏈接需要將遠端資料庫用戶名、密碼、IP地址存在本地資料庫,如遠端進行密碼修改、IP地址變更,本地資料庫也需要修改,如果系統較多,每個系統都需要同時修改。切本地資料庫管理員能夠看到遠端數據的密碼、IP地址,對系統安全產生影響
可是,即使是在缺點這麼這麼多的情況下,還是會有人用,歸根到底,個人感覺還是oracle對兩個庫之間的交互做的並不是特別好,ogg 好用是好用,但是在表多的情況下,我們可是深受其害。
用法:創建dblink的先決條件便是兩個庫要能交互(local database to remote database)網路要能連接正常,其次。要在源端資料庫tnsname 文件中配置上訪問目標的參數。並且能 tnsping 通。
database link 分為兩種:一種為 public(公有) 一種為 private(個人)。顧名思義,公有dblink即源庫所有的用戶都可以使用,個人dblink則只有創建者用戶可以使用。
創建dblink是要有相應的許可權的。
select * from user_sys_privs where privilege like upper('%LINK%');
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SYS CREATE DATABASE LINK NO
SYS DROP PUBLIC DATABASE LINK NO
SYS CREATE PUBLIC DATABASE LINK NO
CREATE DATABASE LINK 為創建個人dblink許可權。
CREATE PUBLIC DATABASE LINK 為創建公有dblink 許可權。
創建dblink
當tnsnames中有了參數。且有了相應的許可權之後,就可以創建dblink。創建方式有以下幾種。
創建個人dblink語句為 CREATE database link 開頭:
使用當前用戶的用戶名和密碼去連接遠程資料庫。如果密碼不對會報錯
create database link test1 using 'test';
創建公有dblink語句CREATE PUBLIC database link
使用指定的用戶和密碼創建公有 dblink
create public database link test3 connect to scott identified by tiger using 'test';
建一個shared 的資料庫連接
create shared public database link test4 connect to scott identified by "tiger" authenticated by username identified by "passwd" using 'test';
使用shared方式的 database link是資料庫會限制到遠程資料庫的連接的數量,這樣以避免過多的連接對遠程資料庫造成太大的壓力。
還有一種創建方式是不使用tnsname的情況
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)';
刪除dblink
首先需要查詢出來有哪些dblink
select owner,object_name from dba_objects where object_type='DATABASE LINK';
然後如果為pubilc 則刪除方式為 drop public database link
如果為個人則刪除方式為:drop database link
其實本質上來說,dblink 並不是一個很複雜的東西。但是鑒於對資料庫的影響。本著能少用就少用的原則。如果能用一些導入導出去替換dblink(我們也正在這麼做)。是最好的。