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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:  Oracle 数据库实例启动关闭过程 --================================ -->Oracle 数据库实例启动关闭过程 --================================ /*     Oracle数据库实例的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行装载。

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




--================================

-->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.ora ---> spfile.ora ---> init.ora

           b.分配SGA

           c.启动后台进程

           d.打开并修改告警.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;

 

二、数据库实例的关闭

    关闭命令:shutdown 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,NAME from 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.emp where 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_name object_name, o.object_type from all_synonyms s,      sys.a

    ll_objects o where s.owner in ('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,state from v$session where program = 'plsqldev.exe';

 

    USERNAME                       STATUS   SERVER    STATE

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

    SYS                            INACTIVE DEDICATED WAITING

    SYS                            INACTIVE DEDICATED WAITING

 

    SQL> select sid,ctime from v$lock where sid = 275;

 

          SID      CTIME

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

          275       9607

          275       9270

          275       9243





About Me

...............................................................................................................................

● 本文整理自网络,乐沙弥,http://blog.csdn.net/leshami/article/details/5542983

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-05-09 09:00 ~ 2017-05-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。


DBA笔试面试讲解
欢迎与我联系

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
17天前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
197 93
|
23天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
29天前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
96 8
|
2月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
|
3月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
127 11
|
3月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
Oracle 关系型数据库 数据库
|
3月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
3月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
|
6月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1183 28

推荐镜像

更多