Duplikacja bazy danych Oracle to jedna z najważniejszych umiejętności każdego DBA. W tym artykule pokazuję, jak skutecznie wykorzystać polecenie DUPLICATE w Oracle 19c — od planowania przez konfigurację instancji pomocniczej aż po rozwiązywanie problemów.

Duplikacja baz danych w Oracle 19c — kompletny przewodnik praktyka
Kluczowe punkty
  • Duplikacja RMAN tworzy niezależną kopię bazy z nowym DBID
  • Trzy metody duplikacji: active, backup-based i z recovery catalog
  • Kluczowa jest prawidłowa konfiguracja parametrów instancji pomocniczej
  • Duplikacja obsługuje zarówno tradycyjne bazy jak i architekturę CDB/PDB

Czym jest duplikacja bazy danych i kiedy jej używać

Duplikacja bazy danych w Oracle to proces tworzenia w pełni funkcjonalnej, niezależnej kopii źródłowej bazy przy użyciu polecenia DUPLICATE w RMAN. W przeciwieństwie do zwykłego kopiowania plików na poziomie systemu operacyjnego, RMAN automatycznie nadaje duplikatowi nowy DBID, co pozwala na rejestrację obu baz w tym samym katalogu odzyskiwania.

Po 20 latach pracy z Oracle mogę powiedzieć, że duplikacja to narzędzie, którego używam regularnie w następujących scenariuszach:

  • Tworzenie środowisk testowych i deweloperskich na podstawie produkcji
  • Testowanie procedur backup i recovery bez ryzyka dla produkcji
  • Weryfikacja upgrade'u do nowej wersji Oracle
  • Analiza wydajności aplikacji na realnych danych
  • Tworzenie baz standby dla Oracle Data Guard
  • Generowanie raportów bez obciążania produkcji

Warto pamiętać, że duplikat bazy danych to nie to samo co standby database. Duplikat jest całkowicie niezależny — nie synchronizuje się ze źródłem i nie może służyć jako cel failover. Jeśli potrzebujesz wysokiej dostępności, powinieneś rozważyć Data Guard.

Z mojego doświadczenia wynika, że najczęstszym błędem jest traktowanie duplikacji jako szybkiego sposobu na klonowanie produkcji. W rzeczywistości wymaga ona starannego planowania, szczególnie gdy mamy do czynienia z dużymi bazami lub ograniczoną przepustowością sieci.

Typy duplikacji w Oracle 19c

Oracle RMAN oferuje trzy podstawowe metody duplikacji, każda z nich ma swoje zastosowania i ograniczenia.

Active Database Duplication

Duplikacja aktywna przesyła pliki danych bezpośrednio z instancji źródłowej do pomocniczej przez Oracle Net. Nie wymaga dostępu do backupów — wszystko odbywa się online.

Wymagania dla tej metody:

  • Baza źródłowa musi być otwarta w trybie READ WRITE lub zamontowana
  • Skonfigurowane połączenie sieciowe między hostem źródłowym a docelowym
  • Baza źródłowa musi działać w trybie ARCHIVELOG
  • RMAN musi połączyć się zarówno ze źródłem jak i z instancją pomocniczą

Ta metoda jest idealna gdy nie masz aktualnych backupów lub potrzebujesz najświeższych danych. Wadą jest obciążenie sieci i bazy źródłowej podczas transferu.

Backup-Based Duplication

Duplikacja oparta na backupach wykorzystuje istniejące kopie zapasowe i archived redo logi. RMAN odtwarza bazę z backupu podobnie jak przy standardowym recovery.

Możesz użyć tej metody z lub bez połączenia do bazy źródłowej:

  • Z połączeniem do źródła — RMAN automatycznie lokalizuje potrzebne backupy
  • Bez połączenia — musisz ręcznie skopiować backupy i określić ich lokalizację

Backup-based duplication jest preferowana dla dużych baz, gdzie transfer przez sieć byłby zbyt wolny lub obciążający.

Duplikacja z użyciem Recovery Catalog

Gdy korzystasz z katalogu odzyskiwania, RMAN może pobrać metadane o backupach bezpośrednio z niego, co upraszcza cały proces. Jest to szczególnie przydatne w środowiskach z wieloma bazami danych.

Przygotowanie instancji pomocniczej

Prawidłowa konfiguracja instancji pomocniczej (auxiliary instance) to fundament udanej duplikacji. Błędy na tym etapie są najczęstszą przyczyną niepowodzeń.

Tworzenie pliku parametrów

Instancja pomocnicza wymaga minimalnego pliku init.ora. Oto parametry, które musisz ustawić:

Parametry obowiązkowe:

  • DB_NAME — nazwa duplikatu (musi być unikalna w danym Oracle Home)
  • CONTROL_FILES — ścieżki do plików kontrolnych
  • DB_BLOCK_SIZE — musi być identyczny jak w bazie źródłowej

