一、简介:
①:在12C R1版本中undo只支持Global Shared Undo模式,所有container共享一个UNDO表空间,目前保留这种模式只是为了升级过渡,
②:在12C R2引入了PDB Local UNDO模式,每个container都有自己的UNDO 表空间,对于RAC是每个实例每个container都有自己的UNDO表空间,这也正是推荐的.在DBCA时会有local undo选项,且默认勾选。
local undo 模式的好处:
①:减少undo表空间的争用,同时方便拔插
②:只有使用local undo才支持下面的新特性: Refresh PDB,Flashback PDB ,( Hot Clone,Relocate PDB in open read/write mode)
③:point-in-time recovery PDB
--注意:如果要将local UNO 转为 shared UNO,数据库必须要以upgrade方式启动,否则会报错;
二、 local undo 转 shared undo :
①:查看localundo是否开启:(默认是开启localundo,因为在安装的时候默认是勾选这个选项的) sql>colPROPERTY_NAMEfora25; sql>colPROPERTY_VALUEfora25; sql>selectPROPERTY_NAME,PROPERTY_VALUEfromdatabase_propertieswhereproperty_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAMEPROPERTY_VALUE -------------------------------------------------- LOCAL_UNDO_ENABLEDTRUE 注意:在Oracle12.1版本中undo只支持GlobalSharedUndo模式,不支持localundo选项 ②:重启数据库,以upgrade方式启动: sql>shutdownimmediate sql>startupupgrade sql>alterdatabaselocalundooff;---改变localundo的模式,数据库必须以upgrade方式启动。 sql>shutdownimmediate sql>startup sql>colPROPERTY_NAMEfora25; sql>selectPROPERTY_NAME,PROPERTY_VALUEfromdatabase_propertieswhereproperty_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAMEPROPERTY_VALUE -------------------------------------------------- LOCAL_UNDO_ENABLEDFALSE ---注意,从上一步查询得知,local_undo已经关闭了; ③:把pdb中的undo表空间删除: sql>showpdbs; CON_IDCON_NAMEOPENMODERESTRICTED ------------------------------------------------------------ 2PDB$SEEDREADONLYNO 3TESTPDBREADWRITENO sql>altersessionsetcontainer=testpdb; sql>selecttablespace_namefromdba_tablespaces;----查看现在的表空间, TABLESPACE_NAME ------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS TEST 6rowsselected. sql>selectnamefromv$datafilewherenamelike'%undo%';---查看可以得知,目前有两个undo表空间,一个是CDB的,一个是PDB自己的 NAME -------------------------------------------------------------------------------- /opt/oracle/oradata/orcl/undotbs01.dbf /opt/oracle/oradata/orcl/testpdb/undotbs01.dbf sql>droptablespaceUNDOTBS1includingcontentsanddatafiles;---删除pdb中的undo表空间,(一定是进入到pdb在执行这条命令) Tablespacedropped. sql>selectnamefromv$datafilewherenamelike'%undo%';---此时查看undo表空间,就只剩下CDB中的一个了 NAME -------------------------------------------------------------------------------- /opt/oracle/oradata/orcl/undotbs01.dbf sql>showcon_name; CON_NAME ------------------------------ TESTPDB
二、shared undo 转 local undo :
sql>shutdownimmediate sql>startupupgrade---必须以upgrade启动数据库 sql>alterdatabaselocalundoon;----开启localundo模式 sql>shutdownimmediate sql>startup sql>colPROPERTY_NAMEfora25; sql>colPROPERTY_VALUEfora25; sql>selectPROPERTY_NAME,PROPERTY_VALUEfromdatabase_propertieswhereproperty_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAMEPROPERTY_VALUE -------------------------------------------------- LOCAL_UNDO_ENABLEDTRUE sql>alterpluggabledatabasetestpdbopen; sql>altersessionsetcontainer=testpdb; sql>selectnamefromv$datafilewherenamelike'%undo%'; NAME ----------------------------------------------------------------------------------------------------------------------------------------- /opt/oracle/oradata/orcl/testpdb/system01_i1_undo.dbf
说明:
打开loacl undo后,自动为当前的PDB创建undo表空间,同时如果以前再新创建pdb,系统将自动创建自己的undo表空间。创建表空间的名字与大小由 PDB$SEED 中的配置信息决定的。