Oracle 19c修改pga报ORA-00093、ORA-01078错进行分析处理

在同事修改Oracle数据库的pga时,出现了如下错误:
计划修改值:
alter system set pga_aggregate_limit=40G scope=spfile sid='*';
alter system set pga_aggregate_target=20G scope=spfile sid='*';

SQL> shu immediate 

Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> 
SQL> startup
ORA-00093: pga_aggregate_limit must be between 64000M and 100000G
ORA-01078: failure in processing system parameters

根据报错提示,pga_aggregate_limt至少要64000M,而实际设置大小为40G,所以导致实例启动失败。
在RAC的另一个节点,重新设置pga_aggregate_limt大小为80G:
alter system set pga_aggregate_limit=80G scope=spfile sid='*';

设置完成后可以正常启动实例。
SQL> startup
ORACLE instance started.

Total System Global Area 1.9327E+11 bytes
Fixed Size                 37484576 bytes
Variable Size            3.0065E+10 bytes
Database Buffers         1.6267E+11 bytes
Redo Buffers              499384320 bytes
Database mounted.
Database opened.


PGA参数设置关系:
        PGA_AGGREGATE_LIMIT与PGA_AGGREGATE_TARGET是Oracle数据库中与进程全局区(PGA)内存管理相关的两个重要参数。
以下是对这两个参数及其设置关系的详细解释:
1、PGA_AGGREGATE_TARGET
        PGA_AGGREGATE_TARGET是一个初始化参数,用于指定Oracle数据库在自动PGA内存管理模式下,尝试分配给SQL工作区的PGA内存的目标值。该参数起到的是一个目标值的作用,而非硬性限制。Oracle数据库会根据实际工作负载和内存使用情况,动态地调整分配给SQL工作区的PGA内存量,以尝试达到这个目标值。

        如果PGA_AGGREGATE_TARGET未设置,则自动PGA管理不会启动。其默认值通常是10MB与SGA的20%中的较大者。DBA可以通过ALTER SYSTEM命令来设置或修改这个参数。
2、PGA_AGGREGATE_LIMIT
        PGA_AGGREGATE_LIMIT是Oracle 12c引入的一个新参数,用于限制数据库实例可以使用的PGA内存总量的硬性上限,当PGA内存使用量超过这个限制时,Oracle数据库会按照一定顺序中断或终止使用了最多不可优化PGA内存的会话或进程,以确保系统的稳定性和响应性。

        PGA_AGGREGATE_LIMIT的默认值会根据Oracle数据库的版本和内存配置的不同而有所差异。例如,在Oracle 12.1版本中,其默认值为2GB或PGA_AGGREGATE_TARGET的200%(以较大者为准),并且不会超过物理内存大小减去总SGA大小的120%。

        在Oracle 12.2及更高版本中,如果设置了MEMORY_TARGET,则PGA_AGGREGATE_LIMIT默认值为 MEMORY_MAX_TARGET;如果未设置MEMORY_TARGET,则默认为PGA_AGGREGATE_TARGET的200%或90%的物理内存减去SGA的大小(以较大者为准)。DBA同样可以通过ALTER SYSTEM命令来设置或修改这个参数。
3、设置关系
        PGA_AGGREGATE_TARGET应小于PGA_AGGREGATE_LIMIT。为了确保Oracle数据库在自动PGA内存管理模式下能够稳定运行,并避免内存使用过量导致系统不稳定或无法响应的情况,DBA在设置这两个参数时,应确保PGA_AGGREGATE_TARGET的值小于PGA_AGGREGATE_LIMIT的值。
        PGA_AGGREGATE_LIMIT和PGA_AGGREGATE_TARGET都是可以动态设置的参数,无需数据库重新启动即可生效。这允许DBA根据数据库的实际工作负载和内存使用情况,灵活地调整这两个参数的值。
        综上所述,PGA_AGGREGATE_LIMIT和PGA_AGGREGATE_TARGET是Oracle数据库中与PGA内存管理紧密相关的两个参数。它们共同决定了数据库实例可以使用的PGA内存量的上限和目标值。DBA在设置这两个参数时,应根据数据库的实际需求和内存配置进行合理配置和调整。

