重建控制文件时,与数据文件相关的Checkpoint信息来自何处

转载 2007年09月17日 16:06:00

背景:

关闭数据库,启动数据库到Mount状态,查询此时数据文件头,控制文件中记录的各数据文件的Checkpoint;

再次关闭数据库,备份所有数据文件;

然后打开数据库,执行各种操作,如:强制执行检查点;

再次关闭数据库,用备份的数据文件恢复现在的数据文件,重建控制文件(重建控制文件分为两种情况

1. Noresetlogs ——> 查看此时的数据文件头,控制文件记录的各数据文件的Checkpoint)

2. Resetlogs ——> 查看此时的数据文件头,控制文件记录的各数据文件的Checkpoint)

与之前的Checkpoint比较。

问题:

1. Noresetlogs 重建控制文件,此时控制文件中记录的Checkpoint信息由何处得来?

2. Resetlogs 重建控制文件,此时控制文件中记录的Checkpoint信息由何处得来?

实验步骤:

 

Resetlogs的情况:

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

SQL> select checkpoint_change#

2 from v$datafile;

CHECKPOINT_CHANGE#

------------------

306219

306219

306219

306219

SQL> select checkpoint_change#

2 from v$datafile_header;

CHECKPOINT_CHANGE#

------------------

306219

306219

306219

306219

SQL> shutdown immediate

ORA-01109: 数据库未打开

 

 

已经卸载数据库。

ORACLE 例程已经关闭。

——备份所有数据文件

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> alter system checkpoint;

 

系统已更改。

 

SQL> alter system checkpoint;

 

系统已更改。

 

SQL> alter system checkpoint;

 

系统已更改。

 

SQL> alter system checkpoint;

 

系统已更改。

 

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

——用备份的数据文件代替当前的数据文件。

SQL> startup nomount

ORACLE 例程已经启动。

 

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

——重建控制文件Resetlogs情况:

SQL> @d:ora90adminiceudumpcontrol.sql

 

控制文件已创建

 

SQL> select checkpoint_change#

2 from v$datafile;

CHECKPOINT_CHANGE#

------------------

306219

306219

306219

306219

SQL> select checkpoint_change#

2 from v$datafile_header;

CHECKPOINT_CHANGE#

------------------

306219

306219

306219

306219

SQL> alter database open;

alter database open

*

ERROR 位于第 1 行:

ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??

 

 

SQL> alter database open resetlogs;

 

数据库已更改。

——由于此时控制文件中记录的各数据文件的Checkpoint和各数据文件头记录的Checkpoint一致,

——且各数据文件的Checkpoint和其Stop Checkpoint一致,故可以直接打开数据库,不用Recover。

——只不过Open的时候要Resetlogs而已。

SQL> alter system checkpoint;

 

系统已更改。

 

SQL> alter system checkpoint;

 

系统已更改。

 

SQL> alter system checkpoint;

 

系统已更改。

Noresetlogs的情况:

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

 

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

SQL> select checkpoint_change#

2 from v$datafile;

CHECKPOINT_CHANGE#

------------------

306340

306340

306340

306340

SQL> select checkpoint_change#

2 from v$datafile_header;

CHECKPOINT_CHANGE#

------------------

306340

306340

306340

306340

SQL> alter database backup controlfile to trace;

——备份控制文件

数据库已更改。

 

SQL> shutdown immediate

ORA-01109: 数据库未打开

 

 

已经卸载数据库。

ORACLE 例程已经关闭。

——备份所有的数据文件

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> alter system checkpoint;

系统已更改。

SQL> alter system checkpoint;

系统已更改。

SQL> alter system checkpoint;

系统已更改。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

——用备份的数据文件恢复当前的所有数据文件

SQL> startup nomount

ORACLE 例程已经启动。

 

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

SQL> @d:ora90adminiceudumpcontrol.sql

——重建控制文件,用Noresetlogs

控制文件已创建

SQL> select checkpoint_change#

2 from v$datafile;

CHECKPOINT_CHANGE#

------------------

306454

306454

306454

306454

——当前控制文件中记录的各数据文件的Checkpoint。

SQL> select checkpoint_change#

2 from v$datafile_header;

CHECKPOINT_CHANGE#

------------------

306340

306340

306340

306340

——当前各数据文件头记录的各自的Checkpoint,与备份时的Checkpoint相等.

——但是与当前控制文件记录的Checkpoint不等。

 

 

 

SQL> alter session set nls_language=american;

Session altered.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: 'D:ORA90ORADATAICESYSTEM01.DBF'

