oracle----dblink知識詳解
一. dblink定義
dblink(Database Link)資料庫連結顧名思義就是資料庫的連結,當我們要跨本地資料庫,訪問另外一個數據庫表中的資料時,本地資料庫中就必須要建立遠端資料庫的dblink,通過dblink本地資料庫可以像訪問本地資料庫一樣訪問遠端資料庫表中的資料。簡而言之就是在當前資料庫中訪問另一個數據庫中的表中的資料。
二. 簡述dblink的建立方式
① 通過pl/sql developer圖形化建立
② 通過sql語句建立
create database link link名稱
connect to 對方資料庫使用者名稱 identified by 對方資料庫使用者密碼
using 'ORCL'
備註:ORCL是資料庫的名稱,一般在C:\DevSuiteHome1\network\ADMIN下的tnsnames.ora中進行配置
③ 通過sql語句建立(和②的方式差不多,但是這種方法比較好,避免了本地配置)
create database link link名稱
connect to 對方資料庫使用者名稱 identified by 對方資料庫使用者密碼
using '(DESCRIPTION =(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)(HOST = 要連線的資料庫所在伺服器的IP地址)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME = 要連線的資料庫的在本地的服務名(即要連線的資料庫的SID))))';
備註:using後面的內容就是C:\DevSuiteHome1\network\ADMIN下tnsnames.ora中的內容,取得是裡面的具體內容,而不是用的別名,這種方式比上面一種好,不需在本地的tnsnames.ora檔案中進行配置,直接將資料庫放入,靈活性較強。
三. 詳述賦予許可權
① 先確定使用者是否有建立dblink的許可權:
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');
我的apps使用者下的許可權:
解釋一下:
CREATE PUBLIC DATABASE LINK:表示所建立的dblink所有使用者都可以使用
CREATE DATABASE LINK:表示所建立的dblink只能是建立者能使用,別的使用者不可以使用
DROP PUBLIC DATABASE LINK : 表示所建立的dblink所用使用者都可以刪除
② 如果指定使用者沒有上面的幾個許可權,需要通過sys使用者(這個充當管理員角色,有很大許可權)賦予許可權,你需要登陸sys使用者,並在sys使用者下執行以下語句:
grant CREATE PUBLIC DATABASE LINK , DROP PUBLIC DATABASE LINK to apps;
四. 一些常規操作
1. 連線成功後從所連線的資料庫中取數的方法
select * from table_name(表名)@dblink(dblink名);
備註:只需在表名的後面加上"@DBLINK名字"即可。
2. 在當前資料庫下檢視所有的DBLINK的方法
select * from dba_db_links;
3. 刪除當前資料庫下的一個指定的DBLINK的方法
① 如果建立的是一個public的DBLINK,刪除時需要用
drop public database link dblink(dblink名)
② 如果建立的是一個private的DBLINK,刪除時需要用
drop database link dblink(dblink名)
4. 注意點
建立資料庫連結的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統許可權;
用來登入到遠端資料庫的帳號必須有CREATE SESSION許可權
五. 具體的操作流程
1.要求兩個賬戶
apps使用者,密碼:apps
core使用者,密碼:1234
2.使用者apps(已有使用者),建立core(需在sys使用者中建立)使用者
create user core identified by 1234
3.賦予core登陸許可權(需在sys使用者中賦許可權)
grant create session to core
4. apps使用者中檢視是否有建立dblink的許可權
select * from user_sys_privs where privilege like upper('%DATABASE LINK%') ;
得到如下許可權:
5. 先在core表中建立一個表,並插入資料
建立student表:
create table student
( STUDENT_NO VARCHAR2(10) not null,
STUDENT_NAME VARCHAR2(20),
STUDENT_AGE NUMBER(2),
STUDENT_GENDER VARCHAR2(5));
student表中插入資料:
insert into student values ('s001','張三',23,'男');
insert into student NT values ('s002','李四',23,'男');
insert into student values ('s003','吳鵬',25,'男');
insert into student values ('s004','琴沁',20,'女');
6. 檢視core使用者中的student表
7. 在apps中建立dblink並執行
create public database link link2
connect to core identified by "1234"
using '(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=xxx.xxx.com)(PORT=1541))
(CONNECT_DATA=
(SERVICE_NAME=dedicated)
(INSTANCE_NAME=UAT)))'
8.在apps使用者中檢視core使用者中的student表
Select * from [email protected]
可以看到core中student的表
至此dblink就建立完成了,如有錯誤之處還請指出,謝謝各位!!!