Expdp密码含@等特殊字符触发ORA-12154错误解决方案咨询
Oracle expdp密码含特殊字符@报ORA-12154的解决方案
- 方案1:交互式输入密码(最稳妥,适合单次操作)
执行命令时不将密码拼接在命令行中,仅输入用户名和连接串,执行后按提示输入密码即可,命令参考:
expdp system@hostname:portnumber/servicename schemas=soso directory=xyz dumpfile=mydump.dmp logfile=mylog.log
执行后终端会提示Password:,直接输入带特殊字符的密码回车即可,完全避开特殊字符解析问题。
方案2:将完整连接串用引号包裹(适合命令行单次执行)
之前只包裹密码的方式无法避免shell将密码内的@识别为连接串分隔符,需要将「用户名/密码@连接串」整体用引号包裹,不同系统用法不同:- Linux/Unix 环境用单引号包裹:
expdp 'system/yada@yada1233*something@hostname:portnumber/servicename' schemas=soso directory=xyz dumpfile=mydump.dmp logfile=mylog.log - Windows cmd 环境用双引号包裹:
expdp "system/yada@yada1233*something@hostname:portnumber/servicename" schemas=soso directory=xyz dumpfile=mydump.dmp logfile=mylog.log
- Linux/Unix 环境用单引号包裹:
方案3:使用参数文件(最适合批量服务器操作)
将所有配置写入expdp参数文件,完全避开命令行特殊字符解析问题,适合批量处理多服务器场景:
- 新建参数文件
expdp.par,写入以下内容:
userid=system/"yada@yada1233*something"@hostname:portnumber/servicename schemas=soso directory=xyz dumpfile=mydump.dmp logfile=mylog.log
- 执行命令调用参数文件:
expdp parfile=expdp.par
批量操作时只需批量生成对应服务器的参数文件,再遍历执行即可。
- 方案4:配置TNS别名简化连接
在tnsnames.ora中添加目标数据库的TNS别名配置,例如配置别名target_db指向hostname:portnumber/servicename,之后执行命令即可简化为:
expdp 'system/yada@yada1233*something@target_db' schemas=soso directory=xyz dumpfile=mydump.dmp logfile=mylog.log
内容的提问来源于stack exchange,提问作者GBA_Switch
相关产品推荐
相关产品推荐

