Oracle 数据库实例启动关闭过程

 

Oracle数据库实例的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行装载。 Oracle 数据启动的过程被划分为

几个不同的步骤,在不同的启动过程中,我们可以对其实现不同的操作,系统修复等等工作,因此了解Oracle数据启动、关闭是非常

有必要的。下面详细了Oracle Database 10g数据库启动及关闭的过程。

 

一、数据库实例的启动

   启动命令:starup [force][restrict] [pfile=...] [nomount] [mount] [open]

   启动过程:nomount ---> mount ---> open              (startup不带参数将逐步一一完成)

   1.nomount阶段(即实例的启动)

       实例的启动通常包含下列任务:

          a.按以下顺序在$ORACLE_HOME/dbs[win平台为database]目录下搜索下列文件,即如果第一个没找到,就找下一个

              spfile<SID>.ora ---> spfile.ora ---> init<SID>.ora

          b.分配SGA

          c.启动后台进程

          d.打开并修改告警<SID>.log文件及跟踪文件

      使用场景:

          多用于数据库创建、控制文件重建、特定的备份恢复等

      注意:

          此阶段不打开任何的控制文件及数据文件。

          

   2.mount阶段

       mount阶段完成的任务:

          a.启动实例并打开控制文件,将数据库与实例关联起来

          b.利用参数文件中的说明,打开并锁定控制文件

          c.读取控制文件以获取数据文件和重做日志文件的名字和状态信息,但不检查数据日志文件是否存在

      使用场景:

a.重命名数据文件,移动数据文件位置等(数据库打开,表空间脱机的情况下也可以重命名数据文件)

          b.启用或关闭重做日志文件的归档及非归档模式

          c.实现数据库的完全恢复

      注意:

          这一步会读控制文件,如果这一步有一个控制文件损坏就无法启动

          

   3.open阶段

      mount阶段完成的任务:

          a.打开数据文件

          b.打开联机日志文件

      注意:

           a.在此期间,Oracle服务器将校验所偶的数据文件和联机日志文件能否打开并对数据库作一致性检查

          b.如果出现一致性错误,SMON进程将启动实例恢复

          c.如果任一数据文件或联机日志文件丢失,Oracle服务器将报错

   4.特殊的方式打开数据库

      只读模式:

      startup open read only;

      

      如果现在在mount

      alter database open read only;

      

      受限模式:

      有时进行数据库维护护,希望一般的用户不能登录。可以启动到该模式,这样只有用户具有

      restricted session 权限,才可登录到数据库。

      

      启动方法:

          startup restrict;

取消受限:

           alter system disable restricted session;

 

二、数据库实例的关闭

   关闭命令:shutdowm abort | immediate | transactional | normal(shutdown不带参数将缺省为normal)

   关闭选项:

      normal         --->不准许新的连接,等待当前的session结束,等待当前的事务结束,强制检查点并关闭文件

      transactional --->不准许新的连接,不等待当前的session结束,等待当前的事务结束,强制检查点并关闭文件。

      immediate      --->不准许新的连接,不等待当前的session结束,不等待当前的事务结束,强制检查点并关闭文件。

      abort          --->不准许新的连接,不等待当前的session结束,不等待当前的事务结束,不作强制检查点。

   

三、几类诊断文件

   包含有重要意义时间的具体信息,用于解决问题,用于日常更好的管理数据库

   

   a.alterSID.log    告警文件

       记录了数据库启动、关闭时间和一些重要操作及错误警告信息,包含错误号ora-,dba管理

      位置由background_dump_dest

      维护alertSID.log,定期转移,系统会自动产生新的alert_sid.log

      

   b.后台进程跟踪文件:

      记录了后台进程的一些重要信息和警告、错误等

      位置:$ORACLE_BASE/admin/vvorcl/bdump/vvorcl_lgwr_15135.trc

      

   c.用户跟踪文件:

      由用户进程产生也能由服务器进程产生,跟踪用户的SQL语句的统计信息,也包括错误信息

      文件位置由user_dump_dest

      用户跟踪:

             会话级:

alter session set sql_trace=true;

 

             实例级:

                 alter system set set sql_trace=true;

 

      跟踪文件的大小由max_dump_file_size参数决定。跟踪时最好要限制他的大小

      

