Cold-Backup-strategi for en Noarchivelog-tilstand Oracle Database 12c

du udfører en brugeradministreret kold backup ved at kopiere filer, efter at databasen er lukket ned. Denne type backup er også kendt som en offline backup. Din Oracle database 12c kan være i enten noarchivelog-tilstand eller archivelog-tilstand, når du laver en kold sikkerhedskopi.

DBA ‘ er har en tendens til at tænke på en kold sikkerhedskopi som synonym med en sikkerhedskopi af en database i noarchivelog-tilstand. Det er ikke korrekt. Du kan lave en kold sikkerhedskopi af en database i archivelog-tilstand, og det er en backup-strategi, som mange butikker anvender. Forskellene mellem en kold sikkerhedskopi med databasen i noarchivelog-tilstand og i archivelog-tilstand er beskrevet i de følgende afsnit.

at lave en kold sikkerhedskopi af en Noarchivelog-Tilstandsdatabase

en hovedårsag til at lave en kold sikkerhedskopi af en Oracle-database 12c i noarchivelog-tilstand er at give dig en måde at gendanne en database tilbage til et tidspunkt i fortiden. Du bør kun bruge denne type sikkerhedskopi, hvis du ikke behøver at gendanne transaktioner, der opstod efter sikkerhedskopien. Denne type backup-og gendannelsesstrategi er kun acceptabel, hvis dine forretningskrav tillader tab af data og nedetid. Sjældent vil du nogensinde implementere denne type backup-og gendannelsesløsning til en produktionsdatabase.

når det er sagt, er der nogle gode grunde til at implementere denne type backup. En almindelig anvendelse er at lave en kold sikkerhedskopi af en udviklings – /test – /træningsdatabase og med jævne mellemrum nulstille databasen tilbage til basislinjen. Dette giver dig mulighed for at genstarte en præstationstest eller en træning med det samme øjebliksbillede af databasen.

billede

billede

Tip overvej at bruge Flashback-Databasefunktionen til at indstille din database tilbage til et tidspunkt i fortiden.

eksemplet i dette afsnit viser dig, hvordan du laver en sikkerhedskopi af alle kritiske filer i din database: alle kontrolfiler, datafiler, midlertidige datafiler og online gentag logfiler. Med denne type backup kan du nemt gendanne din database tilbage til det tidspunkt, hvor sikkerhedskopien blev lavet. De vigtigste fordele ved denne tilgang er, at den er konceptuelt enkel og nem at implementere. Her er de trin, der kræves for en kold sikkerhedskopi af en database i noarchivelog-tilstand:

  1. Bestem, hvor du skal kopiere sikkerhedskopifilerne, og hvor meget plads der kræves.
  2. Identificer placeringen og navnene på de databasefiler, der skal kopieres.
  3. Luk databasen med den øjeblikkelige, transaktionsmæssige eller normale klausul.
  4. kopier filerne (identificeret i trin 2) til backupplaceringen (bestemt i trin 1).
  5. genstart din Oracle database 12c.

de følgende afsnit uddyber disse trin.

Trin 1. Bestem, hvor sikkerhedskopifilerne skal kopieres, og hvor meget plads der kræves

ideelt set skal sikkerhedskopieringsplaceringen være på et sæt diske, der er adskilt fra din placering af live datafiler. I mange butikker har du dog muligvis ikke et valg og får muligvis at vide, hvilke monteringspunkter der skal bruges af databasen. For dette eksempel backup placering er mappen / u01/cbackup / O12C. For at få en grov ide om, hvor meget plads du har brug for til at gemme en kopi af sikkerhedskopierne, kan du køre denne forespørgsel:

select sum(sum_bytes)/1024/1024 m_bytesfrom(select sum(bytes) sum_bytes from v$datafileunionselect sum(bytes) sum_bytes from v$tempfileunionselect (sum(bytes) * members) sum_bytes from v$loggroup by members);

du kan kontrollere, hvor meget diskplads der er til rådighed med kommandoen df (disk free). Sørg for, at mængden af diskplads, der er tilgængelig på operativsystemet, er større end det beløb, der returneres fra den tidligere forespørgsel:

$ df -h

Trin 2. Identificer placeringer og navne på de databasefiler, der skal kopieres

Kør denne forespørgsel for at liste navnene (og stierne) på de filer, der er inkluderet i en kold sikkerhedskopi af en noarchivelog-tilstandsdatabase:

select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;

sikkerhedskopiering af online REDO LOGS (eller ej)

