데이터 베이스 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

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를 입력한 후 확인을 클릭하면 바탕화면에 나타납니다.

MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 Mar 16, 2024 am 11:33 AM

MySQL 트랜잭션 처리: 자동 제출과 수동 제출의 차이점 MySQL 데이터베이스에서 트랜잭션은 모든 실행이 성공하거나 모든 실행이 실패하여 데이터의 일관성과 무결성을 보장합니다. MySQL에서는 트랜잭션을 자동 제출과 수동 제출로 나눌 수 있는데, 차이점은 트랜잭션 제출 시기와 트랜잭션에 대한 제어 범위에 있습니다. 다음에서는 자동 제출과 수동 제출의 차이점을 자세히 소개하고 설명할 특정 코드 예제를 제공합니다. 1. 표시되지 않는 경우 MySQL에서 자동으로 제출

MySQL 트랜잭션의 원리와 응용 시나리오 MySQL 트랜잭션의 원리와 응용 시나리오 Mar 02, 2024 am 09:51 AM

MySQL 트랜잭션의 원칙 및 응용 시나리오 데이터베이스 시스템에서 트랜잭션은 일련의 SQL 작업입니다. 이러한 작업은 모두 성공적으로 실행되거나 모두 실패하여 롤백됩니다. 일반적으로 사용되는 관계형 데이터베이스 관리 시스템인 MySQL은 트랜잭션 특성을 지원하며 데이터베이스의 데이터가 일관성, 격리성, 내구성 및 원자성 측면에서 보장되도록 보장할 수 있습니다. 이 기사에서는 MySQL 트랜잭션의 기본 원칙부터 시작하여 해당 애플리케이션 시나리오를 소개하고 독자가 참조할 수 있는 특정 코드 예제를 제공합니다. MySQL 트랜잭션의 원리: My

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 객체의 생성자는 데이터베이스 유형, 호스트 이름, 데이터베이스 사용자 이름 및 비밀번호라는 세 가지 매개변수를 받습니다. 예를 들어, 다음 코드는 mysql 데이터베이스에 연결하는 객체를 생성합니다: $dsn="mysq

bootmgr이 없어 부팅할 수 없습니다 bootmgr이 없어 부팅할 수 없습니다 Feb 20, 2024 pm 04:33 PM

bootmgr은 Windows 운영 체제 시작을 위한 핵심 구성 요소 중 하나인 Boot Management Program의 약어입니다. 컴퓨터를 시작할 때 "bootmgrismissing" 오류 메시지가 나타나면 컴퓨터가 시작에 필요한 파일을 찾을 수 없다는 의미입니다. 이 문제는 하드 드라이브 오류, 부팅 파일 손상, 설정 문제 등 다양한 이유로 인해 발생할 수 있습니다. 아래에서는 이 문제를 해결할 수 있는 가능한 솔루션을 살펴보겠습니다. 해결 방법 1: 부팅 장치를 확인합니다. 먼저 확인해야 할 사항은 다음과 같습니다.

Java 데이터베이스 연결은 트랜잭션과 동시성을 어떻게 처리합니까? Java 데이터베이스 연결은 트랜잭션과 동시성을 어떻게 처리합니까? Apr 16, 2024 am 11:42 AM

트랜잭션은 원자성, 일관성, 격리 및 내구성을 포함한 데이터베이스 데이터 무결성을 보장합니다. JDBC는 Connection 인터페이스를 사용하여 트랜잭션 제어(setAutoCommit, 커밋, 롤백)를 제공합니다. 동시성 제어 메커니즘은 데이터 불일치를 방지하기 위해 트랜잭션 격리를 달성하기 위해 잠금 또는 낙관적/비관적 동시성 제어를 사용하여 동시 작업을 조정합니다.

MongoDB 기술 개발 시 발생하는 트랜잭션 관리 문제에 대한 솔루션 분석 MongoDB 기술 개발 시 발생하는 트랜잭션 관리 문제에 대한 솔루션 분석 Oct 08, 2023 am 08:15 AM

MongoDB 기술 개발 시 발생하는 트랜잭션 관리 문제에 대한 솔루션 분석 최신 애플리케이션이 점점 더 복잡해지고 커지면서 데이터에 대한 트랜잭션 처리 요구 사항도 점점 더 높아지고 있습니다. 널리 사용되는 NoSQL 데이터베이스인 MongoDB는 데이터 관리 측면에서 탁월한 성능과 확장성을 갖추고 있습니다. 그러나 MongoDB는 데이터 일관성과 트랜잭션 관리 측면에서 상대적으로 취약하여 개발자에게 어려움을 안겨줍니다. 이 글에서는 MongoDB 개발 시 발생하는 트랜잭션 관리 문제를 살펴보고 몇 가지 해결 방법을 제안합니다.

See all articles