Oracle 12c ile gelen bu yeni özlelik ile uygulamanıza yapılacak bir deployment öncesi pre-prod yapmak istenildiğinde veya performans problemleri incelerken veritabanının bir kopyasına ihtiyaç duyduğumuzda bu yöntemle veritabanımızın bir kopyasını oluşturabiliriz.
Bu örnekte Container Database(CDB)'deki bir pluggable database(PDB)'den clone alınarak yine aynı CDB'de başka bir PDB veritabanı oluşturduk.
Çalışmaya başlamadan önce yeterli disk alanı olduğunu kontrol edilmeli.
DB isimleri:
CDB: test12c
PDB: pdb1
Oluşturulacak PDB: pdb2
-- Clone alınacak database'in read-only modda olması gerekiyor. İlk önce pdb'lerin durumlarına bakarız.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
-- Clone alınacak database'in read-only modda açılır.
SQL> alter pluggable database PDB1 close immediate;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 MOUNTED
SQL> alter pluggable database PDB1 open read only;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ ONLY
-- Pluggable database clone alınarak oluşturulur. (datafile isimleri de convert edildi)
CREATE PLUGGABLE DATABASE PDB2 FROM PDB1
STORAGE UNLIMITED
FILE_NAME_CONVERT=(
'/test12c/oradata/test12c/Pdb1/system01.dbf', '/test12c/oradata/test12c/Pdb2/system01.dbf.clone',
'/test12c/oradata/test12c/Pdb1/sysaux01.dbf', '/test12c/oradata/test12c/Pdb2/sysaux01.dbf.clone',
'/test12c/oradata/test12c/Pdb1/SAMPLE_SCHEMA_users01.dbf', '/test12c/oradata/test12c/Pdb2/SAMPLE_SCHEMA_users01.dbf.clone2',
'/test12c/oradata/test12c/Pdb1/example01.dbf', '/test12c/oradata/test12c/Pdb2/example01.dbf.clone',
'/test12c/oradata/test12c/Pdb1/Pdb1_temp01.dbf', '/test12c/oradata/test12c/Pdb2/Pdb2_temp01.dbf.clone'
)
-- PDB'lerin durumlarına bakıldığında yeni oluşturulan pdb'in mount modda olduğunu görürüz. Bu pdb'i(PDB2) açtık.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ ONLY
PDB2 MOUNTED
SQL> alter pluggable database PDB2 open;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ ONLY
PDB2 READ WRITE
-- Yeni oluşturulan pdb'e(PDB2) bağlanarak kontrol ederiz.
SQL> connect system/oracle123@localhost:1538/PDB2
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB2
-- Clone alınan Pdb read-only modda olduğu için bu pdb'i tekrar read-write modda açtık
SQL> ALTER PLUGGABLE DATABASE PDB1 CLOSE IMMEDIATE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
PDB2 READ WRITE
-- Oluşturulan yeni pdb'i tekrar drop etmek için.
-- PDB kapatılır
SQL> alter pluggable database PDB2 close immediate;
Pluggable database altered.
-- Clone alınana PDB drop edilir.
SQL> drop pluggable database PDB2 including datafiles;
Pluggable database dropped.
-- PDB'ler kontrol edilir.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
Tabi bu işlemlerin tamamını Sql Developer-DBA navigator ekranından fare ile komut yazmadan yapma imkanımız da var. Sql navigator ile artık birçok işlem yapılabiliyor, kurcalamanızı tavsiye ederim.
Bu örnekte Container Database(CDB)'deki bir pluggable database(PDB)'den clone alınarak yine aynı CDB'de başka bir PDB veritabanı oluşturduk.
Çalışmaya başlamadan önce yeterli disk alanı olduğunu kontrol edilmeli.
DB isimleri:
CDB: test12c
PDB: pdb1
Oluşturulacak PDB: pdb2
-- Clone alınacak database'in read-only modda olması gerekiyor. İlk önce pdb'lerin durumlarına bakarız.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
-- Clone alınacak database'in read-only modda açılır.
SQL> alter pluggable database PDB1 close immediate;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 MOUNTED
SQL> alter pluggable database PDB1 open read only;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ ONLY
-- Pluggable database clone alınarak oluşturulur. (datafile isimleri de convert edildi)
CREATE PLUGGABLE DATABASE PDB2 FROM PDB1
STORAGE UNLIMITED
FILE_NAME_CONVERT=(
'/test12c/oradata/test12c/Pdb1/system01.dbf', '/test12c/oradata/test12c/Pdb2/system01.dbf.clone',
'/test12c/oradata/test12c/Pdb1/sysaux01.dbf', '/test12c/oradata/test12c/Pdb2/sysaux01.dbf.clone',
'/test12c/oradata/test12c/Pdb1/SAMPLE_SCHEMA_users01.dbf', '/test12c/oradata/test12c/Pdb2/SAMPLE_SCHEMA_users01.dbf.clone2',
'/test12c/oradata/test12c/Pdb1/example01.dbf', '/test12c/oradata/test12c/Pdb2/example01.dbf.clone',
'/test12c/oradata/test12c/Pdb1/Pdb1_temp01.dbf', '/test12c/oradata/test12c/Pdb2/Pdb2_temp01.dbf.clone'
)
-- PDB'lerin durumlarına bakıldığında yeni oluşturulan pdb'in mount modda olduğunu görürüz. Bu pdb'i(PDB2) açtık.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ ONLY
PDB2 MOUNTED
SQL> alter pluggable database PDB2 open;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ ONLY
PDB2 READ WRITE
-- Yeni oluşturulan pdb'e(PDB2) bağlanarak kontrol ederiz.
SQL> connect system/oracle123@localhost:1538/PDB2
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB2
-- Clone alınan Pdb read-only modda olduğu için bu pdb'i tekrar read-write modda açtık
SQL> ALTER PLUGGABLE DATABASE PDB1 CLOSE IMMEDIATE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
PDB2 READ WRITE
-- Oluşturulan yeni pdb'i tekrar drop etmek için.
-- PDB kapatılır
SQL> alter pluggable database PDB2 close immediate;
Pluggable database altered.
-- Clone alınana PDB drop edilir.
SQL> drop pluggable database PDB2 including datafiles;
Pluggable database dropped.
-- PDB'ler kontrol edilir.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
Tabi bu işlemlerin tamamını Sql Developer-DBA navigator ekranından fare ile komut yazmadan yapma imkanımız da var. Sql navigator ile artık birçok işlem yapılabiliyor, kurcalamanızı tavsiye ederim.
Yorumlar