12c ile tanışmış olduğumuz Multitenant yapı sonrasında daha öncesinde bildiğimiz o klasik database kapatıp açma komutlarınında ciddi bir takım değişimler olmuş oldu. Start ve shutdown etme olayını burda iki aşamalı olarak düşünebiliriz. Yani container database’ i kapatıp açmak farklı pluggable database’ leri kapatıp açmak farklı bir konudur.
Container database ‘ i nasıl kapatıp açabileceğimiz den anlatmaya başlayalım.
Container database opsiyonu ile kurulan bir database’ e localdan direkt olarak sqlplus ile bağlandığınız da aslında container db’ ye bağlanmış olursunuz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[oracle@Redhat70 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Fri Jun 26 13:44:37 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 5771362304 bytes Fixed Size 2936864 bytes Variable Size 1174409184 bytes Database Buffers 4580179968 bytes Redo Buffers 13836288 bytes Database mounted. Database opened. SQL> |
Yukarıdaki örnekden görüleceği üzere 12c öncesinde standalone database’ leri nasıl kapatıp açıyorsak aynı komutlar burada container database seviyesinde birebir olarak çalışmaktadır. Aşağıda kombinasyonlarını görebilirsiniz.
1 2 |
STARTUP [NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY] SHUTDOWN [IMMEDIATE | ABORT] |
Not: 12c ile birlikte startup exclusive komutu depcreated oldu.
Pluggable database ‘ lerin kapatılıp açılması ;
Burda iki opsiyon var aslında, startup shutdown komutlarını kullanabilir veya alter pluggable database komutları ile kapatıp açabiliriz.
Teste başlamadan önce ortamımız da neler var ona bakalım ;
1 2 3 4 5 6 7 8 9 10 11 12 |
select name, open_mode from V$CONTAINERS NAME OPEN_MODE ------------------------------ ---------- CDB$ROOT READ WRITE PDB$SEED READ ONLY T2_PLUG_NOCOPY READ WRITE PDB_PLUG_COPY READ WRITE T2_PLUG_CLONE READ WRITE T2_AS_CLONE READ WRITE 6 rows selected. |
4 adet pluggable database’ imiz var. Bunları kullanarak testlerimizi yapabiliriz. Standart komutlar ile (startup – shutdown vs) yapmak istersek sysdba ile database bağlanıp kapatıp açma testlerini yapacağımız pluggable database’ e geçmemiz gerekir;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Mon Jun 29 14:56:29 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Productin With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> alter session set container=T2_PLUG_NOCOPY; Session altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 T2_PLUG_NOCOPY READ WRITE NO |
Shutdown immediate ile kapatalım ;
1 2 3 |
shutdown immediate Pluggable Database closed. SQL> |
Container üzerinden kontrol edelim ;
1 2 3 4 5 6 |
select name, open_mode from V$CONTAINERS where name ='T2_PLUG_NOCOPY' NAME OPEN_MODE ------------------------------ ---------- T2_PLUG_NOCOPY MOUNTED 1 row selected. |
Burdan şu sonuca varıyoruz, aslında pluggable database’ i down etmek demek MOUNT’ a almak demek diye düşünebiliriz.
1 2 3 4 5 6 7 |
SQL> STARTUP force Pluggable Database opened. SQL> shutdown abort Pluggable Database closed. SQL> STARTUP OPEN READ ONLY Pluggable Database opened. SQL> |
Container üzerinden baktığımızda da read only olarak açıldığını görebiliriz.
1 2 3 4 5 6 |
select name, open_mode from V$CONTAINERS where name ='T2_PLUG_NOCOPY' NAME OPEN_MODE ------------------------------ ---------- T2_PLUG_NOCOPY READ ONLY 1 row selected. |
Çalıştırabileceğiniz komutları aşağıdaki şekilde listeleyebiliriz ;
1 2 3 4 5 |
STARTUP FORCE; STARTUP OPEN READ WRITE [RESTRICT]; STARTUP OPEN READ ONLY [RESTRICT]; STARTUP UPGRADE; SHUTDOWN [IMMEDIATE]; |
Pluggable database üzerinde çalıştırabileceğimiz ALTER PLUGGABLE DATABASE komutlarını örneklendirelim ;
— database’ i read/write modda açmak için ;
1 |
ALTER PLUGGABLE DATABASE T2_PLUG_NOCOPY OPEN; |
— tüm pluggable database’ leri read/ write modda açmak için ;
1 |
ALTER PLUGGABLE DATABASE ALL OPEN; |
— tüm pluggable database’ leri kapatmak için ;
1 |
alter pluggable database all close |
— pluggable database’ i read only modda açmak için ;
1 |
Alter pluggable database T2_PLUG_NOCOPY open read only; |
— tüm pluggable database’ leri kapatmak için
1 |
Alter pluggabke database all close immediate ; |
— Diğer örnekler
1 2 3 4 5 |
ALTER PLUGGABLE DATABASE PDB_NAME OPEN READ WRITE [RESTRICTED] [FORCE]; ALTER PLUGGABLE DATABASE PDB_NAME OPEN READ ONLY [RESTRICTED] [FORCE]; ALTER PLUGGABLE DATABASE PDB_NAME OPEN UPGRADE [RESTRICTED]; ALTER PLUGGABLE DATABASE PDB_NAME CLOSE [IMMEDIATE]; ALTER PLUGGABLE DATABASE PDB1, PDB2,PDB3, PDB4 CLOSE; |
Container database açıldıkdan sonra defaultta tüm pluggable database’ ler mount’ da kalır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 30 08:41:00 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 4328521728 bytes Fixed Size 2932728 bytes Variable Size 2499805192 bytes Database Buffers 1811939328 bytes Redo Buffers 13844480 bytes Database mounted. Database opened. SQL> SET SERVEROUTPUT ON SQL> COLUMN "RESTRICTED" FORMAT A10 select v.name, v.open_mode, nvl(v.restricted, 'n/a') "RESTRICTED", d.status from v$PDBs v inner join dba_pdbs d using (GUID) order by v.create_scn; NAME OPEN_MODE RESTRICTED STATUS ------------------------------ ---------- ---------- --------- PDB$SEED READ ONLY NO NORMAL T2_PLUG_NOCOPY MOUNTED n/a NORMAL PDB_PLUG_COPY MOUNTED n/a NORMAL T2_PLUG_CLONE MOUNTED n/a NORMAL T2_AS_CLONE MOUNTED n/a NORMAL |
Her restart sonrasında pluggable database’ leri tek tek açmak yerine aşağıdaki gibi basit bir trigger yardımıyla container db açıldıkdan sonra tüm pluggable database’ lerimizin otomatik olarak açılmasını sağlayabiliriz;
1 2 3 4 5 6 7 8 |
SQL> create or replace trigger Sys.Startup_all_plug_dbs after startup on database begin execute immediate 'alter pluggable database all open'; end; / Trigger created. |
Trigger’ımızı test edelim ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SQL> shu abort ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 4328521728 bytes Fixed Size 2932728 bytes Variable Size 2499805192 bytes Database Buffers 1811939328 bytes Redo Buffers 13844480 bytes Database mounted. Database opened. SQL> |
Db’ leri check edelim, hepsinin otomatik olarak açılmış olmasını bekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SQL> select v.name, v.open_mode, nvl(v.restricted, 'n/a') "RESTRICTED", d.status from v$PDBs v inner join dba_pdbs d using (GUID) order by v.create_scn / NAME OPEN_MODE RESTRICTED STATUS ------------------------------ ---------- ---------- --------- PDB$SEED READ ONLY NO NORMAL T2_PLUG_NOCOPY READ WRITE NO NORMAL PDB_PLUG_COPY READ WRITE NO NORMAL T2_PLUG_CLONE READ WRITE NO NORMAL T2_AS_CLONE READ WRITE NO NORMAL |
Startup sonrasında sadece bir tane pluggable database’ in açılmasını istiyorsak da ;
1 2 3 4 5 |
create or replace trigger Sys.After_Startup_one_pdb after startup on database begin execute immediate 'alter pluggable database pdb1 open'; end After_Startup; / |
Konuyla ilgili daha detaylı bilgi edinmek için aşağıdaki linkler den faydalanabilirsiniz.
Reference;
http://docs.oracle.com/database/121/ADMIN/cdb_pdb_admin.htm#ADMIN13863
https://oracle-base.com/articles/12c/multitenant-startup-and-shutdown-cdb-and-pdb-12cr1