Oracle dblink配置
一. dBlink 簡述
dblink(Database Link)數據庫鏈接顧名思義就是數據庫的鏈接,就像電話線一樣,是一個通道,當我們要跨本地數據庫,訪問另外一個數據庫表中的數據時,本地數據庫中就必須要創建遠程數據庫的dblink,通過dblink本地數據庫可以像訪問本地數據庫一樣訪問遠程數據庫表中的數據。
二. 創建dblink
創建dblink一般有兩種方式,不過在創建dblink之前用戶必須有創建dblink的權限。想知道有關dblink的權限,以sys用戶登錄到本地數據庫:
1 select * from user_sys_privs t 2 where t.privilege like upper('%link%');
查詢結果集 :
可以看出在數據庫中dblink有三種權限:
1.CREATE DATABASE LINK(所創建的dblink只能是創建者能使用,別的用戶使用不了) ,
2.CREATE PUBLIC DATABASE LINK(public表示所創建的dblink所有用戶都可以使用),
3.DROP PUBLIC DATABASE LINK。(刪除dblink)
在sys用戶下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASELINK權限授予給你的用戶:
1 grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
然後以scott用戶登錄本地數據庫
2.1 已經配置本地服務
1 create public database link link_name 2 connect to username identified by password 3 using 'connect_string';
注:link_name是連接名字,可以自定義;
username是登陸數據庫的用戶名;
password是登陸數據庫的用戶密碼;
connect_string是數據庫連接字符串。
數據庫連接字符串是當前客戶端數據庫中TNSNAMES.ORA文件裏定義的別名名稱.可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裏定義.
2.2 直接建立鏈接
1 create database link link_name 2 connect to username identified by password 3 using ' (DESCRIPTION = 4 (ADDRESS_LIST = 5 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.13.178)(PORT = 1521)) 6 ) 7 (CONNECT_DATA = 8 (SERVICE_NAME = rzzqnew) 9 ) 10 )';
注:host=數據庫的ip地址;
service_name=數據庫的ssid。
2.3 兩種方法比較
其實兩種方法配置dblink是差不多的,第二種方法比較不受本地服務的影響。
注意: 假如創建全局dblink,則必須使用systm或sys用戶,在database前加public。
三. dblink常用命令
3.1 dblink查詢
查看所有的數據庫鏈接,進入系統管理員SQL>操作符下,運行命令:
1 SQL>select owner,object_name from dba_objects 2 where object_type='DATABASE LINK'; 3 或者 4 select * from dba_db_links;
3.2 dblink刪除
1 DROP PUBLIC DATABASE LINK link_name;
3.3 dblink使用
SELECT……FROM表名@數據庫鏈接名;
查詢、刪除和插入數據和操作本地的數據庫是一樣的,只不過表名需要寫成“表名@dblink服務器”而已。
四. 配置實例
4.1 機器準備
Machine 1:
Ip : 10.10.13.178
ORACLE: rzzqnew
Machine 2:
Ip :10.10.13.35
ORACLE:headdb
4.2 創建db link
登陸headdb數據庫,賬號kingstar 密碼kingstar
1 create database link dblinktest 2 connect to kingstar identified by kingstar 3 using ' (DESCRIPTION = 4 (ADDRESS_LIST = 5 (ADDRESS = (PROTOCOL = TCP) (HOST = 10.10.13.178) 6 (PORT = 1521)) 7 ) 8 (CONNECT_DATA = 9 (SERVICE_NAME = rzzqnew) 10 ) 11 ) ';
注意:1. 創建dblink時候,主要看本地的global_name 是否爲true,如果本地的global_name =true,那麼你創建的dblink必須和遠端數據 庫的global_name 一樣,否則創建了dblink也不能查到數據;
2. 上面這段代碼,如果打錯,使用dblink時會報錯。
這裏我們創建的dblink 名字是dblinktest,與其不一樣,所以可以做下面修改。
1 alter system set global_names=false;
4.3 使用dblink
執行:
1 select * from dual@dblinktest;
結果如下:
通過這種方法即可實現在headdb數據庫上使用rzzqnew數據庫下的內容。
注:其實兩種方法配置dblink是差不多的,第二種方法比較不受本地服務的影響;
假如創建全局dblink,則必須使用systm或sys用戶,在database前加public。