È necessario abilitare l’archiviazione dei log quando ORACLE crea un database?
Il database Oracle può essere eseguito in due modalità: modalità archivio (archivelog) e modalità non archivio (noarchivelog).
La modalità archivio può migliorare la ripristinabilità del database Oracle.
Tutti i database di produzione dovrebbero essere eseguiti in questa modalità e la modalità archivio dovrebbe essere abbinata alla corrispondente strategia di backup. Utilizzare esclusivamente la modalità archivio senza una strategia di backup adeguata genererà soltanto problemi.
Per impostazione predefinita, il database Oracle viene creato in modalità file di log senza registrazione,
Nella modalità di log non archiviato, il log redo verrà riscritto direttamente al momento del passaggio del log. Se in questo momento il file dati viene danneggiato a causa di un guasto hardware, i dati riscritti andranno persi durante il ripristino del database;
In modalità log archiviati, il database può utilizzare tutti i file di log archiviati generati dal backup più recente del database per garantire che non venga perso alcun dato; la maggior parte dei database produttivi funziona in modalità archivelog.
Dopo che il database Oracle ha attivato la modalità di log archiviato, avvierà automaticamente un nuovo processo: l’archiviatore ARCn. Per impostazione predefinita vengono avviati 4 processi. Nelle applicazioni reali è possibile avviare fino a 30 processi archiviatori.
[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
Il log di archiviazione è una copia di backup di un redo log inattivo. Utilizzando i log di archiviazione, è possibile conservare tutti i record storici dei redo. Quando il database è in modalità ARCHIVELOG e si verifica un cambio di log,
Il processo in background ARCH salverà il contenuto del log di redo nel log di archiviazione. In caso di guasto hardware del database, è possibile utilizzare il backup dei file dati, il log di archiviazione e il log di redo per ripristinare completamente il database.
#########################
Passaggio dalla modalità non archivio alla modalità archivio
Prima della modifica:
Confermare l’ambiente. Controllare il database per verificare se l’archiviazione è abilitata: --- Le informazioni riportate di seguito si riferiscono al caso in cui, durante l’installazione del database, non è stata selezionata l’opzione per abilitare il flashback né quella per abilitare l’archiviazione.
SQL> archive log list
Modalità di log del database: No Archive Mode
Archiviazione automatica: Disabilitata
Destinazione dell’archivio: /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza del log online più vecchio: 4
Sequenza corrente del log: 6
SQL> SELECT name, log_mode FROM v$database;
NAME LOG_MODE
–------- ------------
ORCL NOARCHIVELOG
SQL> show parameter db_recovery
NOME TIPO VALORE
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest stringa
db_recovery_file_dest_size intero grande 0
######### I seguenti test verificano l’operazione di passaggio del database dalla modalità non-archivio a quella archivio, quando il flashback non è abilitato ############
SQL> shutdown immediato Database chiusa.
SQL> startup mount
Istanza ORACLE avviata.
SQL> alter database archivelog;
Database modificato.
SQL> alter database open;
Database modificato.
SQL> archive log list
Modalità del log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza più vecchia di log online 4
Sequenza successiva da archiviare 6
Sequenza corrente del log 6
SQL> SELECT name FROM v$archived_log;
nessuna riga selezionata
SQL> alter system archive log current;
Sistema modificato.
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;
NOME TIPO VALORE
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest stringa
db_recovery_file_dest_size intero grande 0
db_unrecoverable_scn_tracking booleano TRUE
recovery_parallelism intero 0
SQL> select * da V$FLASH_RECOVERY_AREA_USAGE;
nessuna riga selezionata
Quando log_archive_log è impostato sul valore predefinito, la directory di archiviazione diventerà ?/dbs/arch.
SQL> alter system set log_archive_dest_1='';
Sistema modificato.
SQL> archive log list
Modalità del log del database: Modalità di archiviazione
Archiviazione automatica: Abilitata
Destinazione dell’archivio: ?/dbs/arch
Sequenza più vecchia del log online: 5
Sequenza successiva da archiviare: 7
Sequenza corrente del log: 7
SQL> shutdown immediate
Database chiuso.
Database smontato.
Istanza ORACLE arrestata.
SQL> startup mount
Istanza ORACLE avviata.
Dopo il riavvio del database in modalità mount, la directory di archiviazione torna alla directory predefinita originale.
SQL> archive log list
Modalità di registrazione del database: Modalità di archiviazione
Archiviazione automatica: Abilitata
Destinazione di archiviazione: /home/oracle/u01/app/oracle/product/11.2.2.0/dbhome_1/dbs/archOldest sequenza del log online più vecchio 5
Sequenza del prossimo log da archiviare 7
Sequenza corrente del log 7
--- Impostare il numero massimo di processi aperti per l’archiviazione
SQL> alter system set log_archive_max_processes = 5;
System altered.--- Modifica il formato di archiviazione dei log SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile; Sistema modificato.
SQL> startup
Istanza ORACLE avviata.
SQL> shutdown immediato
Database smontato.
Area globale totale del sistema: 939495424 byte
Dimensione fissa: 2258840 byte
Dimensione variabile: 637536360 byte
Buffer del database: 293601280 byte
Buffer redo: 6098944 byte
Database montato.
Database aperto.
SQL> archive log list
Modalità del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione archiviazione /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza più vecchia di redo log online 5
Prossima sequenza di redo log da archiviare 7
Sequenza corrente di redo log 7
SQL> show parameter db_recovery
NOME TIPO VALORE
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest stringa
db_recovery_file_dest_size intero grande 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;
Sistema modificato.
SQL> SELECT recid, name, first_time DA v$archived_log;
NOME
–------------------------------------------------------------------------------
/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 DA V$RECOVERY_FILE_DEST;
Nessuna riga selezionata
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
–----------------
NO
#############################
Attiva il flashback del database. Imposta il percorso e la dimensione dell’area di recupero flash per eseguire il test. Disattiva innanzitutto la modalità archiviazione, quindi attiva il percorso predefinito: dopo l’archiviazione, tale percorso diventa il percorso di flashback del database.
Controlla il database per verificare se attivare la funzione di flashback
Nota: se si attiva la funzione di flashback, è necessario essere in modalità archivio, altrimenti il flashback non ha alcun senso! ! ! !
Tuttavia, se apri l’archivio, non è necessario attivare necessariamente la funzione di flashback! ! !
Se il flashback è attivato e successivamente viene attivata la modalità di archiviazione, nel caso in cui il log di archiviazione non specifichi un nuovo percorso, quest’ultimo verrà salvato per impostazione predefinita nell’area di flashback del database e visualizzato come: USE_DB_RECOVERY_FILE_DEST, che in realtà corrisponde al percorso del flashback.
Inoltre, è possibile impostare manualmente la posizione e le dimensioni dell’area di riproduzione e del percorso dell’archivio.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
SQL> shutdown immediate
SQL> startup mount
SQL> alter database flashback on; Durante l’installazione del database non avevo scelto di abilitare la funzione flashback e si è verificato il seguente errore
ALTER DATABASE FLASHBACK ON
*
ERRORE alla riga 1:
ORA-38706: Impossibile abilitare la registrazione FLASHBACK DATABASE.
ORA-38709: L'area di ripristino non è abilitata.
Configurare l’area di ripristino flash:
Imposta la dimensione dell'area di recupero flash: l'area di recupero flash predefinita di Oracle è 2 GB
SQL> alter system set db_recovery_file_dest_size=5g scope=spfile;
Visualizza la dimensione dello spazio del percorso specificato nell’area di flashback:
SQL> show parameter db_recovery_file_dest_size
NOME TIPO VALORE
–---------------------------------- ----------- ------------------------------
db_recovery_file_dest_size intero grande 30G
Imposta la posizione dell'area di flashback:
SQL> alter system set db_recovery_file_dest='/home/oracle/u01/app/oracle/account_flashback_area' scope=spfile;
Impostare la durata del flashback su 5 giorni, espressa in minuti (il valore predefinito di Oracle è 1440 minuti, pari a un giorno)
SQL> alter system set db_flashback_retention_target=7200 scope=spfile;
Creare le directory relative al flashback a livello di sistema operativo:
[oracle@dbserver oracle]$ mkdir -p /home/oracle/u01/app/oracle/account_flashback_area
SQL> ALTER DATABASE FLASHBACK ON;
Database modificata.
SQL> ALTER DATABASE OPEN;
Database modificata.
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
–----------------
SÌ
SQL> archive log list
Modalità del log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio USE_DB_RECOVERY_FILE_DEST
Sequenza più vecchia del log online 6
Sequenza successiva da archiviare 8
Sequenza corrente del log 8
Conclusione: se la funzionalità Flashback è abilitata e la modalità archiviazione è nuovamente attivata, ma non viene specificato un nuovo percorso per i log di archiviazione, questi ultimi vengono salvati per impostazione predefinita nell’area di flashback del database e visualizzati come: USE_DB_RECOVERY_FILE_DEST, che corrisponde in effetti al percorso dell’area di flashback.
Al momento, eseguiremo un test per disattivare il flashback e riavviare il database al fine di visualizzare il percorso dei log di archiviazione.
SQL> select open_mode da v$database;OPEN_MODE--------------------READ WRITE
SQL> shutdown immediate
Database chiusa.
SQL> startup mount
Istanza ORACLE avviata.

Chiudi la modalità archivio — ricorda che il database è in esecuzione in modalità archivio. Quando il flashback è abilitato, la modalità archivio non può essere disattivata direttamente.
SQL> alter database noarchivelog;alter database noarchivelog*ERRORE alla riga 1:ORA-38774: impossibile disabilitare il ripristino multimediale - il flashback del database è abilitato
Successivamente disabilitiamo prima il flashback
SQL> alter database flashback off;
Database modificata.
SQL> alter database noarchivelog;
Database modificata.
SQL> alter database open;
Database modificato.
SQL> archive log list
Modalità di log del database Modalità senza archiviazione
Archiviazione automatica Disabilitata
Destinazione dell’archivio USE_DB_RECOVERY_FILE_DEST
Sequenza più vecchia del log online 6
Sequenza corrente del log 8
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
–----------------
NO
Riavvia, apri la vista degli archivi e visualizza il percorso dell’archivio
SQL> shutdown immediato
Database chiusa.
SQL> startup mount
Instanza ORACLE avviata.
SQL> alter database archivelog;
Database modificata.
SQL> alter database open;
Database modificata.
SQL> archive log list
Modalità di log del database Modalità Archivio
Archiviazione automatica Abilitata
Destinazione archiviazione USE_DB_RECOVERY_FILE_DEST
Sequenza più vecchia di log online 6
Sequenza successiva di log da archiviare 8
Sequenza corrente di log 8
SQL> SELECT flashback_on, open_mode FROM v$database;
FLASHBACK_ON OPEN_MODE
–---------------- --------------------
NO LETTURA/SCRITTURA
Conclusione: Se apri l’archivio, non è necessario attivare la funzione di riproduzione in retrospettiva; non devi attivare la riproduzione in retrospettiva!!!
Test 3: Modificare il percorso predefinito degli archivi
SQL> shutdown immediato
SQL> startup mount
Istanza ORACLE avviata.
SQL> archive log list
Modalità del log del database: Modalità archiviazione
Archiviazione automatica: Abilitata
Destinazione degli archivi: USE_DB_RECOVERY_FILE_DEST
Sequenza del log online più vecchio: 6
Sequenza del prossimo log da archiviare: 8
Sequenza corrente del log: 8
SQL> alter system set log_archive_dest_1='location=/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch';
Sistema modificato.
SQL> archive log list
Modalità di log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza più vecchia di log online 6
Prossima sequenza di log da archiviare 8
Sequenza corrente di log 8
SQL> SELECT flashback_on, open_mode FROM v$database;
RIPRODUZIONE GUIDATA MODALITÀ DI APERTURA
–---------------- --------------------
NO MONTATO
Test 4: Chiudiamo l’archivio; innanzitutto attiviamo il flashback, quindi attiviamo l’archivio, avviamo il database, verifichiamo il percorso dell’archivio e controlliamo se corrisponde al percorso personalizzato; in caso negativo, lo modifichiamo impostandolo sul percorso predefinito del flashback.
SQL> alter database noarchivelog;Database modificato.
SQL> archive log list
Modalità di log del database Modalità senza archiviazione
Archiviazione automatica Disabilitata
Destinazione dell’archivio /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza più vecchia dei log online 6
Sequenza corrente dei log 8
SQL> alter database flashback on; –– Il flashback non può essere abilitato in modalità non archiviazione
ALTER DATABASE FLASHBACK ON
*
ERRORE alla riga 1:
ORA-38706: Impossibile abilitare la registrazione FLASHBACK DATABASE.
ORA-38707: Il ripristino multimediale non è abilitato.
Conclusione: la funzione Flashback non può essere attivata in modalità non archivio
################################################
SQL> alter database archivelog;
Database modificata.
SQL> archive log list
Modalità di log del database: Modalità di archiviazione
Archiviazione automatica: Abilitata
Destinazione dell’archivio: /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza del log online più vecchio: 6
Sequenza del log successivo da archiviare: 8
Sequenza del log corrente: 8
SQL>
SQL> alter database flashback on;
Database modificato.
SQL> archive log list
Modalità del log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza più vecchia del log online 6
Sequenza successiva da archiviare 8
Sequenza corrente del log 8
Conclusione: se viene specificato un percorso di archiviazione per il log degli archivi, allora, se il flashback è abilitato, il percorso di archiviazione del log degli archivi rimane quello originariamente specificato dall’utente
#############################
Procedere:
Modificare il log degli archivi in modo che utilizzi il percorso di archiviazione predefinito del database. Ripetere l’operazione precedente per verificare se il percorso del log degli archivi corrisponde a quello dell’area di flashback
SQL> shutdown immediate
Database chiusa.
SQL> startup mount
Istanza ORACLE avviata.
SQL> archive log list
Modalità di log del database: Modalità archiviazione
Archiviazione automatica: Abilitata
Destinazione di archiviazione: /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Sequenza del log online più vecchio: 6
Sequenza del prossimo log da archiviare: 8
Sequenza corrente del log: 8
SQL> alter system set log_archive_dest_1=’’; –-Modifica il log degli archivi come percorso di archiviazione predefinito del database
Sistema modificato.
SQL> archive log list
Modalità del log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio ?/dbs/arch
Sequenza più vecchia del log online 6
Prossima sequenza di log da archiviare 8
Sequenza corrente del log 8
SQL> alter database open;
Database modificato.
SQL> archive log list
Modalità del log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio ?/dbs/arch
Sequenza più vecchia del log online 6
Prossima sequenza di log da archiviare 8
Sequenza corrente del log 8
SQL> SELECT flashback_on, open_mode FROM v$database;
FLASHBACK_ON OPEN_MODE
–---------------- --------------------
YES READ WRITE
SQL> shutdown immediate
Database chiuso.
SQL> startup
Istanza ORACLE avviata.
SQL> archive log list
Modalità del log del database Modalità archiviazione
Archiviazione automatica Abilitata
Destinazione dell’archivio USE_DB_RECOVERY_FILE_DEST
Sequenza più vecchia del log online 6
Sequenza successiva da archiviare 8
Sequenza corrente del log 8
Conclusione: il log degli archivi è il percorso di archiviazione predefinito del database. Quando la funzione di ripristino temporale è abilitata, passare alla modalità di archiviazione. Il percorso del log degli archivi corrisponde per impostazione predefinita al percorso dell’area di ripristino temporale.