har du brug for at sikkerhedskopiere online redo logs? Ingen; du behøver aldrig at sikkerhedskopiere online redo logs som en del af nogen form for backup. Så, hvorfor DBA ‘ er sikkerhedskopiere online redo logs som en del af en kold backup? En af grundene er, at det gør gendannelsesprocessen for scenariet noarchivelog-tilstand lidt lettere. De online redo logfiler er forpligtet til at åbne databasen på en normal måde.

hvis du sikkerhedskopierer alle filer (inklusive online redo logs), så for at få din Oracle database 12c tilbage til den tilstand, den var i på tidspunktet for sikkerhedskopien, gendanner du alle filer (inklusive online redo logs) og starter din database.

Trin 3. Luk databasen

Opret forbindelse til din database som SYS (eller som en sysdba-privilegeret bruger), og luk din database ved hjælp af øjeblikkelig, TRANSAKTIONEL eller NORMAL. I næsten enhver situation er brug af øjeblikkelig den foretrukne metode. Denne tilstand Afbryder brugerne, ruller tilbage ufuldstændige transaktioner, og lukker databasen:

$ sqlplus / as sysdbaSQL> shutdown immediate;

Trin 4. Opret sikkerhedskopier af filerne

for hver fil, der er identificeret i trin 2, skal du bruge et OS-værktøj til at kopiere filerne til en backup-mappe (identificeret i trin 1). I dette enkle eksempel er alle datafiler, kontrolfiler, midlertidige databasefiler og online redo-logfiler i samme mappe. I produktionsmiljøer har du sandsynligvis filer spredt ud i flere forskellige mapper. Dette eksempel bruger kommandoen cp til at kopiere databasefilerne fra/u01/dbfile /O12C til mappen/u01/cbackup / O12C:

$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C

Trin 5. Genstart din Database

når alle filerne er kopieret, kan du starte din database:

$ sqlplus / as sysdbaSQL> startup;

Gendannelse af en kold sikkerhedskopi i Noarchivelog-tilstand med online Redo-logfiler

det næste eksempel forklarer, hvordan du gendanner fra en kold sikkerhedskopi af en database i noarchivelog-tilstand. Hvis du inkluderede online redo-logfilerne som en del af den kolde sikkerhedskopi, kan du medtage dem, når du gendanner filerne. Her er de trin, der er involveret i denne procedure:

  1. Luk forekomsten.
  2. Kopier datafiler, online redo logs, midlertidige filer, og styre filer tilbage fra backup til live database datafil steder.
  3. Start din database.

disse trin er beskrevet i de følgende afsnit.

Trin 1. Luk forekomsten

Luk forekomsten, hvis den kører. I dette scenario er det ligegyldigt, hvordan du lukker Oracle database 12c, fordi du genopretter tilbage til et tidspunkt (uden genopretning af transaktioner). Alle filer i live database directory steder overskrives, når backup-filer kopieres tilbage. Hvis din forekomst kører, kan du pludselig afbryde den. Som en SYSDBA-privilegeret bruger skal du gøre følgende:

$ sqlplus / as sysdbaSQL> shutdown abort;

Trin 2. Kopier filerne tilbage fra sikkerhedskopien

dette trin gør det modsatte af sikkerhedskopien: du kopierer filer fra sikkerhedskopieringsplaceringen til live-databasefilplaceringerne. I dette eksempel er alle backupfilerne placeret i mappen/u01/cbackup / O12C, og alle filer kopieres til mappen / u01 / dbfile / O12C:

$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C

Trin 3. Start databasen

Opret forbindelse til din database som SYS (eller en bruger, der har sysdba-privilegier), og start din database:

$ sqlplus / as sysdbaSQL> startup;

når du er færdig med disse trin, skal du have en nøjagtig kopi af din database, som den var, da du lavede den kolde sikkerhedskopi. Det er som om du indstiller din database tilbage til det tidspunkt, hvor du lavede sikkerhedskopien.

Gendannelse af en kold sikkerhedskopi i Noarchivelog-tilstand uden Online Redo Logs

som tidligere nævnt behøver du aldrig online redo logs, når du gendanner fra en kold sikkerhedskopi. Hvis du lavede en kold sikkerhedskopi af din database i noarchivelog-tilstand og ikke inkluderede online redo-logfiler som en del af sikkerhedskopien, er trinnene til gendannelse næsten identiske med trinnene i det foregående afsnit. Den største forskel er, at det sidste trin kræver, at du åbner din database ved hjælp af klausulen åbn RESETLOGS. Her er trinene:

  1. Luk forekomsten.
  2. Kopier kontrolfilerne og datafilerne tilbage fra sikkerhedskopien.
  3. Start databasen i monteringstilstand.
  4. Åbn databasen med klausulen åbn RESETLOGS.

