ORACLE 12c MULTITENANT ARCHITECTURE

Oracle 12c sürümüyle gelen en önemli yeniliklerden bir tanesi Multitenant mimarisidir. Bu özelliği daha açık bir şekilde açıklarsak Oracle 12c  ile birlikte 1 tane ana veritabanı dediğimiz Container Database (CDB) üzerinde birden fazla Pluggable Database (PDB) dediğimiz veritabanları bulunacak.

Container: schema, obje ve CDB içerisindeki ilişkisel yapılardan oluşur. CDB içerisindeki her container unique bir ID ve isme sahiptir. Container aynı zamanda tenant olarak da adlandırılır. Her CDB aşağıdakilere sahiptir;

  • Root: Oracle-supplied metadata ve common userları tutar. Root container CDB$ROOT olarak adlandırılır ve User datası tutmazlar.
  • Seed PDB: Yeni PDB create etmek için kullanılan templatedir. PDB$SEED olarak adlandırılır. Seed PDBye obje eklenemez ve var olan objeleri değiştirilemez.
  • PDB : Pluggable veritabanlarıdırlar. CDB oluşturulduğunda otomatik olarak oluşturulmaz, kendi gereksinimlerimize göre PDB’ler yaratabiliriz. PDBler application datasını tutmak, datayı farklı bir CDB’ye taşımak amacıyla kullanılabilir.

Aşağıdaki şemada gördüğümüz CDB altında root, seed ve iki adet PDB bulunmaktadır. Her PDB’i kendi uygulamasına hizmet vermektedir. Her PDB’nin kendi administratorı bulunmaktadır. CDB administrator userı herbir PDB’yi yönetebilir. .Fiziksel seviyede bakıldığı zaman CDB önceden var olan non-cdb databaseler gibi bir instance ve databasefile’lara sahiptir. Multitenant yapıda Background processleri, shared memory ve Oracle Metadata, redolog, controlfile ve undo tablespaceleri ortaktır. PDBlerde ise application data ve tablespaceleri, Local user, roller ve local metada tutulur. Her PDB nin kendine sysaux, system ve temp tablespaceleri vardır.

Multitenant Mimarisinin Getirdikleri

  • Kaynakların PDBler arasında paylaşımlı kullanılması maliyeti azaltır.daha az fiziksel sunucu ve daha az yönetim maliyeti ortaya çıkar.
  • PDB’yi unplug edip başka bir CDB altına plug ettiğimiz zaman datanın hızlı bir şekilde taşınmasını sağlamış oluruz. Plug/Ungplug tekniği transportable tablespace mantığına oldukça yakındır.
  • Non-cdb databaseler’de birçok fiziksel database’in yönetimi ve monitorü zorluğunu ortadan kaldırır. Fiziksel dosyaların ortak kullanımı sayesinde yönetimsel olarak daha az enerji harcanmasını sağlar.
  • Tek database’in performans metriclerinin toplanacağı için performans tuning işlemlerini kolaylaştırır.
  • CDB’ye uygulanacak patchler var olan tüm PDB’leri etkileyecektir.

Data Dictionary Architecture

CDB içerisindeki her PDB nin data dicitionary si ayrıdır. Dictionary lerin farklı olması sayesinde her PDB’ nin birbirinden ve roottan bağımsız yönetilmesi sağlanır.

CDB’ de Servis Yaratılması

Bir PDB yarattığımız zaman database otomatik olarak CDB içerisinde bir servis yaratır ve başlatır. PDB ile aynı isme sahip olan bu servis defaultdur ve drop edilemez. Bu PDB için ayrıca servisler de yaratabiliriz.Servis yaratma işlemi non-CDBlerdeki ile aynı şekilde yapılmaktadır.

CDB administrator CBD altındaki herhangi bir container’a bağlanabilir. Containerlar arasında geçiş yapmak için ise aşağıdaki komut kullanılır.

ALTER SESSION SET CONTAINER = ContainerName;

SQL plus ile databaseimize bağlandığımız zaman default olarak root a bağlanıyor.

SQL> SHOW CON_NAME

CON_NAME
------------------------------
CDB$ROOT

Servisleri sorgulamak için;

SQL> SELECT NAME, PDB FROM V$SERVICES
ORDER BY PDB, NAME;    

NAME                         PDB
---------------------------------------------------------------- ------------------------------
SYS$BACKGROUND            CDB$ROOT
SYS$USERS                 CDB$ROOT
cdb1                      CDB$ROOT
cdb1XDB                   CDB$ROOT
pdborcl                    PDBORCL

Şu an CDB üzerindeki containerları görmek için aşağıdaki sorguyu kullanabiliriz.

SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;

CDB’de Common Users Ve Local Users

CDB üzerinde yaratılan common userlar root dahil tüm PDB’lere bağlanabilir ve işlemler yapabilir. Örneğin SYS ve SYSTEM oracle-supplied common userlardır. .User created common userlar C## veya c## ile başlayan isimlere sahip olmalıdır. Aşağıdaki şemada hrpdb ve salespdb pluggable databaseleri bulunmaktadır, SYS ve c##dba common userlardır.hr ve rep userları ise iki PDB’de de local user olarak bulunmaktadırlar.

CDB$ROOT c##dba ile ilgili görsel sonucu

Common user root dahil create session privilegine sahip olduğu tüm containerlara login olabilir. Common user her container için aynı haklara sahip olmak zorunda değildir. Örneğin hrpdb ve roota bağlanabilirken, salespdb için create session hakkı vermeyebiliriz.

Unique ve c## yada C## ile başlayan bir isme sahip olmalıdır. Root içinde bulunur fakat tüm PDB lere aynı kimlikle bağlanır.

Local User : yalnızca yaratıldığı  PDB için operasyonları gerçekleştirebilecek user lardır. PDB altında kendi şemasına sahiptir. Başka bir PDB yada roota login olamaz. Local user rootda yaratılamaz. Yaratıldığı PDB içerisinde unique bir ismi olmalıdır.

Common Roller  ve Local Roller

Common Roles oracle-supplied yada user created roller olabilirler. DBA ve Public gibi oracle-supplied rollerin hepsi common roldür. User created roller common userda olduğu gibi c## yada C## ile başlamak zorundadır.  Common role yaratabilmek için common user create role yetkisine ve e SET CONTAINER hakkında sahip olmalıdır. CREATE ROLE statementında CONTAINER=ALL olarak set edilir ve common role yaratılmış olur.

Local Roller ise yaratıldıkları PDB içerisinde geçerlidirler. Yine local userlarda olduğu gibi aynı isme sahip roller farklı PDB ler altında yaratılabilirler.

Grant işlemleri ise non-CDBlerde olduğu gibi yapılır. Aradaki temel fark ise; local ve common durumudur. Localde bir yetkilendirme yapılacaksa CONTAINER=CURRENT, common bir yetkilendirme işlemi yapılacaksa CONTAINER=ALL opsiyonuyla yapılır.

CDB’de Database Dosyları

Fiziksel olarak bakıldığı zaman, her pluggable database kendi tablespace ve data dosyalarına sahiptir. Redolog files, Undo tablespace ve control file ise ortaktır. Default olarak CDB içerisinde temp file bulunur ve PDB’ler bunu kullanır. Ancak ihtiyac durumunda local bir temp file yaratılarak ilgili PDB’nin onu kullanması sağlanılabilir. Her PDB kendi SYSTEM ve SYSAUX tablespaceine sahiptir.


Kaynak

http://yukselveysel.blogspot.com/2015/01/oracle-12c-multitanent-mimarisi.html