Montag Feb. 27, 2006

ORACLE: System Datenfiles/Conrolfiles umbenennen/verschieben

Wenn man das Datenfile des System-TBS oder die Controlfiles an einer anderen Stelle des Filesystems platzieren möchte, kann man wie folgt vorgehen:

Erstmal ein PFILE erzeugen, damit man die Datenbankparameter wieder hat (Pfade natürlich vollständig angeben):

CREATE PFILE='initINSTANZ.ora' FROM 'spfileINSTANZ.ora';

Dann brauchen wir die CREATE-Statments um die Controlfiles wieder neu erzeugen zu können:

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Dann Datenbank runterfahren:

SHUTDOWN IMMEDIATE

Nun verschiebt man die Controlfiles und/oder die Systemdatenfiles ins gewünschte Verzeichnis. Man kann auch gleich noch "normale" Datenfiles verschieben, aber das macht man normalerweise durch offline Setzen des entsprechenden TBS und dann die Datenfiles umbenennen. Aber grundsätzlich kann man mit dieser Methode hier gleich eine ganze DB verschieben.

Im Userdump-Verzeichnis (cd $ORACLE_BASE/admin/INSTANZ/udump/) entstehen dann drei Dateien, von denen eines das CREATE CONTROLFILE Statement enthält. In dem File steht etwas mehr drin, als was man braucht. Das wichtige Statement sieht dann z.B. so aus (wir gehen davon aus, das die Datenbank vorher mit SHUTDOWN oder SHUTDOWN IMMEDIATE sauber beendet wurde!):

CREATE CONTROLFILE REUSE DATABASE "INSTANZ" NORESETLOGS ARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 3
MAXDATAFILES 300
MAXINSTANCES 10
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/DATENVERZEICHNIS/INSTANZ/redo/redo01.log' SIZE 50M,
GROUP 2 '/DATENVERZEICHNIS/INSTANZ/redo/redo02.log' SIZE 50M,
GROUP 3 '/DATENVERZEICHNIS/INSTANZ/redo/redo03.log' SIZE 50M
DATAFILE
'/DATENVERZEICHNIS/INSTANZ/data/system01.dbf',
'/DATENVERZEICHNIS/INSTANZ/undo/undotbs01.dbf',
'/DATENVERZEICHNIS/INSTANZ/data/sysaux01.dbf',
'/DATENVERZEICHNIS/INSTANZ/data/blahblub.dbf',
CHARACTER SET AL32UTF8;

Hier passt man nun die Pfade entsprechend an, wo man die Dateien hinverschoben hat. Das oben erstellte initINSTANZ.ora File kopieren wir nach $ORACLE_HOME/dbs/initINSTANZ.ora. Wenn man nicht nur das System-Datenfile verschoben hat sondern auch die Controlfiles, dann muss man auch den CONTROL_FILES-Parameter in der initINSTANZ.ora anpassen. Oracle 10.2 z.B. verwendet dann diese init.ora Datei später automatisch.

Nun fährt man die DB wie folgt hoch:

STARTUP NOMOUNT

Als nächstes führt man obiges CREATE CONTROLFILE Statement aus. Das erzeugt dann die neuen Controldateien dort, wie sie im CONTROL_FILES Parameter angegeben wurden. Wenn die DB das erfolgreiche Anlegen mit Control file created. bestätigt hat, kann man die DB wieder öffnen:

ALTER DATABASE OPEN;

Zum Schluss sollte man dann noch ein SPFile erzeugen (es sind natürlich die vollständigen Pfade anzugeben):

CREATE SPFILE='spfileINSTANZ.ora' FROM PFILE='initINSTANZ.ora';

Das sollte es eigentlich gewesen sein...

Ein paar Links: Ask Tom "move system datafiles", version 8.1.7 - http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:5033895918209
init.ora SpFile Parameters - http://www.ss64.com/orasyntax/initora.html

Kommentare:

Senden Sie einen Kommentar:
  • HTML Syntax: Ausgeschaltet