#归档管理

归档管理主要包括归档模式的查看与配置、归档路径管理、归档日志文件清理策略以及手动归档等操作。

# 查看归档模式

V$DATABASE视图中的log_mode字段表示数据库当前的归档模式配置,字段值为ARCHIVELOG表示已开启归档模式,NOARCHIVELOG表示未开启归档模式。

数据库运行于归档模式时,会在redo日志文件写满时自动对其进行归档(即在归档路径下生成归档日志文件),同时YashanDB还提供了归档日志文件的自动清理策略。

归档可以延长数据库的redo历史操作记录的保存时间,用于备份恢复保障数据安全、高可用部署时的主备同步。

  1. 以DBA用户连接并登录数据库。

    $ yasql sales/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  2. 查询V$DATABASE视图获取归档模式。

    SELECT database_name,log_mode,open_mode FROM V$DATABASE;
    
    DATABASE_NAME      LOG_MODE          OPEN_MODE  
    ------------------ ----------------- ------------
    yashandb              ARCHIVELOG        READ_WRITE 
    
    • LOG_MODE = ARCHIVELOG表示归档模式已开启。

    • LOG_MODE = NOARCHIVELOG表示归档模式已关闭。

# 打开归档模式

YashanDB在创建数据库时,提供了配置归档模式的相应参数(yasboot的建库参数ISARCHIVELOG=true|false、CREATE DATABASE中的ARCHIVELOG|NOARCHIVELOG关键字),默认情况下,安装完成后YashanDB将直接运行于归档模式,无需手动开启。

归档模式开启后,数据库管理员还可以根据业务需求和磁盘规划等实际情况调整自动清理策略、归档路径等相关配置或进行归档日志文件管理

# 前提条件

  • 查看当前归档模式未开启(即V$DATABASE视图中LOG_MODE=NOARCHIVELOG)。

  • 打开归档模式需要将数据库启动/重启至MOUNT阶段。

  • 数据库处于MOUNT阶段时,仅允许sys用户登录。

  • 如需自定义规划归档日志文件的存放路径(默认为$YASDB_DATA/archive),需先配置归档路径再开启归档模式,配置时不会校验指定路径是否存在,但建议先规划并创建相应路径再执行后续操作,且要求系统具备该路径的全部权限。

# 操作步骤

# 步骤1(可选):自定义配置归档路径

归档路径默认为$YASDB_DATA/archive,可通过ARCHIVE_LOCAL_DEST参数进行自定义配置。

