一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何解决Oracle RAC环境中由于密码文件不同步导致的登录失败

时间:2026-07-08 10:38:46 编辑:袖梨 来源:一聚教程网

必须用srvctl和v$passwordfile_info确认密码文件为ASM路径且TYPE=ASM,禁用orapwd本地生成;仅允许asmcmd pwcopy原子同步或统一软链接至ASM文件,并确保remote_login_passwordfile=SHARED。

确认密码文件是否真被集群识别为共享文件

别靠猜,直接查。在 grid 用户下执行:srvctl config database -d <db_unique_name>,重点看输出中 password file 字段。如果显示的是本地路径(如 /u01/app/oracle/product/19c/db_1/dbs/orapwcdb1),说明配置错误;如果为空或报错,说明集群根本没加载密码文件。再补查一次:select * from v$passwordfile_info;——返回必须有且仅有一行,type 列值必须是 asmfile_name 是类似 +data/cdb1/password/pwdcdb1.256.123456789 的 asm 路径。

别用 orapwd 在各节点分别生成文件

orapwd 在 19c RAC 中不能用于同步,这是最常踩的坑。它生成的是本地独占式(EXCLUSIVE)二进制文件,含唯一 SCN 和内部结构绑定,哪怕内容一致,RAC 也无法跨节点共享加载。更糟的是:若你指定路径为 $ORACLE_HOME/dbs/orapw$ORACLE_SID,该文件会被集群忽略或启动时被 ASM 托管文件覆盖。现象就是改完密码后,只有当前节点生效,其他节点仍认旧密码,sqlplus / as sysdbaORA-01017ORA-12641

只用两种 Oracle 官方认可的同步方式

方式一(推荐):asmcmd pwcopy 原子同步。先在主节点执行 ALTER USER sys IDENTIFIED BY newpass;,再用 asmcmd pwcopy +DATA/CDB1/PASSWORD/pwdcdb1.256.123456789 /tmp/pwdcdb1 拉出,scp 到其他节点后,再反向 pwcopy /tmp/pwdcdb1 +DATA/CDB1/PASSWORD/pwdcdb1.256.123456789 ——注意必须用 pwcopy,不是 cp,否则元数据和校验会损坏。

方式二(最稳):统一软链接到 ASM 文件。确保所有节点的 $ORACLE_HOME/dbs/orapw$ORACLE_SID 是符号链接,例如:ln -sf +DATA/CDB1/PASSWORD/pwdcdb1.256.123456789 $ORACLE_HOME/dbs/orapwcdb1。链接必须由 oracle 用户创建,并确认 remote_login_passwordfile=SHARED 已设(srvctl modify database -d cdb1 -p "remote_login_passwordfile=SHARED")。

改 SYS 密码后必须重生成并分发,不能只靠 ALTER USER

ALTER USER sys IDENTIFIED BY xxx 只更新数据字典,不写入密码文件。RAC 各节点密码文件不会自动同步,DG 主备之间也不复制。所以改完密码,必须立刻用 orapwd 重建(orapwd file='+DATA/ORCL/PASSWORD/pwdrac19c' format=12.2 force=y),然后把新文件通过 pwcopy 或软链接方式覆盖所有节点。RAC 多节点、DG 主备多实例,每个实例名对应的 orapw<INSTANCE_NAME> 都得严格匹配,漏一个就会触发 ORA-16191

最容易被忽略的是:密码文件时间戳新 ≠ 内容新。哪怕文件是刚拷过去的,如果没用 force=y 重建或没走 pwcopy,里面还是旧口令。

热门栏目