程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle建立DBLINK的詳細步驟記錄

Oracle建立DBLINK的詳細步驟記錄

編輯:Oracle數據庫基礎
Oracle建立DBLINK的詳細步驟記錄:

更多文章參見:http://blog.csdn.Net/xjzdr


測試條件:
假設某公司總部在北京,新疆有其下屬的一個分公司。在本次測試中,新疆的計算機為本地計算機,即本要的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 [email protected]
如果返回結果如下則表示連接成功了。
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 [email protected]
查詢結果:
    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下通過測試。

 

 


 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved