12 Ocak 2015 Pazartesi

Oracle 12C Yeni CDB ve PDB Oluşturma

Oracle 12C'de kurulum esnasında bir CDB ve PDB oluşturabildiğimiz gibi kurulumdan sonra da birden çok yöntemle Container Database ve Pluggable Database oluşturabiliriz.

1) Kurulum Esnasında OUI ile;
Bildiğimiz 11gR2 OUI'ından farklı olarak aşağıdaki ekranlar eklenmiş ve burdaki seçenekler yardımıyla multitenant özelliğini kullanıp kullanmayacağımızı belirleyebiliyoruz..Kuruluma başladığımız sırada Create and Configure Database seçimiyle devam ettiysek, database oluşturma adımında bizden bir SID istiyor ve bunu Container Database (CDB) olarak kullanıp kullanmayacağımızı soruyor. Eğer CDB olarak oluşturacaksak, altında bir Pluggable database de oluşturuyoruz..



2) DBCA ile CDB yaratılması
Aynı şekilde komut satırından dbca komutu ile database configuration assistant'ı çalıştırdığımız zamanda OUI'da yarattığımız şekilde CDB ve PDB oluşturuyoruz. Ancak dbca aracı bize database hakkında daha fazla seçenek sunuyor. DBCA'yı çalıştırdıktan sonra create database seçeneğiyle ilerlediğimizde aşağıdaki ekranda database'in özelliklerini belirliyoruz.CDB yada non-CDB bir database oluşturabiliyoruz.


Bunun haricinde advance modu seçtiğimiz zaman ise Oluşturacağımız container Database içinde birden fazla Pluggable database oluşturabiliyoruz.Yine burdan istersek boş bir container Database yaratma seçeneği ile devam edebiliyoruz..


3) CDB'nin Manuel Yaratılması
Oracle tarafından önerilen, bu işlemin DBCA ile  yapılmasıdır. Ancak manuel olarak sqlplus yardımı ile CDB oluşturmak mümkündür..Sqlplusa bağlanıp nomount adımda database'i başlattıktan sonra CREATE DATABASE keywordü ile CDB'yi yaratıyoruz. Burda system,sysaux,temp ve undo tablespaceleri için Datafileları tanımlıyoruz.Daha sonra karakter seti ve log dosyaları set ediliyor.Bunlar zaten şimdiye kadar manuel DB yaratırken kullandığımız parametrelerdi. Non-CDB veritabanı yaratırken yaptığımız işlemlerden farkı ise;
ENABLE PLUGGABLE DATABASE cümlesiyle yaratıığımız database'in bir container DB olduğunu söylüyor ve multitenant özelliğini kazandırıyoruz..

SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool /u01/app/oracle/admin/cdb1/scripts/CreateDB.log append
startup nomount pfile="/u01/app/oracle/admin/cdb1/scripts/init.ora";
CREATE DATABASE "cdb1"
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
DATAFILE '/u01/app/oracle/oradata/cdb1/system01.dbf' SIZE 700M REUSE
  AUTOEXTEND ON NEXT  10240K MAXSIZE UNLIMITED
  EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '/u01/app/oracle/oradata/cdb1/sysaux01.dbf' SIZE 550M REUSE
  AUTOEXTEND ON NEXT  10240K MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/cdb1/temp01.dbf' SIZE 20M REUSE
  AUTOEXTEND ON NEXT  640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE  '/u01/app/oracle/oradata/cdb1/undotbs01.dbf' SIZE 200M REUSE
  AUTOEXTEND ON NEXT  5120K MAXSIZE UNLIMITED
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/cdb1/redo01.log') SIZE 50M,
GROUP 2 ('/u01/app/oracle/oradata/cdb1/redo02.log') SIZE 50M,
GROUP 3 ('/u01/app/oracle/oradata/cdb1/redo03.log') SIZE 50M
USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword"
enable pluggable database
seed file_name_convert=('/u01/app/oracle/oradata/cdb1/system01.dbf','/u01/app/oracle/oradata/cdb1/pdbseed/system01.dbf',
                        '/u01/app/oracle/oradata/cdb1/sysaux01.dbf','/u01/app/oracle/oradata/cdb1/pdbseed/sysaux01.dbf',
                        '/u01/app/oracle/oradata/cdb1/temp01.dbf','/u01/app/oracle/oradata/cdb1/pdbseed/temp01.dbf',
                        '/u01/app/oracle/oradata/cdb1/undotbs01.dbf','/u01/app/oracle/oradata/cdb1/pdbseed/undotbs01.dbf');
spool off

4)DBCA ile PDB oluşturulması
DBCA'yı başlattıktan sonra Seçeneklerden Manage Pluggable database seçeneği ile devam ediyoruz.Aşağıdaki ekran karşımıza çıkıyor.Burda Pluggable database ile alakalı, create, delete, unplug ve configure işlemlerimizi gerçekleştirebiliyoruz.Create PDB seçeneğini seçtikten sonraki ekranda Container Database'lerin bir listesi geliyor ve hangi CDB için PDB yaratacağımızı seçiyoruz. Daha sonra bize iki seçenek sunuyor ya unplug edilmiş bir PDB'yi plug ediyoruz, yada yeni bir PDB oluşturuyoruz.


PDB'nin manuel olarak yaratılması ise create pluggable database cümlesi ile olur..

