oracleの自動undo管理モードについて

このQ&Aのポイント
  • oracleの自動undo管理モードへの移行を検討しています。手動管理よりも自動管理の方が効果的かどうかを検証しました。
  • v$rollstatのwaitsや拡張(extends)を小さくすることは重要ですが、多少の拡張はパフォーマンスに影響がないかもしれません。
  • 自動undo管理モードでの運用経験については、困ったことはないようです。自動拡張後の縮小方法については確認済みです。
回答を見る
  • ベストアンサー

oracleの自動undo管理モードについて

現在、oracle9iで手動undo管理(rollback segmentによる管理)を 行っていますが、 ・負荷の高いバッチ処理は特定の大きいロールバックセグメントを使用 ・小さいオンライン処理は小さいロールバックセグメントを使用 というような細かいプログラム管理は行っておらず手動undo管理を 行うメリットがないため自動undo管理への移行を検討しています。 まずテスト環境を自動undo管理モードにしてさまざまな処理を流して v$rollstatを確認してみたのですが、短い時間にも関わらず 拡張(extends)が5くらい発生していました。 今まで、v$rollstatのwaitsや拡張(extends)をできるだけ小さく することを意識して運用を行ってきたのですが、多少の拡張は それほどパフォーマンスに影響はないものでしょうか。 また、自動undo管理モードで運用して何か困ったような経験が あれば教えてもらえないでしょうか。 (自動拡張後の縮小方法については確認しました。)

  • fuyu
  • お礼率69% (145/210)
  • Oracle
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

RBSのサイズや個数の管理(計算)をあまり考えなくてよい点から、検証もせずに9iのDBは自動UNDO管理にしています(汗)。 また、データベース管理者ガイドに UNDO領域の管理にロールバック・セグメントを使用する機能は 将来のリリースで廃止される予定なので、できるだけ自動UNDO管理を使用するように。というようなちょっとした脅し?文句も書かれています。 UNDOに関する検証が「おら!オラ!Oracle -どっぷり検証生活」 http://www.insight-tec.com/mailmagazine/ora3/vol135.html に載っています。 >また、自動undo管理モードで運用して何か困ったような経験が >あれば教えてもらえないでしょうか。 UNDO領域が破損すると、DBをバックアップから復旧するしか方法が無いことでしょうか。(SYSTEM表領域と同じ扱いになる) #RBSの時ってどうだったかな?忘れてしまいました。 #あまり参考になってないような気がする・・・

