Egy korábbi, „Szoftverek tesztkörnyezeteinek tervezése” című blogbejegyzésünkben felsoroltunk néhány módszert tesztkörnyezetünk létrehozására és frissítésére. Ebben a cikkünkben az éles környezetünkből fogunk tesztkörnyezetet készíteni egyetlen parancs kiadásával, kihasználva az Oracle adatbáziskezelő multitenant architektúrájának lehetőségeit. A multitenant architektúra a 12c verziótól érhető el.

Az Oracle multitentant adatbázis egy konténer adatbázisból (container database, CDB) és több felhasználói adatbázisból (pluggable database, PDB) áll. Az angol „pluggable” elnevezés abból adódik, hogy ezeket az adatbázisokat el tudjuk távolítani (ki tudjuk húzni) egy konténer adatbázisból és hozzá tudjuk adni (be tudjuk dugni) egy konténer adatbázishoz. Egy jó megfogalmazás még, hogy a PDB adatbázis sémák és objektumok hordozható halmaza, amely egy adatbázis kliens számára úgy jelenik meg, mint egy hagyományos, nem multitenant adatbázis.

Egy gyors áttekintés a multitenant adatbázisok előnyeiről:

  • Az adatbáziskonszolidáció miatt a háttérfolyamatok száma csökken (egy adatbázishoz tartozó folyamatok futnak csak), így a CPU és memóriacsökkenés miatt a hardver és annak üzemeltetési költsége csökken.
  • A PDB mozgathatósága miatt gyors adat és kódmásolás, valamint mozgatás adatbázis futása mellett.
  • Könnyebb adminisztrálás és monitorozás, például az egész konténer adatbázis egyidejű patchelése és mentése.
  • Felhasználói jogosultságok kezelése CDB és PDB szinten.
  • Könnyebb performancia beállítások, nem szükséges egyesével beállítani az összes adatbázisparamétert, például egy SGA területet kell csak méretezni.

Tegyük fel, hogy van egy éles adatbázis környezetünk, amely egy Oracle multitenant konténer (CDB) adatbázis, s ebben jelenleg 2 felhasználói adatbázis (PDB) található. Feladatunk, hogy az egyik PDB adatbázist lemásoljuk egy másik szerveren futó tesztkörnyezetbe. A másoláshoz egy adatbázis linket hozunk létre a cél CDB adatbázisban, amely a forrás PDB adatbázisra mutat. A másoláshoz 3 fő feltételt kell teljesíteni:

  • A cél CDB adatbázisban rendelkeznünk kell CREATE PLUGGABLE DATABASE jogosultsággal.
  • Létre kell hozni a fent említett adatbázis linket.
  • Az adatbázis linkben szereplő adatbázis felhasználónak rendelkeznie kell CREATE PLUGGABLE DATABASE vagy SYSOPER jogosultsággal a forrás PDB adatbázisban.

Ahhoz, hogy a forrás adatbázist ne kelljen leállítani az alábbi feltételeket kell még teljesíteni:

  • A forrásoldali konténer adatbázisnak archív módban kell futnia.
  • A forrásoldali konténer adatbázisnak local undo módban kell futnia.

A local undo mód csak 12.2 verziótól érhető el, így a futás melletti másoláshoz legalább 12.2 verziójú adatbáziskezelőre van szükség. Ha ez a két feltétel közül bármelyik nem teljesül, akkor másoláskor a PDB-nek read-only módban kell lennie.

A fentiek alapján a forrás adatbázis így néz ki:

[oracle@database19edu01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Aug 10 14:18:26 2023
Version 19.16.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.16.0.0.0

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO
         4 ORCLPDB2                       READ WRITE NO

SQL> SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='LOCAL_UNDO_ENABLED';

PROPERTY_NAME
--------------------------------------------------------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
LOCAL_UNDO_ENABLED
TRUE
true if local undo is enabled

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/19c/dbhome_1/dbs/arch
Oldest online log sequence     210
Next log sequence to archive   212
Current log sequence           212

A célkörnyezet állapota:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO

A célkörnyezetben hozzuk létre a database linket. A lenti parancsban a CUSTOM_SYSOPER felhasználót használjuk, amely a forrás PDB (másolandó) adatbázisunkban CREATE SESSION és SYSOPER jogosultsággal létrehozott új adatbázis felhasználó:

CREATE DATABASE LINK sourcepdb
    CONNECT TO custom_sysoper IDENTIFIED BY Ora_DB4U
    USING '(DESCRIPTION=
                (ADDRESS=(PROTOCOL=TCP)(HOST=database19edu01)(PORT=1521))
                (CONNECT_DATA=(SERVICE_NAME=orclpdb))
            )';

Majd végezzük el a PDB adatbázis másolását egyetlen paranccsal:

create pluggable database ORCLPDBCOPY2 from ORCLPDB@sourcepdb
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/ORCL/orclpdb', '/u01/app/oracle/oradata/ORCL/orclpdbcopy2');

Pluggable database created.

A CREATE PLUGGABLE DATABASE parancsnak több opciója is van, mi a FILE_NAME_CONVERT opciót használtuk. A FILE_NAME_CONVERT opció és a PDB_FILE_NAME_CONVERT adatbázis paraméter használatával egy megfeleltetést lehet megadni a forrás és a cél adatbázis fájlok helyére és nevére. Oracle Managed File-ok esetében erre nincs szükség, ekkor a CREATE_FILE_DEST paraméter érvényesül.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         5 ORCLPDBCOPY                    MOUNTED

Másolás után az új adatbázist meg kell nyitni:

SQL> alter pluggable database ORCLPDBCOPY open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         5 ORCLPDBCOPY                    READ WRITE NO

A fenti lépéssorozattal létrehoztuk egy éles adatbázisunk másolatát a tesztkörnyezeten. A további másolások alkalmával az előkészítő lépéseket sem kell megtenni, cél adatbázis helyén lévő adatbázis törlése után a másolás egyetlen paranccsal végrehajtható.

Amennyiben konszolidálni szeretné meglévő adatbázisait, keresse szakértő csapatunkat!