【oracle】dblink创建

目的:oracle中跨数据库查询
      两台数据库服务器db_A(本地)和db_B(远程192.168.1.100),db_A下用户user_a 需要访问到db_B下user_b的数据

解决:查询得知使用dblink(即database link  数据库链)

实现过程:

1、确定用户user_a有没有创建 dblink 的权限:

 

 

      select * from user_sys_privs where privilege like upper('%DATABASE LINK%');    

2、如果没有,以sys用户登录到本地数据库 给用户user_a赋权:

     grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to user_a;  

注:
dblink有三种权限:
CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了)
CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用)
DROP PUBLIC DATABASE LINK

3、以用户user_a登录本地数据库,创建dblink

 

  1. create public  database link dblink1    
  2.   connect to user_b identified by user_bpass  
  3.   using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';    

注:
当数据库参数global_name=false时,就不要求数据库链接名称跟远端数据库名称一样。
数据库全局名称可以用以下命令查出:

      SELECT * FROM GLOBAL_NAME;  

修改可以用以下语句来修改参数值:

  1. ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;  

 

4、创建完成,引用

-- 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。  
例:

      select * from user_bTablename@dblink1 ;  

 

一般情况下引用数据库链接,可以直接将其放到调用的表名或视图名称后面,中间使用一个 @ 作为分割符:

 

5、删除 DBLink

     drop  public database link dblink1;    

 

6、创建和删除同义词

   对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用
    create or replace synonym 同义词名 for 表名;  
    create or replace synonym 同义词名 for 用户.表名;  
    create or replace synonym 同义词名 for 表名@数据库链接名;  
    drop synonym 同义词名; 

7、创建和删除视图

    create or replace view 视图名 as (select 字段 from 用户.表名@dblink1);  
    drop view 视图名;  

其他:

创建方式二:要求数据库服务器db_A上 tnsnames.ora 中有 数据库db_B的映射   (省略)
sql>create database link 数据库链路名 connect to 用户名 identified by 口令 using 'tnsnames.ora配置的主机字符串名';

创建方式三:
PL/SQL图形配置界面

  

 


问题:
已经给了用户 dblink 的权限,但创建时报权限不足的错
解决:
我给用户的是 CREATE PUBLIC DATABASE LINK权限,所以创建时需要create public  database link....  而不能是create database link....

待深入:

每次使用dblink查询的时候,均会与远程数据库创建一个连接,dblink 应该不会自动释放这个连接,如果是大量使用 dblink 查询,会造成 web 项目的连接数不够,导致系统无法正常运行,导致系统无正常运行。

 

 

 

参考学习:

 

http://blog.csdn.net/davidhsing/article/details/6408770

 

http://www.cnblogs.com/xinyuxin912/archive/2008/01/09/1032261.html

 

http://moonights.iteye.com/blog/568895

展开阅读全文

oracle创建与mysql的dblink 失败

08-15

两种方式:第一,①安装mysql odbc驱动,配置mysql数据源。rn ②配置listener.ora和tnsnames.ora,以及%oracle home%/hs/admin下增加对应的init.orarn 在listener.ora中添加如下代码rn (SID_DESC =rn (GLOBAL_DBNAME =psms) rn (SID_NAME = psms)rn (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)rn (PROGRAM = hsodbc)rn )rn 在tnsnames.ora中添加如下代码:rn psms=rn (DESCRIPTION =rn (ADDRESS_LIST =rn (ADDRESS = (PROTOCOL = TCP)(HOST = IP地址)(PORT = 端口))rn )rn (CONNECT_DATA =rn (SERVICE_NAME = psms)rn (SID=psms)rn )rn )rn 创建initpsms.ora,内容如下:rn HS_FDS_CONNECT_INFO = psmsrn HS_FDS_TRACE_LEVEL = OFFrn ③创建dblinkrn create public database link mysqllinkrn connect to "用户名" identified by "密码"rn using rn 'psms';rn ④执行查询 :select * from "m_user"@mysqllink;rn 报错:rn[img=https://img-bbs.csdn.net/upload/201408/15/1408065538_394083.png][/img]rn第二,直接创建dblinkrncreate public database link mysqllinkrn connect to "用户名" identified by "密码"rn using rn ' (DESCRIPTION =rn (ADDRESS_LIST =rn (ADDRESS = (PROTOCOL = TCP)(HOST = IP地址)(PORT = 端口))rn )rn (CONNECT_DATA =rn (SERVER_NAME = psms)rn (SID=psms)rn )rn )';rn执行select * from "m_user"@mysqllink;rn[img=https://img-bbs.csdn.net/upload/201408/15/1408065689_249661.png][/img]rnrn我的mysql跟oracle(服务)都是装在本机,哪位高手能帮忙解答下吗?还有各处输入的用户名,密码,IP,端口所指代的是mysql的还是oracle的?rn 论坛

没有更多推荐了,返回首页