Baza Oracle – klonowanie/kopiowanie – datafile na FS. 5


Google translate:

Ave 🙂

To jest instrukcja, która pomoże nam bez problemu sklonować czy też skopiować bazę danych Oracle, której dane przechowywane są datafile’ach. Jest to przydatne choćby w przypadku tworzenia środowisk developerskich czy też  testowych, gdzie na podstawie wzorcowej bazy danych odtwarzamy ją razem z danymi pod inną nazwą instancji lub też pod taką samą ale na innym serwerze. W krótkich, żołnierskich słowach postaram się przedstawić ten temat. Załóżmy, że mamy instancję o nazwie mietek5 na serwerze mietek i chcemy zrobić jej klon na serwerze zyta, a instancja będzie nazywać się zyta5. Po tym wstępie przechodzimy do działania.

Do zrobienia na serwerze mietek:

  1. Lokalizujemy aktualny trace file poleceniem:

    select value from v$diag_info where name=’Default Trace File’;

  2. Wykonujemy poniższe polecenie aby w trace logu znalazł się zapis, na którego podstawie będziemy tworzyli nową instancję:

    alter database backup controlfile to trace;

  1. Zamykamy instancję wzorcową. Kopiujemy trace file w miejsce gdzie będziemy go edytować. Kopiujemy również pfile (np. do ORACLE_HOME/dbs na serwerze zyta)
  2. Kopiujemy pliki danych na nowy serwer w przypadku zmiany nazwy instancji należy uwzględnić to w drzewie katalogów.
  3. Tworzymy pfile z spfile i kopiujemy go na nowy serwer.

To byłoby na tyle na serwerze mietek.

Do zrobienia na serwerze zyta:

  1. Edytujemy pobrany trace file z instancji zyta5 i wycinamy z niego część od znacznika:

    —     Set #2. RESETLOGS case

    W naszym przypadku będziemy zmieniali nazwę instancji zatem musimy zmienić zapis odpowiadający za nazwę instancji:

    CREATE CONTROLFILE REUSE DATABASE ‚mietek5’ RESETLOGS NOARCHIVELOG

    na

    CREATE CONTROLFILE REUSE DATABASE ‚zyta5’ RESETLOGS NOARCHIVELOG

    Należy również zmienić wskazania ścieżek do datafile’i tak aby wskazywały na pliki przekopiowane z serwera mietek. Należy również zakomentować zapis:

    –RECOVER DATABASE USING BACKUP CONTROLFILE

    Zatem skrypt powinien wyglądać mniej więcej tak:

    STARTUP NOMOUNTCREATE CONTROLFILE SET DATABASE "zyta5" RESETLOGS  NOARCHIVELOGMAXLOGFILES 16
     
    MAXLOGMEMBERS 3
     
    MAXDATAFILES 100
     
    MAXINSTANCES 8
     
    MAXLOGHISTORY 292
     
    LOGFILE
     
    GROUP 1 '/home/ora11/oracle/oradata/zyta5/redo01.log'  SIZE 50M BLOCKSIZE 512,
     
    GROUP 2 '/home/ora11/oracle/oradata/zyta5/redo02.log'  SIZE 50M BLOCKSIZE 512,
     
    GROUP 3 '/home/ora11/oracle/oradata/zyta5/redo03.log'  SIZE 50M BLOCKSIZE 512
     
    DATAFILE
     
    '/home/ora11/oracle/oradata/zyta5/system01.dbf',
     
    '/home/ora11/oracle/oradata/zyta5/sysaux01.dbf',
     
    '/home/ora11/oracle/oradata/zyta5/undotbs01.dbf',
     
    '/home/ora11/oracle/oradata/zyta5/users01.dbf',
     
    '/home/ora11/oracle/oradata/zyta5/DATA01.dbf',
     
    '/home/ora11/oracle/oradata/zyta5/INDX01.dbf',
     
    '/home/ora11/oracle/oradata/zyta5/RMAN.dbf'
     
    CHARACTER SET EE8ISO8859P2
     
    ;
     
    ALTER DATABASE OPEN RESETLOGS;
     
    ALTER TABLESPACE TEMP ADD TEMPFILE '/home/ora11/oracle/oradata/zyta1/temp01.dbf' SIZE 543162368  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
  2. Tworzymy drzewo katalogu admin
    mkdir -p zyta5/bdump
    mkdir -p zyta5/udump
    mkdir -p zyta5/cdump
    mkdir -p zyta5/adump
    mkdir -p zyta5/pfile
  3. Teraz musimy dokonać zmian w pfile (jeżeli była zmiana instancji należy zmienić również jego nazwę). Pfile powinien wyglądać w następujący sposób.
    *.audit_file_dest='/home/ora11/oracle/admin/zyta1/adump'
    *.audit_trail='db'*.compatible='11.2.0.0.0'
    *.control_files='/home/ora11/oracle/oradata/zyta5/control01.ctl','/home/ora11/oracle/oradata/zyta5/control02.ctl'
    *.db_block_size=8192*.db_domain=''
    *.db_name='zyta5'*.diagnostic_dest='/home/ora11/oracle'
     
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=zyta5XDB)'
     
    *.memory_target=3145728000
     
    *.open_cursors=300
     
    *.processes=150
     
    *.remote_login_passwordfile='EXCLUSIVE'
     
    *.undo_tablespace='UNDOTBS1'
  4. Powinniśmy usunąć stary plik danych będący TEMPFILE’em
  5. Sprawdzamy czy wszystko zostało prawidłowo poprawione – jeżeli tak to możemy uruchomić skrypt utworzony w punkcie 1.

Mamy gotową, sklonowaną instancję bazy danych.


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

5 komentarzy do “Baza Oracle – klonowanie/kopiowanie – datafile na FS.

    • aciek Autor wpisu

      Taki manual też postaram się spreparować ale zawsze trzeba mieć dowolność wyboru. Możliwości jest wiele – przecież można też użyć datapump, którego możliwości też postaram się opisać za pomocą przykładowego skryptu do tworzenia środowiska developerskiego z wypełnionymi tabelami parametrycznymi oraz pustymi tabelami danych.

      • Bartosz

        Ale masz jedno ale. W realnym zyciu masz produkcje ktora ma 20TB i nie zatrzymasz jej tylko po to aby przekopiowac pliki.
        2 sprawa, to dziala tylko w przypadku normalnych „filesystemow”. Dzisiaj ASM to standard i pozostaje Ci tylko RMAN lub expdp/impdp.

        • aciek Autor wpisu

          Oczywiście masz rację ale jeżeli założysz, że masz powiedzmy wzorcowe środowisko developerskie gdzie są przeprowadzane końcowe testy developerskie na „górkach” oprogramowania (takie środowisko nie jest w ciągłym użytkowaniu) i przychodzi do Ciebie developer, który ma do oprogramowania moduł, którego zależności są tak głębokie, że kompilacja środowiska może je unieruchomić, co wiąże się z przestojem całości testów developerskich, to jest to opcja aby szybko postawić mu środowisko „na boku” gdzie będzie mógł robić co mu się żywnie podoba bo będzie należało tylko do niego. I tak jest to opcja tylko i wyłącznie w przypadku „normalnych filesystemów” dlatego, jak już powiedziałem, jak tylko znajdę czas to opiszę RMAN i datapump. Zawsze przecież możesz to Ty opisać i zamieścimy opis takiego rozwiązania.
          I tak, z ASM w tej chwili bardzo często się korzysta jednak wiem z własnego doświadczenia, że nie zawsze.