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

概述

只有具备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)直接断开所有用户的连接,关闭、卸载数据库,并终止实例。

时间: 2024-07-30 10:20:34

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

Oracle——数据库启动与关闭

本文内容 服务器环境 客户端环境 概述 启动数据库 关闭数据库 补充 参考资料 本文说明 Oracle 数据库的启动和关闭,内容虽然基础,但是在数据库很多操作中都需要,因此,基础而重要,必须深入理解.比如,何种情况应该使用何种数据库加载模式,以及数据库文件打开模式. 服务器环境 Windows 2003 R2 Oracle11g 32位 客户端环境 Windows 2008R2 Oracle 11g 32位客户端 概述 若用 startup 命令启动数据库,执行的操作要经历三个不同的阶段: 实例

Oracle数据库启动和关闭

要了解Oracle数据库的启动和停止需要先了解"实例"(instance)和"数据库"(database)这两个名词的定义: 数据库(database):物理操作系统文件或磁盘(disk)的集合. 实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享. 这两个词有时可以互换使用,不过二者的概念完全不同.实例和数据库之间的关系是:数据库可以由多个实例mount和open,而实例可以在任何时间点mou

oracle数据库启动及关闭

数据库关闭与启动: scn == system change number 数据库启动步骤 nomount----> mount---->open (1)第一阶段 SQL> startup nomount ORACLE instance started. Total System Global Area 7148580864 bytes Fixed Size    2214216 bytes Variable Size 3825206968 bytes Database Buffers

oracle数据库--启动和关闭

oracle--启动 oracle数据库的启动过程包含3个步骤:启动实例->加载数据库->打开数据库 分步骤启动过程可以对数据库进行不同的维护操作,对应我们不同的需求. 启动模式: 1.startup nomount 非安装启动 即启动实例不加载数据库,这种方式下启动可以执行:重建控制文件.重建数据库: 这种启动模式需要操作的文件:init.ora 读取init.ora文件,启动instance,即启动SGA和后台进程. 讲解:nomount的过程其实就是启动instance的过程,内存分配和

Linux 中 Oracle 数据库启动和关闭

有时候你需要重启Linux 上的 Oracle 数据库. 注意先启动数据库,然后在启动数据库监听. su oracle sqlplus /nolog connect /as sysdba startup //开启监听前先退出 sqlplus exit lsnrctl start //关闭数据库 shutdown immediate a.startup 参数 不带参数,启动数据库实例并打开数据库,以便用户使用数据库,在多数情况下,使用这种方式! nomount,只启动数据库实例,但不打开数据库,在

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

在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了序列的用法,希望能够对您有所帮助. AD: 在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其实是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值. 创建序列需要CREATE SEQUENCE系统权限

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

一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构的数据定义语言命令有: create table alter table truncate table drop table eg. --创建tb_stu表数据结构 create table tb_stu( id number, name varchar2(20) );   --修改tb_stu表数

Linux下oracle数据库启动和关闭操作

第一步:登陆 root登陆之后切换到oracle用户上,输入 su oracle 第二步:连接 在oracle用户下,输入 sqlplus /nolog 第三步:使用管理员权限 输入 connect /as sysdba 第四步:启动/关闭服务 输入 startup startup参数 不带参数,启动数据库实例并打开数据库,以便用户使用数据库,在多数情况下,使用这种方式! nomount,只启动数据库实例,但不打开数据库,在你希望创建一个新的数据库时使用,或者在你需要这样的时候使用! mount

Oracle数据库悲观锁与乐观锁详解

数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住.而乐观锁就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做. 先从悲观锁开始说.在SqlServer等其余很多数据库中,数据的锁定通常采用页级锁的方式,也就是说对一张表内的数据是一种串行化的更新插