以startup mount 方式启动oracle 实例,会只打开控制文件,而不打开数据文件,
但此时却可以查询oracle 中的数据字典视图了,比如v$datafile (数据字典视图是保存在系统表空间中的数据文件中的)
这不相互矛盾了吗? 

解决方案 »

  1.   

    数据文件的信息是写在控制文件里面的,所以v$datafile可见。你可以参考创建控制文件的语法。
      

  2.   

    不是的, Oracle每种状态下打开哪些,可以进行哪些操作, 你可以查一下管理员文档. mount状态,数据库没有打开, 用户无法登陆数据库, 但是此时可以维护数据库中的对象, 包括你说的那些性能表或动态表中的信息, 
      

  3.   

    曾经有项目做过BE的灾难恢复,
    首先利用BE恢复spfile,
    启动数据库到nomount 状态,
    再利用BE恢复ctlfile,
    就可以在rman下启动数据库到mount状态,
    此时肯定是没有数据文件的。
    但数据库是挂载的。控制文件记录的所有数据文件的位置,所以我想你
    做v$datafile 操作的时候,
    因该是读的控制文件的内容
      

  4.   

    控制文件内容包含了数据库结构信息,也就是数据文件和日志文件名称、大小、位置、状态等
    查看的v$datafile应该是在控制文件中记录的吧
      

  5.   

    数据库实例启动时就会找到oracle的数据字典 并进行调用
      

  6.   

    补充下v$datafile 不是数据字典,而是动态视图。数据字典一般存在sys表空间下,mount状态下,数据文件还没加载,看不了,而动态视图不需要存储,是根据内存和控制文件动态生成的,所以在nomount,实例启动后就可以访问的了,动态视图有200+,只是在数据库不同启动阶段,所能看到的动态视图不同。mount后,控制文件已经读取了,控制文件里有数据文件信息,v$datafile可以访问