
表領域をオフラインにした場合、オフライン前に開始されたトランザクションは有効ですが、オフラインのまま、コミット、または、ロールバックして、表領域をオンラインにしても、整合がとれるのはなぜなのでしょうか。
コミットするか、ロールバックするかの情報はどこに保持してるのか疑問です。
(オフラインにしてから、ファイルをリネームし、
トランザクションをロールバックして、
ログをアーカイブし、DB再起動後に、ファイル名を戻して、
オンラインにすると、ちゃんとロールバックされています。
同じ操作で、コミットするとちゃんとコミットされています。
知っている方には当然なのでしょうが、私にとっては、不思議です)
詳しい方がみえましたらご教授お願いいたします。
No.6ベストアンサー
- 回答日時:
データベース概要のマニュアルに
「表領域がオフラインになると、Oracleでは後続のSQL文でその表領域内に含まれるオブジェクトを参照できなくなります。表領域内のデータを参照する完了済の文を含むアクティブ・トランザクションは、トランザクション・レベルでは影響を受けません。それらの完了済の文に対応するロールバック・データは、SYSTEM表領域にある遅延ロールバック・セグメントに保存されます。表領域が再びオンライン化されると、このロールバック・データは必要に応じて表領域に適用されます。」
とあるので「SYSTEM表領域にある遅延ロールバック・セグメントに保存」されるようです。
ありがとうございます!!
まさに、知りたかった内容が、"遅延ロールバック・セグメント"
を検索することで知ることができました。
本当にありがとうございました!
No.5
- 回答日時:
>ひょっとして、オフラインの表領域のトランザクションが未確定の場合、
>ログスイッチによって、その部分のログがアーカイブされないで
>カレントログに残るってことでしょうか?
「オフラインの表領域のトランザクションが未確定の場合、」というのはcommit/rollbackしていないトランザクションを指しますか?
commit/rollbackしていないトランザクションはREDOログバッファにあって、REDOLOGファイルには基本的には入りません。
(例外:REDO ログ・バッファがいっぱいになるか、別のトランザクションがコミットされるなどでREDOログファイルに含まれます)
表領域をオフラインにする際(NORMAL(デフォルト)指定)、データベースは表領域のデータ・ファイルすべてのチェックポイントを取ってから、それらのファイルをオフライン化します。
この回答への補足
>ひょっとして、オフラインの表領域のトランザクションが未確定の場合、
すいません。
オフラインの表領域のトランザクションがコミット・ロールバックされた場合
の間違いでした。
>表領域をオフラインにする際(NORMAL(デフォルト)指定)、データベースは表領域のデータ・ファイルすべてのチェックポイントを取ってから、それらのファイルをオフライン化します。
そのとおりなのですが、、
わからないのは、オフライン化の後で、コミット・ロールバックした場合、
その情報をどこに保持してるかが知りたいのですが、、、。
No.4
- 回答日時:
あまり自身ないですが・・・。
変更の情報はREDOログにあります。
インスタンスリカバリに関してはcommitした/しないに関わらず、適用し、その後にcommitしていない情報をrollbackします。
REDOログに残っているのであれば、インスタンスリカバリでREDOが適用されてcommitされた内容が表示されているのだと思います。
#REDOログが上書きされるタイミングで対象表領域すべてがOFFLINEだとどうなるかは不明ですけど・・・
また、トランザクションがコミットされると、ロールバックまたはトランザクション・リカバリの実行にUNDO データは不要になります。とマニュアル(10g)にあるのでcommit後のUNDOの変更は関係ないと思います。
この回答への補足
回答ありがとうございます。
>変更の情報はREDOログにあります。
>インスタンスリカバリに関してはcommitした/しないに関わらず、適用し、その後にcommitしていない情報をrollbackします。
>REDOログに残っているのであれば、インスタンスリカバリでREDOが適用されてcommitされた内容が表示されているのだと思います。
ひょっとして、オフラインの表領域のトランザクションが未確定の場合、
ログスイッチによって、その部分のログがアーカイブされないで
カレントログに残るってことでしょうか?
ただ、検証が難しそうですね、、。
No.3
- 回答日時:
> 不完全リカバリになるのではないかな・・・
「ログをアーカイブし、~」と書かれていますから
アーカイブログ運用しているということですよね。
不完全リカバリになる。ではなくアーカイブを使って
完全リカバリ可能に訂正いたします。
No.2
- 回答日時:
UNDO表領域を変更とは
正常なUNDO表領域の切り替えですか?メディアリカバリですか?
デフォルトの切り替えであればUNDOセグメントヘッダ情報が
移動したのではないでしょうか
この回答への補足
以下のようにUNDO表領域をUNDOTBS01 -> UNDOTBS02に変更しました。
shutdown immediate;
startup nomount;
alter system set undo_tablespace = 'UNDOTBS02' scope=spfile;
alter database mount;
alter database open;
オープン時には、UNDOTBS01にはoracleからアクセスできないと思うので、
UNDOセグメントヘッダ情報が移動はできないような気がするのですが、、
No.1
- 回答日時:
質問内容はデータ表領域がオフラインなのになぜコミットできるかというと同じです。
コミット操作はUNDOセグメント(ロールバックセグメント)ヘッダの
トランザクション表にSCN付きで記録されますのでデータ表領域のIOは遅延することができます。
次の表アクセス時にUNDOセグメントヘッダからデータ表領域に書き込まれます。
シャットダウンしてUNDO表領域も同時に壊しておくと、たぶんオフライン前までの
不完全リカバリになるのではないかな・・・
この回答への補足
回答ありがとうございます。
早速、以下のように検証してみました。
更新処理 -> オフラインに変更 -> コミット -> シャットダウン
-> UNDO表領域を変更 -> オープン -> オンラインに変更
残念ながら、正しくコミットしたデータが確認できてしまいました。
ロールバックでも正しくロールバックしたデータが確認できました。
ひょっとして、SYSTEM表領域にこっそり情報を保持してるんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パーティション、未割当ての利...
-
表領域の作成について
-
クローンソフトで、Acronis Tru...
-
AccessでORA-01114
-
xy平面上の点P(x,y)に対し,点Q(...
-
「.ora」「.dbf」の違い
-
北朝鮮のミサイルについて
-
sysauxの読み方について
-
なぜ再起動すると空き領域が増...
-
SQLSERVERでも表領域は作れます...
-
Oracle9i RAID0+1のデータファイル
-
HDDの代替領域のサイズについて
-
ORA-01013のエラーについて経験...
-
VBAでURLをブラウザで起動させたい
-
ORA-01843: 指定した月が無効で...
-
VBScript 実行時エラーについて
-
サービスの再起動を自動で
-
DOSプロンプトとコマンドプロン...
-
【Oracle】リモートでのimpコマ...
-
【oracle10g 】Oracle Enterpri...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
xy平面上の点P(x,y)に対し,点Q(...
-
北朝鮮のミサイルについて
-
クローンソフトで、Acronis Tru...
-
4GB = 4096MB ではない?
-
フォルダウィンドウのデータフ...
-
新規表領域の作成について
-
表領域の作成について
-
なぜ再起動すると空き領域が増...
-
データファイルの拡張
-
HDの不良クラスタをパーティシ...
-
どうしてpn接合ではp領域とn領...
-
表領域 TEMPの使用率。
-
sysauxの読み方について
-
DB容量の確認方法
-
エクセルVBAでRangeの引数制限?
-
「.ora」「.dbf」の違い
-
Oracle バッファ領域に...
-
HDDの代替領域のサイズについて
-
空のDVDの見分け方
-
AccessでORA-01114
おすすめ情報