四、动态性能视图

       记录当前数据库的活动,并且不停的更新,故不能保证读取数据的一致性

       监控和调整数据库

       所有者sys

       v$开头

      

      DICTDICT_COLUMNS视图包含了动态性能视图描述及其列的描述

      v$FIXED_TALBE包含了所有视图的名字及相关信息

      

      

五、演示 */

   [root@robinson ~]# su - oracle

   --查看未启动实例前的进程情况

   [oracle@robinson ~]$ ps -aef |grep oracle

   root      3332  3300  0 12:20 pts/1   00:00:00 su- oracle

   oracle    3333  3332  0 12:20 pts/1   00:00:00 -bash

   oracle    3365  3333  0 12:20 pts/1   00:00:00 ps-aef

   oracle    3366  3333  0 12:20 pts/1   00:00:00 grep oracle

 

   --使用ipcs查看当前进程间通讯所用到的共享资源,内存段及信号量,

--可以看出当前无任何通信设备及共享资源

   [oracle@robinson ~]$ ipcs -a

 

   ------ Shared Memory Segments --------

   key        shmid      owner      perms      bytes     nattch     status     

 

   ------ Semaphore Arrays --------

   key        semid      owner      perms      nsems    

 

   ------ Message Queues --------

   key        msqid      owner      perms      used-bytes  messages   

 

   --登陆到sqlplus

   [oracle@robinson ~]$ sqlplus / as sysdba

 

   SQL*Plus: Release 10.2.0.1.0- Production on Thu Apr 29 13:07:29 2010

 

   Copyright (c) 1982, 2005, Oracle. All rights reserved.

 

   Connected to an idle instance.

 

   --再次查看进程情况,多出了进程

   SQL> !ps -aef | grep oracle

   root      3332  3300  0 12:20 pts/1   00:00:00 su- oracle

   oracle    3333  3332  0 12:20 pts/1   00:00:00 -bash

   oracle    3972  3333  0 13:07 pts/1   00:00:00 sqlplus  as sysdba

   oracle    3973  3972  0 13:07 ?       00:00:00 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

   oracle    3974  3972  0 13:07 pts/1   00:00:00 /bin/bash -c ps-aef | grep oracle

   oracle    3975  3974  0 13:07 pts/1   00:00:00 ps-aef

 

   --再次查看进程间通讯资源,同样是没有任何分配

   SQL> !ipcs -a

 

   ------ Shared Memory Segments --------

   key        shmid      owner      perms      bytes     nattch     status     

 

   ------ Semaphore Arrays --------

   key        semid      owner      perms      nsems    

 

   ------ Message Queues --------

   key        msqid      owner      perms      used-bytes  messages   

 

   --启动到nomount

   SQL> startup nomount

   ORACLE instance started.

 

   Total System Global Area 398458880 bytes

   Fixed Size                  1219640 bytes

   Variable Size             117441480 bytes

   Database Buffers          276824064 bytes

   Redo Buffers                2973696 bytes

 

   --可以看到多出了一些后台进程,即为Oracle的后台进程。从开始。

SQL>!ps -aef | grep oracle

   root      3332  3300  0 12:20 pts/1   00:00:00 su- oracle

   oracle    3333  3332  0 12:20 pts/1   00:00:00 -bash

   oracle    3972  3333  0 13:07 pts/1   00:00:00 sqlplus  as sysdba

   oracle    3981     1  0 13:09 ?       00:00:00 ora_pmon_orcl

   oracle    3983     1  0 13:09 ?       00:00:00 ora_psp0_orcl

   oracle    3985     1  0 13:09 ?       00:00:00 ora_mman_orcl

   oracle    3987     1  0 13:09 ?       00:00:00 ora_dbw0_orcl

   oracle    3989     1  0 13:09 ?       00:00:00 ora_lgwr_orcl

   oracle    3991     1  0 13:09 ?       00:00:00 ora_ckpt_orcl

   oracle    3993     1  0 13:09 ?       00:00:00 ora_smon_orcl

   oracle    3995     1  0 13:09 ?       00:00:00 ora_reco_orcl

   oracle    3997     1  0 13:09 ?       00:00:00 ora_cjq0_orcl

   oracle    3999     1  0 13:09 ?       00:00:00 ora_mmon_orcl

   oracle    4001     1  0 13:09 ?       00:00:00 ora_mmnl_orcl

   oracle    4003     1  0 13:09 ?       00:00:00 ora_d000_orcl

   oracle    4005     1  0 13:09 ?       00:00:00 ora_s000_orcl

   oracle    4006  3972  0 13:09 ?       00:00:00 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

   oracle    4009  3972  0 13:10 pts/1   00:00:00 /bin/bash -c ps-aef | grep oracle

   oracle    4010  4009  0 13:10 pts/1   00:00:00 ps-aef       

 

   --可以看到已经分配了SGA

   SQL> !ipcs -a

 

   ------ Shared Memory Segments --------

   key        shmid      owner      perms      bytes     nattch     status     

 

