Concept-第12章翻译

来源:互联网 发布:单片机程序烧录 编辑:程序博客网 时间:2024/05/16 05:30

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

这篇文章解释了在一个是数据库实例和数据库的启动和停止时所包含的过程

这篇文章包含下面的内容:

 *数据库实例的介绍

 *数据库实例和数据库的启动的介绍

 *数据库实例和数据库的关闭的介绍

 

数据库实例的介绍

每个正在运行的数据库是与一个数据库实例有关的。当一个数据库在一个数据库服务器(不管机器的种类)上被启动时,oracle将分配一个叫SGA的内存区域并且启动一个或者多个oracle进程。被分配的SGAoracle进程的结合被称为oracle的一个实例。一个实例的内存和进程有效地管理相关的数据库数据和服务于一个或者多个oracle的用户。

12-1显示了一个数据库的实例

12-1 一个数据库实例

 

实例和数据库

在数据库的实例启动之后,oracle将该实例与指定的数据库发生联系。这个叫数据库被加载。然后数据库准备被打开,处于打开状态的数据库可以使经授权的用户访问该数据库。

多个实例的在同一台机器上可以并发地运行,每个实例访问它自己的物理数据库。在大型的簇系统中,RAC允许多个实例加载一个单独的数据库。

只有数据库管理员课余一启动一个实例并且打开数据库。如果一个数据库处于打开状态,然后数据库管理员能够关闭该数据库以便数据库处于关闭状态。当一个数据库被关闭,用户将不能够访问数据库所包含的信息。

数据库启动和关闭的安全性是由使用管理员身份连接到oracle数据库来控制的。一般的用户是没有对oracle数据库的当前状态有控制权的。

 

使用管理员身份的连接

数据库的启动和关闭是强大的管理权限并且这个权限只限于使用管理员身份连接到oracle的用户使用。依赖于操作系统,下面条件中的一个为一个用户建立了管理特权:

*用户的操作系统的权利允许他或她使用管理员的身份连接到数据库;

*一个被授予SYSDBA或者SYSOPER特权并且数据库采用密码文件来鉴别为数据库管理员的用户;

当你使用SYSDBA特权连接到数据库时,你将在SYS所拥有的模式下。当你使用SYSOPER特权连接到数据库时,你将处于公共的模式下。SYSEPER特权是SYSDBA特权的一个子集。

 

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

为了启动一个数据库实例,oracle必须要读一个初始参数文件或者一个服务参数文件。这些文件包含了那个实例和数据库的配置参数列表。Oracle传统的是以一个文本初始参数文件来存储初始参数的。你也可以选择以二进制服务参数文件(SPFILE)来维护初始参数。

存储在服务参数文件中的初始参数是持久的。因为在数据库实例运行过程中对服务参数文件中参数值的任何变化在一个实例被关闭又重新启动之后能够持续下来。

初始参数被分为两组:基本的和高级的。在大部分情况下,为了得到合理的性能只修改和优化基本的参数是必要的。在很少的情况下,为了得到理想的性能对高级的参数的修改也有可能是必须的。

大多数初始参数属于下面组中的一个:

*给事物命名的参数,比如:给文件命名;

*设置限制的参数,比如:设置最大值;

*影响容量的参数,比如:SGA的内存的大小,被称为变量参数;

在其他的事物中,初始参数告诉oracle

*启动的数据库实例所对应的数据库的名字;

*SGA中有多少内存被使用;

*填满的重做日志是如何处理的;

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

*在数据库中的撤消表空间的名字;

 

参数值是如何被改变的

数据库管理员为了改进一个数据库系统的性能可以调整变量参数的值。精确地知道哪个参数是影响一个系统最大的依赖于许多的数据库特征和变量。

一些参数可以在其实例正在运行时使用ALTER SESSION或者ALTER SYSTEM语句来动态地改变其值。采用ALTER SYSTEM语句所做的对初始参数值的改变只在当前的实例中有效,除非你使用一个服务参数文件(SPFILE)来改变参数值。为了能够使对初始参数的改变在下次启动实例时有效,你可以手动的修改文本初始参数文件。当你使用SPFILE文件来更新在磁盘上的参数以便你可以通过数据库关闭和启动之后使得所做的变更能够持久。

