Oracle DBA-ként gyakran találkozunk olyan helyzetekkel, amikor a tankönyvi megoldások ("csinálj egy DB linket és klónozd át") nem működnek. Mit tehetünk, ha egy PDB-t kell átmozgatnunk egy teljesen izolált környezetbe, a forrás adatbázis NOARCHIVELOG módban fut, és szigorú elvárás, hogy az eredeti példány érintetlen maradjon?
A mai bejegyzésben egy klasszikus, "offline" migrációs forgatókönyvet veszünk végig lépésről lépésre. A feladatunk egy PDB1 nevű adatbázis átmásolása (klónozása) egy CDB1 környezetből egy másik szerveren futó CDB2-be.
A Kihívások
- Hálózati izoláció: A két szerver nem látja egymást, nincs CREATE DATABASE LINK lehetőség.
- NoArchivelog: A forrás adatbázis nincs archiváló módban, így "menet közbeni" (hot) mentés nem garantál konzisztenciát.
- No Unplug: Nem választhatjuk le (unplug) a PDB-t, mert a forrás oldalon az üzletmenetnek folytatódnia kell a másolás után azonnal.
- Windows környezet: A példában Windows szervereket és fájlrendszert használunk, de Linux környezetben is működik az eljárás.
0. Lépés: Az Előfeltételek (A "nulladik típusú" hibák elkerülése)
Mielőtt egyetlen parancsot is kiadnánk, egy kritikus dolgot ellenőriznünk kell: A Kompatibilitást.
A fizikai másoláson alapuló PDB mozgatás (plug-in) csak akkor működik zökkenőmentesen, ha:
- Architektúra: Azonos (pl. mindkettő 64-bit Windows). Az Endianness (bájtsorrend) egyezése kötelező.
- Verzió: A forrás és cél adatbázis fő verziója (pl. 19c) megegyezik.
- Patch Level: Ideális esetben a Release Update (RU) szint is egyezik.
Mi történik, ha nem egyeznek? Ha a verziók eltérnek (pl. régebbi RU-ról megyünk újabbra), a csatolás után az adatbázis gyakran RESTRICTED módban nyílik meg, és futtatni kell a datapatch utility-t vagy upgrade szkripteket. Ha az architektúra (OS) teljesen más, akkor ez a módszer nem működik, helyette a Data Pump (expdp/impdp) a barátunk.
I. A Forrás Szerver (CDB1) előkészítése
Mivel NOARCHIVELOG módban vagyunk, a fájlmásolás idejére az adatfájloknak inaktívnak, konzisztensnek kell lenniük. Ehhez a PDB-t írásvédetté (Read Only) tesszük az XML generálás idejére, majd lezárjuk a fizikai másoláshoz.
Helyszín: Forrás Szerver, SQL*Plus (vagy kedvenc eszközöd)
- Állítsuk le, majd nyissuk meg Read Only módban a PDB-t. Ez biztosítja a konzisztens állapotot (checkpoint) és, hogy ne írjon senki az adatbázisba.
ALTER PLUGGABLE DATABASE PDB1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE PDB1 OPEN READ ONLY;
- Készítsük el a PDB leíró XML fájlt. Ez a fájl tartalmazza a PDB metaadatait (fájlok helye, GUID, stb.). Fontos: A DBMS_PDB.DESCRIBE használatával nem választjuk le (unplug) az adatbázist, csak készítünk róla egy leírást.
ALTER SESSION SET CONTAINER = PDB1;
SHOW CON_NAME -- Ellenőrzés: biztosan a PDB1-ben vagyunk?
EXEC DBMS_PDB.DESCRIBE(pdb_descr_file => 'F:\PDB_COPY\XML\PDB1.xml');
-- Az XML fájlt a hordozható meghajtóra (F:) generáljuk
- Zárjuk be a PDB-t a másoláshoz. Windows alatt a fájlok zárolva vannak, amíg az adatbázis nyitva van. A másoláshoz be kell zárnunk.
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER PLUGGABLE DATABASE PDB1 CLOSE IMMEDIATE;
- Fájlmásolás (OS szinten). Most másoljuk át a teljes adatbázis könyvtárat a hordozható tárolóra (F:).
Forrás útvonal: E:\oracle\oradata\CDB1\PDB1 Cél útvonal: F:\PDB_COPY\PDB1
- Forrás újraindítása. Amint a másolás kész, a forrás szerveren az élet mehet tovább.
ALTER PLUGGABLE DATABASE PDB1 OPEN;
II. Átmozgatás
Fizikailag csatlakoztassuk át az F: meghajtót (USB diszk, SAN LUN, stb.) a cél szerverhez.
III. A Cél Szerver (CDB2) műveletek
A cél szerveren az adatbázis fájlok a D:\ meghajtón laknak majd, nem az E:\-en, mint a forráson. Ezt a konverziót kezelnünk kell.
Helyszín: Cél Szerver, SQL*Plus (CDB2)
- Kompatibilitás ellenőrzése. Mielőtt megpróbálnánk beolvasztani az adatbázist, kérdezzük meg az Oracle-t, hogy tetszik-e neki az XML és a fájlok állapota.
SET SERVEROUTPUT ON
DECLARE
v_compatible BOOLEAN;
BEGIN
-- Ellenőrizzük, hogy a PDB1 név és az XML fájl tartalma illeszkedik-e a CDB2-höz
v_compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => 'F:\PDB_COPY\XML\PDB1.xml',
pdb_name => 'PDB1'
);
IF v_compatible THEN
DBMS_OUTPUT.PUT_LINE('Az XML kompatibilis, a PDB létrehozható.');
ELSE
DBMS_OUTPUT.PUT_LINE('Kompatibilitási problémák vannak! Lásd a PDB_PLUG_IN_VIOLATIONS nézetet.');
END IF;
END;
/
- Ha a kimenet hibát jelez, nézzük meg a részleteket:
SELECT time, type, message, status, actionFROM pdb_plug_in_violationsWHERE name = 'PDB1'ORDER BY time;
- A PDB létrehozása (Klónozás). Itt történik a varázslat. Mivel a fájlok jelenleg az F: meghajtón vannak (másolat), de az XML eredetileg az E: meghajtóra hivatkozott, és mi véglegesen a D: meghajtóra akarjuk tenni őket, két konverziót kell használnunk:
AS CLONE: Ez jelzi az Oracle-nek, hogy ez egy új DB ID-val rendelkező másolat lesz, nem az eredeti mozgatása.
SOURCE_FILE_NAME_CONVERT: Megmondja, hogy az XML-ben lévő útvonalak (E:\...) helyett hol keresse most a fájlokat (F:\...).
FILE_NAME_CONVERT: Megmondja, hogy a jelenlegi helyről (F:\...) hova másolja őket véglegesen a COPY kapcsoló segítségével (D:\...).
CREATE PLUGGABLE DATABASE PDB1AS CLONEUSING 'F:\PDB_COPY\XML\PDB1.xml'SOURCE_FILE_NAME_CONVERT = ('E:\oracle\oradata\CDB1\PDB1\', 'F:\PDB_COPY\PDB1\')FILE_NAME_CONVERT = ('F:\PDB_COPY\PDB1\', 'D:\oracle\oradata\CDB2\PDB1\')COPY; -- Ez végzi el a fizikai másolást F-ről D-re
- Megnyitás. Ha a CREATE sikeres volt, nyissuk meg az adatbázist.
ALTER PLUGGABLE DATABASE PDB1 OPEN;
- Ellenőrzés
SELECT name, open_mode, restricted FROM v$pdbs WHERE name = 'PDB1';
- Végül ne felejtsük el elmenteni az állapotot, hogy a CDB2 újraindításakor a PDB1 is automatikusan elinduljon:
ALTER PLUGGABLE DATABASE PDB1 SAVE STATE;
Összegzés
Ezzel a módszerrel sikeresen klónoztunk egy PDB-t hálózati kapcsolat nélkül, a fájlrendszeren keresztül, miközben az eredeti forrás adatbázist csak minimális időre kellett leállítani (a fájlmásolás idejére), és nem végeztünk rajta visszafordíthatatlan UNPLUG műveletet.
Segítségre lenne szükséged?
Szabadúszó, vizsgázott Oracle szakértőként szívesen segítek akár az Oracle adatbázisok klónozásával, másolásával kapcsolatban is.
Oracle DBA Szolgáltatásaim a következőket tartalmazzák:
- Telepítés és konfigurálás
- Adatbázis migrálás
- Hibaelhárítás és optimalizálás
- Tanácsadás és oktatás
Vedd fel velem a kapcsolatot e-mailben a palffy.peter@oracle-szakerto.hu címen, ha bármilyen kérdésed van, vagy árajánlatot szeretnél kérni.
Segítek elérni az Oracle adatbázisokkal kapcsolatos céljaid!
