Oracle DBLINK

--DBLINK


--创建dblink语法
CREATE [PUBLIC] DATABASE LINK linkname 
CONNECT TO username IDENTIFIED BY password
USING 'connectstring';


--说明
--1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的
--2)link:当GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名
  --修改GLOBAL_NAME的方法:
  --A.在远程数据库的init.ora文件中将global_names设为false
  --或者
  --B.用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
  --修改后重新启动数据库设置才能生效
  --数据库全局名称可以用以下命令查出:SELECT * FROM GLOBAL_NAME;
--3)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串
--4)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库


--删除数据库链接的语句
DROP [PUBLIC] DATABASE LINK linkname;


--查询dblinke
set line 333
col owner for a15
col db_link for a15
col username for a15
col host for a30
select * from dba_db_links;
select owner,object_name from dba_objects where object_type='DATABASE LINK';

--当前正在使用的database link
select * from v$dblink;

--从dba_db_links获取其db_name及ip地址
set linesize 300
col username for a30
col db_link for a30
col service_name for a30
select first_level.owner,
       first_level.db_link,
       substr(substr(first_level.host, first_level.sern_first_pos, 100),
              1,
              instr(substr(first_level.host, first_level.sern_first_pos, 100),
                    ')') - 1) as service_name
  from (select owner,
               db_link,
               host,
               instr(host, 'SERVICE_NAME') as sern_first_pos
          from dba_db_links
         where instr(host, 'SERVICE_NAME') > 0) first_level;

--获取dblink-ip及host信息
set linesize 300
col owner for a15
col username for a15
col db_link for a25
col host for a25 
col first_ip for a25
col second_ip for a25
col service_name for a25
select first_level.owner,
       first_level.db_link,
       substr(substr(first_level.host, first_level.sern_first_pos, 100),
              1,
              instr(substr(first_level.host, first_level.sern_first_pos, 100),
                    ')') - 1) as service_name,
       substr(first_level.first_ip_addr,
              1,
              instr(first_level.first_ip_addr, ')') - 1) as first_ip,
       substr(first_level.second_ip_addr,
              1,
              instr(first_level.second_ip_addr, ')') - 1) as second_ip
  from (select owner,
               db_link,
               host,
               instr(host, 'SERVICE_NAME') as sern_first_pos,
               substr(host, instr(host, 'HOST'), 30) as first_ip_addr,
               substr(host, instr(host, 'HOST', 1, 2), 30) as second_ip_addr
          from dba_db_links
         where instr(host, 'SERVICE_NAME') > 0) first_level;
     

--数据库版本
select * from v$version where rownum=1;

--操作系统版本
host more /etc/*release


--dblink的引用
[user.]table|view@dblink
--例如
SELECT * FROM worker@hk_link;
SELECT * FROM hk.worker@hk_link;


--注
--1.dblink分为公有和私有两类。
--公有dblink使用public修饰关键字。在create和drop的时候都需要使用public关键字
--公有dblink对所有人开放,在该dblink之上创建的同义词也会随之对所有人开放。(测试并确认,不过测试是在一个实例多个用户之间进行)
--私有dblink只有创建者可以访问,其上的同义词不能被其他用户访问。需为用户创建视图,并将视图授权给所需用户后,用户才可访问该视图
--另外,不能将带有dblink的同义词直接授权给用户。否则报错,其等价于:
--grant select on table1@user1 to user2;
--ERROR at line 1:
--ORA-02021: DDL operations are not allowed on a remote database
--2.创建dblink时,可以使用连接字符串(与tnsname.ora中的),效率较高


--创建可以采用两种方式
--1、已经配置本地服务
create DATABASE LINK 数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING '本地配置的数据的实例名'; 
create public database link hking connect to scott identified by tiger using 'hking';
--2、未配置本地服务
create database link hking 
connect to scott identified by tiger 
using 
'(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = hking) 

)'; 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值