如在开启归档模式后再调整该路径,原路径中已经存在的归档日志文件不会发生改变,可以按需根据清理规则进行自动或手动清理,清理操作请查阅归档日志文件管理

  1. 以安装用户登录数据库安装服务器。

  2. 查看数据库状态。

    $ yasboot cluster status -c yashandb -d -p sys_password
    

    若当前数据库正处于关闭状态(上述回显信息中pid = off),则需先启动数据库至少达到NOMOUNT阶段再执行后续操作。

    $ yasboot cluster start -c yashandb -p sys_password -m nomount
    
  3. 连接并登录数据库。

    # 若指定启动至NOMOUNT阶段则只能通过sys用户登录数据库
    $ yasql sys/********@192.168.1.2:1688
    
    # 其他阶段则建议采用DBA用户登录数据库
    $ yasql sales/********@192.168.1.2:1688
    
  4. 查看当前归档路径。

    SHOW PARAMETER ARCHIVE_LOCAL_DEST;
    
    NAME                     VALUE        
    ------------------------ --------------
    ARCHIVE_LOCAL_DEST       ?/archive      
    
  5. 修改归档路径。

    ALTER SYSTEM SET ARCHIVE_LOCAL_DEST='/home/yashan/archive' SCOPE=SPFILE;
    

# 步骤2:重启至MOUNT阶段

  1. 若当前数据库处于OPEN阶段,建议在停服前执行checkpoint,使内存中的数据写入到磁盘中。

    -- 查看数据库状态
    SELECT status FROM V$INSTANCE;
    
    STATUS
    -------------
    OPEN
    
    -- 执行checkpoint
    ALTER SYSTEM CHECKPOINT; 
    
    -- 退出yasql
    exit
    
  2. 重启数据库(或实例)至MOUNT阶段。

    $ yasboot cluster restart -c yashandb -p sys_password -m mount
    
  3. 以sys用户登录数据库。

    $ yasql sys/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  4. 查看数据库状态。

    SELECT status FROM V$INSTANCE;
    
    STATUS
    -------------
    MOUNTED
    
  5. 查看当前归档路径配置。

    SHOW PARAMETER ARCHIVE_LOCAL_DEST
    
    NAME                    VALUE         
    ----------------------- ----------------------
    ARCHIVE_LOCAL_DEST      /home/yashan/archive
    

# 步骤3:调整归档模式

  1. 调整数据库归档模式。

    ALTER DATABASE ARCHIVELOG;
    
  2. 再次查看归档模式确认修改生效。

    -- 再次查看当前数据库的归档模式
    SELECT database_name,log_mode,open_mode FROM V$DATABASE;
    
    DATABASE_NAME    LOG_MODE          OPEN_MODE   
    ---------------- ----------------- -------------
    yashandb            ARCHIVELOG        MOUNTED  
    
  3. 启动数据库至OPEN。

    ALTER DATABASE OPEN;
    

# 清理归档日志

# 查看自动清理策略

YashanDB提供了自动清理策略,包括归档日志文件的清理策略和自动清理任务的启停触发条件,在相关参数配置符合业务需求的情况下,通常无需人为介入。

如果YashanDB默认的自动清理策略无法满足实际需求,数据库管理员可以按需调整对应参数,或临时执行手动清理操作。

# 清理策略

不论采用何种清理方式,始终只会清理不再被数据库回放所需的归档日志文件。数据库会自行维护该原则,清理时无需额外配置。不再被数据库回放所需的标准可参考:

  • 早于redo日志回放起始点:归档日志文件的sequence值小于V$DATABASE视图中RCY_POINT字段的ASN值。

  • 单机部署或共享集群部署中,若创建过永久还原点(CREATE RESTORE POINT … GUARANTEE FLASHBACK DATABASE),还需早于永久还原点:V$ARCHIVED_LOG视图中归档日志文件对应的NEXT_CHANGE#字段值小于或等于V$RESTORE_POINT视图中IS_GUARANTEE字段为1的还原点对应的SCN字段。

在上述原则的基础上,还包括由以下配置参数决定的清理策略,最终可被清理的文件需同时满足原则+策略。

参数名称 参数描述 默认值
ARCHIVELOG_DELETION_POLICY 归档日志文件的清理策略,该参数不为DEFAULT时会使ARCH_CLEAN_IGNORE_MODE参数失效。

* DEFAULT:表示清理策略以ARCH_CLEAN_IGNORE_MODE参数配置为准。

* BACKED UP integer TIMES:表示仅允许清理达到指定备份次数integer的归档日志,integer配置范围为[1,15]。可与SHIPPED TO ALL STANDBY同时指定。某个归档日志文件的已备份次数可以通过V$ARCHIVED_LOG视图的BACKUP_COUNT字段确认。

* SHIPPED TO ALL STANDBY:表示主备部署时仅允许清理同步到备库的归档日志,可与BACKED UP integer TIMES同时指定。

* NONE:归档清理无需满足备份次数和同步至备库,策略表现基本等价于ARCH_CLEAN_IGNORE_MODE = BOTH。
DEFAULT
ARCH_CLEAN_IGNORE_MODE 归档日志文件的清理策略,该参数仅当ARCHIVELOG_DELETION_POLICY为DEFAULT时生效。

通过该参数指定哪些归档日志文件满足清理条件:

* BACKUP:表示忽略备份,即无论归档日志文件是否已备份均允许被清理。此设置可能导致数据库无法恢复至任意时间点。

* STANDBY:表示主备部署时忽略备库,即无论该归档日志文件是否已被所有备库获取均允许被清理,此设置可能导致备库跟不上主库,出现need repair状态。

* BOTH:表示忽略备份和备库,此设置可能导致如上所述的两种问题均会出现。

* NONE:表示不忽略,即已备份且已被所有备库接收的归档日志才允许被清理。
NONE
ARCH_CLEAN_UPPER_THRESHOLD 自动清理归档日志文件的触发条件。
当现存所有归档日志的总容量超出该值时,触发自动清理。
取值范围为[0,32T],不得小于ARCH_CLEAN_LOWER_THRESHOLD,若该参数为0表示关闭自动清理。
该值仅作为自动清理的触发条件,即使归档日志总和超过该值也不影响事务正常运行。
16G
ARCH_CLEAN_LOWER_THRESHOLD 自动清理归档日志文件的停止条件。
通过该参数指定归档空间保持的最小值,触发一次自动清理归档后,保留归档日志总大小的最小值。
取值范围为[0,32T],若该参数为0表示清理所有可以清理的归档日志。
12G
  1. 以DBA用户连接并登录数据库。

    $ yasql sales/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  2. 查看相关参数配置。

    SELECT NAME,VALUE FROM V$PARAMETER WHERE ( NAME LIKE 'ARCH_CLEAN_%' ) OR ( NAME = 'ARCHIVELOG_DELETION_POLICY');
    
    NAME                                                             VALUE
    ---------------------------------------------------------------- ----------------------------------------------------------------
    ARCH_CLEAN_UPPER_THRESHOLD                                       16G
    ARCH_CLEAN_LOWER_THRESHOLD                                       12G
    ARCH_CLEAN_IGNORE_MODE                                           NONE
    ARCHIVELOG_DELETION_POLICY                                       DEFAULT
    

# 清理流程

归档日志文件的自动清理默认流程如下:(下述介绍均以参数默认值为示例)

  1. 系统会定期判断是否达到自动清理任务的触发条件,即比较现存所有归档日志的总容量与ARCH_CLEAN_UPPER_THRESHOLD参数值的大小。

  2. 当现存所有归档日志文件的总容量 ≥ 16G时,触发归档日志文件自动清理任务。

  3. 系统会判断sequence最小的归档日志文件是否满足清理原则与策略:

    • 若该文件同时满足无需再被数据库回放所需 + 已备份 + 已被所有备库接收,执行清理操作。

    • 若不满足上述3个条件,不清理,打印运行日志。

    即使所有文件均不满足清理策略,亦不会影响数据库运行,直到磁盘存满。

  4. 判断/处理完1个文件后,系统会判断是否达到自动清理任务的停止条件,即比较现存所有归档日志的总容量与ARCH_CLEAN_LOWER_THRESHOLD参数值的大小。

    若现存所有归档日志的总容量仍大于12G,按归档日志文件的的序列号大小判断下一个文件是否可清理,依次重复。

  5. 直到现存所有归档日志文件的总容量 ≤ 12G,停止归档日志文件自动清理任务。

# 调整自动清理策略

# 注意事项

  • YashanDB支持通过指定时间点的方式对数据库进行恢复。若在备份集后生成的归档日志和在线日志连续且完整,可通过指定时间点使数据库继续恢复至任意时间点;若备份集之后的归档日志被清理,则数据库无法继续恢复至任意时间点。

  • 高可用部署场景下,还需注意:

    • 备库需要通过获取主库的归档日志进行主备数据同步。若在备库获得归档日志文件前,对应的归档日志文件已被清理,会导致备库无法正常同步数据。

    • 若配置ARCHIVELOG_DELETION_POLICY = 'BACKED UP integer TIMES',主备库各自的归档日志文件需要执行相应的备份次数后才可被清理。建议主库和备库配置不同的归档清理策略,避免主备库的归档日志文件重复备份、归档日志文件不能及时清理、磁盘空间浪费等问题。

    • 如果主库配置ARCHIVELOG_DELETION_POLICY = 'SHIPPED TO ALL STANDBY',备库宕机会导致主库归档日志文件无法及时清理。

  • 若将ARCH_CLEAN_UPPER_THRESHOLD参数设置为0,则表示关闭自动清理。为避免磁盘浪费,非必要不建议关闭自动清理归档日志文件。

# 操作步骤

  1. 以DBA用户连接并登录数据库。

    $ yasql sales/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  2. 查看相关参数配置。

    SELECT NAME,VALUE FROM V$PARAMETER WHERE ( NAME LIKE 'ARCH_CLEAN_%' ) OR ( NAME = 'ARCHIVELOG_DELETION_POLICY');
    
    NAME                                                             VALUE
    ---------------------------------------------------------------- ----------------------------------------------------------------
    ARCH_CLEAN_UPPER_THRESHOLD                                       16G
    ARCH_CLEAN_LOWER_THRESHOLD                                       12G
    ARCH_CLEAN_IGNORE_MODE                                           NONE
    ARCHIVELOG_DELETION_POLICY                                       DEFAULT
    
  3. 按需调整参数值,并指定生效范围。

    -- 配置为已同步至所有备库且已备份2次后归档日志文件方可被清理(此时会失效ARCH_CLEAN_IGNORE_MODE参数)
    ALTER SYSTEM SET ARCHIVELOG_DELETION_POLICY = 'SHIPPED TO ALL STANDBY, BACKED UP 2 TIMES' SCOPE=BOTH;
    
    SHOW PARAMETER ARCHIVELOG_DELETION_POLICY
    
    NAME                                                             VALUE                                                  
    ---------------------------------------------------------------- ----------------------------------------------------------------
    ARCHIVELOG_DELETION_POLICY                                       SHIPPED TO ALL STANDBY, BACKED UP 2 TIMES
    
    -- 将自动清理归档日志文件的触发条件设置为20G
    ALTER SYSTEM SET ARCH_CLEAN_UPPER_THRESHOLD = 20G SCOPE=BOTH;
    
    SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'ARCH_CLEAN_%_THRESHOLD';
    
    NAME                                                             VALUE                                                  
    ---------------------------------------------------------------- ----------------------------------------------------------------
    ARCH_CLEAN_UPPER_THRESHOLD                                       20G                                                    
    ARCH_CLEAN_LOWER_THRESHOLD                                       12G
    

# 手动归档

通常,数据库的自动归档机制可以满足日常运行所需,在一些特定场景中数据库管理员可按需进行手动归档,例如:

  • 备份或迁移前,为提高备份的完整性和一致性(例如,让即将生成的备份集更贴近当下时间点的业务数据),可以考虑先执行手动归档再进行相应操作。

  • 测试归档配置​时,尤其在开启归档模式初期,可以手动执行归档验证归档日志文件是否正常生成。

  • 在进行数据库性能优化时,可能需要手动归档,确保日志文件按预期分配和存储。

Caution:

生产环境应优先依赖自动归档机制,仅在特殊情况下再进行手动干预。

请勿频繁执行手动归档,以免增加I/O压力。

手动归档(ALTER SYSTEM ARCHIVE LOG CURRENT)只能归档CURRENT状态的redo日志文件,归档的同时还会切换redo日志文件,具体操作查阅切换并归档redo日志文件

手动归档所生成的归档日志文件与自动归档生成的文件在管理操作上不存在区别,同样受自动清理策略所管理,也同样可以按需进行文件管理

# 关闭归档模式

生产环境中,不建议关闭归档模式,且在以下场景中数据库必须运行于归档模式:

  • 高可用部署,例如单机主备部署、主备集群部署

  • 需使用YStream

  • 需使用全库闪回

# 前提条件

  • 已确认REPLICATION_ADDR参数值为空。

    -- 查看参数值
    SHOW PARAMETER REPLICATION_ADDR;
    
    -- 若该参数值不为空,需将其置空才能关闭归档模式
    ALTER SYSTEM SET REPLICATION_ADDR ='' SCOPE=SPFILE;
    
  • 查看当前归档模式未开启(即V$DATABASE视图中LOG_MODE=NOARCHIVELOG)。

  • 关闭归档模式需要将数据库启动/重启至MOUNT阶段。

# 操作步骤

  1. 重启数据库(或实例)至MOUNT阶段。

    $ yasboot cluster restart -c yashandb -p sys_password -m mount
    
  2. 以sys用户登录数据库。

    $ yasql sys/********@192.168.1.2:1688
    YashanDB SQL Enterprise Edition Release {version_number} x86_64
    
    Connected to:
    YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux
    
    SQL> 
    
  3. 查看数据库状态。

    SELECT status FROM V$INSTANCE;
    
    STATUS
    -------------
    MOUNTED
    
  4. 调整数据库归档模式。

    ALTER DATABASE NOARCHIVELOG;
    
  5. 再次查看归档模式确认修改生效。

    -- 再次查看当前数据库的归档模式
    SELECT database_name,log_mode,open_mode FROM V$DATABASE;
    
    DATABASE_NAME    LOG_MODE          OPEN_MODE   
    ---------------- ----------------- -------------
    yashandb            NOARCHIVELOG      MOUNTED  
    
  6. 启动数据库至OPEN。

    ALTER DATABASE OPEN;
    
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流