文档解释
ORA-00842: DB_BLOCK_BUFFERS cannot be set with SGA_TARGET or MEMORY_TARGET
Cause: DB_BLOCK_BUFFERS was incompatible with SGA_TARGET and MEMORY_TARGET.
Action: Remove the incompatible parameter setting.
ORA-00842错误表明您正在尝试在 MEMORY_TARGET 或 SGA_TARGET 配置参数的环境中,将 DB_BLOCK_BUFFERS 设置到不合法的值 (注意: MEMORY_TARGET 和 SGA_TARGET 是 Oracle 11g 之后出现的新参数)。
官方解释
当一个受 MEMORY_TARGET 或 SGA_TARGET 参数控制的数据库实例初始化或重新启动时,Oracle会尝试基于提供的值来检查 DB_BLOCK_BUFFERS 参数。如果 DB_BLOCK_BUFFERS 被设置成不合法的值,就会出现ORA-00842错误。
在此情况下,您需要更改 DB_BLOCK_BUFFERS 参数值,从而将其与 MEMORY_TARGET 和 SGA_TARGET 相符,才能正确实例化 Oracle 数据库。
常见案例
– 您对 Oracle 数据库实例进行重新初始化时,出现ORA-00842错误
– 您尝试数据库实例启动时,报出ORA-00842错误
正常处理方法及步骤
1.首先确认您是否正在运行 MEMORY_TARGET 或 SGA_TARGET 参数:
SELECT name,value
FROM v$parameter
WHERE name IN (‘MEMORY_TARGET’,’SGA_TARGET’);
2.从输出结果中,检查哪一个参数正在使用,并根据下列对应情况调整 DB_BLOCK_BUFFERS 值:
a.如果 MEMORY_TARGET 被指定,请将 DB_BLOCK_BUFFERS 设定成 0 (零)
b.如果 SGA_TARGET 被指定,请将 DB_BLOCK_BUFFERS 的值设定为 “(大内存池总大小-非大内存池总大小)/ 数据库块
3.如果你在生产环境中,最好以 SPFILE 方式保存数据库参数值
ALTER SYSTEM SET DB_BLOCK_BUFFERS= SCOPE=SPFILE;
4.重新启动数据库,使参数配置生效
SHUTDOWN IMMEDIATE;
STARTUP;