时间点恢复将恢复指定时间点之前所有已提交的数据库操作。时间点可表现为时间戳和时区,或表现为事务日志偏移。
时间点恢复将扩展标准备份和恢复操作,但不会替换这些操作。时间点恢复始终通过从数据备份恢复数据库开始,随后重放恢复日志(涵盖从备份到指定时间点的整个时间段)中所有的已提交活动。将回退正在进行但尚未提交的事务。
SET OPTION PUBLIC.IQ_POINT_IN_TIME_RECOVERY_LOGGING = 'ON'
ALTER DBSPACE 确定用于归档恢复日志的目录:ALTER DBSPACE IQ_SYSTEM_LOG RENAME Multiplex 服务器中,IQ_SYSTEM_LOG 目录必须驻留在共享文件系统中并可通过所有 Multiplex 节点写入。有关其它约束,请参见“重定向日志输出”。
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 假定
IQ_LOG_MAX_SIZE 选项用于限制日志的大小:
SET OPTION PUBLIC.IQ_LOG_MAX_SIZE = '' 缺省设置 0 允许日志大小无限制增加。如果设置了日志大小限制且文件超出了限制,服务器将关闭当前日志并在同一目录中创建新日志。后续日志条目将写入到该新日志中。
所有恢复日志都包括扩展名 .iqlog。文件名称中的标识位置可提供有关日志的统计信息:
位置描述ALTER DBSPACE new-directory-specification 包括不含斜线或反斜线的终止字符串,该终止字符串将用作日志名称的前缀。 _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 DATABASE 时间点恢复语法扩展作为重放恢复日志(涵盖从备份到所指定时间点之前的整个时间段)中所有已提交活动的最终步骤:
RESTORE DATABASE ''
[ FROM '< file-name >' <...>
[ USING LOG PATH ' directory, [...]]
RECOVER UNTIL [ TIMESTAMP | OFFSET ]
OVERWRITE EXISTING
CLEAR LOGS
ON TIMELINE
始终指定晚于恢复命令 FROM 子句中指定的数据备份的备份时间的时间戳。这样可确保数据库包括恢复日志中所有的已提交事务。如果指定时间点早于备份数据库中的最后一个检查点,服务器将返回错误。
除非显式指定,否则时间点恢复将恢复相同位置的数据库。如果在尝试恢复的同一位置找到现有数据库,则恢复期间时间点恢复失败。在时间点恢复到相同位置的过程中,RESTORE 期间提供 OVERWRITE EXISTING 子句指示 SAP IQ 覆盖现有 dbfile 和事务日志。在本实例中通过 OVERWRITE EXISTING 子句便无需手动删除现有数据库。
时间点恢复期间,恢复可自动备份现有事务日志和 RLV 日志。在现有数据库目录中,每个时间点恢复需查找现有事务日志、RLV 日志和时间点日志。如果恢复操作未能找到这些日志,则将返回错误。如果想恢复到新环境却没有现有日志备份,那么在数据库目录中提供有 CLEAR LOGS 子句的 RESTORE 命令来停止 SAP IQ 查找现有日志文件。
可选择指定 ON TIMELINE 子句来指定时间点恢复中要使用的时间线。
限制SAP IQ 不支持带有时间点恢复的 RENAME。SAP IQ 不支持 Multiplex 系统上的时间点恢复。CLEAR LOGS 子句取消自动日志备份。仍将进行恢复数据库的自动备份。
执行时间点恢复:
dbisql 并连接到实用程序数据库:dbisql -c "UID=DBA;PWD=RESTORE DATABASE。 使用适当的增量备份执行恢复。有关语法示例,请参见“恢复场景”。
仅使用时间点恢复日志的时间点恢复:
// 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 是系统表,条目清除为非事务性且无法回退。
ALTER DBSPACE、BACKUP DATABASE 和 RESTORE DATABASE 语句