CREATE DATABASE LINK
语句(通常需 DBA 权限),指定目标数据库的连接信息(用户名、密码、服务名)。在PL/SQL中直接”添加数据库连接”通常指创建数据库链接(Database Link),用于跨数据库访问数据,以下是详细操作指南:
数据库链接的核心概念
- 作用
允许本地Oracle数据库访问远程数据库对象(表、视图等),语法:对象名@链接名
。 - 权限要求
- 用户需具备
CREATE DATABASE LINK
权限(由DBA授权)。 - 远程数据库的访问账号(用户名/密码)。
- 用户需具备
创建数据库链接的步骤
方法1:私有数据库链接(仅创建者可用)
CREATE DATABASE LINK remote_db CONNECT TO remote_user IDENTIFIED BY "your_password" USING 'remote_tns';
- 参数说明
remote_db
:链接名称(自定义)remote_user
/your_password
:远程数据库的登录凭证remote_tns
:远程数据库的TNS服务名(需在tnsnames.ora
中配置)
方法2:公有数据库链接(所有用户可用)
CREATE PUBLIC DATABASE LINK pub_remote_db CONNECT TO remote_user IDENTIFIED BY "your_password" USING 'remote_tns';
配置TNS服务名(必需前提)
-
编辑Oracle客户端配置
tnsnames.ora
(位于$ORACLE_HOME/network/admin
):REMOTE_TNS = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = remote_host)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = remote_service) ) )
HOST
:远程数据库IP或域名SERVICE_NAME
:远程数据库的服务名(通过SELECT name FROM v$database;
查询)
-
测试连接(命令行执行):
tnsping remote_tns
使用数据库链接的PL/SQL示例
-- 查询远程数据库的表 DECLARE v_name VARCHAR2(50); BEGIN SELECT employee_name INTO v_name FROM employees@remote_db -- 通过链接访问 WHERE employee_id = 100; DBMS_OUTPUT.PUT_LINE('Employee: ' || v_name); END; /
安全与最佳实践
- 权限最小化
使用低权限的远程账号,仅授予必要对象的访问权。 - 密码保护
避免硬编码密码,可通过Oracle Wallet存储凭证:CREATE DATABASE LINK secure_link CONNECT TO remote_user IDENTIFIED BY "外部存储密码" USING 'remote_tns';
- 链接管理命令
- 查看所有链接:
SELECT * FROM ALL_DB_LINKS;
- 删除链接:
DROP DATABASE LINK remote_db;
- 查看所有链接:
常见问题解决
- ORA-12154: TNS无法解析
检查tnsnames.ora
配置和路径是否正确。 - ORA-01017: 用户名/密码无效
验证远程账号权限及密码特殊字符(建议用双引号包裹密码)。 - ORA-02085: 数据库链接与本地同名
修改链接名称避免冲突。
引用说明参考Oracle官方文档Database Links,操作需Oracle 11g及以上版本支持,实际部署请遵循企业安全规范。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/23562.html