標籤:cts plsql 相同 log 地址 insert 測試環境 href 計算
測試條件:
假設某公司總部在北京,新疆有其下屬的一個分公司。在本次測試中,新疆的電腦為本機電腦,即本要的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 [email protected]
原因是因為本機資料庫的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 [email protected]--查詢遠端資料表
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 [email protected]‘;
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的值。
Oracle建立DBLINK的詳細步驟記錄