上海isp 发表于 2018-9-24 06:13:52

Oracle - 解析启动的全过程

  之前对Oracle也没有什么了解,只是DBA给我们一个用户,然后我们连上去就OK,总是搞不明白。今天有空来看看Oracle的启动过程,还是有很多东西值得我们来仔细研究的:
  Oracle的启动过程总共分三步:
  1 启动Oracle的实例;
  2 挂载Oracle数据库;
  3 打开数据库;
  启动Oracle实例到nomount状态:
  


[*]SQL> startup nomount
[*]ORACLE 例程已经启动。
[*]
[*]Total System Global Area293601280 bytes
[*]Fixed Size                  1248600 bytes
[*]Variable Size             109052584 bytes
[*]Database Buffers          176160768 bytes
[*]Redo Buffers                7139328 bytes
[*]SQL>
  在这个情况下,Oracle都做了哪些工作呢:只是去寻找一个叫做spfile,或者是pfile的文件,然后根据这个文件去创建实例,分配内存;那么你肯定是要问,那我如何才可以知道我载入的那个文件呢:
  


[*]SQL> show parameter spfile;
[*]
[*]NAME                                 TYPE
[*]------------------------------------ ----------------------
[*]VALUE
[*]------------------------------
[*]spfile                               string
[*]D:\ORACLE\PRODUCT\10.2.0\DB_1\
[*]DATABASE\SPFILEGJSID.ORA
[*]SQL>
  

  看到了吧,Oracle载入的就是在这个目录下的SPFILE.ora。那pfile和spfile之间有什么区别呢:pfile其实和spfile是一样的内容,只不过spfile在文件头的时候,有些我也不太明白的东西。
  可以用以下的命令来实现pfile和spfile的转换:
  


[*]SQL> create pfile from spfile;
[*]
[*]文件已创建。
[*]
[*]SQL>
  

  接下来呢,就到了挂载Oracle数据库的时候:
  


[*]SQL> alter database mount;
[*]
[*]数据库已更改。
  

  那这个过程中,Oracle做了哪些工作,其实是根据刚刚spfile里面的内容来寻找一个叫做控制文件的东东control file,你能搞明白么,在Oracle中,共有三个一模一样的控制文件,就是为了防止有控制文件损坏。
  这个时候你可以通过以下的命令来查看加载的控制文件:
  


[*]SQL> select * from v$controlfile;
[*]
[*]STATUSNAME                                     IS_ BLOCK_SIZE FILE_SIZE_BLKS
[*]------- ---------------------------------------- --- ---------- --------------
[*]      D:\ORACLE\DATA\GJSID\CONTROL01.CTL       NO       16384            430
[*]      D:\ORACLE\DATA\GJSID\CONTROL02.CTL       NO       16384            430
[*]      D:\ORACLE\DATA\GJSID\CONTROL03.CTL       NO       16384            430
[*]
[*]SQL> showparameter control_file;
[*]
[*]NAME                                 TYPE      VALUE
[*]------------------------------------ ----------- ------------------------------
[*]control_file_record_keep_time      integer   7
[*]control_files                        string      D:\ORACLE\DATA\GJSID\CONTROL01
[*]                                                 .CTL, D:\ORACLE\DATA\GJSID\CON
[*]                                                 TROL02.CTL, D:\ORACLE\DATA\GJS
[*]                                                 ID\CONTROL03.CTL
[*]SQL>
  

  看到了吧,这个时候,控制文件就加载到系统视图里了,在没有mount之前,v$controlfile里是没有内容的。
  打开数据库,
  SQL> alter database open;
  

  这个时候,Oracle会去数据文件头和控制文件头里去检查数据库版本的一致性,和数据的连续性,检查SCN - system changing number。
  至此,Oracle就算是启动完成了。如果其中有报错的话,可以去查看在alter_.log. 在其中有比较完整的信息。
  全当自己学习Oracle的笔记吧。


页: [1]
查看完整版本: Oracle - 解析启动的全过程