どなたか教えてください。

私の環境はOracle8です。

ロールバックセグメントの使用領域(空き領域)を知りたいのですが、
どうしたらわかりますか。
SQLを教えてもらうと助かるのですが。

よろしくお願いします。

A 回答 (2件)

ロールバックセグメントのサイズは、以下のSQLで取得可能です。



select v$rollstat.usn, name, rssize, status
from v$rollstat, v$rollname
where v$rollstat.usn = v$rollname.usn


正確なセグメントサイズを取得する場合、以下のSQLを発行します
が、オンラインになっているロールバックセグメントとオフライン
になっているロールバックセグメントの区別ができません。

select segment_name, tablespace_name, bytes
from sys.dba_segments
where segment_type = 'ROLLBACK'
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

お礼日時:2001/08/15 11:57

OracleをインストールしているマシンのOSは何ですか?



Windows NT/2000の場合、EnterPrise Managerか
Storage Managerで確認できますが。

もしStorage Managerが無い場合はSQLで確認することも
可能ですが、会社に行かないと資料が無いので(今は自宅です)
明日コメントします。

この回答への補足

回答ありがとうございます。
マシンはUNIXです(SunOS)

EnterPrise Manager等がないので
SQLで知りたいのです。
よろしくお願いします。

補足日時:2001/08/09 09:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMySQLでロールバックできない!

JDBCでMySQLに接続し、ロールバック/コミットしたいのですが、以下の例外が発生してロールバックできません。

java.sql.SQLException: General error: Warning: Some non-transactional changed tables couldn't be rolled back

同じコードで、PostgreSQLでは問題なく動作します。

MySQLはDBMSとして自動コミットになっているとのことですが、JDBCからロールバックしたいときはどうすれば良いのでしょうか?

有名な問題なのかもしれませんが、回避策が見つけられませんでした。
ご回答、よろしくお願いします。

Aベストアンサー

参考としてURL、日本MySQLユーザ会へのリンクを掲げます。
MySQL J-Docに詳細情報があります。
“6.7 MySQL Transactional and Locking Commands”
あたり、もしくは
“MySQL はどのように標準互換か?”
の章あたりが参考になるかもしれません。
わたしは試してみていないので、何ともいえませんが。

ちなみに、
例外のメッセージは、トランザクションを使わずに変更した
テーブルをロールバックすることはできません、というような
意味ですね。
何かこの辺のことは言うまでもない感じもしますが。

参考URL:http://www.mysql.gr.jp/

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

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

Aベストアンサー

こんにちわ
ロールバックセグメントは作成されていても、
オンラインになっていないと使用されませんので気をつけてください。
(まず、オンラインになっているとは思いますが。)

セッション側でロールバックセグメントを明示的に指定していなければ、
特定のロールバックセグメントだけを使うって事には基本的にならないはず。
(※何か要因があって、そのロールバックに集中してるかもしれませんが)

基本対処として、
DBサーバーに余裕があるなら、オンラインの
全てのロールバックセグメントの拡張をお勧めします。

通常の処理では問題ないが、ある特定の処理のときだけ
大量のロールバックセグメントを使用するという場合であれば、
一つのロールバックセグメントの領域を大きくし、
対象の処理だけを、No1の方のコマンドを使用して、
ロールバックセグメントを明示的に指定するという手もあります。

どちらにしろ、一度現在のロールバックセグメントの領域が、
適正かどうか見てみてはどうでしょうか?

Qロールフォワードとロールバックの違いは

コンピュータの勉強をしているのですが、ロールフォワードとロールバックの違いは何でしょうか?

Aベストアンサー

データベースでは一つのトランザクションが複数の表(あるいは行)を更新するのが普通です。
何らかの原因でトランザクション処理が中断(中止)された場合、複数の表の間に矛盾が生じることは避けなければいけません。
方法は一つ、更新前ジャーナルを使ってトランザクション開始前に戻すことです。これがロールバックです。

次にデータベース処理の高速化のためにジャーナルやデータベース更新情報をメモリーにバッファリングした場合です。
バッファーが蒸発する危険性がありますので時々全書き込みをやってバッファーを空にします。これがチェックポイントです。

