温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么导出DB Link定义

发布时间:2026-07-02 23:59:47 来源:亿速云 阅读:91 作者:小樊 栏目:数据库

在 Oracle 数据库中,DB Link(数据库链接)本身不能直接 exp 导出,因为它属于 数据字典对象。常见做法是从 数据字典中查询其定义脚本,然后再执行。

下面按最常用、最安全的方式给你说明。


一、最推荐:从数据字典导出 DB Link 定义(DDL)

1️⃣ 查询当前用户的 DB Link

SELECT db_link, username, host
FROM user_db_links;

2️⃣ 生成创建 DB Link 的 DDL

SELECT DBMS_METADATA.GET_DDL('DB_LINK', db_link, owner)
FROM all_db_links
WHERE owner = '你的用户名';

✅ 示例:

SELECT DBMS_METADATA.GET_DDL('DB_LINK', 'DBLINK_NAME', 'SCOTT')
FROM dual;

输出类似:

CREATE DATABASE LINK "DBLINK_NAME"
CONNECT TO "REMOTE_USER" IDENTIFIED BY VALUES '加密字符串'
USING 'REMOTE_SERVICE_NAME';

⚠️ 如果返回的是加密密码(11g+ 默认),密码是不可逆的,需要手动修改为明文。


二、如果你能手动执行(非加密情况)

直接查定义

SELECT *
FROM dba_db_links
WHERE owner = 'SCOTT';

但这个 不包含完整 DDL,适合记录,不适合直接重建。


三、导出所有 DB Link(多用户)

SELECT DBMS_METADATA.GET_DDL('DB_LINK', db_link, owner)
FROM dba_db_links;

⚠️ 需要权限:

SELECT ANY DICTIONARY
-- 或
SELECT_CATALOG_ROLE

四、传统 EXP / EXPDP 能否导出 DB Link?

❌ exp(传统导出)

不支持导出 DB Link。

✅ expdp(Data Pump)

可以导出,但有限制

expdp system/password directory=DATA_PUMP_DIR dumpfile=db_links.dmp full=y include=DB_LINK

⚠️ 注意:

  • SYSTEM / SYS 用户能导出私有 DB Link
  • 密码仍然是加密的

五、最稳妥的“迁移方案”(强烈推荐)

  1. 在源库:
SELECT DBMS_METADATA.GET_DDL('DB_LINK', db_link, owner)
FROM dba_db_links;
  1. 把结果保存为 .sql 文件
  2. 在目标库:
@dblink_script.sql

六、常见问题

Q1:密码变成 IDENTIFIED BY VALUES '...' 怎么办?

✅ 手动改成明文:

CREATE DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY 密码
USING 'tns_name';

Q2:私有 DB Link 和公有的区别?

  • 私有:CREATE DATABASE LINK
  • 公有:CREATE PUBLIC DATABASE LINK

七、总结(一句话)

导出 DB Link 的正确方式是:用 DBMS_METADATA.GET_DDL 从数据字典生成 DDL 脚本,而不是用 exp/expdp。


如果你告诉我:

  • Oracle 版本
  • 是否跨库迁移
  • DB Link 是公有还是私有

我可以帮你直接生成可用脚本

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI