Oracle 12c云数据库备份与恢复技术
上QQ阅读APP看书,第一时间看更新

1.3.3 进程管理

进程是操作系统中一组用于完成指定任务的动态执行的程序。进程是一个动态概念,可以动态地创建,完成任务后即会消亡。每个进程都有自己的专用内存区。所有Oracle用户访问Oracle数据库实例都会执行两类代码:一类是应用程序代码或Oracle工具代码;另一类是Oracle服务器代码,这些代码由进程来执行。

1.进程分类

Oracle使用多个进程来运行Oracle代码的不同部分,并为用户创建服务进程。每个连接用户各有一个服务进程或多个用户共享一个或多个服务进程。Oracle中每个进程完成指定的工作。根据每个进程所完成的任务,在Oracle系统中将进程分为用户进程和Oracle进程。Oracle数据库可以根据不同的配置工作在专用服务模式(一个用户进程对应一个服务进程)和共享服务模式(一个服务进程被多个用户进程共享)。

(1)用户进程

用户进程(User Process)运行应用程序或Oracle工具代码,它在用户方(如客户端)工作。当用户执行应用程序或工具软件(如SQL * Plus)等连接数据库时,由Oracle创建用户进程运行应用程序。用户进程向服务进程请求信息,但它不是实例的组成部分。用户进程通过SGA区与服务器中的Oracle进程进行通信。

(2)Oracle进程

Oracle进程(Oracle Process)在创建实例时由Oracle本身产生,执行的是Oracle数据库的服务器端的代码,用于完成特定的服务功能。在多线程结构,Oracle进程可以是操作系统进程,也可以是操作系统进程中的一个线程。

Oracle进程又分为服务进程(Server Process)和后台进程(Background Process)。服务进程是Oracle数据库自身在服务器端创建,用于处理连接到实例中的用户进程所提出的请求;后台进程是与数据库实例一起启动的进程,它们用来完成实例恢复、写数据库、写重做日志到磁盘文件等功能。

2.服务进程

Oracle通过创建服务进程为连接到数据库实例中的用户进程提供服务,用户进程总是通过服务进程与Oracle数据库进行通信。

为每个用户建立的服务进程主要完成如下任务:

①解析并执行应用程序所提交的SQL语句,包括创建和执行查询计划。

②如果所需数据不在缓存中,就从数据文件中读出必要的数据块到SGA区的数据库缓存中。如果数据在缓存中,那么直接将数据返回用户。

③按应用程序能够处理的方式将数据返回用户进程。

④执行PL/SQL程序代码。

根据数据库提供服务的方式,服务进程可分为专用服务进程和共享服务进程。在专用服务进程中,Oracle为每一个连接到实例的用户进程启动一个专用的服务进程。一个专用服务进程仅为一个用户进程提供服务。在专用服务进程下,用户进程数量与实例中的服务进程数量是一样的。因此,当同一时刻存在大量的用户进程时,专用服务进程的效率可能会很低。

如果想用少量服务进程为大量用户进程提供服务,使这些服务进程始终处于繁忙状态,那么可以使用Oracle数据库提供的共享服务进程。在共享服务进程中,Oracle在创建实例时启动指定数目的服务进程(由初始化参数决定),在调度进程的管理下,这些服务进程可以为任意数量的用户进程提供服务。每个共享服务进程可以为多个用户进程提供服务。

3.后台进程

Oracle数据库可以处理多个并发用户请求并进行复杂的数据操作,同时还要维护数据库系统使其始终具有良好的性能。为了完成这些任务,Oracle数据库将不同的工作交给多个系统进程专门进行处理。每个系统进程的大部分操作都相互独立并且完成指定的一类任务,这些系统进程称为后台进程。图1-3描述了常用后台进程与Oracle数据库的不同部分进行交互的过程。

图1-3 后台进程与数据库各部分进行交互的过程

RECO—恢复进程;ARC0—归档进程;CKPT—检查点进程;DBW0—数据库写进程;D000—调度进程;LGWR—日志读写进程;PMON—进程监控进程;SMON—系统监控进程

后台进程的主要作用是以最有效的方式为并发建立的多个用户进程提供Oracle的系统服务,如进行I/O操作、监视各个进程的状态、维护系统的性能和可靠性等。

Oracle 12c有多个后台进程,根据后台进程启动的时机可分成三类:

强制后台进程(Mandatory Background Processes):它们是所有常用数据库配置都必须有的,在数据库启动时必须在实例中启动,主要有数据库写进程DBWn、日志写进程LGWR、检查点进程CKPT、系统监视进程SMON、进程监视进程PMON、可管理性监控进程MMON和MMNL、恢复进程RECO和监听程序注册进程LREG。

