文档章节

Oracle 使用 DBLINK详解

sjzmlb
 sjzmlb
发布于 2015/05/22 18:46
字数 1625
阅读 422
收藏 13
点赞 0
评论 1
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
博文 28
码字总数 2410
作品 0
海淀
程序员
加载中

评论(1)

o
osff
赞了!
PostgreSQL的DBLink使用

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

kenyon_君羊 ⋅ 2012/04/26 ⋅ 3

oracle使用dblink跨库查询的例子

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

Carl_ ⋅ 2014/11/07 ⋅ 0

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

针对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

oracle dblink创建

目的:oracle中跨数据库查询 两台数据库服务器dbA(本地)和dbB(远程192.168.1.100),dbA下用户usera 需要访问到dbB下userb的数据 解决:查询得知使用dblink(即database link 数据库链) 实现过...

wcczrx ⋅ 2017/04/25 ⋅ 0

Oracle Gateway使用分享

Oracle Gateway使用分享 1、背景说明 公司一直会碰到异构数据库的连接问题,比如Oracle需要dblink as400,dblink DB2,如果此些数据库版本比较老的话,在linux 64位环境中配置此类数据库的驱...

扫地僧void ⋅ 2017/04/06 ⋅ 0

MySQL的FEDERATED引擎实现类Oracle的DBlink

随着业务的复杂度不断的增加、数据库不断的切分,在分布式系统中往往一台或几台数据库并不能满足我们的需求,所以常常需要多台同时时用,而在平时需要通过其它服务器的数据库获取信息最为方便...

往事_Jim_遗 ⋅ 2017/12/04 ⋅ 0

dblink的介绍及常用管理脚本

一、database link概述 1、 database link是定义一个数据库到另一个数据库的路径的对象,在分布式的系统中一个数据库不可能包含所有的数据信息,有些数据信息是存放在其他的数据库里面的,因...

猎人笔记 ⋅ 2014/04/27 ⋅ 0

oracle创建dblink

赋予创建dblink的权限有三种: grant create database link to user ;--只有user用户能使用的 dblinkgrant create public database link to user ;--所有用户都可以使用的 dblinkgrant drop...

许大白 ⋅ 2013/09/05 ⋅ 0

Oracle数据库如何创建DATABASE LINK

Oracle数据库如何创建DATABASE LINK? 项目示例: select sysdate from dual@TOSLIFESUG.REGRESS.RDBMS.DEV.US.ORACLE.COM; drop database link TO_SLIFESUG.REGRESS.RDBMS.DEV.US.ORACLE.CO......

ianLi ⋅ 2014/02/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 28分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 34分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 36分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 45分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 48分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 今天 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 今天 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部