本想玩玩更改 Oracle SGA的。 没想到碰到的事情还不少。 下面就来说说这个可怕的过程。
开始, 更改sga成功。
SQL> sqlplul /nolog
SQL> conn as sysdba
SQL> alter system set sga_max_size=1500m scope=spfile;
可当我重启数据库的时候却悲剧了, 数据库启动失败。 提示某些参数设置太小。 下面就开始了恢复数据库的历程了 。
环境:
Oracle: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
OS:
HP-UX B.11.31
Version: U (unlimited-user license)
刚开始, 按照数据库的错误提示, 某些值设置小,(例如 sga_max_size)。于是就在目录 。。。\admin\sid\pfile\创建了一个pfile 文件init.ora, 内容是:
SPFILE='$Oracle_HOME\dbs\spfilesid.ora'
sga_max_size=1800m
在sqlplus 里面, 继续启动数据库
startup pfile=init.ora
大家主要路径, 我用的是相对路径。 可仍然启动失败, 说其他的参数设置的太小。
这时候, 我想如果继续这样设置下去的话, 那我的设置多少具体的参数啊。 而且每一个具体内存参数的大小, 我也不太清楚设置多少为最佳。
突然想起来, Oracle11g, 是有自动内容管理的Automatic Memory Management (AMM)的。 我只要设置MEMORY_TARGET 和 MEMORY_MAX_TARGET的值就好了.
Oracle自动帮我们优化里面每种类型的内存大小。 像SGA, PGA。 SGA中的shared pool, buffer cache, large pool, java pool 和其它。
这里简单的引入下 MEMORY_TARGET和MEMORY_MAX_TARGET的概念。
MEMORY_TARGET specifies the Oracle system-wide usable memory.
MEMORY_MAX_TARGET (…) decide on a maximum amount of memory that you would want to allocate to the database for the foreseeable future.
其实这写值的大小限制, 还跟我们mount上的资源大小有关。 这个就飘过。 大家可以看看这篇文章, 关于那两个值大小可以设置为多大及可能空间不足的情况下的解决方案 [url] http://www.ora600.be/news/oracle-11g-memorytarget-memorymaxtarget-and-devshm[/url]
接下来, 把pfile里面的sga_max_size=1800m 删掉。 现在的内容是:
SPFILE='$ORACLE_HOME/dbs/spfileslamdev.ora'
memory_max_target=3000M
memory_target=2800M
改好后, 在sqlplus里 启动数据库:
SQL> startup pfile=init.ora
这下数据库终于可以成功启动了。 哈哈
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 3008M
sga_target big integer 2512M
但别高兴的太早, 还是shutdown 再 startup 下比较保险。
SQL> shutdown immediate
数据库成功停掉。
SQL> shartup
这次, 数据库更第一次一样, 还是失败。 这下是因为没有把更改的东西写进spfile。 只要重来:
SQL>startup pfile=init.ora
但这次也有错误, 提示share空间不够。 问题还挺多哈。
我以前有看过类似的错误, 大概是 share里的东西还在运行。 这个有workaround.
先把spfile copy 一份, 然后打开spfile进行更改保存。 随便改, 因为我们就是要破坏spfile。 改好后, 启动数据库
SQL>startup
这时肯定是失败的。 然后把我们之前备份的那个spfile恢复。 从pfile启动:
SQL>startup pfile=init.ora
这下可以成功启动了。 把内容更改进spfile:
SQL>alter system set memory_max_target=3000m scope=spfile;
... 成功更改
SQL>alter system set memory_target=2800m scope=spfile;
... 成功更改
这下都做好了, 停掉数据库再启动。 一切ok了。 随便玩玩, 害的我晚饭推迟3个小时。
分享到:
相关推荐
注意:在 Oracle 11g 中,`sga_max_size` 不能大于 `memory_max_size`。 3. **重启数据库实例**: 修改参数后,需要立即关闭并重新启动数据库实例以应用更改: ``` shutdown immediate; start up; ``` 4. **...
6. 在修改 SGA 大小时,需要注意 SGA_MAX_SIZE、SGA_TARGET、MEMORY_TARGET 和 MEMORY_MAX_TARGET 的值的关系,确保其协调一致。 结论 修改 SGA 大小需要谨慎,需要根据实际情况进行调整,避免引发一系列错误。...
MEMORY_TARGET是Oracle 11g引入的一个动态内存管理特性,用于自动管理SGA和PGA内存的大小。 首先,需要了解MEMORY_TARGET参数的作用。在Oracle中,SGA(System Global Area)和PGA(Program Global Area)是两个...
"Oracle 11g调整物理内存提示...我们还讨论了 Oracle 11g 中的内存管理机制,包括 MEMORY_TARGET、MEMORY_MAX_TARGET 和 SGA_TARGET 三个参数的作用。通过正确地设置这些参数,可以提高 Oracle 数据库的性能和稳定性。
- **自动内存管理(Automatic Shared Memory Management, ASMM)**:如果设置了`SGA_TARGET`参数为非零值,则会启用ASMM。这允许Oracle根据内存需求自动调整SGA中自动管理的组件大小。 - **启用条件**:要启用ASMM,...
当`MEMORY_TARGET`被设置为非零值时,Oracle会自动管理SGA(System Global Area)和PGA(Program Global Area)之间的内存分配,确保整个实例的内存使用不会超出设定的目标值。这种方式比传统的固定内存分配方式更灵活,...
调整参数后引起,ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3 2768M 的解决方案
根据系统类型、DB版本和OS内存自动计算Oralce建议的memory_target、SGA和PGA大小
MEMORY_TARGET = SGA_TARGET + max(PGA_AGGREGATE_TARGET, maximum PGA allocated) = 272M + max(90M, 120M) = 392M (272M + 120M) ``` ### 设置`MEMORY_MAX_TARGET` 为了防止数据库实例消耗过多的系统资源,...
1. **动态内存管理**:Oracle 11g的动态内存管理是通过两个关键参数来实现的:`Memory_target` 和 `Sga_target`。 - 当`Memory_target`和`Sga_target`都为0时,SGA的自动管理不启用。 - 如果`Memory_target`为0...
MEMORY_TARGET = sga_target + MAX(pga_aggregate_target, maximum PGA allocated) ``` - 其中,假设 `sga_target` 的值为272M,`pga_aggregate_target` 的值为90M,`maximum PGA allocated` 的值为120M,则: `...
当设置了`MEMORY_TARGET`时,Oracle会自动管理SGA和PGA的内存分配,以确保整个实例的内存使用效率最大化。 2. **`MEMORY_MAX_TARGET`**:该参数定义了数据库实例可以使用的最大物理内存上限,其值应大于或等于`...
Oracle可以随时调节各个区域的大小,使之达到系统性能最佳状态的最合理大小,并且控制他们之和在SGA_TARGET指定的值之内。 在10g中,可以使用一个新参数SGA_TARGET来设定实例所需的SGA最大值,并替代以上参数。假设...
可以使用`V$PGA_TARGET_ADVICE`视图获取Oracle对于PGA调整的建议,`V$SGA_ADVICE`和`V$SGA_TARGET_ADVICE`则用于SGA的调优。此外,`V$SGA`和`V$PGA`视图也能提供当前内存使用情况的详细信息。 6. **性能测试**:...
修改`memory_target`为大于1GB的值,然后创建新的SPFILE并重启数据库。 2. **MEMORY_TARGET不支持**: 某些系统可能不支持`MEMORY_TARGET`,此时可以通过调整其他相关参数来满足内存需求。 3. **临时文件系统...
关键在于正确理解和调整`MEMORY_TARGET`与`SGA_TARGET`、`PGA_AGGREGATE_TARGET`之间的关系,确保数据库有足够的内存资源来支持其正常运行。此外,了解PFILE和SPFILE的区别及使用方法也是非常重要的,这有助于在...
将`memory_max_target`和`memory_target`设置为0,手动设定`sga_max_size`、`sga_target`和`pga_aggregate_target`。 - `memory_max_target`和`memory_target`控制整个数据库实例的总内存使用量。 - `sga_max_...
- **SGA**: Shared Global Area (SGA) 是一组共享内存结构,这些内存结构由 Oracle 数据库实例中的所有进程所共享。 - **PGA**: Program Global Area (PGA) 是由服务器进程为每个用户进程分配的一块私有内存区域。 ...