Oracle 使用 DBLINK詳解

DBLINK詳解


1.建立dblink語法:


CREATE [PUBLIC] DATABASE LINK link 


CONNECT TO username IDENTIFIED BY password


USING ‘connectstring’


說明:


1) 權限:建立數據庫連接的賬號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登陸到遠程數據庫的賬號必須有CREATE SESSION權限。這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。一個公用數據庫連接對於數據庫中的全部用戶都是可用的,而一個私有連接僅對建立它的用戶可用。由一個用戶給另一個用戶受權私 有數據庫連接是不可能的,一個數據庫連接要麼是公用的,要麼是私有的。


2)link :  當GLOBAL_NAME=TRUE時,link名必須與遠程數據庫的全局數據庫名global_name)相同;不然,能夠任意命名。


3)connectstring:鏈接字符串,tnsnames.ora中定義遠程數據庫的鏈接串。


4)username、password:遠程數據庫的用戶名,口令。若是不指定,則使用當前的用戶名和口令登陸到遠程數據庫。


2.刪除數據庫連接的語句:


DROP [PUBLIC] DATABASE LINK zrhs_link


3.查看已建立的dblink


select owner,object_name from dba_objects where object_type='DATABASE LINK';


4.dblink的引用:


[user.]table|view @dblink 如: SELECT * FROM worker@zrhs_link; SELECT * FROM camel.worker@zrhs_link ; 5.建立同義詞: 對於常用的數據庫連接,能夠創建一個本地的同義詞,方便使用: CREATE SYNONYM worker_syn FOR worker@zrhs_link; 6.建立遠程視圖: CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where…; 如今本視圖可與本地數據庫中的任何其它視圖同樣對待,也能夠受權給其它用戶訪問此視圖,但該用戶必須有訪問數據庫連接的權限。 其餘: 修改GLOBAL_NAME的方法: 1.在遠程數據庫的init.ora文件中將global_names設爲false。 或者 2.用sys用戶執行以下語句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE; 修改後從新啓動數據庫設置才能生效。 數據庫全局名稱能夠用如下命令查出:SELECT * FROM GLOBAL_NAME; ===== dblink 實戰 ====== 1.dblink分爲公有和私有兩類。 公有dblink使用public修飾關鍵字。在create和drop的時候都須要使用public關鍵字。 公有dblink對全部人開放,在該dblink之上建立的同義詞也會隨之對全部人開放。(測試並確認,不過測試是在一個實例多個用戶之間進行) 私有dblink只有建立者能夠訪問,其上的同義詞不能被其餘用戶訪問。需爲用戶建立視圖,並將視圖受權給所需用戶後,用戶纔可訪問該視圖。 另外,不能將帶有dblink的同義詞直接受權給用戶。不然報錯,其等價於: grant select on table1@user1 to user2                           * ERROR at line 1: ORA-02021: DDL operations are not allowed on a remote database 2.建立dblink時,可使用鏈接字符串(與tnsname.ora中的),效率較高。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------- 注意:建立數據庫連接的賬號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登陸到遠程數據庫的賬號必須有CREATE SESSION權限。這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。  兩臺不一樣的數據庫服務器,從一臺數據庫服務器的一個用戶讀取另外一臺數據庫服務器下的某個用戶的數據,這個時候可使用 dblink。  其實dblink和數據庫中的view差很少,建dblink的時候須要知道待讀取數據庫的ip地址,ssid以及數據庫用戶名和密碼。  建立能夠採用兩種方式:  一、已經配置本地服務  create public database  link fwq12 connect to fzept  identified by neu using 'fjept' Create DATABASE LINK 數據庫連接名CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING ‘本地配置的數據的實例名’;  二、未配置本地服務  create database link linkfwq  connect to fzept identified by neu  using '(DESCRIPTION =  (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))  )  (CONNECT_DATA =  (SERVICE_NAME = fjept)  )  )';  host=數據庫的ip地址,service_name=數據庫的ssid。  其實兩種方法配置dblink是差很少的,我我的感受仍是第二種方法比較好,這樣不受本地服務的影響。  數據庫鏈接字符串能夠用NET8 EASY CONFIG或者直接修改 TNSNAMES.ORA裏定義.  數據庫參數global_name=true時要求數據庫連接名稱跟遠端數據庫名稱同樣  數據庫全局名稱能夠用如下命令查出  Select * FROM GLOBAL_NAME;  查詢遠端數據庫裏的表  Select …… FROM 表名@數據庫連接名;  查詢、刪除和插入數據和操做本地的數據庫是同樣的,只不過表名須要寫成「表名@dblink服務器」而已。  附帶說下同義詞建立:  Create SYNONYM 同義詞名FOR 表名;  Create SYNONYM同義詞名FOR 表名@數據庫連接名;  刪除 dblink:Drop PUBLIC DATABASE LINK linkfwq。  若是建立全局dblink,必須使用systm或sys用戶,在database前加public。  oracle dblink解決後臺卻出現鎖  建立是很簡單,可是在使用中後臺卻出現鎖,查看這個鎖的方法能夠去console中看到或者查詢數據庫。其實這個鎖倒  不是最讓人心煩的,而是每次使用 dblink查詢的時候,均會與遠程數據庫建立一個鏈接,dblink應該不會自動釋放這個鏈接  ,若是是大量使用dblink查詢,會形成web 項目的鏈接數不夠,致使系統沒法正常運行。  例子: create database link hr_tables  connect to manbu  identified by "admin"  using 'WALK'  其中hr_tables是遠程數據庫的一個別名  manbu是遠程數據庫的數據庫用戶名  admin爲manbu的密碼  WALK爲數據庫在本地數據庫的SID (具體說是本地數據庫服務器的服務名。須要在本地服務器tnsname.ora上創建一個服務。而不是在客戶端建。) 接着,咱們能夠作一下測試,好比咱們想拿到數據庫的某一張表數據,那咱們能夠在命名行下作以下的測試:  select user_name from mall_user@hr_tables;  每一張表都必須加上@hr_tables字符串,表示該表是dblink所指向的遠程數據庫的表單  或者,你會以爲這樣子很麻煩,那咱們能夠爲mall_user@hr_tables配置一個別名,那就沒有改須麻煩啦。  建立mall_user@hr_tables的同義詞,也即別名:  create synonym mall_user for mall_user@hr_tables;
相關文章
相關標籤/搜索