Oracle使用dblink實現(xiàn)跨庫訪問的實例代碼

dbLink是簡稱,全稱是databaselink。database link是定義一個數(shù)據(jù)庫到另一個數(shù)據(jù)庫的路徑的對象,database link允許你查詢遠程表及執(zhí)行遠程程序。在任何分布式環(huán)境里,database都是必要的。另外要注意的是database link是單向的連接。在創(chuàng)建database link的時候,Oracle再數(shù)據(jù)字典中保存相關(guān)的database link的信息,在使用database link的時候,Oracle通過Oracle Net用用戶預(yù)先定義好的連接信息訪問相應(yīng)的遠程數(shù)據(jù)庫以完成相應(yīng)的工作。
1.賦值權(quán)限
例如為用戶BOSS823賦值link相關(guān)的權(quán)限
grant create public database link,create database link to BOSS823;
2.創(chuàng)建dblink
語法:
CREATE [SHARED] [PUBLIC] database link link_name [CONNECT TO [user] [current_user] IDENTIFIED BY [password] [AUTHENTICATED BY user IDENTIFIED BY password] [USING 'connect_string']
- 權(quán)限:創(chuàng)建數(shù)據(jù)庫鏈接的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統(tǒng)權(quán)限,用來登錄到遠程數(shù)據(jù)庫的帳號必須有CREATE SESSION權(quán)限。這兩種權(quán)限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權(quán)限在DBA中)。一個公用數(shù)據(jù)庫鏈接對于數(shù)據(jù)庫中的所有用戶都是可用的,而一個私有鏈接僅對創(chuàng)建它的用戶可用。由一個用戶給另外一個用戶授權(quán)私 有數(shù)據(jù)庫鏈接是不可能的,一個數(shù)據(jù)庫鏈接要么是公用的,要么是私有的。
- link : 當(dāng)source端的參數(shù)(parameter)GLOBAL_NAMES=TRUE時,link名必須與遠程數(shù)據(jù)庫的全局?jǐn)?shù)據(jù)庫名global_name)相同;否則,可以任意命名。
- current_user使用該選項是為了創(chuàng)建global類型的dblink。在分布式體系中存在多個數(shù)據(jù)庫的話。如果想要在每一個數(shù)據(jù)庫中都可以使用同樣的名字來訪問數(shù)據(jù)庫a,那在每個數(shù)據(jù)庫中都要創(chuàng)建一個到數(shù)據(jù)庫a的db_link,太麻煩了。所以有這個選項的話你只要創(chuàng)建一次。所有的數(shù)據(jù)庫都可以使用這個db_link來訪問了。要使用這個特性,必須有oracle nameserver或者ORACLE目錄服務(wù)器。并且數(shù)據(jù)庫a的參數(shù)global_names=true.具體我也沒有創(chuàng)建過,沒有這個環(huán)境。
- connectstring:連接字符串,tnsnames.ora中定義遠程數(shù)據(jù)庫的連接串,也可以在創(chuàng)建dblink的時候直接指定。
- username、password:遠程數(shù)據(jù)庫的用戶名,口令。如果不指定,則使用當(dāng)前的用戶名和口令登錄到遠程數(shù)據(jù)庫,當(dāng)創(chuàng)建connected user類型的dblink時,需要如果采用數(shù)據(jù)字典驗證,則需要兩邊數(shù)據(jù)庫的用戶名密碼一致
舉例:創(chuàng)建名稱為dblink821的dbLink, 鏈接訪問10.0.192.36數(shù)據(jù)庫的BOSS821T用戶
create database link dblink821 connect to BOSS821T identified by BOSS821 using '10.0.192.36_STARSMS';
或者使用圖形界面創(chuàng)建

3.查詢dblink
SQL> select * from dba_db_links; OWNER DB_LINK USERNAME HOST CREATED ------------------------------ -------------------------------------------------------------------------------- ------------------------------ -------------------------------------------------------------------------------- ----------- BOSS823 DBLINK821.REGRESS.RDBMS.DEV.US.ORACLE.COM BOSS821T 10.0.192.36_STARSMS 2024/3/6 17 SQL>
4.刪除dblink
DROP database link link_name;
5.使用dblink
1>訪問鏈接數(shù)據(jù)庫中的表
select * from BOSS821T.CUSTOMEREN @dblink821
2>通過dblink復(fù)制表
通過dblink復(fù)制表性能很高,例如下面的測試,復(fù)制17W數(shù)據(jù)執(zhí)行時間約3秒
SQL> select COUNT(*) from BOSS821T.CUSTOMEREN @dblink821T;
COUNT(*)
----------
171736
SQL> create table CUSTOMER821T as select * from BOSS821T.CUSTOMEREN @dblink821T;
Table created
SQL>
執(zhí)行時間:3.089秒6.常見問題ORA-02063
如果出現(xiàn)ORA-02063可能是由于11開始支持字符大小寫問題引起的
--ORA-01017: invalid username/password; logon denied --ORA-02063: preceding line from <link_name>
查看數(shù)據(jù)庫信息
--查看當(dāng)前數(shù)據(jù)庫的版本 SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod PL/SQL Release 10.2.0.3.0 - Production CORE 10.2.0.3.0 Production TNS for 32-bit Windows: Version 10.2.0.3.0 - Production NLSRTL Version 10.2.0.3.0 - Production --查看鏈接到數(shù)據(jù)庫的版本 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production
被訪問的數(shù)據(jù)庫的版本是11g,因此修改dblink,使用雙引號來設(shè)置密碼
-- Create database link create database link dblink821T connect to BOSS821T identified by "boss821T" using '10.0.192.36_STARSMS';
以上就是Oracle使用dblink實現(xiàn)跨庫訪問的實例代碼的詳細內(nèi)容,更多關(guān)于Oracle dblink跨庫訪問的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
有關(guān)Oracle數(shù)據(jù)庫的備份情況
有關(guān)Oracle數(shù)據(jù)庫的備份情況...2007-03-03
Oracle數(shù)據(jù)庫恢復(fù)教程之resetlogs操作
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫恢復(fù)教程之resetlogs操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Oracle數(shù)據(jù)庫具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
dbeaver無法連接Oracle報錯:?ORA-17800、ORA-12514解決辦法
ORA-12170是Oracle數(shù)據(jù)庫常見的網(wǎng)絡(luò)連接錯誤之一,通常表示客戶端無法在指定的時間內(nèi)完成與服務(wù)器的連接,這篇文章主要介紹了dbeaver無法連接Oracle報錯:?ORA-17800、ORA-12514的解決辦法,需要的朋友可以參考下2025-11-11
Oracle數(shù)據(jù)庫的啟動實現(xiàn)過程
Oracle數(shù)據(jù)庫啟動分nomount、mount、open三階段,各階段需不同文件并執(zhí)行特定操作,停庫有正常、事務(wù)級、立即、強制四種方式,影響數(shù)據(jù)庫狀態(tài)及數(shù)據(jù)一致性2025-08-08
Oracle Max函數(shù)使用中出現(xiàn)的問題
在Oracle Max函數(shù)使用中,會出現(xiàn)一些問題,本文將介紹解決方法,需要的朋友可以了解下2012-11-11

