久々にOrcaleチューニング
設定方法忘れたので、他からメモを拝借
DBAの知識ないから、DBの設定ぶっ壊して、1から入れなおしかなーなんて思える状態から脱却できたので、メモっておこう!
SGAの現在のメモリ割当を確認。
sqlplus / as sysdba
show parameter sga_;
NAME TYPE VALUE
------------- ------------ -------
sga_max_size big integer 2G
sga_target big integer 2G
ここで、以下のように容量変更を実行するのはダメ。
sqlplus / as sysdba
alter system set sga_max_size = 4G scope=spfile;
alter system set sga_target = 4G scope=spfile;
なぜなら、メモリの物理的な割当を超過したSGAを設定すると、壊れる。
以下を実行し、memory_max_target、memory_targetがそれにあたる。
メモリ割当容量を変更する場合には、この物理的な割当容量を確認する手順は必須だ。
MEMORY_MAX_TAEGET、MEMORY_TARGETの説明によると、MEMORY_TARGETがOracleが利用するメモリ割当量で、その範囲内でSGAやPGAを設定する。
つまり、いきなりSGAのメモリ割当量を変更し、MEMORY_TARGET割当量≦SGA割当量となると、設定としてはNGだ。
以下を実行し、memory_max_target、memory_targetがそれにあたる。
メモリ割当容量を変更する場合には、この物理的な割当容量を確認する手順は必須だ。
sqlplus / as sysdba
show parameter memory_;
NAME TYPE VALUE
------------------------- ------------ --------
hi_shared_memory_address integer 0
memory_max_target big integer 3G
memory_target big integer 3G
shared_memory_address integer 0
MEMORY_MAX_TAEGET、MEMORY_TARGETの説明によると、MEMORY_TARGETがOracleが利用するメモリ割当量で、その範囲内でSGAやPGAを設定する。
つまり、いきなりSGAのメモリ割当量を変更し、MEMORY_TARGET割当量≦SGA割当量となると、設定としてはNGだ。
よって、まず変更すべきはSGAではなくMEMORY_TARGETだ。
また、SGAに4GBを割り当てたいなら、MEMORY_TARGETは4GBより大きくなければならない。
それぞれの項目の説明はSGA_MAX_SIZE、SGA_TARGETを参照してほしい。
また、SGAに4GBを割り当てたいなら、MEMORY_TARGETは4GBより大きくなければならない。
それぞれの項目の説明はSGA_MAX_SIZE、SGA_TARGETを参照してほしい。
sqlplus / as sysdba
alter system set memory_max_target = 5G scope=spfile;
alter system set memory_target = 5G scope=spfile;
そのあとにSGAを変更する。
sqlplus / as sysdba
alter system set sga_max_size = 4G scope=spfile;
alter system set sga_target = 4G scope=spfile;
んでインスタンス再起動
sqlplus / as sysdba
shutdown immediate
startup
これで、Oracleで利用する物理メモリ容量の増加と、SGA容量の増加を行える。
で、これから俺がやらかした状態と、解消手順。
壊した経緯
1.もともと物理的に1.6GBくらいしか割り当ててない。
2.物理割当を確認せずにSGAを4GBに変更。
3.インスタンスの再起動ができなくなる。
壊した経緯
1.もともと物理的に1.6GBくらいしか割り当ててない。
2.物理割当を確認せずにSGAを4GBに変更。
3.インスタンスの再起動ができなくなる。
再起動すると、こんなメッセージが。
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 4294967296 cannot be set to more than MEMORY_TARGET 1690304512.
SGA_MAX_SIZEがMEMORY_TARGETを超えてんぞコラってことみたい。
こうなると、もうインスタンスへの接続もできないので、以下の手順を踏まないと直せない。
こうなると、もうインスタンスへの接続もできないので、以下の手順を踏まないと直せない。
1.spfileからpfileを生成する。
%ORACLE_HOME%\database\INIT<SID>.ORAが作成されます。
%ORACLE_HOME%は、11gのデフォルトなら「D:\app\Administrator\product\11.2.0\dbhome_1」とかで、
INIT<SID>.ORAは、インスタンス名が「HOGE」なら「INIThoge.ORA」ってファイルがある。
2.INIT<SID>.ORAをテキストエディタで編集する。
以下では、MEMORY_TARGETを5GB、SGAを4GBに設定してみる。
3.INIT<SID>.ORAを利用してインスタンスを起動する。
注意する点は、指定するのはファイル名だけではなくてフルパスで指定する。
4.起動できたら、pfileの設定をspfileに書き戻す。
注意する点は、指定するのはファイル名だけでいい。
5.んでいつも通りのインスタンスの再起動をしてみて、起動すればOK。
/ as sysdba
create pfile from spfile;
%ORACLE_HOME%\database\INIT<SID>.ORAが作成されます。
%ORACLE_HOME%は、11gのデフォルトなら「D:\app\Administrator\product\11.2.0\dbhome_1」とかで、
INIT<SID>.ORAは、インスタンス名が「HOGE」なら「INIThoge.ORA」ってファイルがある。
2.INIT<SID>.ORAをテキストエディタで編集する。
以下では、MEMORY_TARGETを5GB、SGAを4GBに設定してみる。
<SID>.__sga_target=4294967296
*.memory_target=5368709120
*.sga_max_size=4294967296
*.sga_target=4294967296
3.INIT<SID>.ORAを利用してインスタンスを起動する。
注意する点は、指定するのはファイル名だけではなくてフルパスで指定する。
sqlplus / as sysdba
startup pfile="D:\app\Administrator\product\11.2.0\dbhome_1\database\INIT<SID>.ORA"
4.起動できたら、pfileの設定をspfileに書き戻す。
注意する点は、指定するのはファイル名だけでいい。
/ as sysdba
create spfile='SPFILE<SID>.ORA' from pfile='INIT<SID>.ORA';
5.んでいつも通りのインスタンスの再起動をしてみて、起動すればOK。
sqlplus / as sysdba
shutdown immediate
startup
0 件のコメント:
コメントを投稿