测试9——为何在数据库在mount阶段可以查询v$datafile_header 视图

简介: 大家都知道只有当数据库进入到OPEN状态时,数据文件才被打开,才能读取其中的内容.那在mount状态下,就可以读取v$datafile_header中的信息,为什么呢?这说明当从nomount状态进入mount状态时,还是扫描了一下数据文件头中的内容的,而且将相应的信息存储到了控制文件中(因为有网友说通过dump control file可以看到http://www.itpub.net/thread-1153987-1-1.html)。

大家都知道只有当数据库进入到OPEN状态时,数据文件才被打开,才能读取其中的内容.那在mount状态下,就可以读取v$datafile_header中的信息,为什么呢?

这说明当从nomount状态进入mount状态时,还是扫描了一下数据文件头中的内容的,而且将相应的信息存储到了控制文件中(因为有网友说通过dump control file可以看到http://www.itpub.net/thread-1153987-1-1.html)。

我试着做了一个实验,首先,把所有数据文件全部移走,然后mount数据库:

SQL> startup mount;
ORACLE instance started.


Total System Global Area 1653518336 bytes
Fixed Size    2228904 bytes
Variable Size  956304728 bytes
Database Buffers  687865856 bytes
Redo Buffers    7118848 bytes
Database mounted.
SQL> select checkpoint_change#,checkpoint_time from v$datafile_header;


CHECKPOINT_CHANGE# CHECKPOIN
------------------ ---------
0
0
0
0

发现此时,已经读取不到数据文件头部的checkpoint_change#,checkpoint_time等信息。因为没有数据文件可以供扫描了。

然后我又把数据文件移动回来,再重新mount,就可以看到啦:

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.


Total System Global Area 1653518336 bytes
Fixed Size    2228904 bytes
Variable Size  956304728 bytes
Database Buffers  687865856 bytes
Redo Buffers    7118848 bytes
Database mounted.
SQL> select checkpoint_change#,checkpoint_time from v$datafile_header;


CHECKPOINT_CHANGE# CHECKPOIN
------------------ ---------
  1104824 27-OCT-14
  1104824 27-OCT-14
  1104824 27-OCT-14
  1104824 27-OCT-14


顺便总结下,到底什么时候需要进行数据恢复:

在数据库启动的时候,会检查v$database视图,v$datafile视图,v$datafile_header视图 里的checkpoint_change#,当然这三个视图的数值来源是不同的。v$database视图,v$datafile视图 里的scn是来自控制文件的,而v$datafile_header视图 里的scn是来自数据文件头的。

所以当数据库启动的时候,如果发现v$datafile_header的scn小于v$database(或v$datafile)里的值,就需要进行实例或者介质恢复。


相关文章
|
21天前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
1月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
1月前
|
存储 NoSQL Redis
【Redis】利用Redis List实现数据库分页快速查询
【Redis】利用Redis List实现数据库分页快速查询
97 0
|
1月前
|
存储 缓存 NoSQL
利用Redis List实现数据库分页快速查询的有效方法
利用Redis List实现数据库分页快速查询的有效方法
|
5天前
|
SQL 关系型数据库 MySQL
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
17 2
|
7天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2
|
21天前
|
数据库
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
9 0
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
|
21天前
|
缓存 监控 数据库
优化数据库查询性能的八大技巧
在今天的互联网时代,数据库是许多应用程序的核心组件之一。优化数据库查询性能是提升应用程序整体性能的关键。本文介绍了八种有效的技巧,帮助开发人员提高数据库查询性能,从而提升应用程序的响应速度和用户体验。