ホームページ データベース mysql チュートリアル ORA-01291: missing logfile 事务闪回缺失日志

ORA-01291: missing logfile 事务闪回缺失日志

Jun 07, 2016 pm 02:50 PM
missing 事務 閃光

实验遇到的问题: 1、刚开始做前面的实验的时候,resetlogs重置了联机日志,导致闪回的时候总是报miss logfile的错误。 这个时候需要用noretlogs的方式重建控制文件,然后重新启动数据库到open状态。 SQL SELECT distinct xid,commit_scn FROM flashback_tran

实验遇到的问题:
1、刚开始做前面的实验的时候,resetlogs重置了联机日志,导致闪回的时候总是报miss logfile的错误。
这个时候需要用noretlogs的方式重建控制文件,然后重新启动数据库到open状态。
SQL> SELECT distinct xid,commit_scn FROM flashback_transaction_query t
  2  where table_owner='HR'
  3  and   lower(t.table_name) = 'employees'
  4  and   t.commit_timestamp > systimestamp - interval '90' minute
  5  order by t.commit_scn ;
XID              COMMIT_SCN
---------------- ----------
100004005E010000    2948380
0E0019005E010000    2948386

SQL> declare
  2  xids sys.xid_array ;
  3  begin
  4    xids := sys.xid_array('100004005E010000');
  5    dbms_flashback.transaction_backout(1,xids,options => dbms_flashback.cascade);
  6  end ;
  7  /
declare
*
ERROR at line 1:
ORA-55507: Encountered mining error during Flashback Transaction Backout.
function:krvxpsr
ORA-01291: missing logfile
ORA-06512: at "SYS.DBMS_FLASHBACK", line 37
ORA-06512: at "SYS.DBMS_FLASHBACK", line 70
ORA-06512: at line 5
此问题是我之前启动数据库时候重置了日志文件,导致数据库不读日志。需要重建控制文件。

shutdown immediate
startup nomount
alter database backup controlfile to trace as 'J:\app\wufan\diag\rdbms\orcl\orcl\trace\control.trac';
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'J:\APP\WUFAN\ORADATA\ORCL\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'J:\APP\WUFAN\ORADATA\ORCL\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'J:\APP\WUFAN\ORADATA\ORCL\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE


DATAFILE
  'J:\APP\WUFAN\ORADATA\ORCL\SYSTEM01.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\SYSAUX01.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\UNDOTBS02.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\USERS01.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\EXAMPLE01.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\UNDOTBS04.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\DATAFILE\O1_MF_UNDOTBS4_CK602RTP_.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\DATAFILE\O1_MF_TEST02_CK610HG8_.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\DATAFILE\O1_MF_TEST02_CK611OKD_.DBF',
  'J:\APP\WUFAN\ORADATA\ORCL\DATA_TEST01.BDF',
  'J:\APP\WUFAN\ORADATA\ORCL\HEAT01.BDF'
CHARACTER SET ZHS16GBK
;
--这种情况其实不需要恢复,你执行了这条命令它会告诉你没有什么可恢复的。
RECOVER DATABASE;
--打开所有的补充日志文件,可以不做
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
--打开系统归档,当前已经是归档状态,所以这条命令会报错,不用管
ALTER SYSTEM ARCHIVE LOG ALL;
--打开数据库
ALTER DATABASE OPEN;
至此,重建控制文件已经完成

重新进行试验
1、开两个事物
SQL> update hr.employees t
  2  set t.salary = t.salary * 2 ;
107 rows updated.
SQL> commit ;
Commit complete.
SQL> update hr.employees t
  2  set t.salary = t.salary * 1.1 ;
107 rows updated.
SQL> commit ;
Commit complete.
2、查询两个事物号
SQL> SELECT distinct xid,commit_scn FROM flashback_transaction_query t
  2  where table_owner='HR'
  3  and   lower(t.table_name) = 'employees'
  4  and   t.commit_timestamp > systimestamp - interval '15' minute
  5  order by t.commit_scn ;
XID              COMMIT_SCN
---------------- ----------
13001A0061010000    2983670
0F0021005D010000    2983677
3、执行事物闪回
SQL> declare
  2  xids sys.xid_array ;
  3  begin
  4    xids := sys.xid_array('13001A0061010000');
  5    dbms_flashback.transaction_backout(1,xids,options => dbms_flashback.nocascade);
  6  end ;
  7  /
