測試條件:
假設某公司總部在北京,新疆有其下屬的一個分公司。在本次測試中,新疆的計算機爲本地計算機,即本要的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.
也可以通過查看v$option視圖,如果其中Advanced replication爲TRUE,則支持高級複製功能;否則不支持。
執行語句爲:select * from v$option;
3、問:如何檢查Oracle的版本是否支持同步功能?
答:執行select * from v$option where PARAMETER='Advanced replication'語句,
如何返回值爲True,那麼就是支持,否則就是不支持。在兩個數據庫中都是檢查是否支持才行。
建立步驟:
1、在本地建立一個Oracle的客戶端連接tns_xj_to_bj,用於連接北京的數據庫。
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,用於連接到北京的數據庫上,
在北京的數據庫中,建立一個表用於測試。
create table USERBJ.BJ_TEST
(
STU_ID NUMBER,
STU_NAME VARCHAR2(100)
)
在其中增加一條記錄:
insert into BJ_TEST (STU_ID, STU_NAME)
values (1, '鍾德榮');
在新疆的數據庫中查詢北京的數據庫中表的信息:
select * from [email protected]
查詢結果:
STU_ID STU_NAME
---------- --------------------------------------------------------------------------------
1 鍾德榮
表示查詢是正常的。
說明:該查詢是用
以上腳本全部通過測試。
以上內容轉自:http://hi.baidu.com/llscompazz/blog/item/f3c6cbee85c376202cf5341c.html
——————————————————————————————————————————————————————
下面再補充三點:
1、 創建DB_Link時,"tns_xj_to_bj"是指服務器端tnsnames.ora文件中所定義的環境名,但在企業中,並沒有幾個人有權限查看這個文件中的內容。
解決辦法:將‘tns_xj_to_bj’改寫成客戶端tnsnames.ora文件中對應的實際連接串。如:
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = test) ) ) |
注意:此處“(SERVER = DEDICATED)”可有可無,並沒什麼影響。
2、查看所有DBLink可採用以下兩種方式
SQL1:select owner,object_name from dba_objects where object_type='DATABASE LINK';
SQL2:select * from all_db_links;
但唵更偏向用SLQ2。No Reason!呵呵!
3、刪除DB_Link
drop database link STAGEING.REGRESS.RDBMS.DEV.US.ORACLE.COM;
其中database不能更改,STAGEING.REGRESS.RDBMS.DEV.US.ORACLE.COM爲你創建的DB_Link值(採用SQL2),當然需要用創建該DB_Link的用戶登錄才能成功刪除!
通過SHOW PARAMETER GLOBAL_NAME,可以查看到其值是FALSE或者TRUE。
一)對於GLOBAL_NAME=FALSE的情況,則DBLINK的名稱可以自定義,相關的過程如下:
實現在本地數據庫中連接遠端數據庫服務器:
- 在NET MANAGER中建立相關遠端服務連接。
-
執行如下的SQL腳本,創建連接:
create database link link2server516 connect to fwms_develop identified by fwms_develop using '5_161_ORADB10'; - 通過“SELECT * from pub_user@link2server516;”進行測試,結果OK
- 通過創建同義詞的方式簡化“CREATE SYNONYM syn_user FOR pub_user@link2server516;”,使用方式爲“SELECT * from syn_user;”
- 通過創建本地視圖的方式簡化“CREATE VIEW V_USER AS SELECT * FROM pub_user@link2server516;”,使用方式爲“SELECT * from V_USER;”
- 在JAVA應用程序上,測試也是成功的。
實現在遠程服務器上遠程dblink到本機數據庫:
-
在本地數據庫上,創建連接:
create database link link2local
connect to system identified by orcl
using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.22.117)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)'; - 通過執行“SELECT * from tbl_user@LINK2LOCAL;”進行測試,結果OK
- 通過執行“CREATE VIEW V_USER AS SELECT * FROM tbl_user@LINK2LOCAL;”測試,結果也OK
- 通過JAVA應用程序測試也是成功的
二)對於GLOBAL_NAME = TRUE的情況,數據庫鏈接(DATABASE LINK)的名字必須和數據庫的名字相同:
- 執行“ALTER SYSTEM SET GLOBAL_NAME=TRUE;”,結果報錯“ORA-02065: illegal option for ALTER SYSTEM”
- 執行“ALTER SYSTEM SET GLOBAL_NAMES=TRUE;”,結果OK,也即修改參數的語句應該是多一個S
- 登錄遠端數據庫,通過執行“SELECT * FROM GLOBAL_NAME;”得到其數據庫全名爲“ORADB10.REGRESS.RDBMS.DEV.US.ORACLE.COM”
- 用原方式“create database link link2server516 connect to fwms_develop identified by fwms_develop using '5_161_ORADB10';”創建過程不會出錯,但執行“SELECT * from pub_user@link2server516;”的時候,就會出現“ORA-02085: database link LINK2SERVER516 connects to ORADB10.REGRESS.RDBMS.DEV.US.ORACLE.COM”的錯誤了
- 採用“create database link ORADB10.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to fwms_develop identified by fwms_develop using '5_161_ORADB10';”語句創建鏈接,執行“SELECT * from [email protected];”後,結果OK