Yukarıdaki şemada bir PDB'nin yaratılma yöntemleri gözlemlenebilir.Bir PDB yaratırken kopyalama yada plugin yöntemlerinden bir tanesi kullanılır. Kopyalama yönteminde CDB içerisindeki SEED'den dosyalar kopyalanır hazır bir templateden PDB oluşturulur. Yada Database Clone işlemlerinde olduğu gibi uzak bir sunucudan yada lokalde bulunan bir CDB yahut non-CDB'nin klonlanmasıyla PDB oluşturulabilir. Plugging in yönteminde ise başka bir ortamdan unplug edilen bir PDB plug edilebilir yada Non-CDB bir database PDB olarak plug edilir..

PDB$SEED'den Pluggable Database oluşturulması; 
Mimari ile ilgili yazımda (bu linkten ulaşabilirsiniz ) CDB içerisindeki root ve seed kavramlarından bahsederken PDB$SEED için yeni pluggable database'ler oluştururken bu templatedendosyalar kopyalanır demiştik. Yukarıda CDB'nin manuel yaratılması scriptinde seed file'lar içinde lokasyon belirtiliyor dikkat edilirse. Bu sayede rootun yanında PDB$SEED template'i de oluşturulmuş oluyor. CREATE PLUGGABLE DATABASE cümlesiyle oluşturduğumuz PDB, PDB$SEED' deki file'ların kopyalanması yani template yardımıyla oluşturulur.


CREATE PLUGGABLE DATABASE pdbnew ADMIN USER pdb_vy IDENTIFIED BY password FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdbvy/pdbseed/','/u01/app/oracle/oradata/cdbvy/pdbnew/');

Pluggable databaseleri aşağıdaki gibi sorguladığımızda yeni oluşturduğumuz PDB'yi göreceğiz

SELECT pdb_name, status
FROM   dba_pdbs
ORDER BY pdb_name;

PDB_NAME      STATUS
-------------------- -------------
PDB$SEED      NORMAL
PDB1       NORMAL
PDBNEW       NEW

Status NEW olarak geliyor, PDByi açtığımız zaman Status normal olarak değişecektir. PDB'yi read write mode'a çekmek için;

ALTER PLUGGABLE DATABASE pdbnew OPEN READ WRITE;

Bir PDB yada Non-CDB'nin Clone'u yardımıyla Pluggable Database oluşturulması
CREATE PLUGGABLE DATABASE pdb1new from pdbsource;
cümlesiyle bir PDB'den yada Remote non-CDB'den Pluggable database yaratabiliriz. Burda da  mantık olarak source dosyaların yeni bir lokasyona kopyalanması ile PDB yaratılıyor.

Plugging-Unplugging yöntemiyle bir PDB oluşturulması
PDB unplug durumdayken kendi datafilelarının yanında bir de XML metadata dosyası içerir.Bu XML dosyası yardımıyla yeni PDB'yi oluşturuyoruz..
PDB'yi manuel olarak unplug etmek için aşağıdaki komut kullanılır.

ALTER PLUGGABLE DATABASE pdbnew CLOSE;
ALTER PLUGGABLE DATABASE pdbnew UNPLUG INTO '/u01/app/oracle/oradata/cdbvy/pdbnew/pdbnew.xml';

Aşağıdaki komutla PDB'yi unplug edilmiş PDB'den oluşturuyoruz..

CREATE PLUGGABLE DATABASE pdbnew2 USING '/u01/app/oracle/oradata/cdbvy/pdbnew/pdbnew.xml'  FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdbvy/pdbnew/','/u01/app/oracle/oradata/cdbvy/pdbnew2/') ;


Non-CDB'den bir PDB oluşturulması; 
12c üzerine veritabanımızı multinenant özelliklerini kullanmadan oluşturduysak ve sonradan Multinenant yapısına geçmeye karar verdiysek bizim için en uygun seçenek bu olacaktır.
Var olan non-CDB database üzerinde DBMS_PDB.DESCRIBE fonksiyonunu çalıştırıyoruz ve bize bir XML metadata dosyası yaratıyor bu database ile ilgili. Yukarıdaki gibi bu xml dosyasındanPDB'yi oluşturuyoruz.
Başka bir yöntem olarak datapump'ı kullanarak datalarımızı oluşturduğumuz yeni bir PDB içerisine aktarıyoruz.
Veya Goldengate replikasyonu kullanarak bu işlemi yapabiliyoruz..
Bu yöntemlerin dışında PDB oluşturmak- taşımak için SQLdeveloper ve EM 12c'yi de kullanabiliriz.


Pluggable Database'lerin başlatılması;
12C'de Container database'i kapattığımız zaman öncesinde tüm PDB'ler kapatılıyor..Ancak Startup komutunu verdiğimiz zaman sadece container DB açılıyor. PDBler'in açılmasını ise aşağıdaki gibi bir trigger yazarak sağlayabiliriz..


CREATE OR REPLACE TRIGGER open_pdbs 
  AFTER STARTUP ON DATABASE 
BEGIN 
   EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN'; 
END open_pdbs;
/

Kaynaklar:
Oracle Database Concepts 12c Release 1 (12.1)
http://oracle-base.com/articles/12c/multitenant-startup-and-shutdown-cdb-and-pdb-12cr1.php

0 yorum:

Yorum Gönder