Oracle使用你的数据库软件提供的启动初始参数文件或者是通过数据库配置助手所创建的启动初始参数文件中的值来提供值。你可以编辑这些oracle提供的初始参数并且可以增加其他的参数,依赖于你的配置和选项以及你计划如何优化你的数据库的方案。对于任何相关的初始参数但是没有包含在初始文件中,oracle将提供默认值。如果你是第一次创建数据库,建议你设置你修改的初始参数的数量为最小化。

 

实例和数据库的启动的介绍

启动一个数据库并且将能够使数据库被大范围的使用分为三个步骤:

1、  启动一个实例;

2、  加载数据库;

3、  打开数据库;

一个数据库管理员可以使用SQL*PLUS中的STARTUP语句或者使用企业管理器来执行上面的这些步骤。

 

一个实例是如何被启动的

当一个数据库启动一个实例,数据库将读服务参数文件或者初始参数文件来决定初始参数的值。然后,数据库分配一个SGASAG是一个用来存储数据库信息的共享内存区域,并且除了分配一个SGA也将创建后台进程。在这个时间点上,没有数据库和这些内存和进程是有联系的。

 

实例启动的限制模式

你可以在限制模式下启动实例(或者之后修改一个存在的实例为限制模式)。在限制模式中只有那些被授予RESTRICTED SESSION系统特权的用户才能够连接数据库。

 

在反常情形下强迫启动

在一个不寻常的环境下,一个先前的实例可能还没有完全的关闭。例如:实例的进程中的一个进程可能还没有完全地终止。在这种情形下,数据库在常规的实例启动方式下会返回一个错误。为了解决这个问题,你必须在启动新实例之前终止先前实例残留的所有oracle进程。

 

数据库是如何被加载的

实例加载一个数据库使地数据库和那个实例发生联系。为了加载数据库,实例查找数据库控制文件并且打开这些控制文件。控制文件是采用在被用来启动实例的初始参数文件中的一个初始参数CONTROL_FILES参数值所指定。Oracle然后读控制文件来获取数据库的数据文件和重做日志文件的名字。

在这个时间点上,数据库还是处于关闭状态并且只有数据库管理员可以访问数据库。数据库管理员当完成特定的维护操作时可以保持数据库处于关闭状态。但是,数据库对于常规操作还是不可用的。

 

数据库是如何和RAC一起加载的

如果数据库允许多个实例来并发地加载同一个数据库,然后数据库管理员能够使用CLUSTER_DATABASE初始参数来使数据库能够被多个实例所使用。CLUSTER_DATABASE初始参数的默认的值是false。不支持RACoracle的版本只允许CLUSTER_DATABASE初始参数的值是false

对于一个加载数据库的第一个实例来说如果CLUSTER_DATABASE初始参数的值是false,那么就只能是那个实例能够加载数据库。如果在第一个实例CLUSTER_DATABASE初始参数的值被设置为true,如果其他的实例中CLUSTER_DATABASE参数值也被设置为true,则其他的实例也能够加载数据库。能够数据库的实例的个数受制于预先指定的最大值,这个最大值是在当数据库被创建的时候定义的。

 

备用数据库是如何被加载的

一个备用数据库维护主数据库的一个复制的副本并且在一个灾难性的事件中提供继续的可用性。

备份数据库是一直保持在恢复模式。为了维护你的备份数据库,你必须采用alter database语句来加载处于备份模式的备份数据库,并且应用主数据库产生的归档重做日志。

你可以以只读模式打开数据库来作为一个临时的报告数据库来使用它。你不能以读/写的模式打开备份数据库。

 

一个克隆数据库是如何被加载的

一个克隆数据库可以用来做在某个时间点上的表空间恢复的一个数据库的专门的复制品。当你执行某时间点上的表空间恢复,你加载克隆数据库并且恢复表空间到一个想要的时间点上,然后将元数据从克隆数据库导出到主数据库并且复制已经被恢复的表空间的数据文件。

 

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

打开一个已经被加载的数据库使得正常的数据库操作都可以使用。任何有效的用户能够连接到一个打开的数据库并且可以访问数据库的信息。通常情况下,一个数据库管理员打开数据库使一般的用户都可以使用。

当你打开数据库,oracle开放在线的数据文件和重做日志文件。如果在数据库先前被关闭时使一个表空间处于离线状态,那么该表空间以及相应的数据文件在数据库被重新打开之后还是处于离线状态。

在当你试图打开数据库时如果数据文件或者重做日志文件中任何一个文件不存在,那么oracle数据库返回一个错误。在你能够打开数据库之前你必须对任何一个受损的或者丢失的文件的备份执行恢复操作。

 

实例恢复

