暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle数据库实例

浅谈Oracle 2021-04-28
2671

二 数据库实例相关

 

 



 


1. 实例的构成


1.1. 实例的定义

 

1、数据库实例(instance)是一组用于管理数据库文件的内存结构。数据库是一组位于磁盘上的物理文件,通过 CREATE DATABASE
 语句创建。实例管理相关的数据,并且为数据库用户提供服务。每个正在运行的 Oracle 数据库至少与一个实例相关联。因为实例存在于内存中,而数据库存在磁盘上,所以实例可以独立于数据库存在,数据库也可以独立于实例存在。


当一个实例启动时,Oracle 数据库分配一个称为系统全局区(SGA)的内存区域,并启动一个或多个后台进程。

SGA 的作用包括:

  • 维护多个进程和线程并发访问的内部数据结构

  • 缓存从磁盘读取的数据块

  • 在写入在线重做日志文件之前缓冲重做数据

  • 存储 SQL 执行计划

同一个服务器上的 Oracle 进程之间共享 SGA。Oracle 进程与 SGA 的交互方式取决于操作系统。

一个数据库实例包括多个后台进程(background process)、服务器进程(server process),以及分配给它们的内存,也位于实例之中。实例在服务器进程结束后仍然继续存在。

下图显示了 Oracle 数据库实例中的主要组件。


2、实例配置Oracle 数据库支持单实例配置和真正应用集群(Oracle RAC)配置。这两种配置只能二选其一。在单实例配置中,数据库和实例之间一一对应。在 Oracle RAC 中,数据库和实例存在一对多的关系。下图显示了两种可能的数据库实例配置。

                                                      数据库实例配置

实例生命周期

数据库实例从 STARTUP 命令创建开始,直到被终止时结束。

在此期间,一个实例能且只能与一个数据库相关联。进一步而言,该实例只能加载数据库一次、打开数据库一次,并且关闭数据库一次。在数据库关闭之后,必须重新启动一个实例,然后加载并打开数据库。

下表演示了一个实例尝试重新打开之前关闭的数据库的过程。

表 实例生命周期

语句注释
SQL> STARTUP
ORACLE instance started.
Total System Global Area 468729856 bytes
Fixed Size 1333556 bytes
Variable Size 440403660 bytes
Database Buffers 16777216 bytes
Redo Buffers 10215424 bytes
Database mounted.
Database opened.
STARTUP
 命令创建一个实例,然后加载并打开数据库。
SQL> SELECT
TO_CHAR(STARTUP_TIME,‘MON-DD-RR HH24:MI:SS’)
AS “Inst Start Time” FROM V$INSTANCE;

Inst Start Time
------------------
该查询显示了当前实例的启动时间。
SQL> SHUTDOWN IMMEDIATE关闭数据库和实例,结束实例的生命周期。
SQL> STARTUP
Oracle instance started… . .
STARTUP
 命令创建一个新的实例,然后加载并打开数据库。
SQL> SELECT
TO_CHAR(STARTUP_TIME,‘MON-DD-RR HH24:MI:SS’)
AS “Inst Start Time” FROM V$INSTANCE;

Inst Start Time
------------------
该查询显示了当前实例的启动时间。
不同的启动时间表明了这是一个新的实例。


2. 后台进程


2.1. 主要后台进程及其作用

 1:database write              :数据写入

作用:把SGA中被修改的数据同步到磁盘文件中。保证Buffer Cache中有足够的空闲数据块数量。
触发条件:(1)检查点
                (2)一个服务进程在设定的时间内没有找到空闲块。
                (3)每3秒自动唤醒一次。

设置:DB_WRITER_PROCESSES用来定义DBWn进程数量。(commit命令只是把记录修改写入日志文件,不是把修改后的数据写入数据文件,下面还会提到。)
2:log write              LGWR:日志文件写入
作用:把log buffer中的日志内容写入联机的日志文件中,释放log用户buffer空间呢。
触发条件:(1)用户发出commit指令。(在oracle中称为快速提交机制(fast commit):把redo log buffer中的记录写入日志文件,写入一条已提交的记录)。
                (2)三秒钟定时唤醒。
                (3)log buffer超过1/3,或日志数量超过1M。
                (4)DBWR进程触发:DBWn试图将脏数据块写入磁盘先检查他的相关redo记录是否写入联机日志文件,如果没有就通知LGWR进程。在oracle中称为提前写机制(write ahead):redo记录先于数据记录被写入磁盘。
