(一)ora-01031:insufficient privileges
1.sqlplus "/ as sysdba" 连不上,报ora-01031:insufficient privileges解决方法
 
select instance_name from v$instance;#查看oracle实例名
 
SQL> select instance_name from v$instance;
INSTANCE_NAME
--------------------------------
orcl
 
 
(1)检查sqlnet.ora(WINDOWS下位于%ORACLE_HOME%NETWORKADMIN目录)是否包含这句:SQLNET.AUTHENTICATION_SERVICES=(NTS),没有的话加上
(2)检查登陆的用户是不是在包含在ORA_DBA组中,
windows上是(administrator或安装oracle时候使用的用户),域用户没有连上域服务器时就可能出现这种现象;
linux、unix上root或安装oracle的授权账户
SQL> select * from v$pwfile_users;
USERNAME                                                     SYSDBA        SYSOPER

------------------------------------------------------------ ----------  ---------
SYS                                                                 TRUE            TRUE
 
如果返回空,则SYS无dba权限
SQL> grant sysdba to sys;
grant sysdba to sys
*
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled
此次应重建或修改密码文件,详见第(4)步
 
V$PWFILE_USERS
这个视图列出从口令文件中导出的授予SYSDBA和SYSOPER权限的用户。
列 数据类型 说明
USERNAME
VARCHAR2(30)
包含在口令文件中的用户名
SYSDBA
VARCHAR2(5)
如果此列的值为TURE,则该用户可利用SYSDBA权限进行连接
SYSOPER
VARCHAR2(5)
如果此列的值为TURE,则该用户可利用SYSOPER权限进行连接
(3)要保证 remote_login_passwordfile 参数 = EXCLUSIVE
SQL> show parameter password
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
remote_login_passwordfile            string
EXCLUSIVE
#---------如果不是运行
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
#/*-------------------------
REMOTE_LOGIN_PASSWORDFILE=
{NONE | SHARED}
REMOTE_LOGIN_PASSWORDFILE specifies whether Oracle checks for a password file.
 
Values:
  • NONE
    Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system.
  • SHARED
    One or more databases can use the password file. The password file can contain SYS as well as non-SYS users.
Note:
The value EXCLUSIVE is supported for backward compatibility. It now has the same behavior as the value SHARED.
#-----------------------*/
(4)看看是否需要使用orapassw生成口令文件
比如机器是windows系统:
orapwd file="D:/oracle/product/10g/db_1/database/PWDoratest.ora" password=gp
oswong entries=10
 
SQL> select * from v$pwfile_users;
USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
SYS                            TRUE  TRUE
SYS正常显示出来,重新在远程以SYSDBA登录,可正常使用。
 
(二)ORA-01925: maximum of 30 enabled roles exceeded
sysdba登陆oracle
#-------------------1.查看oracle数据库最大角色数
SQL> show parameter role;
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
max_enabled_roles                    integer
30
os_roles                             boolean
FALSE
remote_os_roles                      boolean
FALSE
SQL>
 
 
SQL> show parameter max_enabled_roles
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
max_enabled_roles                    integer
30
SQL>
#-------------------2.修改最大角色数
SQL> alter system set max_enabled_roles=500 scope=spfile;
alter system set max_enabled_roles=500 scope=spfile
*
ERROR 位于第 1 行:
ORA-00068: 值 500 对参数 max_enabled_roles 无效,必须在 1 和 148 之间
SQL> alter system set max_enabled_roles=148 scope=spfile;
系统已更改。
#-------------------3.系统重启,修改参数生效
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  139533192 bytes
Fixed Size                   453512 bytes
Variable Size             113246208 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter role
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
max_enabled_roles                    integer
148
os_roles                             boolean
FALSE
remote_os_roles                      boolean
FALSE