Umgang mit SPFILE, PFILE und init.ora

Werbung
Betrifft
Umgang mit SPFILE und INIT.ORA
Autor
Petra Knöbl ([email protected])
Art der Info
Technische Background Info (März 2002)
Quelle
Aus dem NF9i-Kurs und NF9i-Techno-Circle der Trivadis
Einleitung
Oracle9i erlaubt immer mehr Parameter on-the-fly zu ändern, ohne ein Restart der
Datenbank durchführen zu müssen. Dies führt den DBA immer häufiger in die Situation,
dass er vor dem nächsten Restart der Datenbank nicht vergessen darf das Parameter-File
entsprechend zu ändern. Oracle9i erlaubt durch die Verwendung von Server Parameter
Files (SPFILE) dynamisch geändert Parameter auch gleichzeitig in das Parameter-File zu
schreiben, so dass Änderungen mit ALTER SYSTEM persistent sind.
SPFILE und INIT.ORA
Oracle bis Version 8i speichert Initialisierungsparameter traditionell in einem TextINIT.ORA-File. Bei Oracle9i können auch Server Parameter Files verwendet werden
(SPFILE). Ein SPFILE kann als Repository für Initalisierungsparameter betrachtet werden,
welches sich auf dem DatenbankServer befindet.
SPFILEs sind kleine binäre Files, welche nicht editiert werden können. Das editieren von
SPFILES führt zu einem korrupten File und der Start der Instanz schlägt fehl, bzw. kann es
zu einem crash bei einer laufenden Instanz kommen.
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^G^@^@^@^@^B...
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
*.db_block_size=8192
*.db_domain='ttc.trivadis.com'
*.db_file_multiblock_read_count=16
*.db_files=1022
*.db_name='TVD901A'
...
*. bedeutet: alle Instanzen dieses Databank-Systems. Dies ist auch gültige Syntax in
traditionellen INIT.ORA-Files. Dies ist vorallem bei RAC interessant siehe weiter unten.
Beim Startup der Datenbank sucht der Startup Befehl ohne Angabe eines PFILEs an der
Betriebssystemabhängigen Default-Location ($ORACLE_HOME/dbs unter UNIX,
$ORACLE_HOME\database unter NT) nach:
1. spfile${ORACLE_SID}.ora
2. spfile.ora
3. init${ORACLE_SID}.ora
Es besteht natürlich weiterhin die Möglichkeit ein PFILE explizit zu spezifizieren.
SQL> connect sys/manager as sysdba
Connected to an idle instance.
SQL> startup pfile=/u00/app/oracle/admin/TVD901A/pfile/initTVD901A.ora
ORACLE instance started.
Total System Global Area
...
SQL>
172967504 bytes
Es kann jedoch beim STARTUP mit PFILE kein SPFILE angegeben werden:
SQL> startup pfile='/u00/app/oracle/admin/TVD901A/pfile/spfileTVD901A.ora'
LRM-00101: unknown parameter name 's044'
ORA-01078: failure in processing system parameters
Um dies zu ermöglichen am besten ein traditionelles INIT.ORA mit Default-Name
erzeugen:
Š
init${ORACLE_SID}.ora
Dieses File beinhaltet nur den Pfad auf das SPFILE:
SPFILE = c:\oracle\admin\db1\pfile\spfileDB1.ora
SPFILE erzeugen
Ein Server Parameter File wird initial aus einem traditionellen TextInitalisierungsparameter-File (PFILE, INIT.ORA) erzeugt. Dies kann ohne eine gestartete
Instanz durchgeführt werden. Voraussetzung für das Erzeugen des SPFILEs sind SYSDBAoder SYSOPER-Privilegien.
Falls SPFILE an der Default Location vorhanden ist, so verwendet STARTUP ohne Angabe
eines PFILE dieses SPFILE.
Ein SPFILE an der Default Location aus einem PFILE erzeugen:
SQL> CREATE SPFILE
2 FROM PFILE='/u00/app/oracle/admin/TVD901A/pfile/initTVD901A.ora';
File created.
SQL>
Ein SPFILE an Nicht-Default-Location aus einem PFILE erzeugen:
SQL> CREATE SPFILE='/u00/app/oracle/admin/TVD901A/pfile/spfileTVD901A.ora'
2 FROM PFILE='/u00/app/oracle/admin/TVD901A/pfile/initTVD901A.ora';
File created.
SQL>
Oracle empfiehlt die Verwendung der Default-Location (eases Administration-). Die
Trivadis empfiehlt Parameter-Files ausserhalb des Software-Directories zu speichern (OFA).
Auf NT/WIN2000 am besten in der Default-Location ein (traditionelles) INIT.ORA mit
Default Name erzeugen, welches nur den Pfad auf das SPFILE enthält (s.oben).
Auf UNIX ggf. mit Links arbeiten:
sqlplus "/ as sysdba"
startup
create spfile='/u00/app/oracle/admin/TDBT901A/pfile/spfileTVD901A.ora' from
pfile='/u00/app/oracle/admin/SID/pfile/initTVD901A.ora';
shutdown immediate
exit
cd $ORACLE_HOME/dbs
ln -s /u00/app/oracle/admin/TDBT901A/pfile/spfileTVD901A.ora .
sqlplus "/ as sysdba"
startup
“Backup“ eines SPFILEs
Mit dem CREATE PFILE Befehl kann ein Backup eines SPFILEs durchgeführt werden:
SQL> CREATE PFILE='/u00/app/oracle/admin/TVD901A/pfile/bck_init.ora'
2
FROM SPFILE;
File created.
SQL>
Dies erstellt ein direkt verwendbares INIT.ORA-File:
*.background_dump_dest='/u00/app/oracle/admin/TVD901A/bdump'
*.compatible='9.0.1'
*.control_file_record_keep_time=90
*.core_dump_dest='/u00/app/oracle/admin/TVD901A/cdump'
Es ist sicher eine gute Idee, immer ein PFILE als Backup eines SPFILEs zu haben, um im
“schlimmsten Fall” wieder ein neues SPFILE aus dem PFILE erzeugen zu können. Das
Erstellen einer PFILE-Backup-Kopie aus einem SPFILE könnte z.B. in den nächtlichen
Backup-Jobs oder in einem STARTUP-Trigger automatisiert werden:
SQL>
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE TRIGGER copy_spfile
AFTER STARTUP ON DATABASE
DECLARE
cPath CONSTANT varchar2(80) := 'D:\oracle\admin\DB9\pfile';
BEGIN
EXECUTE IMMEDIATE
'create pfile='''||cPath||'\initora.'||
TO_CHAR(SYSDATE,'yyyymmdd_hh24mi')||''' from spfile';
EXCEPTION
WHEN others THEN NULL;
END;
12
/
Trigger wurde erstellt.
SQL>
Änderungen im SPFILE
Es gibt zwei Möglichkeiten um Änderungen im SPFILE durchzuführen:
1. Über den Befehl ALTER SYSTEM
2. Über die Export Methode
1. Änderungen über ALTER SYSTEM
Vorraussetzung ist, dass beim STARTUP der Instanz ein SPFILE benutzt wurde, entweder
direkt oder durch eine INIT.ORA welche den SPFILE=spfileSID.ora Parameter enthält.
Bei Verwendung von SPFILEs können mit dem Befehlt ALTER SYSTEM Parameter, falls
gewünscht, persistent im SPFILE (welches beim Startup benutzt wurde) geändert werden.
Es wird bei ALTER SYSTEM der SCOPE angegeben:
Š
Memory (Default, wenn beim STARTUP ein trad. INIT.ORA benutzt wurde)
Š
SPFILE
Š
BOTH (Default, wenn beim STARTUP ein SPFILE benutzt wurde)
SQL> CONNECT / AS SYSDBA
Connected.
SQL> ALTER SYSTEM SET shared_pool_size = 48M SCOPE=BOTH;
System altered.
SQL>
Für statische Parameter kann nur der SCOPE=SPFILE verwendet werden. Die Änderung
wird beim nächsten STARTUP aktiv:
SQL> CONNECT / AS SYSDBA
Connected.
SQL> ALTER SYSTEM SET db_block_buffers = 20000 SCOPE=SPFILE;
System altered.
SQL>
Bei Änderungen können Kommentare spezifiziert werden, welche dann sowohl im SPFILE,
wie auch im Attribut UPDATE_COMMENT von V$PARAMETER und V$SPPARAMETER
eingesehen werden können.
SQL> ALTER SYSTEM SET timed_statistics=TRUE
2 COMMENT='DB-Review by Trivadis' SCOPE=BOTH;
System altered.
SQL>
Parameter können folgendermassen aus dem SPFILE gelöscht werden:
SQL> alter system reset sort_area_size scope=spfile sid='*';
System altered.
SQL>
Bei mehrzeiligen Parametern funktioniert dies nicht. (Nur die erste Zeile wird gelöscht und
die Instanz startet dann nicht mehr!) In so einem Fall den Parameter zuerst auf ’’ setzen
und dann löschen.
Komplexe Parameter können folgendermassen spezifiziert werden:
SQL> ALTER SYSTEM SET
2 log_archive_dest_3='LOCATION=/u01/oracle/arc',MANDATORY,'REOPEN=2'
3
COMMENT='Added 3rd destination 23.06.2001' SCOPE=SPFILE;
System altered.
SQL>
Undokumentierte Parameter können ebenfalls gesetzt werden:
SQL> ALTER SYSTEM SET "_collect_undo_stats"=FALSE SCOPE=SPFILE;
System altered.
SQL>
2. Export Methode
Dazu muss zuerst der Inhalt des SPFILEs in ein PFILE exportiert werden:
SQL> CREATE PFILE='initDB1test.ora' FROM SPFILE;
File created.
SQL>
Nun können die Parameterwerte im PFILE geändert werden.
Danach muss das SPFILE vom geänderten PFILE ’initDB1test.ora’ wieder hergestellt
werden:
SQL> CREATE SPFILE 'spfileDB1.ora'
2 FROM PFILE='initDB1test.ora';
File created.
SQL>
Wurde ein SPFILE beim STARTUP benutzt und wenn ja welches?
Ob ein SPFILe beim STARTUP benutzt wurde, und wenn ja welches wird in der view
V$PARAMETER angezeigt:
SQL> select name, value from v$parameter where name='spfile'
NAME
VALUE
--------------- ---------------------------------------spfile
C:\oracle\admin\db9\pfile\spfiledb9.ora
SQL>
Im alertSID.log File wird der Parameter spfile angezeigt, wenn die Instanz mit einem
initSID.ora File, welches auf ein SPFILE verweist, gestartet wurde. Wird im alertSID.log
File der SPFILE-Parameter nicht angezeigt, wurde beim STARTUP entweder ein Default
SPFILE oder PFILE (traditionelles INIT.ORA) benutzt.
Unter NT ist noch zu berücksichtigen, dass ein automatischer Datenbankstart mit den
Registry-Einträgen ORA_<sidname<_AUTOSTART=TRUE und
ORA_<sidname>_PFILE=<full path to the PFILE> einem STARTUP PFILE=xxx auf der
Kommandoebene entspricht. Beim automatischen Start der Datenbank wird nicht das
SPFILE benutzt. Wird nun die DB von der Kommandozeile aus gestartet und existiert ein
SPFILE, so können andere Parameter beim Start der Datenbank berücksichtigt worden sein.
Dies kann durch löschen des Registry-Eintrages oder durch Erzeugen einer INIT.ORA,
welche nur den PFAD auf das SPFILE enthält, umgangen werden.
Visualisieren von Parametern
Die Anzeige von Parametern kann erfolgen mit:
Š
OEM (Oracle Enterprise Manager)
Š
SHOW PARAMETER in SQL*Plus
Š
CREATE PFILE=
Š
SPFILE direkt visualisieren (aber nicht ändern...)
Š
V$PARAMETER(2): aktuelle Parameter
Š
V$SPPARAMETER: Parameter im SPFILE
Zur Ermittlung der Parameter (auch der undokumentierten) existiert Trivadis-Skript
(ssinipar.sql), welche von www.trivadis.com (gemeinsam mit unseren anderen FreewareSkripten, welche auf Oracle9i migriert wurden) downgeloadet werden kann.
OEM Unterstützung
OEM unterstützt SPFILEs und PFILEs.
Shared SPFILEs
Bei RAC (REAL Applicaton Cluster, ex. ORACLE Parallel Server) kann ein SPFILE für
mehrere Instanzen verwendet werden. Das SPFILE wird dazu auf ein RAW Device
abgelegt.
Instanz spezifische Parameter werden mit dem Instanz Namen als Prefix spezifiziert:
prod1.instance_name = 'PROD1'
prod2.instance_name = 'PROD2'
*.db_name = 'PROD'
prod1.sort_area_size = 1048576
prod2.sort_area_size = 524288
Fazit
Persistente Änderungen können nun ohne vi, Notepad, etc. durchgeführt werden.
Ausserdem kann nun durch die Verwendung eines SPFILEs innerhalb der Datenbank
festgestellt werden, welches Parameter-File beim STARTUP benutzt wurde.
Auch im OEM ist die SPFILE-Benutzung schon unterstützt. Weiterhin positiv ist die
Möglichkeit beim RAC ein einziges SPFILE verwenden zu können.
Die einzige Gefahr des SPFILEs ist die Möglichkeit der Verwirrung, welche Datei aktuell
beim STARTUP der Datenbank benutzt wurde.
Wünschenswert für den DBA wäre die Existenz eines Triggers, welcher beim ALTER
SYSTEM feuern würde, so dass eine Historie über die Änderungen am System mitgeführt
werden könnte.
Falls Sie noch mehr über die New Features von 9i erfahren wollen, würde es uns freuen,
Sie in einem unserer 9i-Kurs (NF9i, AI9-A, AI9-B) begrüssen zu dürfen.
Petra Knöbl
Trivadis AG
Cityforum im Eichsfeld
Ferdinand-Stuttmann-Str. 13
D-65428 Rüsselsheim
Mail:
Tel:
Fax:
Internet:
[email protected]
+49 6142 210 18 0
+49 6142 210 18 29
http://www.trivadis.com
Herunterladen