测试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)里的值,就需要进行实例或者介质恢复。


相关文章
|
2月前
|
SQL 数据库
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
37 2
|
16天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
26 6
|
1月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
29 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
29天前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
29 1
|
15天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
27 0
|
1月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
37 2
|
1月前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
22天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
239 1
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
596 2
下一篇
DataWorks