ことが起こればジャーナルで最新のチェックポイントまでロールバックし、そのあとトランザクション終了ジャーナルを見つけて
終了ジャーナルがあればそこまで更新後ジャーナルで前進(ロールフォワード)し、
終了ジャーナルが見つからない場合トランザクション開始ジャーナルまで更新前ジャーナルで後退(ロールバック)をします。

重ねて言いますがトランザクション開始ジャーナルの所まで戻すのがロールバック、
トランザクション終了ジャーナルのところまで進めるのがロールフォワードです。

これらのことは原子性という言葉で表せます。Wikipediaによると

Atomicity トランザクションに含まれるタスクが全て実行されるか、あるいは全く実行されないことを保証する性質をいう。日本語ではアトミック性または原子性とも呼ばれる。 口座Aから口座Bに対し1万円送金する場合を考えたとき、送金操作は次の2操作によって行われる。

口座Aの残高から1万円を引く
口座Bの残高に1万円を加える
Atomicityが保証されるとは、上の操作1、2が全て行われるか、あるいは全く行われないことを指す。どちらか片方だけが実行された場合、銀行全体の預金残高に矛盾が発生してしまう。

データベースでは一つのトランザクションが複数の表(あるいは行)を更新するのが普通です。
何らかの原因でトランザクション処理が中断(中止)された場合、複数の表の間に矛盾が生じることは避けなければいけません。
方法は一つ、更新前ジャーナルを使ってトランザクション開始前に戻すことです。これがロールバックです。

次にデータベース処理の高速化のためにジャーナルやデータベース更新情報をメモリーにバッファリングした場合です。
バッファーが蒸発する危険性がありますので時々全書き込みをやって...続きを読む

QOracle9iで必要なインストール領域とメモリ領域について

Oracle9i(Database Enterprise Edition)を導入しようしており、必要なディスク容量
やメモリ量を見積もっています。環境はSolaris9です。
・インストール領域としてどれだけの領域が必要でしょうか?おおそよの数値で
 けっこうです。
・Oracleで使うメモリ容量を算出する方法があればおしえてください。
 「ここに出ていますよ」という情報でもけっこうです。

よろしくお願い致します。

Aベストアンサー

・インストール領域は多分100M前後だったと思います。が、データ領域を考えるとゴミみたいなものですから、意識する必要は殆ど無いかと思われます。

・メモリ必要量はインストール時に512MB必要です。実際にはDB設計及びデータ量、利用形態(プログラムの組み方等)によって大きく異なりますので個別の案件毎に対応が必要かと思われます。少なくともEEが必要な要件であれば最低でも1G以上になると思いますが・・・

Q一括更新の際のロールバックセグメント

 ただいまOracleの勉強中でふと気になったので、暇なときにでもお答えくださいませんか。

 A と B と二つのテーブルがあって、一方の値で他方を一括更新かけるのに、以下のような SQL を発行したとします。

UPDATE TABLE_A A
SET ( A.COL_1 ) =
(SELECT B.COL_2 FROM TABLE_B B, A WHERE B.COL_KEY = A.COL_KEY)

 この場合、A のデータがもし100万件あれば100万回、サブクエリーを実行して UPDATEをかけるといった処理が走ると思いますが、このとき、ロールバックセグメントも100万件分の大きさが必要になるのでしょうか?

 そして、もしロールバックセグメントが不足した場合は、全体がロールバックされて何もなかったことになるのでしょうか?

Aベストアンサー

更新の条件がすべて当てはまるのであれば、100万件のロールバックセグメントが必要になります。(実際は、もう少しいる)

まずひとつ、このSQL文を実行しても必ずしも100万回のサブクエリが走るとはいえません。Oracleのオプティマイザがもう少しいいパスを見つけるでしょう。

それから、先ほども書いたように、条件があわなければ、Updateをかけませんので必ずしも100万件の更新をするわけではありません。

ロールバックセグメントの容量が足りなくなれば、すべてロールバックされますので、何もなかったことになります。(件数によりますが、ものすごく時間はかかると思います)

Qロールバックとロールフォワード(データベーススペシャリスト試験)

  t0  t1  t2   t3   t4   t5
        |           |
A s---e  |           |
        |           |
B s-------------e       |
        |           |
C s------------------------|
        |           |
