Oracle使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn)的實(shí)例代碼
dbLink是簡(jiǎn)稱,全稱是databaselink。database link是定義一個(gè)數(shù)據(jù)庫(kù)到另一個(gè)數(shù)據(jù)庫(kù)的路徑的對(duì)象,database link允許你查詢遠(yuǎn)程表及執(zhí)行遠(yuǎn)程程序。在任何分布式環(huán)境里,database都是必要的。另外要注意的是database link是單向的連接。在創(chuàng)建database link的時(shí)候,Oracle再數(shù)據(jù)字典中保存相關(guān)的database link的信息,在使用database link的時(shí)候,Oracle通過(guò)Oracle Net用用戶預(yù)先定義好的連接信息訪問(wèn)相應(yīng)的遠(yuǎn)程數(shù)據(jù)庫(kù)以完成相應(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
語(yǔ)法:
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ù)庫(kù)鏈接的帳號(hào)必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統(tǒng)權(quán)限,用來(lái)登錄到遠(yuǎn)程數(shù)據(jù)庫(kù)的帳號(hào)必須有CREATE SESSION權(quán)限。這兩種權(quán)限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權(quán)限在DBA中)。一個(gè)公用數(shù)據(jù)庫(kù)鏈接對(duì)于數(shù)據(jù)庫(kù)中的所有用戶都是可用的,而一個(gè)私有鏈接僅對(duì)創(chuàng)建它的用戶可用。由一個(gè)用戶給另外一個(gè)用戶授權(quán)私 有數(shù)據(jù)庫(kù)鏈接是不可能的,一個(gè)數(shù)據(jù)庫(kù)鏈接要么是公用的,要么是私有的。
- link : 當(dāng)source端的參數(shù)(parameter)GLOBAL_NAMES=TRUE時(shí),link名必須與遠(yuǎn)程數(shù)據(jù)庫(kù)的全局?jǐn)?shù)據(jù)庫(kù)名global_name)相同;否則,可以任意命名。
- current_user使用該選項(xiàng)是為了創(chuàng)建global類型的dblink。在分布式體系中存在多個(gè)數(shù)據(jù)庫(kù)的話。如果想要在每一個(gè)數(shù)據(jù)庫(kù)中都可以使用同樣的名字來(lái)訪問(wèn)數(shù)據(jù)庫(kù)a,那在每個(gè)數(shù)據(jù)庫(kù)中都要?jiǎng)?chuàng)建一個(gè)到數(shù)據(jù)庫(kù)a的db_link,太麻煩了。所以有這個(gè)選項(xiàng)的話你只要?jiǎng)?chuàng)建一次。所有的數(shù)據(jù)庫(kù)都可以使用這個(gè)db_link來(lái)訪問(wèn)了。要使用這個(gè)特性,必須有oracle nameserver或者ORACLE目錄服務(wù)器。并且數(shù)據(jù)庫(kù)a的參數(shù)global_names=true.具體我也沒(méi)有創(chuàng)建過(guò),沒(méi)有這個(gè)環(huán)境。
- connectstring:連接字符串,tnsnames.ora中定義遠(yuǎn)程數(shù)據(jù)庫(kù)的連接串,也可以在創(chuàng)建dblink的時(shí)候直接指定。
- username、password:遠(yuǎn)程數(shù)據(jù)庫(kù)的用戶名,口令。如果不指定,則使用當(dāng)前的用戶名和口令登錄到遠(yuǎn)程數(shù)據(jù)庫(kù),當(dāng)創(chuàng)建connected user類型的dblink時(shí),需要如果采用數(shù)據(jù)字典驗(yàn)證,則需要兩邊數(shù)據(jù)庫(kù)的用戶名密碼一致
舉例:創(chuàng)建名稱為dblink821的dbLink, 鏈接訪問(wèn)10.0.192.36數(shù)據(jù)庫(kù)的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>訪問(wèn)鏈接數(shù)據(jù)庫(kù)中的表
select * from BOSS821T.CUSTOMEREN @dblink821
2>通過(guò)dblink復(fù)制表
通過(guò)dblink復(fù)制表性能很高,例如下面的測(cè)試,復(fù)制17W數(shù)據(jù)執(zhí)行時(shí)間約3秒
SQL> select COUNT(*) from BOSS821T.CUSTOMEREN @dblink821T; COUNT(*) ---------- 171736 SQL> create table CUSTOMER821T as select * from BOSS821T.CUSTOMEREN @dblink821T; Table created SQL> 執(zhí)行時(shí)間:3.089秒
6.常見(jiàn)問(wèn)題ORA-02063
如果出現(xiàn)ORA-02063可能是由于11開(kāi)始支持字符大小寫(xiě)問(wèn)題引起的
--ORA-01017: invalid username/password; logon denied --ORA-02063: preceding line from <link_name>
查看數(shù)據(jù)庫(kù)信息
--查看當(dāng)前數(shù)據(jù)庫(kù)的版本 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ù)庫(kù)的版本 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
被訪問(wèn)的數(shù)據(jù)庫(kù)的版本是11g,因此修改dblink,使用雙引號(hào)來(lái)設(shè)置密碼
-- Create database link create database link dblink821T connect to BOSS821T identified by "boss821T" using '10.0.192.36_STARSMS';
以上就是Oracle使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn)的實(shí)例代碼的詳細(xì)內(nèi)容,更多關(guān)于Oracle dblink跨庫(kù)訪問(wèn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
oracle創(chuàng)建刪除用戶示例分享(oracle刪除用戶命令及授權(quán))
這篇文章主要介紹了oracle創(chuàng)建刪除用戶示例還有oracle刪除用戶命令及授權(quán)的使用,需要的朋友可以參考下2014-03-03Oracle 細(xì)粒度審計(jì)(FGA)初步認(rèn)識(shí)
細(xì)粒度審計(jì)(FGA),是在Oracle 9i中引入的,能夠記錄SCN號(hào)和行級(jí)的更改以重建舊的數(shù)據(jù),本文將詳細(xì)介紹,需要的朋友可以參考下2012-12-12Oracle如何實(shí)現(xiàn)like多個(gè)值的查詢
這篇文章主要給大家介紹了關(guān)于Oracle如何實(shí)現(xiàn)like多個(gè)值的查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08Oracle存儲(chǔ)過(guò)程、包、方法使用總結(jié)(推薦)
這篇文章主要介紹了Oracle存儲(chǔ)過(guò)程、包、方法使用總結(jié)(推薦),需要的朋友可以參考下2017-05-05oracle錯(cuò)誤ORA-00054資源正忙解決辦法
ORA-00054是Oracle數(shù)據(jù)庫(kù)中的一個(gè)常見(jiàn)錯(cuò)誤,表示用戶試圖在正在被鎖定的資源上執(zhí)行不允許的操作,導(dǎo)致資源處于忙碌狀態(tài),下面這篇文章主要給大家介紹了關(guān)于oracle錯(cuò)誤ORA-00054資源正忙的解決辦法,需要的朋友可以參考下2024-01-01Oracle數(shù)據(jù)庫(kù)中l(wèi)ead和lag函數(shù)用法示例
lag與lead函數(shù)是跟偏移量相關(guān)的兩個(gè)分析函數(shù),通過(guò)這兩個(gè)函數(shù)可以在一次查詢中取出同一字段的前N行的數(shù)據(jù)(lag)和后N行的數(shù)據(jù)(lead)作為獨(dú)立的列,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)中l(wèi)ead和lag函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2024-06-06Oracle存儲(chǔ)過(guò)程游標(biāo)用法分析
這篇文章主要介紹了Oracle存儲(chǔ)過(guò)程游標(biāo)用法,結(jié)合實(shí)例形式分析了游標(biāo)的使用步驟與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06