可选后台进程(Optional Background Processes):强制后台进程以外的所有进程都是可选后台进程,它们专门针对某项任务,如归档进程ARC0、作业调度进程CJQ0和Jnnn、闪回数据归档进程FBDA和空间管理合作进程SMCO等。

从进程(Slave Processes):它是代替其他进程完成任务的后台进程。Oracle数据库使用的从进程有:I/O从进程模拟系统与不支持设备间的异步操作,并行执行的服务进程和查询协调进程。

(1)数据库写进程(DBWn)

DBWn负责将数据库缓存中的脏缓存块成批写入数据文件中。通常Oracle只在创建实例时启动一个DBWn进程(称为DBW0)。如果数据库中的数据操作十分频繁,管理员可以启动更多的DBWn进程以提高写入能力。DBWn进程写入数据库的过程参见图1-3。

(2)日志写进程(LGWR)

日志写进程LGWR负责将重做日志缓存中的重做记录写入联机重做日志文件。在LGWR进程将缓存中的数据写入重做日志文件的同时,Oracle还能够继续向缓存中写入新的数据。LGWR进程将缓存中的数据写入重做日志文件之后,相应的缓存内容将被清空。LGWR进程除了要将重做日志缓存中的内容写入重做日志文件外,它还在实例没有启动CKPT进程时来完成检查点任务。此时在配置LGWR进程时,需要对一些与检查点相关的初始化参数进行配置。

(3)检查点进程(CKPT)

检查点是一个数据库事件,当该事件发生时CKPT进程通知DBWn进程将所有SGA数据库缓存中修改过的数据写入数据文件,同时将对数据库控制文件和数据文件的头结构进行更新,以记录下当前的数据库结构的状态。启动DBWn写操作将会产生重做日志,从而导致LGWR进程启动写入重做日志,此时数据库处于一个完整状态,即所有控制文件、数据文件、重做日志文件都有相同的SCN。

检查点是一种数据结构,包括检查点位置、SCN、恢复时的重做日志中的位置等。图1-4显示了检查点发生时DBW0、LGWR和CKPT三个进程的写操作过程。

图1-4 检查点发生时三进程的写操作过程

在发生数据库崩溃后,只需要将数据恢复到上一个检查点执行时刻即可。因此,缩短检查点执行的间隔,可以缩短数据库恢复所需的时间。Oracle数据库利用检查点可以减少实例或介质故障后恢复所需的时间;保证数据库缓存中脏数据能定期写到磁盘;保证所有一致性关闭时已提交数据都写到磁盘。

管理员可以根据实际应用为检查点选择合适的执行间隔,因为检查点执行间隔太短,将会产生太多的I/O操作;执行间隔太长,数据库的恢复将耗费太多的时间。通过设置初始化参数LOG_CHECKPOINT_TIMEOUT可指定检查点执行的最大时间间隔。

在要进行数据库备份时,为了使脏缓存数据都写入数据文件以保证数据库的一致性,管理员通常要手工进行检查点执行,即通过SQL命令强制后台进程CKPT产生检查点。手工检查点的命令为ALTER SYSTEM CHECKPOINT。

(4)归档进程(ARCn)

当数据库运行在归档模式下时,归档进程ARCn负责在日志切换后将已经写满的重做日志文件复制到归档重做日志文件中,以防止写满的联机重做日志文件被覆盖。

只有数据库运行在归档模式下并激活自动归档,ARCn进程才能被启动。要启动ARCn进程,需要将初始化参数ARCHIVE_LOG_START设置为TRUE。ARCn进程启动后,数据库将具有自动归档功能。但即使数据库运行在归档模式下,如果初始化参数ARCHIVE_LOG_START设置为FALSE,ARCn进程也不会被启动。这时,当重做日志文件全部被写满后,数据库将被挂起,等待DBA进行手工归档。

默认情况下,实例启动时仅启动一个归档进程ARC0。当ARC0进程在归档重做日志文件时,任何其他进程都无法访问这个重做日志文件。

如果LGWR进程要使用的下一个重做日志文件正在进行归档,数据库将被挂起,直到该重做日志文件归档完毕为止。如果当前ARCn的数量不能处理负载时,为了加快重做日志文件的归档速度,避免发生等待,LGWR进程会自动启动更多的归档进程。当LGWR启动新的ARCn进程时,会在警告文件中生成一条记录。

Oracle最多可以启动10个归档进程,从ARC0到ARC9。可以用ALTER SYSTEM命令来动态修改初始化参数LOG_ARCHIVE_MAX_PROCESSES以增加或减少归档进程的数量。