在 Oracle 数据库中,DB Link(数据库链接)本身不能直接 exp 导出,因为它属于 数据字典对象。常见做法是从 数据字典中查询其定义脚本,然后再执行。
下面按最常用、最安全的方式给你说明。
SELECT db_link, username, host
FROM user_db_links;
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,适合记录,不适合直接重建。
SELECT DBMS_METADATA.GET_DDL('DB_LINK', db_link, owner)
FROM dba_db_links;
⚠️ 需要权限:
SELECT ANY DICTIONARY
-- 或
SELECT_CATALOG_ROLE
不支持导出 DB Link。
可以导出,但有限制
expdp system/password directory=DATA_PUMP_DIR dumpfile=db_links.dmp full=y include=DB_LINK
⚠️ 注意:
SELECT DBMS_METADATA.GET_DDL('DB_LINK', db_link, owner)
FROM dba_db_links;
.sql 文件@dblink_script.sql
IDENTIFIED BY VALUES '...' 怎么办?✅ 手动改成明文:
CREATE DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY 密码
USING 'tns_name';
CREATE DATABASE LINKCREATE PUBLIC DATABASE LINK导出 DB Link 的正确方式是:用
DBMS_METADATA.GET_DDL从数据字典生成 DDL 脚本,而不是用 exp/expdp。
如果你告诉我:
我可以帮你直接生成可用脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。