oracle 建dblink (含集群配置,多ip)(含权限)

5 篇文章 0 订阅
3 篇文章 0 订阅

1. 前言

dblink 介绍 : 
            dblink(Database Link)数据库链接顾名思义就是数据库的链接 [1]  ,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。   

创建dblink语法:

       CREATE [SHARED] [PUBLIC] database link link_name
  [CONNECT TO [user] [current_user] IDENTIFIED BY [password] 
  [AUTHENTICATED BY user IDENTIFIED BY password] 
  [USING 'connect_string']

权限

         创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。

2.场景(demo)


2.1 dblink 提供给对方数据 (只提供对应表的查看权限)

          权限问题:
               基于数据安全考虑,不要用sys用户建dblink ,正确方式:
                     新建一个有创建dblink权限的用户,再授予这个用户查看对应表的权限
  (由于需要提供用户名和密码,防止用户访问其他表,以及修改表信息)    

(该部分在自己数据库操作):

--  执行sql 用户:dba权限用户
 -- 新建一个用户
create user USER1 identified by passwd
--授予该用户创建dblink权限
grant connect to USER1;
 -- 指定表授权查询权限。 如果是sys用户 要指定用户 
grant select on USER2.tablename to USER1;

   以上 ,好了之后 就可以提供给对方系统如下信息,供对方系统建立dblink 访问我们的 USER2.tablename 表:
   数据库ip  ,端口  ,USER1 用户名密码, 服务名  , USER2.tablename 用户名及表名

   为了对方使用方便,通常情况下,直接给创建dblink语句,对方直接在对方数据库执行,demo:

(该部分提供给对方数据库):  【提供之前建议找个其他库测试一下】

--数据tablename 
--创建dblink:
create public database link ECS_DBLINK
connect to USER1 identified by passwd
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 172.16.3.xx)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = xxxx)))';
--数据表名称: tablename
--查询语句:  
SELECT * FROM USER2.tablename@ECS_DBLINK;

 2.1  dblink方式访问其他库数据

由上可知,如果对方系统不给建dblink语句 ,需要找对方系统 要 :

  1. 数据库ip  ,
  2. 端口  ,
  3. USER1 用户名密码,
  4. 服务名  ,
  5. 你要访问的数据对应的  USER2.tablename 用户名及表名

 在数据库执行 create public database link......语句即可。【同上】
 

2.数据库为集群

tns 如下 有多个ip ,说明数据库部署的是集群模式

PROD_BALANCE=(DESCRIPTION=
            (ADDRESS_LIST=
                (LOAD_BALANCE=YES)
                (FAILOVER=YES)
                (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.18.xx)(PORT=1521))
                (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.18.xx)(PORT=1521))
            )
            (CONNECT_DATA=
                (SERVICE_NAME=xxxxx)
            )
        )

那对应的创建dblink的语句 多加个ip

create database link ECS_DBLINK
  connect to USER1 identified by passwd
  using '(DESCRIPTION =
  (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.3.xx)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.xx)(PORT = 1521))
      (FAILOVER = on)
      (LOAD_BALANCE = on)
    )
  (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = xxxx)))';

-- 负载均衡 LOAD_BALANCE = on  

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值