Backup wg. EM/"Manage Current Backups" zawiera:
-archived log,
-control file,
-datafile
Teraz zakładam sytuację uszkodzenia dysku E:, bez możliwości odczytu
czegokolwiek.
Więc po tym pozostają mi, na dysku F:, redologi, archive logi i backup
RMANa.
Wyobrażam sobie teraz odzyskanie bazy danych w sposób nastepujący:
-instaluję oprogramowanie ORACLE Database na dysku E:
-tworzę bazę danych z dokładnie tak samo określonymi pikami/katalogami
datafile, control, redo log, archive log...
-...
W tym miejscu nie wiem co dalej :( Może ktoś rzuci jakieś hasło, gdzie i
co szukać :)
Może pownienem zrobić to inaczej niż wyobrażam sobie powyżej?
Dzieki za podpowiedzi,
pozdrawiam,
Maciek
*EM - Oracle Enterprise Manager, strona Oracle (port 1158, 5500...)
> Backup wg. EM/"Manage Current Backups" zawiera:
> -archived log,
> -control file,
> -datafile
> Teraz zakładam sytuację uszkodzenia dysku E:, bez możliwości odczytu
> czegokolwiek.
> Więc po tym pozostają mi, na dysku F:, redologi, archive logi i backup
> RMANa.
> Wyobrażam sobie teraz odzyskanie bazy danych w sposób nastepujący:
> -instaluję oprogramowanie ORACLE Database na dysku E:
> -tworzę bazę danych z dokładnie tak samo określonymi pikami/katalogami
> datafile, control, redo log, archive log...
Po co? Chcesz odtworzyc baze danych, a nie tworzyc nową.
Potrzebny jest plik inicjalizacyjny i dobry plik
kontrolny (jest na dyku F):
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
Backup and Recovery Basics - Whole database Restore and Recovery: Scenario.
Pozdrowienia,
LW
Ale aby zrobic startup mount muszę mieć RDBMS i bazę danych a to było na
dysku E: który w moim scenariuszu jest nie do odczytu. Wiec muszę
zainstalować ponownie RDBMS i stwrzyc bazę danych.
Po zainstalowaniu RDBMS tworzyłem bazę danych jednak nie udawało mi się
zmusić RMANa aby widział pliki backupu aby zrobić RESTORE/RECOVER DATABASE.
Pozdrawiam,
Maciek
Po co - przeca baze straciles i teraz rman ma ja ci pomoc odzyskac (z
"niczego" - czyli Twojego backupu)
Pozdro
Maseł
Ale chyba RMAN nie stworzy serwisu? I to stworzenie bazy jest tylko po
to aby potworzyć np. serwis, wpisy w rejestrze itp.
Jeszcze nie próbowałem ale pewnie wystarczy użycie oradim itp. do
stworzenia tych podstaw bazy danych które później będa zawierały dane z
backupu. Database configuration Assistant podczas tworzenia bazy danych
robi skrypt którego kawałek będe musiał uruchomić.
Szukałem dalej i chyba kluczowe okazało się skonfugurowanie RMANa:
CONFIGURE CONTROLFILE AUTOBACKUP ON
Pozdrawiam,
Maciek
Ale chyba RMAN nie stworzy serwisu? I to stworzenie bazy jest tylko po
Zainstalowanie oprogramowania jest OK, tworzenie serwisów tez.
> Jeszcze nie próbowałem ale pewnie wystarczy użycie oradim itp. do
> stworzenia tych podstaw bazy danych które później będa zawierały dane z
> backupu. Database configuration Assistant podczas tworzenia bazy danych
> robi skrypt którego kawałek będe musiał uruchomić.
Nie ruszaj nawet DBA, bo stworzy ci nowy, zupelnie nieprzydatny plik
kontrolny.
> Szukałem dalej i chyba kluczowe okazało się skonfugurowanie RMANa:
> CONFIGURE CONTROLFILE AUTOBACKUP ON
Tak, jesli nie byłoby dobrego pliku kontrolnego (a tu jest na dysku F).
Pozdrowienia,
LW
Zainstalowanie oprogramowania jest OK, tworzenie serwisów tez.
> Jeszcze nie próbowałem ale pewnie wystarczy użycie oradim itp. do
> stworzenia tych podstaw bazy danych które później będa zawierały dane z
> backupu. Database configuration Assistant podczas tworzenia bazy danych
> robi skrypt którego kawałek będe musiał uruchomić.
Nie ruszaj nawet DBCA, bo stworzy ci nowy, zupelnie nieprzydatny plik
kontrolny.
> Szukałem dalej i chyba kluczowe okazało się skonfugurowanie RMANa:
> CONFIGURE CONTROLFILE AUTOBACKUP ON
Tak, jesli nie byłoby dobrego pliku kontrolnego (a tu jest na dysku F).
Pozdrowienia,
LW
Masz racje - kolenosc jest taka:
- oradim
- i dalej jak napisala Lucyna.
I pod zadnym pozorem nie tworz nowej bazy danych (chyba, ze masz troche
wolnego czasu :-)
Pozdro
Maseł
Plik kontrolny to chyba za mało jak baza danych nie wie skąd go
odczytać. Powinien być jeszcze spfile.
kombinowałem dzisiaj tak, że robiłem:
-oradim aby zrobić serwis i go skonfigurowac na automatyczne uruchamianie.
-tworzyłem plik haseł
-odzyskiwałem spfile (ponieważ on poszedł sobie w dal bedąc na dysku E:)
restore spfile from autobackup db_recovery_file_from_dest='...'
db_name='...'
-odzyskiwałem controlfile z autobackupu (jeszcze nie próbowałem
wykorzystywać istniejącej kopii z dysku F: tak jak sugerowałaś)
-restore database,
-recover database,
-alter database open resetlogs
i po tym działało :)
I jeszcze czasami podczas eksperymentów było potrzebne zrobienie w rman-ie:
set dbid=....
gdzie dbid znałem lub można go wziąść z nazwy pliku autobackupu controlfile.
Znalazłem w sieci jeszcze link który okazał się dla mnie bardzo przydatny:
http://www.idevelopment.info/data/Oracle/DBA_tips/RMAN_9i/RMAN9_8.shtml
Pozdrawiam,
Maciek
Oczywiście.
> kombinowałem dzisiaj tak, że robiłem:
> -oradim aby zrobić serwis i go skonfigurowac na automatyczne uruchamianie.
> -tworzyłem plik haseł
> -odzyskiwałem spfile (ponieważ on poszedł sobie w dal bedąc na dysku E:)
> restore spfile from autobackup db_recovery_file_from_dest='...'
> db_name='...'
> -odzyskiwałem controlfile z autobackupu (jeszcze nie próbowałem
> wykorzystywać istniejącej kopii z dysku F: tak jak sugerowałaś)
> -restore database,
> -recover database,
> -alter database open resetlogs
> i po tym działało :)
Super.
Musiales uzyc resetlogs, bo brales plik kontrolny z backupu.
Gdybyś wykorzystal plik z dysku F moglbys normalnie otworzyc baze
i mieć całą historię dzienników powtórzeń.
> I jeszcze czasami podczas eksperymentów było potrzebne zrobienie w rman-ie:
> set dbid=....
> gdzie dbid znałem lub można go wziąść z nazwy pliku autobackupu controlfile.
> Znalazłem w sieci jeszcze link który okazał się dla mnie bardzo przydatny:
> http://www.idevelopment.info/data/Oracle/DBA_tips/RMAN_9i/RMAN9_8.shtml
Ciekawa strona.
Pozdrowienia,
LW
To teraz już rozumiem dlaczego jest to resetlogs :) Dzięki za wyjaśnienie.
Przy okazji zapytam się jak pownienem zrobić z tym controlfile-m na F:?
Czy pownienem go sam powielić w odpowiednie miejsca czy rman zrobi to za
mnie?
Drugą sprawą jest to, czy lepiej mimo wszystko użyć controlfile z
autobackupu zamiast tego z dysku F?
Jeżeli miałem awarię serwera to moge przypuszczać, że ten pozostały
controlfile może być uszkodzony. Czy Oracle będzie to uszkodzenie mógł
wykryć (może stosuje jakies sumy kontrolne)?
Tak myślę, że w takim przypadku dobrze będzie mieć w po 3 controlfile na
różnych dyskach i w razie awarii sprawdzić czy pozostałe controlfile są
identyczne. Pewnie nie odkryłem nic nowego ;)
Jutro lub w przyszłym tygodniu zrobie eksperyment stowrzenia,
uszkodzenia, odtworzenia bazy i raport zdam grupie aby było dla potomnych :)
Pozdrawiam,
Maciek
W pliku inicjalizacyjnym zostawiasz tylko wpis z namiarem na dobry plik
kontrolny albo tez recznie powielasz plik kontrolny (w zasadzie dowolna
ilosc razy i w dowolne miejsca - wazne, aby pozniej inicjalizacyjny
dowiedzial sie o wszystkich kopiach - no, przynajmniej o jednej...)
> Drugą sprawą jest to, czy lepiej mimo wszystko użyć controlfile z
> autobackupu zamiast tego z dysku F?
Nalezy zaczac od tego z F - resetlogs juz wyjasnily Ci dlaczego -
najwyzej sie nie uda a ty bedziesz mial pretekst, zeby przy drugiej
probie otworzyc drugie piwo...
> Jeżeli miałem awarię serwera to moge przypuszczać, że ten pozostały
> controlfile może być uszkodzony. Czy Oracle będzie to uszkodzenie mógł
> wykryć (może stosuje jakies sumy kontrolne)?
Jasne ze wykryje uszkodzenie pliku kontrolnego
> Tak myślę, że w takim przypadku dobrze będzie mieć w po 3 controlfile na
> różnych dyskach i w razie awarii sprawdzić czy pozostałe controlfile są
> identyczne. Pewnie nie odkryłem nic nowego ;)
No - taka mala przywatna Ameryke to odkryles - mozesz z czystym
sumieniem otworzyc piwo...
> Jutro lub w przyszłym tygodniu zrobie eksperyment stowrzenia,
> uszkodzenia, odtworzenia bazy i raport zdam grupie aby było dla potomnych :)
Jak ladnie opiszesz to googiel bedzie ci wdzieczny.
Poszukaj jeszcze tu: http://docs.oracle.com dokumentacji do swojej bazy
a w szczegolnosci podrecznikow do backup i recovery...
Pozdro
Maseł
Zrobiłem trochę eksperymentów i przedstawiam pierwszy raport.
Test wykonany w poniższej konfiguracji:
-komputer testowy miał tylko jeden dysk C
-Oracle 10.2.0.3 Enterprise Edition
-ORACLE_SID=testdb
-ORACLE_HOME=c:\oracle\product\10.2.0
-ORACLE_BASE=c:\oracle\product\10.2.0
-baza tworzona przy pomocy DBCA z opcjami:
--Flash recovery area: c:\oracle_archive\flash_recovery_area
--włączone archivelog-i
w katalogu {ORACLE_BASE}\oradata\testdb:
data files, redo01a.log, redo02a.log, redo03a.log, control01.ctl,
control02.ctl, control03.ctl
w katalogu c:\oracle_archive\testdb:
redo01b.log, redo02b.log, redo03b.log, control04.ctl, control05.ctl
konfiguracja RMAN-a:
CMD> set ORACLE_SID=testdb
CMD> rman target /
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; # abyśmy mieli z czego
odzyskać spfile
Po uruchomieniu RMANa warto zapisać DBID (Backup and Recovery Basics 10g
Release2 (10.2) B14192-03; strony 6-8, 2-12, 2-13)
[tworzenie tabeli testowej, ładowanie do niej danych, itp. czynności]
Jak już mamy trochę danych to zróbmy backup:
CMD> set ORACLE_SID=testdb
CMD> rman target /
RMAN> backup device type disk tag 'test_backupu' database;
RMAN> backup device type disk tag 'test_backupu' archivelog all not
backed up delete all input;
RMAN> allocate channel for maintenance type disk;
RMAN> delete noprompt obsolete device type disk;
RMAN> release channel;
Po wykonaniu powyższego mamy zrobiony backup bazy danych, archivelogów i
autobackup spfile i control file w Flash recovery area
(c:\oracle_archive\flash_recovery_area\testdb)
[ładujemy dalej dane do tabeli testowej, np. przy pomocy PHP]
Jak nam już się znudzi to podczas ładowania danych "ubijamy" proces
oracle.exe (Ctrl+alt+del i zakończ proces/end process, to NIE jest to
samo co zatrzymanie serwisu oracle!!!) Takie ubicie powoduje nagłe
przerwanie ładowania danych i moim zdaniem symuluje nagłą awarię serwera
(np. pada dysk i zwis/reset serwera).
Poniżej chce zasymulowac odzyskiwanie na "nowy" serwer.
Po zasymulowaniu uszkodzenia przyjmujemy, że źródłem naszego backupu
który odtworzymy jest c:\oracle_archive.
Kopiujemy C:\oracle_archive\testdb w inne miejsce (po to aby DBCA nie
usunął nam tych plików!!!
Usuwamy testdb przy pomocy DBCA.
Po usunięciu testdb odtwarzamy katalog c:\oracle_archive\testdb z
uprzednio zrobionej kopii.
W ten sposób mamy zainstalowane RDBMS bez bazy danych. Teraz możemy
przystapić do odtwarzania :)
Uruchamiamy poniższe (na koncu jest zdefiniowane hasło "maciek" dla DBA):
mkdir c:\oracle_archive\flash_recovery_area
mkdir c:\oracle_archive\testdb
mkdir C:\oracle\product\10.2.0\admin\testdb\adump
mkdir C:\oracle\product\10.2.0\admin\testdb\bdump
mkdir C:\oracle\product\10.2.0\admin\testdb\cdump
mkdir C:\oracle\product\10.2.0\admin\testdb\dpdump
mkdir C:\oracle\product\10.2.0\admin\testdb\pfile
mkdir C:\oracle\product\10.2.0\admin\testdb\udump
mkdir C:\oracle\product\10.2.0\db_1\cfgtoollogs\dbca\testdb
mkdir C:\oracle\product\10.2.0\db_1\database
mkdir C:\oracle\product\10.2.0\oradata\testdb
set ORACLE_SID=testdb
C:\oracle\product\10.2.0\db_1\bin\oradim.exe -new -sid TESTDB -startmode
manual -spfile
C:\oracle\product\10.2.0\db_1\bin\oradim.exe -edit -sid TESTDB
-startmode auto -srvcstart system
C:\oracle\product\10.2.0\db_1\bin\orapwd.exe
file=C:\oracle\product\10.2.0\db_1\database\PWDtestdb.ora
password=maciek force=y
Po uruchomieniu mamy stworzone katalogi na dane, serwisy Oracle i plik
haseł.
Nastepnie korzystamy z backupu i pliku control04.ctl który nam się ostał
po "padzie":
CMD> set ORACLE_SID=testdb
CMD> rman target /
uruchamiamy bazę danych w trybie nomount
RMAN> startup nomount;
Odtwarzanie spfile z autobackupu:
RMAN> restore spfile from autobackup
db_recovery_file_dest='c:\oracle_archive\flash_recovery_area'
db_name='testdb';
zatrzymanie bazy danych:
RMAN> shutdown immediate;
robimy kopie plików kontrolnych z "zapasowego źródła"
CMD> copy c:\oracle_archive\testdb\control04.ctl
C:\oracle\product\10.2.0\oradata\testdb\control01.ctl
CMD> copy c:\oracle_archive\testdb\control04.ctl
C:\oracle\product\10.2.0\oradata\testdb\control02.ctl
CMD> copy c:\oracle_archive\testdb\control04.ctl
C:\oracle\product\10.2.0\oradata\testdb\control03.ctl
uruchamiamy bazę danych w trybie mount
RMAN> startup mount;
odzyskujemy
RMAN> restore database;
RMAN> recover database;
otwieramy bazę dla użytkowników:
RMAN> alter database open;
I mamy działającą bazę :) (tzn. prawie działającą :) Brakuje redologów w
katalogu {ORACLE_BASE}\oradata\testdb: redo01a.log, redo02a.log, redo03a.log
Usuwamy nie istniejące redo logi:
ALTER DATABASE DROP LOGFILE MEMBER
'c:\oracle\product\10.2.0\oradata\testdb\redo01a.log';
ALTER DATABASE DROP LOGFILE MEMBER
'c:\oracle\product\10.2.0\oradata\testdb\redo02a.log';
ALTER DATABASE DROP LOGFILE MEMBER
'c:\oracle\product\10.2.0\oradata\testdb\redo03a.log';
Tworzymy je ponownie.
ALTER DATABASE ADD LOGFILE MEMBER
'c:\oracle\product\10.2.0\oradata\testdb\redo01a.log' REUSE TO GROUP 1;
ALTER DATABASE ADD LOGFILE MEMBER
'c:\oracle\product\10.2.0\oradata\testdb\redo02a.log' REUSE TO GROUP 2;
ALTER DATABASE ADD LOGFILE MEMBER
'c:\oracle\product\10.2.0\oradata\testdb\redo03a.log' REUSE TO GROUP 3;
Podczas usuwania/tworzenia może być potrzebne przełączenie się na
kolejne grupy redologów:
alter system switch logfile;
Na samym końcu tworzymy EM (ustawione hasła "maciek"):
C:\oracle\product\10.2.0\db_1\bin\emca.bat -config dbcontrol db -silent
-DB_UNIQUE_NAME testdb -PORT 1521 -EM_HOME C:\oracle\product\10.2.0\db_1
-LISTENER LISTENER -SERVICE_NAME testdb.emai.corp.priv -SYS_PWD maciek
-SID testdb -ORACLE_HOME C:\oracle\product\10.2.0\db_1 -DBSNMP_PWD
maciek -HOST wplcwwro977 -LISTENER_OH C:\oracle\product\10.2.0\db_1
-LOG_FILE C:\oracle\product\10.2.0\admin\testdb\scripts\emConfig.log
-SYSMAN_PWD maciek
Jak ktoś miał cierpliwość w czytaniu to bardzo dziękuję:) Jak nasuwają
się Wam jakieś komentarze to bardzo proszę. Jeszcze będe eksperymentował
i dam wyniki na stronce (jak tylko postawie httpd:)).
Ja mam dwa pytania.
Czy mogę, zamiast usuwać redologi i następnie tworzyć, skopiować tak jak
controlfile?
Co to jest "allocate channel for maintenance type disk"? Czytałem
dokumentację ale nie zrozumiałem tych kanałów :(
Pozdrawiam,
Maciek