Meandry parametrów uruchomieniowych
Zachciało mi się przyciąć pamięć wykorzystywaną przez testową instancję Oracle. Przy pomocy przeglądarkowego narzędzia administracyjnego przyciąłem zarówno SGA, jak PGA do 32MB.
Jak sprawdziłem w /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/alert_XE.log, wykonały się polecenia:
ALTER SYSTEM SET sga_target='32M' SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target='32M' SCOPE=BOTH;
Efekt? Oracle przestało wstawać, a ja odświeżyłem sobie wiedzę o zapisie parametrów uruchomieniowych.
oracle$ sqlplus -s /nolog @$ORACLE_HOME/config/scripts/startdb.sql ORA-04031: unable to allocate 402028 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","FileIdentificatonBlock")
Opis błędu dowcipinie proponuje realizację różnych zapytań SQL, co przy leżącym Oracle nie jest wykonalne. Cóż, trzeba poprawić init.ora (czy też initXE.ora).
Odtwarzanie init.ora
Niestety, w standardowo zainstalowanym Oracle Express init.ora nie ma. Jest binarny plik spfile.ora (w tym wypadku - $ORACLE_HOME/dbs/spfileXE.ora).
Według dokumentacji Oracle zmianę tę wprowadzono for better manageability. Cóż - pozwala ona edytować parametry konfiguracyjne przy pomocy SQL zamiast edycji plików tekstowych. Czy jest to zmiana na korzyść, można mieć wątpliwości.
Na szczęście można dokonać konwersji (polecenie wykonane z konta oracle):
$ sqlplus /nolog SQL> connect / as sysdba; Connected to an idle instance. SQL> create pfile from spfile; File created.
Powstał plik $ORACLE_HOME/dbs/initXE.ora, który można było normalnie edytować. W tym wypadku, znalazłem w nim parametry *.sga_target i *.pga_aggregate_target i podbiłem oba z 33554432 na 67108864.
Uruchamianie
Została jeszcze sprawa uruchomienia Oracle z zmienionymi parametrami. W ramach powyższej sesji:
SQL> startup pfile="initXE.ora" Oracle instance started. ...
i Oracle wstało. Potem jeszcze
SQL> create spfile from pfile; File created.
by skopiować parametry z powrotem do binarnego pliku domyślnie używanego przez standardowy startup