provádíte user-managed cold backup kopírováním souborů po vypnutí databáze. Tento typ zálohy je také známý jako záloha offline. Vaše databáze Oracle 12c může být v režimu noarchivelog nebo v režimu archivelog při vytváření studené zálohy.
DBA mají tendenci myslet na studenou zálohu jako na synonymum pro zálohování databáze v režimu noarchivelog. To není správné. V režimu archivelog můžete vytvořit studenou zálohu databáze a to je strategie zálohování, kterou mnoho obchodů používá. Rozdíly mezi studenou zálohou s databází v režimu noarchivelog a v režimu archivelog jsou podrobně popsány v následujících částech.
vytvoření studené zálohy databáze režimu Noarchivelog
jedním z hlavních důvodů pro vytvoření studené zálohy databáze Oracle 12c v režimu noarchivelog je poskytnout vám způsob, jak obnovit databázi zpět do bodu v čase v minulosti. Tento typ zálohy byste měli použít pouze v případě, že nepotřebujete Obnovit transakce, ke kterým došlo po zálohování. Tento typ strategie zálohování a obnovy je přijatelný pouze v případě, že vaše obchodní požadavky umožňují ztrátu dat a prostoje. Zřídka byste někdy implementovali tento typ řešení zálohování a obnovy pro databázi výrobních podniků.
poté, co jsem řekl, že existuje několik dobrých důvodů pro implementaci tohoto typu zálohy. Jedním z běžných použití je vytvořit studenou zálohu vývojové/testovací / tréninkové databáze a pravidelně resetovat databázi zpět na základní linii. To vám dává způsob, jak restartovat test výkonu nebo školení se stejným momentovým snímkem databáze.
Tip zvažte použití Funkce databáze Flashback k nastavení databáze zpět na čas v minulosti.
příklad v této části ukazuje, jak vytvořit zálohu každého kritického souboru v databázi: všechny řídicí soubory, datové soubory, dočasné datové soubory a soubory protokolu online. S tímto typem zálohy můžete snadno obnovit databázi zpět do okamžiku, kdy byla záloha provedena. Hlavní výhody tohoto přístupu spočívají v tom, že je koncepčně jednoduchý a snadno implementovatelný. Zde jsou kroky potřebné pro studené zálohování databáze v režimu noarchivelog:
- určete, kam zkopírovat záložní soubory a kolik místa je potřeba.
- Identifikujte umístění a názvy databázových souborů, které chcete kopírovat.
- vypněte databázi pomocí okamžité, transakční nebo normální klauzule.
- zkopírujte soubory (identifikované v kroku 2) do umístění zálohy (určeno v kroku 1).
- restartujte databázi Oracle 12c.
následující části jsou podrobně popsány v těchto krocích.
Krok 1. Určete, kam zkopírovat záložní soubory a kolik místa je zapotřebí
v ideálním případě by umístění zálohy mělo být na sadě disků oddělených od umístění vašich živých datových souborů. V mnoha obchodech však nemusíte mít na výběr a může vám být řečeno, které přípojné body má databáze použít. Pro tento příklad je umístění zálohy adresář / u01 / cbackup / O12C. Chcete-li získat hrubou představu o tom, kolik místa potřebujete k uložení jedné kopie záloh, můžete spustit tento dotaz:
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);
pomocí příkazu Linux/Unix DF (disk free) můžete ověřit, kolik místa na operačním disku je k dispozici. Ujistěte se, že množství místa na disku dostupného v operačním systému je větší než částka vrácená z předchozího dotazu:
$ df -h
Krok 2. Identifikujte umístění a názvy databázových souborů, které chcete zkopírovat
spusťte tento dotaz a uveďte názvy (a cesty) souborů, které jsou součástí studené zálohy databáze režimu noarchivelog:
select name from v$datafileunionselect name from v$controlfileunionselect name from v$tempfileunionselect member from v$logfile;
zálohování online znovu protokoly (nebo ne)
potřebujete zálohovat online znovu protokoly? Ne; už nikdy nebudete muset zálohovat online protokoly redo jako součást jakéhokoli typu zálohy. Proč tedy DBA zálohují online protokoly redo jako součást studené zálohy? Jedním z důvodů je, že to dělá proces obnovení pro scénář režimu noarchivelog o něco jednodušší. Pro normální otevření databáze jsou vyžadovány online protokoly opakování.
pokud zálohujete všechny soubory (včetně protokolů online redo), pak se vaše databáze Oracle 12c vrátí zpět do stavu, ve kterém byla v době zálohování, obnovíte všechny soubory (včetně protokolů online redo) a spustíte databázi.
Krok 3. Vypněte databázi
Připojte se k databázi jako SYS (nebo jako privilegovaný uživatel SYSDBA) a vypněte databázi pomocí okamžitého, transakčního nebo normálního. Téměř v každé situaci je preferovanou metodou okamžité použití. Tento režim odpojí uživatele, vrátí neúplné transakce, a vypne databázi:
$ sqlplus / as sysdbaSQL> shutdown immediate;
Krok 4. Vytvořte záložní kopie souborů
pro každý soubor identifikovaný v kroku 2 Použijte nástroj OS pro zkopírování souborů do záložního adresáře (identifikovaného v kroku 1). V tomto jednoduchém příkladu jsou všechny datové soubory, řídicí soubory, dočasné databázové soubory a online protokoly redo ve stejném adresáři. Ve výrobních prostředích budete pravděpodobně mít soubory rozložené v několika různých adresářích. Tento příklad používá příkaz Linux / Unix cp ke kopírování databázových souborů z/u01/dbfile /O12C do adresáře/U01/cbackup / O12C:
$ cp /u01/dbfile/O12C/*.* /u01/cbackup/O12C
Krok 5. Restartujte databázi
po zkopírování všech souborů můžete databázi spustit:
$ sqlplus / as sysdbaSQL> startup;
obnovení studené zálohy v režimu Noarchivelog s online protokoly opakování
další příklad vysvětluje, jak obnovit ze studené zálohy databáze v režimu noarchivelog. Pokud jste zahrnuli online protokoly opakování jako součást studené zálohy, můžete je zahrnout při obnovení souborů. Zde jsou kroky zapojené do tohoto postupu:
- vypněte instanci.
- zkopírujte datové soubory, online protokoly opakování, dočasné soubory a kontrolní soubory zpět ze zálohy do umístění datových souborů živé databáze.
- spusťte databázi.
tyto kroky jsou podrobně popsány v následujících částech.
Krok 1. Vypněte instanci
vypněte instanci, Pokud je spuštěna. V tomto scénáři nezáleží na tom, jak vypnete databázi Oracle 12c, protože obnovujete zpět do určitého časového bodu (bez obnovení transakcí). Všechny soubory v umístění adresáře živé databáze jsou přepsány, když jsou záložní soubory zkopírovány zpět. Pokud je vaše instance spuštěna, můžete ji náhle přerušit. Jako privilegovaný uživatel SYSDBA proveďte následující:
$ sqlplus / as sysdbaSQL> shutdown abort;
Krok 2. Zkopírujte soubory zpět ze zálohy
tento krok provede zpětný chod zálohy: kopírujete soubory z umístění zálohy do umístění souborů živé databáze. V tomto příkladu jsou všechny záložní soubory umístěny v adresáři/U01 / cbackup / O12C a všechny soubory jsou zkopírovány do adresáře/U01 / dbfile / O12C:
$ cp /u01/cbackup/O12C/*.* /u01/dbfile/O12C
Krok 3. Spusťte databázi
Připojte se k databázi jako SYS (nebo uživatel, který má oprávnění SYSDBA) a spusťte databázi:
$ sqlplus / as sysdbaSQL> startup;
po dokončení těchto kroků byste měli mít přesnou kopii databáze, jako tomu bylo při zálohování za studena. Je to, jako byste nastavili databázi zpět do okamžiku, kdy jste provedli zálohu.
obnovení studené zálohy v režimu Noarchivelog bez Online opakování protokolů
jak již bylo zmíněno dříve, při obnově ze studené zálohy nikdy nepotřebujete protokoly online opakování. Pokud jste provedli studenou zálohu databáze v režimu noarchivelog a nezahrnuli jste online protokoly opakování jako součást zálohy, kroky k obnovení jsou téměř totožné s kroky v předchozí části. Hlavní rozdíl spočívá v tom, že poslední krok vyžaduje otevření databáze pomocí klauzule OPEN RESETLOGS. Zde jsou kroky:
- vypněte instanci.
- zkopírujte řídicí soubory a datové soubory zpět ze zálohy.
- spusťte databázi v režimu připojení.
- otevřete databázi pomocí klauzule OPEN RESETLOGS.
Krok 1. Vypněte instanci
vypněte instanci, Pokud je spuštěna. V tomto scénáři nezáleží na tom, jak vypnete databázi Oracle 12c, protože se obnovujete zpět do určitého časového bodu. Všechny soubory v umístění adresáře živé databáze jsou přepsány při kopírování záloh. Pokud je vaše instance spuštěna, můžete ji náhle přerušit. Jako privilegovaný uživatel SYSDBA proveďte následující:
$ sqlplus / as sysdbaSQL> shutdown abort;
Krok 2. Zkopírujte soubory zpět ze zálohy
zkopírujte řídicí soubory a datové soubory z umístění zálohy do umístění živých datových souborů:
$ cp <backup directory>/*.* <live database file directory>
Krok 3. Spusťte databázi v režimu připojení
Připojte se k databázi jako SYS nebo uživatel s oprávněními SYSDBA a spusťte databázi v režimu připojení:
$ sqlplus / as sysdbaSQL> startup mount
Krok 4. Otevřete databázi pomocí klauzule OPEN RESETLOGS
otevřete databázi pro použití s klauzulí OPEN RESETLOGS:
SQL> alter database open resetlogs;
pokud se zobrazí zpráva změněná databází, příkaz byl úspěšný. Může se však zobrazit tato chyba:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
v takovém případě zadejte následující příkaz:
SQL> recover database until cancel;
měli byste vidět tuto zprávu:
Media recovery complete.
nyní se pokuste otevřít databázi pomocí klauzule OPEN RESETLOGS:
SQL> alter database open resetlogs;
toto prohlášení instruuje společnost Oracle, aby znovu vytvořila online protokoly opakování. Oracle používá informace v řídicím souboru pro umístění, název a velikost opakování protokolů. Pokud jsou na těchto místech staré soubory protokolu redo online, jsou přepsány.
pokud sledujete své upozornění.přihlaste se během tohoto procesu, můžete vidět ORA-00312 a ora-00313. To znamená, že Oracle nemůže najít soubory protokolu online redo; to je v pořádku, protože tyto soubory nejsou fyzicky dostupné, dokud nejsou znovu vytvořeny příkazem OPEN RESETLOGS.
skriptování studené Zálohy a obnovení
je instruktážní, jak skriptovat studenou zálohu. Základní myšlenkou je dynamicky dotazovat datový slovník a určit umístění a názvy souborů, které mají být zálohovány. To je vhodnější než hard-kódování umístění adresáře a názvy souborů ve skriptu. Dynamické generování skriptu je méně náchylné k chybám a překvapením (např. přidání nových datových souborů do databáze, ale ne do starého, pevně zakódovaného záložního skriptu).
Všimněte si, že skripty v této části nejsou určeny jako skripty pro zálohování a obnovení síly výroby. Spíše ilustrují základní pojmy skriptování studené zálohy a následné obnovy.
první skript v této části provede studenou zálohu databáze. Před použitím skriptu cold backup je třeba tyto proměnné ve skriptu upravit tak, aby odpovídaly vašemu databázovému prostředí:
- ORACLE_SID
- ORACLE_HOME
- cbdir
proměnná cbdir určuje název umístění záložního adresáře. Skript vytvoří soubor s názvem coldback.sql, který je spuštěn z SQL * Plus pro zahájení studené zálohy databáze:
#!/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
tento soubor generuje příkazy, které mají být provedeny ze skriptu SQL * Plus, aby se studené zálohování databáze Oracle. Umístíte vykřičník (!) před příkazem Unix cp instruovat SQL * Plus hostovat do OS spustit příkaz cp. Také umístit zpět lomítko ( \ ) před každý znak dolaru ( $ ) při odkazování na v$ zobrazení datového slovníku; to je vyžadováno ve skriptu Linux/Unix shell. \ Uteče $ a řekne shellovému skriptu, aby $ nepovažoval za speciální znak ($ normálně znamená proměnnou shellu).
po spuštění tohoto skriptu je zde ukázka kopírovacích příkazů zapsaných do programu 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;
při vytváření studené zálohy byste měli také vygenerovat skript, který poskytuje příkazy pro kopírování datových souborů, dočasných souborů, souborů protokolu a kontrolních souborů zpět na jejich původní umístění. Tento skript můžete použít k obnovení ze studené zálohy. Další skript v této části dynamicky vytvoří coldrest.sql skript, který kopíruje soubory z umístění zálohy do původních umístění datových souborů. Tento skript musíte upravit stejným způsobem, jakým jste upravili skript pro zálohování za studena (tj. změnit proměnné oracle_sid, ORACLE_HOME a cbdir tak, aby odpovídaly vašemu prostředí):
#!/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
tento skript vytvoří skript s názvem coldrest.sql, který generuje kopírovací příkazy k obnovení datových souborů, dočasných souborů, souborů protokolu a kontrolních souborů zpět na původní umístění. Po spuštění tohoto shellu skript, zde je úryvek kódu v coldrest.sql soubor:
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;
pokud potřebujete obnovit ze studené zálohy pomocí tohoto skriptu, přihlaste se do SQL * Plus jako SYS a spusťte skript:
$ sqlplus / as sysdbaSQL> @coldrest.sql