12c: Datei-Umzug online

16. Juli 2013 Aus Von Markus Flechtner

Mit Oracle 12c kommen viele neue „große“ Features: Pluggable Databases, Flex ASM, Flex Cluster, Data Guard „Global Data Services“, Information Lifecycle Management etc. Angesichts dieser Features, die oft im Vordergrund der diversen Produktpräsentationen stehen, geraten die kleinen Features oft in den Hintergrund. Dabei sind es meist die kleinen Features, die dem DBA den Alltag erleichtern.

Eines dieser vermeintlich kleinen Features ist „online datafile move“. Welcher DBA hat nicht schon mal eine Datendatei versehentlich im falschen Verzeichnis angelegt oder mit einem Tippfehler im Dateinamen? Bislang war es etwas aufwändiger, solche Fehler zu korrigieren: File offline setzen, anschließend verschieben oder umbenennen. Und dann noch den Dateinamen im Controlfile ändern und die Datendatei wieder online setzen. Mit 12c geht das alles viel einfacher. Mit einem Befehl. Online.

ALTER DATABASE MOVE DATAFILE

Dabei ist es egal, ob sich die Datei in einem Dateisystem oder im ASM befindet. Die Datei kann in jede beliebige Richtung verschoben werden. Zwischen zwei Verzeichnissen. Oder von einer ASM-Diskgruppe in eine andere. Oder aus einem Dateisystem ins ASM. Oder umgekehrt.
Der Wechsel zu ASM wird dadurch deutlich einfacher.

Der Syntax ist

ALTER DATABASE MOVE DATAFILE <alter_name> TO <neuer_name>;

Oder

ALTER DATABASE MOVE DATAFILE <file_id> TO <neuer_name>;

Letztere ist besonders für den tippfaulen DBA interessant.

Zusätzlich kann man die Optionen „KEEP“ und „REUSE“ angeben.
„KEEP“ heißt, dass die Ausgangsdatei nicht gelöscht wird.
„REUSE“ heißt, dass eine eventuell vorhandene Zieldatei überschrieben wird. Das ist also die gefährliche Option.

Ein Beispiel:

SQL> select file_name from dba_data_files where file_id=6;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/DEMO12C/DATAFILE/users.283.816634171

SQL> alter database move datafile 6 to '+FRA';

Database altered.

SQL> select file_name from dba_data_files where file_id=6;

FILE_NAME
--------------------------------------------------------------------------------
+FRA/DEMO12C/DATAFILE/users.266.816634335

Parallel zum Verschieben einer Datei kann auch auf Tabellen in der Datei zugriffen werden. Dabei ist auch DML erlaubt. Es ist also eine wirkliche „ONLINE“-Operation, die man im DBA-Leben vielleicht eher selten braucht, die aber im Fall der Fälle umso hilfreicher ist.

Update:
Wie die meisten “Online-Operations” ist auch der “Online-Datafile-Move” nur in der Enterprise Edition verfügbar.