ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more informati...

本文详细阐述了解决32位系统上32位数据库配置冲突的方法,包括调整SGA参数、禁用自动内存管理、替换旧参数及修改数据库配置文件等步骤。最终通过修改streams_pool_size解决了问题,避免了对数据库性能的负面影响。

    这篇文章是上篇文章”Expdp 导数错误 ORA-00832”的延续,前几天工作比较忙、累,直到今天才整理发出来。这个数据库实例的参数设置比较诡异其实是有原因的,由于这台数据库服务器系统是32位,数据库也是32位的。对于绝大部分32位系统上的32位数据库,SGA 最大的设置都不能超过2G,有的系统最大值甚至不能超过1.7G左右。DBA为了让内存充分利用,不至于浪费内存资源,于是想让SGA_MAX_SIZE 最大化,对数据库相关参数做了调整,设置参数USE_INDIRECT_DATA_BUFFERS为TRUE,调整SGA_MAX_SIZE为 3424M,然而使用USE_INDIRECT_DATA_BUFFERS参数,就不能在使用其他9i以后新增的内存控制参数了,比如 SGA_TARGET、DB_CACHE_SIZE等等,必须通过DB_BLOCK_BUFFERS参数来指定内存的容量。所以SGA_TARGET为 0,关闭了ASSM特性。下面述说一下当时的解决问题思路和过程。

clip_image002

首先我试着启用ASSM,设置sga_target的大小跟sga_max_size的大小一致,如下所示,结果报错:

epps> alter system set sga_target=3424M scope=both;

alter system set sga_target=3424M scope=both

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information

使用命令“oerr 错误类型 错误编号” ,查看错误信息的详细原因和Action,

[oracle@get-orasvr02 db_com_sql]$ oerr ora 00824

00824, 00000, "cannot set sga_target due to existing internal settings, see alert log for more information"

// *Cause: Unable to set sga_target due to current parameter settings.

// *Action: See alert log for more information.

通过告警日志查看详细出错信息,结果查看告警日志发现如下提示信息:

Cannot set sga_target with db_block_buffers set

Tue Sep  2 16:08:51 2013

在Metalink上查询了一下这方面的资料,发现SGA_TARGET > 0 不能与db_block_buffer这个过时的参数共存,否则就会出现ORA-00824错误。具体信息如下

Cause

If you enable automatic SGA Management by setting SGA_TARGET >0 and also have db_block_buffers(Obsolete parameter) in your parameter file (pfile/spfile)
Startup of Database fails with ORA-00824 Error

Solution

A) Either you need to disable the Automatic SGA Mangement by setting SGA_Target=0

==OR==

B) Replace the db_block_buffers parameter with db_cache_size parameter

STEPS TO RESOLVE

1. Make an OS copy of the spfile if you do not have a pfile for this database
2. Edit the copy of the spfile to remove the binary stuff before the first parameter
3. Remove the binary stuff after the last parameter.
4. Edit parameters needed to be changed.
5. Save the file and note name and location.
6. Start sqlplus and connect / as sysdba
7. Issue startup pfile = '<full path and file name of file just updated>'
8. Create spfile from pfile.

DB_BLOCK_BUFFERS cannot be combined with the dynamic DB_CACHE_SIZE parameter; combining these parameters in the same parameter file will produce an error.

epps> show parameter db_block_buffers

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_block_buffers                     integer     240000

epps> show parameter db_cache_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_cache_size                        big integer 0

epps>

clip_image004

解决步骤:

Step 1:备份spfile文件,避免修改数据库参数导致数据库宕机或启动不了的意外情况出现。

epps> show parameter spfile

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

spfile                               string      /u01/app/oracle/product/10.2.0

                                                 /db_1/dbs/spfileepps.ora

epps> !

cd  /u01/app/oracle/product/10.2.0/db_1/dbs/

cp spfileepps.ora  spfileepps.ora.bak

epps> create pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/pfile_20130903_bak.ora' from spfile;

File created.

clip_image006

Step 2: 修改pfile下的数据库参数,例如去掉*.db_block_buffers=240000,如果只删除db_block_buffers参数,这时启动数据库就会报ORA-32006、ORA-00385错误,如下图所示

epps> startup pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/pfile_20130903_bak.ora'

        ORA-32006: PARALLEL_AUTOMATIC_TUNING initialization parameter has been deprecated

        ORA-00385: cannot enable Very Large Memory with new buffer cache parameters

 

clip_image008

 

所以还需要修改 USE_INDIRECT_DATA_BUFFERS等参数。到此,问题出现的来龙去脉,解决方法都已全部给出,当然最后还是直接修改 streams_pool_size来解决问题方便,如果将SGA_MAX_SIZE改回去,肯定会对数据库性能产生比较大的影响。

 

 

### 解决 ORA-01078 错误的方法 ORA-01078 错误表示在处理系统参数时出现故障,通常是由于参数文件损坏、缺失或者参数设置错误导致。以下是一些可能的解决办法: #### 检查参数文件是否存在和可读 确认参数文件(pfile 或 spfile)存在且数据库用户有读取权限。例如,如果使用 pfile,可以使用以下命令检查文件是否存在: ```bash ls -l /path/to/your/pfile.ora ``` #### 检查参数文件内容 检查参数文件中是否有语法错误或不支持的参数设置。可以使用文本编辑器打开参数文件进行检查。例如: ```bash vi /path/to/your/pfile.ora ``` #### 重新创建参数文件 如果参数文件损坏,可以尝试重新创建。可以使用默认的参数文件模板作为基础,然后根据需要进行修改。例如,使用 SQL*Plus 重新创建 spfile: ```sql CREATE SPFILE FROM PFILE='/path/to/your/pfile.ora'; ``` ### 解决 ORA-00824 错误的方法 ORA-00824 错误表示由于现有的内部设置,无法设置 SGA_TARGET 或 MEMORY_TARGET。这通常是因为手动设置了一些与自动内存管理相关的参数,导致与 SGA_TARGET 或 MEMORY_TARGET 冲突。以下是一些解决办法: #### 检查并调整参数设置 检查参数文件中是否手动设置了 SGA 组件(如 SHARED_POOL_SIZE、DB_CACHE_SIZE 等)和 SGA_TARGET 或 MEMORY_TARGET。如果同时设置了这些参数,可能会导致冲突。可以尝试只使用 SGA_TARGET 或 MEMORY_TARGET 进行自动内存管理,或者手动设置所有 SGA 组件而不使用 SGA_TARGET 和 MEMORY_TARGET。 例如,在参数文件中只保留 SGA_TARGET: ```plaintext sga_target = 2G shared_pool_size = 0 db_cache_size = 0 ``` #### 重新创建参数文件 如果问题仍然存在,可以尝试重新创建参数文件,确保没有冲突的参数设置。 ```sql CREATE SPFILE FROM PFILE='/path/to/your/pfile.ora'; ``` #### 查看告警日志 查看告警日志以获取更多详细信息,日志中可能会指出具体的冲突参数。告警日志通常位于 $ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/trace/alert_<instance_name>.log
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值