Oracle数据库 创建dblink的过程及其用法详解

前言

‌dblink是Oracle数据库中用于连接不同数据库实例的一种机制‌。通过dblink,用户可以在一个数据库实例中直接查询或操作另一个数据库实例中的表、视图或存储过程。‌

dblink的作用主要体现在以下几个方面:

  1. ‌跨数据库操作‌:允许用户在一个数据库实例中直接访问另一个数据库实例中的数据。
  2. ‌简化数据管理‌:通过dblink,可以方便地管理和维护分布在多个数据库中的数据,而无需在每个数据库中重复相同的数据操作。
  3. ‌提高效率‌:通过dblink,可以减少数据传输的延迟,提高数据处理的效率。

一、dblink介绍

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

使用 CREATE DATABASE LINK 语句来创建 DBLINK。在创建过程中,需要指定目标数据库实例的连接信息,如用户名、密码、数据库名等。

sql 复制代码
CREATE DATABASE LINK dblink_name  
CONNECT TO username IDENTIFIED BY password  
USING 'tns_name';

其中,tns_name 是目标数据库实例在 tnsnames.ora 文件中配置的别名。

一旦 DBLINK 创建成功,就可以通过它来访问目标数据库实例中的对象了。在 SQL 查询中,可以使用 @dblink_name 的语法来指定要查询的数据库实例。

sql 复制代码
SELECT * FROM table_name@dblink_name;

实例

sql 复制代码
CREATE DATABASE LINK dblink_name  
CONNECT TO PUTRASIT IDENTIFIED BY rasitt
USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

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

创建dblink一般有两种方式 ,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库:

sql 复制代码
select * from user_sys_privs t where t.privilege like upper('%link%');

查询结果集 :

sql 复制代码
1 SYS CREATE DATABASE LINK NO

2 SYS DROP PUBLIC DATABASE LINK NO

3 SYS CREATE PUBLIC DATABASE LINK NO

在数据库中dblink有三种权限:

sql 复制代码
1.CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了) ,

2.CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),

3.DROP PUBLIC DATABASE LINK。

在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASELINK权限授予给你的用户:

sql 复制代码
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;

然后以scott用户登录本地数据库。

1)已经配置本地服务

sql 复制代码
create public database link link_name

connect to username identified by password

using 'connect_string';

注意:link_name是连接名字,可以自定义;

username是登陆数据库的用户名;

password是登陆数据库的用户密码;

connect_string是数据库连接字符串。

数据库连接字符串是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称。

2)直接建立链接

sql 复制代码
create database link link_name

connect to username identified by password

using '(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X )(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = SSID)

)

)';

host=数据库的ip地址,service_name=数据库的ssid。其实两种方法配置dblink是差不多的,个人感觉还是第二种方法比较好,这样不受本地服务的影响。注意: 假如创建全局dblink,则必须使用systm或sys用户,在database前加public。

三、dblink查询

查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:

sql 复制代码
select * from dba_db_links;

dblink删除

sql 复制代码
DROP PUBLIC DATABASE LINK link_name;

dblink使用

sql 复制代码
SELECT......FROM 表名@数据库链接名;

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

案例:查询上海数据库中emp表数据

sql 复制代码
select * from emp@ShangHai;

设此处上海数据库的数据库连接字符串为ShangHai;

dblink 应用举例

当需要跨库拷贝数据且数据量很大的时候,使用dblink速度很快。

案例:通过dblink跨库复制数据量非常多的表T_USER_LOG_INFO

sql 复制代码
create table test as select * from T_USER_LOG_INFO@db2

同义词配合

例子中from emp@ShangHai可以创建同义词来替代

sql 复制代码
CREATE SYNONYM 同义词名 FOR 表名;

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

案例

sql 复制代码
create synonym sh_scott_emp for emp@ShangHai;

于是就可以用sh_scott_emp来替代带@符号的分布式链接操作emp@ShangHai

dblink是独立于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。

需要注意的是在oracle参数中,有一个参数叫global_names,如果该参数为true,那么在使用db link时,dblink的名字一定要和被访数据库实例名一致,否则会报ORA-2085错。

四、注意事项

  • 权限:创建和使用 dblink需要相应的权限。通常,只有数据库管理员或具有相应权限的用户才能执行这些操作。
  • 安全性:使用 dblink时需要注意安全性问题,特别是当涉及到敏感数据或跨信任域的数据库连接时。
  • 性能:跨库查询可能会受到网络延迟、数据库性能等多种因素的影响,因此在使用dblink时需要考虑到这些因素对性能的影响。

总之,dblink是 Oracle 数据库中实现跨库查询和数据交换的重要机制,对于需要在多个数据库实例之间进行交互的应用场景非常有用。

相关推荐
初次见面我叫泰隆11 分钟前
MySQL——3、数据类型
数据库·mysql
zxrhhm31 分钟前
Oracle 中的虚拟列Virtual Columns和PostgreSQL Generated Columns生成列
postgresql·oracle·vr
一叶屋檐33 分钟前
Neo4j 图书馆借阅系统知识图谱设计
服务器·数据库·cypher
好吃的肘子2 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_472339462 小时前
MySQL MCP 使用案例
数据库·mysql
lqlj22333 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔3 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务3 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071614 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
Ailovelearning4 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j