1 问题背景

今天想打开数据库的归档模式,shutdown之后,sqlplus就连接不上数据库了。

使用 sqlplus sys/syspassword@orcl as sysdba 连接,一直报错TNS无法识别对应的标识符;使用 sqlplus / as sysdba 连接,一直弹出提示输入用户名,密码。

数据库是本地的,由于本地装了两个oracle,一个10G客户端,一个11G的DB,path中一直设置的是10G的 $ORACLE_HOME\BIN 路径,OS 平台是 Win7。

 

2 解决过程

2.1 换 sqlplus

既然使用10G的 sqlplus 连接不能使用 sqlplus / as sysdba 直接连接默认的数据库,那么我换成11G的DB自带的 sqlplus 来连,不是就可以了吗?想到这里我把环境变量中的 path 修改指向 11G的 sqlplus 位置,同时设置了 ORACLE_HOME / ORACLE_SID /ORACLE_BASE / TNS_ADMIN 这几个环境变量,具体如下:(TNS还是用10G的)

ORACLE_BASE=D:\app\username
ORACLE_SID=orcl
ORACLE_HOME=D:\app\username\product\11.2.0\dbhome_1
path=D:\app\username\product\11.2.0\dbhome_1\BIN
TNS_ADMIN=D:\oracle\product\10.2.0\client_1\NETRORK\ADMIN

配置好之后,进入 cmd 界面,set 一下,查看都设置好了。sqlplus / as sysdba 正常进入。

 

2.2 配置静态监听

那么还有别的方法吗?把环境变量还原,尝试换一种方法。

一般本机的数据库可以直接使用 sqlplus / as sysdba 直接以通过 OS 认证,以 DBA 身份登录数据库。但是这里不行,因为这里的环境中有两个 oracle 软件,一个是 10G 的客户端,sqlplus 用的这个下面的,另一个是 11G 的数据库,本机建立的数据库在这个下面。别问我为什么有这种环境,我也不记得当初为什么这么装了。

既然走监听,那就按照远程启动数据库的情形来配置。

进入到10G下面的监听文件,配置一个静态监听进去,记得写好 oracle_sid,global_dbname。这里因为用10G下的监听文件,所以有一个 envs 指向11G下面的文件中。


然后检查 10G的TNS 文件,有时候 service_name 后面有.oracle或者其他域名后缀,去掉一下。

监听文件和TNS文件中注意格式,个人机器上都有,这里我就不贴具体文件内容了。


都配置好了之后,我们重启一下监听。然后查看监听状态。里面有一个 orcl 的库,状态 unknow,这个就是我们刚才配置的静态监听了。

再次使用 sqlplus sys/syspassword@orcl as sysdba ,正常进入了。

 

3 其他参考

在处理过程中,查到一些比较有意思的文章,附在下面。如果希望对监听有更多的了解,可以看一下:

Oracle学习笔记——配置监听

http://www.jellythink.com/archives/985

Oracle学习笔记——详解sqlnet.ora的作用

http://www.jellythink.com/archives/991

Oracle 身份验证方式