ORA-01031: insufficient privileges 解決方案

ORA-01031: insufficient privileges
原文出自:http://www.chinaunix.net/jh/19/132866.html
#############################################
#
# NAME: troubleshoot connect internal.txt
#
# DESCRIPTION:
# connect internal
# connect / as sysdba 要口令問題:
# refer (METALINK,ORACLEDOC),
# metalink search words(connect internal)
# NOTE:
#
# modifiy (MM/DD/YY) AUTHOR
# 05/03/03 ZORROL
#############################################
————————————————————
1。檢查sqlnet.ora 文件.
sqlnet.ora 文件損壞或格式不對可以導致出現該問題。
sqlnet.ora 文件可能存放路徑為
$TNS_ADMIN/sqlnet.ora
如果沒有設置$TNS_ADMIN默認在$ORACLE_HOME/network/admin/sqlnet.ora

$HOME/sqlnet.ora
(1). 可以從別的機器拷貝一個文件過來,注意備份原來的sqlnet.ora。
---檢查sqlnet.ora 文件內容
(2). 檢查SQLNET.AUTHENTICATION_SERVICES
如果沒有使用dblink.檢查該行並設置
SQLNET.AUTHENTICATION_SERVICES = (BEQ,NONE)
(3). SQLNET.CRYPTO_SEED
在unix 下不需要該參數。如果存在該行,註釋掉或刪掉
(4).AUTOMATIC_IPC
如果該參數為 ON,將強制使用"TWO_TASK" 連接
最好設置為OFF
AUTOMATIC_IPC = OFF
2.檢查相關文件的權限配置。
找到$TNS_ADMIN/*
$ cd $TNS_ADMIN
$ chmod 644 sqlnet.ora tnsnames.ora listener.ora
$ ls -l sqlnet.ora tnsnames.ora listener.ora
-rw-r--r-- 1 oracle dba 1628 Jul 12 15:25 listener.ora
-rw-r--r-- 1 oracle dba 586 Jun 1 12:07 sqlnet.ora
-rw-r--r-- 1 oracle dba 82274 Jul 12 15:23 tnsnames.ora
3.檢查操作系統相關設置。
(1). $ORACLE_HOME環境變量是否設置正確
% cd $ORACLE_HOME
% pwd
如果錯誤,請重新設置:
sh or ksh: ----------
$ ORACLE_HOME=<path_to_ORACLE_HOME>
$ export ORACLE_HOME
Example:
$ ORACLE_HOME=/u01/app/oracle/product/7.3.3
$ export ORACLE_HOME
csh: ----
% setenv ORACLE_HOME <path_to_ORACLE_HOME> Example:
% setenv ORACLE_HOME /u01/app/oracle/product/7.3.3
另外$ORACLE_HOME路徑應為實際路徑,不應是目錄連接(ln -s)
(2) $ORACLE_SID是否設置正確;
% echo $ORACLE_SID
(3).確信沒有設置$TWO_TASK
檢查 "TWO_TASK" 是否設置:
sh, ksh or on HP/UX only csh:
-----------------------------------
env |grep -i two
- or -
echo $TWO_TASK
csh:
----
setenv |grep -i two
如果有返回行比如:
TWO_TASK=
- or -
TWO_TASK=PROD
就需要取消著這些環境變量設置 :
sh or ksh:
----------
unset TWO_TASK
csh:
----
unsetenv TWO_TASK
(4) 檢查oracle 文件的權限:
% cd $ORACLE_HOME/bin
% ls -l oracle
權限應為:rwsr-s--x, or 6751.
如果不是:
% chmod 6751 oracle
(5). 檢查當前所連接的操作系統用戶是否是"osdba" 並且已經定義在:
"$ORACLE_HOME/rdbms/lib/config.s"
or
"$ORACLE_HOME/rdbms/lib/config.c".
通常應為dba
% id uid=1030(oracle) gid=1030(dba)
可以如果"gid" 是 "dba" , "config.s" or "config.c"
裡面應該有: /* 0x0008 15 */ .ascii "dba\0"
如果沒有添加目前的操作系統用戶到dba 組,或則手工編輯更改config.c並且:%relink oracle
(6).所需要的文件系統是否正確mount
%mount
(7) 目前身份是否是"root" 並且操作系統環境變量 "USER", "USERNAME", and "LOGNAME" 沒有設置成"root".
root用戶是特例,除非當前組是dba 組,否則不能connect internal.
把root用戶當前組改為dba組:
# newgrp dba
-----最好不要以root管理數據庫;
(8).檢查"/etc/group" :
是否存在重複行
% grep dba /etc/group
dba::1010:
dba::1100:
如果有,刪掉沒有用的。
(9).確信停掉的instance沒有佔用內存資源
比如:ipcs -b
T ID KEY MODE OWNER GROUP SEGSZ
Shared Memory:
m 0 0x50000ffe --rw-r--r-- root root 68
m 1601 0x0eedcdb8 --rw-r----- oracle dba 4530176
可以看到1601 被oracle 使用,刪掉.
-------注意是否啟動了多個instance
% ipcrm -m 1601
(10).如果同時還有ora-12705 錯誤檢查一下環境變量:
"ORA_NLS", "ORA_NLS32", "ORA_NLS33" ,"NLS_LANG".
(11).檢查 "ORACLE_HOME" and "LD_LIBRARY_PATH 環境變量:
$ LD_LIBRARY_PATH=$ORACLE_HOME/lib
$ export LD_LIBRARY_PATH
$ ORACLE_HOME=/u01/app/oracle/product/8.0.4
$ export ORACLE_HOME
(12).當前的instance 所再的磁盤是否有足夠的磁盤空間
df -k
(13).用戶對/etc/passwd 是否有讀權限。
(14).如果使用mts 方式,確信你的連接使用dedicade server 方式。
(15).安裝ORACLE所需操作系統補丁是否打全。ORACLE 是否已經補丁到最新
### 解决ORA-01031: insufficient privileges错误的方案 ORA-01031错误通常表示用户尝试执行的操作需要更高的权限,但当前用户没有足够的权限。这种问题可能出现在多种场景中,例如启动数据库、修改用户密码或执行某些管理操作时。以下是一些常见原因及解决方案: #### 1. **检查用户权限** 需要确认当前用户是否具有执行该操作所需的权限。例如,在Oracle Restart环境中,如果使用`srvctl`命令启动数据库失败,可能是由于用户缺少必要的角色或权限[^1]。可以通过以下查询检查用户的权限: ```sql SELECT granted_role FROM dba_role_privs WHERE grantee = '<username>'; ``` 如果用户未被授予`DBA`角色或其他相关权限,则需要联系数据库管理员进行授权。 #### 2. **确保正确配置Job Role Separation** 在启用了Job Role Separation(职责分离)的环境中,不同用户负责不同的任务。如果`oracle`用户试图执行超出其职责范围的操作,可能会导致ORA-01031错误。可以检查环境变量和配置文件,确保正确的用户和角色分配[^1]。 #### 3. **验证Oracle Restart配置** 在Oracle Restart环境中,`srvctl`命令依赖于Grid Infrastructure来管理资源。如果配置不正确,可能导致权限不足的问题。可以检查以下内容: - 确保`oracle`用户属于`oinstall`和`dba`组。 - 验证`$ORACLE_HOME`和`$GRID_HOME`是否正确设置。 - 检查`/etc/oratab`文件中的条目是否正确。 #### 4. **解决PDB/CDB环境中的权限问题** 在多租户环境中(如CDB/PDB),ORA-01031错误可能与容器用户权限有关。例如,普通用户无法在PDB中执行某些管理操作[^3]。可以通过以下步骤解决问题: - 确认用户是否具有`SYSDBA`或`SYSOPER`权限。 - 如果用户需要修改其他用户的密码,必须确保其具有`ALTER USER`权限。 ```sql GRANT ALTER USER TO <username>; ``` #### 5. **检查操作系统权限** 某些情况下,ORA-01031错误可能与操作系统权限有关。例如,如果`oracle`用户无法访问某些关键文件或目录,也可能导致此错误。可以检查以下内容: - 确保`oracle`用户对`$ORACLE_HOME`及其子目录具有读写权限。 - 验证`orapwd`文件是否存在,并且具有正确的所有权和权限。 #### 6. **重置密码或重新配置用户** 如果问题是由于用户密码过期或配置错误引起的,可以尝试重置密码。例如: ```sql ALTER USER dbsnmp IDENTIFIED BY "new_password"; ``` 如果仍然出现ORA-01031错误,可能需要检查用户是否被锁定或禁用[^2]。 ### 示例代码 以下是一个示例脚本,用于检查和修复常见的权限问题: ```sql -- 检查用户权限 SELECT granted_role FROM dba_role_privs WHERE grantee = 'C##<secondary DV acct manager>'; -- 授予必要权限 GRANT DBA TO C##<secondary DV acct manager>; -- 修改用户密码 ALTER USER dbsnmp IDENTIFIED BY "new_password"; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值