ITPub博客

首页 > 数据库 > Oracle > ORA-1031权限不足 TNS-12571包写入程序失败

ORA-1031权限不足 TNS-12571包写入程序失败

原创 Oracle 作者:dingzihan 时间:2014-07-09 10:56:28 0 删除 编辑
      在windown 操作系统的数据库服务器上,使用“sqlplus  / as sysdba" 登录11.2.0.1数据库,显示ora-01031:
      在数据库所在服务器上登录的操作,使用的是操作系统认证方式登录数据库实例。在出现"ora-01031"错误时,
首先去检查sqlnet.ora 文件中SQLNET.AUTHENTICATION_SERVICES 项的配置信息。
      

大致得到的结论是:

1 、在windows 下,SQLNET.AUTHENTICATION_SERVICES 必须设置为NTS 或者ALL 才能使用OS 认证;不设置或者设置为其他任何值都不能使用OS 认证。

2 、在linux 下,在SQLNET.AUTHENTICATION_SERVICES 的值设置为ALL ,或者不设置的情况下,OS 验证才能成功;设置为其他任何值都不能使用OS 认证。

首先肯定一点,这种分析方法是没有错的。我在碰到这种问题时,首先去分析的也是这个文件的配置。

但在本案例中,sqlnet.ora 文件的修改内容如下:


SQLNET.AUTHENTICATION_SERVICES = NONE 改为SQLNET.AUTHENTICATION_SERVICES = NTS就可以了。

Oracle 认为,需要满足下列条件的用户才能使用系统认证方式连接数据库实例。

1 、系统用户oracle 必须属于一个特定的组

该用户必须属于OSDBA 组才能以sysdba 身份登录。这里的OSDBA 组在不同类型的操作系统上,名称会不一样。在unix 系统上名称为“dba ” ,而在windows 系统上名称则为“ORA_DBA ” 。

2 、sqlnet.authentication_services 的参数必须设置正确

在unix 系统上,该参数值必须设置为ALL ,或者不设置;在windows 上,它必须设置为NTS 。  

 

我们回到环境中去检查系统用户oracle 的所属组的情况。

 

[oracle@mikitradedb1 ~]$ id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall)

 

发现该用户只属于oinstall ,而没有dba 。

因此,我们在root 环境下使用usermod 对该用户进行调整。如下所示:

 

[root@mikitradedb1 ~]# usermod -G oinstall,dba -g oinstall oracle

[root@mikitradedb1 ~]# id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),503(dba)

 

  再次验证sysdba 身份登录操作,如下所示:

 

[root@mikitradedb1 ~]# su - oracle

[oracle@mikitradedb1 ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jul 11 09:47:50 2012

 

Copyrigmiki (c) 1982, 2007, Oracle.   All Rigmikis Reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

结果显示已经是登录成功,问题就在oracle 用户没有在dba 组中。

 

总而言之,在本地以sysdba 身份登录数据库实例时,碰到ORA-01031 权限不足的错误,需要系统用户所在的组是否有dba 和sqlnet.ora 文件中sqlnet.authentication_services 是否配置正确。

如果还有问题,还有一种方法可以继续分析。使用操作系统分析工具对sqlplus 应用进行分析。

 

Linux: 
strace -o /tmp/strace_sysdba.output -cfT sqlplus / as sysdba

 

AIX, Solaris: 
truss -fea -o /tmp/truss_sysdba.output sqlplus / as sysdba

 

HP-UX: 
tusc -afpo /tmp/tusc_sysdba.output -aef sqlplus / as sysdba

 

总之:修改了sqlnet.ora文件的参数,就可以正常连接,不报错了。

问题又来了,sqlplus跟服务名,又不能连接了。于是开始检查监听,TNS文件。


ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.* )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
     #(SERVICE_NAME = orcl)               
      (SID = *)
    )
  )
将TNS文件的service_name注释掉,添加上SID就可以了。没搞明白,为什么有时service_name可以,有时service_name又不可以?

在网上看到一篇好的文档,顺便放在下面,便于大家学习:(总结得比较好)

我们知道oracle客户端连接时涉及用到的几个配置文件有:sqlnet.ora、tnsnames.ora、listener.ora。其中sqlnet.ora和tnsnames.ora是在客户端的配置文件,listener.ora则是在服务器端的监听配置文件。

想要顺利的连接上服务器端,首先要确保两者之间的网络通畅。其二在服务器上配置好监听程序。其三是客户端配置好相应的tnsnames.ora。

  在配置服务器端监听程序时要注意几点:

  1、在服务器上的/etc/hosts文件中需要有127.0.0.1  localhost 这一条.默认情况下是有的。若没有则在启动监听器是会报TNS-12537:TNS:connection closed的错误.同时最好添加上你的服务器IP  主机名。

  2、配置监听器时可以使用netca或者直接写配置文件listener.ora也行

# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.120)(PORT = 1521))
)
)

其中的HOST最好使用IP,主机名可能会发生改变——影响较多。

  客户端的配置主要的是tnsnames.ora这个文件

CENTOS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.120)(PORT = 1521))
)
(CONNECT_DATA =
(SID = centos)
(SERVER = DEDICATED)
)
)

其实也没什么东西

  对于sqlnet.ora这个文件中的NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)这个参数,其中EZCONNECT是oracle10G新加的,好像是用来快速连接的。使用主机名Easy的连接掉服务器。不用TNSNAMES的方式连接。

  所有的设置都弄好了,如果你还是发现在客户端(Windows)不能连接到服务器端(Linux),查看服务器上的防火墙对oracle的1521端口是否开放。不是很重要的练习用的机子可以直接将防火墙关闭。

  1) 永久性生效,重启后不会复原 
开启: chkconfig iptables on 
关闭: chkconfig iptables off 

2) 即时生效,重启后复原 
开启: service iptables start 
关闭: service iptables stop

  最后在说下在排错时用到的一些命令:lsnrctl (start、stop、status)、tnsping (IP/主机名)、netstat -anp (查看端口)、telnet等。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22969361/viewspace-1213837/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-12-04

  • 博文量
    55
  • 访问量
    456287