Oracle 数据库启动与关闭 各种方式详解整理

时间:2021-06-06 12:55:33

概述

只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库

在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库。

虽然数据库正常运行,但如果没有启动监听程序,客户端就不能连接到数据库。

在oracle用户下: 启动监听程序 lsnrctl start 关闭监听程序lsnrctl stop

查询监听程序状态lsnrctl status

startup

支持参数

STARTUP options | upgrade_options

options为:[FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname]

| [ OPEN [open_options] [dbname] ] | NOMOUNT ],

NOMOUNT、MOUNT、OPEN为startup的三个阶段,不能在命令中同时存在。其中,open_options为:READ {ONLY

| WRITE [RECOVER]} | RECOVER。

upgrade_options为:[PFILE=filename] {UPGRADE | DOWNGRADE} [QUIET]

Oracle数据库的完整启动过程包含以下3个步骤:

简单地说,就是:启动实例-->加载数据库-->打开数据库.

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

1.创建并启动与数据库对应的实例。

在启动实例时,将为实例创建一系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。在实例启动的过程中只会使用到初始化参数文件,数据库是否存在对实例的启动没有影响。如果初化参数设置有误,实例将无法启动。

2.为实例加载数据库。

加载数据库时实例将打开数据库的控制文件,从控制文件中获取数据库名称、数据文件的位置和名称等有关数据库物理结构的信息,为打开数据库做好准备。如果控制文件损坏,则实例将无法加载数据库。在加载数据库阶段,实例并不会打开数据库的物理文件----数据文件和重做日志文件。

3.将数据库设置为打开状态。

打开数据库时,实例将打开所有处于联机状态的数据文件和重做日志文件。控制文件中的任何一个数据文件或重做日志文件无法正常打开,数据库都将返回错误信息,这时需要进行数据库恢复。

只有将数据库设置为打开状态后,数据库才处于正常状态,这时普通用户才能够访问数据库。在很多情况下,启动数据库时并不是直接完成上述3个步骤,而是逐步完成的,然后执行必要的管理操作,最后才使数据库进入正常运行状态。所以,才有了各种不同的启动模式用于不同的数据库维护操作。

因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库。

小白:在启动实例之前,需要先启动SQL*Plus,并以一个用户身份连接到Oracle。

启动模式详解

1.NoMount 模式(启动实例不加载数据库)

命令:startup nomount

讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据文件。在NoMount模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETER、V$SGA、V$PROCESS 和 V$SESSION等,这些视图中的信息都是从SGA区中获取的,与数据库无关。非安装启动,这种方式启动下可执行:重建控制文件、重建数据库、读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。

模式用途:

(1)创建新数据库;

(2)重建控制文件。

2.Mount模式(加载数据库但不打开数据库)

命令:startup mount

讲解:这种启动模式将为实例加载数据库,但保持数据库为关闭状态。因为加载数据库时需要打开数据库控制文件,但数据文件和重做日志文件都都无法进行读写,所以用户还无法对数据库进行操作。 在Mount模式下,只能访问那些与控制文件相关的数据字典视图,包括V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE 和 V$LOGFILE等,这些视图都是从控制文件中获取的。

模式用途:

(1)重命名数据文件;

(2)添加、删除或重命名重做日志文件;

(3)执行数据库完全恢复操作;

(4)改变数据库的归档模式。

 

3.Open模式(正常打开数据库)

命令:startup [open]

讲解:正常按3个步骤启动数据库。

模式用途:平时不对数据库做什么维护,像只做应用开发,用这个模式就好了。

 

4.强制启动模式

命令:startup force

用途&讲解:在某些情况下,使用前面的各种模式都无法成功启动数据库时,可以尝试强制启动模式。

 

使用Alter Database语句,还可以在各启动模式间切换。并且,还可以对数据库设置不同的状态用于不同的操作,如受/非受限抽状态、只读。

使用Alter Database语句,在各启动模式间切换。

