克隆应用服务器后JDBC wallet连Oracle 19出现Failed to lock报错如何解决
Oracle钱包连接报错根因分析
核心错误原因
- 克隆操作捕获了源服务器运行时产生的临时锁文件
ewallet.p12.lck,该锁绑定源服务器的进程上下文,克隆后在新实例上该锁文件无效,当前应用进程无法覆盖已有锁,触发权限报错 ewallet.p12.lck文件的上层目录缺少执行权限、或SELinux上下文异常,即使文件本身权限显示正确,应用运行用户仍无实际操作权限- 新实例的
/tmp目录权限配置异常,缺少全局写权限或sticky bit,导致Oracle JDBC驱动无法创建临时pki锁文件。注:/tmp/pki_data*.lck为运行时动态生成的临时文件,原生实例无该文件属于正常情况,报错本质是驱动无法创建该文件而非文件缺失
修复步骤
- 第一步:删除残留无效锁文件
该文件为运行时临时锁,删除不会影响钱包本身的凭证信息,执行:rm -f /home/ubuntu/wallets/mywallet/ewallet.p12.lck - 第二步:修复/tmp目录权限
执行命令确认/tmp权限:
正常输出权限位应为ls -ld /tmp1777,显示为drwxrwxrwt,如果不符合执行:chmod 1777 /tmp chown root:root /tmp - 第三步:校验钱包目录的实际操作权限
替换为实际的应用运行账号,执行以下命令验证权限:
如果执行报错,说明上层目录缺少执行权限,逐层添加权限即可:su - 【应用运行用户名】 -c "touch /home/ubuntu/wallets/mywallet/test.tmp && rm -f /home/ubuntu/wallets/mywallet/test.tmp"
若服务器开启了SELinux,执行上下文修复:chmod o+x /home/ubuntu chmod o+x /home/ubuntu/wallets chmod o+x /home/ubuntu/wallets/mywalletrestorecon -Rv /home/ubuntu/wallets/mywallet - 第四步:可选,重新生成自动登录钱包
以上操作完成后仍报错的话,使用orapki工具重新生成自动登录钱包文件,执行时输入创建钱包时设置的密码:
生成后确认新生成的orapki wallet create -wallet /home/ubuntu/wallets/mywallet -auto_login_onlycwallet.sso文件权限与应用运行用户匹配。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

