天天看點

ORA-1031權限不足 TNS-12571包寫入程式失敗

      在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 的所屬組的情況。

[[email protected] ~]$ id oracle

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

發現該使用者隻屬于oinstall ,而沒有dba 。

是以,我們在root 環境下使用usermod 對該使用者進行調整。如下所示:

[r[email protected] ~]# usermod -G oinstall,dba -g oinstall oracle

[[email protected] ~]# id oracle

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

  再次驗證sysdba 身份登入操作,如下所示:

[[email protected] ~]# su - oracle

[[email protected] ~]$ 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檔案。

ORA-1031權限不足 TNS-12571包寫入程式失敗

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部落格 ” ,連結:http://blog.itpub.net/22969361/viewspace-1213837/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/22969361/viewspace-1213837/