• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Oracle 11g コミットのタイミングについて)

Oracle 11g コミットのタイミングについて

このQ&Aのポイント
  • Oracle 11gのコミットのタイミングについて、REDOログバッファがREDOログファイルに書き出されるタイミングはコミットした時、3秒毎、REDOログバッファが3分の1になった時、DBWnがデータファイルに書込むときの4つがあります。
  • しかし、質問者が試してみた結果では、3秒毎にコミットされていないことがわかりました。コミットしないまま3秒以上経過しても、名前列の更新が反映されず、コミット後に確認したところ、更新が適用されました。
  • 質問者は、「3秒毎」の意味が分からないと述べています。この場合、Oracle 11gのコミットが3秒毎に自動的に実行されるわけではなく、手動でコミットする必要があるようです。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

・3秒毎 ・REDOログバッファが3分の1になった時 はいずれもトランザクションがコミットされているという保証はありません。 逆に言えば、コミットされた時点で「このトランザクションはコミットされた」という情報もログファイルに書き込んでいるのです。 (6)name列確認 結果⇒test01 のタイミングではコミットされていませんので、UNDOデータを読みに行って「test01」を返しています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

> 3秒毎とはどういったことなのでしょうか。 「REDOログバッファがREDOログファイルに書き出されるタイミング」です。 「3秒毎にコミットする」わけではありません。 #そんなことされたら大変でしょう?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • oracleエラーなどに関して

    例えばREDOログファイルからアーカイブログファイルに書き込みをしている際(自動に)にエラーが起こったとします。(ORA-00257このエラー??)こんな場合、エラーメッセージはどのタイミングでユーザに表示をするのですか??ふつうは何かsql文を発効し、その要求に対してoracle error起こったことが表示されますよね。

  • 「トランザクション処理」について質問

    Oracle Database 11g の 「トランザクション処理」について質問。 認識:UPDATE文が発行されるとキャッシュに更新前の情報(UNDOセグメント)が生成される。 REDOログバッファにREDOログを生成する。 UPDATE文が正しく行われたことを、プロンプトに返す。 この時、REDOログファイルにはまだ書き込まれていない。 データファイルにも書き込まれていない。 質問:このコミットされていない状態で、障害が起きた(メモリが飛んだ)場合、 コミット前の状態にしか戻れないですか? データベースの概要のACID特性の一貫性は、 トランザクションの一貫性ということですか? また、UPDATA文を発行し、プロンプトが返ってくるが、 これは嘘になりえるっていうことでしょうか? よろしくおねがいします。

  • grep,cutで取得した文字の前後へ追記

    お世話になります。 ログファイルを集計し、SQL化するバッチファイルを作っている者です。 下記で取得した各文字列に対し、 cat $file_name | grep $target | cut -d ' ' -f 5 >> hogera.txt 下記のように前後に文字列を追加し、SQL化したいと思っています。 (出力結果1, 'test'), (出力結果2, 'test'), (出力結果3, 'test'), ですが、実装方法が不明な状況で困っています。 ご教授頂けませんでしょうか。

  • Oracle RMANでのリカバリ

    ORACLE9iのRMANでリカバリの検証をしていますが、 上手くいきません。 RMANに詳しい方、ご教授下さい。 運用時、RMANのバックアップ(フルバックアップ、アーカイブログバックアップ)は日々行っており、 OS丸ごとのバックアップは月ごとに行っています。 それで、HDD障害が起こったときに、OS丸ごとバックアップを利用してバックアップした日(月初)に戻して、 本日のRMANのバックアップを利用して、リストアができるかを検証しています。 [環境] Oracleのバージョン[Oracle9i 9.2.0.7.0] アーカイブモード [検証内容] (1).DBの設定、RMANの設定 -> (2).REDOログのCURRENT確認 -> (3).Windowsの機能でバックアップ -> (4).REDOログが上書きされてアーカイブログがはかれるまでDBのテーブルにデータを追加 -> (5).RMANでバックアップ -> (6).REDOログのCURRENT確認((2)のときのCURRENTが異なるようにした) -> (7).(3)のバックアップを使ってWindowsの機能で復元 -> (8).(5)のRMANバックアップデータ (フルバックアップデータ、アーカイブログバックアップデータ)を置換して、RMANのリストア (2)の時点のREDOログの状態を「select * from v$log」で確認したところ、 GROUP#2がCURRENTでした。 GROUP# SEQUENCE# ARCHIVE STATUS 1 2 YES INACTIVE 2 3 NO CURRENT 3 1 YES INACTIVE (6)の時点のREDOログの状態を確認したところ、 GROUP#3がCURRENTでした。 GROUP# SEQUENCE# ARCHIVE STATUS 1 11 YES INACTIVE 2 12 YES ACTIVE 3 13 NO CURRENT (8)のとき、「RMAN> restore database;」のコマンドを打ったとき、下記のエラーが出てきて、 リストアできませんでした。 エラー「ORA-19612:データ・ファイル1はmissing or corrupt dataのためリストアされませんでした。」 CURRENTの状態、位置によってリストアできたりできなかったりするのでしょうか? SEQUENCE#の値を変更、もしくは、アーカイブログのバックアップから、REDOログをリストア する必要があるのでしょうか? または、他に必要な設定をする必要があるのでしょうか? リカバリするときのコマンドは、下記の通りです。 SET ORACLE_SID=<SID名> rman target / catalog rman/rman@RMAN RMAN> STARTUP NOMOUNT RMAN> RESTORE CONTROLFILE; RMAN> ALTER DATABASE MOUNT; RMAN> RESTORE DATABASE; RMAN> ALTER DATABASE OPEN RESETLOGS; 前回、同じようなやり方でリストアしたときは、上手く行きました。 そのときは、下記のような状態でした。 ((4)のときのデータ件数は少し異なり、(6)の時点でGROUP#1がCURRENTでした。) GROUP# SEQUENCE# ARCHIVE STATUS 1 11 NO CURRENT 2 9 YES INACTIVE 3 10 YES ACTIVE 以上、宜しくお願いします。

  • mySQLでロールバックされずコミットされる

    お世話になっております。 現在JavaのjdbcでmySQLに接続してデータを更新する処理を入れているのですが AutoCommitをfalseにしておりrollbak処理をしているにも関わらず commitがされている状態になっています。 ログ出力にてメソッド内でsetAutoCommitがfalse、 rollbakが実行されていて、commitが実行されいないのは確認済みですが 実際にはデータがロールバックされずcommitされたのちに コネクションが閉じられています。 このような勝手なコミットがされてしまう原因で 他に何か思い当たる確認点はないでしょうか? ご力添えお願いします。

    • ベストアンサー
    • Java
  • oracle sql developerについて

    oracle sql developerを現場でインストールしました。 現場ではネットは全くつながっておりません。 postgreSQL2005は使用したことがあるのですが、 oracle sql developerは今まで全く使用したことが無く「インストールしてテスト台帳につなげてDB内容確認して」とか言われても正直困っております。 既存で作成されている「テスト台帳」にどうやって接続をすればいいのでしょうか? 設定方法やコネクトの手順がわかる方いましたらアドバイスをいただけないでしょうか? 現段階ではoracle sql developerをインストールしただけです。

  • 統計情報の取得=コミットですか?

    いつもお世話になっております。 あるシステムの処理で 大量データ挿入⇒統計情報の取得⇒挿入したデータを基にファイル作成 という処理を行っております。 ファイル作成時に失敗した際に、ロールバック処理を行うように 設定しているのですが、既にデータが挿入されてしまっています。 初心者でいまいち統計情報の取得が良く分かっていないのですが、 統計情報を取得するSQL文を流した時点でトランザクションは コミットされるのでしょうか? よろしくお願い致します。

  • ASPでのOracleへの接続

    いつもお世話になっています。 ASPでのOracleへの接続について質問させていただきます。 ASPファイルの中でOracleへ接続し、テーブルを更新するストアドファンクションを呼び出す処理を作成しているんですが、そのASPファイルを開くと 次のようなエラーが表示されてしまいます。 //////////////////////////////////////////////////////// エラー タイプ Microsoft OLE DB Provider for Oracle (0x80040E14) ORA-06550: 行1、列7: PLS-00221: 'TEST_T_FUNC'がプロシージャではないか、または未定義です。 ORA-06550: 行1、列7: PL/SQL: Statement ignored /test_asp.asp, line 113 //////////////////////////////////////////////////////// 呼び出し先がプロシージャの場合はテーブルは正常に更新されますが、 ファンクションだと上のエラーが起こってしまうようです。 ファンクションを呼び出しても正常に更新されるようにしたいのですが どのようにすればいいでしょうか? よろしくお願いします。

  • Oracle12cでユーザのSQLPLUSログイン

    基本的な質問ですみません。Oracle 12cを初めて使うのですが、すごく単純に、ユーザを作成し、そのユーザでデータベースオブジェクト(テーブルなど)を作成する拡張子が.sqlのスクリプトを流したいです。 11gまでの場合、システムユーザでCREATE USERしたのちに、コマンドプロンプトを立ち上げて C:\Scripts> SQLPLUS <USER>/<PASSWORD> @createtables.sql とするだけで良かったと思います。 今回、12cではユーザの考え方が変わっており、CDBとPDBを作成しました。 > SQLPLUS /NOLOG SQL> CONN SYS AS SYSDBA (上記のようにローカル接続するとCDBに接続される) SQL> ALTER SESSION SET CONTAINER=PDB1; // PDBへ移動 SQL> SHOW CON_NAME // 念のため現在接続中のPDBの名前確認 SQL> STARTUP; (これでマウント状態だったPDB1がOPENしてREAD WRITEになる) この状態でCREATE USER文を実行してPDB1上でユーザを作成。 ここからなんですが、PDBやCDBへのログイン方法はわかたのですが、PDB上で作成したユーザにはどのようにしてログインするのでしょうか? ログインしてテーブル作成をしたいです。また、テーブル作成のスクリプト文(.sql)があるのでそれを流したい場合は、コマンドプロンプトからどのように実行すればよいでしょうか? 基本的な質問で恐縮ですが、宜しくお願いします。

  • オンラインREDOログ障害からの復旧方法について

    現在、Oracle11g Release2 11.2.0.3(ASM使用) の環境で、オンラインREDOログファイルが全て消失した場合を想定して、以下の手順で復旧の方法をテストしています。 ----- 1.sqlコマンドでテーブルに1件データを挿入する。 2.フルバックアップ(バックアップセット)を取得する。 3.sqlコマンドでテーブルに1件データを挿入する。 4.累積増分バックアップを取得する。 5.sqlコマンドでテーブルに1件データを挿入する。 6.DBをシャットダウンする。 (RMAN> shutdown immediate;) 7.オンラインREDOログファイルを全て削除する。 8.DBをマウントする。 (RMAN> startup mount;) 9.リストアをする。 (RMAN> restore database;) 10.バックアップの際に除外している表領域をオフラインにする。 (SQL> Alter database datafile '+DATA/orcl/DATAFILE/hoge2' offline drop;) 11.リカバリをする。 (SQL> recover database using backup controlfile until cancel;) (ログの指定は AUTO) 12.DBをオープンする。 (RMAN> alter database open resetlogs;) 13.sqlコマンドでテーブルの中を確認する。 (SQL> select * from HOGEHOGE;) (データが1件) ----- 上記の手順でDBをオープンにするところまで上手くいったのですが、 私の考えでは、13でテーブルを確認するとデータが2件はいっていると思ったのですが、 結果は、1件だけでした。 累積増分バックアップを取得した時点(データが2件入った状態)まで戻したいのですが、 解決の手がかりになる情報などがございましたらご教示いただけますでしょうか。 よろしくお願いします。