欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle内存占用过高和修改不当无法启动oracle实例的解决办法

程序员文章站 2022-04-09 15:02:07
今天,在自己机器上装了oracle 12c,发现Oracle的服务Oracle RDBMS Kenel Executable (OracleServiceORCL)占用内存高达5G,本人电脑内存才16G。如此高的占用率,真让人心疼。于是就对Oracle的内存进行调整。具体办法如下: 1. 在cmd命 ......

今天,在自己机器上装了oracle 12c,发现oracle的服务oracle rdbms kenel  executable (oracleserviceorcl)占用内存高达5g,本人电脑内存才16g。如此高的占用率,真让人心疼。于是就对oracle的内存进行调整。具体办法如下:

1. 在cmd命令中输入如下命令启动sqlplus:

sqlplus /nolog

2. sql启动后,连接数据库,命令如下:

conn / as sysdba;

3. 如果是oracle 11g以后版本,可以修改memory_max_target的值来设置自己想要内存值,我这里设置为1024m。

alter system set memory_max_target=1204m scope=spfile;

4. 关闭数据库实例

shutdown immediate

5.启动oracle实例,基于spfile里面设置情况。

startup

 

注意事项:

1)memory_max_target是memory_target的最大阈值,memory_target是oracle使用机器内存的总量,默认值为0,即由oracle自动根据机器内存来分配,memory_target = sga_target + pga_aggregate_target,当sga_target和pga_aggregate_target都设置为0时,oracle会自动根据memory_target对两者进行内存分配。

2)如果更改过sga_target和pga_aggregate_target的值,请用下面语句将其恢复0。记得不太清楚的,可以通过show parameter命令来查看内存的情况。

alter system set sga_target =0 scope = spfile;
alter system set pga_aggregate_target = 0 scope = spfile;

show parameter命令例子如下,注意下面命令的sga可以换成target或者memory来查看memory_max_target和memory_target的值。

show parameter sga;

3)如果是oracle 10g,不支持memory_max_target和memory_target这两个参数,内存的调整可以通过sga_target或sga_max_size来手动设置实现,注意sga_target必须要小于等于sga_max_size,否则oracle库会运行不起来。

alter system set sga_max_size=1024m scope=spfile; 
alter system set sga_target=1024m scope=spfile;

有时候犯糊涂设置错了,导致数据库实例运行不起来的话,可以通过从二进制配置文件spfile来创建pfile的文本文件,来手动修改解决,在由pfile重建spfile文件。例如我将sga_max_size和sga_target都设置为512m,就启动不起来了,启动时,错误为ora-00821: specified value of sga_target 512m is too small, needs to be at least 636m,这时候,可以通过下面四部解决。

(1). 在sqlplus里面由spfile创建pfile文件,为了方便,自定义pfile的存放目录为“e:\\ini.ora.temp”,不指定会默认为spfile同目录,本人在windows上的12c目录为"{oracle安装目录}\product\12.2.0\dbhome_1\database”目录下的spfileorcl.ora,文件名遵循格式spfile${sid}.ora。

create pfile='e:\\ini.ora.temp' from spfile;

(2). 因为pfile为文本文件,用文本应用程序打开你指定的路径文件来进行编辑,修改sga_max_size和sga_target为0,保存文件。

(3).由pfile来重建spfile文件

create spfile from pfile='e:\\ini.ora.temp';

(4).默认基于新的spfile,启动oracle实例。

startup

 

一些可能用到的其他命令:

显示spfile的文件存放路径:

show parameter spfile;

显示pfile的文件存放路径:

show parameter pfile;