D       |   s----e   |
        |           |
E       |   s---------|

図がずれていたらごめんなさい。
A~Eはトランザクション
sはトランザクション開始
eはコミット
t0~t5は時間を表していて
時間t2でチェックポイント
時間t5で障害が発生したとします。

参考書によると復旧時に
CとEはロールバックを行い、
BとDはロールフォワードを行うとあります。

B、C、Dはわかるのですが
Eにロールバックが必要な理由がわかりません

Eを再び実行するためにはデータは
トランザクションを開始したt3時点の状態であればよいはずです。
そしてチェックポイント(=t2)の状態はt3と同じなので、
Eの更新前ファイルを使ってデータをロールバックする必要はないように思えます。

どこで間違っているでしょうか。。。

  t0  t1  t2   t3   t4   t5
        |           |
A s---e  |           |
        |           |
B s-------------e       |
        |           |
C s------------------------|
        |           |
D       |   s----e   |
        |           |
E       |   s---------|

図がずれていたら...続きを読む

Aベストアンサー

追加質問1への回答。
違います(違う可能性があります)。
質問文における図では t3における時刻の前後関係が読み取りにくいですが,トランザクションBのCOMMITが先でデータが確定。その後にトランザクションEが開始されてそのデータを読んでいるかもしれませんから。

追加質問2への回答。
前者はデータベース利用者が明示的に発行する"ROLLBACK"というSQL命令で,
自分が実行している1トランザクションに対してのみ対象とします。
後者はデータベース管理者がおこなう障害復旧操作で,
複数のユーザが実行している複数のトランザクションが対象となります。
ロールバックを実現する仕組みはどちらも同じですが,その対象範囲が異なります。

(1)トランザクション中のディスク書き込みについて。
「データベーススペシャリスト試験」ということですから,個別製品の技術ではなく,一般的な解答が望まれているんですよね……。
私が知っている例ですと,ORACLE Databaseという製品におけるCOMMITとは,REDOログファイルに書き込むことであって,データファイルに書き込むことではないんです。COMMIT=データファイルに書き込むこと,とは言えない例が実製品ではあるんです。
ただ,そのような製品実装に因らない一般的な解答としては,質問者が×をつけた,
  >コミットとチェックポイントにメモリからディスクに書き込まれ、
  >それ以外では書き込まれない(メモリ上で処理される)
で正しいように私は思うのですが。
この点,「それ以外にも随時書き込まれる」のはどういう場合か,No.1の回答者の方に教えていただけるなら私にとっても勉強になります。

(2)トランザクションのロールバックについて
○必ず更新前ログでディスクを上書きして終了,で正しいと思います。
  >チェックポイントがあったらディスクに途中状態で書き込まれている
というのは間違いでしょう。トランザクションCが確保中のデータに対して,別のトランザクションにしろチェックポイントにしろ書き込みを許すというのは,そもそも排他制御していないということで,その前提自体が間違っていると思います。
障害発生により,データファイル上に残っているデータそのものが信用できない,まだCOMMIT前でディスクには書き込まれていないので「データファイル上のデータは元のまま残っているはず」という前提が保証できない。だから,データファイル上のデータが現在どんな値であろうと,トランザクション開始時にコピーしておいた更新前データを上書きするんじゃないでしょうか。

Googleしていて次の資料を見つけました。p.28-29の説明が,特定の製品に因ることなく,分かりやすい説明だと思いました。ご参考までに。

白井 靖人(静岡大学 情報学部情報科学科・准教授)
 平成19年度前期「データベース論」講義情報
  第12回(7/02)障害回復,同時実行制御(講義資料)
http://arc0.pico.cs.inf.shizuoka.ac.jp/~shirai/h1900zenki/database/database.html
http://www.deainoba.jp/data/view_detail.php?subject_id=00769

追加質問1への回答。
違います(違う可能性があります)。
質問文における図では t3における時刻の前後関係が読み取りにくいですが,トランザクションBのCOMMITが先でデータが確定。その後にトランザクションEが開始されてそのデータを読んでいるかもしれませんから。

追加質問2への回答。
前者はデータベース利用者が明示的に発行する"ROLLBACK"というSQL命令で,
自分が実行している1トランザクションに対してのみ対象とします。
後者はデータベース管理者がおこなう障害復旧操作で,
複数のユー...続きを読む

