oracle 資料庫鏈路

來源:互聯網
上載者:User

標籤:深圳   for   許可權   意義   配置   nec   更改   添加   目錄   

 Oracle資料庫鏈路的建立和使用

一、資料庫鏈路的建立:
 

1、資料庫鏈路的建立文法一般是:CREATE DATABASE LINK[db_link_name] CONNECT TO

[user_name] IDENTIFIED BY [password] USING ‘[tns_name]‘;

其中:

[DB_LINK_NAME]:是所要串連的資料庫的服務名,也就是該資料庫的真實名稱(通常就是SID)。

[USRE_NAME]:是所要串連的使用者名稱稱。

[PASSWORD]:是所要串連的使用者的密碼。

[TNS_NAME]:是所要串連的資料庫的服務命名,也就是在本機上建立的NET8服務命名。

2、當使用目前使用者做為串連者時,文法可以是:CREATE DATABASE LINK[db_link_name] CONNECT TO CURRENT_USER USING ‘[tns_name]‘ (某些情況下這種方法建立的資料庫鏈路都未處於活動狀態,不知道是不是文法有誤,暫不推薦使用)。

3、當使用已連線的使用者做為串連者時,文法可以是:CREATE DATABASE LINK[db_link_name]

USING ‘[tns_name]‘ 。

4、要建立公用的資料庫鏈路文法可以是:只要在CREATE後加PUBLIC關鍵字就可以了。

5、假如你在init.ora檔案裡的global_names = true只能用上面的方法,如果global_names =false,[DB_LINK_NAME]不一定要是資料庫的真實名稱,可以是一個隨意的名字。也就是說,當global_names = true時,資料庫的每一個使用者只能有一個資料庫鏈路,而當global_names = false時,每一個使用者都可以建立N多個鏈路,但一般情況下是沒有意義的。

 

二、資料庫鏈路的使用:

1、資料庫鏈路的主要用途就是實現對遠端資料庫的訪問,你可以通過資料庫鏈路直接對遠端資料庫

的表進行讀寫,也可以在本地建立遠端資料庫的視圖和同意詞,另外在進行雙機熱備份時也要用到資料庫鏈路。

2、直接存取:SELECT * FROM[user_name].[table_name]@[db_link_name];INSERT,UPDATE,DELETE等也同樣適用。

3、建立同義字:CREATE SYNONYM[user_name].[synonym_name] FOR [user_name].[table_name]@

[db_link_name] ; 視圖也是一個道理。

4、由於雙機熱備是另一個複雜的問題,本文暫不贅述。如果想在兩個資料庫間實現幾個表的同步,做一個雙機太複雜,可以考慮用觸發器來解決,在觸發器中用以上方法引用遠端資料表,對其進行插入,刪除也可以做到同步。

 

 資料庫之間的連結建立在DATABASE LINK上。要建立一個DB LINK,必須先在每個資料庫伺服器上設定連結字串。

1、連結字串即服務名,首先在本地配置一個服務名,地址指向遠端資料庫地址,服務名取為將來你要使用的資料庫鏈名:tobeijing

2、建立資料庫連結,

進入系統管理員SQL>操作符下,運行命令:

SQL>create public database link beijing connect to scott identified bytiger using ‘tobeijing‘;

 則建立了一個以scott使用者和北京資料庫的連結beijing,我們可以查詢北京的scott資料:

 SQL>select * from [email protected];

 這樣就可以把深圳和北京scott使用者的資料做成一個整體來處理。

 

3、建立同義字,為了使有關分布式操作更透明,ORACLE資料庫裡有同義字的對象synonym

 SQL>create synonym bjscottemp for [email protected];

 於是就可以用bjscottemp來替代帶@符號的分布式連結操作[email protected]。

 

4、查看所有的資料庫連結,進入系統管理員SQL>操作符下,運行命令:

 SQL>select owner,object_name from dba_objects whereobject_type=‘DATABASE LINK‘;


如果使用資料連線出現錯誤ORA-02085

SQL> SHOW PARAMETER GLOBAL_NAMES

global_names boolean

TRUE

SQL> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;


使用資料連線可以很方便的引用其它資料庫的資料,但是設定不當可能遇到ORA-02085錯誤。如果被串連對方的GLOBAL_NAMES參數設定成了TRUE,那麼要求資料庫連接與對方執行個體名有相同的名稱。這樣就可以通過下面3中的任意一種方法來解決:

1.修改對方的GLOBAL_NAMES參數為FALSE
2.將對方的GLOBAL_NAME設定成與資料庫連接相同的名稱

3.將資料庫連接刪掉重新建立成與對方執行個體名相同的資料庫連接。下面是測試結果:

SQL> CREATE PUBLIC DATABASE LINK "MASTER.COM" USING ‘ORA9I‘;

資料庫連結已建立。

 

select * from v$parameter where name = ‘global_names‘;

 SQL> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;

 

或者修改D:\Oracle\admin\einfo\pfile\init.ora檔案中global_names = false,重啟資料庫。

SQL> SELECT * FROM [email protected];

X

SQL> ALTER SYSTEM SET GLOBAL_NAMES=TRUE;

系統已更改。

SQL> SELECT * FROM [email protected];

SELECT * FROM [email protected]

ERROR 位於第 1 行:

ORA-02085: 資料庫連結MASTER.COM與ORA9I相連結

SQL> ALTER DATABASE RENAME GLOBAL_NAME TO MASTER.COM;

資料庫已更改。

SQL> SELECT * FROM [email protected];


createuser GUEST_B identified by guest_b_psw default tablespace TABLE_SPACE temporarytablespace PCS_TEMP;

grantconnect to GUEST_B;

 A使用管理員帳號為GUEST_B使用者授權兩個表,以下授以完全控制兩個表的許可權。

代碼如下:

grantall on TABLE_A1 to guest_b;

grantall on TABLE_A2 to guest_b;

 A在NetManager中建立到B資料庫伺服器的NetServiceName,也可以修改在Oracle的安裝目錄下的檔案\Oracle\network\admin\tnsnames.ora,在裡面添加一個NetServiceName,如“TO_B”。

 建立資料鏈路名為“GOTO_B”,要使用第四步建立的NetServiceName: TO_B。這裡假設了B同樣建立了一個帳號guest_a/guest_a提供給A使用。

 CREATE PUBLIC DATABASE LINK " GOTO_B"

 CONNECT TO "GUEST_A" IDENTIFIED BY"guest_a"

 USING ‘ TO_B ‘ ;

 另提供一個範例,這個例子建立可以不用配置NetServiceName就可以直接建立:

 

--Drop existing database link

dropdatabase link TOCCIC;

--Create database link

createdatabase link TOCCIC

   connect to ZTRY identified by ZTRY

   using ‘(DESCRIPTION =

     (ADDRESS_LIST =

       (ADDRESS = (PROTOCOL = TCP)(HOST =fengwenwei)(PORT = 1521))

     )

     (CONNECT_DATA =

       (SID = ZTRY)

     )

   )‘;

 

 小結

1.       在建立鏈路時,如果是使用產生鏈路代碼測試連接不成功的話,請使用Enterprise Manager Console來建立。

2.       在注意兩邊的帳號使用對應,不要搞混。

3.       注意:Oracle中的SERVICE_NAME可以對應多個SID。

4.       注意如果鏈路建立不成功,請檢查Oracle中的參數配置是否正確,如:global_names需要設定為True。Oracle9i安裝時預設為False。

oracle 資料庫鏈路

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.