【oracle笔记】启动、关闭数据库以及查看数据库状态

来源:互联网 发布:vip域名被百度收录 编辑:程序博客网 时间:2024/05/21 01:28

本文转自   http://blog.csdn.net/jason_asia/article/details/6791170   版权归博主<姜彦国> 所有,特此声明,向作者表示感谢。

数据库的启动分三个阶段,nomount,mount,open,此处也分三个阶段来查看数据库的状态。


数据库启动的三阶段

1. nomount阶段创建实例instance

nomount阶段,oracle主要完成5件事

a.查找参数文件,oracle会在$ORACLE_HOME/dbs/目录下依次查找下面的参数文件,如果其中某个存在,就会使用它。spfile是二进制文件,不能直接编辑,init(pfile)是文本文件可以直接编辑。

      1.spfile$ORACLE_SID.ora

      2.spfile.ora

      3.init$ORACLE_SID.ora

b.读取参数文件确定初始化参数的值

c.根据初始化参数分配SGA内存区

d.启动后台进程

e.打开alert_$ORACLE_SID.log 文件和 trace追踪文件,把启动过程中的参数和执行的操作写入alert文件

在启动的时候可以手动指定使用PFILE

  1. <span style="font-size:13px;">SQL> STARTUP PFILE=/u01/app/oracle/product/10.2.0/dbs/init.ora</span>  

2.mount模式

实例通过加载数据库将数据库和实例关联起来。mount阶段,oracle根据参数文件中的CONTROL_FILES参数找到控制文件,从控制文件中读取数据库名称、确定数据文件,以及在open时访问的online redo log files,此时实例没有打开数据库的物理文件,即数据文件和重做日志文件。用户在mount状态仍无法与数据库建立连接或会话。

如果控制文件复用副本丢失、损坏,oracle会报错,需要进行控制文件恢复,修改参数文件、手动创建控制文件、或者替换丢失或损坏的控制文件。

3.open模式

只有将数据库设置为打开后,用户才可以与数据库建立连接和访问数据库。oracle会分步打开物理文件

a.打开除了撤销表空间以外,所有online在线表空间的数据文件

b.打开undo tablespace撤销表空间

c.打开online redo log file重做日志文件

如果open阶段发现有数据文件或重做日志文件丢失、损坏而不可用,或者数据文件不一致,oracle会报错,此时需要进行media recovery介质恢复。


查看数据库的状态

在nomount, mount模式,无法连接数据库,可以通过查看动态视图和lsnrctl 查看数据库的状态。

如果数据库没有启动,lsnrctl状态

  1. [oracle@localhost dbs]$ lsnrctl status  
  2. ……  
  3. Listening Endpoints Summary...  
  4.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))  
  5.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))  
  6. Services Summary...  
  7. Service "PLSExtProc" has 1 instance(s).  
  8.   Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
  9. The command completed successfully  

启动数据库

  1. [oracle@localhost dbs]$ sqlplus / as sysdba  
  2. SQL> startup nomount  

