1. 程式人生 > >oracle----dblink知識詳解

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就建立完成了,如有錯誤之處還請指出,謝謝各位!!!