重建控制文件时,与数据文件相关的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了。

 

自动生成控制文件及数据文件并完成sqlldr的自动导入

在config.cfg里面配好相应的用户和表名就可得到相应的select语句和该表的控制文件,运行generate.sh可以得到该表的数据文件,运行sqlldr可以把生成的数据文件插入到目标库表中。目...

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

SQL> select tablespace_name, file_name from dba_data_files; select tablespace_name, file_name from d...

【Oracle】非RMAN恢复数据文件、控制文件

实验环境:OEL 5.6 oracle 11g(11.2.0.4.0) 注意: system表空间数据文件不能在线recover,需要启动到mount状态再recover; undo表空间数据文件...

Oracle学习(十八)之控制文件、日志文件、数据文件及配置文件管理总结

一、控制文件 1.查询 select * from v$controlfile; 2.修改 1)修改参数 alter system control_files= '文件路径1', '文...

Oracle控制文件、数据文件、临时文件总结笔记

一.控制文件(Control Files) 1.控制文件的作用 控制文件在Oracle数据库中扮演着很重要的角色,没有控制文件(或者控制文件损坏了),运行着的实例立...

oracle中如何移动控制文件,数据文件,日志文件

oracle中如何移动控制文件,数据文件,日志文件   oracle9i/10G-xG中移动控制文件,数据文件,日志文件 ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。 w...

同时丢失参数文件、控制文件及redo log file的不完全恢复(有数据文件的热备和归档)

同时丢失参数文件、控制文件及redo log file的不完全恢复(有数据文件的热备和归档)...
  • guoyJoe
  • guoyJoe
  • 2014年06月14日 23:26
  • 2555

批量迁移Oracle数据文件,日志文件及控制文件

有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求。对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移。当...

更改Oracle数据文件、控制文件、日志文件位置

关于更改Oracle数据文件(包括系统数据文件)位置,网上的方法很多,但我是初学者,理解不够透彻,测试的时候急于求成,以至于试验多次才成功,原因是没有注意顺序,在此总结一下,错误之处请 多包涵,...
  • wky1709
  • wky1709
  • 2015年01月16日 11:28
  • 308

ORACLE 10g将数据文件,日志文件和控制文件迁移到不同的路径

ORACLE 10g将数据文件,日志文件和控制文件迁移到不同的路径       数据文件,控制文件和日志文件原路径在:"d:\oracle\10g\orcl",现在要将它们迁移至“d:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重建控制文件时,与数据文件相关的Checkpoint信息来自何处
举报原因:
原因补充:

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