Parametry opcjonalne ale zalecane:

  • DB_FILE_NAME_CONVERT — pary stringów do konwersji ścieżek plików danych
  • LOG_FILE_NAME_CONVERT — pary stringów dla online redo logów
  • DB_CREATE_FILE_DEST — dla Oracle Managed Files
  • DB_RECOVERY_FILE_DEST — lokalizacja Fast Recovery Area

Przykładowy plik init.ora dla instancji pomocniczej:

db_name=DUPDB

control_files='/u01/oradata/dupdb/control01.ctl','/u02/oradata/dupdb/control02.ctl'

db_block_size=8192

db_file_name_convert='/u01/oradata/proddb/','/u01/oradata/dupdb/'

log_file_name_convert='/u01/oradata/proddb/','/u01/oradata/dupdb/'

audit_file_dest='/u01/app/oracle/admin/dupdb/adump'

diagnostic_dest='/u01/app/oracle'

Uruchomienie instancji pomocniczej

Przed duplikacją musisz uruchomić instancję pomocniczą w trybie NOMOUNT:

export ORACLE_SID=DUPDB

sqlplus / as sysdba

STARTUP NOMOUNT PFILE='/path/to/initDUPDB.ora';

Upewnij się, że wszystkie katalogi określone w parametrach istnieją i mają odpowiednie uprawnienia dla użytkownika oracle.

Przez lata nauczyłem się, że warto przed duplikacją stworzyć checklistę katalogów do utworzenia: adump, bdump, cdump, udump oraz katalogi na pliki danych, redo logi i archived logi. Brakujący katalog to jeden z najczęstszych powodów niepowodzenia DUPLICATE.

Konfiguracja Oracle Net dla duplikacji aktywnej

Duplikacja aktywna wymaga prawidłowej konfiguracji Oracle Net na obu hostach. RMAN musi mieć możliwość połączenia się zarówno ze źródłem jak i z celem.

Konfiguracja listenera na hoście docelowym

Listener musi nasłuchiwać na instancji pomocniczej zanim ta zostanie otwarta. Ponieważ instancja jest w trybie NOMOUNT, musisz użyć statycznej rejestracji w listener.ora:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = DUPDB)

(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)

(SID_NAME = DUPDB)

)

)

Konfiguracja tnsnames.ora

Na hoście gdzie uruchamiasz RMAN, musisz mieć wpisy TNS zarówno dla źródła jak i celu:

PRODDB =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = prod-server)(PORT = 1521))

(CONNECT_DATA = (SERVICE_NAME = PRODDB))

)

DUPDB =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = test-server)(PORT = 1521))

(CONNECT_DATA = (SERVICE_NAME = DUPDB))

)

Zweryfikuj połączenia przed rozpoczęciem duplikacji:

tnsping PRODDB

tnsping DUPDB

Plik hasła

Instancja pomocnicza wymaga pliku hasła dla uwierzytelnienia SYSDBA przez sieć. Utwórz go poleceniem orapwd:

orapwd file=$ORACLE_HOME/dbs/orapwDUPDB password=your_password entries=10

Wykonanie duplikacji — praktyczne przykłady

Poniżej przedstawiam sprawdzone w praktyce scenariusze duplikacji, które stosuję w codziennej pracy.

Duplikacja aktywna — podstawowy scenariusz

Połącz się z RMAN do obu instancji i wykonaj DUPLICATE:

rman TARGET sys/password@PRODDB AUXILIARY sys/password@DUPDB

DUPLICATE TARGET DATABASE TO DUPDB

FROM ACTIVE DATABASE

SPFILE

SET DB_UNIQUE_NAME='DUPDB'

SET CONTROL_FILES='/u01/oradata/dupdb/control01.ctl','/u02/oradata/dupdb/control02.ctl'

SET DB_FILE_NAME_CONVERT='/u01/oradata/proddb/','/u01/oradata/dupdb/'

SET LOG_FILE_NAME_CONVERT='/u01/oradata/proddb/','/u01/oradata/dupdb/'

NOFILENAMECHECK;

Duplikacja do określonego punktu w czasie

RMAN zawsze wykonuje point-in-time recovery podczas duplikacji, ponieważ online redo logi nie są kopiowane. Możesz jawnie określić punkt docelowy:

DUPLICATE TARGET DATABASE TO DUPDB

FROM ACTIVE DATABASE

UNTIL TIME "TO_DATE('2024-01-15 14:00:00','YYYY-MM-DD HH24:MI:SS')"

SPFILE

SET DB_FILE_NAME_CONVERT='/u01/oradata/proddb/','/u01/oradata/dupdb/'

SET LOG_FILE_NAME_CONVERT='/u01/oradata/proddb/','/u01/oradata/dupdb/';

Duplikacja z backupów bez połączenia do źródła

Ten scenariusz wymaga wcześniejszego skopiowania backupów i archived logów na host docelowy:

rman AUXILIARY sys/password@DUPDB

DUPLICATE DATABASE TO DUPDB

BACKUP LOCATION '/u01/backup/proddb'

SPFILE

SET DB_NAME='DUPDB'

