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用用戶預先定義好的連接信息訪問相應的遠程數(shù)據(jù)庫以完成相應的工作。
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 : 當source端的參數(shù)(parameter)GLOBAL_NAMES=TRUE時,link名必須與遠程數(shù)據(jù)庫的全局數(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目錄服務器。并且數(shù)據(jù)庫a的參數(shù)global_names=true.具體我也沒有創(chuàng)建過,沒有這個環(huán)境。
- connectstring:連接字符串,tnsnames.ora中定義遠程數(shù)據(jù)庫的連接串,也可以在創(chuàng)建dblink的時候直接指定。
- username、password:遠程數(shù)據(jù)庫的用戶名,口令。如果不指定,則使用當前的用戶名和口令登錄到遠程數(shù)據(jù)庫,當創(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復制表
通過dblink復制表性能很高,例如下面的測試,復制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ù)庫信息
--查看當前數(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,使用雙引號來設置密碼
-- 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)文章
oracle創(chuàng)建刪除用戶示例分享(oracle刪除用戶命令及授權(quán))
這篇文章主要介紹了oracle創(chuàng)建刪除用戶示例還有oracle刪除用戶命令及授權(quán)的使用,需要的朋友可以參考下2014-03-03Oracle數(shù)據(jù)庫中l(wèi)ead和lag函數(shù)用法示例
lag與lead函數(shù)是跟偏移量相關(guān)的兩個分析函數(shù),通過這兩個函數(shù)可以在一次查詢中取出同一字段的前N行的數(shù)據(jù)(lag)和后N行的數(shù)據(jù)(lead)作為獨立的列,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中l(wèi)ead和lag函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2024-06-06