(1)从NoMount模式切换到Mount模式(没有从mount切换到nomount的):

命令:ALTER DATABASE MOUNT;

(2)数据库状态为关闭时,切换到Open模式

命令:ALTER DATABASE OPEN;

(3)在Open模式下,还可以选择将数据库设置为非受限状态和受限状态。

命令:

在启动Open模式时,添加restrict关键字:startup restrict

设置或取消受限状态:alter system enable\disable restricted session;

讲解:

非受限状态,就是我们平时应用程序开发用到的状态。

受限状态,当打开的数据库被设置为受限状态时,只有Create Session 和 Restricted Session系统权限 或者 具有SYSDBA  和 SYSPORE 系统权限的用户才能连接到数据库。但进入受限状态后,系统中仍然可能会存在活动的普通用户会话。

受限状态用途:

(1)执行数据导入或导出操作;

(2)暂时拒绝普通用户访问数据库;

(3)进行数据库移植或升级操作。

(4) 只读状态

设置只读命令:alter database open read only;

取消只读命令:alter database open read write;

用途&讲解:当一个正常打开的数据库被设置为只读状态时,用户只能查询数据,但不能以任何方式对数据库对象进行修改。处于只读状态,可能保证数据文件和重做日志文件中的内容不被修改,但是并不限制那些不会写入数据文件与重做日志文件的操作。

关闭数据库与实例

与数据库启动一下,关闭数据库与实例也分为3步:关闭数据库-->实例卸载数据库--->终止实例

(1)关闭数据库,oracle将重做日志高速缓存中的内容写入重做日志文件,并且将数据库高速缓存中被改动过的数据写入数据文件,然后再关闭所有的数据文件和重做日志文件,这时数据库的控制文件仍然处于打开状态,但是由于数据库处于关闭状态,所以用户无法访问数据库。

(2)卸载数据库,关闭数据库后,例程才能被卸载,控制文件再这个时候被关闭,但例程仍然存在 。

(3)终止例程,进程终止,分配给例程的内存sga区被回收。

1.Nomal(正常关闭方式)

命令:shutdown nomal

讲解:正常方式关闭数据时,Oracle执行如下操作:

(1)阻止任何用户建立新的连接。

(2)等待当前所有正在连接的用户主动断开连接(此方式下Oracle不会立即断掉当前用户的连接,这些用户仍然操作相关的操作)

(3)一旦所有的用户都断开连接,则立即关闭、卸载数据库,并终止实例。(所以,一般以正常方式关闭数据库时,应该通知所有在线的用户尽快断开连接)

2.Immediate(立即关闭方式)

命令:shutdown immediate

讲解:

