Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:spfile_verloren

Oracle SPfile bearbeiten und wiederherstellen

09/2013

Die Datenbank holt beim Start die Informationen über Ihre Parameter aus dem SPFile (der binären init.ora).

Das SPFile liegt meist unter $ORALCE_HOME/dbs oder %ORACLE_HOME%\database:

SQL> show parameter spfile
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      %ORACLE_HOME%\DATABASE\SPFILE%
                                                 ORACLE_SID%.ORA

In einer Cluster Umgebung kann das SPfile auch auf einer ASM Platte liegen.


Parameter aus dem SPfile anzeigen

Parameter aus dem SPFile per Console auslesen:

cd $ORALCE_HOME/dbs
 
strings spfileGPI.ora | grep compatible
 
*.compatible=19.0.0.0.0

Parameter per SQL*Plus anzeigen:

SYS@GPI-?>SHOW parameter compatible
 
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- --------------
compatible                           string                            19.0.0.0.0

Alle Parameter auslesen per SQL mit ⇒ https://github.com/gpipperr/OraPowerShell/blob/master/Ora_SQLPlus_SQLcL_sql_scripts/init.sql


Parameter im SPfile anpassen/anlegen

mit alter system set <parameter>=<values> comment='Mein Commentar zu dieser Änderung' scope=spfile|both|memory sid='*' wird eine DB Parameter angepasst.

Der Kommentar ist optional und darf max VARCHAR2(255 BYTE) sein, d.h je nach eingestellten Zeichensatz auf Umlaute achten bzw. auf diese selbigen ganz verzichten.

sys:sql> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=30
                 COMMENT='GPI 17.02.2021 angepasst - Anwender können sich das Passwort nicht merken'
                 SCOPE=spfile
                 sid='*';
 
sys:sql> startup force
 
sys:sql>SELECT NAME,VALUE,UPDATE_COMMENT 
          FROM v$parameter 
         WHERE NAME=LOWER('SEC_MAX_FAILED_LOGIN_ATTEMPTS');
 
 
                       Instance      
Parameter              VALUE                  UPDATE_COMMENT
--------------------   --------------------   ----------------------------------------
sec_max_failed_login_attempts            30   GPI 17.02.2021 angepasst - 
                                              Anwender können sich das Passwort nicht merken
 

Wie sieht dann aber der Kommentar im SPfile aus?

..
*.sec_max_failed_login_attempts=30#GPI 17.02.2021 angepasst - Anwender k�nnen sich das Passwort nicht merken
..

Text Version erzeugen:

SYS@GPI-?>CREATE pfile='d:\temp\initOraGPI.log' FROM spfile;
 
File created.

Auch hier ist die # der Trenner:

*.sec_max_failed_login_attempts=30#GPI 17.02.2021 angepasst - Anwender k�nnen sich das Passwort nicht merken

Aber nun ist der Umlaut noch schlimmer, am besten wohl auf Umlaute verzichten .-).

Ungewollte Potentiale

Und was passiert wenn wir das hier optimieren?

Wir können mal etwas längers als Kommentar verwenden, 256 Zeichen für den Anfang, oder z.b, nur die # etc.

shutdown IMMEDIATE
 
startup nomount pfile='d:\temp\initOraGPI.log'

Ist der Kommentar zu lang wird abgeschnitten, Mehrere # nach einander werden ignoriert, Leerzeichen nach dem Hash # werden mit genommen, DB startet, auf den ersten Blick wohl sicher.

XSS?

Aber das wäre ein schöner Easter Egg Platz für eine XXS Attacke auf die Webbasierten Überwachungsools!

# in die init.ora eingetragen:
*.sec_max_failed_login_attempts=30#<script>alert("XSS Hack over init.ora , I got you");</script>
# oder über die kommentar Funtion per SQL hinterlegen
 
 
SYS@GPI-?>select NAME,VALUE,UPDATE_COMMENT
  2            from v$parameter
  3           where NAME=lower('SEC_MAX_FAILED_LOGIN_ATTEMPTS');
 
                                         Instance
Parameter                                Value
---------------------------------------- --------------------
UPDATE_COMMENT
-------------------------------------------------------------------
sec_max_failed_login_attempts            30
<script>alert("XSS Hack over init.ora , I got you");</script>

Zugegeben; der Angreifer muss schon ein Admin sein um das zu setzen, daher ist das wohl eher ungefährlich … solange alle Cloud Tools auch mit sowas umgehen können .-) und die Admin Oberfläche gegen XXS auch an ALLEN Stellen geschützt ist.


Parameter aus dem SPfile entfernen

Über alter system reset <parameter> scope=spfile sid='*' kann ein Parameter aus dem SPFile entfernt werden:

ALTER system reset fal_server scope=spfile sid='*';
 
 
-- Aber nur wenn der Parameter dort auch exisiert!
ERROR at line 1:
ORA-32010: cannot find entry TO DELETE IN SPFILE

SPfile wieder herstellen

Wird dort ein falscher Wert eingetragen, kann die DB nicht mehr starten.

Damit immer eine Kopie der letzten Version dieser Datei im Textformat vorliegt, wurde bei jedem Backup eine Sicherung davon angelegt.

rman>SQL "create pfile=''D:\oracle\recovery_area\<MYSID>\pfile\ini_<MYSID>.ora'' from spfile";

Wenn diese nicht vorliegt, den bestehenden SPFILE als Text auslesen und die Parameter per Hand in das init.ora Format bringen.

cd $ORALCE_HOME/dbs
 
 
#eine alte Konfig vorher sichern!!
mv initGPI.ora initGPI.ora_bck
 
#text Datei erzeugen
strings spfileGPI.ora > initGPI.ora
 
#Manuell anpassen und hübschen, Werte prüfen etc.
 
vi initGPI.ora

Ablauf:

  • DB mit der Textversion starten
  • Falls DB nicht startet, weil der Parameter Fehler bereits kopiert wurde, Fehler in der Textdatei bereinigen
  • Neue SP Datei anlegen

Starten der DB mit

cmd>SET ORACLE_SID=<SID der DB , wo der SPFILE fehlt>
cmd>sqlplus "/ as sysdba"
 
sqlplus>startup pfile='D:\oracle\recovery_area\<MYSID>\pfile\ini_<MYSID>.ora'
 
sqlplus>CREATE spfile FROM pfile='D:\oracle\recovery_area\<MYSID>\pfile\ini_<MYSID>.ora';
 
sqlplus>shutdown IMMEDIATE
 
sqlplus>startup

oder aus Autobackup restaurieren, zuvor die DB mit einer neuen minimal Konfiguration starten, bzw. mit der init.ora aus dem Backup:

10G Syntax:

RMAN>CONNECT target /
 
RMAN>startup nomount
 
RMAN> SET DBID <mydbid>;
 
RMAN> RUN {
           SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO
           'D:\oracle\recovery_area\<MYSID>\backupset\<MYSID>_%F';;
          RESTORE SPFILE FROM AUTOBACKUP;
}


Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
"Autor: Gunther Pipperr"
dba/spfile_verloren.txt · Zuletzt geändert: 2021/03/15 09:31 von gpipperr