远程sysdba登录失败主因是密码文件未建、路径错误、权限不符(linux需640)或remote_login_passwordfile未设为exclusive;orapwd必须指定file(绝对路径)、password(与sys当前密码一致)、format=12(12c+)、entries(建议≥20)和force=y参数。

远程用 sys 或其他用户连 as sysdba 失败?大概率不是密码输错了,而是密码文件没建、路径不对、权限不合规,或者 REMOTE_LOGIN_PASSWORDFILE 没设对。
orapwd 命令必须带哪些参数才有效
12c 及以后版本,orapwd 不是“填完就跑”,漏掉关键参数会导致生成的文件被 Oracle 静默忽略。
-
file:必须写绝对路径,比如file=$ORACLE_HOME/dbs/orapw$ORACLE_SID;只写orapwORCL会默认放到当前目录,Oracle 根本不认 -
password:这是给SYS用户设的密码,必须和数据库里当前SYS的实际密码一致;改过密码但没同步更新这里,远程连就报ORA-01017 -
format=12:12c+ 必须显式指定,否则生成旧格式(format=10),多租户环境下可能加载失败 -
entries:预估后续要加多少个sysdba用户(比如运维账号、监控账号),设小了后期扩容只能重建文件;默认 10,建议起步设 20 -
force=y:覆盖已有文件时必须加,否则报OPW-00005: File exists. Please delete it first.
典型命令:orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=MyPass123 entries=20 force=y format=12
密码文件放哪、权限怎么设才被 Oracle 认
Oracle 只在固定路径找密码文件,且对 Linux 权限极其敏感——错一个数字,就当它不存在。
- Linux 路径必须是
$ORACLE_HOME/dbs/orapw$ORACLE_SID(大小写严格匹配,orapwORCL≠orapworcl) - Windows 是
%ORACLE_HOME%\database\orapw%ORACLE_SID% - Linux 文件权限必须是
640,属主oracle,组为oinstall或dba;chmod 640后还要chown oracle:oinstall - 如果用 RAC,所有实例共用一个密码文件,得放在共享存储上,且各节点路径需一致
REMOTE_LOGIN_PASSWORDFILE 参数必须设成 EXCLUSIVE
这个参数控制 Oracle 是否读取密码文件,设错等于白建文件,且修改后必须重启实例。
-
NONE:完全忽略密码文件,远程as sysdba必然失败 -
SHARED:允许多实例共用,但不能往里面加非SYS用户(grant sysdba to user会报ORA-01994) -
EXCLUSIVE:唯一支持增删改用户的模式,也是单实例的标准配置;执行ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;后重启库
查当前值:show parameter remote_login_passwordfile
授予非 SYS 用户 SYSDBA 权限的实操要点
建好密码文件、设对参数后,才能把 sysdba 权限授给其他用户,否则 grant sysdba to user 直接报错。
- 先确认密码文件已生效:
select * from v$pwfile_users;应看到SYS行,SYSDBA列为TRUE - 执行
grant sysdba to myadmin;;注意:该用户必须已在数据库中存在(create user myadmin identified by xxx) - 再查
v$pwfile_users,应出现myadmin且SYSDBA为TRUE - 验证连接:
sqlplus myadmin/xxx@db_alias as sysdba;本地/ as sysdba不走密码文件,无法验证此步
容易忽略的一点:v$pwfile_users 视图只反映密码文件内容,不反映数据库字典里的角色授权——grant dba to user 不会让它出现在这里。











