ORA-01031: insufficient privileges与ORA-00845: MEMORY_TARGET not supported on this system——解决...

解决Oracle数据库中sys用户登录无权限问题,包括检查参数设置、重建密码文件及授权过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 以sys用户登录提示没有权限,如下所示:
[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 11 22:02:22 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-01031: insufficient privileges

Enter user-name: sys
Enter password:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0

 

一、查看remote_login_passwordfile 参数的值

SQL> show parameter password

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      EXCLUSIVE

 

说明:

remote_login_passwordfile参数取值情况

(参考http://wenku.baidu.com/view/0df570bc1a37f111f1855b9b.html):

 

1.exclusive,默认为该值。当取该值时,允许客户端以sysdba或sysoper权限登录到数据库实例中完成数

                   据库管理操作;且允许授予和回收sysdba或sysoper权限。

2.none值。当取该值时,禁止客户端以sysdba或sysoper权限登录到数据库实例中完成数据库管理操作;

               且禁止授予和回收sysdba或sysoper权限。

3.shared值。当取该值时,允许客户端以sysdba或sysoper权限登录到数据库实例中完成数据库管理操

                  作;但禁止授予和回收sysdba或sysoper权限。

 

二、查看v$pwfile_users视图是否有sys记录

SQL> select * from v$pwfile_users;
no rows selected

三、授权sysdba权限给sys用户,此时会无法授权,丢失密码文件

SQL> grant sysdba to sys;
grant sysdba to sys
*
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled

四、重建密码文件
[oracle@localhost ~]$ orapwd file=/oradata/oracle/112/database/orapworcl.ora password=qaz entries=10 force=y

OPW-00001: Unable to open password-file
注意 :密码文件的路径不能写错了。本centos系统的oracle密码文件是在/oradata/oracle/112/dbs这个路径下。
[oracle@localhost ~]$ orapwd file=/oradata/oracle/112/dbs/orapworcl.ora password=qaz entries=10 force=y
创建成功。

五、再次查看该视图,有sys记录了
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE

六、执行授权sysdba给sys用户,成功
SQL> grant sysdba to sys;

Grant succeeded.

七、再次以sys用户登录数据库,发现又报错了,内存不够。

 

[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 12 14:12:52 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn sys/xxx@orcl as sysdba
Connected to an idle instance.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
 

 

八、通过df -h查看,发现没有tmpfs文件系统了

九、增加tmpfs系统大小并挂载。查看我的另一篇博客 tmpfs文件系统

十一、再次启动oracle服务成功

 

SQL> startup
ORACLE instance started.

Total System Global Area  523108352 bytes
Fixed Size                  1337632 bytes
Variable Size             327157472 bytes
Database Buffers          188743680 bytes
Redo Buffers                5869568 bytes
Database mounted.
Database opened.
 


 

 

 

<think>好的,我现在需要帮助用户解决在CentOS 7虚拟机上安装Oracle 11g时遇到的ORA-00845错误。用户提到这个错误是“MEMORY_TARGET not supported”,我需要详细分析可能的原因和解决方法。 首先,ORA-00845错误通常Oracle的自动内存管理(AMM)相关,尤其是MEMORY_TARGET参数的设置。根据Oracle文档,这个错误发生的原因可能是系统没有足够的共享内存或tmpfs分区的大小不足。我需要回忆一下MEMORY_TARGET的工作原理,它依赖于/dev/shm(即tmpfs)的大小。如果用户设置的MEMORY_TARGET超过了/dev/shm的可用空间,就会导致这个错误。 接下来,我需要考虑用户的环境:CentOS 7虚拟机。虚拟机的内存分配和物理机不同,可能存在资源限制。用户可能在安装时没有正确配置共享内存或交换空间。例如,MEMORY_TARGET的值如果超过了tmpfs的大小,或者tmpfs本身没有正确挂载,就会触发这个错误。 然后,我需要回顾之前的对话。用户之前询问过在CentOS 7上安装Oracle 11g的基本参数设置,我提到了内存分配和交换空间的配置,可能用户按照建议设置了MEMORY_TARGET为可用内存的70%,但可能没有正确配置/dev/shm的大小。因此,现在的问题可能是如何调整tmpfs的大小或修改MEMORY_TARGET参数。 可能的解决步骤包括: 1. 检查当前/dev/shm的大小,确认是否足够。 2. 调整tmpfs的大小,使其至少等于MEMORY_TARGET的值。 3. 修改Oracle的内存参数,例如改用手动内存管理(SGA和PGA分开设置)。 4. 确保/etc/fstab中的tmpfs配置正确,避免重启后失效。 5. 检查交换空间是否足够,因为Oracle可能依赖交换空间来支持内存分配。 此外,可能需要用户提供具体的错误信息和当前系统配置,比如MEMORY_TARGET的设置值,以及df -h /dev/shm的输出,以进一步诊断问题。不过,用户没有提供这些细节,所以需要给出通用的解决方案。 还需要注意Oracle 11g在虚拟化环境中的兼容性问题,比如某些内核参数是否需要调整,或者是否使用了正确的Oracle版本(32位 vs 64位)。例如,用户提到的引用是32位的安装指南,但CentOS 7通常是64位系统,可能导致兼容性问题,但用户的问题可能此无关,因为错误更直接相关于内存设置。 最后,总结解决步骤,分点说明,并建议用户如何验证每个步骤是否成功,比如通过重启实例或重新挂载tmpfs。同时,提醒用户如果问题持续,可能需要进一步检查其他配置,如内核参数或Oracle的安装日志。</think>### **ORA-00845 错误分析解决方案** **错误原因**: 当 Oracle 11g 的 `MEMORY_TARGET` 参数值超过系统 `/dev/shm`(共享内存/tmpfs 文件系统)的可用空间时,会触发此错误[^1]。`MEMORY_TARGET` 是 Oracle 自动内存管理(AMM)的核心参数,依赖 `/dev/shm` 存储内存管理信息。 --- ### **具体解决步骤** #### **1. 检查当前 `/dev/shm` 大小** ```bash df -h /dev/shm ``` - 默认大小通常为物理内存的 **50%** - 若输出显示不足(例如 `1G`),需扩展其容量 --- #### **2. 临时调整 `/dev/shm` 大小** ```bash mount -t tmpfs shmfs -o size=<新大小> /dev/shm ``` - **示例**: ```bash mount -t tmpfs shmfs -o size=2G /dev/shm # 调整为 2 GB ``` - **验证**: ```bash df -h /dev/shm ``` --- #### **3. 永久修改 `/dev/shm` 配置** 编辑 `/etc/fstab` 文件,添加以下行: ```bash tmpfs /dev/shm tmpfs defaults,size=<新大小> 0 0 ``` - **示例**: ```bash tmpfs /dev/shm tmpfs defaults,size=2G 0 0 ``` **生效命令**: ```bash mount -o remount /dev/shm ``` --- #### **4. 调整 Oracle 内存参数** 若仍报错,可尝试以下两种方案: **方案一:禁用 AMM,改用手动内存管理** ```sql ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE; ALTER SYSTEM SET SGA_TARGET=<SGA大小> SCOPE=SPFILE; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=<PGA大小> SCOPE=SPFILE; ``` - **示例**(分配 1.5 GB 内存): ```sql ALTER SYSTEM SET SGA_TARGET=1200M SCOPE=SPFILE; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=300M SCOPE=SPFILE; ``` **方案二:降低 `MEMORY_TARGET` 值** 修改 `SPFILE` 或 `init.ora` 文件: ```sql ALTER SYSTEM SET MEMORY_TARGET=<新值> SCOPE=SPFILE; ``` - **新值需小于 `/dev/shm` 可用空间** --- #### **5. 重启 Oracle 实例** ```bash sqlplus / as sysdba SQL> shutdown immediate; SQL> startup; ``` --- ### **附加验证** 1. **检查交换空间是否充足**: ```bash free -m # 确保交换空间 ≥ 物理内存 ``` 2. **确认 `/dev/shm` 挂载参数**: ```bash mount | grep shm ``` --- ### **关键原因总结** | 问题根源 | 解决方法 | |----------|----------| | `/dev/shm` 容量不足 | 扩展 tmpfs 大小 | | 虚拟内存(交换空间)不足 | 增加交换文件或分区 | | `MEMORY_TARGET` 设置过高 | 调整参数或改用 SGA/PGA 手动管理 | [^1]: Oracle AMM 要求 `/dev/shm` 至少能容纳 `MEMORY_MAX_TARGET` 或 `MEMORY_TARGET` 参数值 [^2]: 虚拟环境中需确保宿主机资源充足,避免过度分配 --- ### **相关问题** 1. **如何为 Oracle 11g 创建额外的交换文件?** 2. **在虚拟机中如何优化 Oracle 内存分配?** 3. **Oracle 手动内存管理(SGA/PGA)自动管理的性能差异?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值