|
本帖最后由 jiawang 于 2019-12-24 15:06 编辑
在12C版本,CDB启动的时候,默认情况下,PDB之后启动到MOUNT状态,而不是OPEN状态。
12C版本的PDB默认之后启动到MOUNT状态,因为MOUNT状态的数据库并不能正常提供服务,因此根本上来讲就相当于自启动失败。
在12.1.0.1版本,PDB是不支持自启动的,一般都是配置数据库启动触发器来实现。
CREATE OR REPLACE TRIGGER auto_open_pdbs
AFTERSTARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END auto_open_pdbs;
/
从12.1.0.2版本,ORACLE支持PDB自启动功能,通过ALTER PLUGGABLE DATABASE XXX SAVE STATE命令实现,这个命令会记录PDB的当前状态并保存到数据字典中,当CDB启动时,会查询数据字典中PDB是否保存了启动的状态,如果查询到PDB保存了OPEN状态,就将相应的PDB启动,可以通过DBA_PDB_SAVED_STATES视图查看PDB保存的状态信息。
测试步骤如下:
设置PDB调整为OPEN状态:
保存pdb1状态为open;
SQL> alter pluggable database pdb1 save state;
Pluggable database altered.
查看视图DBA_PDB_SAVED_STATES
SQL> select CON_NAME,STATE from DBA_PDB_SAVED_STATES;
CON_NAME STATE
---------- --------------
PDB1 OPEN
重启CDB,查看PDB的状态
SQL> startup force
ORACLE instance started.
Total System Global Area 1258291200 bytes
Fixed Size 8792296 bytes
Variable Size 469763864 bytes
Database Buffers 771751936 bytes
Redo Buffers 7983104 bytes
Database mounted.
Database opened.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
PDB$SEED READ ONLY NO
PDB1 READ WRITE NO
PDB2 MOUNTED
可见,当CDB启动或者重启时,保存了OPEN状态的PDB1成功启动到了OPEN状态,而没有进行设置的PDB2还是默认的MOUNT状态。
DBA_PDB_SAVED_STATES视图中的STATE字段代表的并不是PDB的当前状态,而是当CDB启动时,PDB应该启动的状态。
手动关闭PDB1,再查看DBA_PDB_SAVED_STATES视图
SQL> alter pluggable database pdb1 close immediate;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
PDB$SEED READ ONLY NO
PDB1 MOUNTED
PDB2 MOUNTED
SQL> select CON_NAME,STATE from DBA_PDB_SAVED_STATES;
CON_NAME STATE
---------- --------------
PDB1 OPEN
取消记录PDB的自启动功能
SQL> alter pluggable database pdb1 discard state;
Pluggable database altered.
取消PDB的自启动功能,会删除数据字典中相应的记录
SQL> select * from DBA_PDB_SAVED_STATES;
no rows selected
重启CDB,验证pdb1状态
SQL> startup force
ORACLE instance started.
Total System Global Area 1258291200 bytes
Fixed Size 8792296 bytes
Variable Size 469763864 bytes
Database Buffers 771751936 bytes
Redo Buffers 7983104 bytes
Database mounted.
Database opened.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
PDB$SEED READ ONLY NO
PDB1 MOUNTED
PDB2 MOUNTED
|
|