3:checkpoint                                CKPT:检查点事件
    (1)作用:维护数据库一致性状态。检查点时刻数据文件与SGA中的内容一致。这不是一个单独的进程,要和前两个进程一起工作。DBWR写入脏数据,同时触发LGWR进程。CKPT更新控制文件中的检查点记录。
    (2)触发条件:日志切换(log switch)会触发检查点。
4:process monitor                        PMON :维护用户进程
   作用:(1)发现用户进程异常终止,并进行清理。释放占用资源。(清理异常终止用户使用的锁)。
             ( 2)向监听程序动态的注册实例。
   触发条件:定时被唤醒,其他进程也会主动唤醒他。
5:system monitor                        SMON:实例维护
    作用:(1)负责实例恢复,前滚(Roll Forward)恢复到实例关闭时刻的状态,使用最后一次检查点后的日志进行重做。这时包括提交和未提交的事务。打开数据库,进行回滚(Roll Back):回滚未提交的事务。
          (Oracle承诺commit之后的数据不会丢失,现在我们可以大致的了解Oracle是如何实现这个承诺的,以及在数据的安全性和数据库性能之间的平衡选择。)
             (2)负责清理临时段,以释放空间;
    触发条件:定期被唤醒或者被其他事务主动唤醒。
6:archive                                     ARCn:归档操作
    作用:发生日志切换时把写满的联机日志文件拷贝到归档目录中。
    触发条件:日志切换时被LGWR唤醒。
    设置:LOG_ARCHIVE_MAX_PROCESSES可以设置oracle启动的时候ARCn的个数。
7:manageability monitor               MMON:AWR主要的进程。
    作用:(1)收集AWR必须的统计数据,把统计数据写入磁盘。10g中保存在SYSAUX表空间中。
              (2)生成server-generated报警。每一个小时把shard pool中的统计信息写入磁盘,或shard pool占用超过5%。
8:manageability monitor light    MMNL:轻量级的MMON;
9:memory manager    MMAN:自动内存管理
    作用:每分钟都检查AWR性能信息,并根据这些信息来决定SGA组件最佳分布。
    设置:STATISTICS_LEVEL:统计级别
          SGA_TARGET:SGA总大小
10:job queue coordinator    CJQO:数据库定时任务
11:recover writer         RVWR:为flashback database提供日志记录。把数据块的前镜像写入日志。
12:change tracking writer   CTWR:跟踪数据块的变化,把数据块地址记录到change_tracking file文件中。RMAN的增量备份将使用这个文件来确定那些数据块发生了变化,并进行备份。                
以上是oracle中比较常见的后台进程,不是所有的进程。其中DBWn,ARCn可以设置数据库启动时的数量。这些进程在系统中可以不止一个。



2.2. 10g、11g、12c中新增的后台进程

 2.2.1. 10g新增的后台进程

1、RVWR 全称为Recovery Writer。即恢复写入进程,这个进程的作用是负责flashback日志的写入。

2、CTWR 全称为Change Tracking Writer。为提升Oracle增量备份的性能,减少在备份时对数据库性能的影响,在Oracle 10g中引入了变化块记录的功能,CTWR的作用就是记录变化的块并将变化写入相应的日志的。

MMNL 全称为Memory Monitor Light。它与自动负载资料库(AWR, Automatic Workload Repository)协同工作,负责将buffer中的完整统计信息在需要的时侯写到磁盘。

3、MMON 全称为Memory Monitor process。同样是AWR相关的一个进程,在Oracle 10g中,数据库收集和存储各种各样的统计信息在AWR中,MMON定时做一个数据库统计信息的一个快照(snapshot),并把这些信息存储在AWR中。同时这个进程也与自动问题检测和自我优化相关。

4、RBAL 全称为Rebalancing Daemon。ASM相关的管理进程,负责执行ASM所管理磁盘资源的rebalance操作。这个进程用来确定何时需要执行重新平衡操作及估计该操作花费的时间

5、ARBn这些进程在RBAL进程的管理下做实际的ASM所管理磁盘资源的rebalance操作,n的多少由asm_power_limit参数决定。