Trin 1. Luk forekomsten

Luk forekomsten, hvis den kører. I dette scenario er det ligegyldigt, hvordan du lukker Oracle database 12c, fordi du genopretter tilbage til et tidspunkt. Alle filer i live database directory steder overskrives, når sikkerhedskopierne kopieres. Hvis din forekomst kører, kan du pludselig afbryde den. Som en SYSDBA-privilegeret bruger skal du gøre følgende:

$ sqlplus / as sysdbaSQL> shutdown abort;

Trin 2. Kopier filerne tilbage fra sikkerhedskopien

Kopier kontrolfilerne og datafilerne fra sikkerhedskopieringsplaceringen til de levende datafilplaceringer:

$ cp <backup directory>/*.* <live database file directory>

Trin 3. Start databasen i Monteringstilstand

Opret forbindelse til din database som SYS eller en bruger med SYSDBA-privilegier, og start databasen i monteringstilstand:

$ sqlplus / as sysdbaSQL> startup mount

Trin 4. Åbn databasen med klausulen åbn RESETLOGS

åbn din database til brug med klausulen åbn RESETLOGS:

SQL> alter database open resetlogs;

hvis du ser den ændrede Databasemeddelelse, var kommandoen vellykket. Du kan dog se denne fejl:

ORA-01139: RESETLOGS option only valid after an incomplete database recovery

i dette tilfælde skal du udstede følgende kommando:

SQL> recover database until cancel;

du skal se denne meddelelse:

Media recovery complete.

forsøg nu at åbne din database med klausulen åbn RESETLOGS:

SQL> alter database open resetlogs;

denne erklæring instruerer Oracle om at genskabe de online redo-logfiler. Oracle bruger oplysninger i kontrolfilen til placering, navn og størrelse på gentagelseslogfilerne. Hvis der er gamle online redo logfiler på disse steder, overskrives de.

hvis du overvåger din alarm.log igennem denne proces, kan du se ORA-00312 og ORA-00313. Det betyder, at Oracle ikke kan finde online redo logfiler; Det er okay, fordi disse filer ikke er fysisk tilgængelige, før de er genskabt af kommandoen OPEN RESETLOGS.

Scripting en kold Backup og gendannelse

det er instruktions at se, hvordan man script en kold backup. Den grundlæggende ide er at dynamisk forespørge dataordbogen for at bestemme placeringen og navnene på de filer, der skal sikkerhedskopieres. Dette foretrækkes frem for hårdkodning af katalogplaceringer og filnavne i et script. Den dynamiske generation af et script er mindre tilbøjelige til fejl og overraskelser (f.eks tilføjelse af nye datafiler til en database, men ikke til en gammel, hard-kodet backup script).

billede

billede

Bemærk scripts i dette afsnit er ikke beregnet til at være produktionsstyrke backup og recovery scripts. Snarere illustrerer de de grundlæggende begreber ved scripting af en kold sikkerhedskopi og efterfølgende gendannelse.

det første script i dette afsnit laver en kold sikkerhedskopi af en database. Før du bruger cold backup-scriptet, skal du ændre disse variabler i scriptet, så de passer til dit databasemiljø:

  • ORACLE_SID
  • ORACLE_HOME
  • cbdir

cbdir-variablen angiver navnet på backup-mappeplaceringen. Scriptet opretter en fil med navnet coldback.for at starte en kold backup af databasen:

#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cspo coldback.sqlselect 'shutdown immediate;' from dual;select '!cp ' || name || ' ' || '&&cbdir' from v$datafile;select '!cp ' || name || ' ' || '&&cbdir' from v$tempfile;select '!cp ' || member || ' ' || '&&cbdir' from v$logfile;select '!cp ' || name || ' ' || '&&cbdir' from v$controlfile;select 'startup;' from dual;spo off;@@coldback.sqlEOFexit 0

denne fil genererer kommandoer, der skal udføres fra et script til at lave en kold backup af en Oracle database. Du placerer et udråbstegn (!* Plus at være vært for OS for at køre cp-kommandoen. Du placerer også en bagudrettet skråstreg ( \ ) foran hvert dollartegn ( $ ), når du henviser til visninger af V$ dataordbog. \ Undslipper $ og fortæller shell-scriptet ikke at behandle $ som et specialtegn ($betyder normalt en shell-variabel).

når du har kørt dette script, er her et eksempel på kopikommandoerne skrevet til coldback.KKL script:

shutdown immediate;!cp /u01/dbfile/O12C/system01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/sysaux01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/undotbs01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/users01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/tools01.dbf /u01/cbackup/O12C!cp /u01/dbfile/O12C/temp01.dbf /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo02a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo02b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo01a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo01b.rdo /u01/cbackup/O12C!cp /u01/oraredo/O12C/redo03a.rdo /u01/cbackup/O12C!cp /u02/oraredo/O12C/redo03b.rdo /u01/cbackup/O12C!cp /u01/dbfile/O12C/control01.ctl /u01/cbackup/O12C!cp /u01/dbfile/O12C/control02.ctl /u01/cbackup/O12Cstartup;

mens du laver en kold sikkerhedskopi, skal du også generere et script, der giver kommandoerne til at kopiere datafiler, temp-filer, logfiler og kontrollere filer tilbage til deres oprindelige placeringer. Du kan bruge dette script til at gendanne fra den kolde sikkerhedskopi. Det næste script i dette afsnit skaber dynamisk en forkølelsehvile.script, der kopierer filer fra backup placering til de oprindelige datafil steder. Du er nødt til at ændre dette script på samme måde, som du har ændret den kolde backup script (dvs. ændre oracle_sid, ORACLE_HOME, og cbdir variabler til at matche dit miljø):

#!/bin/bashORACLE_SID=O12CORACLE_HOME=/u01/app/oracle/product/12.1.0.1/db_1PATH=$PATH:$ORACLE_HOME/bin#sqlplus -s <<EOF/ as sysdbaset head off pages0 lines 132 verify off feed off trimsp ondefine cbdir=/u01/cbackup/O12Cdefine dbname=$ORACLE_SIDspo coldrest.sqlselect 'shutdown abort;' from dual;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$datafile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$tempfile;select '!cp ' || '&&cbdir/' || substr(member, instr(member,'/',-1,1)+1) || ' ' || member from v$logfile;select '!cp ' || '&&cbdir/' || substr(name, instr(name,'/',-1,1)+1) || ' ' || name from v$controlfile;select 'startup;' from dual;spo off;EOFexit 0

dette script opretter et script, der hedder coldrest.kopier kommandoer til at gendanne dine datafiler, temp filer, logfiler og kontrol filer tilbage til deres oprindelige placeringer. Når du har kørt dette shell-script, er her et uddrag af koden i coldrest.fil:

shutdown abort;!cp /u01/cbackup/O12C/system01.dbf /u01/dbfile/O12C/system01.dbf!cp /u01/cbackup/O12C/sysaux01.dbf /u01/dbfile/O12C/sysaux01.dbf!cp /u01/cbackup/O12C/undotbs01.dbf /u01/dbfile/O12C/undotbs01.dbf!cp /u01/cbackup/O12C/users01.dbf /u01/dbfile/O12C/users01.dbf!cp /u01/cbackup/O12C/tools01.dbf /u01/dbfile/O12C/tools01.dbf...!cp /u01/cbackup/O12C/redo03b.rdo /u02/oraredo/O12C/redo03b.rdo!cp /u01/cbackup/O12C/control01.ctl /u01/dbfile/O12C/control01.ctl!cp /u01/cbackup/O12C/control02.ctl /u01/dbfile/O12C/control02.ctlstartup;

hvis du har brug for at gendanne fra en kold sikkerhedskopi ved hjælp af dette script, skal du logge ind på:

$ sqlplus / as sysdbaSQL> @coldrest.sql

kr / intresting for dig:

håndtering af Oracle Database 12c O...

håndtering af Oracle Database 12c O… 4931 visninger Lør Lør, 29 Feb 2020, 10:18:11

gennemførelse af en varm Backup Stra...

implementering af en Hot Backup Stra… 6414 visninger Lør Lør, 29 Feb 2020, 10:16:34

matchende Oracle 12c bordtype...

matchende Oracle 12c bordtype… 1786 visninger Ded Lør, 18 Aug 2018, 16:59:35

standsning af Oracle-databasen 1...

standsning af Oracle-databasen 1… 976 visninger Peter Lør, 29 Feb 2020, 10:19:28

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.