Oracle建立DBLINK的詳細步驟記錄

來源:互聯網
上載者:User
測試條件:
假設某公司總部在北京,新疆有其下屬的一個分公司。在本次測試中,新疆的電腦為本機電腦,即本要的IP地址為:192.168.1.100

北京的總部有一個集中的資料庫,其SID是SIDBJ,使用者名稱:userbj,密碼:bj123,北京的IP地址是:192.168.1.101。
在本地(新疆)的分公司也有一個資料庫,其SID是SIDXJ,使用者:userxj,密碼:xj123,新疆的IP地址是:192.168.1.100。
要將本地新疆的SIDXJ資料庫中訪問到北京的資料庫SIDBJ中的資料。
也就是說,在sidxj的資料庫中,使用者userxj(192.168.1.100)需要建立DBLINK,以userbj的使用者身份訪問sidBJ(192.168.1.101)中的資料。

測試環境:兩個資料庫均建立在WINXP上,ORACLE的版本均為Oracle817
建立環境時,要注意關閉兩台電腦上的Windows的防火牆,否則,會出現能ping通,但Oracle串連不通的情況。

1、問:如何返回資料庫的GLOBAL_NAME?
執行SELECT * FROM GLOBAL_NAME;
北京的資料庫的GLOBAL_NAME為SIDBJ.US.ORACLE.COM
新疆的資料庫的GLOBAL_NAME為SIDXJ

2、問:如何查看Global_name參數是true還是False?
答:執行:SQL> show parameter global_name;
執行的結果如下:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean TRUE

表示該參數是true.

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

3、問:查看遠端資料徊是否支援進階複製功能。

答:通過查看v$option視圖,如果其中Advanced replication為TRUE,則支援進階複製功能;否則不支援。
執行語句為:select * from v$option;

也可以執行select * from v$option where PARAMETER='Advanced replication'語句,
如何傳回值為True,那麼就是支援,否則就是不支援。在兩個資料庫中都是檢查是否支援才行。

建立步驟:

1、在本地建立一個Oracle的用戶端串連tns_xj_to_bj,用於串連北京的資料庫。

在北京的資料庫中,建立一個表用於測試。
create table USERBJ.BJ_TEST
(
STU_ID NUMBER,
STU_NAME VARCHAR2(100)
)
在其中增加一條記錄:
insert into BJ_TEST (STU_ID, STU_NAME)
values (1, '鐘德榮');

2、建立一個串連tnsxj,用於串連本地的sidxj資料庫,以tnsxj/userxj/xj123登入到PLSQL中。

下面開始建立串連到北京的遠端資料串連DBLink。
create database link SIDBJ.US.ORACLE.COM connect to userbj identified by bj123 using 'tns_xj_to_bj';
其中:SIDBJ.US.ORACLE.COM是遠端資料庫的global_name,userbj是串連SIDBJ的使用者名稱,bj123是userbj的密碼,
tns_xj_to_bj是本地建立的串連到北京的資料庫的服務名。

3、測試連接是否成功:
select * from dual@SIDBJ.US.ORACLE.COM
如果返回結果如下則表示串連成功了。
DUMMY
-----
X

4、在本機資料為中查詢已經建立的遠端連線名:
SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';

OWNER OBJECT_NAME
------------------------------ --------------------------------------------------------------------------------
SYSTEM SIDBJ.US.ORACLE.COM
USERXJ DBLINK_XJ_TO_BJ
USERXJ SIDBJ

5、至此,在新疆的電腦上建立了一個DBLINK,用於串連到北京的資料庫上,
在新疆的資料庫中查詢北京的資料庫中表的資訊:
select * from bj_test@SIDBJ.US.ORACLE.COM
查詢結果:
STU_ID STU_NAME
---------- --------------------------------------------------------------------------------
1 鐘德榮

表示查詢是正常的。

6、關於global_name參數的測試

create database link a connect to userbj identified by bj123 using 'tns_xj_to_bj';
建立了一個DBLINK,執行下面的查詢:
select owner,object_name from dba_objects where object_type='DATABASE LINK';
可以看到已經建立了名為:a的DBLINK。
但執行下面的查詢,檢索遠端資料時,就會出現錯誤。
select * from bj_test@a
原因是因為本機資料庫的global_names的參數值為true,所以,dblink的名稱必須和遠端資料庫的global_names相同。
要修改本機資料庫的global_names參數為false;(注意是修改本機資料庫SIDXJ,通過測試修改過程的參數不行,過程的global_names參數為TRUE還是為FALSE沒有關係)
使用下面的語句修改該參數:
SQL> alter system set global_names=false;

再執行下面的幾步即可查詢出資料:
create database link a connect to userbj identified by bj123 using 'tns_xj_to_bj'; --建立DBLINK

select owner,object_name from dba_objects where object_type='DATABASE LINK';--查詢現有的DBLINK

select * from bj_test@a--查詢遠端資料表

7、下面在SIDXJ中建立預存程序,通過DBLINK檢索遠端資料庫SIDBJ, 預存程序如下:

CREATE OR REPLACE PROCEDURE test_cur
as
strSql1 varchar2(1000);
t_stu_name varchar2(100);
TYPE TCUR IS REF CURSOR;
CUR TCUR;

begin
strSql1:='select stu_name from bj_test@a';
OPEN CUR FOR strSql1;
LOOP
FETCH CUR INTO t_stu_name;
EXIT WHEN CUR%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(t_stu_name);

END LOOP;
CLOSE CUR;
end test_cur;

測試預存程序顯示,輸出了過程資料庫中的STU_NAME的值。

以上指令碼全部在ORACLE817下通過測試。

 原文地址 http://blog.csdn.net/xjzdr
相關文章

聯繫我們

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