Ana içeriğe atla

ORACLE12C YENİ ÖZELLİK: Clone Pluggable Database

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.






Yorumlar

Bu blogdaki popüler yayınlar

Materialized View kullanımı ve Fast Refresh için basit bir örnek

Materialized view’lar(MV) genel olarak Data warehouse sistemlerinde kullanılır. Normal view’lar sadece sorguları saklayıp istenildiğinde dataları ilgili tablolardan belirtilen kriterlere göre getirirken, materialized view’larda sorguların yanı sıra bu sorguların sonucunda dönen datalar da tutulur. Yani bir nevi tablo görevi görür. Bunun kullanılma amacı ise; devasa datalara sahip tabloların sadece belirtilen kriterlere uyan datalarını önceden hazırlayıp hızlı bir şekilde sunmak. Materialized view’ların sorguladığı tablolardaki datalar değiştiğinde değişikliklerin bu view’lara yansıması için bu materialized view’ların refresh edilmesi gerekiyor. Birkaç refresh metodu bulunmaktadır ve mv create işleminde belirtilir. COMPLETE ve FAST. Refresh işlemi için DBMS_MVIEW.REFRESH prosedürü kullanılır. Refresh Complete: MV refresh complete yapıldığında mv’ı oluşturan sorgu tekrar çalıştırılır ve gelen dataların tamamı mv’daki dataların yerine geçer. Refresh etmek için DBMS_MVIEW.REFRES...

Veritabanı dosyalarını(datafile) başka bir dizine taşıma

Bu işlem veritabanı kapalıyken veya açıkken yapılabilir. 1 ) Veritabanı Kapalıyken: * Database kapatılır. SQL > shutdown imeediate * Datafile yeni dizine kopyalanır veya move edilir. $ cp /old_location/dbfilename01.dbf /new_location/ Taşımayıp kopyaladıysanız eski lokasyondaki datafile'ı kullanmasını önlemek adına ek önlem için rename edebiliriz. $ mv /old_location/dbfilename01.dbf /old_location/dbfilename01.dbf_OLD * Database mount mode'da açılarak datafile rename edilir. SQL > startup mount SQL > alter database rename file '/old_location/dbfilename01.dbf' to '/new_location/dbfilename01.dbf'; * Database open mode'a alınır. SQL > alter database open; 2 ) Veritabanı Açıkken: Bunu yapabilmek için database'in archive log mode'da olması gerekiyor. Bunu aşağıdaki komutla kontrol edebilirsiniz. SQL> select log_mode from sys.v_$database; LOG_MODE ------------ ARCHIVELOG * Datafile offline'a alınır. SQL> al...

FLASHBACK RECOVERY:

Flashback özelliğinin kullanımı ile ilgili kısa bir örnek yapalım. Bu örnekte test çalışmasında kullanılmak database'in flashback özelliğinin açarak bir restore point yaratıp, testlerin ardından yaratılan restore point'e dönerek database'i test öncesindeki haline getiririz. ilk önce veritabanının flashback için kullanacağı alanı ayarlarız. Aşağıdaki parametrelerden bu alanın ayrılmadığını görebiliriz. SQL> show parameters db_recovery; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string db_recovery_file_dest_size big integer 0 Bu alanı aşağıdaki gibi set edebiliriz. alter system set db_recovery_file_dest_size=2g; alter system set db_recovery_file_dest='/app/oracle/flash_recovery_area'; init .ora dosyasına aşağıdaki satırlar yazılır: *.db_recovery_file_dest='/app/oracle/flash_recovery_area' *.db_recovery_file_dest_s...