Oracle12c Pluggable Database Hands On - TROUG 2014
Yeni başlayanlar i̇çin Oracle 12c
1. Yeni Başlayanlar İçin Oracle 12c
Her ne kadar yayınlanma süresi üzerinden epey bir zaman geçmiş olsa da Oracle 12c olarak
kullanımında olan sistem sayısı pek fazla değildir. Bunun sebebi olarak alışkanlıklar, işleyen sistemde
yeni bir yapıya geçmeme isteği, mali konular vb… sebepler olsa da Oracle12c biz veritabanı yöneticileri
için gelen yeni özellikler ile kullanıma hazır bir şekilde bizleri beklemektedir.
Bu yazıda yeni başlayanlar için Oracle 12c hakkında temel bilgiler ve ufak örneklerle kafalarındaki soru
işaretlerine ışık tutmaya çalışacağım.
Oracle 12c Nedir ?
Oracle’ın bu zamana kadar olan gelişim hikayesinide Oracle 9i ile gelen RAC özelliğini kendimize
başlangıç noktası olarak alabiliriz. Sonrasın 10g ile gelen Grid Computing ile bize farklı noktalardaki
hardware ve storage’leri kullanarak düşük maliyet hedeflenmesi ve 11g ile bu özelliklerin yönetim
kısmında yapılan değişiklikleriyle veritabanı yöneticilerinin elinibiraz daha rahatladı. Ancak Oracle 12c
ile Cloud yapısına geçerek hem mimari hem de mantıksal olarak yeni bir ürün olarak karşımıza çıktı.
Artık karşımızda tek instance üzerinde birden fazla veritabanı yönetebildiğimiz ve bunları rahatlıkla
taşıyabildiğimiz bir yapı sunuldu.
Bu yapının içinde bize yabancı farklı kavramlarda yer aldı. Bunları inceleyecek olursak ;
CDB : Container Veritabanı (Super Database). Sistemin çalışmasında en altta yer alan ana veri tabanı
olarak nitelendirebiliriz.
PDB : Pluggable Veritabanı (Sub Database). Sistemde üzerinde günlük OLTP olarak canlı veya standby
olarak kullandığımız veritabanları. Taşınabilir özelliğine sahiptir.
Oracle white paperlarda bu kavramları anlatırken birden fazla veritabanının tek bir super database
(multitenant container database) içinde yer alması olarak tanımlamakta.
NON-PDB : Oracle 12c içinde taşınabilir özellikte olmayan veri tabanlarıdır.
PDB$SEED : Container Veritabanı üzerinde Pluggable Veritabanlarının kurulum aşamasında şablon
olarak kullanılan yapıdır.
Container Database :
Super Database olarak adlandırdığımız ve içinde farklı veritabanlarını barındıran sistemdir. İlk bakışta
bakacağımız temel farklılıklar aşağıdaki gibidir.
• ROOT yapısı altında ‘Oracle System Metada’ ve işlemlerinin yapıldığı alandır.
• ‘Common Users’ yani kullnıcı yönetiminin yapıldığı alandır.
• Instance mantığında memory ve proses yönetiminin yapıldığı alandır.
• 1’den 255’ e kadar olan PDB’leri tutabileceğimiz Ana veritabanımızdır.
• PDB’ler üzerinde yönetimi sağlayacak ve hakları verebileceğimiz alandır.
2. CDB$ROOT / Root Dosyaları
Oracle Container yapının altında CDB$ROOT olarak adlandırılan ve içinde veritabanı dosyalarının yer
aldığı bir yapı mevcuttur.
Buradaki en büyük yenilikler ise ;
- Oracle 12c’de mevcut PDB’lerin ortak CF ve REDOLOGları kullanmasıdır.
- Bu alan içinde Flashback Logs , Archive Log yer almaktadır.
- Pluggable veritabanlarına ait System, SYSAUX, Users, Tempfiles, Undo yer almaktadır.
Pluggable Database (PDB)
Oracle 12c ile gelen yapı değişikliğinin en temel taşıdır diyebiliriz. Artık veri tabanlarımızı başka bir
yapıya rahatlıkla taşıyabilir, isteğimiz gibi sayısını arttırabiliriz. Bu yapıya ait olan ve yönetiminde olan
bileşenler şöyledir.
- Uygulamaya ait ve TEMP (sadece kendi içinde kullanmak için) Tablespaceleri
- PDB kullanıcılar ve hakları
- PDB Sistem Metadatası
- Çalışan uygulamanın verileri
- Resource Plan
Kullanıcılar ve Roller
SYSTEM SYSAUX
Users
Temp
OBJ$
Resource
PlanLocal
Privilege
Common
Local
Common
Users
Local
Users
3. Oracle 12c’ye ait olan kullanıcıları ve bu kullanıcılara ait hakları Container veritabanı ve Pluggable
veritabanı olarak ayrı ayrı incelemeliyiz.
- Container Veritabanı :
Yazının başında da yer aldığı üzere sistemin temelinde yer alan bu yapı diğer veri tabanlarındaki
kullanıcı ve haklarını düzenlemekle de yetkilidir. Bu yapıdaki kullanıcılar “Common Users” olarak
geçmektedir. Bu kullanıcıların özelliklerini inceleyecek olursak ;
Kullanıcılar Root Container’dan yönetilir
Her kullanıcı C## ön adıyla başlamak zorundadır.
Container üzerindeki her kullanıcı Pluggable içinde geçerlidir.
Tekil kullanıcılardır.
Komut satırında kullanıcı oluştururken CONTAINER=ALL parametresi ile yetkilendirme
yapabiliriz.
Container veri tabanı üzerinde bulunan roller ise “Common Role” olarak adlandırılmaktadır. Bu yapıyı
incelersek;
Root Container’dan yönetilir
CREATE ROLE – SET CONTAINER parameteleri kullanılır
C## ön adıyla başlamak zorundadır.
- Pluggable Veritabanı :
Bu yapıyı Oracle 12c öncesinde yer alan veritabanı mantığı olarak düşünebiliriz. Kullanıcılarımız da bu
mantıkda sadece kullanıldığı veritabanı üzerinde yetkilendirilip oluşturulabilir. Temel olarak
özelliklerini inceleyecek olursak;
Pre – Oracle 12c
Pluggable kullanıcısıdır
Aynı isimde farklı Pluggable veri tabanları üzerinde olabilir.
Pluggable veri tabanı üzerinde bulunan roller ise “Local Role” olarak adlandırılmaktadır. Bu yapıyı
incelersek;
Pluggable veri tabanından yönetilir.
CREATE ROLE syntax’ı kullanırız
Oluşturulduğu Pluggable veri tabanı üzerinde geçerlidir.
4. Yukarıdaki akışı izleyecek olursak kullanıcılar konusu hakkında bizlere açıklayıcı olacaktır. Şeklin sol
tarafında yer alan SYS ve C##DBA kullanıcılarımız CDB$ROOT üzerinden yönetilmekte olup Container
yapı üzerinde yer alan bütün Pluggable veritabanlarında işlem yapabilmektedir. Diğer taraftan
Container üzerinde bulunan pdbtst1 ve pdbts2 Pluggable veritabanları kendi içerisinde HR ve NAT
kullanıcıları bulundurmaktadır. Ancak aynı isimde olan kullanıcılar sadece kendi veri tabanlarında işlem
yapabilmektedir.
Komut satırında kullanıcı oluşturma ve haklarını inceleyecek olursak ;
Create user c##dba identified by test1 container=ALL;
Grant create session to c##dba container=ALL;
Grant select any table to c##dba container=ALL;
Pluggable veri tabanlarına bağlanırken kullanım aşağıdaki gibidir;
sqlplus sys/*******@pdbtst1 as sysdba;
sqlplus sys/*******@pdbtst2 as sysdba;
Pluggable Veritabanı Oluşturma
Sistemde kullanacağımız Pluggable veritabnalarını Container yapısı üzerinde oluşturalım. Bu oluşturma
işleminde farklı yöntemlerle Pluggable veri tabanı oluşturabiliriz. İşlemlerin öncesinde ;
- CBD$ROOT’da olmamız gerektiğinden nerede olduğumuzu kontrol edelim
SQL> show con_name
CON_NAME
CDB$ROOT
- v$database’i de sorgulayarak açılış modumuzu görelim.
NOT: CDB her zaman READ-WRITE modda olur PDB$SEED her zaman READ ONLY modda yer alır.
1. FILE_NAME_CONVERT olmadan PDB oluşturma
Bu yöntemde mevcuttaki şablona ait olarak Container veri tabanının kendi içinde oluşturacağı dizin
yapısı kullanılarak gerekli oluşturma yapılır.
CREATE PLUGGABLE DATABASE PDBTST1 ADMIN USER PDBTST1_ADMIN IDENTIFIED BY
oracle ROLES = (connect,resource);
*** Bu konutun öncesinde bağlandığımız session için pdb_file_name_convert parametresini set
ederiz.
alter session set pdb_file_name_convert='pdb',' PDBTST1';
NOT: Create komutu sonrasında alert.log’da şöyle bir bilgi görünecektir. Unusable ve NEW modunda
oluşturulmuştur.
5. 2. FILE_NAME_CONVERT ile PDB oluşturma
Oluşturacağımız veritabanını FILE_NAME_CONVERT parametresini kullanarak kendi belirleyeceğimiz
dizin içinde oluşturma imkanı sağlayacaktır.
CREATE PLUGGABLE DATABASE PDBTST1
ADMIN USER PDBTST1_ADMIN IDENTIFIED BY oracle
FILE_NAME_CONVERT = ('/disk2/app/oracle/oradata/orcl/pdbseed','/disk2/dbf');
Son olarak Container veri tabanı üzerinde bulunan Pluggable veri tabanlarının durumuna bakalım.
SQL> SELECT name,open_mode FROM v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDBTST1 NEW
Veritabanı Açılış – Kapanış Modları
Oracle 12c ile veri tabanlarının yönetimsel olarak farklılıklarından da bir tanesi de veri tabanı açma
kapama işlemlerindedir. Temel olarak Container veri tabanında diğer Pluggable veri tabanlarına ait
açma kapama işlemlerini de yapabiliriz. Bu modları inceleyecek olursak ;
- Veri Tabanı Açma İşlemleri
Container Veri tabanı üzerinde aşağıdaki komutlarla bir veya birden fazla veri tabanını açabiliriz.
ALTER PLUGGABLE DATABASE pdbtst1 OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN;
Açılan veri tabanlarının kontrolü için ;
SQL> SELECT name,open_mode FROM v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDBORCL READ WRITE
PDBTST1 READ WRITE
6. Container veri tabanını açmak istediğimizde ise normal bir veri tabanında yaptığımız komutlar yeterli
olacaktır;
SQL> ALTER DATABASE OPEN;
SQL> STARTUP
- MOUNT – SHUTDOWN İşlemleri
Açma işlemlerinin mantığı kapatma işlemlerinde de geçerlidir. Container veri tabanları için ise normal
bir veri tabanında yaptığımız komutlar kullanılabilir.
SQL> ALTER DATABASE MOUNT;
SQL> STARTUP MOUNT
Kapatma işleminde açma işleminde olduğu gibi Container veri tabanında da aynı mantık geçerlidir.
Kısacası Container üzerinde işlemler yapabiliriz.
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE;
ALTER PLUGGABLE DATABASE ALL CLOSE;
ALTER PLUGGABLE DATABASE CLOSE;
SHUTDOWN IMMEDIATE ;
Son olarak yine Container üzerinde Pluggable veri tabanlarını sorgulayabiliriz.
SQL> SELECT name,open_mode FROM v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDBORCL READ WRITE
PDBTST1 MOUNTED
Özgür Umut VURGUN
Ocak,2014