——控制文件记录的各数据文件的Checkpoint与各数据文件头记录的Checkpoint不等,故要恢复。

SQL> recove datafile 1;

SP2-0734: unknown command beginning "recove dat..." - rest of line ignored.

SQL> recover datafile 1;

Media recovery complete.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 2 needs media recovery

ORA-01110: data file 2: 'D:ORA90ORADATAICEUNDOTBS01.DBF'

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.

结论:

1. Noresetlogs重建控制文件时,控制文件中的各数据文件的Checkpoint来自Online logs中的Current log头。(可以用Alter session set events ‘immediate trace name redohdr level 3’;来验证)

2. Resetlogs重建控制文件时,控制文件中的各数据文件的Checkpoint来自各数据文件头。

其实这也比较好理解,不Resetlogs的话,当前Online log中肯定是含有最新的Checkpoint,一旦Resetlogs,说明当前Online log 不可用,也就只好从各数据文件头来读取相应的Checkpoint了。

 

ORA-01190: 控制文件或数据文件 6 来自最后一个 RESETLOGS 之前

SQL> select tablespace_name, file_name from dba_data_files; select tablespace_name, file_name from d...
  • u010882595
  • u010882595
  • 2014年03月24日 17:39
  • 1529

oracle数据库中重要的文件(控制文件、数据文件、重写日志文件、归档日志文件、初始化参数文件)

本篇着重从物理角度来说明oracle数据库的组成。 Oracle数据库,就是操作系统文件的集合。...
  • u013933870
  • u013933870
  • 2016年06月18日 15:33
  • 1671

通过重建控制文件的方法恢复数据库

今天配置dataguard的时候,一不小心把主库的控制文件全删了,主库是集团的测试库,所以心里比较慌。静下心来在网上找了一些资料之后,发现可以通过重建控制文件的方法来恢复数据库,就做了一下测试。 ...
  • MisshqZzz
  • MisshqZzz
  • 2016年05月26日 14:44
  • 3313

Oracle 11g重建控制文件——控制文件全部丢失,从零开始

控制文件(control file)是一个相当小的文件(最多能增长到64M左右),其中包含Oracle需要的其他文件的一个目录。参数文件告知实例控制文件的位置,控制文件则告知示例数据库和在线重做日志文...
  • xiaobluesky
  • xiaobluesky
  • 2015年11月08日 15:15
  • 7162

控制文件重建后的不完全恢复

控制文件是Oracle数据库的”大脑“,默认情况下(没有使用恢复目录),在执行恢复操作时用于指导恢复过程,可谓非常的核心和重要,所以对于控制文件在不同磁盘的镜像,对于控制文件的备份都是非常必要的。对于...
  • kevinxiang
  • kevinxiang
  • 2012年04月24日 09:20
  • 1957

控制文件简介-SCN-检查点-控制文件头

1.控制文件概念 任何用户包括数据库管理员都不能修改控制文件中数据。 每一个控制文件只属于一个数据库,一个数据库不只一个控制文件,每个控制文件中内容完全一样。 如ORACLE不能访问控制文件,数据库...
  • q947817003
  • q947817003
  • 2013年09月07日 09:30
  • 1561

oracle重建控制文件

oracle重建控制文件 ORACLE的控制文件是数据库的非常重要的文件,它保存着数据库的连接实例(instance)和database的一个桥梁,它定义了当前数据库物理信息的状态。因此控制文件对于...
  • li19236
  • li19236
  • 2014年11月25日 18:04
  • 2642

Oracle数据文件/控制文件/日志文件

1.Oracle 数据文件        oracle有一个或多个数据文件,数据文件是用来存储数据库数据的文件,如表,索引        表空间是一个或多个数据文件在逻辑上的统一组织,而数据文件是表空...
  • u011217058
  • u011217058
  • 2015年11月26日 09:20
  • 825

重建控制文件详解

重建控制文件详解
  • f88520402
  • f88520402
  • 2014年05月01日 23:09
  • 1344

从SCN角度 :理解 重建控制文件(通过trace)中的 reset log 和 no retset log

第一部分: 介绍下 重建控制文件后,有两种方式打开数据库: resetlog 和 noresetlog: alter database open resetlog  指定RESETLOGS将重设当...
  • sinat_29742125
  • sinat_29742125
  • 2017年01月08日 12:49
  • 488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重建控制文件时,与数据文件相关的Checkpoint信息来自何处
举报原因:
原因补充:

(最多只允许输入30个字)