Qwindows media player10をロールバックできません

こんばんは。突然ですがいきなり映像が表示されないようになりました(昨日まで表示されていたんですが…)エラーメッセージは「指定したプロトコルがサポートされていないため、ファイルを再生できません。[URL を開く] ダイアログ ボックスで URL を入力した場合は、別の転送プロトコル (たとえば "http:" または "rtsp:") を使用してファイルを開いてみてください。」と表示され再生できません
それで調べたらWindows Media Player 10でロールバックしたらいいと聞いたので試みたのですがどうしてもロールバックをしても失敗してしまいます。どうしたらいいですか?またロールバックをしたらライブラリのファイルは消えるのですか?
OSはwinXPです。機種はdynabookEX/2513CDSTVです
長文ですいませんがよろしくお願いします<m(__)m>

Aベストアンサー

>Windows Media Player 10でロールバックしたらいい

WMP11をダウンロードしてトラブルが多いためWMP10にロールバックするのは「コントロールパネル」「プログラムの追加と削除」上部「更新ファイルの表示」にチェックを入れ、表示されたWMP11を「削除」でWMP10にロールバックしますが、元々入っていたWMP10をWMP9にロールバックはできません。

QOracle バッファ領域について

Oracleでユーザをエクスポートした際に、ストアドプロシージャのところで、
ORA-01406 取り出された列の値は切り捨てられました
というエラーが出ました。

これはプログラム・バッファ領域が文字列全体を格納するために十分な大きさではない、という意味らしく、対処として、最大列値を保持できるよう列のバッファ領域を増やす必要があるようです。
具体的に何をすればいいのか、上の説明ではよくわかりませんでした。
(結局そのバッファ領域はどこで設定するのか等)
詳しい方がいれば、お教えください。
よろしくお願い致します。

Aベストアンサー

ORACLE7なら、
initorcl.oraというファイルを
いじくればよかったのですが…。

バージョンはいくつですか?
ORACLEのデータを
見るツールは何を使っていますか?

QWMP10のロールバックが出来ない

WMP10を9に戻したいのですが、コントロールパネルのプログラムの追加と削除でWindows XP-ソフトウェアの更新の中のWindowsMediaPlayer10の変更と削除のボタンをクリックしロールバックしますかのメッセージが出て、クリックすると直ぐ終了し「ロールバック完了しました」と出ますが、10のままです。
どうしたら出来るのでしょうか?
宜しくご教示下さい。

Aベストアンサー

>他に方法が無いとなるとOSの再インストールしかないですかね。

WMPはOSと一体となっているので、こうした不具合の場合は再セットアップするしかないと思います。
まあ、ダメ元でWMP11へバージョンアップしてからロールバックするのは有りですが。

QORACLEでの領域計算

ORACLEでCREATE TABLE文を実行する時の領域の計算方法
について教えてください。

サンプル
PCTFREE 10 PCTUSED 80
STORAGE (INITIAL 2000K
NEXT 1000K
MINEXTENTS 1
MAXEXTENTS 120
PCTINCREASE 0); で

INITIAL は初期値で
NEXTは増分値
MINEXTENTSは拡張最小回数
MAXEXTENTSは拡張最大回数

PCTINCREASEは良くわかりませんが、0にしておけば問題ないと書いてありました。
PCTFREE、PCTUSEDは良くわかりません。

テーブルを作成する時に1レコードのバイト数と、必要件数は分かります。

計算方法としては、1レコードのバイト数×必要件数を単純に計算すればよろしいのでしょうか?
増分値はあふれた場合に1回に拡張する値を指定すればいいのでしょうか?
あと、MAXEXTENTSは最大増分回数は意味があっていれば理解できますが、MINEXTENTSを指定する理由がわかりません。
PCTFREE、PCTUSEDは良く分かりません。通常はどんな値を指定するのでしょうか?

その他、テーブルを作成するにあたり注意するべき点が
ありましたら、ご指摘ください。
また、関連するURLがありましたら、教えてください。

よろしくお願いいたします。

ORACLEでCREATE TABLE文を実行する時の領域の計算方法
について教えてください。

