OS: Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
uname -r: 2.6.9-22.EL
DB: Oracle Database 10g Release 10.2.0.1.0
第一种情况:初始化参数 remote_login_passwordfile 设置为 EXCLUSIVE
查看当前参数的设置值方法如下:
登陆Oracle主机,连上Oracle服务器。
select value from v$parameter t where t.NAME='remote_login_passwordfile';
1. 本地SYS用户登录的情况:
在 $ORACLE_HOME/network/admin/ 目录下查看 sqlnet.ora,默认为:
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
此时本地sys用户的认证方式为系统认证,即可以 sqlplus / as sysdba 方式登录,不检查口令文件。
如果在sqlnet.ora 中额外添加:
SQLNET.AUTHENTICATION_SERVICES= (NTS) 或 SQLNET.AUTHENTICATION_SERVICES= (NONE)
则本地SYS用户必须以 sqlplus sys/123456 as sysdba 方式登录。
此时本地sys用户认证方式为口令认证,需要检查口令文件,口令文件格式为 orapwSID。如口令文件丢失,则报ORA-01031。
重建口令文件的方法: orapwd file=orapworcl password=123456 entries=2
2. 远程SYS用户登录的情况:
远程SYS用户登录,一律以 sqlplus sys/123456@orcl as sysdba 的方式登录(无论服务器端sqlnet.ora中如何设置)。
若远程SYS用户登录时报:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
此时检查 $ORACLE_HOME/network/admin/ 目录下的listener.ora 文件,根据以下内容进行修改即可。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
)
)
localhost需要设置你Oracle服务器的IP,因为我的服务器和客户端都在同一台机器上。
修改完成后,需要重启下lsnrctl 服务:lsnrctl reload
第二种情况:初始化参数 remote_login_passwordfile 设置为 NONE
sqlnet.ora 中为默认设置,即:NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
此时,远程SYS用户无法登录。
注:原文取自:http://blog.163.com/jam_wx731/blog/static/140672287201031245128314/