0x99eb282c 65537     oracle    640        402653184  14                     

 

   ------ Semaphore Arrays --------

   key        semid      owner      perms      nsems    

   0x6df43ca0 98304      oracle    640       127      

   0x6df43ca1 131073     oracle    640       127      

   0x6df43ca2 163842     oracle    640       127      

 

   ------ Message Queues --------

   key        msqid      owner      perms      used-bytes  messages

 

   --查看控制文件,没有任何数据,因为此阶段控制文件并没有打开

   SQL> select * from v$controlfile;

 

   no rows selected

 

   --查看数据文件和日志文件,提示database not mounted

   SQL> select * from v$datafile;

   select * from v$datafile

               *

   ERROR at line 1:

   ORA-01507:database not mounted

 

   SQL> select * from v$logfile;

   select * from v$logfile

               *

   ERROR at line 1:

   ORA-01507:database not mounted

--切换到mount阶段

   SQL> alter database mount;

 

   Database altered.

 

   --可以查看控制文件的相关信息

   SQL> select * from v$controlfile;

 

   STATUS  NAME                                              IS_ BLOCK_SIZE FILE_SIZE_BLKS

   ------- -------------------------------------------------- --- ---------- --------------

          /u01/app/oracle/oradata/orcl/control01.ctl        NO       16384           430

          /u01/app/oracle/oradata/orcl/control02.ctl        NO       16384           430

          /u01/app/oracle/oradata/orcl/control03.ctl        NO       16384           430

          

   --可以查看数据文件的相关信息

   SQL> select FILE#,STATUS,ENABLED,CHECKPOINT_CHANGE#,CHECKPOINT_TIME,ONLINE_TIME,NAMEfrom v$datafile;

 

       FILE# STATUS  ENABLED   CHECKPOINT_CHANGE# CHECKPOIN ONLINE_TI NAME

   ---------- ------- ---------- ------------------ --------- --------- --------------------------------------------------

           1 SYSTEM  READ WRITE           2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/system01.dbf

           2 ONLINE  READ WRITE           2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/undotbs01.dbf

           3 ONLINE  READ WRITE           2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/sysaux01.dbf

           4 ONLINE  READ WRITE           2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/users01.dbf

           5 ONLINE  READ WRITE           2027235 28-APR-

10          /u01/app/oracle/oradata/orcl/example01.dbf

           6 ONLINE  READ WRITE           2027235 28-APR-10          /u01/app/oracle/oradata/orcl/Test.dbf

           7 ONLINE  READ WRITE           2027235 28-APR-10          /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s

                                                               _5vrl1t7h_.dbf     

   --可以查看日志文件的相关信息

   SQL> select * from v$logfile;

 

      GROUP# STATUS  TYPE   MEMBER                                                       IS_

   ---------- ------- ------- ------------------------------------------------------------ ---

           3         ONLINE /u01/app/oracle/oradata/orcl/redo03.log                     NO

           2         ONLINE /u01/app/oracle/oradata/orcl/redo02.log                     NO

           1         ONLINE /u01/app/oracle/oradata/orcl/redo01.log                     NO          

 

   --数据不可访问,因为在此阶段,数据文件,日志文件并没有打开

   SQL> select * from scott.emp;

   select * from scott.emp