<think>好的,我现在需要解决用户遇到的Oracle数据库启动ORA-00845。这个误提示MEMORY_TARGET在这个系统上不被支持。根据用户提供的引用内容,特别是引用4和5,问题似乎与/dev/shm共享内存的大小有关。我需要先理解这个误的具体原因,然后找到解决方法。 首先,用户提到在Oracle 11g中引入了自动内存管理参数MEMORY_TARGET,这个参数需要依赖系统的共享内存文件系统/dev/shm。如果这个共享内存的大小小于MEMORY_TARGET的设置,就会导致启动失败,ORA-00845。因此,解决这个问题的关键在于调整/dev/shm的大小或者调整MEMORY_TARGET的值,使其不超过可用共享内存。 接下来,我需要确定具体的解决步骤。根据引用4和5,可能的解决方法有两种:一种是修改/dev/shm的大小,另一种是调整数据库的内存参数。我需要详细说明这两种方法,并给出操作步骤。例如,修改/dev/shm可能需要编辑/etc/fstab文件并重新挂载,或者临时调整其大小。而调整内存参数则需要通过SQL命令修改MEMORY_TARGET和MEMORY_MAX_TARGET的值,或者直接禁用自动内存管理,改为手动管理SGA和PGA。 此外,用户提供的引用中还有具体的误示例,比如引用2和3中的启动误日志,这进一步确认了问题的一致性。需要确保在操作步骤中考虑到不同Oracle版本的情况,比如11g和19c,以及可能的权限问题,比如使用root用户来调整共享内存的大小。 最后,要验证解决方法是否有效,可能需要重启数据库实例,并检查误是否消失。同时,提醒用户在修改系统设置前备份重要数据,避免操作失误导致其他问题。</think>### 解决Oracle启动ORA-00845的方法 #### **误原因** ORA-00845误是由于Oracle的自动内存管理(AMM)功能依赖系统共享内存文件`/dev/shm`,但其大小不足导致的。当参数`MEMORY_TARGET`或`MEMORY_MAX_TARGET`设置的值超过`/dev/shm`的可用空间时,数据库启动会失败[^4][^5]。 --- #### **解决步骤** ##### **方法1:扩大`/dev/shm`大小** 1. **查看当前`/dev/shm`大小** ```bash df -h /dev/shm ``` 输出示例: ``` Filesystem Size Used Avail Use% Mounted on tmpfs 2.0G 0 2.0G 0% /dev/shm ``` 2. **临时调整大小(重启失效)** 挂载临时调整(例如调整为4GB): ```bash sudo mount -o remount,size=4G /dev/shm ``` 3. **永久调整大小** - 编辑`/etc/fstab`文件: ```bash sudo vi /etc/fstab ``` - 添加或修改以下行(例如调整为6GB): ``` tmpfs /dev/shm tmpfs defaults,size=6G 0 0 ``` - 重新挂载生效: ```bash sudo mount -o remount /dev/shm ``` --- ##### **方法2:调整Oracle内存参数** 1. **禁用自动内存管理(AMM)** 如果无法修改`/dev/shm`大小,可改为手动管理内存(需用`sysdba`登录): ```sql ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE; ALTER SYSTEM SET SGA_TARGET=2G SCOPE=SPFILE; -- 根据实际需求调整SGA和PGA ALTER SYSTEM SET PGA_AGGREGATE_TARGET=500M SCOPE=SPFILE; ``` 2. **降低`MEMORY_TARGET`值** 如果仍希望使用AMM,需确保`MEMORY_TARGET`不超过`/dev/shm`可用空间: ```sql ALTER SYSTEM SET MEMORY_MAX_TARGET=2G SCOPE=SPFILE; ALTER SYSTEM SET MEMORY_TARGET=2G SCOPE=SPFILE; ``` 3. **重启数据库** ```sql SHUTDOWN IMMEDIATE; STARTUP; ``` --- #### **验证是否解决** - 检查数据库状态: ```sql SELECT STATUS FROM V$INSTANCE; ``` - 确认参数生效: ```sql SHOW PARAMETER MEMORY_TARGET; SHOW PARAMETER MEMORY_MAX_TARGET; ``` --- #### **注意事项** - **权限问题**:修改`/dev/shm`需要`root`权限,操作前建议备份`/etc/fstab`[^2]。 - **兼容性**:Oracle 11g及以上版本才支持AMM功能,旧版本需手动管理内存[^5]。 - **生产环境**:调整内存参数时需评估业务负载,避免设置过小影响性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值