如果数据库最后被异常地关闭,或者是因为数据库管理员终止数据库的实例或者是因为断电的原因,然后在数据库被重新打开时oracle数据库自动地执行恢复操作。

 

撤消空间的获取和管理

当你打开一个数据库时,实例试图获取一个或者多个撤消表空间。你可以使用UNDO_MANAGEMENT初始参数在实例启动的时候来决定对于撤消表空间是采用自动管理模式还是手动管理模式。被支持的值是AUTO或者是MANUAL。如果是AUTO,实例是以自动管理的模式来被启动的。默认的值是MANUAL

 *如果你使用撤消表空间的方式,然后你对撤消表空间采用自动管理模式。这个是推荐的模式;

 *如果你使用回滚段来管理撤消空间,然后你采用手动管理的模式来管理撤消空间;

 

不确定状态的分布式事务的解决方案

有时一个数据库异常关闭带有一个或者多个分布式的事务处于不明确的状态(既不是提交也不是回滚状态)。当你重新打开数据库并且恢复完全时,RECO后台进程自动地,立即地并且是保持一致性的解决任何处于不确定状态中的分布式事务。

 

以只读模式打开数据库

你可以以只读模式打开任何数据库来阻止用户的事务修改数据库的数据。只读模式限制数据库访问只能是只读的事务,不能够向数据文件或者向重做日志文件中做写操作。

在只读模式下,磁盘仍然可以向其他文件做写操作,其他文件比如:控制文件,操作系统审计踪迹,跟踪文件,以及警告日志。对于排序所需要的临时的表空间在数据库是只读的模式打开下依然可以使用。但是,当一个数据库以只读模式打开时,你不能将持久的表空间处于离线状态。任务队列在只读模式下也是不可用的。

只读模式只读模式不会限制数据库的恢复或者是那些不需要产生重做数据的改变数据库状态的操作。例如:在只读模式下:

 *数据文件可以被设置为脱机和联机;

 *脱机的数据文件和表空间可以被恢复;

 *控制文件可以记录数据库的状态的变化;

只读模式下的一个有用的应用是备份数据库可以行使象临时报告数据库的功能。

 

数据库和实例关闭的介绍

关闭一个数据库和它相关的实例需要下面的三个步骤:

1、  关闭数据库;

2、  卸载数据库;

3、  关闭数据库实例;

一个数据库管理员使用数据库企业管理器可以执行上面的步骤。无论一个实例什么时候被关闭,Oracle自动地执行所有上面的三个步骤。

 

关闭数据库

当你关闭一个数据库时,oracle将存放在SGA中的所有的数据库数据和恢复数据写进数据文件和重做日志文件中去。紧接着,oracle就关闭所有联机的数据文件和重做日志文件。(任何脱机的表空间中的任何脱机的数据文件已经被关闭。如果你随后重新打开数据库,任何脱机的表空间以及它的数据文件仍然各自保持脱机和关闭状态。)在这个时间点上,数据库被关闭并且对于一般的操作是不可访问的。在一个数据库被关闭之后但是仍然处于加载状态时,控制文件是保持打开状态的。

 

通过终止一个数据库实例关闭数据库

在一些非常紧急的形势下,你可以终止一个打开状态的数据库的实例来关闭数据库并且使数据立即地完全关闭。这个过程是很快的,因为将在SGA缓存中的所有的数据写到数据文件和重做日志文件的操作被跳过。后来重新打开数据库需要恢复数据库,这个恢复操作被oracle自动的执行。

 

卸载一个数据库

在一个数据库被关闭之后,oracle卸载数据库使得数据库和实例断开关联。在这个时间点上,实例仍然保留在你机器的内存中。

在一个数据库被卸载之后,oracle关闭数据库的控制文件。

 

关闭一个实例

在数据库关闭的最后一个步骤是关掉实例。当你关闭数据库实例时,SGA的空间被从内存中删除并且后台进程被终止。

 

反常的数据库实例关闭

在一个不寻常的环境下,一个实例的关闭可能会关闭的不干净:所有的内存结构可能不会从内存中删除或者后台进程中的一个进程可能没有被终止。当前一个实例关闭不彻底有一些残留存在的话,后来实例被启动很可能会失败。在这样的情形下,数据库管理员可以通过首先删除前一个实例的残留物然后启动新的实例来强迫启动新的实例,或者通过在SQL*PLUS下或者使用企业管理器发起SHUTDOWN ABORT语句来删除前一个实例的残留物。

 
原创粉丝点击