文档章节

Oracle 使用 DBLINK详解

sjzmlb
 sjzmlb
发布于 2015/05/22 18:46
字数 1625
阅读 482
收藏 13
DBLINK详解


1.创建dblink语法:


CREATE [PUBLIC] DATABASE LINK link 


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)相同;否则,可以任意命名。


3)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串。


4)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。


2.删除数据库链接的语句:


DROP [PUBLIC] DATABASE LINK zrhs_link


3.查看已创建的dblink


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


4.dblink的引用:


[user.]table|view @dblink


如:


SELECT * FROM worker@zrhs_link;


SELECT * FROM camel.worker@zrhs_link ;


5.创建同义词:


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


CREATE SYNONYM worker_syn FOR worker@zrhs_link;


6.创建远程视图:


CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where…;


现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户访问此视图,但该用户必须有访问数据库链接的权限。


其他:


修改GLOBAL_NAME的方法:


1.在远程数据库的init.ora文件中将global_names设为false。


或者


2.用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;


修改后重新启动数据库设置才能生效。


数据库全局名称可以用以下命令查出:SELECT * FROM GLOBAL_NAME;






===== dblink 实战 ======


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中的),效率较高。


---------------------------------------------------------------------------------------------------------------------------------------------------------------------
注意:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。 






两台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据,这个时候可以使用 dblink。 
其实dblink和数据库中的view差不多,建dblink的时候需要知道待读取数据库的ip地址,ssid以及数据库用户名和密码。 
创建可以采用两种方式: 
1、已经配置本地服务 
create public database 
link fwq12 connect to fzept 
identified by neu using 'fjept' Create DATABASE LINK 数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’; 
2、未配置本地服务 
create database link linkfwq 
connect to fzept identified by neu 
using '(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = fjept) 

)'; 
host=数据库的ip地址,service_name=数据库的ssid。 
其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。 


数据库连接字符串可以用NET8 EASY CONFIG或者直接修改 TNSNAMES.ORA里定义. 


数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样 


数据库全局名称可以用以下命令查出 
Select * FROM GLOBAL_NAME; 


查询远端数据库里的表 
Select …… FROM 表名@数据库链接名; 
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。 
附带说下同义词创建: 


Create SYNONYM 同义词名FOR 表名; 
Create SYNONYM同义词名FOR 表名@数据库链接名; 


删除 dblink:Drop PUBLIC DATABASE LINK linkfwq。 


如果创建全局dblink,必须使用systm或sys用户,在database前加public。 


oracle dblink解决后台却出现锁 
创建是很简单,但是在使用中后台却出现锁,查看这个锁的方法可以去console中看到或者查询数据库。其实这个锁倒 
不是最让人心烦的,而是每次使用 dblink查询的时候,均会与远程数据库创建一个连接,dblink应该不会自动释放这个连接 
,如果是大量使用dblink查询,会造成web 项目的连接数不够,导致系统无法正常运行。 


例子:


create database link hr_tables 
connect to manbu 
identified by "admin" 
using 'WALK' 
其中hr_tables是远程数据库的一个别名 
manbu是远程数据库的数据库用户名 
admin为manbu的密码 
WALK为数据库在本地数据库的SID (具体说是本地数据库服务器的服务名。需要在本地服务器tnsname.ora上建立一个服务。而不是在客户端建。)
接着,我们可以做一下测试,比如我们想拿到数据库的某一张表数据,那我们可以在命名行下做如下的测试: 
select user_name from mall_user@hr_tables; 
每一张表都必须加上@hr_tables字符串,表示该表是dblink所指向的远程数据库的表单 
或者,你会觉得这样子很麻烦,那我们可以为mall_user@hr_tables配置一个别名,那就没有改须麻烦啦。 
创建mall_user@hr_tables的同义词,也即别名: 
create synonym mall_user for mall_user@hr_tables;

本文转载自:http://blog.163.com/js_xiaoyi/blog/static/196600094201210274837140/

共有 人打赏支持
sjzmlb
粉丝 7
博文 30
码字总数 2410
作品 0
海淀
程序员
加载中

评论(1)

o
osff
赞了!
oracle通过dblink连接mysql配置详解(全Windows下)

oracle通过dblink连接mysql配置详解(全Windows下) 关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚...

幸运券发放
07/14
0
0
oracle使用dblink跨库查询的例子

本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下。 oracle dblink跨库查询 方法一: 首先,创建数据库链接: 复制代码代码示例: CREATE ...

Carl_
2014/11/07
0
0
PostgreSQL的DBLink使用

习惯了Oracle的Dblink带来的便捷,我们来看一下PostgreSQL的DBLINK,该工具需要编译安装一下使用,倒也不是很复杂。 DB版本:9.1.3 1.编译安装 [postgres@localhost dblink]$ pwd/home/post...

kenyon_君羊
2012/04/26
0
3
data pump (数据抽取)测试

背景介绍>利用db_link直接pump抽取,减少转储文件集。 前提: 授权> grant create public database link,create database link to myAccount; 1.创建dblink SQL> create database link demo......

技术小美
2017/11/12
0
0
针对Oracle数据库版本12.1.0.1,11.2.0.3及更早版本的推荐修补程序和操作

针对Oracle数据库版本12.1.0.1,11.2.0.3及更早版本的推荐修补程序和操作 - 在2019年6月之前(文档ID 2335265.1) 在这份文件中 适用于: Oracle数据库 - 企业版 - 版本11.1.0.7至12.2.0.1 [版...

jsj_007
03/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
6
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
14
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部