Oracle Database 12c: DataGuard und ONLINE DATAFILE MOVE

17. Juni 2014 Aus Von Markus Flechtner

Ein schönes neues Feature von Oracle 12c ist die Möglichkeit, Datendateien online zu verschieben oder umzubenennen. In der Oracle DBA Community gibt es einen schönen Beitrag dazu.

Eine Frage, die sich daraus ergibt, ist: wie verhält sich dieses neue Feature in einer DataGuard-Umgebung? Wird die Datei auch auf der Standby-Seite automatisch umbenannt bzw. verschoben? Oder muss man es manuell nachholen?

Wir probieren es aus:
Im ersten Schritt wird auf der Primär-Seite die Datei umbenannt:

SQL> alter database move datafile '/u01/oradata/HEAVEN_SITE1/users01.dbf'
2 to '/u01/oradata/HEAVEN_SITE1/users1.dbf'
3 ;

Database altered.

Beobachtung 1: selbst nach einem Log-Switch gibt es auf der Standby-Seite keine Anzeichen, dass DataGuard die Datei auf der Standby-Seite automatisch unbenannt hat. Dabei steht der Parameter STANDBY_FILE_MANAGEMENT auf „AUTO“ – und man hätte es doch erwarten können, oder?

Also versuchen wir, die Umbenennung auf der Standby-Seite manuell nachzuholen:

SQL> alter database move datafile '/u01/oradata/HEAVEN_SITE1/users01.dbf'
2 to '/u01/oradata/HEAVEN_SITE1/users1.dbf';
alter database move datafile '/u01/oradata/HEAVEN_SITE1/users01.dbf'
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files

Beobachtung 2: Solange ein Recovery läuft, kann man die Datei nicht umbenennen.

Erst wenn man das Recovery temporär ausschaltet, dann kann man die Datei umbenennen:

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database move datafile '/u01/oradata/HEAVEN_SITE1/users01.dbf'
2 to '/u01/oradata/HEAVEN_SITE1/users1.dbf';

Database altered.

SQL> alter database recover managed standby database disconnect from session;

Database altered.

Ergänzung: Lt. My Oracle Support ist es in einer Active-Data-Guard-Umgebung (dort ist die Standby-Datenbank „OPEN“) möglich, eine Datei während des laufenden Managed Recovery zu verschieben.