(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。

(2)Oracle不等待在线用户主动断开连接,强制终止用户的当前事务,将任何未提交的事务回退。(如果存在太多未提交的事务,此方式将会耗费很长时间终止和回退事务)

(3)直接关闭、卸载数据库,并终止实例。

3.Transactional(事务关闭方式)

命令:shutdown transactional

讲解:这种方式介于正常关闭方式跟立即关闭方式之间,响应时间会比较快,处理也将比较得当。执行过程如下:

(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。

(2)等待所有未提交的活动事务提交完毕,然后立即断开用户的连接。

(3)直接关闭、卸载数据库,并终止实例。

4.Abort(终止关闭方式)

命令:shutdown abort

讲解:这是比较粗暴的一种关闭方式,当前面3种方式都无法关闭时,可以尝试使用终止方式来关闭数据库。但是以这种方式关闭数据库将会丢失一部份数据信息,当重新启动实例并打开数据库时,后台进程SMON会执行实例恢复操作。一般情况下,应当尽量避免使用这种方式来关闭数据库。执行过程如下:

(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。

(2)立即终止当前正在执行的SQL语句。

(3)任何未提交的事务均不被退名。

(4)直接断开所有用户的连接,关闭、卸载数据库,并终止实例。

Oracle 数据库启动与关闭 各种方式详解整理的更多相关文章

  1. Oracle数据库启动和关闭

    在介绍oracle数据库的启动和关闭前,先看一下Oracle的参数文件. oracle参数文件 1.初始化参数文件 oracle的初始化参数文件分为spfilesid.ora.spfile.ora.i ...

  2. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  3. Oracle 数据库启动与关闭

    只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果没有启 ...

  4. oracle数据库启动和关闭方式

    Oracle数据库是重量级的,其管理非常复杂,将其在Linux平台上的启动和关闭步骤整理一下. 安装完毕oracle以后,需要创建oracle系统用户,并在/home/oracle下面的.bash_p ...

  5. oracle数据库--启动和关闭

    oracle--启动 oracle数据库的启动过程包含3个步骤:启动实例->加载数据库->打开数据库 分步骤启动过程可以对数据库进行不同的维护操作,对应我们不同的需求. 启动模式: 1.s ...

  6. Linux 中 Oracle 数据库启动和关闭

    有时候你需要重启Linux 上的 Oracle 数据库. 注意先启动数据库,然后在启动数据库监听. a.切换为 oracle 用户身份,也可以使用 su - 将 home 和 path 都切换到 or ...

  7. Oracle——数据库启动与关闭

    本文内容 服务器环境 客户端环境 概述 启动数据库 关闭数据库 补充 参考资料 本文说明 Oracle 数据库的启动和关闭,内容虽然基础,但是在数据库很多操作中都需要,因此,基础而重要,必须深入理解. ...

  8. ORACLE数据库学习之SQL性能优化详解

                                                                                    Oracle  sql 性能优化调整 ...

  9. Oracle数据库入门——sql语句和函数详解

    一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构 ...

随机推荐

  1. 4.VS2010C++建立DLL工程

    相关资料: http://blog.csdn.net/jshayzf/article/details/23608705 http://blog.csdn.net/huang_xw/article/de ...

  2. 【HDOJ】1506 Largest Rectangle in a Histogram

    Twitter还是Amazon拿这个题目当过面试题.DP区间求面积. /* 1506 */ #include <cstdio> #include <cstring> #incl ...

  3. spring mvc 和ajax异步交互完整实例

    Spring MVC 异步交互demo: 1.jsp页面: <%@ page language="java" contentType="text/html; cha ...

  4. 异步获取CMD命令行输出内容

    当控制台命令使用process.Start(); 后可以直接显示输出内容,当然它是异步显示的不用等程序结束.代码如下: using System;using System.Collections.Ge ...

  5. Filecoin挖矿进展

      预计Filecoin第一个版本发布最早在 2018.3月份(预计)   Protocol Labs这次ICO拿到了2.05亿美元,已经富得流油了,相信开发进度会快很多,Filecoin论文发表最早 ...

  6. Super Jumping&excl; Jumping&excl; Jumping&excl; ---HDU - 1087

    Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...

  7. PHP处理XML文档,没有CDATA部分数据处理

    在博客备份时,导出了所有文章,导出是xml文档,文章内容在CDATA部分. 这里介绍下XML中CDATA: 所有 XML 文档中的文本均会被解析器解析.只有 CDATA 区段(CDATA sectio ...

  8. java&period;lang&lpar;StringBuffer&rpar;

    public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...

  9. AngularJs&lpar;SPA&rpar;单页面SEO以及百度统计应用(下)

    苍苍之天不得久视,堂堂之地不得久履 当你小心翼翼的开启服务端渲染的同时,一个问题不得不注意,使用内存模式去保存渲染过的页面,这样服务断掉重启后,缓存也没有了,所以这里我们使用mongdodb进行本地化 ...

  10. php 将富文本编辑后的内容取出

    背景:项目中用了富文本编辑器,讲写完的内容存入了数据库,但是取出的时候因为有些展示地方并不需要样式,只想获取到内容,所以需要将带了html编码的信息解析出来. 原始信息如下 [task_desc] = ...