サンプル
PCTFREE 10 PCTUSED 80
STORAGE (INITIAL 2000K
NEXT 1000K
MINEXTENTS 1
MAXEXTENTS 120
PCTINCREASE 0); で

INITIAL は初期値で
NEXTは増分値
MINEXTENTSは拡張最小回数
MAXEXTENTSは拡張最大回数

PCTINCREASEは良くわかりませんが、0にしておけば問題ないと書いてありました。
PCTFREE、PCTUSEDは良くわかりません。
...続きを読む

Aベストアンサー

こんにちわ。

> PCTINCREASEは良くわかりませんが、0にしておけば
> 問題ないと書いてありました。
その方が票領域のフラグメンテーションが発生
しにくいですね。
PCTINCREASE は、エクステントサイズの増加率です。
例えば先のサンプルで、PCTINCREASE=50 と設定してあると、
第1エクステントサイズ=INITIAL=2000K
第2エクステントサイズ=NEXT=1000K
第3エクステントサイズ=NEXT*1.5=1500K
第4エクステントサイズ=NEXT*1.5*1.5=2250K
となります。

> PCTFREE、PCTUSEDは良くわかりません。
PCTFREE は、UPDATE 文でデータ長が増えることを想定して、
予め確保しておく予備領域の割合です。
→ つまり、最初のINSERT 文でデータを投入する際には、
  各ブロックにPCTFREE (%) 分の空き領域が取られます。

PCTUSED は逆にデータが削除されていった時に、
ブロック内のデータ使用率がPCTUSED (%) を下回るまで
新しい行が追加されないと言う指定です。

PCTFREE/PCTUSED については、管理者ガイドに説明があります。
ユーザ登録が必要ですが、OTN Japan でPDF 形式のマニュアルを
公開していますので、こちらでDownload されてはいかがでしょうか?

> 計算方法としては、1レコードのバイト数×必要件数を単純に
> 計算すればよろしいのでしょうか?
まずは、各データブロックには、管理用の領域とPCTFREE 分の
空き領域が取られます。
管理用の領域は、Oracle のバージョンによっても異なりますが、
100Byte 前後と思ってください。
(管理領域よりも、PCTFREE とかの方が影響が大きいので)
(ブロックサイズ - 管理領域) * (1-(PCTFREE/100))
がデータを格納できる領域サイズです。
領域サイズが分かったら、1ブロックに何レコード格納
できるか計算して下さい。
1ブロックに格納できるレコード数が分かったところで、
最終的なレコード数から必要なブロック数を求めます。

> 増分値はあふれた場合に1回に拡張する値を
> 指定すればいいのでしょうか?
INITIAL エクステントに収まりきれなかった時に、次に獲得する
エクステントサイズを指定します。

> MINEXTENTSを指定する理由がわかりません。
運用を開始してから、動的エクステントの拡張が起きないように
事前に必要なエクステントを獲得しておくために指定します。
Oracle には、1つのエクステントサイズが2GB を超えられない
と言う制限がありますので、大規模表ではこれを指定して
事前にエクステントを割り当ててしまいます。

> PCTFREE、PCTUSEDは良く分かりません。
> 通常はどんな値を指定するのでしょうか?
表の性質によって違いますので、詳しくはマニュアル
で確認して下さい。

> その他、テーブルを作成するにあたり注意するべき点が
> ありましたら、ご指摘ください。
INITRANS, MASTRANS, FREELISTS, FREELIST GROUPS
等のパラメータがあります。
こちらもマニュアルで確認してみて下さい。

参考URL:http://otn.oracle.co.jp/

こんにちわ。

> PCTINCREASEは良くわかりませんが、0にしておけば
> 問題ないと書いてありました。
その方が票領域のフラグメンテーションが発生
しにくいですね。
PCTINCREASE は、エクステントサイズの増加率です。
例えば先のサンプルで、PCTINCREASE=50 と設定してあると、
第1エクステントサイズ=INITIAL=2000K
第2エクステントサイズ=NEXT=1000K
第3エクステントサイズ=NEXT*1.5=1500K
第4エクステントサイズ=NEXT*1.5*1.5=2250K
となります。

> PCTFREE、PCTUSEDは良くわかりません。...続きを読む


人気Q&Aランキング

おすすめ情報