Oracle-DB Link简单使用

当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink。通过dblink,本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。

首先,查看Global_name参数是true还是False。该参数为true时,你在本地建立的DBLINK的名称必须和远程数据库的全局数据库名的Global_name一致才行。

SQL> show parameter global_name;

 

NAME      TYPE     VALUE

------------------------------------ ---------------------- ------------------------------

global_names      boolean     FALSE

 

 

global_name可以在远程数据库上得到:

SQL> select * from global_name;

 

GLOBAL_NAME

--------------------------------------------------------------------------------

ORADB

 

 

修改GLOBAL_NAME的方法:

方法一、在数据库的init.ora文件中将global_names设为true/false。

方法二、语句:ALTER SYSTEM SET GLOBAL_NAMES=TRUE/FALSE scope=both;

其次,创建dblink之前用户必须有创建dblink的权限(注意此处赋予的public database link的权限,如果不加上public那么就是创建私有的dblink):

指定PUBLIC创建对所有用户可见的公共数据库链接。如果省略此子句,则数据库链接是私有的,仅对您可用。

SQL> grant create public database link to test;

 

Grant succeeded.

 

SQL> grant create database link to test;

 

Grant succeeded.

 

直接创建数据库链接时写入配置数据库,客户机上的using中的连接一定要记得重写,只有服务端的链接配置才能在dblink中引用,配置在oracle客户端的tnsnane.ora中的链接配置是不能在dblink中使用的

create  database link my_link

      connect to hh identified by hh

      using '(DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.57.129)(PORT = 1521))

   )

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = oradb)

   )

 )';

 

注意:这里要加上服务是共享模式还是专有模式,否则会出现下面错误提示

ERROR at line 1:ORA-12154: TNS:could not resolve the connect identifier specified

这个service_name是您要链接到的数据库服务端的服务名。

其中mylink 是你创建的dblink名字,是数据库连接串的名字。以后就通过这个名字来进行调用远程数据库的内容。

hh/hh是登录到远程数据库的用户/密码。

 

 

另外一种情况,所要访问的表不在数据库链接中指定的远程帐户下,但该帐户有访问该表的权限,那么我们在表名前要加上该表的用户名(即本机上面的test可以访问远程数据库里面hh用户下面所有的表,但是hh可以访问hhh下面的hhh_test的表,则可以使用下面语句查询)

SQL> select * from hhh.hhh_test@my_link;

 

ID

----------

 1

 

对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:

SQL> create synonym a for test@my_link;

 

Synonym created.

 

SQL> select * from a;

 

ID

----------

 2 

 

查看所有的数据库链接,进入系统管理员账号下,运行命令

SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';

OWNER      OBJECT_NAME

-------------------- --------------------

TEST      MYLINK

TEST      MY_LINK

TEST      M_LINK

 

删除数据库连接

SQL> drop database link mylink;

Database link dropped.

 

关闭dblink连接,关闭前一定要注意session的回收,在应用程序中使用

SQL> commit;

Commit complete.

SQL> alter session close database link my_link;

Session altered.

任何ddl语句都无法在dblink中直接执行。但通过创建存储过程,使得能在dblink中执行ddl语句。 注意需在目标数据库的相应用户下创建存储过程

  

总结:DBLINK配置细节很重要,请重点关注下面几点

1.确定被连接数据库可以连通,监听是好的

2.用户角色与权限 配置下面4项(很重要):

create session,create database link,create public database link

3.客户机上的using中的连接一定要记得重写,只有服务端的链接配置才能在dblink中引用,配置在oracle客户端的tnsnane.ora中的链接配置是不能在dblink中使用的

你可能感兴趣的:(Oracle,日常管理)