SET DB_FILE_NAME_CONVERT='/u01/oradata/proddb/','/u01/oradata/dupdb/'

SET LOG_FILE_NAME_CONVERT='/u01/oradata/proddb/','/u01/oradata/dupdb/'

NOFILENAMECHECK;

Klauzula NOFILENAMECHECK jest niezbędna gdy ścieżki na serwerze docelowym różnią się od źródłowych. Bez niej RMAN sprawdza czy pliki o oryginalnych nazwach istnieją, co przy duplikacji na inny serwer zawsze kończy się błędem.

Duplikacja w architekturze CDB/PDB

Oracle 19c w pełni obsługuje duplikację w środowisku multitenant. Masz kilka opcji w zależności od potrzeb.

Duplikacja całego CDB

Proces jest analogiczny do duplikacji tradycyjnej bazy. RMAN skopiuje CDB$ROOT oraz wszystkie PDB:

DUPLICATE TARGET DATABASE TO DUPCDB

FROM ACTIVE DATABASE

SPFILE

SET DB_FILE_NAME_CONVERT='+DATA/PRODCDB/','+DATA/DUPCDB/'

SET LOG_FILE_NAME_CONVERT='+DATA/PRODCDB/','+DATA/DUPCDB/';

Duplikacja wybranych PDB

Od Oracle 12.2 możesz duplikować tylko wybrane pluggable databases używając klauzuli PLUGGABLE DATABASE:

DUPLICATE TARGET DATABASE TO DUPCDB

FROM ACTIVE DATABASE

PLUGGABLE DATABASE pdb1, pdb2

SPFILE

SET DB_FILE_NAME_CONVERT='+DATA/PRODCDB/','+DATA/DUPCDB/';

Ta opcja jest szczególnie przydatna gdy potrzebujesz tylko części środowiska produkcyjnego do testów.

Wykluczanie PDB z duplikacji

Alternatywnie możesz wykluczyć konkretne PDB używając SKIP PLUGGABLE DATABASE:

DUPLICATE TARGET DATABASE TO DUPCDB

FROM ACTIVE DATABASE

SKIP PLUGGABLE DATABASE pdb_archive, pdb_readonly

SPFILE;

Rozwiązywanie problemów i najlepsze praktyki

Przez lata zebrałem sporo doświadczeń związanych z problemami podczas duplikacji. Oto najczęstsze pułapki i sposoby ich unikania.

Typowe błędy i ich rozwiązania

ORA-01017: invalid username/password — sprawdź plik hasła na instancji pomocniczej i upewnij się, że hasło jest identyczne jak na źródle.

ORA-17627: ORA-12154: TNS:could not resolve the connect identifier — zweryfikuj konfigurację tnsnames.ora i listener.ora.

RMAN-05001: auxiliary file name conflicts with a file used by the target database — dodaj klauzulę NOFILENAMECHECK lub popraw DB_FILE_NAME_CONVERT.

ORA-19504: failed to create file — sprawdź czy katalogi docelowe istnieją i mają odpowiednie uprawnienia.

Wznawianie duplikacji po awarii

Jeśli duplikacja zostanie przerwana, możesz ją wznowić zamiast zaczynać od nowa. RMAN zapisuje checkpointy pozwalające na kontynuację:

  • Uruchom ponownie instancję pomocniczą w trybie NOMOUNT
  • Połącz się z RMAN tak samo jak poprzednio
  • Wykonaj to samo polecenie DUPLICATE — RMAN wykryje poprzednią próbę

Optymalizacja wydajności

Dla dużych baz danych warto rozważyć następujące parametry:

  • SECTION SIZE — równoległe kopiowanie dużych plików danych
  • Parametr PARALLEL na poziomie RMAN lub kanałów
  • Zwiększenie LARGE_POOL_SIZE na obu instancjach

CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

DUPLICATE TARGET DATABASE TO DUPDB

FROM ACTIVE DATABASE

SECTION SIZE 500M

SPFILE;

Lista kontrolna przed duplikacją

Zawsze przed rozpoczęciem weryfikuję:

  • Wystarczająca ilość miejsca na hoście docelowym
  • Baza źródłowa w trybie ARCHIVELOG
  • Wszystkie wymagane katalogi utworzone
  • Plik hasła na instancji pomocniczej
  • Listener skonfigurowany ze statyczną rejestracją
  • Połączenia TNS działają w obu kierunkach
  • Aktualny backup (dla backup-based duplication)
Duplikacja bazy danych Oracle 19c to potężne narzędzie, które przy odpowiednim przygotowaniu działa niezawodnie. Kluczem do sukcesu jest staranna konfiguracja instancji pomocniczej i Oracle Net oraz wybór właściwej metody duplikacji do konkretnego scenariusza. Pamiętaj o checkliście przed każdą operacją — większość problemów wynika z przeoczenia prostych rzeczy jak brakujący katalog czy błędna konfiguracja listenera.
Źródła i materiały
  1. https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-duplicating-databases.html#GUID-F31F9FCE-B610-49EB-B9DB-44B9AA4E838F