ORA-01291: missing logfile 事务闪回缺失日志
实验遇到的问题: 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:appwufandiagrdbmsorclorcltracecontrol.trac';
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'J:APPWUFANORADATAORCLREDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'J:APPWUFANORADATAORCLREDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'J:APPWUFANORADATAORCLREDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'J:APPWUFANORADATAORCLSYSTEM01.DBF',
'J:APPWUFANORADATAORCLSYSAUX01.DBF',
'J:APPWUFANORADATAORCLUNDOTBS02.DBF',
'J:APPWUFANORADATAORCLUSERS01.DBF',
'J:APPWUFANORADATAORCLEXAMPLE01.DBF',
'J:APPWUFANORADATAORCLUNDOTBS04.DBF',
'J:APPWUFANORADATAORCLDATAFILEO1_MF_UNDOTBS4_CK602RTP_.DBF',
'J:APPWUFANORADATAORCLDATAFILEO1_MF_TEST02_CK610HG8_.DBF',
'J:APPWUFANORADATAORCLDATAFILEO1_MF_TEST02_CK611OKD_.DBF',
'J:APPWUFANORADATAORCLDATA_TEST01.BDF',
'J:APPWUFANORADATAORCLHEAT01.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:appwufanoradataorcltemp01.dbf';
Tablespace altered.
--上面那条语句把文件对应到temp表空间了,其实sys的默认临时表空间是temp_01。
SQL> select tablespace_name,file_name from dba_temp_files;
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
TEMP
J:APPWUFANORADATAORCLTEMP01.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>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Lockwaittimeoutexceeded;tryrestartingtransaction-如何解决MySQL报错:事务等待超时在使用MySQL数据库时,有时可能会遇到一个常见的错误:Lockwaittimeoutexceeded;tryrestartingtransaction,该错误表示事务等待超时。这个错误通常发生在并

不清楚大伙儿电脑上开机时是否有碰到电脑任务栏一直闪,而且也有死机的状况,win7开机电脑任务栏一直闪且黑屏怎么办呢?假如你永远不知道如何解决得话就看看下边的办法吧。.win7开机电脑任务栏一直闪且黑屏怎么办1.碰到这种的状况,在下边的任务栏图标点击鼠标点击,在弹出来的对话框里挑选运行任务管理器。2.在进到任务管理器之后,会发生任务管理器的网页页面。3.在任务管理器的网页页面选择文件选择项,点一下新创建每日任务。4.进到新创建每日任务后,键入explorer.exe,随后点一下明确,那样桌面上就能

MySQL事务处理:自动提交与手动提交的区别在MySQL数据库中,事务是一组SQL语句的集合,要么全部执行成功,要么全部执行失败,保证了数据的一致性和完整性。在MySQL中,事务可以分为自动提交和手动提交,其区别在于事务提交的时机以及对事务的控制范围。下面将详细介绍自动提交和手动提交的区别,并给出具体的代码示例来说明。一、自动提交在MySQL中,如果没有显示

bootmgr是引导管理程序的缩写,它是Windows操作系统启动的关键组件之一。当你在启动电脑时,如果出现"bootmgrismissing"的错误信息,意味着计算机无法找到启动需要的文件。这个问题可能是由于多种原因引起的,比如硬盘故障、引导文件损坏或设置问题等。下面我们将探讨可能的解决办法来修复这个问题。解决办法一:检查启动设备首先,我们需要确

win11更新后桌面一直闪什么原因如何修复?最近有用户发现自己的windows11系统在更新升级以后,桌面不停的刷新,导致屏幕看起来像是在不断的闪烁,完全无法正常使用。那么win11更新后桌面一直闪什么原因呢?又要如何解决呢?因此今天小编就给大家带来了win11升级后不断刷新闪屏的解决方法,用户们赶紧来看一下吧。win11升级后不断刷新闪屏解决教程方法一、调整设置1、最大的可能是更新开启了某项默认服务。按下快捷键"win+R"打开运行对话框,在框中输入"servic

PHP数据对象(PDO)扩展提供了与数据库服务器高效且面向对象的交互。其高级查询和更新功能使开发人员能够执行复杂的数据库操作,从而提高性能和代码可维护性。本文将深入探讨PDO的高级查询和更新功能,指导您掌握其强大功能。高级查询:使用占位符和绑定参数占位符和绑定参数是提高查询性能和安全性的重要工具。占位符使用问号(?)表示查询中可替换的参数,而绑定参数则允许指定每个参数的数据类型和值。通过使用这些方法,您可以避免sql注入攻击并提高性能,因为数据库引擎可以提前优化查询。//使用占位符$stmt=$

1.PDO简介PDO是PHP的一个扩展库,它提供了一个面向对象的方式来操作数据库。PDO支持多种数据库,包括Mysql、postgresql、oracle、SQLServer等。PDO使开发人员能够使用统一的api来操作不同的数据库,这使得开发人员可以在不同的数据库之间轻松切换。2.PDO连接数据库要使用PDO连接数据库,首先需要创建一个PDO对象。PDO对象的构造函数接收三个参数:数据库类型、主机名、数据库用户名和密码。例如,以下代码创建了一个连接到mysql数据库的对象:$dsn="mysq

学习MySQL的事务处理技巧有哪些?引言:事务是数据库管理系统中非常重要的概念,它提供了一种保证数据完整性和一致性的机制。在MySQL中,事务是一组SQL语句的执行单元,可以保证这组SQL语句要么全部执行成功,要么全部执行失败回滚。本文将介绍学习MySQL的事务处理技巧,并给出相应的代码示例。开启事务:在MySQL中,可以使用BEGIN、STARTTRAN
