您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

时间点恢复

时间点恢复将恢复指定时间点之前所有已提交的数据库操作。时间点可表现为时间戳和时区,或表现为事务日志偏移。

时间点恢复将扩展标准备份和恢复操作,但不会替换这些操作。时间点恢复始终通过从数据备份恢复数据库开始,随后重放恢复日志(涵盖从备份到指定时间点的整个时间段)中所有的已提交活动。将回退正在进行但尚未提交的事务。

启用时间点恢复

  1. 启用 IQ_POINT_IN_TIME_RECOVERY_LOGGING:SET OPTION PUBLIC.IQ_POINT_IN_TIME_RECOVERY_LOGGING = 'ON'

  1. 使用 ALTER DBSPACE 确定用于归档恢复日志的目录:ALTER DBSPACE IQ_SYSTEM_LOG RENAME /  缺省情况下,SAP IQ 将时间点恢复日志保存在 .db 文件所在的目录中。此命令会将日志保存到其它目录中。new-directory-specification 必须指向现有目录。在 Multiplex 服务器中,IQ_SYSTEM_LOG 目录必须驻留在共享文件系统中并可通过所有 Multiplex 节点写入。有关其它约束,请参见“重定向日志输出”。

  1. 执行数据备份:BACKUP DATABASE ... TO

    时间点恢复日志记录功能仅在数据备份开始后完全启用。

    将 IQ_POINT_IN_TIME_RECOVERY_LOGGING 选项设置为 OFF 会立即禁用时间点恢复。要重新启用时间点恢复,必须完成此过程中的所有步骤,包括 FULL、INCREMENTAL 或 INCREMENTAL SINCE FULL 备份。

    重定向日志输出

    缺省情况下,SAP IQ 将时间点恢复日志保存在 .db 文件所在的目录中。要将日志保存在其他目录中,请使用:

    ALTER DBSPACE IQ_SYSTEM_LOG RENAME /

    指向现有目录。如果时间点恢复日志记录处于活动状态,使用含有 的此命令在新位置打开新日志。对于 Multiplex 服务器,此目录必须驻留在共享文件系统中并可通过所有 Multiplex 节点写入。

    ALTER DBSPACE 假定 中以斜线 (Windows) 或反斜线 (UNIX) 结尾的任何字符串均为目录名称。不被斜线或反斜线终止的字符串将用作日志名称的前缀。

    日志大小

    IQ_LOG_MAX_SIZE 选项用于限制日志的大小:

    SET OPTION PUBLIC.IQ_LOG_MAX_SIZE = ''

    缺省设置 0 允许日志大小无限制增加。如果设置了日志大小限制且文件超出了限制,服务器将关闭当前日志并在同一目录中创建新日志。后续日志条目将写入到该新日志中。

    日志名称

    所有恢复日志都包括扩展名 .iqlog。文件名称中的标识位置可提供有关日志的统计信息:

    位置描述 是可选项。如果 ALTER DBSPACE new-directory-specification 包括不含斜线或反斜线的终止字符串,该终止字符串将用作日志名称的前缀。 _日志名称中的前三位是服务器 ID。SAP IQ 始终向 Simplex 服务器分配 _000 作为服务器 ID。 _服务器标识符后的六位数字是日志序号。如果 IQ_POINT_IN_TIME_RECOVERY_LOGGING 为 ON,各个日志备份或 ALTER DBSPACE IQ_SYSTEM_LOG RENAME 将关闭当前日志并打开新日志。每个新日志都会递增日志序号。 _日志序号后的四位数字是日志子序号。在备份或 ALTER DBSPACE IQ_SYSTEM_LOG RENAME 后打开的新日志将以子序号 1 开头。如果档案大小超出 IQ_LOG_MAX_SIZE 设置的值,服务器将关闭当前日志并打开新日志。子序号将递增以体现此更改。 

    自动备份

    要按设置的时间间隔备份时间点恢复所需的日志,请使用:

    SET OPTION PUBLIC.IQ_LOG_BACKUP_INTERVAL= ''

    时间间隔以分钟为单位表示。IQ_LOG_BACKUP_INTERVAL 选项用于备份事务日志和 RLV 日志。考虑到大小的问题,时间点恢复日志 ( .iqlog ) 未包括在备份中。必须显式设置 IQ_LOG_BACKUP_INTERVAL 选项。支持的最短备份间隔是 5 分钟。缺省行为要求手动备份活动日志。

    手动备份

    要手动备份时间点恢复日志,请使用:

    BACKUP DATABASE ...
    

    POINT IN TIME RECOVERY LOGS ONLY TO '/'

    SAP IQ 将关闭当前日志并启动新日志。将留下先前日志的副本作为备份。将存档写入到 target-directory 。

    POINT IN TIME RECOVERY LOGS ONLY 仅支持一个 TO 子句,它将指向文件系统上的某个位置。档案名称由用户确定。不允许其他选项。POINT IN TIME RECOVERY LOGS ONLY 子句只能用于为时间点恢复备份活动日志。请勿在数据备份中使用此子句。

    RESTORE 和恢复

    始终通过使用完整数据备份恢复数据库开始时间点恢复,然后在想要恢复的时间点之前应用所有增量备份。使用 RESTORE DATABASE 时间点恢复语法扩展作为重放恢复日志(涵盖从备份到所指定时间点之前的整个时间段)中所有已提交活动的最终步骤:

    RESTORE DATABASE '' 
    

    [ FROM '< file-name >' <...>

    [ USING LOG PATH ' directory, [...]]

    RECOVER UNTIL [ TIMESTAMP | OFFSET ]

    OVERWRITE EXISTING

    CLEAR LOGS

    ON TIMELINE

    始终指定晚于恢复命令 FROM 子句中指定的数据备份的备份时间的时间戳。这样可确保数据库包括恢复日志中所有的已提交事务。如果指定时间点早于备份数据库中的最后一个检查点,服务器将返回错误。

    OVERWRITE EXISTING

    除非显式指定,否则时间点恢复将恢复相同位置的数据库。如果在尝试恢复的同一位置找到现有数据库,则恢复期间时间点恢复失败。在时间点恢复到相同位置的过程中,RESTORE 期间提供 OVERWRITE EXISTING 子句指示 SAP IQ 覆盖现有 dbfile 和事务日志。在本实例中通过 OVERWRITE EXISTING 子句便无需手动删除现有数据库。

    CLEAR LOGS

    时间点恢复期间,恢复可自动备份现有事务日志和 RLV 日志。在现有数据库目录中,每个时间点恢复需查找现有事务日志、RLV 日志和时间点日志。如果恢复操作未能找到这些日志,则将返回错误。如果想恢复到新环境却没有现有日志备份,那么在数据库目录中提供有 CLEAR LOGS 子句的 RESTORE 命令来停止 SAP IQ 查找现有日志文件。

    ON TIMELINE

    可选择指定 ON TIMELINE 子句来指定时间点恢复中要使用的时间线。

    限制SAP IQ 不支持带有时间点恢复的 RENAME。SAP IQ 不支持 Multiplex 系统上的时间点恢复。CLEAR LOGS 子句取消自动日志备份。仍将进行恢复数据库的自动备份。

    执行时间点恢复

    执行时间点恢复:

  1. 关闭数据库服务器。

  1. 启动可用于连接到实用程序数据库的服务器: start_iq -su -gd DBA -gm 1 -n my_server

  1. 启动 dbisql 并连接到实用程序数据库:dbisql -c "UID=DBA;PWD=;DBN=utility_db"

  1. 在要恢复的时间点之前恢复数据库。从完整数据库备份开始。在要恢复的时间点之前,为每个增量备份重复该步骤。

  1. 使用时间点语法扩展运行 RESTORE DATABASE。 使用适当的增量备份执行恢复。有关语法示例,请参见“恢复场景”。

  1. 关闭服务器和实用程序数据库。

  1. 正常启动数据库服务器。

    恢复场景

    仅使用时间点恢复日志的时间点恢复:

    // enable Point in time recovery
    
    

    SET OPTION PUBLIC.IQ_POINT_IN_TIME_RECOVERY_LOGGING = 'ON'

    ALTER DBSPACE IQ_SYSTEM_LOG RENAME '/demo/pitrLog/PITRLOG'

    BACKUP DATABASE FULL to '/demo/dataBackup/FULL1'

    // perform some DDL/DML operations

    CREATE TABLE T1 ( ID INT )

    INSERT INTO T1 VALUES (1)

    // record timestamp TS1 / OFFSET OFS1

    TS1: select getdate()

    OFS1: select db_property('LastCommitRedoPos')

    // perform DDL/ DML operations

    CREATE TABLE T2 ( ID INT )

    INSERT INTO T2 VALUES (1)

    // record timestamp TS2 / OFFSET OFS2

    TS2: select getdate()

    OFS2: select db_property('LastCommitRedoPos')

    // restore the database to point in time TS1 / OFS1

    // shut down the database

    // start a utility server

    RESTORE DATABASE 'iqdemo' FROM '/demo/dataBackup/FULL1'

    RECOVER UNTIL TIMESTAMP ''

    USING LOG PATH '/demo/pitrLog/' ,

    OVERWRITE EXISTING

    // or

    RESTORE DATABASE 'iqdemo' FROM '/demo/dataBackup/FULL1'

    RECOVER UNTIL OFFSET

    USING LOG PATH '/demo/pitrLog/' OVERWRITE EXISTING

    使用时间点恢复日志和时间点恢复日志备份档案的时间点恢复:

    // enable point-in-time recovery
    
    

    SET OPTION PUBLIC.IQ_POINT_IN_TIME_RECOVERY_LOGGING = 'ON

    ALTER DBSPACE IQ_SYSTEM_LOG RENAME '/demo/pitrLog/PITRLOG'

    BACKUP DATABASE FULL to '/demo/dataBackup/FULL1'

    // perform DDL / DML operations

    CREATE TABLE T1 ( ID INT )

    INSERT INTO T1 VALUES (1)

    // record timestamp TS1 / OFFSET OFS1

    TS1: select getdate()

    OFS1: select db_property('LastCommitRedoPos')

    // perform DDL / DML operations

    CREATE TABLE T2 ( ID INT )

    INSERT INTO T2 VALUES (1)

    // record timestamp TS2 / OFFSET OFS2

    TS2: select getdate()

    OFS2: select db_property('LastCommitRedoPos')

    // perform a PITR log backup

    BACKUP DATABASE

    POINT IN TIME RECOVERY LOGS ONLY TO '/demo/pitrLogBackup/PITR1'

    // perform DDL/ DML operations

    CREATE TABLE T3 ( ID INT )

    INSERT INTO T3 VALUES (1)

    // restore the database to point-in-time TS2 OR OFS2

    // shut down the database

    // start a utility server

    RESTORE DATABASE 'iqdemo'

    FROM '/demo/dataBackup/FULL1'

    RECOVER UNTIL TIMESTAMP ''

    USING LOG PATH '/demo/pitrLogBackup/', '/demo/pitrLog/'

    OVERWRITE EXISTING

    // or

    RESTORE DATABASE 'iqdemo'

    FROM '/demo/dataBackup/FULL1'

    RECOVER UNTIL OFFSET

    USING LOG PATH '/demo/pitrLogBackup/', '/demo/pitrLog/'

    OVERWRITE EXISTING

    通过增量备份对已启用 RLV 的数据库进行的时间点恢复:

    // perform a full database backup
    
    

    BACKUP DATABASE FULL TO '/demo/dataBackup/FULL1'

    // perform DDL / DML operations

    CREATE TABLE T0 ( ID INT )

    INSERT INTO T0 VALUES (1)

    RECORD TIME STAMP TS0 / OFFSET OFS0

    // enable point-in-time recovery using an incremental backup

    SET OPTION PUBLIC.IQ_POINT_IN_TIME_RECOVERY_LOGGING = 'ON

    ALTER DBSPACE IQ_SYSTEM_LOG RENAME '/demo/pitrLog/PITRLOG'

    BACKUP DATABASE INCREMENTAL to '/demo/dataBackup/INCR1'

    // perform DDL / DML operations

    CREATE TABLE T1 ( ID INT )

    INSERT INTO T1 VALUES (1)

    // record timestamp TS1 / OFFSET OFS1

    TS1: select getdate()

    OFS1: select db_property('LastCommitRedoPos')

    // perform DDL / DML operations

    CREATE TABLE T2 ( ID INT )

    INSERT INTO T2 VALUES (1)

    // record timestamp TS2 / OFFSET OFS2

    //perform a PITR log backup

    BACKUP DATABASE

    POINT IN TIME RECOVERY LOGS ONLY TO '/demo/pitrLogBackup/PITR1'

    // note the RLV DBspace files and their location

    select * from sp_iqfile() where segmentType = 'RLV'"

    // restore the database to point-in-time TS1 OR OFS1

    // shut down the database

    // Do a physical file backup of all files in the RLV Dbspace.

    // start a utility server

    // Perform a restore of database from backup FULL1

    RESTORE DATABASE 'iqdemo'

    FROM '/demo/dataBackup/FULL1'

    OVERWRITE EXISTING

    // restore the RLV Dbspace files from the backup taken above to its original location

    // perform a point-in-time recovery to time TS1 using incremental backup INCR1

    RESTORE DATABASE 'iqdemo'

    FROM '/demo/dataBackup/INCR1'

    RECOVER UNTIL TIMESTAMP ''

    USING LOG PATH '/demo/pitrLogBackup/PITR1/'

    OVERWRITE EXISTING CLEAR LOG

    备份历史记录

    使用 sp_iqpurgebackuphistory 存储过程管理备份历史记录。 sp_iqpurgebackuphistory 会从 SysIQBackupHistory 和 SysIQBackupHistoryDetail 系统表能够删除所有符合四个参数所定义的条件的行: 参数类型描述bu_idUNSIGNED BIGINT删除与 bu_id 相匹配的条目:sp_purgeiqbackuphistory(bu_id ='9277')bu_time_lowTIMESTAMP删除时间戳 (hh:mm:ss.ms) 大于或等于 bu_time_low 的条目:sp_purgeiqbackuphistory( bu_time_low='2013/01/01') bu_time_highTIMESTAMP删除备份时间小于或等于 bu_time_high 的条目:sp_purgeiqbackuphistory( bu_time_high='2013/01/01' ) bu_typeTINYINT删除与 bu_type 相匹配的条目: 0 = FULL1 = INCREMENTAL2= INCREMENTAL SINCE FULL  由于 SysIQBackupHistory 和 SysIQBackupHistoryDetail 是系统表,条目清除为非事务性且无法回退。

    其它信息

    • 请参见《SAP IQ SQL 参考》中的 IQ_POINT_IN_TIME_RECOVERY_LOGGING、IQ_POINT_IN_TIME_RECOVERY_LOG_INTERVAL、IQ_LOG_INTERVAL 数据库选项

    • 请参见《SAP IQ SQL 参考》中的 ALTER DBSPACEBACKUP DATABASERESTORE DATABASE 语句

    • 请参见《SAP IQ SQL 参考》中的 sp_purgeiqbackuphistory 过程