Oracle DBLINK

来源:互联网 发布:js去掉html标签样式 编辑:程序博客网 时间:2024/06/08 12:50
  1. 准备
select name ,value from v$parameter t where t.NAME = 'global_names';select * from global_name;show parameter global_names;NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------global_names                         boolean     TRUE

2.创建DBLINK
– 在本地DB 创建dblink , 去连target DB
a.

CREATE DATABASE LINK dblink_name CONNECT TO userid IDENTIFIED BY pwdUSING 'target_DB_connectString';

b.

 create database link dblink_c  connect to userid identified by pwd  using '(DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = target_ip)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = SID)    )  )';
权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE   LINK的系统权限,用来登录到远程数据库的帐号必须有CREATESESSION权限。这两种权限都包含在CONNECT角色中(CREATE    PUBLIC DATABASE   LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。       link :     当GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。       connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串。       username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。

2.检验DBLINK

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

3.查询

 select * from table@dblink_c; 

4.删除

DROP  PUBLIC  DATABASE  **LINK** dblink_c ;

5.报错-1

 ORA-12541: TNS:no listener12541. 00000 -  "TNS:no listener"*Cause:    The connection request could not be completed because the listener           is not running.*Action:   Ensure that the supplied destination address matches one of           the addresses used by the listener - compare the TNSNAMES.ORA entry with           the appropriate LISTENER.ORA file (or TNSNAV.ORA if the connection is to           go by way of an Interchange). Start the listener on the remote machine. Troubleshooting :  创建时要以方法**b** 创建 可解决;

报错 -2 : 当执行 select * from t1@to_test ;

ORA-02085: database link to_test connects to ORA11G.LOCALDOMAIN02085. 00000 -  "database link %s connects to %s"*Cause:    a database link connected to a database with a different name.           The connection is rejected.*Action:   create a database link with the same name as the database it           connects to, or set global_names=false.

如果本地数据的 global_names 结果为 true ,

select name ,value from v$parameter t where t.NAME = 'global_names';

则dblink的的名称必须和本地数据库一致.

a) .可以通过下面的语句查询全局数据库名称
SELECT * FROM GLOBAL_NAME;

b). 也可以修改全局数据库名称为false解决.

alter system set global_names=false;

7.几点注意:
在使用中后台却出现锁,每次使用dblink查询的时候,均会与远程数据库创建一个连接,dblink 应该不会自动释放这个连接,如果是大量使用 dblink 查询,会造成 web 项目的连接数不够,导致系统无法正常运行,导致系统无正常运行。

0 0
原创粉丝点击