The document provides an agenda and overview for a hands-on workshop on Oracle 12c pluggable databases. The agenda includes topics on Oracle history, container databases, pluggable databases, new users and privileges in Oracle 12c, and several hands-on labs for activities like dropping/unplugging pluggable databases, plugging/cloning pluggable databases from remote container databases using database links, and moving a non-container database to a container database using Data Pump transportable export/import. Slides accompany the topics and provide additional technical details on concepts like container databases, pluggable databases, and the new user and role architecture in Oracle 12c.
4. Pre - Oracle 12c
Oracle 12c öncesi veritabanı yapısını inceleyecek olursak …
- Background Proses çokluğu
- Yüksek memory paylaşımı
- Birden çok Oracle Medata zorunluluğu
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
5. Oracle 12c Pluggable Database
Container Database (CDB)
Birden fazla veri tabanının çalıştığı ana yapı.
Pluggable Database (PDB)
Taşınabilir özelliği olan ve normal işlemlerin yürütüldüğü veri tabanları
Non Container Database
Oracle 12c yapısı dışında kullanılan veri tabanları
PDB$SEED
Container DB üzerinde bulunan template PDB
User & Grants
CDB ve PDB üzerinde yeni kullanıcılar. Common Role &Users , Local
Role & Users
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
6. Container Database (CDB)
• ROOT yapısı altında ‘Oracle System Metada’ ve ve işlemlerinin yapıldığı alandır.
• Oracle Metadata
• ‘Common Users’ yönetiminin yapıldığı
• Instance mantığında memory ve proses yönetiminin yapıldığı alandır.
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
7. CDB$ROOT / Root Files
•
SYSTEM – SYSAUX - UNDO ve USERS tablespace’leri
•
Oracle Sistem Medata
•
Redolog
•
Default temp
•
PLSQL shared package(dbms_sql)
[oracle@test1 scripts]$ sqlplus / as sysdba
SQL> @tablespace
CON_ID Status
Name
Type
Size (M)
---------- ----- ------------------------------ --------------------- -------------1
ONLINE SYSTEM
PERMANENT
790.000
1
ONLINE SYSAUX
PERMANENT 1,470.000
1
ONLINE UNDOTBS1 UNDO
250.000
1
ONLINE USERS
PERMANENT
5.000
2
ONLINE SYSTEM
PERMANENT
250.000
2
ONLINE SYSAUX
PERMANENT
590.000
5
ONLINE ABYS_DATA PERMANENT
161.250
5
ONLINE SYSAUX
PERMANENT
820.000
5
ONLINE USERS
PERMANENT
38.750
5
ONLINE SYSTEM
PERMANENT
440.000
[oracle@test1 scripts]$ sqlplus sys/Oracle3@abys as sysdba
SQL> @tablespace
CON_ID Status
Name
Type
Extent Man
Size (M)
---------- --------- ------------------------------ --------- ---------- -------------5 ONLINE USERS
PERMANENT
38.750
5 ONLINE ABYS_DATA PERMANENT
161.250
5 ONLINE TEMP
TEMPORARY
506.000
5 ONLINE SYSTEM
PERMANENT
440.000
5 ONLINE SYSAUX
PERMANENT
820.000
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
8. Pluggable Database (PDB)
Common Role
Local
Privilege
Local Role
SYSTEM
SYSTEM
Common
Users
OBJ$
Local
Users
SYSAUX
SYSAUX
Users
Users
Resource
Plan
Temp
Temp
•
Application Tablespace
•
PDB Sistem Metadata
•
TEMP (lokal)
•
Application Verisi
•
Kullanıcılar ve Hakları
•
Resource Plan
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
11. Users and Roles
PDB
CDB$ROOT
Common Users
Local Users
Local Users
Root Container’dan yönetilir
C## ön adıyla başlamak zorundadır.
Pre – Oracle 12c
CDB üzerindeki her PDB’de geçerlidir.
PDB User
Unique User
Multiple User
CONTAINER=ALL
Common
Common
Role
Role
Local
Role
Root Container’dan yönetilir
PDB’den yönetilir.
CREATE ROLE – SET CONTAINER
CREATE ROLE
C## ön adıyla başlamak zorundadır.
Oluşturulduğu PDB üzerinde
geçerlidir.
CONTAINER=ALL ile kullanılır.
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
13. CREATE PDBs
1. FILE_NAME_CONVERT olmadan PDB oluşturma
SQL> CREATE PLUGGABLE DATABASE PDBTST1
ADMIN USER PDBTST1_ADMIN IDENTIFIED BY oracle
ROLES = (connect,resource);
Pluggable database created.
**** alter session set pdb_file_name_convert='pdb','pdb_test';
2. FILE_NAME_CONVERT ile PDB oluşturma
CREATE PLUGGABLE DATABASE PDBTST1
ADMIN USER PDBTST1_ADMIN IDENTIFIED BY oracle
FILE_NAME_CONVERT =
('/disk2/app/oracle/oradata/orcl/pdbseed',
'/disk2/dbf');
SQL> select NAME, OPEN_MODE, CON_ID from V$PDBS;
NAME
OPEN_MODE
CON_ID
PDB$SEED
READ ONLY
2
PDBORCL
MOUNTED
3
PDBTST1
MOUNTED
7
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
14. PDB Open / Close
PDB OPEN
PDB OPEN
OPEN
OPEN
ALTER PLUGGABLE DATABASE pdbtst1
OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER DATABASE OPEN;
STARTUP
SQL> alter pluggable database all open;
SQL> alter pluggable database all open;
Pluggable databases opened.
Pluggable databases opened.
SQL> SELECT name,open_mode FROM v$pdbs;
SQL> SELECT name,open_mode FROM v$pdbs;
NAME
OPEN_MODE
NAME
OPEN_MODE
------------------------------ --------------------------------------- ---------PDB$SEED
READ ONLY
PDB$SEED
READ ONLY
PDBORCL
READ WRITE
PDBORCL
READ WRITE
PDBTST1
READ WRITE
PDBTST1
READ WRITE
SQL> startup
SQL> startup
ORACLE instance started.
ORACLE instance started.
Database opened.
Database opened.
MOUNT
MOUNT
NOMOUNT
NOMOUNT
SHUTDOWN
SHUTDOWN
ALTER DATABASE MOUNT;
STARTUP MOUNT
SQL> SELECT name,open_mode FROM v$pdbs;
SQL> SELECT name,open_mode FROM v$pdbs;
NAME
OPEN_MODE
NAME
OPEN_MODE
------------------------------ --------------------------------------- ---------PDB$SEED
READ ONLY
PDB$SEED
READ ONLY
PDBORCL
MOUNTED
PDBORCL
MOUNTED
PDBTST1
MOUNTED
PDBTST1
MOUNTED
STARTUP NOMOUNT
SQL> alter database mount;
SQL> alter database mount;
Database altered.
Database altered.
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE;
ALTER PLUGGABLE DATABASE ALL CLOSE;
ALTER PLUGGABLE DATABASE CLOSE;
SHUTDOWN IMMEDIATE
TROUG Ankara Bulusmasi
16 Ocak 2014
SQL> SELECT name,open_mode FROM v$pdbs;
SQL> SELECT name,open_mode FROM v$pdbs;
NAME
OPEN_MODE
NAME
OPEN_MODE
------------------------------ --------------------------------------- ---------PDB$SEED
MOUNTED
PDB$SEED
MOUNTED
PDBORCL
MOUNTED
PDBORCL
MOUNTED
PDBTST1
MOUNTED
PDBTST1
MOUNTED
www.ozgurumutvurgun.com
15. Lab1: UNPLUG / DROP PDBs
1
CLOSE PDB
ALTER PLUGGABLE DATABASE PDBORCL CLOSE;
SQL> SELECT name,open_mode FROM v$pdbs;
NAME
OPEN_MODE
PDB$SEED
READ ONLY
PDBORCL
MOUNT
PDBTST1
READ WRITE
ROOT
ROOT
2
UNPLUG PDB
ALTER PLUGGABLE DATABASE PDBORCL UNPLUG INTO
'/DISK2/SETUP_FILES/PDBORCL.XML';
SQL> SELECT name,open_mode FROM v$pdbs;
NAME
OPEN_MODE
PDB$SEED
READ ONLY
PDBTST1
READ WRITE
ROOT
ROOT
3
DROP PDB
DROP PLUGGABLE DATABASE PDBORCL;
DBF
DBF
ROOT
ROOT
XML
XML
DROP PLUGGABLE DATABASE PDBORCL KEEP DATAFILES;
DROP PLUGGABLE DATABASE PDBORCL INCLUDING DATAFILES
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
16. Lab2 : PLUG / Clone PDB
1
XML
XML
PLUG PDB
CREATE PLUGGABLE DATABASE PDBORCL
USING '/disk2/setup_files/pdborcl.xml‘
FILE_NAME_CONVERT=(…………………………);
CREATE PLUGGABLE DATABASE PDBORCL USING
'/disk2/setup_files/pdborcl.xml'
NOCOPY || COPY || MOVE TEMPFILE REUSE;
ROOT
ROOT
SQL> SELECT name,open_mode FROM v$pdbs;
NAME
OPEN_MODE
PDB$SEED
READ ONLY
PDBORCL
MOUNTED
TST1
READ WRITE
2
CLONE PDB
ALTER PLUGGABLE DATABASE TST07 OPEN READ ONLY;
CREATE PLUGGABLE DATABASE TST08 FROM TST07
FILE_NAME_CONVERT=(……………);
ALTER PLUGGABLE DATABASE TST07 OPEN READ WRITE;
ALTER PLUGGABLE DATABASE TST08 OPEN READ WRITE;
TROUG Ankara Bulusmasi
16 Ocak 2014
ROOT
ROOT
www.ozgurumutvurgun.com
17. Lab 3 : CLONE PDB FROM REMOTE CDB
1
Create PDB CDB to CDB
XML ve DBF -> Target OS
XML ve DBF -> Target OS
scp -r * oracle@192.168.4.61:/disk2/setup_files/datafiles
CDB’de PDB’lerin kontrolü
CDB’de PDB’lerin kontrolü
ROOT
ROOT
SQL> select pdb_name, status from CDB_PDBS;
PDB_NAME
STATUS
PDB$SEED
NORMAL
PDB01
NORMAL
PDB05
NORMAL
PDB Oluşturalım
PDB Oluşturalım
CDBIST
create pluggable database PDBCDR using
'/disk2/setup_files/ pdborcl.xml'
source_file_name_convert (‘……, ……')
nocopy tempfile reuse;
Oluşan PDB’in durumu
Oluşan PDB’in durumu
ROOT
ROOT
CDBANK
SQL> select pdb_name, status from CDB_PDBS;
PDB_NAME
STATUS
PDB$SEED
NORMAL
PDBTST1
NORMAL
PDBCDR
UNPLUG
SQL> select name, open_mode from V$PDBS;
NAME
OPEN_MODE
PDB$SEED
READ ONLY
PDBCDR
MOUNTED
PDBTST1
READ WRITE
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
18. Lab 4 : CLONE PDB FROM REMOTE CDB with DB LINK
4
Create PDB CDB to CDB
PDB Read Only
PDB Read Only
SQL> alter pluggable database PDBCDR close immediate;
SQL> alter pluggable database PDBCDR open read only;
ROOT
ROOT
CDBIST
DB Link
DB Link
create database link pdbcdr _lnk connect to SYSTEM identified
by Oracle3 using '192.168.4.61:1521/pdbcdr';
DB Link
PDB Oluşturma
PDB Oluşturma
create pluggable database pdbcdr _rmt from pdbcdr @ pdbcdr _lnk
file_name_convert=('/disk2/app/oracle/oradata/orcl/','/disk2/app/oracle/o
radata/orcl/remotedb');
ROOT
ROOT
CDBANK
SQL> select name, open_mode from V$PDBS;
NAME
OPEN_MODE
PDB$SEED
READ ONLY
PDBCDR
MOUNTED
PDBTST1
READ WRITE
* BUG 15931910
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
19. Lab 5 : Move Non CDB to CDB
Bu yöntemi uygulamak için ;
**** Non CDB veritabanı 11.2.0.3 olmak zorunda
OS : Windows 7 32bit
DB : Oracle 11.2.0.3
**** Compatible Parametresi = 11.2.0.3
ABYS
ABYSDB
ABYSDB
**** Karakter setleri aynı olmalı
1. Tablespace Read Only
Alter tablespace ABYS read only;
Alter tablespace USERS read only;
2. Non CDB, Data Pump Transportable Export
DMP
Dosyası
expdp 'sys/Oracle3 as sysdba' full=y
job_name=EXPORT_CDRDB dumpfile=abysdbdb.dmp
DIRECTORY=EXP_DATA_PUMP_DIR
LOGFILE=exp_abysdb.log
VERSION=12 transportable=always
CDBANK
OS : Centos Linux 64bit
DB : Oracle 12.1.0.1
3. RMAN Backup DBF
rman target /
Run {
CONVERT DATAFILE
'D:APP197278ORADATAORCLABYS.DBF'
DB_FILE_NAME_CONVERT="D:APP197278ORADATAORC
LABYS.DBF",
"D:orabkupABYS.DBF" …………………..
TROUG Ankara Bulusmasi
16 Ocak 2014
ROOT
ROOT
www.ozgurumutvurgun.com
20. Lab 5 : Move Non CDB to CDB
OS : Windows 7 32bit
DB : Oracle 11.2.0.3
4. Dosyaların Transferi
FTP ile kopyalama
ABYS
ABYSDB
ABYSDB
*** $scp –r exp_files oracle@test2:/disk2/backup
5. Pluggable DB Oluşturma
DMP
Dosyası
CREATE PLUGGABLE DATABASE abys
ADMIN USER admin IDENTIFIED BY abys
ROLES = (connect,resource);
Alter pluggable database ABYS open read write ;
6. Restore Datafiles
run
{
CONVERT DATAFILE '/disk2/exp/ABYS.dbf'
DB_FILE_NAME_CONVERT="/disk2/exp/import/ABYS.dbf",
"/disk2/app/oracle/oradata/orcl/abys_a/ABYS.dbf"
FORMAT='/disk2/app/oracle/oradata/orcl/abys_a/ABYS.dbf';
……………………..
CDBANK
OS : Centos Linux 64bit
DB : Oracle 12.1.0.1
ROOT
ROOT
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
21. Lab 5: Move Non CDB to CDB
7. Import
impdp 'sys/Oracle3@abyspdb AS SYSDBA' full=y
DIRECTORY=IMP_DATA_PUMP_DIR
dumpfile=DATAPUMP_DEV2DB.DMP LOGFILE=imp_abys.log
VERSION=12 TRANSPORT_DATAFILES=USERS01.DBF_2
job_name=imp_ABYSdb parallel=2
REMAP_TABLESPACE='ABYS':'ABYS_DATA'
ABYS
OS : Windows 7 32bit
DB : Oracle 11.2.0.3
ABYSDB
ABYSDB
8. PDB Status
SQL> select CON_ID, NAME, OPEN_MODE from V$PDBS;
CON_ID NAME
2
PDB$SEED
4
ABYS
DMP
Dosyası
OPEN_MODE
READ ONLY
READ WRITE
CDBANK
OS : Centos Linux 64bit
DB : Oracle 12.1.0.1
9. Tablo Kontrolü
[oracle@test1]$ sqlplus / as sysdba
SQL > conn sys/Oracle3@abysdb as sysdba
Connectted.
SQL> select count(*) from abys.abone;
COUNT(*)
6597
ROOT
ROOT
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
22. Teşekkürler
Özgür Umut Vurgun
Bilgisayar Mühendisi
Oracle 10g OCA/OCP
ozgurumutvurgun@gmail.com
www.ozgurumutvurgun.com
www.turkceoracle.com
TROUG Ankara Bulusmasi
16 Ocak 2014
www.ozgurumutvurgun.com
Notes de l'éditeur
Bu zamana kadar geliş hikayemize bakacak olursak
Oracle 9i ile gelen RAC özelliğini kendimize başlangıç noktası olarak alabiliriz. Availability ön planda tutuldu ve RAC ile bu sorun gideilmiş oldu.
Sonrasın 10g ile gelen Grid Computing ile bize farklı noktalardaki hardware ve storage’leri kullanarak düşük maliyet hedeflendi.
11g ile bu özelliklerin yönetim kısmında yapılan değişikliklerle elimiz biraz daha rahatladı.
12c ile Cloud yapısına geçerek hem mimari hemde mantık olarak yeni bir ürün olarak karşımıza çıktı.
Oracle 11 g işleyişini ufak bi hatırlarsak önümüze Her DB için ayrı prosesler , Memory paylaşımı ve bunun kullanımda olabilecek sıkıntılar ve birden çok metadata zorunluluğumuz.
Oracle 12c ile gelen ve sıkça adını duyacağımız iki kavram var.
CDB : Container Veritabanı.
PDB : Pluggable Veritabanı .
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.
Burada CDB super database, PDB (sub database)
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.
Oracle 12c’de olan en büyük değişiklik mevcut PDB’lerin ortak CF ve REDOLOGları kullanmasıdır.
Oracle CDB içindeki bu alanda CF – RedoLog – Flashback Logs – Archive Log
PDB’ye System,SYSAUX,Users,Tempfiles,Undo yer almaktadır.
SGA Ortak, CF,REDO Ortak
Diğer Oracle verisyonlarından farkl olarak bu arayüzde CDB ve PDB yapılarını kurabileceğimiz ekranlar mevcut. Farklı olan ekranları görmektesiniz.
Container ALL ROOT’da verilmektedir.. Bu parametre verilmediğinde default container üzerinde çalışacaktır.
Eğer hakları bununla vermezsek PDB’ler üzerinde de bu kullanıcılara hak tanımalıyız.
İlk olarak CBD$ROOT’da olamamız gerektiğinden nerede olduğumuzu kontrol edelim.
Show con_name ile bunu kontrol edebiliriz.
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.
Create komutu sonrasında alert.log’da şöyle bir bilgi görünecektir. Unusable ve NEW olarak
Shutdown : CDB ve üzerindeki her db kapandı.
NOMOUNT : Instance başladı
MOUNT : CDB CF açıldı instance için , ROOT ve PDB’ler MOUNT modda açılır
OPEN : ROOT açıldı . PDB’ler MOUNT modda ancak seed READ ONLY
PDB OPEN : PDB Read Write açılır Seed Read Only.
DROP komutunu vermek için PDB’nin kapalı olması gereklidir.
1- PDB oluşturldu ve MOUNT modda açıldı.
Eğer oluşturulan geçici dosyalara ve yeniden oluşan temp dosyalara ihtiyacımız yoksa 2.adımı yaparız.
2. CLONE PDB
Aynı CDB içinde olan PDB’den bir tane daha PDB oluşturacağız. Bunun için CDB’de tanımlı olan PDB’nin READ ONLY modda olması gerekmektedir.
Farklı makinalarda ve lokasyonlarda bulunan PDB’yi kendi CDB’imize taşıyacağız.
İki slayt öncesinde XML ve DBFleri almıştık. Burada aldığımız bu dosyaları DB’yi taşıyacağımız OS’a kopyalarız.
- CDB üzerinde bulunan PDB’lerin durumunu kontrol edelim
İki CDB arasında oluşturacağımız DBLINK yaratılarak PDB taşıması yapılabilir.
Burada soruce tarafında olan PDB READ ONLY olmak zorundadır.
Yarattığımız link üzerinden işlemi gerçekleştiririz. Ancak bu beklenen sonuç olacaktır.
Burada Oracle 12.1’de karşımıza Bug çıkacaktır. ORA-00922: missing or invalid option alırız.
Bunu da bug 15931910 ile düzeltebiliriz.
Şuana kadar ki bütün örnekler aynı OS ve DB versiyonları üzerinde yapılan işlemlerdi.
Container DB yapısında olmayan bir DB (Oracle 11.2.0.3) CDB yapısına taşımak istiyoruz.
Bunun içinde Oracle öcelikli olarak sistemlerimizde kontrol etmemiz gereken adımlar var.
DB’yi taşıma yöntemimiz ise Data Pump Transportable Tablaspace Export / Import yapacağız.
Şuana kadar ki bütün örnekler aynı OS ve DB versiyonları üzerinde yapılan işlemlerdi.
Container DB yapısında olmayan bir DB (Oracle 11.2.0.3) CDB yapısına taşımak istiyoruz.
Bunun içinde Oracle öcelikli olarak sistemlerimizde kontrol etmemiz gereken adımlar var.
DB’yi taşıma yöntemimiz ise Data Pump Transportable Tablaspace Export / Import yapacağız.
Şuana kadar ki bütün örnekler aynı OS ve DB versiyonları üzerinde yapılan işlemlerdi.
Container DB yapısında olmayan bir DB (Oracle 11.2.0.3) CDB yapısına taşımak istiyoruz.
Bunun içinde Oracle öcelikli olarak sistemlerimizde kontrol etmemiz gereken adımlar var.
DB’yi taşıma yöntemimiz ise Data Pump Transportable Tablaspace Export / Import yapacağız.