項目示例:sql
select sysdate from dual@TO_SLIFESUG.REGRESS.RDBMS.DEV.US.ORACLE.COM;
drop database link TO_SLIFESUG.REGRESS.RDBMS.DEV.US.ORACLE.COM;數據庫
create database link TO_SLIFESUG.REGRESS.RDBMS.DEV.US.ORACLE.COM
connect to SLIFESUG identified by SLIFESUG
using '10.10.164.121/orcl';服務器
ORACLE創建DB-LINK網絡
測試條件 www.2cto.com oracle
兩臺服務器app
遠程:IP:192.168.0.18,SID: usertest,用戶名:usertest,密碼:123456ide
本地:IP: 192.168.8.90,SID: wjn,用戶名:userwjn,密碼:mosquito0測試
參數設置ui
1. 查看數據庫global_namespa
執行select * from global_name;
遠程數據庫18返回: USERTEST.US.ORACLE.COM
本地數據庫90返回: DB_WJN.REGRESS.RDBMS.DEV.US.ORACLE.COM
2. 查看global_name參數
SQL>show parameterglobal_name;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
global_names boolean FALSE
該參數爲TRUE時,本地鏈接的DBLINK的名稱必須和遠程的global_name一致.
3. 查看是否支持高級複製功能
查看v$option視圖, Advanced replication爲true則支持,不然不支持
select * from v$option t wheret.PARAMETER like 'Advanced replication%';
創建方法 www.2cto.com
1.建立dblink的第一種方式,是在本地數據庫tnsnames.ora文件中配置了要遠程訪問的數據庫。
create database link USERTEST_18connect to USERTEST identified by xxxx using 'USERTEST_192.168.0.18';
其中USERTEST_18是你建立的dblink名字,usertest是遠程數據庫的實例名,USERTEST/xxxx是登陸到遠程數據庫的用戶/密碼。而後在本地數據庫中經過dblink訪問遠程數據庫18中dual表,sql語句以下所示
select * from dual@ USERTEST_18;
2.建立dblink的第二種方式,是在本地數據庫tnsnames.ora文件中沒有配置要訪問的遠程數據庫
create public database link USERTEST_18
connect to USERTEST
identified by 123456 using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.18)(PORT = 1521))
)
(CONNECT_DATA =
(SID = usertest)
(SERVER = DEDICATED)
) www.2cto.com
)';
第二種是把第一種配置在tnsnames.ora文件中的信息,直接放在建立dblink語句後面。第一種狀況tnsnames.ora文件中信息以下:
USERTEST_192.168.0.18 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.18)(PORT = 1521))
)
(CONNECT_DATA =
(SID = usertest)
(SERVER = DEDICATED)
)
)
咱們知道,數據庫之間的連接是創建在DATABASE LINK上。那麼如何建立DATABASE Link呢?本文咱們就介紹了這一過程,但願可以對您有所幫助。
Oracle數據庫如何建立DATABASE LINK呢?本文咱們經過一個實例來介紹這一建立過程,接下來就讓咱們來一塊兒瞭解一下這一過程吧。
物理上存放於網絡的多個ORACLE數據庫,邏輯上能夠當作一個單一的大型數據庫,用戶能夠經過網絡對異地數據庫中的數據進行存取,而服務器之間的協同處理對於工做站用戶及應用程序而言是徹底透明的,開發人員無需關心網絡的連接細節、數據在網絡節點中的具體分佈狀況和服務器間的協調工做過程。
數據庫之間的連接創建在DATABASE LINK上。要建立一個DATABASE LINK,必須首先在創建連接的數據庫上設置連接字符串,即配置一個遠程數據庫的本地網絡服務名。
數據庫全局名稱能夠用如下命令查出:
SQL>SELECT * FROM GLOBAL_NAME;
修改能夠用如下語句來修改參數值:
SQL>ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
oracle數據庫之間進行鏈接通信:
建立數據庫連接的語法以下:
[sql] view plaincopyprint?
CREATE [PUBLIC] DATABASE LINK link_name
CONNECT TO username IDENTIFIED BY password
USING 'zytydic'
其中:
zytydic爲本地tnsname.ora中定義的連接串,內容以下:
[sql] view plaincopyprint?
zytydic =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orcl)
)
)
注意:建立數據庫連接的賬號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登陸到遠程數據庫的賬號必須有CREATE SESSION權限。
這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。一個公用數據庫連接對於數據庫中的全部用戶都是可用的,而一個私有連接僅對建立它的用戶可用。由一個用戶給另一個用戶受權私有數據庫連接是不可能的,一個數據庫連接要麼是公用的,要麼是私有的。
建立數據庫連接時,還可使用缺省登陸方式,即不指定遠程數據庫的用戶名和密碼:
[sql] view plaincopyprint?
create public database link test_default_type_dblink
using 'zytydic';
在不指定用戶名和口令的狀況下,ORACLE使用當前的用戶名和口令登陸到遠程數據庫,假如你本地是以emcd用戶登陸的本地的數據庫db_A,那麼建立的DB Link test_default_type_dblink就是以本地的用戶帳戶信息創建的,當要以此DB Link鏈接查看遠程的數據庫db_B的數據信息時,前提必須是db_B上也有一樣的帳戶存在,即db_B上也有帳戶emcd且密碼和db_A上的emcd的密碼也是一致的,不然此DB Link不可用。
USING後面指定的是連接字符串,也就是遠程數據庫的網絡服務名,這個服務名保存在TNSNAMES.ORA文件中,在該文件中定義了協議、主機名、端口和數據庫名。
若是有兩臺數據庫服務器db_A和db_B,db_A下用戶user_a須要用database link訪問到db_B下user_b的數據時,有以下步驟:
(a).首先用戶user_b,這個用戶必需要有select 權限.
(b).在db_A上的tnsnames.ora中須要創建一個鏈接字符串,即上面的zytydic,能夠從db_A鏈接到db_B.
(c).而後在登錄到db_A上創建db link,格式以下:
[sql] view plaincopyprint?
create database link link_A_to_B_name
connect to user_b identified by user_b的password using 'tnsname_AtoB';
tnsname_AtoB就是到tnsname.ora中遠程主機的鏈接字符串。
在我本身的機子上創建的實際的DB Link SQL語句以下:
create database link taowei_to_101
connect to ga_bzk identified by ga_bzk using 'zytydic';
(d).測試是否可以讀取數據.
select * from dual@link_AtoB_name結果爲:DUMMY X表示設置成功
這時候就能夠經過taowei_to_101查看遠程主機上相關的數據信息了:
select * from tbl_bjflb@taowei_to_101;
刪除數據庫連接的語句是:
DROP [PUBLIC] DATABASE LINK taowei_to_101
數據庫連接的引用
通常狀況下引用數據庫連接,能夠直接將其放到調用的表名或視圖名稱後面,中間使用一個@ 做爲分割符:
SELECT * FROM tbl_bjflb@taowei_to_101;
對於常用的數據庫連接,能夠創建一個本地的同義詞,方便使用:
CREATE SYNONYM tbl_bjflb__syn FOR tbl_bjflb@taowei_to_101;
還能夠創建一個本地的遠程視圖,方便使用:
CREATE VIEW tbl_bjflb AS SELECT * FROM tbl_bjflb@taowei_to_101 where… ;
如今本視圖可與本地數據庫中的任何其它視圖同樣對待,也能夠受權給其它用戶,訪問此視圖,但該用戶必須有訪問數據庫連接的權限。
對於另一種狀況,所要訪問的表不在數據庫連接中指定的遠程賬戶下,但該賬戶有訪問該表的權限,那麼咱們在表名前要加上該表的用戶名:
SELECT * FROM emcd.emcd_data_source@taowei_to_101 ;
還能夠創建快照(snapshot)經過dblink實現遠程數據自動傳輸。
查看全部的數據庫連接,進入系統管理員SQL>操做符下,運行命令:
[sql] view plaincopyprint?
SQL>select owner,object_name from dba_objects
where object_type='DATABASE LINK';
關於Oracle數據庫建立DATABASE LINK的知識就介紹到這裏了,但願本次的介紹可以對您有所收穫!