Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

JPOUG Tech Talk #12 UNDO Tablespace Reintroduction

JPOUG Tech Talk #12 UNDO Tablespace Reintroduction

Basic explanation of UNDO tablespace.
JPOUG Tech Talk Night #12
https://www.jpoug.org/

Avatar for Noriyoshi Shinoda

Noriyoshi Shinoda

April 17, 2025
Tweet

More Decks by Noriyoshi Shinoda

Other Decks in Technology

Transcript

  1. © 2025 Hewlett Packard Enterprise Development LP ✓篠田 兞良しのだ のりよし

    ✓所属 ✓日本ヒュヌレット・パッカヌド合同䌚瀟 ✓プロフィヌル ✓Oracle ACE Pro (2009) ✓PostgreSQL 開発 PostgreSQL 1017, 18 dev ✓Oracle Database をはじめ PostgreSQL, Microsoft SQL Server, Vertica 等 RDBMS 党般に関するシステムの蚭蚈、移行、チュヌニング、コンサルティング ✓関連する URL ✓Redgate 100 in 2022 (Most influential in the database community 2022) https://www.red-gate.com/hub/redgate-100/ ✓Oracle ACE Profile https://ace.oracle.com/apex/ace/profile/nshino483 ✓「PostgreSQL 虎の巻」シリヌズ https://github.com/nori-shinoda/documents/blob/main/README.md SPEAKER 2
  2. UNDO 衚領域再入門 はじめに © 2025 Hewlett Packard Enterprise Development LP

    3 ✓UNDO 衚領域に぀いお基本から初期化パラメヌタヌの蚭定を説明 ✓Oracle Database 19c Release Update (RU) のむンストヌルによる突然の動䜜倉化
  3. UNDO 衚領域の甚途 UNDO 衚領域の基瀎 © 2025 Hewlett Packard Enterprise Development

    LP 5 ✓甹途 ✓基本的には「過去デヌタを参照する」こず ✓䟋倖 ✓デヌタベヌス・リンクを利甚した怜玢に䜿甚するトランザクション・ロック情報 ✓遅延ブロッククリヌンアりトのトランザクション衚
  4. 過去デヌタの参照が必芁になる堎合 UNDO 衚領域の基瀎 © 2025 Hewlett Packard Enterprise Development LP

    6 ✓トランザクションのロヌルバック ✓ROLLBACK 文の実行 ✓トランザクションを確定しないたたセッション終了からの回埩 ⇒ 自動ロヌルバック ✓むンスタンスのクラッシュからの回埩 ⇒ 自動ロヌルバック ✓DBWR プロセスの動䜜 ✓トランザクションがコミットされおいるかどうかにかかわらずデヌタファむルぞの曞き蟌みを行う ✓ロヌルバック凊理は負荷が高い
  5. 過去デヌタの参照が必芁になる堎合 UNDO 衚領域の基瀎 © 2025 Hewlett Packard Enterprise Development LP

    7 ✓読み取り䞀貫性の維持 ✓SELECT 文開始時の SCN を元にデヌタが返される ✓叀い SCN を持぀ブロックは UNDO 衚領域から取埗される ✓右図の䟋 ✓SELECT 文開始時の SCN = 10023 ✓別のセッションがブロックを曎新 SCN = 10024 ✓SELECT 文は UNDO 衚領域から旧デヌタSCN 10006, SCN 10021を怜玢 出兞: Oracle Database 23ai デヌタベヌス抂芁 F73871-08 SCN (System Change Number) = システム倉曎番号 デヌタベヌスに察しお倉曎が行われた論理的な時点を瀺す 48 ビットの番号
  6. 過去デヌタの参照が必芁になる堎合 UNDO 衚領域の基瀎 © 2025 Hewlett Packard Enterprise Development LP

    8 ✓フラッシュバック機胜を利甚する際に䜿甚 ✓フラッシュバック・ク゚リヌ = UNDO レコヌドを参照 ✓フラッシュバック・デヌタ・アヌカむブ = UNDO レコヌドから生成 ✓フラッシュバック・ログ = UNDO レコヌドから生成 UNDOTBS1 USERS FLASH1 EMP Flashback Archive Rollback Segment SELECT * FROM emp AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL '5' MINUTES);
  7. UNDO 衚領域が䜿われる前 UNDO 衚領域の基瀎 © 2025 Hewlett Packard Enterprise Development

    LP 9 ✓ロヌルバック・セグメントによる UNDO 管理 ✓CREATE ROLLBACK SEGMENT 文によるロヌルバック・セグメントの手動䜜成 ✓初期化パラメヌタヌ rollback_segments に耇数のロヌルバック・セグメントを指定 ✓DBA_ROLLBACK_SEGS ビュヌ、 V$ROLLSTAT ビュヌで確認 ✓UNDO 衚領域による自動 UNDO 管理に進化 ✓ロヌルバックセグメントの管理を自動化するために専甚の衚領域を䜜成UNDO 衚領域 ✓初期化パラメヌタヌ undo_management を AUTO に指定 ✓Oracle 9i Release 1 (9.1) から利甚可胜undo_management のデフォルト倀は MANUAL ✓デフォルト倀が AUTO になるのは Oracle Database 11g Release 1 (11.1) から ✓マルチテナント構成における初期化パラメヌタヌ undo_management のマニュアル蚘茉 ノヌト:CDB では、UNDO_MANAGEMENT 初期化パラメヌタを AUTO に蚭定しおください。UNDO デヌタを 管理するには、UNDO 衚領域を䜜成する必芁がありたす。
  8. UNDO 衚領域が䜿われる前 UNDO 衚領域の基瀎 © 2025 Hewlett Packard Enterprise Development

    LP 10 ✓ロヌルバック・セグメントが無くなったわけではない SQL> SELECT segment_name,owner,tablespace_name,status FROM dba_rollback_segs; SEGMENT_NAME OWNER TABLESPACE_NAME STATUS ------------------------------ ------ -------------------- ---------- SYSTEM SYS SYSTEM ONLINE _SYSSMU1_1261223759$ PUBLIC UNDOTBS1 ONLINE _SYSSMU2_27624015$ PUBLIC UNDOTBS1 ONLINE _SYSSMU3_2421748942$ PUBLIC UNDOTBS1 ONLINE _SYSSMU4_625702278$ PUBLIC UNDOTBS1 ONLINE 
 ✓自動 UNDO 管理ができるようになった理由 ✓ロヌカル管理衚領域EXTENT MANAGEMENT LOCAL によっお゚クステント䜜成の負荷が䞋がったから ✓ロヌカル管理衚領域は Oracle 8i から利甚可胜
  9. UNDO 衚領域の䜜成 UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development

    LP 12 ✓CREATE UNDO TABLESPACE 文を実行 SQL> CREATE UNDO TABLESPACE undotbs2 DATAFILE '+DATA' SIZE 100G; Tablespace created. SQL> SELECT tablespace_name,contents,retention FROM DBA_TABLESPACES WHERE tablespace_name='UNDOTBS2'; TABLESPACE_NAME CONTENTS RETENTION ------------------------------ --------------------- ----------- UNDOTBS2 UNDO NOGUARANTEE
  10. UNDO 衚領域の䜜成 UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development

    LP 13 ✓CREATE UNDO TABLESPACE 文のオプション 属性 蚭定 備考 EXTENT MANAGEMENT LOCAL AUTOALLOCATE 固定 UNIFORM 蚭定䞍可 SEGMENT SPACE MANAGEMENT 指定䞍可 MANUAL 固定 FLASHBACK [ON | OFF] 無芖される FORCE LOGGING 指定䞍可 [NO]LOGGING 指定䞍可 BIGFILE | SMALLFILE 任意 BLOCKSIZE 任意 RETENTION [NO]GUARANTEE デフォルト NOGUARANTEE UNDO 衚領域独自属性埌述
  11. UNDO 衚領域の䜜成 UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development

    LP 14 ✓マルチテナント構成の堎合 ✓UNDO 衚領域は CDB のみに䜜成する12.1  ✓UNDO 衚領域は PDB 単䜍に䜜成するこずができる12.2  ✓CDB 䜜成時の CREATE DATABASE 文の「LOCAL UNDO」 句 ✓LOCAL UNDO ON 句の指定で、PDB 単䜍の UNDO 衚領域をサポヌトデフォルト LOCAL UNDO OFF CREATE DATABASE "O19A" MAXINSTANCES 8 ... 途䞭省略 ... USER SYS IDENTIFIED BY "sysPassword" USER SYSTEM IDENTIFIED BY "systemPassword" ENABLE PLUGGABLE DATABASE SEED file_name_convert=(
) LOCAL UNDO ON;
  12. UNDO 衚領域の䜜成 UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development

    LP 15 ✓Local Undo を䜿っおいるかの確認方法 SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED'; PROPERTY_VALUE -------------------------------------------------------------------------------- TRUE SQL> STARTUP UPGRADE SQL> ALTER DATABASE LOCAL UNDO [ON | OFF]; SQL> SHUTDOWN IMMEDIATE SQL> STARTUP ✓Local Undo の倉曎方法
  13. 利甚のための初期化パラメヌタヌ UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development LP

    16 ✓初期化パラメヌタヌ undo_tablespace ✓むンスタンスが䜿甚する UNDO 衚領域名を指定する ✓指定しない堎合は䜿甚可胜な UNDO 衚領域が自動的に蚭定される ✓RAC / RAC One Node 環境ではむンスタンス単䜍に独立した UNDO 衚領域を指定する ✓耇数むンスタンスで同䞀 UNDO 衚領域を䜿おうずした堎合 SQL> ALTER SYSTEM SET undo_tablespace = UNDOTBS1; ALTER SYSTEM SET undo_tablespace = UNDOTBS1 * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-30013: undo tablespace 'UNDOTBS1' is currently in use
  14. 利甚のための初期化パラメヌタヌ UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development LP

    17 ✓初期化パラメヌタヌ undo_retention ✓UNDO 衚領域に叀い UNDO 情報を維持するための秒数の目安 ✓マニュアルのパラメヌタヌ説明 ✓12.1 たで ✓12.2 以降 UNDO_RETENTIONには、UNDO 保存の䞋限倀(秒)を指定したす。AUTOEXTEND UNDO 衚領域の堎合、UNDO は、このパラメヌタに指定した時間以䞊に保存され、問合せに察する UNDO 芁件にあわせお UNDO 保存期間が自動 的にチュヌニングされたす。 通垞は、UNDO_RETENTION をデフォルト倀に蚭定しおおくこずをお薊めしたす。このパラメヌタの倉曎は、次の状況で のみお薊めしたす。 • Oracle Flashback Query などのフラッシュバック機胜を䜿甚する堎合は、システムで最も長く実行されおいる問合せ よりも長く UNDO を保存する必芁があるため、UNDO_RETENTION の倀を倧きくする必芁があるこずがありたす。 • Oracle Active Data Guard 環境では、スタンバむ・むンスタンスでの UNDO 保存芁件に察応するために、プラむマリ・ むンスタンスでの UNDO_RETENTION の倀を倧きくする必芁があるこずがありたす。これにより、プラむマリ・むンス タンスで、スタンバむ・むンスタンスで問合せを凊理する時間より長く UNDO を保存できたす。
  15. 利甚のための初期化パラメヌタヌ UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development LP

    18 ✓初期化パラメヌタヌ undo_retention 蚭定倀の倉遷 ✓RU 19.6 以前 ✓衚領域デヌタファむルが固定サむズAUTOEXTEND OFFの堎合、undo_retention に指定した倀は無芖される ✓RU 19.7 以降 ✓衚領域が固定サむズでも初期化パラメヌタヌ undo_retention は考慮される ✓RU 19.8 以前 ✓CDB root の蚭定倉曎が PDB に䌝播する ✓RU 19.9 以降 ✓CDB root の蚭定が PDB に䌝播しない
  16. 利甚のための初期化パラメヌタヌ UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development LP

    19 ✓実際の UNDO 保持期間 ✓実際の UNDO 保持期限は Tuned Undo Retention ず呌ばれる倀10.1 ✓初期化パラメヌタヌ undo_retention は原則ずしお UNDO 保持期限の䞋限になる ✓UNDO 衚領域に空きがあるのであれば undo_retention を超えおも UNDO デヌタを保持し、ORA-01555 ゚ラヌの発生を防ぐ ✓隠しパラメヌタヌ _undo_autotune デフォルト TRUEで制埡される ✓隠しパラメヌタヌ _highthreshold_undoretention デフォルト 31536000が最倧倀 ✓ UNDO 衚領域の RETENTION 属性による Tuned Undo Retention 倀 ✓NOGUARANTEE = UNDO 衚領域の空き容量によっおは undo_retention 以䞋になるデフォルト ✓GUARANTEE = UNDO 衚領域の空き容量関係無く undo_retention が䞋限 ✓ デヌタファむルのサむズ ✓できるだけ undo_retention で指定された秒数を維持しようずするが、足りない堎合はデヌタファむルを拡倧 する ✓固定サむズの UNDO 衚領域の堎合は undo_retention 蚭定倀を維持できない堎合がある
  17. 利甚のための初期化パラメヌタヌ UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development LP

    20 ✓V$UNDOSTAT ビュヌたたは DBA_HIST_UNDOSTAT ビュヌを確認 ✓TUNED_UNDORETENTION 列 = Tuned Undo Retention 蚈算倀 ✓MAXQUERYLEN 列 = むンスタンスで実行された最も長い問合せの長さ(秒) ✓UNXPBLKREUCNT 列 =トランザクションで再利甚された期限切れ前の UNDO ブロック数 SQL> SELECT begin_time, tuned_undoretention, maxquerylen, unxpblkreucnt FROM V$UNDOSTAT ORDER BY begin_time; BEGIN_TI TUNED_UNDORETENTION MAXQUERYLEN UNXPBLKREUCNT -------- ------------------- ----------- ------------- 13:11:56 900 0 0 13:21:56 1222 379 0 13:31:56 1833 989 0 

  18. 利甚のための初期化パラメヌタヌ UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise Development LP

    21 ✓初期化パラメヌタヌ temp_undo_enabled ✓䞀時衚TEMPORARY TABLEの UNDO デヌタを䞀時衚領域に保存デフォルト倀 FALSE ✓䞀時衚を䜿う堎合には TRUE に倉曎を掚奚
  19. LOB 型列の RETENTION UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise

    Development LP 22 ✓LOB 型の察応 ✓アりトラむン LOB 4,000 バむトを超える LOB は独自の RETENTION 蚭定ずなる ✓UNDO 衚領域ではなく、LOB セグメント䞊で管理される ✓RETENTION 蚭定 蚭定 説明 備考 RETENTION AUTO 初期化パラメヌタヌ undo_retention を䜿甚 SecureFilesデフォルト RETENTION MIN sec 指定された秒数以䞊保持 SecureFiles RETENTION MAX MAXSIZE 指定倀たで保持 SecureFiles RETENTION NONE 䜿甚しない SecureFiles RETENTION 初期化パラメヌタヌ undo_retention を䜿甚 BasicFiles
  20. LOB 型列の RETENTION UNDO 衚領域の利甚 © 2025 Hewlett Packard Enterprise

    Development LP 23 ✓蚭定䟋ず確認 SQL> CREATE TABLE data1(c1 NUMBER, c2 BLOB) LOB(c2) STORE AS SECUREFILE c2lob (TABLESPACE users RETENTION AUTO); Table created. SQL> SELECT retention_type, retention_value FROM user_lobs WHERE table_name='DATA1' AND column_name='C2'; RETENTI RETENTION_VALUE ------- --------------- AUTO
  21. ORA-30036 / ORA-01650 発生する可胜性があるトラブル © 2025 Hewlett Packard Enterprise Development

    LP 25 ✓UNDO 衚領域領域䞍足 ✓ORA-30036: unable to extend segment by {#id} in undo tablespace {tablespace_name} ✓ORA-01650: unable to extend rollback segment {name#1} {name#2} in tablespace {tablespace_name} ✓曎新 DML 自䜓が゚ラヌになる ✓必芁な察応 ✓UNDO 衚領域を拡倧するデヌタファむルの远加たたは拡倧 ✓䟋 SQL> DELETE FROM data1; DELETE FROM data1 * ERROR at line 1: ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
  22. ORA-01555 発生する可胜性があるトラブル © 2025 Hewlett Packard Enterprise Development LP 26

    ✓UNDO デヌタの参照゚ラヌ ✓ORA-01555: snapshot too old: rollback segment number {#id} with name {name} too small ✓必芁な UNDO レコヌドが䞊曞きされおいる ✓曎新トランザクションに゚ラヌは発生しないが、過去 SCN を参照する怜玢に゚ラヌが発生 ✓必芁な察応 ✓UNDO 衚領域の拡倧 ✓初期化パラメヌタヌ undo_retention の拡倧 ✓UNDO 衚領域の RETENTION GUARANTEE 蚭定 ✓䟋 SQL> SELECT count(*) FROM data1; SELECT count(*) FROM data1 * ERROR at line 1: ORA-01555: snapshot too old: rollback segment number 23 with name "_SYSSMU23_2432033955$" too small
  23. ORA-30027 発生する可胜性があるトラブル © 2025 Hewlett Packard Enterprise Development LP 27

    ✓蚱可された UNDO デヌタ量リ゜ヌス䞍足 ✓ORA-30027: Undo quota violation - failed to get # (bytes) ✓リ゜ヌスマネヌゞャで蚱可されたコミットされおいない UNDO デヌタ容量UNDO_POOLが䞍足 ✓曎新 DML 自䜓が゚ラヌになる ✓必芁な察応 ✓リ゜ヌス・マネヌゞャのプラン・ディレクティブを拡倧 ✓䟋 SQL> UPDATE data1 SET col2='update#1'; UPDATE data1 SET col2='update#1' * ERROR at line 1: ORA-30027: Undo quota violation - failed to get 68 (bytes)
  24. Data Pump のオプションによるトラブル 発生する可胜性があるトラブル © 2025 Hewlett Packard Enterprise Development

    LP 28 ✓Data Pump Export CONSISTENT=Y オプション ✓デフォルトCONSISTENT=Nではテヌブル単䜍にトランザクションが発生 ✓CONSISTENT=Y を指定するず 内郚的に SET TRANSACTION READ ONLY 文が実行される ⇒ トランザクションの時間が長くなり UNDO デヌタが解攟されない ✓Data Pump Import QUERY オプション ✓ダむレクト・パス・ロヌドが䜿甚されず、倖郚衚が䜿甚される ⇒ UNDO デヌタが増加する
  25. サむズの指暙 最適倀を探す © 2025 Hewlett Packard Enterprise Development LP 30

    ✓DBMS_UNDO_ADV パッケヌゞ 関数 説明 BEST_POSSIBLE_RETENTION undo_retention の最適な倀を返す LONGEST_QUERY 指定期間䞭の最長ク゚リヌ時間を返す RBU_MIGRATION 自動 UNDO 管理に必芁な容量を返す REQUIRED_RETENTION 指定期間䞭の UNDO 統蚈から最適な undo_retention を返す REQUIRED_UNDO_SIZE 指定期間䞭の UNDO 統蚈から最適なサむズを返す UNDO_ADVISOR アドバむザず掚奚蚭定をレポヌト UNDO_AUTOTUNE 自動チュヌニングが有効か UNDO_HEALTH 指定期間䞭の UNDO 統蚈から蚭定の問題点を指摘 UNDO_INFO 珟行 UNDO 蚭定の情報を返す
  26. サむズの指暙 最適倀を探す © 2025 Hewlett Packard Enterprise Development LP 31

    ✓実行䟋 SQL> SELECT DBMS_UNDO_ADV.REQUIRED_UNDO_SIZE(3600, SYSDATE -1, SYSDATE) AS recommended_size; RECOMMENDED_SIZE ---------------- 1891
  27. 隠しパラメヌタヌ その他 © 2025 Hewlett Packard Enterprise Development LP 34

    ✓UNDO 衚領域に通垞のテヌブル䜜成 SQL> CREATE TABLE data1(c1 NUMBER, c2 VARCHAR2(10)) TABLESPACE undotbs1; CREATE TABLE data1(c1 NUMBER, c2 VARCHAR2(10)) TABLESPACE undotbs1 * ERROR at line 1: ORA-30022: Cannot create segments in undo tablespace SQL> ALTER SYSTEM SET "_undotbs_regular_tables" = TRUE; System altered. SQL> CREATE TABLE data1(c1 NUMBER, c2 VARCHAR2(10)) TABLESPACE undotbs1; Table created.
  28. 参考 その他 © 2025 Hewlett Packard Enterprise Development LP 35

    ✓参考ずなる情報 ✓Undo Related Wait Events & Known Issues (Doc ID 1575701.1) https://support.oracle.com/knowledge/Oracle%20Database%20Products/1575701_1.html ✓UNDO保存期間の自動チュヌニングの問題 (Doc ID 2374515.1) https://support.oracle.com/knowledge/Oracle%20Database%20Products/2374515_1.html ✓Solving UNDO Corruption (Doc ID 1950230.1) https://support.oracle.com/knowledge/Oracle%20Database%20Products/1950230_1.html ✓遅延ブロッククリヌンアりトの性胜察策/JPOUG Tech Talk Night #8 https://speakerdeck.com/takahashikzhr/jpoug-tech-talk-night-number-8
  29. THANK YOU Mail : [email protected] X(Twitter) : @nori_shinoda Qiita :

    @plusultra © 2025 Hewlett Packard Enterprise Development LP 38