• LOCAL UNDO特性及管理


    在12.2版本后您可以将CDB配置为在每个容器中使用本地撤消(默认),也可以对整个CDB使用共享撤消。
    要确定当前的CDB撤消模式,请在CDB根目录中运行以下查询:
    SELECT PROPERTY_NAME, PROPERTY_VALUE
    FROM   DATABASE_PROPERTIES
    WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';

    如果查询返回TRUEPROPERTY_VALUE,那么,是本地撤销模式。否则,CDB处于共享撤消模式。

    处于本地共享撤销模式下的时候我们每一个PDB都有自己的UNDO表空间

    关于本地撤消模式

    本地撤消模式意味着每个打开容器的实例都有一个自己的撤消表空间。

    在这种模式下,Oracle数据库会自动为CDB中的每个容器创建一个撤消表空间。对于Oracle RAC CDB,在本地撤消模式下,每个PDB的每个实例都有一个活动的撤消表空间。

    本地撤消模式为每个容器提供了更高的隔离度,并提高了某些操作的效率,例如拔出容器或在容器上执行时间点恢复。另外,要支持某些操作,例如,重定位PDB或克隆处于开放式读/写模式的PDB,需要本地撤消模式。

    当CDB处于本地撤消模式时,以下条件适用:

    • 任何对当前容器具有适当特权的用户都可以为该容器创建一个撤消表空间。
    • 在CDB中每个容器的静态数据字典视图和动态性能(V $)视图中都可以看到撤消表空间。
    配置CDB使用本地撤消模式

    您可以通过发出一条ALTER DATABASE LOCAL UNDO ON语句并重新启动数据库,将CDB更改为本地撤消模式

    当CDB处于本地撤消模式时,每个容器在打开它的每个实例中都有自己的撤消表空间。Oracle数据库会在CDB中没有容器的任何容器中自动创建一个撤消表空间。如果将没有撤消表空间的PDB克隆,重定位或插入配置为使用本地撤消模式的CDB,则Oracle数据库在首次打开PDB时会自动为其创建撤消表空间。

    当CDB从共享撤消模式更改为本地撤消模式时,Oracle数据库会自动创建所需的撤消表空间。

    1. 如果CDB实例已打开,则将其关闭。
    2. OPEN UPGRADE模式下启动CDB实例例如:
      STARTUP UPGRADE
    3. 在SQL * Plus中,确保当前容器是CDB根目录。例如,输入以下内容:
    4. SHOW CON_NAME
      
      CON_NAME
      ------------------------------
      CDB$ROOT
    5. 查询CDB当前的撤销模式:
      SELECT PROPERTY_NAME, PROPERTY_VALUE 
      FROM   DATABASE_PROPERTIES 
      WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
    6. 要启用本地撤消,请发出以下SQL语句:
      ALTER DATABASE LOCAL UNDO ON;
    7. 关闭并重新启动CDB实例。
    8. 可选:在PDB种子中手动创建撤消表空间。
      当Oracle数据库以本地撤消模式在PDB种子中自动创建撤消表空间时,您可能希望通过手动创建撤消表空间来控制撤消表空间的大小和配置。为了确保从PDB种子创建的PDB使用手动创建的撤消表空间而不是自动创建的撤消表空间,必须将UNDO_TABLESPACE初始化参数设置为手动创建的撤消表空间,或者删除自动创建的撤消表空间。
      1. 在SQL * Plus中,确保当前容器是根。
      2. 将PDB种子置于开放读/写模式:
        ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ WRITE FORCE;
      3. 将容器切换到PDB种子:
        ALTER SESSION SET CONTAINER=PDB$SEED;
      4. 在PDB种子中创建一个撤消表空间。例如:
        CREATE UNDO TABLESPACE seedundots1
           DATAFILE 'seedundotbs_1a.dbf'
           SIZE 10M AUTOEXTEND ON
           RETENTION GUARANTEE;
      5. 将容器切换到根目录:
        ALTER SESSION SET CONTAINER=CDB$ROOT;
      6. 将PDB种子置于开放只读模式:
        ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ ONLY FORCE;
    本地撤销模式下测试
    本地模式下,当前undo表空间不能被删除
    测试数据
    select tablespace_name,con_id from cdb_tablespaces;
    在PDB中查询可以看到当前回滚段

    关于共享撤消模式

    共享撤消模式意味着单实例CDB仅存在一个活动的撤消表空间。对于Oracle RAC CDB,每个实例都有一个活动的撤消表空间。

    当CDB处于共享撤消模式时,以下条件适用:

    • 只有具有适当特权且当前容器为CDB根目录的普通用户才能创建撤消表空间。
    • 当当前容器不是CDB根目录时,创建撤消表空间的尝试将失败并返回错误。
    • 当前容器为CDB根目录时,撤消表空间在静态数据字典视图和动态性能(V $)视图中可见。当当前容器是PDB,应用程序根目录或应用程序PDB时,撤消表空间仅在动态性能视图中可见。

    注意:

    • 当您更改CDB的撤消模式时,新的撤消模式将在更改后首次打开容器时应用于单个容器。
    • 当您更改CDB的撤消模式时,CDB中的容器无法闪回到更改之前的时间或SCN。

    配置CDB使用共享撤消模式

    要将CDB更改为使用共享撤消模式,请使用一条ALTER DATABASE LOCAL UNDO OFF语句。

    1. 如果CDB实例已打开,则将其关闭。
    2. OPEN UPGRADE模式下启动CDB实例例如:
      STARTUP UPGRADE
    3. 在SQL * Plus中,确保当前容器是CDB根目录。例如,输入以下内容:
      SHOW CON_NAME
      
      CON_NAME
      ------------------------------
      CDB$ROOT
      
    4. (可选)查询CDB的当前撤消模式:
      SELECT PROPERTY_NAME, PROPERTY_VALUE 
      FROM   DATABASE_PROPERTIES 
      WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
    5. 要关闭本地撤消,请发出以下SQL语句:
      ALTER DATABASE LOCAL UNDO OFF;
    6. 关闭并重新启动CDB实例。
    在共享撤消模式下,CDB会忽略在本地撤消模式下创建的任何本地撤消表空间。Oracle建议您删除未使用的本地撤消表空间。

    共享撤销模式下测试
    关闭本地撤销
    手动删掉PDB中的undo表空间


    插入测试数据可以看到已经使用的是CDB的undo段了






  • 相关阅读:
    设置数据库某字段为当前时间
    HashMap源码解析(只为吊打面试官)
    SRAM 静态内存芯片 IS62WV51216 的使用 STM32F407ZGT6
    手机ARM种类,STM32中的ARM核又是什么东东?
    运算放大器 常用经典电路 计算书
    SMT 生产线设备 (PCBA)
    横机 电控设计
    ISO26262 标准
    质量管理体系(16949)的五大工具
    IATF16949和TS16949有什么不同?
  • 原文地址:https://www.cnblogs.com/nadian-li/p/12986086.html
Copyright © 2020-2023  润新知