declare
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [ktgRunStmt_5], [25153], [ORA-25153:
Temporary Tablespace is Empty
ORA-00600: internal error code, arguments: [ktgRunStmt_5], [25153], [ORA-25153:
Temporary Tablespace is Empty
], [], [], [], [], [], [], [], [], []
], [], [], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [ktgRunStmt_5], [25153], [ORA-25153:
Temporary Tablespace is Empty
], [], [], [], [], [], [], [], [], []
ORA-06512: at "SYS.DBMS_FLASHBACK", line 37
ORA-06512: at "SYS.DBMS_FLASHBACK", line 70
ORA-06512: at line 5
看着报错多吓人!其实问题就在于
[ORA-25153:
Temporary Tablespace is Empty
临时表空间是空的。下面就来确认这个问题:
--当前用户默认临时表空间
SQL> select username,temporary_tablespace from dba_users where username='SYS';
USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYS                            TEMP_01
--默认表空间逻辑上是联机的,没问题
SQL> select tablespace_name,status from dba_tablespaces where tablespace_name='TEMP_01';
TABLESPACE_NAME                STATUS
------------------------------ ---------
TEMP_01                        ONLINE
--物理上没有文件,问题就在这儿
SQL> select file_name,tablespace_name from dba_temp_files;
no rows selected
--确定临时文件是存在的,把该临时文件添加到表空间
SQL> alter tablespace temp add tempfile 'J:\app\wufan\oradata\orcl\temp01.dbf';
Tablespace altered.
--上面那条语句把文件对应到temp表空间了,其实sys的默认临时表空间是temp_01。
SQL> select tablespace_name,file_name from dba_temp_files;
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
TEMP
J:\APP\WUFAN\ORADATA\ORCL\TEMP01.DBF
--将错就错吧,就将sys默认表空间改成temp吧
SQL> alter user sys temporary tablespace temp;
User altered.
--查看是否改过来了
SQL> select username,temporary_tablespace from dba_users where username='SYS';
USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYS                            TEMP
重新进行实验:
开启连个事务:
--这边报了个错,因为做了很多次实验,现在这个薪水的值已经很大了,超出了字段的长度
SQL> update hr.employees t
  2  set t.salary = t.salary * 2 ;
set t.salary = t.salary * 2
                        *
ERROR at line 2:
ORA-01438: value larger than specified precision allowed for this column

SQL> commit ;
Commit complete.
SQL> update hr.employees t
  2  set t.salary = t.salary * 1.1 ;
107 rows updated.
SQL> commit ;
Commit complete.
--因为失败了一个语句,所以查询就只有3个事务。
SQL> SELECT distinct xid,commit_scn FROM flashback_transaction_query t
  2  where table_owner='HR'
  3  and   lower(t.table_name) = 'employees'
  4  and   t.commit_timestamp > systimestamp - interval '15' minute
  5  order by t.commit_scn ;
XID              COMMIT_SCN
---------------- ----------
13001A0061010000    2983670
0F0021005D010000    2983677
0D00050064010000    2984032
--执行回退到倒数第二个事务,用nocascade
SQL> declare
  2  xids sys.xid_array ;
  3  begin
  4    xids := sys.xid_array('0F0021005D010000');
  5    dbms_flashback.transaction_backout(1,xids,options => dbms_flashback.nocascade);
  6  end ;
  7  /
declare
*
ERROR at line 1:
ORA-55504: Transaction conflicts in NOCASCADE mode
ORA-06512: at "SYS.DBMS_FLASHBACK", line 37
ORA-06512: at "SYS.DBMS_FLASHBACK", line 70
ORA-06512: at line 5
--失败了,因为倒数第二个事务依赖于倒数第一个事务
--重新用cascade选项,把倒数第二个事务依赖的第一个事务一起回退掉
SQL> declare
  2  xids sys.xid_array ;
  3  begin
  4    xids := sys.xid_array('0F0021005D010000');
  5    dbms_flashback.transaction_backout(1,xids,options => dbms_flashback.cascade);
  6  end ;
  7  /
PL/SQL procedure successfully completed.
--过程执行成功,但是别忘了commit,oracle在过程里面并没有提交,需要你手动提交才能生效
SQL> commit ;
Commit complete.
SQL>




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ロック待機タイムアウトを超過しました。トランザクションを再起動してください - MySQL エラーの解決方法: トランザクション待機タイムアウト ロック待機タイムアウトを超過しました。トランザクションを再起動してください - MySQL エラーの解決方法: トランザクション待機タイムアウト Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction - MySQL エラーの解決方法: トランザクション待機タイムアウト。MySQL データベースを使用すると、一般的なエラーが発生することがあります: Lockwaittimeoutexceeded;tryrestartingtransaction。このエラーは、トランザクション待機タイムアウトを示します。このエラーは通常、次の場合に発生します。

Windows 7 の起動時にコンピューターのタスクバーが点滅し続け、画面が真っ暗な場合はどうすればよいですか? Windows 7 の起動時にコンピューターのタスクバーが点滅し続け、画面が真っ暗な場合はどうすればよいですか? Jul 12, 2023 am 10:49 AM

パソコンを起動するとタスクバーが点滅し続けてフリーズするという問題に遭遇したことがある方はいるか分かりませんが、win7を起動したときにタスクバーが点滅し続けて画面が真っ暗な場合はどうすればいいでしょうか?解決方法がわからない場合は、以下をご覧ください。 Windows 7 の起動時にタスク バーが点滅し続け、画面が真っ黒になった場合はどうすればよいですか? 1. この状況が発生した場合は、下のタスク バー アイコンをマウスをクリックし、ポップアップ ダイアログ ボックスでタスク マネージャーの実行を選択します。 。 2. タスクマネージャーに入ると、タスクマネージャーページが表示されます。 3. [タスク マネージャー] ページでファイル オプションを選択し、[タスクの作成] をクリックします。 4. 新しく作成したタスクを入力した後、「explorer.exe」と入力し、[OK] をクリックすると、タスクがデスクトップに表示されます。

MySQL トランザクション処理: 自動送信と手動送信の違い MySQL トランザクション処理: 自動送信と手動送信の違い Mar 16, 2024 am 11:33 AM

MySQL トランザクション処理: 自動送信と手動送信の違い。MySQL データベースでは、トランザクションは一連の SQL ステートメントです。すべての実行が成功するか、すべての実行が失敗するかのいずれかで、データの一貫性と整合性が保証されます。 MySQL では、トランザクションは自動送信と手動送信に分けられ、その違いはトランザクション送信のタイミングとトランザクションの制御範囲にあります。以下では、自動送信と手動送信の違いを詳しく紹介し、具体的なコード例を示して説明します。 1. MySQL が表示されない場合は自動的に送信する

bootmgr が見つからないため起動できません bootmgr が見つからないため起動できません Feb 20, 2024 pm 04:33 PM

bootmgr はブート管理プログラムの略称で、Windows オペレーティング システムの起動に重要なコンポーネントの 1 つです。コンピューターを起動するときに、「bootmgrismissing」エラー メッセージが表示される場合は、コンピューターが起動に必要なファイルを見つけることができないことを意味します。この問題は、ハード ドライブの障害、ブート ファイルの破損、セットアップの問題など、さまざまな理由で発生する可能性があります。以下では、この問題を解決するために考えられる解決策を検討します。解決策 1: 起動デバイスを確認する まず、次のことを確認する必要があります。

MySQL トランザクションの原則と適用シナリオ MySQL トランザクションの原則と適用シナリオ Mar 02, 2024 am 09:51 AM

MySQL トランザクションの原理と適用シナリオ データベース システムでは、トランザクションは一連の SQL 操作であり、これらの操作はすべて正常に実行されるか、すべて失敗してロールバックされます。一般的に使用されるリレーショナル データベース管理システムとして、MySQL はトランザクション特性をサポートし、データベース内のデータの一貫性、分離性、耐久性、アトミック性を保証できます。この記事では、MySQL トランザクションの基本原則から始めて、そのアプリケーション シナリオを紹介し、読者の参考となる具体的なコード例を示します。 MySQL トランザクションの原則: My

Java データベース接続はトランザクションと同時実行をどのように処理しますか? Java データベース接続はトランザクションと同時実行をどのように処理しますか? Apr 16, 2024 am 11:42 AM

トランザクションは、原子性、一貫性、分離性、耐久性などのデータベース データの整合性を保証します。 JDBC は、Connection インターフェイスを使用してトランザクション制御 (setAutoCommit、コミット、ロールバック) を提供します。同時実行制御メカニズムは、ロックまたはオプティミスティック/ペシミスティック同時実行制御を使用して同時操作を調整し、トランザクションの分離を実現してデータの不整合を防ぎます。

PHP PDO チュートリアル: 基本から習得までの上級ガイド PHP PDO チュートリアル: 基本から習得までの上級ガイド Feb 19, 2024 pm 06:30 PM

1. PDO の概要 PDO は、データベースを操作するためのオブジェクト指向の方法を提供する PHP の拡張ライブラリです。 PDO は、Mysql、postgresql、oracle、SQLServer などのさまざまなデータベースをサポートします。 PDO を使用すると、開発者は統合 API を使用してさまざまなデータベースを操作できるため、さまざまなデータベースを簡単に切り替えることができます。 2. PDO はデータベースに接続します PDO を使用してデータベースに接続するには、まず PDO オブジェクトを作成する必要があります。 PDO オブジェクトのコンストラクターは、データベース タイプ、ホスト名、データベース ユーザー名、およびパスワードの 3 つのパラメーターを受け取ります。たとえば、次のコードは、mysql データベースに接続するオブジェクトを作成します。 $dsn="mysq

Windows 10の黒い画面が継続的に点滅する問題を修正する Windows 10の黒い画面が継続的に点滅する問題を修正する Dec 23, 2023 pm 08:15 PM

win10 オペレーティング システムを搭載したコンピューターを使用しているときに、システムで黒い画面が表示され、コンピューター画面が頻繁に点滅し続けることがあります。この種の問題の場合、コンピューターのグラフィックス カードの問題が原因であるか、ハードウェアのメモリ モジュールの欠陥が原因である可能性があると思います。システムの互換性が不十分、ドライバーが破損しているなど。それでは、エディターが何をしたかを確認するために、具体的な解決手順を見てみましょう ~ Windows 10 で黒い画面が点滅し続ける場合の対処方法 1. 1. [設定] → [更新とセキュリティ] → [回復] に移動します; 2. [詳細なスタートアップ] を見つけて、 「今すぐ再起動」をクリックします; 3. 再起動後、最初の選択画面に入り、「トラブルシューティング」をクリックします; 4. 次に「詳細オプション」をクリックします; 5. 「起動設定」を選択します; 6. ここで

See all articles