関連するQ&A

  • UNDO表領域の拡張について

    Oracle9iにてUNDO表領域を自動拡張ではないため手動にて拡張(512M→1024M)しようとしております。 UNDO表領域:/oradata/undotbs01.dbf 表領域をオフライン(alter tablespace '/oradata/undotbs01.dbf' offline;)にすることなく以下のSQL文のみで拡張することは可能でしょうか? SQL> alter database datafile '/oradata/undotbs01.dbf' resize 1024M; ご教授の程、宜しくお願い致します。

  • UNDO表領域(AUTOEXTENDのデフォルト値)

    Oracle9iを使っています。 インスタンス作成時に自動UNDO管理モードで、UNDO表領域を指定しています。(CREATE UNDO TABLESPACE ~) 名前、ファイル、サイズ等は指定しているのですが、「AUTOEXTEND ON|OFF」パラメータを指定していません。 (1)この場合、AUTOEXTENDのデフォルト値はON,OFFどちらになっているのでしょうか? (2)UNDO表領域を使い切った場合、AUTOEXTENDの値によってどのような動作をするのでしょうか? よろしくお願いします。

  • UNDO_RETENTION初期化パラメータについて

    ORACLE9iを自動UNDO管理モードで使用しています。 マニュアルによるとUNDO_RETENTIONはコミット後のデータの保存期間(目標値)を設定するもので、用途はフラッシュバック問い合わせ、読み取り一貫性の保障であるということですが。 質問:クエリー(SELECT)を投げた時点の対象テーブルの状態(スナップショット)もUNDO表領域に置かれ、UNDO_RETENTIONの期間保存されるのでしょうか? そうすると「UNDO_RETENTIONはコミット後のデータの保存期間」というのとは少し違ってくるのかと思うのですが。。。 経緯:1時間ほど掛かる問い合わせで発生するORA-01555(スナップショットが古すぎます)のエラー対策の検討をしていところです。 よろしくお願いします。

  • オラクルのロールバックセグメントって

    教えて下さい。 oracleのロールバックセグメントって標準では RB1~RB5ですよね。 また、RB1からRB5までの振り分けっていうのは オラクルが自動的にしてくれてると認識してるのですが・・・ さておき、あるセグメント(例えばRB3)などが 集中的に使用されていて競合が発生し、レスポンス劣化に 繋がって困っています。私自身オラクル初心者なのですが 何か解決方法ってあるのでしょうか? ちなみにオラクルは7.3.4で言語はVB5で開発しています。

  • ロールバック セグメントの指定

    バッチ処理にてCOMMIT間隔が大き過ぎてエクステントの拡張が発生しました。 エクステントを拡張は避けたく、COMMIT間隔を小さくしたのですが、 改善効果を、確認したいと思っております。 他のトランザクションもある試験環境なので、alter文?にてバッチ処理が 使用するロールバックセグメント番号を指定し、改善前/後で、V$ROLLSTATで確認 したいのですが、実施方法をご教授頂けないでしょうか? ※ロールバック・セグメント番号 = V$ROLLSTAT.USN

  • ActiveX DLLでのオラクルのトランザクション

    VB6とOracle9iのOO4Oにてシステムを構築しておりますが、一つ解らないことがありましたので、どなたかご教授願います。 あるPG(通常のEXEです)よりActiveX DLLを呼び出してOracleの表へデータを挿入する処理があります。呼び出し元となる通常のEXEはまずOracleの接続処理を記述しています。正常に接続が完了したならトランザクションを開始し、表のDeleteを実行します。その後ActiveX DLLを呼び出して表のInsertを実行しています。再び通常のEXEに制御が戻り、トランザクションの完了(COMMIT)または破棄(ROLLBACK)を行います。しかし、最後のトランザクションのCOMMIT(ROLLBACK)を行うと『コッミト(ロールバック)時にアクティブなトランザクションがありません』というエラーが発生してしまいます。正しくBegin Transactionを実行しているのに、これはどういうこと何のでしょうか。ご存知の方がいらっしゃましたら教えてください。

  • Oracleデータベース

    Oracleのデータベース設計についてです。なん点かあります。 1.CREATE DATABASE文で表領域の指定の箇所でEXTENT MANAGEMENT LOCAL UNIFORM SIZEとあるのですがここではエクステントの管理方式を指定していると思うのですが、SIZEは何を基準にきめたらよいのでしょうか?データブロックサイズは8KBです。 2.SYSTEM,SYSAUX,UNDO,TEMP,USERの中で表領域の自動拡張を選ぶときに何か決める基準があれば教えてください。 3.SYSAUX表領域をCREATE DATABASE文で作成時にサイズを設定する個所では何を基準に決めたらよいですか? ひとつでも教えていただけたら嬉しいです。

  • 一括で登録する場合のデータサイズについて

    ある登録処理で一気に登録する為、データサイズに問題がないか調べたい。 ロールバックセグメントはどこを見ればわかるのでしょうか? 他に見なければならないところがあればご教授お願い致します。

  • PHP+MySQLでrollback出来ない

    PHP5 + MySQL5環境です。 以下のようなソースでロールバックさせたいのですが、 実行後、「phpMyAdmin」というDB操作ツールで対象テーブルを見てみると データが登録されてしまっています。(ロールバック出来ていない!?) どなたか原因がお解りでしたらご教授の程宜しくお願い致します。m(_ _)m ※ソースが見難いので、画像で見やすいものを添付します。 ※尚、catch句のデバッグは「bool(true) ロールバック実行」と返ってきます。 //***メイン処理ソース***************************** $sObj = new SQL_Controller(); $res = $sObj->tran_start(); if(!$res) exit; try{ //DB登録------------------ $res1 = $sObj->Customer_mst_Insert($_SESSION['CustomerInfo']); if(!$res1) throw new Exception("Customer_mst_Insert error"); throw new Exception("★rollbackテストの為、ここでワザとthrowしてみる★"); //コミット------------------ $sObj->tran_commit(); } catch(Exception $e) { //異常時はロールバックする-- $res = $sObj->tran_rollback(); var_dump($res); echo "ロールバック実行"; } //***↑メイン処理終わり。以下クラス。***************************** class SQL_Controller extends MySQL{ } class MySQL{ function query($sql){ //クエリ実行 return mysql_query($sql); } function tran_start(){ //■トランザクション開始------ try{ $res = $this->query("set autocommit = 0"); if(!$res) throw new Exception(); $res = $this->query("begin"); if(!$res) throw new Exception(); } catch(Exception $e) { return false; } return true; } function tran_commit(){ //■コミット------ return $this->query("commit"); } function tran_rollback(){ //■ロールバック------ return $this->query("rollback"); } }

    • ベストアンサー
    • PHP
  • 表領域拡張の必要性

    Windows2003サーバ上でORACLE10g リリース2を使っています。 ORACLEのインストールは、ほぼデフォルト設定にしてあります。 ORACLEのエンタープライズマネージャで表領域を見ると SYSAUX  サイズが550Mで使用量が540M、セグメント領域の管理=自動 SYSTEM  サイズが560Mで使用量が555M、セグメント領域の管理=手動 となっていました。 オーバーフローしないか心配なのですが、セグメント領域を拡張する必要はあるのでしょうか?。 ちなみにテーブルの表領域はUSERS で残りも60%以上あります。 よろしくお願いいたします。