UNDOに関する検証 その1
<UNDOに関する検証その1>
ペンネーム:クレイジーボーダー
初めてメルマガを書く。胸が痛い。緊張ではない。ただ、スノーボード中、
レールから落下したケガが3週間たっても直らない・・・まあ、そんなことは
いいとして、2003年がんばるぞー。
これから行なう検証はすべて OS Solaris8 Oracle 9.2.0.1.0の環境で行なう。
1.イントロダクション
Oracle9i以前は、”UNDO”の代わりに”ロールバック”という言葉を使用していた。
データベース管理者(DBA)は、UNDOデータを扱うために、UNDO領域ではなくロー
ルバック・セグメントを管理する必要があった。
ロールバック・セグメントは管理が複雑な機能の1つである。エラーメッセージ
(ORA-1555 スナップショットが古すぎます)は、(見慣れた?)メッセージである。
Oracle9iからは、UNDO領域を使用することによりUNDOデータの管理が改善された。
さて、「UNDOってそもそも何?」っていったビギナーレベルから、自動UNDO管
理機能モードのメリット・デメリットを検証していきたい。
2.概要
UNDO領域とは、UNDOデータを格納する領域である。Oracle9iでは、起動時に2
つのモードを選択できる。Oracle9i以前のようなロールバック・セグメントを
利用する手動UNDO管理モード(manual)とOracle9i新機能のUNDO領域を利用する
自動UNDO管理モード(auto)である。
2つのモードは、初期化パラメータundo_managementで設定できる。ただし、
2つのモードを同時に、同じインスタンス内で使用することはできない。
UNDO管理モードを切り替えるには、初期化パラメータを変更後、再起動する
必要がある。
Oracle9iでは自動UNDO管理機能モードを利用し、UNDOデータを上書きするまで
の保存期間を制御することができる。便利そうな機能である。
この保存期間についても、次回以降に検証していきたい。
UNDOデータ管理の目的は、モード問わず以下の3つである。
(1)読み込み一貫性の提供
(2)ROLLBACK文を発行した時のトランザクションのロールバック
(3)データベースのリカバリ
読み取り一貫性とは、あるユーザが変更しているコミットされていない情報を、
他のユーザがアクセスした時に、更新処理中の情報を取得するのではなく、
変更前の情報を提供する機能である。
ロールバックについては、コミットされていない変更処理を取り消します。
リカバリ機能は、データベースリカバリ時に、ロールフォワードを行なった後
に、コミットされていない変更が取り消される。
3.使用方法
自動UNDO管理機能を使用するには、2つの方法がある。
(a) データベース作成の際のcreate database文を実行
SQL> STARTUP NOMOUNT PFILE=/EXPORT/HOME/MAG920/DBS/INITMAG920.ORA INITMAG920.ORAの一部抜粋 INSTANCE_NAME='MAG920' UNDO_MANAGEMENT='AUTO' UNDO_RETENTION=10800 UNDO_TABLESPACE='UNDOTBL_01' ... SQL> @CREATEDB.SQL CREATEDB.SQLの内容: CREATE DATABASE MAG920 CONTROLFILE REUSE MAXLOGFILES 4 MAXLOGMEMBERS 2 MAXDATAFILES 100 MAXLOGHISTORY 1 MAXINSTANCES 1 LOGFILE GROUP 1 ('/EXPORT/HOME/MAG920/ORADATA/MAG920/LOG1A.RDO', '/EXPORT/HOME/MAG920/ORADATA/MAG920/LOG1B.RDO') SIZE 100M, GROUP 2 ('/EXPORT/HOME/MAG920/ORADATA/MAG920/LOG2A.RDO', '/EXPORT/HOME/MAG920/ORADATA/MAG920/LOG2B.RDO') SIZE 100M, GROUP 3 ('/EXPORT/HOME/MAG920/ORADATA/MAG920/LOG3A.RDO', '/EXPORT/HOME/MAG920/ORADATA/MAG920/LOG3B.RDO') SIZE 100M DATAFILE '/EXPORT/HOME/MAG920/ORADATA/MAG920/DATA01.DBF' SIZE 50M AUTOEXTEND ON, '/EXPORT/HOME/MAG920/ORADATA/MAG920/DATA02.DBF' SIZE 50M AUTOEXTEND ON, '/EXPORT/HOME/MAG920/ORADATA/MAG920/DATA03.DBF' SIZE 50M AUTOEXTEND ON UNDO TABLESPACE UNDOTBS_01 DATAFILE '/EXPORT/HOME/MAG920/ORADATA/MAG920/UNDO01.DBF' SIZE 100M REUSE AUTOEXTEND ON;
(b) 既存のデータベースに、create undo tablespace文を実行
SQL> CREATE UNDO TABLESPACE UNDOTBS_02 DATAFILE '/HOME/MAG920/ORADATA/MAG920/UNDO02.DBF' SIZE 100M REUSE AUTOEXTEND ON;
4.初期化パラメータについて
ここで登場する、UNDO_MANAGEMENT、UNDO_RETENTION、UNDO_TABLESPACE、また、
UNDO_SUPPRESS_ERRORSについては、「フラッシュバッククエリーに関する検証
その2」を参照して欲しい。
そこでは、初期化パラメータの追加・優先順位について説明している。
5.ロールバック・セグメントについて
詳細については、以前のメルマガ「ロールバック・セグメントに関する検証」を
参照して欲しい。役立つ情報が満載である。
さて、来週以降、この作成したUNDO領域を使っていろいろ検証していく。例えば、
UNDO領域の変更、その他のパラメータ変更、UNDOデータ統計、QUOTAについて
である。楽しみである。
以上、海が近いのに、山が私を呼んでいる茅ヶ崎にて