第十二章 数据库和实例启动和关闭

12、数据库和实例启动和关闭

这一章解释了启动和关闭Oracle实例和数据库的过程。

这一章包含下列主题:

u Oracle实例介绍

u 实例和数据库启动概述

u 数据库和实例管理概述

Oracle实例介绍

每个运行着的Oracle数据库和一个Oracle实例关联。当一个数据库在数据库服务器(不论计算机类型如何)上启动时,Oracle分配一个叫系统全局区(SGA)的内存区域和启动一个或多个Oracle进程。SGA和Oracle进程的合集叫做一个Oracle实例。实例的内存和进程高效的管理相关的数据库数据,为数据库的一个或多个用户服务。

图12-1显示一个Oracle实例

图12-1 一个Oracle实例


实例和数据库

启动一个实例之后,Oracle将一个实例和特定数据库关联。这是一个挂接(mounted)数据库。数据库然后准备被打开,这样就可以允许认证客户访问。

多个实例可以同时运行在一台机器上,每个访问它们自己的物理数据库。在大规模的集群系统中,真正应用集群(RAC)可以让多个实例访问单个数据库。

只有数据库管理员可以启动一个实例和打开数据库。如果数据是开放状态,那么数据库管理员可以关闭数据库,所以数据库就处于关闭状态。当一个数据库被关闭,用户不能访问它包含的任何信息。

使用管理员权限连接Oracle能启动和关闭数据库。通常用户不能控制当前数据库的状态。

使用管理员权限连接

数据库启动和关闭是权力很大的管理员选项,只能由使用管理权限连接Oracle的用户操作。依赖于操作系统的不同,一个用户可以在下列情况之一构建管理员权限:

u 用户的操作系统权限允许他或者她使用管理权限连接(操作系统验证)

u 被赋予SYSDBA或者SYSOPER权限的用户和数据库密码文件确认拥有数据库管理员权限的用户

当你以SYSDBA权限连接,你处于SYS用户的模式下。当你以SYSOPER权限连接,你处于公共模式下。SYSOPER权限是SYSDBA权限的子集。

初始化参数文件和服务器参数文件

想要启动一个实例,Oracle必须读取初始化参数文件或者服务器参数文件。这些文件包含实例和数据库的配置信息列表。传统上Oracle在一个文本初始化参数文件保存初始化参数。你可以选择在二进制服务器参数文件(SPFILE)维护初始化参数。

服务器参数文件中保存的初始化参数是持久的,这样实例运行时参数的任何改变都可以在实例关闭、重启时保持。

初始化参数分为两类:基本和高级。在大多数情况下,只需要设置和调整基本参数就可以获得合理的性能。在少数情况下,必须调整高级参数来获得更好的性能。

大部分初始化参数属于下列情况之一:

u 给事物命名的参数,比如文件

u 设置限制的参数,比如最大值

u 影响容量的参数,比如SGA的大小,这些叫做可变参数。

其他的初始化参数告诉Oracle:

u 启动实例的数据库的名字

u SGA内存结构使用的内存多少

u 充满的重做日志文件如何处理

u 数据库控制文件的名字和位置

u 数据库中undo表空间的名字

参数值如何改变

数据库管理员可以调整可变参数来提高数据库系统的性能。参数如何精确的影响一个系统依赖于大量的数据库特性变量。

某些参数在实例运行时可以通过ALTER SESSION或ALTER SYSTEM来动态修改。除非你使用服务器参数文件(SPFILE),使用ALTER SYSTEM语句产生的改变只在当前实例起作用(重启后消失)。你必须手工修改文本初始化参数文件,这样下次实例启动时可以知道参数改变了。当你使用SPFILE,你可以在磁盘上更新参数文件,所以修改在数据库重启和关闭之后都不会消失。

Oracle在你的数据库软件中提供初始的初始化参数文件,或者由数据库配置助手创建。你可以根据你的配置、选项和你调整数据库的计划来编辑这些Oracle支持的初始化参数和增加其他参数。对于没有在初始化参数文件中明确指定的相关初始化参数,Oracle使用默认值。如果你第一次创建一个Oracle数据库,建议你尽量少修改初始化参数值。

实例和数据库启动概述

启动一个数据库并对系统范围的用户可用需要3个步骤:

1、启动实例

2、挂接数据库

3、打开数据库

数据库管理员可以在SQL *Plus中使用STARTUP命令或者企业管理器来执行这些步骤。

实例如何启动

当Oracle启动一个实例时,它读取服务器参数文件(SPFILE)或者初始化参数文件来确定初始化参数的值。然后,它分配SGA(数据库信息使用的共享内存区域)和创建后台进程。在这时候,没有数据库与这些内存结构和进程关联。

实例启动的限制模式

你可以以限制模式启动一个实例(或者以后将一个现存实例修改为限制模式)。这个会限制拥有RESTRICTED SESSION的系统权限的用户才能连接数据库。

异常情况的强制启动

在特殊情况下,前一个实例可能没有完全关闭。例如,实例的一个进程可能没有正常结束。在这种情况下,在通常的实例启动中数据库会返回一个错误。为解决这个问题,你必须在启动新实例之前结束前个实例的所有剩余的进程。

数据库如何挂接(Mount)

实例挂接一个数据库来将数据库和这个实例联系起来。为挂接数据库,实例需要找到数据库的控制文件并打开它们。控制文件在用来启动实例的参数文件中的CONTROL_FILE初始化参数指定。Oracle然后读取控制文件来获得数据库数据文件和重做日志文件的名字。

这时候,数据仍然是关闭的,只能由数据库管理员访问。数据库管理可以在数据库关闭时完成特定的维护操作。但是,数据库还不能由普通用户访问。

真正应用集群时如何挂接数据库

