ORA-1031許可權不足 TNS-12571包寫入程式失敗
在資料庫所在伺服器上登入的操作,使用的是作業系統認證方式登入資料庫例項。在出現"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 = *)
)
)
在網上看到一篇好的文件,順便放在下面,便於大家學習:(總結得比較好)
我們知道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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 後臺登入提示:”登入失敗:資料庫目錄寫入許可權不足!“資料庫
- PbootCMS後臺登入提示:“登入失敗:資料庫目錄寫入許可權不足!”boot資料庫
- PbootCMS後臺登入提示:”登入失敗:資料庫目錄寫入許可權不足!“boot資料庫
- 登入失敗,提示“資料庫目錄許可權寫入不足”,可以操作設定資料庫目錄許可權為 777。資料庫
- 網站提示:”會話目錄寫入許可權不足“網站會話
- 以sysdba身份登入oracle報ORA-1031許可權不足錯誤之完美分析Oracle
- PbootCMS網站提示:”會話目錄寫入許可權不足“boot網站會話
- PbootCMS提示:“會話目錄寫入許可權不足”的解決辦法boot會話
- sqlplus / as sysdba 登入報許可權不足 for windowsSQLWindows
- Vim儲存時許可權不足
- create or replace view 報許可權不足View
- PbootCMS網站提示:“會話目錄寫入許可權不足”的解決辦法boot網站會話
- RAC oracle 許可權更改導致 實力啟動失敗Oracle
- 解決 PBootCMS 網站出現的“會話目錄寫入許可權不足”的問題boot網站會話
- git push程式碼失敗,鑑權失敗Git
- win10管理員許可權不足怎麼設定_win10管理員許可權不足如何解決Win10
- 安裝laravel許可權包Laravel
- 微信小程式——getLocation許可權彈框不出現,介面訪問失敗——錯誤排查微信小程式
- 【Oracle】sqlplus 遇到共享庫許可權不足OracleSQL
- gcluster/gnode 許可權設定為全權 777,叢集啟動失敗;GC
- 【許可權】儲存過程執行時,報ORA-01031許可權不足儲存過程
- ThinkPHP6 寫入日誌許可權報錯PHP
- .NET 程式許可權控制、獲得管理員許可權程式碼
- ORA-01031: 許可權不足 ORACLE 817Oracle
- sqlplus / as sysdba登入提示ORA-01031: 許可權不足SQL
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- win10管理員許可權獲取不了怎麼辦 win10管理員許可權獲取失敗解決方法Win10
- /tmp檔案系統無許可權導致監聽listener啟動失敗
- 因AIX系統目錄許可權問題導致TSM備份失敗AI
- 許可權之選單許可權
- MySQL資料庫許可權體系入門(6)---管理表、列及程式相關許可權MySql資料庫
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- 往hdfs寫資料無許可權
- 許可權控制下的SQL寫法SQL
- windows延緩寫入失敗怎麼辦 延緩寫入失敗的解決辦法Windows
- Linux 許可權入門指南Linux
- 【MySql】許可權不足導致的無法連線到資料庫以及許可權的授予和撤銷MySql資料庫