6、ASMB全称为Automatic Storage Management Background。这个进程的作用是与该节点的CSS守护进程进行通信,并接收来自ASM实例的文件区间映射信息。ASMB还负责为ASM实例提供I/O统计数据。


2.2.2. 11G新增的后台进程

1、DBRM:数据库资源管理进程, (The database resource manager process),负责设置资源计划和其他的资源管理的工作。
2、DIAG:数据库诊断进程, (The diagnosibility process) ,负责维护管理各种用于诊断的转储文件,并执行oradebug命令。
3、DIA0:另一个数据库诊断进程,负责检测Oracle数据库中的挂起(hang)和死锁的处理。
4、PSP0:process spawner,用于产生oracle进程
5、SMCO:space management coordinator,该进程负责空间管理协调管理工作,负责执行空间的分配和回收。


2.2.3. 12c新增的后台进程

1、FENC (Fence Monitor Process) 为使用 Oracle ASM 实例的 RDBMS 实例处理 fence 请求。

2、 IPC0 (IPC Service Background Process) 常见后台服务器的基本消息和基于 IPC (进程间通信)方式的 RDMA 原语。

3、 LDDn (Global Enqueue Service Daemon Helper Slave) 帮助 LMDn 进程处理各种任务。

4、 LGnn (Log Writer Worker) 在多处理器系统中,LGWR 创建工作进程来提高写重做日志的性能。当存在一个同步备用目的地的时候,不会使用 LGWR 工作进程。

5、LREG  (Listener Registration Process) 使用监听器注册实例。

6、OFSD (Oracle File Server Background Process) 向 Oracle 实例提交文件系统请求服务。

7、 RPOP (Instant Recovery Repopulation Daemon) 负责从快照和备份文件中重建 并且/或者 重新填充数据文件。

8、SAnn (SGA Allocator) 分配 SGA,SAnn 进程以块分配 SGA。该进程在 SGA 分配完成后退出。

9、 SCRB (ASM Disk Scrubbing Master Process) 协调 Oracle ASM 磁盘清理操

 

3. 内存结构

3.1. 内存结构的组成

       

Oracle 的内存结构包含以下两个内存区:SGA、PGA

Oracle 实例启动时分配系统全局区(System Global Area);
当服务器进程启动时分配程序全局区Program Global Area,PGA)。

Oracle实例的SGA,又称为共享全局区,它用来存储数据库信息,并由多个数据库进程共享。当数据库实例启动时,SGA的内存被自动分配。SGA是数据库中占用服务器内存最大的一个区域,同时也是影响数据库性能的一个重要指标。SGA按其作用不同,可分为共享池、数据缓冲区及日志缓冲区。用户的所有操作都在内存中进行,最后由数据库后台进程将操作结果写入各种物理文件中永久性保存。SGA和oracle的进程组成了oracle的实例(instance)。在实例启动的时候内存会自动分配,当实例shutdown的时候操作系统会将内存回收的。每一个实例(instance)拥有自己的SGA。SGA是可以读写的,每一个用户连到数据库实例时都是可以读实例的SGA的内容,oracle通过服务器进程执行一个命令去写SGA的数据。、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA尽管SGA来自于OS的共享内存区,但实例之间不能相互访问对方的SGA区。


3.2. SGA的组成及其作用

