今天,在自己機器上裝了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;
