共计 1823 个字符,预计需要花费 5 分钟才能阅读完成。
今天,在自己机器上装了 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;