*

   ERROR at line 1:

   ORA-01219:database not open: queries allowed on fixed tables/views only    

 

   --切换到open阶段

   SQL> alter database open;

 

   Database altered.

 

   --再次查看进程信息,多出了之后的相关进程

   SQL> !ps -aef | grep oracle

   oracle    3981     1  0 13:09 ?       00:00:00 ora_pmon_orcl

   oracle    3983     1  0 13:09 ?       00:00:00 ora_psp0_orcl

   oracle    3985     1  0 13:09 ?       00:00:00 ora_mman_orcl

   oracle    3987     1  0 13:09 ?       00:00:00 ora_dbw0_orcl

   oracle    3989     1  0 13:09 ?       00:00:00 ora_lgwr_orcl

   oracle    3991     1  0 13:09 ?       00:00:00 ora_ckpt_orcl

   oracle    3993     1  0 13:09 ?       00:00:00 ora_smon_orcl

   oracle    3995     1  0 13:09 ?       00:00:00 ora_reco_orcl

   oracle    3997     1  0 13:09 ?       00:00:00 ora_cjq0_orcl

   oracle    3999     1  0 13:09 ?       00:00:00 ora_mmon_orcl

   oracle    4001     1  0 13:09 ?       00:00:00 ora_mmnl_orcl

   oracle    4003     1  0 13:09 ?       00:00:00 ora_d000_orcl

   oracle    4005     1  0 13:09 ?       00:00:00 ora_s000_orcl

   root      4068  4036  0 13:29 pts/1   00:00:00 su- oracle

   oracle    4069  4068  0 13:29 pts/1   00:00:00 -bash

   oracle    4101  4069  0 13:29 pts/1   00:00:00 sqlplus

   oracle    4102  4101  0 13:29 ?       00:00:01 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

   oracle    4137     1  0 13:54 ?       00:00:00 ora_qmnc_orcl

   oracle    4139     1  0 13:54 ?       00:00:01 ora_j000_orcl

   oracle    4141     1  0 13:54 ?       00:00:00 ora_j001_orcl

   oracle    4143     1  0 13:54 ?       00:00:00 ora_j002_orcl

   oracle    4145     1  0 13:54 ?       00:00:00 ora_j003_orcl

   oracle    4147     1  0 13:54 ?       00:00:00 ora_j004_orcl

   oracle    4149     1  0 13:54 ?       00:00:00 ora_j005_orcl

   oracle    4159     1  0 13:54 ?       00:00:00 ora_q001_orcl

   oracle    4167     1  0 13:56 ?       00:00:00 ora_q002_orcl

   oracle    4169     1  0 13:57 ?       00:00:00 ora_q003_orcl

   oracle    4172  4101  0 13:58 pts/1   00:00:00 /bin/bash -c ps-aef | grep oracle

   oracle    4173  4172  0 13:58 pts/1   00:00:00 ps-aef

 

   --数据已可正常访问

   SQL> select * from scott.empwhere ename = 'SCOTT';

 

       EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

   ---------- ---------- --------- ---------- --------- ---------- ----------

      DEPTNO

   ----------

        7788 SCOTT      ANALYST         7566 19-APR-87      3000

       

   --查看告警日志文件路径

   SQL> show parameter background_dump_dest

 

   NAME                                TYPE        VALUE

   ------------------------------------ ----------- ------------------------------

   background_dump_dest                 string      /u01/app/oracle/admin/orcl/bdu

                                              mp  

                                              

   --查看动态性能视图

   SQL> select sql_text,executions from v$sql where cpu_time >2000000;

 

   SQL_TEXT

   --------------------------------------------------------------------------------

   EXECUTIONS

   ----------

   select s.synonym_nameobject_name, o.object_typefrom all_synonyms s,     sys.a

   ll_objects o where s.ownerin ('PUBLIC',:schema)and o.owner = s.table_owner an

   d o.object_name= s.table_name and o.object_type in ('TABLE','VIEW', 'PACKAGE',

   'TYPE', 'PROCEDURE', 'FUNCTION','SEQUENCE')

           2

 

   SQL> select username,status,server,statefrom v$session where program= 'plsqldev.exe';

 

   USERNAME                       STATUS  SERVER    STATE

   ------------------------------ -------- --------- -------------------

   SYS                            INACTIVE DEDICATED WAITING

   SYS                            INACTIVE DEDICATED WAITING

 

   SQL> select sid,ctimefrom v$lock wheresid = 275;

 

         SID      CTIME

   ---------- ----------

         275       9607

                    275      9270

         275       9243

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值