原文链接:https://blog.csdn.net/u013986802/article/details/90669213
由于Oracle12c体系结构和Oracle11g有着很大的不同,尤其在Oracle12c引入数据库容器CDB和可插入数据库PDB之后,因此数据库的启动有着明显的不同。当CDB实例关闭重新开启后,PDB均处于mounted状态,因此要通过特定的命令去开启和关闭。以及相应的PDB随实例CDB自动开启设置。
查看当前数据库状态
SQL> set linesize 8000
SQL> column NAME format a40
SQL> select con_id ,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ---------------------------------------- ----------
2 PDB$SEED READ ONLY
3 ESBQASPDB READ WRITE
关闭数据库,重新启动到mounted状态
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1577058304 bytes
Fixed Size 8793208 bytes
Variable Size 905970568 bytes
Database Buffers 654311424 bytes
Redo Buffers 7983104 bytes
Database mounted.
#--实例为mounted,pdb也为mounted ;如果直接startup ,ESBQASPDB 也是MOUNTED,ESBQASPDB不随实例自动启动
SQL> select con_id ,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ---------------------------------------- ----------
2 PDB$SEED MOUNTED
3 ESBQASPDB MOUNTED
开启实例,如果有多个pdb 均为mounted
SQL> alter database open;
Database altered.
SQL> select con_id ,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ---------------------------------------- ----------
2 PDB$SEED READ ONLY
3 ESBQASPDB MOUNTED
开启pdb
SQL> alter pluggable database ESBQASPDB open;
Pluggable database altered.
SQL> select con_id ,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ---------------------------------------- ----------
2 PDB$SEED READ ONLY
3 ESBQASPDB READ WRITE
创建触发器,指定pdb和实例同时开启,可以通过关闭数据库shutdown immediate; 和启动数据库startup ,查看状态,验证pdb是否随实例启动。
SQL> select count(*) from cdb_triggers;
COUNT(*)
----------
290
SQL> select count(*) from dba_triggers;
COUNT(*)
----------
145
SQL> create trigger open_esbqaspdb after startup on database
2 begin
3 execute immediate 'alter pluggable database ESBQASPDB open';
4 end;
5 /
Trigger created.
SQL> select count(*) from cdb_triggers;
COUNT(*)
----------
291
SQL> select count(*) from dba_triggers;
COUNT(*)
----------
146
切换到pdb打开pdb
SQL> alter pluggable database all close;
SQL> alter session set container=ESBQASPDB;
Session altered.
SQL> startup
Pluggable Database opened.
SQL> conn / as sysdba
Connected.
SQL> select con_id ,name,open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ---------------------------------------- ----------
2 PDB$SEED READ ONLY
3 ESBQASPDB READ WRITE