Oracle12cCDB和PDB数据库的启动与关闭说明(二)

2015-02-02 20:33:52 · 作者: · 浏览: 38
PEN READ ONLY [RESTRICTED] [FORCE]; ALTERPLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED]; ALTERPLUGGABLE DATABASE CLOSE [IMMEDIATE];

?

如果是在CDB中,可以使用如下语法:

ALTERPLUGGABLE DATABASE  OPEN READ WRITE [RESTRICTED][FORCE];

ALTERPLUGGABLE DATABASE  OPEN READ ONLY [RESTRICTED] [FORCE];

ALTERPLUGGABLE DATABASE  OPEN UPGRADE [RESTRICTED];

ALTERPLUGGABLE DATABASE  CLOSE [IMMEDIATE];

表示的是多个PDB,如果有多个,用逗号分开。 也可以使用ALL或者ALL EXCEPT关键字来替代。

?

ALL:表示所有的PDBS。

ALLEXCEPT 表示需要排除的PDBS。

?

如:

ALTERPLUGGABLE DATABASE pdb1, pdb2 OPEN READ ONLY FORCE;

ALTERPLUGGABLE DATABASE pdb1, pdb2 CLOSE IMMEDIATE;



ALTERPLUGGABLE DATABASE ALL OPEN;

ALTERPLUGGABLE DATABASE ALL CLOSE IMMEDIATE;



ALTERPLUGGABLE DATABASE ALL EXCEPT pdb1 OPEN;

ALTERPLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE IMMEDIATE;

示例:

SQL>alter session set container=CDB$ROOT;

Sessionaltered.



SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;



CON_ID DBID GUID NAME OPEN_MODE

-------------------- -------------------------------- --------------- ----------

2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED READ ONLY

3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA READ WRITE



SQL>ALTER PLUGGABLE DATABASE ALL CLOSE ;

Pluggabledatabase altered.



SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;



CON_ID DBID GUID NAME OPEN_MODE

-------------------- -------------------------------- --------------- ----------

2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED READ ONLY

3 426143573 F7C209EB1DFC0854E0430A01A8C0B787PDBCNDBA MOUNTED



SQL>alter session set container=pdbcndba;



Sessionaltered.



SQL>ALTER PLUGGABLE DATABASE OPEN;



Pluggabledatabase altered.



SQL> select con_id, dbid, guid, name , open_modefrom v$pdbs;



CON_ID DBID GUID NAME OPEN_MODE

-------------------- -------------------------------- --------------- ----------

3 426143573 F7C209EB1DFC0854E0430A01A8C0B787PDBCNDBA READ WRITE


?

3 设置Pluggable Database (PDB) 的自动startup

?

默认情况下,在CDB 启动的时候,all 的PDB 都是mount状态,也没有默认的机制,在CDB启动时自动启动PDB。

?

但这里可以通过触发器来实现PDB的自动open:

?

CREATEOR REPLACE TRIGGER open_pdbs

AFTER STARTUP ON DATABASE

BEGIN

EXECUTE IMMEDIATE 'ALTERPLUGGABLE DATABASE ALL OPEN';

END open_pdbs;

/

示例:

SQL>show con_name



CON_NAME

------------------------------

PDBCNDBA

SQL>alter session set container=CDB$ROOT;



Sessionaltered.



SQL>CREATE OR REPLACE TRIGGER open_pdbs

2 AFTER STARTUP ON DATABASE

3 BEGIN

4 EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';

5 ENDopen_pdbs;

6 /



Triggercreated.