第2章 Oracle数据库体系结构
那么究竟Oracle数据库管理系统是个什么东西呢?我们如何去认识它和理解它呢?本章将根据第1章引入的Oracle数据库管理系统,对Oracle数据库体系结构进行介绍,让读者了解其内部运行机制、数据库体系结构的组成;了解它的重要元素,也即重要的物理文件;了解它所呈现的逻辑存储结构等。
本章学习要点:熟悉Oracle数据库的体系结构;熟悉Oracle数据库的逻辑存储结构;熟悉Oracle数据库的物理存储结构。
2.1 概述
Oracle数据库系统是一个复杂的软件系统。所谓Oracle的体系结构,是指Oracle数据库管理系统的组成部分和这些组成部分之间的相互关系,通常由两个主要部分组成,分别是数据库管理系统(DBMS)和数据库文件(Database File)。其中DBMS是由一组Oracle后台进程和一些服务器分配的内存空间组成,数据库文件则是一系列物理文件的集合。图2-1为Oracle数据库体系结构总体图。
图2-1 Oracle数据库体系结构
Oracle数据库体系结构描述了Oracle的整个工作运行机制,包括数据在数据库中的组织关系与管理方案,以及进程的协作关系。这种结构又可以称为“例程结构”,在数据库启动以后,Oracle首先要在内存中分配出一个区域,通过这个结构生成一个实例(Instance),这个实例会根据管理策略加载、启动数据库,然后该实例根据数据库操作要求,通过进程来访问与控制各种物理存储结构。
Oracle数据库系统=实例+数据库,其中数据库用来存储真实的数据库数据,并以物理文件的形式存在;实例则有自己的生命周期,可以启动、运行、关闭,通过内存中的一个动态生命周期来显现自身的存在。一个数据库服务器上可以有多个数据库,如果要使用这些数据库,须创建多个实例,这些实例都有一个独立的符号SID以示区分。用户连接数据库,并且对数据库进行操作的时候,事实上是连接到实例,并通过实例来完成数据库操作,所以实例是用户与数据库的中间层。
数据库最重要的功能是存储数据,可以把数据库当做数据存储的容器。数据库的存储结构可以分为逻辑存储结构和物理存储结构。其中物理存储结构存储实际的物理数据,并以物理文件的形式存储在硬盘上,依赖于所处的操作系统平台。而逻辑存储结构描述数据库管理系统对数据的组织与管理方式,与操作系统无关,逻辑存储结构往往更加接近于用户的真实思想,方便用户理解。
2.2 实例
Oracle实例(Instance)是系统全局区(SGA)、程序全局区(PGA)、用户全局区(UGA)和一些关键进程的总称,这些内存区域是实例运行的重要基础,其中UGA如果使用共享服务器的话,将会从SGA中分配,如果使用专用服务器的话,就从PGA中分配。在Oracle实时应用集群(RAC)中,会同时有多个实例使用同一个数据库,这些实例会位于不同服务器并保持互连接。
2.2.1 系统全局区
系统全局区(System Global Area,SGA)由一组所有用户共享的内存结构组成,它里面存储了Oracle数据库实例的数据和控制文件信息。如果有多个用户同时连接到数据库,他们会共享这一区域,因此SGA也称为Shared Global Area。当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。SGA主要包括以下几部分:
(1)共享池
共享池保存了进程最近执行过的SQL语句、PL/SQL过程与包、锁、数据字典信息以及其他信息,通过对最近已经运行过的信息进行保存,避免重复传输数据,从而提升了SQL的执行速度。这个内存区域主要由数据字典缓存和库缓存组成。
●数据字典缓存:存储了最近经常使用的数据字典信息,如表的定义、列的定义、用户、权限、数据库结构等信息。这个缓存在Oracle使用过程中经常被访问,用于解析SQL语句并判断操作对象的基本内容,或者判断权限是否存在。每次用户进程访问Oracle数据时,先从这个区域中寻找数据,如果这个区域中不存在用户想要的内容,则从数据文件中把相关内容导入到此内存区域中,并重新访问,这里与数据缓存区最大的区别在于这里的数据是一个类似数据库的结构,保存的是一条条数据记录,而不是简单的数据块。
●库缓存:保存最近使用过的SQL语句、PL/SQL过程和包等内容。这些内容是每次访问Oracle时进行的一些操作,这些操作在执行时需要进行对象的确认、操作优化、语法解析、权限控制等工作,每次运行都需要耗费很大的系统资源,所以需要对这种工作进行优化以提高效率。因此,设计了库缓存来存储相应的解析成果,这样在下一次执行时可以利用这些成果,而无需重复劳动。每次Oracle执行时会先访问库缓存来寻找最近使用过的执行语句,如果有则享用原有的成果,如果没有再重新解析语句并存入库缓存。
(2)数据缓存区
通过将最近使用过的数据存储在特定内存区域中,可避免从物理文件重复读取常用的数据。数据缓存区保存的是数据文件中最近或者经常使用的数据块,在Oracle读取相应的数据时,先从硬盘读取数据文件,并将数据放入数据缓存区中,然后再在内存中对数据进行处理。如果读取的数据已经在缓存中,则直接访问缓存中的数据,这些缓存中的数据也需要定期成批输入到硬盘中并保持同步。这种缓冲机制保证了更好的数据访问性能。
(3)结果缓存
结果缓存存储的是查询以后的结果,查询是Oracle使用非常频繁的操作,为了保证查询的性能,可以将查询的结果保存在缓存中,等下一次要进行查询时,可以直接从缓存中获取数据,而无需重新进行查询,这样对于频繁发生的操作可以起到很好的优化作用。
(4)大型池
大型池是对那些需要较大的内存、较频繁输入输出的操作提供的相对独立的内存空间。大型池的设定是为了保证共享池高效率地工作,因为某个操作如果有较大的内存需求,会影响共享池对其他数据块或者库语句的保存,进而导致性能下降。所以对特殊的、需求较大的操作单独设置大型池是必要的。需要大型池的操作主要包括:数据库的备份与恢复工作、Oracle的批量操作等。
(5)Java池
Java池是为了满足在Oracle中内嵌Java存储过程或其他Java程序运行时而需要的内存。包括对Java语言支持的语法分析表、执行方案、虚拟机数据,以及Java代码等内容。
(6)重做日志缓存区
重做日志缓存区是为了在存储重做日志文件的过程中提高存储效率而设计的缓存区域,保存最近使用过的重做日志记录。
在Oracle进行数据的增、删、改、查等操作时,Oracle都会为这些操作生成重做记录,并存储在重做日志文件中,这个存储过程比较消耗性能,所以需要建立一个缓存区,用来存储重做记录,而不是直接存储到重做日志文件。只有当缓存区触发设定的条件时,如达到一定的时间点或者存储的重做记录达到一定数量,才进行这个存储到数据文件的操作,这个工作由LGWR完成。
(7)流池
流池提供专门的流复制功能,这个部分可以使用内存块,也可以使用SGA的可变区域。如果在配置数据库时没有特别指定该区域,那么Oracle会自动建立,从而完成流复制的功能。这个自动建立过程也需要确认SGA_TARGET参数,如果有这个参数,Oracle会从系统全局区中分配内存给流池,如果没有则会从数据缓存区划分一部分内存给流池。
上面几部分内存加起来,就是SGA内存的总和。其中比较重要的是共享池和数据缓存区,它们对Oracle系统的性能影响最大。
通过下面的命令来查看SGA:
show parameter sga;
结果如下:
SQL>shou parameter sga; NAME TYPE VALUE --------- ------------------- ------------------- -------------------- lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 616M sga_garget big integer 0
2.2.2 程序全局区
程序全局区(Process Global Area,PGA),是一个进程的专用非共享的内存区,用来保存特定服务进程的数据和控制信息的内存结构,只有这个特定的服务进程才能访问它自己的PGA内存区。所有服务进程的PGA内存区的总和则是实例的PGA内存区的大小。
当用户进程连接到数据库实例时,会通过一个服务器进程来进行用户进程与数据库实例之间的通信,这个服务器进程会建立一个程序全局区。程序全局区是专门分配给当前用户进行会话服务的内存区,这个区域是服务器进程独享的区域,这是跟SGA的最大区别。当用户进程的会话结束时,Oracle会自动释放PGA所占有的内存区。
PGA内存区包含SQL工作区域、会话内存和私有SQL区域。
2.2.3 用户全局区
UGA(User Global Area)即用户全局区,它与特定的会话相关联。
对于专用服务器连接模式,UGA在PGA中分配。对于共享服务器连接模式,UGA在SGA的大型池中分配。
2.3 Oracle数据库逻辑存储结构
逻辑存储结构是Oracle数据库逻辑概念上的存储结构。在逻辑上,Oracle将保存的数据划分成一个个小单元,并且对这些小单元进行归类成为大一点的单元,其中高一级的存储单元由多个低一级的存储单元组成。
图2-2 Oracle数据库逻辑存储结构
逻辑存储结构包括表空间、段、区、数据块。其中一个表空间可以包含多个段,一个段可以包含多个区,一个区包含多个块,最后多个表空间可以组成数据库。见图2-2。
另外,一个区只能处于一个数据文件中,一个段中的各个区可以分处在多个数据库文件中。
2.3.1 表空间
数据库的基本逻辑存储结构,即一系列数据文件的集合。每个建立的数据库至少应该有一个表空间,而一个表空间只能属于一个数据库,每一个表空间在磁盘上的存储可以是一个或者多个数据文件。
表空间是最大的逻辑存储单元,所有的方案定义与数据都会存储在表空间中,其中非常重要的一个表空间是SYSTEM表空间,用来存储方案对象的定义,而数据可以根据用户的指定存储到对应的表空间中,一个用户的不同方案对象的数据也可以存储在不同的表空间中。
一个Oracle数据库管理系统安装时,自动创建的数据库中包含表空间如表2-1所示。
表2-1 自动创建的表空间
2.3.2 段
段用来存储表空间中某一种特定的具有独立存储结构的对象的所有数据,它由一个或者多个区组成。当创建表、索引等对象时,Oracle会为这些对象分配段以作为存储空间。段根据不同的类型可以分为多种,见表2-2。
表2-2 Oracle 11g的段类型
段会随着数据的增加而逐渐增大。而一个段会由多个区组成,每次增加段是通过增加区的个数实现,另外区是数据块的整数倍。
●数据段:用于存储表中的所有数据。每当用户创建表时,该用户的表空间中会为该表分配一个名字与表名相同的数据段,用于存储该表的所有数据。
●索引段:用来存储索引的所有数据,用户可以通过CREATE INDEX语句创建索引,或者通过约束的定义自动生成,生成的每个索引会有一个同名的索引段,以存储该索引的数据。
●临时段:存储数据排序操作所产生的临时数据。排序操作进行时,该用户的临时表空间中会自动创建一个临时段;排序结束时,临时段会自动消除。
●撤销段:用于存储用户数据被修改之前的值,以便在满足特定条件时可以对数据的修改回退。撤销段是数据库必需的。
●索引分区段:为分区表创建分区索引,则会生成一个索引分区段对应每一个分区索引。
●表分区段:用来存储分区表中的数据,在用户创建分区表的时候,会在默认表空间中为该表的每个分区分配一个表分区段。
●二进制大对象段:用于存储LOB数据类型列中的数据,如文档、图像、视频、特殊对象等数据。如果对于LOB列来说,数据长度大于4000字节,则数据会被存放到二进制大对象中。
2.3.3 区
区是由物理上连续存放的数据块构成的。这是Oracle存储分配的最小单位,其中一个区由多个数据块组成,多个区可以组成一个段。在数据库中创建带有实际存储结构的方案对象时,会分配若干个区给该对象。
2.3.4 数据块
块是Oracle用来管理存储空间的最小数据存储单位,也是输入输出时数据操作的最小单位。在操作系统中,对应数据库输入输出操作的最小单位是操作系统块。数据块可以存储各种类型的数据,并且每个数据块都具有相同的结构。
块的大小是一个表空间的属性。SYSTEM和SYSAUX表空间具有相同的、标准的块大小,这个大小是在创建数据库时由DB_BLOCK_SIZE初始化参数制定,并且在创建数据库后不能改变。
2.4 Oracle数据库物理存储结构
Oracle数据库物理存储结构与数据库逻辑存储结构有不可分割的关系,Oracle数据库的数据逻辑上存储在表空间中,并且由表空间继续分成多个段、区、数据块的逻辑存储结构,而与表空间对应的是物理存储结构中数据文件,一个表空间由多个数据文件组成。数据文件是操作系统文件,是物理存储结构中最重要的内容,Oracle通过表空间来创建数据文件,一个数据文件只能属于一个表空间。
提示:逻辑存储结构与物理存储结构的对应关系请参看第5章。
2.4.1 数据文件
数据文件(Data File)即实际存储数据的文件,包括全部的数据库数据,是实际存在的操作系统文件,逻辑数据库结构(如表、段、区、数据块)的物理数据即存储在这个数据存储文件之中。每个Oracle数据库都包含一个或多个数据文件,本书案例的各个表空间对应的数据文件存储在C:\app\hdu\oradata\dsms下,如表2-3所示,可以通过查询数据字典DBA_DATA_FILES和V$DATAFILE来了解表空间和与其对应的数据文件。临时表空间对应的数据文件称为临时文件,查询数据字典DBA_TEMP_FILES和V$TEMPFILE可以了解临时表空间包含的临时文件信息。
表2-3 表空间与数据文件的对应关系
数据文件会随着数据的存入而增大,增加的过程中会分配更大的区,但是不会因为删除数据而减少,因此也会随着数据的删除增加许多空闲的分区。
一个表空间可以对应若干个数据文件,但一个数据文件只能属于一个表空间。
在用户创建表空间时,数据文件会同时产生,数据文件的大小会根据系统设定的默认值确定,但这个数据文件并不存在真实数据,数据是伴随实际数据的存储产生的。
在对数据文件进行增加操作的过程中,可以增加数据文件的大小,也可以生成新的数据文件来满足数据存储的需要。
除SYSTEM表空间以外,任何表空间可以从联机切换到脱机状态,表空间的脱机也代表者数据文件的脱机,在脱机状态下可以对数据库进行备份与恢复工作。
2.4.2 重做日志文件
重做日志文件(Redo Log File)负责记录数据库内对任何数据的处理情况,可用于数据恢复;这些数据的处理情况包括用户对数据的修改,也包括管理员对数据库的修改。
用户对数据库进行的任何修改,都是先在缓存区中进行,然后在满足一定的条件下,统一将修改数据成批写入物理文件中。这种缓存机制,主要是为了保证更好的性能,但是这种机制可能会在数据库崩溃时导致数据丢失,所以需要能够重现所有的操作,以便进行数据库的恢复,这也就是重做日志文件的作用,只要其中的重做信息没有丢失,就可以在系统出错时来恢复数据。
每个数据库至少有两个重做日志文件,通过LGWR进程来负责往其中写入信息,并且在两个重做日志文件之间进行切换,若一个写满,再写第二个,另外可以通过ARCn进程对重做日志文件进行归档,以便对重做日志文件也进行一种保护,更好地保证在产生故障时数据库的恢复。
可以通过V$LOGFILE对重做日志文件信息进行查询。
2.4.3 控制文件
控制文件(Control File)是控制和记录数据库的实体结构;它是一个二进制文件,并不大,负责维护数据库的全局结构,支持数据库的启动和运行。控制文件在创建数据库时产生,每个数据库都会有一个对应的控制文件。
控制文件虽然是一个比较小的二进制文件,但它是数据库的关键文件,对数据库正常启动和运行至关重要,这些重要信息是其他地方所没有的。
其包含的信息如下:
●数据库名。
●数据库的建立日期。
●数据库文件的名字和位置。
●日志文件的名字和位置。
●表空间信息。
●数据文件脱机范围。
●日志历史。
●归档日志信息。
●备份组和备份块信息。
●备份数据文件和重做日志信息。
●数据文件拷贝信息。
●当前日志序列数。
●检查点信息。
这些信息可以通过V$CONTROLFILE进行查询。
2.4.4 归档重做日志文件
归档重做日志文件(Archieved Redo Log File)即对已经写满的日志文件复制并保存后生成的文件。这种文件归档以后自动存储的方式可以进行设置。归档的过程是归档进程(ARCO)在后台负责完成的工作,在数据库恢复的过程中归档重做日志文件起到了决定性作用。
2.4.5 参数文件
参数文件(Parameter File)是用来在启动实例时配置数据库基本信息的文件。其中的初始化设置内容包括数据库实例名称(SID)、数据库主要文件的位置、实例所使用的主要内存区域的大小等。
从Oracle 9i开始,参数文件有两种类型:服务器参数文件和文本参数文件,这两种参数文件内容和作用相同,可以通过其中一种来配置实例和数据库的一些选项,默认状态下是使用服务器参数文件。服务器参数文件是一个二进制文件,不能直接编辑,存储在Oracle数据库的服务器上;可以进行编辑的是文本参数文件。
参数文件是在启动数据库以后,创建实例或读取控制文件之前进行读取,其中的参数是进行基本配置与数据库运行的主要依据。
2.4.6 口令文件
口令文件(Password File)是用于验证特权用户的文件,它是一个二进制文件。特权用户是指一些具有特殊权限的数据库特殊用户,这些用户可以实现启动实例、关闭实例、创建数据库、备份等重要操作,默认的特权用户是SYS。
2.5 Oracle关键进程
当用户请求一个Oracle服务器的连接时将启动一个用户进程,这个用户进程连接到Oracle实例并创建一个会话时会启动一个服务进程,这是用户进程与Oracle实例的一次连接交互。
当数据库启动时会产生多个后台进程,这些后台进程不管用户是否连接都会启动,这些进程可以同时处理多个用户的请求,进行复杂的数据操作,同时维护数据库系统并保证系统具有良好的性能,这些进程包括PMON、SMON、DBWn、LGWR、ARCn、CKPT等。
2.5.1 PMON
PMON(进程监控器)是对Oracle中运行的各种进程进行监控,并且对异常情况进行针对性处理。
主要任务包括:
●恢复中断或者失败的用户进程、服务器进程。
●确保能够销毁发生损坏或出现故障的进程,释放这些进程占用的资源。
●重置事务的状态,回退未提交的事务,维护系统中的活动进程表。
●检查进程的状态,如果有异常或者失败而挂起,则重新启动。
●在主机操作系统上使用Oracle监听器注册数据库服务。全局数据库名称、SID以及其他数据库支持的服务都要使用监听器注册。
在Oracle的实际使用过程之中,因为各种原因造成的数据库崩溃或者失败、挂起所造成的异常中断现象是经常发生的事情,这时候Oracle会通过PMON来监控这些现象的发生,并且处理这些异常进程,包括对这些进程的重新启动、回退事务、清除异常进程等,同时需要对异常进程占有的资源进行释放。
PMON进程会被定期唤醒,检查是否有工作需要它来做,而任何其他进程需要使用PMON的功能,则可以随时唤醒PMON进程。
2.5.2 SMON
SMON(系统监视器)是对系统运行过程中发生的事务进行监控,并且负责对系统故障等进行必要的维护工作。
主要任务是包括重启系统、清除临时段、执行盘区结合等。
●在实例出现故障的情况下,SMON负责重新启动系统,执行崩溃恢复。这项职责包括:回滚未提交的事务处理,处理实例崩溃时还没有写入数据文件的事务,在数据库上应用重做日志表项(来自于归档重做日志文件)。
●SMON将会清除已经分配但是还没有释放的临时段。在基于数据字典的表空间中,如果有大量的盘区,从中清除临时段工作需要花费大量的时间,也会导致数据库的运行性能的问题,这时就需要SMON进程来负责清除这些临时段。
●SMON会在字典管理表空间中执行盘区结合。整理盘区是为了更好地分配空闲盘区,在Oracle为写数据分配新的盘区时,需要寻找足够大的空闲盘区来容纳数据,如果没有找到,则需要对小的盘区进行合并,然后重新寻找,否则无法写入数据,SMON负责这个合并工作。
SMON进程的运行是在实例启动时进行,之后定期地唤醒以检查它是否要进行工作,或者当有其他需要时,随时唤醒。
2.5.3 DBWn
数据库缓存包含了用户使用的数据,数据库将数据从磁盘读入缓存,各种服务器进程会对它们进行读取和修改。当要把这些缓存的数据内容写回磁盘时,DBWn(数据库写入器)负责执行这些数据的写入操作。
DBWn的主要任务包括:
●服务器进程修改数据的事务只在数据高速缓存区中进行,而数据写入磁盘的操作通过DBWn进程来进行延迟操作以保证读写操作的最终完成。
●成批写入数据文件,高速缓存区中修改过的数据会在一定的条件下成批写入数据文件,保证更多的空闲缓存块。
DBWn进程启动的数目受到Oracle系统初始化参数DB_WRITER_PROCESSES的限制,默认值是1。如果数据操作比较频繁,可以通过修改这个变量保证更多的DBWn进程的启动来提高性能,但DBWn进程数据不能超过CPU的数目,所以更多的DBWn进程的功能需要Oracle系统处于多CPU的服务器上才可以设定。
2.5.4 LGWR
LGWR(日志写入器)是负责管理重做日志高速缓存区的进程,用于把重做日志记录从高速缓存区按照操作顺序写入重做日志文件,每个实例只能有一个LGWR进程。
重做日志文件数据的修改是在数据库运行过程中产生的,不过重做日志的记录会首先保存在重做日志高速缓存区中,然后在一定的条件下由LGWR进程将缓存区中的重做日志记录成批写入重做日志文件。
LGWR进程写入和重做日志高速缓存是一个循环结构,LGWR进程将缓存中的数据写入重做日志文件的同时,还能够继续向这个重做日志高速缓存写入新的数据,写入重做日志文件后相应的缓存会被清空。而为了保证重做日志高速缓存可以顺利完成任务,需要能够即时完成重做日志文件的写入,这样可以有足够的重做日志高速缓存空闲空间。
触发LGWR进程的条件包括,事务处理进行提交、重做日志缓存已经填充了1/3;重做日志缓存中的数据量达到1MB;或者每隔三秒执行写入日志操作;以及DBWn需要写入的数据的SCN(序号)大于LGWR记录的SCN,其中DBWn将缓存数据写回到数据文件前,需要遵循先期写入协议,即重做日志缓冲区内的数据都必须完成写入动作,如果没有就会通知LGWR处理,之后DBWn才会进一步处理。
2.5.5 CKPT
引入检查点的目的是为了协调整LGWR和DBWn一致性。
CKPT进程(检查点进程)的作用如下:
1)当检查点事件发生的时候,需要通知DBWn进程将数据高速缓存中修改过的缓存内容全部写入数据文件,同时对控制文件和数据文件头部的同步序号进行修改,记录当前数据库的结构和状态,以保证数据库中物理文件之间的同步。执行完检查点以后,Oracle才能保证所有的缓存数据写入物理文件之中,处于一个完整状态。
2)而如果在未完成检查点操作之前,即数据库未处于一个完整状态之下,数据库发生崩溃,为了能够保证数据库的完整性,需要将数据库恢复到上一个设定的检查点。
3)检查点的设定可以根据实际要求来确定时间间隔,如果间隔太短,将会产生过多的硬盘输入输出操作;如果间隔太长,数据库的每次恢复将需要更多的时间来保证数据库的完整性。
2.5.6 ARCn
ARCn(归档进程)的作用是负责在重做日志文件写满后或者在重做日志文件进行切换时,将重做日志文件的内容复制到指定的归档重做日志文件中,这样可以防止因为重做日志文件数据已满,写入的新数据会覆盖旧数据的状况出现。
归档进程只会当数据库运行在归档模式下才会启动,这种状态下数据库具有自动归档功能,也就是LOG_ARCHIVELOG_START设置为TRUE。默认时,一个实例只会启动一个归档进程,当归档进程运行时,其读取的一个重做日志文件会被锁定,其他进程无法访问,为了保证重做日志文件的归档速度,LGWR进程会根据需要自动启动更多的归档进程。
如果需要启动多个归档进程以保证完成繁重的归档任务,就需要修改参数LOG_ARCHIVE_MAX_PROCESSES的值,这个值最大不能超过10。
2.5.7 Dnnn
Dnnn(调度进程)是多线程服务器体系结构(共享服务器模式)的一个部分,以后台进程的形式运行。调度程序对用户的请求进行排列,形成一个进程队列,这个队列会共享一个服务器进程,这样可以同时处理多个请求。
一个实例可以启动多个调度进程,实际启动的调度进程的数目可以通过修改参数MTS_DISPATCHERS来设定。
2.5.8 RECO
RECO(恢复进程)是在分布式数据库中事务失败时,对事务相关的多个数据库进行通信,并且完成这些失败事务的处理工作。
RECO进程不需要数据库系统管理员的控制,可自动运行。如果数据库需要进行分布式事务处理,可以通过设定参数DISTRIBUTED_TRANSACTIONS的值为大于0的数字来完成。
2.5.9 LCKn
LCKn(锁进程)的作用是当多个数据库实例访问相同的数据库对象时,避免数据库对象访问冲突。其通过在某一实例访问时锁定相应的数据库对象,而在访问结束之后再对这个对象解锁实现。