Oracle-DB Archive voll – ALTERNATE

Jetzt mache ich schon über 20 Jahre Oracle DB. Immer noch vergisst man bei einem Import die ArchiveLog auszuschalten. Klar es gibt seit 12c die Möglichkeit bei impdp dies anzugeben. Aber es klappt nicht immer und es soll ja auch vielleicht nicht immer, z.B. wenn FORCE LOGGING eingestellt ist – DataGuard Umfeld.

 

Deswegen habe ich mich heute besonders gefreut, dass mir ein Kollege ein paar Zeilen gegeben hat:

 

-- Alte Destination löschen
-- #dest_1 bleibt primäre arch_dest
-- #dest_2 wird zus. arch_dest (Backup) im Fehlerfall

-- alles in CDB ausführen

col DEST_NAME format a20
col STATUS format a10
col ERROR format a20
col DESTINATION format a50
col RECOVERY_MODE format a13
col DATABASE_MODE format a13
set lines 200
set pages 100

!mkdir /scratch/oracle/arch/
ALTER SYSTEM SET LOG_ARCHIVE_DEST='';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/scratch/oracle/arch/';
select 'alter system set LOG_ARCHIVE_DEST_1=''LOCATION=' || DESTINATION || ' MAX_FAILURE=1 REOPEN ALTERNATE=LOG_ARCHIVE_DEST_2'';' from v$archive_dest where DEST_NAME='LOG_ARCHIVE_DEST_1';
-- Die eben erzeugte Zeile ausführen

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ALTERNATE;

-- Check:
SELECT dest_name, status, destination FROM v$archive_dest;
archive log list
select dest_name,database_mode,recovery_mode,error from v$archive_dest_status;

-- Switch logfile:
alter system archive log current;
-- oder
alter system archive log all;
-- oder
alter system switch logfile;

-- Wenn der Überlaufpuffer aktiviert wurde und alles wieder im Lot ist, die orig. Log-Destination wieder enablen:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='';
select 'alter system set LOG_ARCHIVE_DEST_1=''LOCATION=' || DESTINATION || ' MANDANTORY'';' from v$archive_dest where DEST_NAME='LOG_ARCHIVE_DEST_1';
-- Die eben erzeugte Zeile ausführen

-- check all:
SELECT dest_name, status, destination FROM v$archive_dest where STATUS != 'INACTIVE';
select dest_name,database_mode,recovery_mode,error from v$archive_dest_status where status != 'INACTIVE';

Quelle:
https://docs.oracle.com/database/122/ADMIN/managing-archived-redo-log-files.htm#ADMIN11354

 

Danke Holger!

 

PS: Aber wieso gehen wir nicht einfach in die Cloud, dann muss ich mich gar nicht mehr um die Archive kümmern, oder?

Schreibe einen Kommentar