1、打开数据库时会出现如下 

    SQL> startup 
    ORACLE instance started.


    Total System Global Area 584568832 bytes
    Fixed Size 2255432 bytes
    Variable Size 226493880 bytes
    Database Buffers 352321536 bytes
    Redo Buffers 3497984 bytes
    Database mounted.

     Fixed Size,Variable、Database Buffers、Redo Buffers构成。

    2、SGA内分为多个不同的池(pool),以下是几个主要的。如下图所示

                                            SGA组成

    (1)Java池(Java pool):Java池是为数据库中运行Java虚拟机(JVM)所分配的一段固定大小的内存。在Oracle Database 10g及更高版本中,Java池可以在数据库启动和运行时动态调整大小。 

    (2)大池(large pool):在使用共享服务器连接时存放会话内存(UGA)、在使用并行执行功能时作为消息缓冲区、在RMAN备份时作为磁盘I/O缓冲区。大池可以动态调整大小。

    (3)共享池(shared pool):共享池包含共享游标(shared cursor)、存储过程、状态对象、字典缓存和诸如此类的大量的其他数据。在Oracle Database 9i及更高版本中,共享池可以动态调节大小。

    (4)流池(streams pool):这是一个专门针对数据传输/共享工具(例如Oracle Goldengate和Oracle Streams)的内存池。它是Oracle Database 10g中新增的,可以动态调整大小。如果未配置流池,但使用了流功能,Oracle会使用共享池中最多10%的空间作为流内存。

    (5)"空"池("Null" pool):这个池其实没有名字。它是块缓冲区(用来缓存数据库块)、重做日志缓冲区和“固定SGA”区专用的内存。

    (6)数据高速缓存区:(Data buffer cache):存放Oracle系统最近使用过的数据块(即用户的高速缓冲区)。查询数据时,从磁盘上的数据文件,读取的数据存放在此;修改数据时,同时保存数据库被修改前(前镜像)和修改后(后镜像)。数据库高速缓冲区的主要功能是用来暂时存放最近读取自数据库中的数据,也就是数据文件(Data File)内的数据,而数据文件是以数据块(Block)为单位,因此,数据库高速缓冲区中的大小是以块为基数。当用户通过应用程序第一次向Oracle数据库发出查询请求时,Oracle会先在数据库高速缓冲区内寻找该数据,如果有该请求所需要的数据,就直接从数据库高速缓冲区传回给用户,这称为缓存命中(Cache Hit),这样就可以减少硬盘上的I/O次数。如果Oracle发现用户要的数据并不在数据库高速缓冲区里,就称为缓存失误(Cache Miss),Oracle会从数据库中读取所需要的数据块,先放入数据库高速缓冲区中,再传送给用户

     

                           高速缓冲区图

    用户进程(sqlplus)连接到数据库服务器上,由用户进程与服务器进程进行交互,由服务器进程到数据库的数据文件加载数据高速缓冲区中,查询修改都是在数据高速缓冲区中完成。在数据缓冲区中被修改的数据由数据写入进程(DBWR)写到硬盘的数据文件中永久保存。

    缓冲块的类型:脏缓存块(Dirty Buffers):脏缓存块中保存的是已经被修改过的数据。

    空闲缓存块(Free Buffers):空闲缓存块中不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。

    命中缓存块(Pinned Buffers):命中缓存块是那些正被使用的数据块,同时还有很多会话等待修改或访问的数据块。

    图中未指出的:干净缓存块(Clean Buffers):干净缓存块是指那些当前没有被使用,即将被换出内存的缓存块。

    数据高速缓冲区越大,用户需要的数据在内存中的可能性就越大,即缓存命中率越高,从而减少了Oracle访问硬盘数据的次数,提高了数据库系统执行的效率。然而,如果数据高速缓冲区的值太大,Oracle就不得不在内存中寻找更多的块来定位所需要的数据,反而降低了系统性能。显然需要确定一个合理的数据高速缓冲区大小。DB_CACHE_SIZE(标准块)



    3.3. SGA相关参数

    高速缓冲区大小:DB_CACHE_SIZE

    重做日志缓冲区大小:LOG_BUFFER

    共享池大小:SHARED_POOL_SIZE

    共享池中的保留池大小:SHARED_POOL_RESERVED_SIZE

    流池大小:STREAM_POOL_SIZE

    大池大小:LARGE_POOL_SIZE

    Java池大小:JAVA_POOL_SIZE

    SGA最大大小:SGA_MAX_SIZE#是一直存在的不可动态修改的

    V$SGA:SGA使用情况的概要信息

    V$SGASTAT:SGA使用情况的详细信息

    V$SGAINFO:SGA各个组件的大小信息,还可以看到哪些组件可以动态reszie

    V$SGA_CURRENT_RESIZE_OPS:当前正在进行的SGA resize操作

    V$SGA_RESIZE_OPS:最后400SGA resize操作的历史

    V$SGA_DYNAMIC_COMPONENTS:SGA各个组件的动态信息,这些信息基于已完成的SGA resize操作

    V$SGA_DYNAMIC_FREE_MEMORY:可用于将来resize的空闲SGA内存,可以理解为sga_maxe_sizesga_target的差

    V$SGA_TARGET_ADVICE:根据负载对SGA的使用情况给出建议。从下面的查询可以看出目前256M的设置基本是合理的


     

    3.4. PGA的组成及其作用

     1、含义:PGA是一个私有的内存区,不能共享,每个服务器进程只能访问自己的PGA,因此PGA又称为私有全局区(Private Global Area)。系统同时为每个后台进程分配私有的PGA区。所有服务器进程PGA与所有后台进程PGA大小的和,即为实例的PGA的大小。PGA随着服务器进程与后台进程的启动而分配,随着服务器进程和后台进程的终止而被释放。PGA是非共享的内存空间,当建立服务进程或者后台进程时,oracle会自动为其分配PGA,而当服务进程或后台进程终止时,oracle会自动释放PGA的内存空间。

    2、PGA组成:

    (1)排序区(Sort Area):存放排序操作所产生的临时数据。

    (2)游标信息区(Cursor Information):存放执行游标操作时所产生的数据。

    (3)会话信息区(Session Information):保存用户会话所具有的权限、角色、性能统计信息。

    (4)堆栈区(Stack Space):用于保存会话过程中的绑定变量、会话变量等信息。

    3.5. PGA相关参数


    1、pga_aggregate_target设置PGA总内存大小。

    2、hash_area_size,以字节为单位,指定hash排序所使用的最大内存量。

    3sort_area_size为排序操作分配的内存,排序结束且返回记录前释放,如SORT_AREA_SIZE。

    4sort_area_retained_size该参数表示UGA中为排序操作保留的内存大小。

    5、pga_max_size用于设置每个进程的最大PGA内存大小,其默认值为200M。

    6smm_max_size用于设置每个进程自动模式下最大工作区大小(串行)

    7、 smm_max_size : 串行进程的WORK AREA上限值,单位KB。

    8、pga_max_size : 每个进程WORK AREA上限值,单位byte。

    9、smm_px_max_size : 并行模式下,所有并行进程共享的WORK AREA上限值。


     

    3.6内存结构的管理方式、如何设置

     1、手动SGA内存管理:如果需要对SGA内存中可以自动调优的部分进行控制,那就把MEMORY_TARGET设置为0。当MEMORY_TARGET设为0时,自动内存管理就被禁用了;当SGA_TARGET被设为0,自动SGA内存管理就被禁用了。但在Oracle Database 11g Realease 2及更高版本中,即使你已经明确地关闭了自动内存管理(MEMORY_TARGET设置为0 SGA_TARGET被设为0),Oracle仍会做一些自动的内存重分配的动作,即从数据库的缓冲区缓存分出内存给共享池。因为在共享池空间不足时,Oracle会自动为其增加内存空间以避免ORA-04031“Unable to allocate %s bytes of shared memory”错误。

      2、自动SGA内存管理:SGA-TARGET作为首要参数来控制各个可以自动调优组件的总大小,并且该参数可在数据库启动并允许的状态下动态调整(最大可以达到SGA_MAX_SIZE设定的大小)。SGA_MAX_SIZE的默认值等于SGA_TARGET的值。因此设置的时候应让SGA_MAX_SIZE的值大于SGA_TARGET的值。

      3、自动内存管理:相当于可以“一站式”完成所有内存管理。对Oracle Database 10g和自动SGA内存管理,DBA只需设置两个主要内存设置PGA_AGGREGATE_TARGET和SGA_TARGET。对Oracle Database 11g中,DBA只需设置MEMORY_TARGET,这个MEMORY_TARGET表示SGA和PGA分配能达到的总内存量的上限(PGA有些情况下不可控)。


    4、如果你使用数据库配置助手 DBCA)来创建数据库,并选择了基本安装选项,则将缺省使用自动内存管理。

    可以通过安装dbca时设置:





    3.7. ORA-04030与ORA-04031错误引起的原因?两者之间的区别是什么?如何分析这两个最常见的错误?

     1、ORA-04030


           (1)原因:引起ORA-04030的原因,过多的使用内存造成的,或者是PGA的过度分配导致。

           (2)解决办法:有两种,其一是加大内存,其二,则是对Oracle的内存控制参数进行调整,使其内存分配更适合于当前的应用程序。pga_aggregate_target指定了所有session总共使用的最大PGA上限,如果该值被设则默认的workarea_size_policy=auto, sort_area_size/sort_area_retained_size将被忽略。那么直接减小pga_aggregate_target就能解决一部分ORA-04030问题。临时解决办法就是SQL>alter system flush shared_pool.

        2、ORA-04030

          (1)原因:引起ORA-04031的原因,其一是因为共享池不够大,其二因为碎片问题导致数据库不能找到足够大的内存块。

          (2)解决办法:其一是打上最新的PatchSet。大多数的ORA-04031错误都和BUG 相关.其二,是调整共享池的大小,共享池过小能够导致ORA-04031错误。

          (3)优化:使用共享的SQL,尽量减少SQL语句的解析,腾出更多的内存空间。

              过度的开cursor而不关闭。


          (4)判断方法:

      SQL> select * from v$sysstat where name='open cursors current';
      SQL>select count(*) from v$open_cursor;
      临时解决办法就是:SQL>alter system flush shared_pool.

      3、区别:ORA-04030是由于内存使用过多,SGA内存不够,或者说PGA占用了过多的内存导致出现错误。ORA-04031是由于共享池里面内存被过度使用导致,一是不够大,二是产生过多碎片后,内存中找不到足够的内存空间使用导致报错。



      3.8与内存相关动态性能视图的学习

       1、动态性能视图定义:指将内存里的数据或控制文件里的数据以表的形式展现出来。


      只要数据库在运行,就会不断更新动态性能视图。一旦数据库关闭或崩溃,则动态性能视图里的数据就丢失了。动态性能视图都是以V_$开头,属主是用户SYS。每个动态性能视图都有同义词,同义词是将中间的“_“去掉了,都是以V$开头。为了的是看到Oracle系统里面的内存,数据,存储空间等,以便DBA掌握Oracle数据库的情况动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。当数据库处于不同状态时,可以访问的动态性能视图有所不同。

      启动例程时,ORACLE会自动建立动态性能视图;停止例程时,ORACLE会自动删除动态性能视图。动态性能视图在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行查询,以便对系统进行管理与优化。在通常情况下,数据库不同的状态其动态性能视图还是有比较大的差异。

      2、与内存相关的动态性能视图


      (1)V$FIXED_TABLE - 列出所有可用的动态性能bai视图和动态性能表

      (2)duV$INSTANCE - 取得当前例程的详细信息zhi

      (3)V$SGA - 用于显示SGA主要组成部分

      (4)V$SGAINFO - 取得SGA更详细的信息

      (5)V$PARAMETER - 取得初始化参数的详细信息

      (6)V$VERSION - 取得ORACLE版本的详细信息

      (7)V$OPTION - 该动态性能视图用于显示已经安装的Oralce选项

      (8)V$SESSION - 用于显示会话的详细信息

      (9)V$PROCESS - 显示Oracel所有进程的信息(包括后台进程和服务器进程)

      (10) V$BGPROCESS - 用于显示后台进程的详细信息

      (11)V$DATABASE - 用于显示当前数据的详细信息

      (12) V$CONTROLFILE - 显示所有控制文件的信息

      (13) V$DATAFILE - 数据文件的详细信息

      (14) V$DBFILE - 显示数据文件编号及名称

      (15) V$LOGFILE - 用于显示重做日志成员的信息

      (16) V$LOG - 显示日志组的详细信息

      (17) V$THEAD - 取得重做线程的详细信息

      (18) V$LOCK - 用于显示锁的信息,通过与V$SESSION进行连接查询,可以显示占有锁的会话,以及等待锁的会话





       

      4. 实例启停

      4.1. 实例启动的三个阶段、每个阶段所做的操作(以及每个阶段出现问题的处理思路、通过alert日志了解启停阶段)

      1、三个阶段分别是:(1)NOMOUNT,启动数据库实例和读取数据库参数,依据参数分配合适的SGA和PGA给实例,并且启动核心的后台数据库进程(实例是由数据库进程和内存所组成)。从参数文件中读取相应的数据库名,进而可建立实例和数据间的关系。这时已经可以查询到一些动态性能视图。该阶段所做操作如下:

      • 在特定于平台的默认位置搜索服务器参数文件,如果为找到,则搜索一个初始化参数文本(为startup指定spfile或pfile参数将覆盖该默认行为 );

      • 读取参数文件,已确定初始化参数值;

      • 基于初始化参数设置,分配SGA;

      • 启动oracle后台进程;

      • 打开警报日志和跟踪文件,并以有效的参数语法将所有显示参数设置写入警报日志中。


      (2)MOUNT,读取参数文件,主要读取的内容是SCN、数据文件、日志文件、归档文件、临时文件、UNDO文件的位置。该阶段所做操作如下:


      • 该数据库是关闭的,且只有数据库管理员可以访 问。管理员可以在完成某些特定的维护操作时保持数据库关闭。但是,数据 库此时还不可用于常规操作。如果 Oracle 数据库允许多个实例同时装载同一数据库。


      (3)OPEN,依据控制文件及参数文件的信息,打开数据库,主要是将数据文件置于OPEN状态,如果发现数据文件的SCN与控制文件的SCN不一致,则有SMON进程进行REDO和UNDO。该阶段所做操作如下:


      • 打开除撤消表空间之外的其他的表空间中的联机数据文件;

      • 获取一个撤消表空间。如果存在多个撤消表空间,则由 UNDO_TABLESPACE 初始化参数指 定要使用的撤消表空间。如果尚未设置此参数,则会选择第一个可用 的撤消表空间;

      • 打开联机重做日志文件。

      2、通过alter日志了解启停过程如图所示:



      4.2. 实例关闭的三个阶段、每个阶段所做的操作

      1、关闭三阶段如下:

      (1). 数据库关闭。数据库仍处于装载状态,但数据文件和联机重做日志文件已被关闭。

      (2). 数据库卸载。实例仍处于启动状态,但已不再与数据库的控制文件相关联。

      (3).数据库实例关闭。数据库实例不再处于启动状态。当实例失败或遭遇 SHUTDOWN ABORT 时,Oracle 数据库不会经历之前这 些所有步骤,而只是立即终止该实例。

      注意:

      (1)、数据库是如何关闭?

      数据库的关闭操作是在数据库停机中的一个隐含步骤。该操作的性质取决于 数据库停机是正常还是非正常的。正常停机过程中是如何关闭数据库的 当数据库作为 SHUTDOWN 的一部分(不使用 ABORT 选项)而关闭时, Oracle 数据库将 SGA 中的数据写入数据文件和联机重做日志文件。然后数 据库关闭联机数据文件和联机重做日志文件。脱机表空间中的任何脱机数据 文件是本来就是已关闭的。当重新打开数据库时,任何本来脱机的空间仍然 保持脱机状态。这一阶段中,该数据库是关闭的,且无法进行正常操作访问。在数据库关闭后,控制文件仍保持打开状态。非正常关机过程中是如何关闭数据库如果执行了 SHUTDOWN ABORT,或出现异常终止,则打开数据库的实例 会关闭,并在瞬间将数据库停机。Oracle 数据库不会将 SGA 缓冲区中的数 据写入数据文件和重做日志文件。随后重新打开数据库需要实例恢复,这将 由 Oracle 数据库自动执行。

      (2)、数据库是如何卸载?

      数据库关闭之后,Oracle 将数据库卸载,并解除与实例的关联。数据库卸载 后 ,Oracle 数据库关闭数据库的控制文件。这个时候,实例仍将保留在内存中。

      (3) 实例是如何关闭的? 

      关闭数据库的最后一步是关闭实例。当数据库实例关闭时,SGA 被从内存中移除,且后台进程都将被终止。如果未能成功,可强制启动一个新实例。


       

      4.3. startup几种启动方式之间有何不同(startup upgrade、startup RESTRICT、startup force)

       1、startup upgrade:以升级模式启动,主要使用于数据库升级,升级模式下会限制以下几点:关闭自动作业队列,关闭回收站功能,禁用系统触发器,以限制模式启动,仅允许以SYSDBA身份登录。


      2、startup restrict:约束方式启动,即只是允许有CREATE SESSION特权和RESTRIDTED SESSION特权的用户访问数据库。


      3、startup force:用于数据库不能正常关闭时,将重置实例并重启数据库相当于shutdown abort + startup,即强制关闭数据库+ 正常启动数据库,想快速重启数据库时胆子大的人用的。

       

       


      最后修改时间:2021-04-28 11:42:15
      文章转载自浅谈Oracle,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论