如果Oracle允许多个实例同时挂接同一个数据库,那么数据库管理员可以使用初始化参数CLUSTER_DATABASE来使得数据库对多个实例可用。CLUSTER_DATABASE参数的默认值为false。不支持真正应用集群的Oracle版本只允许CLUSTER_DATABASE值为false。

如果挂接数据库的第一个实例的CLUSTER_DATABASE为false,那么只有这个实例可以挂接这个数据库。如果第一个实例的CLUSTER_DATABASE参数为true,那么其他参数CLUSTER_DATABASE值为true的实例也可以挂接这个数据库。可以挂接数据库的实例数量是有一个预先定义的最大值,是在你创建数据库时指定的。

如果挂接一个Standby数据库

一个standby数据库维护了你的主数据库的复本,在灾难情况下提供持续的可用性。

Standby数据库时常处于恢复模式。为维护你的standby数据库,你必须使用ALTER DATABASE语句来以standby模式挂接,并且应用主数据库的归档重做日志。

你可以以只读模式打开一个standby数据库,把它作为一个临时报表数据库。你不能以读/写模式打开一个standby数据库。

如何挂接一个克隆数据库

克隆数据库是一个数据库的专业拷贝,可以用来对表空间时间点恢复。当你执行表空间时间点恢复时,你挂接一个克隆数据库,将表空间恢复到特定时间点,然后从克隆数据库导出元数据到主数据库和从恢复表空间拷贝数据文件。

当你打开数据库时发生了什么

打开一个挂接数据库使得它可以执行通常的数据库操作。任何有效用户可以连接这个打开的数据库并访问它自己的信息。通常有一个数据库管理员可以打开一个数据库来对通常操作可用。

当你打开一个数据库,Oracle打开在线数据文件和重做日志文件。如果数据库前次关闭时一个表空间离线,当你重新打开数据库时,表空间和对应的数据文件仍然离线。

如果任何数据文件和重做日志文件不存在,在你试图打开数据库时,Oracle会返回一个错误。你必须在打开数据库之前从一个备份恢复任何损坏的或丢失的文件。

实例恢复

如果数据库上次不正常的关闭,可能是数据库管理员结束了这个实例,也可能是断电,那么数据库重新打开时自动执行恢复。

Undo表空间获得和管理

当你打开一个数据库时,实例试图获得一个或多个undo表空间。你在实例启动时使用初始化参数UNDO_MANAGEMENT来确定在自动undo管理模式还是在手动undo管理模式下工作。支持的参数值为AUTO或者MANUAL,如果是AUTO,实例在自动undo管理模式下启动。默认值为MANUAL。

u 如果你使用undo表空间方式,你使用自动undo管理模式,这是推荐方式。

u 如果你使用回滚段方式管理undo空间,那么你使用手动undo管理模式。

解决存疑分布式事务

偶尔数据库异常关闭会导致一个或多个分布式事务处于存疑状态(既不是提交也不是回滚状态)。当你重新打开数据库并且完成恢复后,RECO后台进程自动立刻一致性的解决存疑分布式进程。

以只读模式打开数据库

你可以以只读模式打开任何数据库,以阻止用户进程修改数据。只读模式限制数据库访问只能为只读事务,不能写入数据文件或重做日志文件。

在只读模式下,其他文件(如控制文件、操作系统审计跟踪、跟踪文件和警告日志)的磁盘写入可以持续。临时表空间的排序操作也不受影响。但是你不能将持久表空间离线,也不能使用任务队列。

只读模式并不限制数据库恢复或不修改数据库状态、不产生重做数据的操作。例如,在只读模式下:

u 数据文件保持离线和在线

u 离线文件和表空间可以恢复

u 控制文件对修改数据库状态的更新可用

一个很有用的只读模式的应用程序是standby数据库可以作为临时报表数据库使用。

数据库和实例的关闭概述

数据库和相关实例关闭的三个步骤:

1、关闭数据库

2、卸载数据库

3、关闭实例

数据库管理员可以使用企业管理器执行这些步骤。Oracle在实例关闭时自动执行这3个步骤。

关闭苏据库

当你关闭一个数据库,Oracle各自将SGA中的所有数据库数据和恢复数据写入数据文件和重做日志文件。下一步,Oracle关闭所有在线数据文件和重做日志文件。(任何离线表空间的离线数据文件都已经关闭。如果你以后重新打开数据库,任何离线状态的表空间和数据文件各自保持离线和关闭。)在这时候,数据库关闭,并对通常操作不可用。控制文件在数据库关闭但仍然挂接时仍然打开。

通过结束一个实例来关闭数据库

在少数紧急情况下,你可以结束一个打开数据库的实例采取即刻完全关闭数据库。这个过程非常快,因为跳过了将SGA中的缓存中的所有数据写入数据文件和重做日志文件这个动作。随后重新打开数据库需要恢复,Oracle自动执行这个过程。

注意:如果当数据库打开时发生系统错误或断电错误,然后实例实际上结束,当数据库重新打开时会执行恢复。

卸载数据库

数据库关闭之后,Oracle卸载数据库并将它和实例分离。这时,实例还在你的计算机上保持内存。

数据库卸载之后,Oracle关闭数据库的控制文件。

关闭实例

数据库关闭的最后步骤是关闭实例。当你关闭一个实例时,SGA从内存中移除,后台进程被结束。

异常实例关闭

在少数情况下,实例可能没有完全关闭;内存中的所有内存结构可能没有移除或者一个后台进程没有结束。当前一个实例还剩余一部分,后续的实例启动大部分情况下会失败。在这种情况下,数据库管理员可以强制启动新的实例,即首先清除上个实例的剩余部分,然后启动新的实例,或者在SQL *Plus中或使用企业管理器发布SHUTDOWN ABORT语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值