在Oracle 10g数据库环境中,DBLink(数据库链接)是实现跨数据库实例访问的核心功能,通过它可以像访问本地表一样查询远程数据库中的数据,无需额外做数据同步操作,大幅提升多库协同业务的开发效率。

创建DBLink前的准备
在正式创建DBLink之前,需要先确认当前用户具备对应的权限,否则会出现权限不足的错误。创建DBLink需要的权限主要有两种:
- CREATE DATABASE LINK:允许当前用户创建属于自身的私有DBLink
- CREATE PUBLIC DATABASE LINK:允许当前用户创建公共DBLink,所有数据库用户都可以使用该链接
如果权限不足,可以让管理员用户执行以下语句授予权限:
-- 授予创建私有DBLink的权限 GRANT CREATE DATABASE LINK TO 用户名; -- 授予创建公共DBLink的权限 GRANT CREATE PUBLIC DATABASE LINK TO 用户名;
DBLink的创建语法
Oracle 10g中创建DBLink的语法分为私有和公共两种,同时支持固定配置和通过服务名配置两种方式,具体语法如下。
1. 私有DBLink创建
私有DBLink只有创建者可以使用,其他用户无法访问,语法如下:
CREATE DATABASE LINK 链接名称
CONNECT TO 远程数据库用户名 IDENTIFIED BY 远程数据库密码
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 远程数据库IP)(PORT = 远程数据库端口))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 远程数据库服务名)
)
)';2. 公共DBLink创建
公共DBLink所有用户都可以使用,只需要在创建语句中加上PUBLIC关键字:
CREATE PUBLIC DATABASE LINK 链接名称
CONNECT TO 远程数据库用户名 IDENTIFIED BY 远程数据库密码
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 远程数据库IP)(PORT = 远程数据库端口))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 远程数据库服务名)
)
)';3. 使用已配置的服务名创建
如果本地tnsnames.ora文件中已经配置了远程数据库的服务名,也可以简化创建语句:
-- 私有DBLink CREATE DATABASE LINK 链接名称 CONNECT TO 远程数据库用户名 IDENTIFIED BY 远程数据库密码 USING '已配置的服务名'; -- 公共DBLink CREATE PUBLIC DATABASE LINK 链接名称 CONNECT TO 远程数据库用户名 IDENTIFIED BY 远程数据库密码 USING '已配置的服务名';
DBLink的验证与使用
创建完成后,可以通过查询远程数据库的系统表来验证DBLink是否生效,示例如下:
-- 查询远程数据库的用户名,链接名称后需要加@ SELECT USER FROM 链接名称; -- 查询远程数据库的表数据,假设远程有表remote_table SELECT * FROM remote_table@链接名称 WHERE ROWNUM < 5;
如果查询能正常返回结果,说明DBLink创建成功,后续就可以在查询语句中通过表名@链接名称的方式访问远程表数据。
DBLink的管理与注意事项
使用DBLink时还需要注意以下几点:
- 查看当前用户的所有DBLink,可以查询
user_db_links视图: - 删除私有DBLink使用语句:
DROP DATABASE LINK 链接名称;,删除公共DBLink使用:DROP PUBLIC DATABASE LINK 链接名称; - 密码中包含特殊字符时,需要用双引号包裹密码,避免语法错误
- DBLink的连接是按需建立的,长时间不使用会自动断开,无需手动维护连接状态
- 跨库查询时如果涉及大表关联,建议先过滤远程表数据再关联,减少网络传输开销
Oracle_10gDBLink跨数据库访问数据库链接修改时间:2026-06-07 00:29:32