Oracle 12c导入DDL脚本遇ORA-02153错误的解决咨询
解决Oracle 12c数据库链接导入时的ORA-02153错误
这个问题我之前帮团队处理过,核心原因是Oracle 12c对密码哈希的存储格式做了升级,你只替换单个哈希值的方式不符合新格式要求。下面给你几个可行的解决方案:
方案1:改用明文密码导入(快速解决,适合测试环境)
如果是测试环境,不用纠结加密哈希,直接把数据库链接的创建语句改成明文密码形式:
CREATE DATABASE LINK "DBINTERNET2T" CONNECT TO "CATALOG" IDENTIFIED BY 'catalog' USING 'DBINTERNET2T';
⚠️ 注意:生产环境不建议这么做,因为明文密码会留在脚本里,存在安全风险。
方案2:使用12c兼容的加密密码字符串(生产环境推荐)
Oracle 12c及以后,IDENTIFIED BY VALUES需要同时包含spare4和password字段的哈希值,格式为S:<spare4值>;H:<password值>。你可以按以下步骤操作:
- 在目标数据库中,用SYSDBA权限执行以下SQL,获取正确的加密字符串:
SELECT 'IDENTIFIED BY VALUES '''||spare4||';'||password||'''' FROM sys.user$ WHERE name='CATALOG'; - 把查询结果替换到你的CREATE语句中,比如查询结果是
IDENTIFIED BY VALUES 'S:ABC123DEF;H:XYZ789',那么最终语句是:CREATE DATABASE LINK "DBINTERNET2T" CONNECT TO "CATALOG" IDENTIFIED BY VALUES 'S:ABC123DEF;H:XYZ789' USING 'DBINTERNET2T';
这样就能完全符合Oracle 12c的密码验证要求了。
方案3:重新导出DDL时调整SQL Developer设置
如果以后还要导出类似的脚本,可以在SQL Developer里调整导出选项,从根源避免这个问题:
- 打开导出DDL的向导,找到Database Links相关设置
- 选择「Use plaintext passwords」(如果允许的话),导出的脚本直接用明文密码,导入时无需处理哈希
- 或者选择「Include full password hashes」选项,确保导出的哈希是12c兼容的组合格式
额外注意事项
- 确保执行CREATE DATABASE LINK的用户拥有
CREATE DATABASE LINK(或CREATE PUBLIC DATABASE LINK)的权限 - 目标库的CATALOG用户必须已经存在,且密码和你生成哈希时的密码一致
- 如果还是报错,可以检查目标库的
remote_login_passwordfile参数是否设置为EXCLUSIVE或SHARED,不过这个参数一般不影响数据库链接的密码验证
内容的提问来源于stack exchange,提问作者dermoritz
相关产品推荐
相关产品推荐

