http://space.itpub.net/13177610/viewspace-671812
sga_target是動态參數,可以調整後馬上生效的
但是前提是目前配置設定的sga_max_size下必須能夠承載配置設定的記憶體量
這個參數的值隻有0和非零兩種選擇,非零時時和sga_max_size大小保持一緻的
是以如果要吧sga_target改成大于sga_max_size的值就必須按照靜态參數的改法,重新啟動執行個體
重新開機後預設的sga_max_size會自動調整到和sga_target一樣大小的
---------------------
版本
SQL> select * from
v$version;
BANNER
--------------------------------------------------------------------------------
Oracle
Database 10g Enterprise Edition
Release10.1.0.2.0 - Prod
PL/SQL Release
10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for 32-bit
Windows: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 -
Production
使用spfile
SQL> show parameter spfile
NAME
TYPE VALUE
------------------------------------
---------------------- ------------------------------
spfile
string
F:\ORACLE\PRODUCT\10.1.0\DB_1\
調整前
SQL> set wrap off
SQL> set linesize 159
SQL> show
parameter sga
NAME TYPE
VALUE
------------------------------------ ----------------------
------------------------------
lock_sga boolean
FALSE
pre_page_sga boolean
FALSE
sga_max_size big integer
300M
sga_target big integer
調整為小于sga_max_size值
SQL> alter system set sga_target=200m;
System
altered.
SQL> show parameter sga
NAME
TYPE VALUE
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size big
integer 300M
sga_target big integer
300M
調整為大于sga_max_size值
SQL> alter system set sga_target=500m;
alter system set
sga_target=500m
*
ERROR at line 1:
ORA-02097: parameter cannot be
modified because specified value is invalid
ORA-00823: Specified value of
sga_target greater than sga_max_size
按照靜态參數的方式調整
SQL> alter system set sga_target=500m
scope=spfile;
System altered.
SQL> show parameter
sga
重新開機驗證
SQL> shutdown immediate
Database closed.
Database
dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance
started.
Total System Global Area 524288000 bytes
Fixed Size
789672 bytes
Variable Size 145486680 bytes
Buffers 377487360 bytes
Redo Buffers 524288
bytes
Database mounted.
Database opened.
500M
http://blog.csdn.net/fw0124/article/details/6757368
Oracle9i引入pga_aggregate_target,可以自動對PGA進行調整;
Oracle10引入sga_target,可以自動對SGA進行調整。
Oracle11g則對這兩部分進行綜合,引入memory_target,可以自動調整所有的記憶體,這就是新引入的自動記憶體管理特性。
下面我們通過以下的幾個指令來讓大家清楚memory_target
的設定與PGA與SGA的關系:
SQL> alter system set memory_target=200m
SQL> alter system set sga_target=0
SQL> alter system set
pga_aggregate_target=0 scope=spfile;
SQL> shutdown
immediate;
Database dismounted.
ORACLE instance shut
down.
ORACLE instance started.
Total System
Global Area 209235968 bytes
Fixed Size 1298920 bytes
Variable Size
150998552 bytes
Database Buffers 54525952 bytes
Redo Buffers 2412544
opened.
設定memory_target參數後,實際上Oracle會自動設定并調整以下兩個參數來配置設定SGA和PGA的記憶體,這和Oracle10g自動設定sga_target後配置設定db_cache_size和shared_pool_size的機制是一樣的
SQL>
select a.ksppinm name,b.ksppstvl value
2 from x$ksppi a,x$ksppcv b
3 where
a.indx=b.indx
4 and (a.ksppinm like '%sga_target%'
5 or a.ksppinm like
'%pga_aggregate_target%');
NAME
----------------------------------------
sga_target 0
__sga_target
125829120
pga_aggregate_target 0
__pga_aggregate_target
79691776
下面我們了解一下ORA-00845的由來與解決方案:
如果memory_max_target/memory_target設定過大,可能導緻instance無法啟動,報ORA-00845錯誤
alter system set memory_max_target=300m scope=spfile;
SQL> shutdown immediate;
ORA-00845:
MEMORY_TARGET not supported on this
system
這個錯誤有點誤導,實際上這并不是說該平台版本上不支援AMM特性,隻是設定的memory_max_target超過了系統中設定的share
memory(/dev/shm)而已。在Oracle11g for linux中似乎使用了一種新的機制來管理共享記憶體段,而不是傳統的sys
/dev/shm了。在alert.ora中可以找到更準确的錯誤描述
解決這個問題的辦法之一是增加tmpfs檔案系統的容量。
修改/etc/fstab中tmpfs對應的行,
将原來的
tmpfs /dev/shm tmpfs defaults 0 0
改成 tmpfs /dev/shm tmpfs defaults,size=1024M
0 0 ,這樣tmpfs增大為1G
size參數也可以用G作機關:size=1G。
重新mount /dev/shm使之生效:
# mount
-o remount /dev/shm
馬上可以用"df
-h"指令檢查變化。
修改執行個體的MEMORY_TARGET參數。(這個在資料庫關着的時候是行不能通的,用上面的那種比較徹底)
這個方法用alter
system set memory_target=200M;