查看动态视图

  1. <pre code_snippet_id="340010" snippet_file_name="blog_20140512_4_8171" name="code" class="plain"><pre code_snippet_id="340010" snippet_file_name="blog_20140512_4_8171" name="code" class="plain">SQL> select status from v$instance;  
  2.   
  3. STATUS  
  4. ------------  
  5. STARTED  
  6.   
  7. SQL> select open_mode from v$database;  
  8. select open_mode from v$database  
  9.                       *  
  10. ERROR at line 1:  
  11. ORA-01507: database not mounted</pre>查看lsnrctl status<pre code_snippet_id="340010" snippet_file_name="blog_20140512_5_3672668" name="code" class="plain">[oracle@localhost dbs]$ lsnrctl status  
  12. ……  
  13. Services Summary...  
  14. Service "PLSExtProc" has 1 instance(s).  
  15.   Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
  16. Service "orcl" has 1 instance(s).  
  17.   Instance "orcl", <span style="color:#ff00;">status BLOCKED</span>, has 1 handler(s) for this service...  
  18. Service "orcl_XPT" has 1 instance(s).  
  19.   Instance "orcl", status BLOCKED, has 1 handler(s) for this service...  
  20. The command completed successfully  
  21. </pre>  
  22. <pre></pre>  
  23. <pre></pre>  
  24. <p></p>  
  25. <pre></pre>  
  26. <p></p>  
  27. <pre></pre>  
  28. <p></p>  
  29. <p></p>  
  30. <p><strong>加载数据库</strong></p>  
  31. <pre code_snippet_id="340010" snippet_file_name="blog_20140512_6_161065" name="code" class="plain"><pre code_snippet_id="340010" snippet_file_name="blog_20140512_6_161065" name="code" class="plain">SQL> alter database mount;  
  32.   
  33. Database altered.  
  34. SQL> select status from v$instance;  
  35.   
  36. STATUS  
  37. ------------  
  38. MOUNTED  
  39.   
  40. SQL> select open_mode from v$database;  
  41.   
  42. OPEN_MODE  
  43. ----------  
  44. MOUNTED</pre>  
  45. <pre></pre>  
  46. <p></p>  
  47. <p>查看lsnrctl status</p>  
  48. <pre code_snippet_id="340010" snippet_file_name="blog_20140512_7_2222380" name="code" class="plain"><p>[oracle@localhost dbs]$ lsnrctl status  
  49. ……  
  50. Services Summary...  
  51. Service "PLSExtProc" has 1 instance(s).  
  52.   Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
  53. Service "orcl" has 1 instance(s).  
  54.   Instance "orcl", status <span style="color:#ff00;">READY</span>, has 1 handler(s) for this service...  
  55. Service "orcl_XPT" has 1 instance(s).  
  56.   Instance "orcl", status READY, has 1 handler(s) for this service...  
  57. The command completed successfully  
  58. </p></pre>  
  59. <p><br>  
  60. </p>  
  61. <p>打开数据库<br>  
  62. </p>  
  63. <pre code_snippet_id="340010" snippet_file_name="blog_20140512_8_4491437" name="code" class="plain"><p>SQL> alter database open;  
  64. SQL> select status from v$instance;  
  65.   
  66. STATUS  
  67. ------------  
  68. OPEN  
  69.   
  70. SQL> select open_mode from v$database;  
  71.   
  72. OPEN_MODE  
  73. ----------  
  74. READ WRITE  
  75. </p></pre>  
  76. <p><br>  
  77. </p>  
  78. <p>查看lsnrctl statas<br>  
  79. </p>  
  80. <pre code_snippet_id="340010" snippet_file_name="blog_20140512_9_3172444" name="code" class="plain">[oracle@localhost dbs]$ lsnrctl status  
  81. ……  
  82. Services Summary...  
  83. Service "PLSExtProc" has 1 instance(s).   
  84.     Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
  85. Service "orcl" has 1 instance(s).   
  86.     Instance "orcl", status READY, has 1 handler(s) for this service...  
  87. Service "orclXDB" has 1 instance(s).   
  88.     Instance "orcl", statusREADY, has 1 handler(s) for this service...  
  89. Service "orcl_XPT" has 1 instance(s).   
  90.     Instance "orcl", statusREADY, has 1 handler(s) for this service...  
  91. The command completed successfully</pre>  
  92. <p>.<br>  
  93. </p>  
  94. <p><br>  
  95. </p>  
  96. <p>参考: http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/startup.htm#CEGJEJDD<br>  
  97. </p>  
  98. <p><br>  
  99. </p>  
  100. <p><br>  
  101. </p>  
  102. <p><br>  
  103. </p>  
  104. <pre></pre>  
  105. <pre></pre>  
  106. <br>  
  107. <pre></pre>  
  108. <p></p>  
  109. <p><span style="font-size:24px; color:#ff0000; font-weight:normal">关闭数据库</span></p>  
  110. <p></p>  
  111. 与数据库启动相对应,关闭数据库也分3个步骤:1)关闭数据库oracle将redo log buffer写入online redo log中,将database buffer cache中的dirty块写入datafile,然后关闭所有datafile和online redo file。2)卸载数据库instance卸载database,关闭control file。3)关闭实例终止所有后台进程和服务器进程,回收内存空间。关闭数据库有4种方式:shutdown [ normal | transaction |  
  112.  immediate | abort ]1)shutdown normal是默认方式。如果对数据库的关闭没有时间限制,可以采用,oracle会执行以下操作:  a.阻止用户建立新的连接  b.等待当前连接的用户主动断开连接  c.一旦所有用户都断开连接,则关闭数据库  d.2)shutdown immediate如果要求在尽可能短的时间内关闭数据库,可以采用此种方法。oracle会执行以下操作:  a.阻止用户建立新的连接  b.回滚所有未提交的事务。  c.终止所有用户的连接,关闭数据库。  d.  
  113. <p></p>  
  114. 3)shutdown transaction如果要求在尽量短的时间内关闭数据库,同时还要保证所有当前事物可以提交,则可以采用shutdown transaction命令关闭数据库。oracle会执行以下操作:  a.阻止用户建立新的连接  b.等待用户回滚或提交当前未提交的事务,然后立即断开用户连接  c.关闭数据库  d.  
  115. <p></p>  
  116. <p></p>  
  117. 4)shutdown abort如果前三种方法无法关闭数据库,或者数据库出现严重错误时,只能采取shutdown abort方式关闭数据库。这种方式等同于突然切断电源,会造势部分数据信息丢失。下次启动数据库时,oracle会自动执行instance recovery(roll forward和rollback)。shutdown abort时oracle会执行以下操作:  a.阻止用户建立新的连接  b.立即结束正在执行的SQL语句  c.任何未提交的事务不被回滚  d.中断所有的用户连接,立即关闭数据库  
  118. <p>  e.数据库实例重启后需要instance recovery</p>  
  119. <p></p>  
  120. <p></p>  
  121. <pre code_snippet_id="340010" snippet_file_name="blog_20140512_10_6662218" name="code" class="plain"><pre code_snippet_id="340010" snippet_file_name="blog_20140512_10_6662218" name="code" class="plain"></pre><pre code_snippet_id="340010" snippet_file_name="blog_20140512_11_4263430" name="code" class="plain"><pre code_snippet_id="340010" snippet_file_name="blog_20140512_11_4263430"></pre>  
  122. <pre></pre>  
  123. <pre></pre>  
  124. <pre></pre>  
  125. <pre></pre>  
  126. <pre></pre>  
  127. <pre></pre>  
  128. <pre></pre>  
  129. <pre></pre>  
  130. <pre></pre>  
  131.       
  132.         <div style="padding-top:20px">           
  133.             <p style="font-size:12px;">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>  
  134.         </div>  
  135. </pre></pre></pre></pre>  

0 0