du utför en användarhanterad kall backup genom att kopiera filer efter att databasen har stängts. Denna typ av backup är också känd som en offline backup. Din Oracle database 12c kan vara antingen noarchivelog läge eller archivelog läge när du gör en kall backup.
DBA tenderar att tänka på en kall säkerhetskopiering som synonymt med en säkerhetskopia av en databas i noarchivelog-läge. Det stämmer inte. Du kan göra en kall säkerhetskopiering av en databas i archivelog-läge, och det är en säkerhetskopieringsstrategi som många butiker använder. Skillnaderna mellan en kall säkerhetskopiering med databasen i noarchivelog-läge och i archivelog-läge beskrivs i följande avsnitt.
att göra en kall Backup av en Noarchivelog läge databas
En främsta orsaken till att göra en kall backup av en Oracle database 12c i noarchivelog läge är att ge dig ett sätt att återställa en databas tillbaka till en tidpunkt i det förflutna. Du bör bara använda den här typen av säkerhetskopiering om du inte behöver återställa transaktioner som inträffade efter säkerhetskopieringen. Denna typ av säkerhetskopierings-och återställningsstrategi är endast acceptabel om dina affärskrav möjliggör förlust av data och driftstopp. Sällan skulle du någonsin genomföra denna typ av säkerhetskopiering och återställning lösning för en produktionsverksamhet databas.
med detta sagt finns det några goda skäl att implementera denna typ av säkerhetskopiering. En vanlig användning är att göra en kall säkerhetskopiering av en utvecklings – /test – /träningsdatabas och regelbundet återställa databasen tillbaka till baslinjen. Detta ger dig ett sätt att starta om ett prestandatest eller ett träningspass med samma ögonblicksbild av databasen.
tips överväg att använda Flashback-Databasfunktionen för att ställa in databasen tillbaka till en tidpunkt tidigare.
exemplet i det här avsnittet visar hur du gör en säkerhetskopia av alla viktiga filer i databasen: alla kontrollfiler, datafiler, tillfälliga datafiler och online-gör om loggfiler. Med den här typen av säkerhetskopiering kan du enkelt återställa din databas tillbaka till den tidpunkt då säkerhetskopieringen gjordes. De främsta fördelarna med detta tillvägagångssätt är att det är konceptuellt enkelt och lätt att implementera. Här är stegen som krävs för en kall säkerhetskopiering av en databas i noarchivelog-läge:
- Bestäm var du ska kopiera säkerhetskopiorna och hur mycket utrymme som krävs.
- identifiera platser och namn på databasfilerna som ska kopieras.
- Stäng av databasen med omedelbar, transaktionell eller NORMAL klausul.
- kopiera filerna (identifierade i steg 2) till säkerhetskopieringsplatsen (bestämd i steg 1).
- starta om din Oracle-databas 12C.
följande avsnitt beskriver dessa steg.
Steg 1. Bestäm var du ska kopiera säkerhetskopiorna och hur mycket utrymme som krävs
helst bör säkerhetskopieringsplatsen vara på en uppsättning diskar som är separata från din plats för live-datafiler. Men i många butiker kanske du inte har något val och kan få veta vilka monteringspunkter som ska användas av databasen. I det här exemplet är säkerhetskopieringsplatsen katalogen / u01/cbackup / O12C. För att få en grov uppfattning om hur mycket utrymme du behöver för att lagra en kopia av säkerhetskopiorna kan du köra den här frågan:
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 verifiera hur mycket diskutrymme som är tillgängligt Med kommandot Linux / Unix DF (disk free). Se till att mängden tillgängligt diskutrymme på operativsystemet är större än summan som returneras från den tidigare frågan:
$ df -h
steg 2. Identifiera platser och namn på databasfilerna som ska kopieras
kör den här frågan för att lista namnen (och sökvägarna) för filerna som ingår i en kall säkerhetskopia av en noarchivelog-lägesdatabas:
select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;
säkerhetskopiera online gör loggar (eller inte)
behöver du säkerhetskopiera online gör loggar? Nej; du behöver aldrig säkerhetskopiera online gör loggar som en del av någon typ av backup. Sedan, varför DBA säkerhetskopiera Online göra loggar som en del av en kall backup? En anledning är att det gör återställningsprocessen för noarchivelog-läget lite enklare. Online gör loggar krävs för att öppna databasen på ett normalt sätt.
om du säkerhetskopierar alla filer (inklusive online gör om loggar), sedan för att få din Oracle database 12c tillbaka till det tillstånd det var i vid tidpunkten för säkerhetskopieringen, du återställa alla filer (inklusive online gör om loggar) och starta din databas.
steg 3. Stäng av databasen
Anslut till databasen som SYS (eller som en SYSDBA-privilegierad användare) och stäng av databasen med omedelbar, transaktionell eller NORMAL. I nästan alla situationer är användning av omedelbar den föredragna metoden. Detta läge kopplar bort användare, rullar tillbaka ofullständiga transaktioner och stänger av databasen:
$ sqlplus / as sysdbaSQL> shutdown immediate;
steg 4. Skapa säkerhetskopior av filerna
för varje fil som identifieras i steg 2, Använd ett OS-verktyg för att kopiera filerna till en säkerhetskopieringskatalog (identifierad i steg 1). I det här enkla exemplet finns alla datafiler, kontrollfiler, tillfälliga databasfiler och online-redo-loggar i samma katalog. I produktionsmiljöer har du troligtvis filer utspridda i flera olika kataloger. I det här exemplet används kommandot Linux/Unix cp för att kopiera databasfilerna från/u01/dbfile /O12C till katalogen/u01/cbackup / O12C:
$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C
Steg 5. Starta om din databas
när alla filer har kopierats kan du starta din databas:
$ sqlplus / as sysdbaSQL> startup;
återställa en kall Backup i Noarchivelog läge med online gör loggar
nästa exempel förklarar hur man återställer från en kall backup av en databas i noarchivelog läge. Om du inkluderade online-gör-loggarna som en del av den kalla säkerhetskopian kan du inkludera dem när du återställer filerna. Här är stegen som är involverade i denna procedur:
- Stäng av instansen.
- kopiera datafiler, Online göra loggar, temporära filer och kontrollfiler tillbaka från säkerhetskopian till levande databas datafil platser.
- starta din databas.
dessa steg beskrivs i följande avsnitt.
Steg 1. Stäng av instansen
Stäng av instansen om den körs. I det här scenariot spelar det ingen roll hur du stänger av Oracle database 12c, eftersom du återställer tillbaka till en tidpunkt (utan återställning av transaktioner). Alla filer i direktdatabaskatalogen platser skrivs över när säkerhetskopiorna kopieras tillbaka. Om din instans körs kan du plötsligt avbryta den. Som en SYSDBA-privilegierad användare gör du följande:
$ sqlplus / as sysdbaSQL> shutdown abort;
steg 2. Kopiera filerna tillbaka från säkerhetskopian
det här steget gör baksidan av säkerhetskopian: du kopierar filer från säkerhetskopieringsplatsen till de levande databasfilplatserna. I det här exemplet finns alla säkerhetskopior i katalogen/u01/cbackup / O12C och alla filer kopieras till katalogen / u01 / dbfile / O12C:
$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C
steg 3. Starta databasen
Anslut till din databas som SYS( eller en användare som har SYSDBA-behörigheter) och starta din databas:
$ sqlplus / as sysdbaSQL> startup;
när du har slutfört dessa steg bör du ha en exakt kopia av din databas som den var när du gjorde den kalla säkerhetskopian. Det är som om du ställer in din databas tillbaka till den tidpunkt då du gjorde säkerhetskopian.
återställa en kall Backup i Noarchivelog läge utan Online göra loggar
som tidigare nämnts, behöver du aldrig online göra loggar när du återställer från en kall backup. Om du gjorde en kall säkerhetskopia av din databas i noarchivelog-läge och inte inkluderade Online-redo-loggarna som en del av säkerhetskopieringen är stegen för att återställa nästan identiska med stegen i föregående avsnitt. Huvudskillnaden är att det sista steget kräver att du öppnar din databas med hjälp av Open RESETLOGS-klausulen. Här är stegen:
- Stäng av instansen.
- kopiera kontrollfilerna och datafilerna tillbaka från säkerhetskopian.
- starta databasen i monteringsläge.
- öppna databasen med Open RESETLOGS-klausulen.
Steg 1. Stäng av instansen
Stäng av instansen om den körs. I det här scenariot spelar det ingen roll hur du stänger av Oracle database 12c, eftersom du återställer tillbaka till en tidpunkt. Alla filer i live databas katalog platser skrivs över när säkerhetskopiorna kopieras. Om din instans körs kan du plötsligt avbryta den. Som en SYSDBA-privilegierad användare gör du följande:
$ sqlplus / as sysdbaSQL> shutdown abort;
steg 2. Kopiera filerna tillbaka från säkerhetskopian
kopiera kontrollfilerna och datafilerna från säkerhetskopieringsplatsen till de levande datafilplatserna:
$ cp <backup directory>/*.* <live database file directory>
steg 3. Starta databasen i Monteringsläge
Anslut till databasen som SYS eller en användare med SYSDBA-behörighet och starta databasen i monteringsläge:
$ sqlplus / as sysdbaSQL> startup mount
steg 4. Öppna databasen med Open RESETLOGS-klausulen
öppna databasen för användning med Open RESETLOGS-klausulen:
SQL> alter database open resetlogs;
om du ser meddelandet om databasändringar lyckades kommandot. Du kan dock se detta fel:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
i det här fallet utfärdar du följande kommando:
SQL> recover database until cancel;
du bör se detta meddelande:
Media recovery complete.
försök nu öppna din databas med Open RESETLOGS-klausulen:
SQL> alter database open resetlogs;
detta uttalande instruerar Oracle att återskapa Online-göra om loggarna. Oracle använder information i kontrollfilen för placering, namn och storlek på Gör om loggarna. Om det finns gamla online-gör om loggfiler på dessa platser skrivs de över.
om du övervakar din varning.logga under hela denna process kan du se ORA-00312 och ora-00313. Det betyder att Oracle inte kan hitta loggfilerna online gör om; det här är okej, eftersom dessa filer inte är fysiskt tillgängliga förrän de återskapas av kommandot OPEN RESETLOGS.
Scripting a Cold Backup and Restore
det är instruktions att visa hur man skriptet en kall backup. Grundtanken är att dynamiskt fråga dataordlistan för att bestämma platser och namn på filerna som ska säkerhetskopieras. Detta är att föredra framför hårdkodning av katalogplatser och filnamn i ett skript. Den dynamiska generationen av ett skript är mindre benägen för fel och överraskningar (t.ex. tillägg av nya datafiler till en databas men inte till ett gammalt, hårdkodat säkerhetskopieringsskript).
Obs! skripten i det här avsnittet är inte avsedda att vara säkerhetskopierings-och återställningsskript för produktionsstyrka. Snarare illustrerar de de grundläggande begreppen för att skriva en kall säkerhetskopiering och efterföljande återställning.
det första skriptet i det här avsnittet gör en kall säkerhetskopiering av en databas. Innan du använder cold backup-skriptet måste du ändra dessa variabler i skriptet för att matcha din databasmiljö:
- ORACLE_SID
- ORACLE_HOME
- cbdir
variabeln cbdir anger namnet på platsen för backup-katalogen. Skriptet skapar en fil med namnet coldback.sql, som körs från SQL * Plus för att initiera en kall säkerhetskopiering av 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
den här filen genererar kommandon som ska köras från ett SQL*Plus-skript för att göra en kall säkerhetskopiering av en Oracle-databas. Du placerar ett utropstecken (!) framför Unix cp-kommandot för att instruera SQL*Plus att vara värd för operativsystemet för att köra cp-kommandot. Du placerar också ett bakåt snedstreck ( \ ) framför varje dollartecken ( $ ) när du refererar till v$ dataordboksvyer; detta krävs i ett Linux/Unix-skalskript. \ Undgår $ och berättar för skalskriptet att inte behandla $ som ett specialtecken ($betyder normalt en skalvariabel).
när du har kört det här skriptet, här är ett exempel på kopieringskommandon skrivna till coldback.sql-skript:
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;
medan du gör en kall backup, bör du också skapa ett skript som ger kommandon för att kopiera datafiler, temporära filer, loggfiler och styra filer tillbaka till sina ursprungliga platser. Du kan använda det här skriptet för att återställa från den kalla säkerhetskopian. Nästa skript i det här avsnittet skapar dynamiskt en coldrest.sql-skript som kopierar filer från säkerhetskopieringsplatsen till de ursprungliga datafilplatserna. Du måste ändra det här skriptet på samma sätt som du ändrade cold backup-skriptet (dvs ändra ORACLE_SID -, ORACLE_HOME-och cbdir-variablerna för att matcha din 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
detta skript skapar ett skript med namnet coldrest.sql, som genererar kopieringskommandon för att återställa dina datafiler, temporära filer, loggfiler och kontrollfiler tillbaka till sina ursprungliga platser. När du har kört detta skalskript, här är ett utdrag av koden i coldrest.sql-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;
om du behöver återställa från en kall säkerhetskopia med det här skriptet loggar du in på SQL * Plus som SYS och kör skriptet:
$ sqlplus / as sysdbaSQL> @coldrest.sql