本文主要講述了:
1.關于undo表空間share和local的看法
2.修改undo為local undo的方法
3.修改PDB$SEED屬性的方法
4.關于local undo轉為share undo
數據庫從12.2版本開始,實現了undo表空間在cdb和pdb層面的隔離;并且local undo也是一些新特征性的基礎,比如pdb refresh和pdb閃回。12.1版本還無法實現。不過這種資源的隔離是不可避免的發展方向。undo在實現隔離之后,下一步redo的隔離也是有可能的。
cdb是local undo模式的時候,open的cdb和pdb都會有屬于自己的undo表空間。當從一個share undo的cdb中拔插一個pdb到local undo模式的cdb中的時候,在這個pdb open的時候,會為這個pdb自動創建undo表空間。
數據庫版本
SYS@cdbtest1(CDB$ROOT)> select banner from v$version where rownum=1;
BANNER -------------------------------------------------------------------------------- Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production |
查詢當前數據庫undo信息
SYS@cdbtest1(CDB$ROOT)> col PROPERTY_NAME for a25 SYS@cdbtest1(CDB$ROOT)> col PROPERTY_VALUE for a30 SYS@cdbtest1(CDB$ROOT)> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE ------------------------- ------------------------------ LOCAL_UNDO_ENABLED FALSE
SYS@cdbtest1(CDB$ROOT)> set line 200 SYS@cdbtest1(CDB$ROOT)> col FILE_NAME for a50 SYS@cdbtest1(CDB$ROOT)> select a.con_id,a.tablespace_name,b.file_name from cdb_tablespaces a,CDB_DATA_FILES b where a.TABLESPACE_NAME=b.TABLESPACE_NAME and a.con_id=b.con_id and a.CONTENTS='UNDO';
CON_ID TABLESPACE_NAME FILE_NAME ---------- ------------------------------ -------------------------------------------------- 1 UNDOTBS1 /oradata/cdb/CDBTEST1/datafile/o1_mf_undotbs1_f7nz 8sl3_.dbf
|
可以看到當前undo還是共享的,只在cdb中存在一個undo表空間。
大致步驟
1.關閉cdb實例 2.打開pdb到upgrade模式,startup upgrade 3.在CDB$ROOT中執行:ALTER DATABASE LOCAL UNDO ON; 4.關閉cdb實例,然后重啟 |
下面是操作過程:
SYS@cdbtest1(CDB$ROOT)> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SYS@cdbtest1(CDB$ROOT)> startup upgrade ORACLE instance started.
Total System Global Area 2214592512 bytes Fixed Size 8795040 bytes Variable Size 1845496928 bytes Database Buffers 352321536 bytes Redo Buffers 7979008 bytes Database mounted. Database opened. SYS@cdbtest1(CDB$ROOT)> sho pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED MIGRATE YES 3 CLONEMING MOUNTED 4 MING MOUNTED SYS@cdbtest1(CDB$ROOT)> alter database local undo on;
Database altered.
SYS@cdbtest1(CDB$ROOT)> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SYS@cdbtest1(CDB$ROOT)> startup ORACLE instance started.
Total System Global Area 2214592512 bytes Fixed Size 8795040 bytes Variable Size 1845496928 bytes Database Buffers 352321536 bytes Redo Buffers 7979008 bytes Database mounted. Database opened.
SYS@cdbtest1(CDB$ROOT)> col PROPERTY_NAME for a25 SYS@cdbtest1(CDB$ROOT)> col PROPERTY_VALUE for a30 SYS@cdbtest1(CDB$ROOT)> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE ------------------------- ------------------------------ LOCAL_UNDO_ENABLED TRUE SYS@cdbtest1(CDB$ROOT)> select a.con_id,a.tablespace_name,b.file_name,b.bytes/1024/1024 M from cdb_tablespaces a,CDB_DATA_FILES b where a.TABLESPACE_NAME=b.TABLESPACE_NAME and a.con_id=b.con_id and a.CONTENTS='UNDO';
CON_ID TABLESPACE_NAME FILE_NAME M ---------- ------------------------------ -------------------------------------------------- ---------- 1 UNDOTBS1 /oradata/cdb/CDBTEST1/datafile/o1_mf_undotbs1_f7nz 835 8sl3_.dbf
3 UNDO_1 /oradata/cdb/CDBTEST1/64B070B959B22CC9E053023DA8C0 300 935F/datafile/o1_mf_undo_1_fxv9cmnl_.dbf
4 UNDO_1 /oradata/cdb/CDBTEST1/64AE1A20BB9C1B5FE053023DA8C0 300 6963/datafile/o1_mf_undo_1_fxv9cvrd_.dbf
|
最開始的時候就提過了,當從一個share undo的cdb中拔插一個pdb到local undo模式的cdb中的時候,在這個pdb open的時候,會為這個pdb自動創建undo表空間。這里有兩個pdb是自動開啟的,所以為這兩個pdb自動創建了undo表空間。300M的大小是跟隨PDB$SEED中pdb的大小。如果想控制創建的undo表空間的配置,比如大小,可以在pdb$seed中修改undo表空間。
方法如下:
1. cdb$root中執行:
alter session set "_oracle_script"=true; --修改隱含參數,就可以避免ORA-65017: seed pluggable database may not be dropped or altered ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ WRITE FORCE ; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ WRITE NO
|
2. 切換到種子pdb
ALTER SESSION SET CONTAINER=PDB$SEED; |
3. 修改undo表空間
alter database datafile '/oradata/cdb/CDBTEST1/6498843CCFAD2D1FE053023DA8C0AC32/datafile/o1_mf_undotbs1_f7nz8x0z_.dbf' resize 300m; |
之前是210M,修改成300M。
4. 再將PDB$SEED修改回只讀模式
SYS@cdbtest1(CDB$ROOT)> alter session set "_oracle_script"=true;
Session altered.
SYS@cdbtest1(CDB$ROOT)> alter pluggable database "pdb$seed" close immediate;
Pluggable database altered.
SYS@cdbtest1(CDB$ROOT)> sho pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED MOUNTED 3 CLONEMING READ WRITE NO 4 MING READ WRITE NO SYS@cdbtest1(CDB$ROOT)> alter pluggable database "pdb$seed" open read only;
Pluggable database altered.
SYS@cdbtest1(CDB$ROOT)> sho pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 CLONEMING READ WRITE NO 4 MING READ WRITE NO
|
以上是oracle如何將共享undo變為local undo的方法。local undo轉為共享undo不符合發展潮流,方法大同小異,無非是之前命令改動成alter database local undo off,詳細過程就不介紹了。但要注意的是當oracle變成共享undo模式的時候,它會忽略之前local模式時創建的本地udno表空間,oracle建議直接刪除這些local undo tablespace。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。