Ist es erforderlich, die Protokollarchivierung zu aktivieren, wenn ORACLE eine Datenbank erstellt?
Die Oracle-Datenbank kann in zwei Modi betrieben werden: Archivmodus (ARCHIVELOG) und Nicht-Archivmodus (NOARCHIVELOG).
Der Archivmodus kann die Wiederherstellbarkeit der Oracle-Datenbank verbessern.
Alle Produktionsdatenbanken sollten in diesem Modus betrieben werden, und der Archivmodus sollte mit der entsprechenden Sicherungsstrategie kombiniert werden. Allein der Archivmodus ohne eine entsprechende Sicherungsstrategie führt lediglich zu Problemen.
Standardmäßig wird die Oracle-Datenbank im Modus „Non-Logging“ für Protokolldateien erstellt.
Im Nicht-Archiv-Log-Modus wird das Redo-Log beim Wechsel des Logs direkt überschrieben. Wenn zu diesem Zeitpunkt die Datendatei aufgrund eines Medienfehlers beschädigt wird, gehen die überschriebenen Daten bei der Wiederherstellung der Datenbank verloren.
Im Archivprotokollmodus kann die Datenbank alle Archivprotokolldateien nutzen, die seit der aktuellsten Datenbanksicherung erstellt wurden, um einen Datenverlust zu vermeiden; die meisten Produktionsdatenbanken laufen im Archivprotokollmodus.
Nachdem die Oracle-Datenbank den Archivprotokollmodus aktiviert hat, wird automatisch ein neuer Prozess gestartet: der Archivierungsprozess ARCn. Standardmäßig werden vier Prozesse gestartet. In praktischen Anwendungen können bis zu 30 Archivierungsprozesse gestartet werden.
[oracle@dbserver1 archivelog]$ ps -ef | grep -i ora_oracle 26567 1 0 08:48 ? 00:00:00 ora_arc0_orcloracle 26573 1 0 08:48 ? 00:00:00 ora_arc1_orcloracle 26575 1 0 08:48 ? 00:00:00 ora_arc2_orcloracle 26577 1 0 08:48 ? 00:00:00 ora_arc3_orcl
Ein Archivprotokoll ist eine inaktive Sicherungskopie eines Redo-Logs. Mithilfe von Archivprotokollen können sämtliche Redo-Historieneinträge dauerhaft gespeichert werden. Wenn sich die Datenbank im ARCHIVELOG-Modus befindet und ein Logwechsel stattfindet,
Der Hintergrundprozess ARCH speichert den Inhalt des Redo-Logs in das Archivlog. Bei einem Medienfehler der Datenbank können die Sicherungskopie der Datendateien, das Archivlog und das Redo-Log zur vollständigen Wiederherstellung der Datenbank verwendet werden.
#########################
Wechsel vom Nicht-Archiv-Modus in den Archivmodus
Vor der Änderung:
Bestätigen Sie die Umgebung. Prüfen Sie die Datenbank, ob der Archivmodus aktiviert ist: --- Die unten angezeigten Informationen gelten unter der Voraussetzung, dass Sie beim Installieren der Datenbank weder den Flashback-Modus noch den Archivmodus aktiviert haben.
SQL> archive log list
Datenbank-Log-Modus: Kein Archivmodus
Automatisches Archivieren: Deaktiviert
Archiv-Ziel: /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Log-Sequenz: 4
Aktuelle Log-Sequenz: 6
SQL> SELECT name, log_mode FROM v$database;
NAME LOG_MODE
–------- ------------
ORCL NOARCHIVELOG
SQL> show parameter db_recovery
NAME TYP WERT
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest Zeichenkette
db_recovery_file_dest_size große Ganzzahl 0
######### Der folgende Test überprüft den Vorgang zum Wechseln der Datenbank vom Nicht-Archivmodus in den Archivmodus, wenn Flashback nicht aktiviert ist ############
SQL> shutdown immediate
Datenbank geschlossen.
SQL> startup mount
ORACLE-Instanz gestartet.
SQL> Datenbank in Archivmodus versetzen;
Datenbank geändert.
SQL> Datenbank öffnen;
Datenbank geändert.
SQL> archive log list
Datenbank-Log-Modus Archivmodus
Automatische Archivierung Aktiviert
Archivziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Log-Sequenz 4
Nächste zu archivierende Log-Sequenz 6
Aktuelle Log-Sequenz 6
SQL> SELECT name FROM v$archived_log;
Keine Zeilen ausgewählt
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
System geändert.
SQL> SELECT name FROM v$archived_log;
NAME
–------------------------------------------------------------------------------
/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_6_947091054.dbf
SQL> show parameter recover;
NAME TYPE VALUE
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size große Ganzzahl 0
db_unrecoverable_scn_tracking boolesch TRUE
recovery_parallelism Ganzzahl 0
SQL> SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;
Keine Zeilen ausgewählt
Wenn log_archive_log auf den Standardwert gesetzt ist, wird das Archivverzeichnis zu ?/dbs/arch.
SQL> alter system set log_archive_dest_1='';System geändert.
SQL> archive log list
Datenbank-Log-Modus Archivmodus
Automatisches Archivieren Aktiviert
Archiv-Ziel ?/dbs/arch
Älteste Online-Log-Sequenz 5
Nächste zu archivierende Log-Sequenz 7
Aktuelle Log-Sequenz 7
SQL> shutdown immediate
Datenbank geschlossen.
Datenbank getrennt.
ORACLE-Instanz heruntergefahren.
SQL> startup mount
ORACLE-Instanz gestartet.
Nach dem Neustart der Datenbank im Mount-Modus wechselt das Archivverzeichnis wieder zum ursprünglichen Standardverzeichnis.
SQL> archive log list
Datenbank-Log-Modus: Archivmodus
Automatisches Archivieren: Aktiviert
Archiv-Ziel: /home/oracle/u01/app/oracle/product/11.2.2.0/dbhome_1/dbs/archOldest Online-Log-Sequenz 5
Nächste Log-Sequenz für die Archivierung 7
Aktuelle Log-Sequenz 7
--- Maximale Anzahl gleichzeitig geöffneter Prozesse für die Archivierung festlegen
SQL> alter system set log_archive_max_processes = 5;
System geändert.--- Ändern Sie das Format der Protokollspeicherung SQL> ALTER SYSTEM SET log_archive_format = "archive_%t_%s_%r.log" SCOPE=SPFILE; System geändert.
SQL> startup
ORACLE-Instanz wurde gestartet.
SQL> shutdown immediate
Datenbank wurde getrennt.
Gesamte System-Global-Area 939495424 Bytes
Feste Größe 2258840 Bytes
Variable Größe 637536360 Bytes
Datenbankpuffer 293601280 Bytes
Redo-Puffer 6098944 Bytes
Datenbank eingebunden.
Datenbank geöffnet.
SQL> archive log list
Protokollmodus der Datenbank Archivmodus
Automatische Archivierung Aktiviert
Archivierungsziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Protokollsequenz 5
Nächste zu archivierende Protokollsequenz 7
Aktuelle Protokollsequenz 7
SQL> show parameter db_recovery
NAME TYP WERT
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest Zeichenkette
db_recovery_file_dest_size große Ganzzahl 0
SQL> SELECT name FROM v$archived_log;
NAME
–------------------------------------------------------------------------------
/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_6_947091054.dbf
SQL> alter system switch logfile;
System geändert.
SQL> SELECT recid, name, first_time FROM v$archived_log;
NAME
–------------------------------------------------------------------------------
/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_6_947091054.dbf
/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/archarchive_1_7_94709105
4.log
SQL> SELECT NAME, SPACE_LIMIT/1024/1024/1024, SPACE_USED/1024/1024/1024, NUMBER_OF_FILES FROM V$RECOVERY_FILE_DEST;
Keine Zeilen ausgewählt
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
–----------------
NEIN
#############################
Datenbank-Flashback aktivieren. Legen Sie den Pfad und die Größe des Flash-Recovery-Bereichs zum Testen fest. Deaktivieren Sie zunächst den Archivmodus und aktivieren Sie danach den Standardpfad; nach der Archivierung ist dies der Flashback-Pfad der Datenbank.
Überprüfen Sie die Datenbank, ob der Flashback-Modus aktiviert werden soll.
Hinweis: Wenn Sie die Rückblende-Funktion aktivieren, müssen Sie sich im Archivmodus befinden; andernfalls ergibt die Rückblende keinen Sinn! ! ! !
Jedoch müssen Sie, wenn Sie das Archiv öffnen, die Rückblende-Funktion nicht unbedingt aktivieren!!!
Falls die Rückblende aktiviert ist und anschließend der Archivmodus eingeschaltet wird, wird das Archivprotokoll standardmäßig im Rückblendebereich der Datenbank gespeichert – sofern kein neuer Pfad für das Archivprotokoll angegeben wurde – und als „USE_DB_RECOVERY_FILE_DEST“ angezeigt, was tatsächlich dem Pfad der Rückblende entspricht.
Zusätzlich können der Standort und die Größe des Rückblendenbereichs sowie der Archivpfad manuell festgelegt werden.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
SQL> shutdown immediate
SQL> startup mount
SQL> alter database flashback on; Bei der Installation der Datenbank hatte ich nicht die Option „Flashback aktivieren“ gewählt, weshalb folgender Fehler auftrat
Datenbank-Wiederherstellungsfunktion aktivieren
*
FEHLER in Zeile 1:
ORA-38706: Die Protokollierung der FLASHBACK-DATENBANK kann nicht aktiviert werden.
ORA-38709: Der Wiederherstellungsbereich ist nicht aktiviert.
Richten Sie den Flash-Recovery-Bereich ein:
Festlegen der Größe des Flash-Recovery-Bereichs: Die Standardgröße des Oracle-Flash-Recovery-Bereichs beträgt 2 GB
SQL> alter system set db_recovery_file_dest_size=5g scope=spfile;
Zeigen Sie die Speicherplatzgröße des angegebenen Pfads im Flashback-Bereich an:
SQL> show parameter db_recovery_file_dest_size
NAME TYPE WERT
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest_size große Ganzzahl 30G
Legen Sie den Speicherort des Flashback-Bereichs fest:
SQL> ALTER SYSTEM SET db_recovery_file_dest='/home/oracle/u01/app/oracle/account_flashback_area' SCOPE=SPFILE;
Legen Sie das Flashback-Ziel auf 5 Tage fest (in Minuten; der Oracle-Standardwert beträgt 1440 Minuten, also einen Tag).
SQL> ALTER SYSTEM SET db_flashback_retention_target=7200 SCOPE=SPFILE;
Erstellen Sie die für den Flashback erforderlichen Verzeichnisse auf Betriebssystemebene:
[oracle@dbserver oracle]$ mkdir -p /home/oracle/u01/app/oracle/account_flashback_area
SQL> ALTER DATABASE FLASHBACK ON;
Datenbank geändert.
SQL> ALTER DATABASE OPEN;
Datenbank geändert.
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
–----------------
JA
SQL> archive log list
Datenbank-Log-Modus Archivmodus
Automatische Archivierung Aktiviert
Archivziel USE_DB_RECOVERY_FILE_DEST
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
Fazit: Wenn der Flashback-Modus aktiviert ist und der Archivmodus erneut eingeschaltet wird, ohne dass ein neuer Pfad für die Archivlogs angegeben wird, werden die Archivlogs standardmäßig im Flashback-Bereich der Datenbank gespeichert und als „USE_DB_RECOVERY_FILE_DEST“ angezeigt – dies entspricht tatsächlich dem Pfad des Flashbacks.
Derzeit testen wir, den Flashback zu deaktivieren und die Datenbank neu zu starten, um den Pfad der Archivprotokolle anzuzeigen.
SQL> SELECT open_mode FROM v$database;
OPEN_MODE
--------------------
READ WRITE
SQL> SHUTDOWN IMMEDIATE
Datenbank geschlossen.
SQL> startup mount
ORACLE-Instanz gestartet.

