Oracle 12cR2新特性-本地UNDO模式(LOCAL_UNDO_ENABLED)
Tags: Oracle
在 Oracle 12.1 中,在一个实例中的所有 PDB 只能共享同一个 UNDO 表空间 , 称之为 Global Shared Undo 模式 , 即共享 Undo 模式 。目前保留 共享 Undo 模式 只是为了升级过渡 。 在 Oracle 12.2 中 , 引入了 PDB Local UNDO 模式 , 每个 PDB 都有各自的 undo 表空间。对于 RAC 是每个实例每个 container 都有自己的 UNDO 表空间 , 这也正是推荐的 。 这种新的管理机制就叫做本地 undo 模式。本地 undo 模式为新建数据库的默认模式。在 DBCA 时会有 local undo 选项,且默认勾选。
本地 undo 模式的好处:
\1. 减少 undo 表空间的争用,同时方便拔插
\2. 只有使用 local undo 才支持下面的新特性 :Refresh PDB,Flashback PDB ,( Hot Clone,Relocate PDB in open read/write mode )
3.point-in-time recovery PDB
查看数据库是否开启 local undo 。 如果 PROPERTY_VALUE 为 true 表示已经开启。
col PROPERTY_NAME for a25;
col PROPERTY_VALUE for a25;
select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name='LOCAL_UNDO_ENABLED';
查看 ROOT 和自己定义的 pdb 对应的 undo 表空间 :
SELECT CON_ID,NAME FROM V$TABLESPACE A WHERE A.NAME LIKE 'UNDO%' ORDER BY CON_ID,TS# ;
1 、 local undo 转 shared undo 的步骤:
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
ALTER DATABASE LOCAL UNDO OFF;
SHUTDOWN IMMEDIATE;
STARTUP;
在转换完成之后, 之前存在的 undo 表空间不会自动删除。如果碍事, 需要进入每个 PDB 里进行 手动删除。
alter session set container=pdblhr1;
DROP TABLESPACE undotbs1;
1 、 shared undo 转 local undo 的步骤:
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
ALTER DATABASE LOCAL UNDO O N ;
SHUTDOWN IMMEDIATE;
STARTUP;
Oracle 自动为 每个 PDB 创建了一个 undo 表空间 。 在切换为本地 Undo 模式后, 新创建的数据库也是运行在本地 undo 模式上。
1 转换为共享 undo 模式
1.1 查询当前的模式:
1 2 3 4 5 6 7 8 9 | SQL>COLUMN property_name FORMAT A30 SQL>COLUMN property_value FORMAT A30 SQL>SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ ------------------------------ LOCAL_UNDO_ENABLED TRUE SQL> |
1.2 查看 ROOT 和自己定义的 pdb 对应的 undo 表空间
1 2 3 4 5 6 7 8 9 10 | SELECT con_id, tablespace_name FROM cdb_tablespaces WHERE tablespace_name LIKE 'UNDO%' ORDER BY con_id; CON_ID TABLESPACE_NAME ---------- ------------------------------ 1 UNDOTBS1 3 UNDOTBS1 SQL> |
2 切换为共享 undo 模式
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 | SQL> SHUTDOWN IMMEDIATE; Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP UPGRADE; ORACLE instance started. Total System Global Area 1308622848 bytes Fixed Size 8792440 bytes Variable Size 822085256 bytes Database Buffers 469762048 bytes Redo Buffers 7983104 bytes Database mounted. Database opened. SQL> ALTER DATABASE LOCAL UNDO OFF; Database altered. SQL> SHUTDOWN IMMEDIATE; Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP; ORACLE instance started. Total System Global Area 1308622848 bytes Fixed Size 8792440 bytes Variable Size 822085256 bytes Database Buffers 469762048 bytes Redo Buffers 7983104 bytes Database mounted. Database opened. SQL> |
2.1 验证
1 2 3 4 5 6 7 8 9 10 | SQL>COLUMN property_name FORMAT A30 SQL>COLUMN property_value FORMAT A30 SQL>SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ ------------------------------ LOCAL_UNDO_ENABLED FALSE SQL> |
虽然已经不是本地 undo 模式了,但是之前存在的 undo 表空间不会自动删除。如果碍事,要手动删除。
1 2 3 4 5 6 7 8 9 10 | SQL>SELECT con_id, tablespace_name FROM cdb_tablespaces WHERE tablespace_name LIKE 'UNDO%' ORDER BY con_id; CON_ID TABLESPACE_NAME ---------- ------------------------------ 1 UNDOTBS1 3 UNDOTBS1 SQL> |
-- 删除多余的 undo 表空间
1 2 3 4 5 6 7 8 9 10 | SQL>ALTER SESSION SET CONTAINER = pdb1; SQL>SELECT file_name FROM dba_data_files WHERE tablespace_name = 'UNDOTBS1'; ---------------------------------------------------------------------------------------------------- /u02/app/oracle/oradata/cdb1/pdb1/undotbs01.dbf SQL> SQL>DROP TABLESPACE undotbs1; Tablespace dropped. SQL> |
随着所有老的 undo 表空间被移除了,现在该实例就是运行在共享 undo 模式上了。
3 切换为本地 undo 模式
利用上面的环境,重新切换回去。
查询:可以看到是运行在共享 undo 模式上,而且只有一个 undo 表空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SQL>SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ ------------------------------ LOCAL_UNDO_ENABLED FALSE SQL>SELECT con_id, tablespace_name FROM cdb_tablespaces WHERE tablespace_name LIKE 'UNDO%' ORDER BY con_id; CON_ID TABLESPACE_NAME ---------- ------------------------------ 1 UNDOTBS1 SQL> |
3.1 切换为本地 undo 模式
和切换为共享 undo 模式步骤相同。
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 | SQL> SHUTDOWN IMMEDIATE; Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP UPGRADE; ORACLE instance started. Total System Global Area 1308622848 bytes Fixed Size 8792440 bytes Variable Size 822085256 bytes Database Buffers 469762048 bytes Redo Buffers 7983104 bytes Database mounted. Database opened. SQL> ALTER DATABASE LOCAL UNDO ON; Database altered. SQL> SHUTDOWN IMMEDIATE; Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP; ORACLE instance started. Total System Global Area 1308622848 bytes Fixed Size 8792440 bytes Variable Size 822085256 bytes Database Buffers 469762048 bytes Redo Buffers 7983104 bytes Database mounted. Database opened. SQL> |
3.2 验证
1 2 3 4 5 6 7 8 | SQL>COLUMN property_name FORMAT A30 SQL>COLUMN property_value FORMAT A30 SQL>SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ ------------------------------ LOCAL_UNDO_ENABLED TRUE |
-- 可以看到 Oracle 自动为 PDB 创建了一个 undo 表空间
1 2 3 4 5 6 7 8 9 | SQL>SELECT con_id, tablespace_name FROM cdb_tablespaces WHERE tablespace_name LIKE 'UNDO%' ORDER BY con_id; CON_ID TABLESPACE_NAME ---------- ------------------------------ 1 UNDOTBS1 3 UNDO_1 SQL> |
3.3 新创建一个数据库
可以看到新创建的数据库也是运行在本地 undo 模式上。
1 2 3 4 5 6 7 8 9 10 11 12 | SQL>CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1; SQL>ALTER PLUGGABLE DATABASE pdb2 SAVE STATE; SQL>SELECT con_id, tablespace_name FROM cdb_tablespaces WHERE tablespace_name LIKE 'UNDO%' ORDER BY con_id; CON_ID TABLESPACE_NAME ---------- ------------------------------ 1 UNDOTBS1 3 UNDO_1 4 UNDOTBS1 SQL> |