Archivmodus schließen – erinnert uns daran, dass die Datenbank im Archivmodus ausgeführt wird. Wenn der Flashback aktiviert ist, kann das Archiv nicht direkt geschlossen werden.
SQL> ALTER DATABASE NOARCHIVELOG;ALTER DATABASE NOARCHIVELOG*FEHLER in Zeile 1:ORA-38774: Medienwiederherstellung kann nicht deaktiviert werden – Flashback-Datenbank ist aktiviert
Anschließend deaktivieren wir zunächst den Flashback.
SQL> alter database flashback off;
Datenbank geändert.
SQL> alter database noarchivelog;
Datenbank geändert.
SQL> Datenbank öffnen;
Datenbank geändert.
SQL> archive log list
Protokollmodus der Datenbank Kein Archivmodus
Automatische Archivierung Deaktiviert
Archivierungsziel USE_DB_RECOVERY_FILE_DEST
Älteste Online-Protokollsequenz 6
Aktuelle Protokollsequenz 8
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
–----------------
NEIN
Neustart durchführen, Archivansicht öffnen und Archivpfad anzeigen
SQL> shutdown immediate
Datenbank geschlossen.
SQL> startup mount
ORACLE-Instanz gestartet.
SQL> alter database archivelog;
Datenbank geändert.
SQL> alter database open;
Datenbank geändert.
SQL> archive log list
Betriebsmodus der Datenbank Archivmodus
Automatisches Archivieren Aktiviert
Archivziel USE_DB_RECOVERY_FILE_DEST
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
SQL> SELECT flashback_on, open_mode FROM v$database;
FLASHBACK_ON OPEN_MODE
–---------------- --------------------
NEIN READ WRITE
Fazit: Wenn Sie das Archiv öffnen, müssen Sie die Rückblende-Funktion nicht unbedingt aktivieren – Sie müssen die Rückblende nicht aktivieren!!!
Test 3: Standard-Archivpfad ändern
SQL> shutdown immediate
SQL> startup mount
ORACLE-Instanz gestartet.
SQL> archive log list
Datenbank-Logmodus Archivmodus
Automatisches Archivieren Aktiviert
Archiv-Ziel USE_DB_RECOVERY_FILE_DEST
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
SQL> alter system set log_archive_dest_1=‘location=/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch’;
System geändert.
SQL> archive log list
Protokollmodus der Datenbank Archivmodus
Automatische Archivierung Aktiviert
Archivziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Protokollsequenz 6
Nächste zu archivierende Protokollsequenz 8
Aktuelle Protokollsequenz 8
SQL> SELECT flashback_on, open_mode FROM v$database;
FLASHBACK_ON ÖFFNUNGS-MODUS
–---------------- --------------------
NEIN IM MOUNT-ZUSTAND
Test 4: Wir schließen das Archiv, aktivieren zunächst den Flashback, dann das Archiv, starten die Datenbank, überprüfen den Archivpfad und prüfen, ob der benutzerdefinierte Pfad verwendet wird; anschließend ändern wir ihn in den standardmäßigen Flashback-Pfad.
SQL> ALTER DATABASE NOARCHIVELOG; Datenbank geändert.
SQL> archive log list
Datenbank-Log-Modus Kein Archivmodus
Automatische Archivierung Deaktiviert
Archivziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Log-Sequenz 6
Aktuelle Log-Sequenz 8
SQL> ALTER DATABASE FLASHBACK ON; –– Flashback kann im Nicht-Archivmodus nicht aktiviert werden
Datenbank-Wiederherstellungsfunktion aktivieren
*
FEHLER in Zeile 1:
ORA-38706: Die Protokollierung der FLASHBACK-DATABASE-Funktion kann nicht aktiviert werden.
ORA-38707: Die Medienwiederherstellung ist nicht aktiviert.
Fazit: Flashback kann im Nicht-Archivmodus nicht aktiviert werden
################################################
SQL> ALTER DATABASE ARCHIVELOG;
Datenbank geändert.
SQL> ARCHIVE LOG LIST
Modus des Datenbank-Logs Archivmodus
Automatisches Archivieren Aktiviert
Archiv-Ziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
SQL>
SQL> ALTER DATABASE FLASHBACK ON;
Datenbank geändert.
SQL> archive log list
Datenbank-Log-Modus Archivmodus
Automatisches Archivieren Aktiviert
Archiv-Ziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
Fazit: Wenn für das Archivprotokoll ein Speicherpfad angegeben ist, bleibt bei aktivierter Flashback-Funktion der Speicherpfad des Archivprotokolls der ursprünglich vom Benutzer festgelegte Pfad.
#############################
Fortsetzung:
Ändern Sie das Archivprotokoll in den standardmäßigen Speicherpfad der Datenbank. Wiederholen Sie den obigen Vorgang, um zu bestätigen, ob der Pfad des Archivprotokolls mit dem Pfad des Flashback-Bereichs übereinstimmt.
SQL> shutdown immediate
Datenbank geschlossen.
SQL> startup mount
ORACLE-Instanz gestartet.
SQL> archive log list
Archivmodus der Datenbank Archivmodus
Automatisches Archivieren Aktiviert
Archivziel /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
SQL> alter system set log_archive_dest_1=’’; – Ändern Sie das Archivprotokoll in den standardmäßigen Speicherpfad der Datenbank
System geändert.
SQL> archive log list
Protokollmodus der Datenbank Archivmodus
Automatische Archivierung Aktiviert
Archivierungsziel ?/dbs/arch
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
SQL> Datenbank öffnen;
Datenbank geändert.
SQL> archive log list
Datenbank-Log-Modus Archivmodus
Automatisches Archivieren Aktiviert
Archiv-Zielverzeichnis ?/dbs/arch
Älteste Online-Log-Sequenz 6
Nächste zu archivierende Log-Sequenz 8
Aktuelle Log-Sequenz 8
SQL> SELECT flashback_on, open_mode FROM v$database;
FLASHBACK_ON OPEN_MODE
–---------------- --------------------
JA LESEN/SCHREIBEN
SQL> shutdown immediate
Datenbank geschlossen.
SQL> startup
ORACLE-Instanz gestartet.
SQL> archive log list
Protokollmodus der Datenbank Archivmodus
Automatische Archivierung Aktiviert
Archivierungsziel USE_DB_RECOVERY_FILE_DEST
Älteste Online-Protokollsequenz 6
Nächste zu archivierende Protokollsequenz 8
Aktuelle Protokollsequenz 8
Fazit: Das Archivprotokoll ist der standardmäßige Speicherort für die Datenbank. Wenn die Rückspul-Funktion aktiviert ist, muss in den Archivmodus gewechselt werden. Der Pfad des Archivprotokolls ist standardmäßig identisch mit dem Pfad des Rückspulbereichs.