返回首页

gbase数据、南大通用产品文档:GBase8s使用 archecker 进行数据恢复

更新日期:2024年09月11日

使用 archecker 实用程序可执行两种类型的恢复操作。
archecker 实用程序执行的两种恢复类型如下:

基于 0 级归档的物理恢复。

先执行物理恢复,然后执行逻辑恢复,逻辑恢复使用 0 级归档和逻辑日志以将数
据恢复到特定时间点。
archecker 在读取命令文件时,确定是只执行物理恢复,还是在物理恢复后执行逻辑恢复。
缺省情况下,
archecker 执行物理和逻辑恢复。
如果使用了 WITH NO LOG 子句,
archecker
将不执行逻辑恢复。
archecker 在单纯的物理恢复中使用的过程和资源不同于在物理及逻辑恢复中所使用的。
以下各部分概述了这些过程。

物理恢复
当 archecker 实用程序执行物理恢复时,该实用程序将从 0 级归档抽取数据。
执行物理恢复时,archecker 执行以下任务:

在数据恢复之前,
禁用所有约束
(包括引用此目标表的外部约束)

索引和触发器。
如果表没有约束、索引或触发器,那么恢复性能更佳。

读取模式命令文件,以确定以下各项:

源表

目标表

所有表的模式

表位于的数据库空间的名称

从中抽取数据的特定归档

扫描归档,寻找属于被恢复的表的页面

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 193 -

处理数据页的每一行,以确定该行是完整的还是部分的。
如果该行目前是部分的,那么 archecker 将确定该行剩余部分是否已分阶段,如未
分阶段,那么将其分阶段以便于后续处理。

对于单纯的物理恢复,对该行应用过滤器并拒绝不需要的行。

将该行插入目标表。
要使用原始模式恢复表,必须指定源模式。要使用不同模式恢复表,目标模式中的表名称
必须与源模式中的表名称不同。使用不同模式恢复之后,可以使用 rename table 语句重命
名表。

逻辑恢复
物理恢复后,逻辑恢复可以进一步将表恢复到用户指定的时间点。 为此,archecker 实用
程序读取已备份的逻辑日志,将它们转换成 SQL 语句,然后重放这些语句以恢复数据。
在执行逻辑恢复之前,确保所要恢复的事务都包含在已备份的逻辑日志中。 archecker 实
用程序不能从当前日志中重放事务。 不能对外部表执行逻辑恢复。
如果逻辑恢复期间一个表被更改、删除或截断,那么恢复因该表终止。 终止发生在执行更
改的点上。 archecker 消息日志文件中的消息将记录发生了更改操作。
archecker 实用程序无法在逻辑恢复非记录数据库中的压缩表期间处理压缩字典。如果逻辑
恢复发现为表创建了新的压缩字典,那么恢复将为该表停止。
执行逻辑恢复时,archecker 使用两个同时运行的进程:
stager
汇编逻辑日志并将其保存在表中。
applier
将日志记录转换为 SQL 语句并执行这些语句。

stager
为收集相关的逻辑日志记录,stager 将执行以下步骤:
1. 仅扫描已备份的逻辑日志
stager 读取逻辑日志备份文件并汇编成完整的日志记录。
2. 测试逻辑日志记录
任何不适用于被恢复的表的日志记录将被拒绝。


GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 194 -
3. 将逻辑日志信息插入表中
如果没有拒绝逻辑日志记录,那么会将它插入到一个阶段表中。

applier
applier 从 stager 创建的控制表中读取数据。
它开始处理必需的事务,
并更新控制表以显示
该事务正在处理。 接下来,它按顺序对每条日志记录逐行进行操作,直到事务落实。
所有对控制表的更新在同一个事务中以日志记录修改的形式出现。
这使得所有的工作可以
作为一个独立单元完成或撤销,始终保持了完整性。 如果发生了错误,就会回滚事务,该
错误将记录到该事务的控制表条目中。
如果数据正在恢复而数据库管理员决定包含逻辑恢复,那么两个附加的工作列和一个索引
将被添加到目标表中。 这些列包含了原始行标识及原始部件号。 这些列提供了在原始的
源归档中识别该行位置的唯一键。
要控制索引的存储,
可使用 SET WORKSPACE 命令
(请
参阅 SET 语句)。 否则会将索引和表存储在同一个空间。
applier 结束且恢复完成之后,这些列以及对它们创建的任何索引都将从目标表中删除。

函数说明

返回date 的周数;

date 的取值范围为1~53;

WEEKOFYEAR(date)等价于WEEK(date,3)。
示例
示例1
返回“2010-08-30”对应的是2010年的第几周。
gbase> SELECT WEEKOFYEAR('2010-08-30') FROM t;
+--------------------------+
| WEEKOFYEAR('2010-08-30') |
+--------------------------+
| 35 |
+--------------------------+
1 row in set

false
serverTimezone
覆盖探测/映射时区。
当服务器时区不能
映射为Java 时区时使用。

strictFloatingP
oint
只在旧版本中用于一致性检查
false
strictUpdates
驱动程序是否应对可更新结果集进行严
格检查(选择所有的主键)
(true/false, 默认为true)
true
tinyInt1isBit
驱动程序是否应将数据类型TINYINT(1)
当作BIT 类型对待,创建表时,服务器
true

GBase 8a 程序员手册JDBC 篇


- 22 -

南大通用数据技术股份有限公司
会执行BIT -> TINYINT(1)操作
transformedBitI
sBoolean
如果驱动程序将TINYINT(1)转换为不同
的类型,为了与GBase 高版本兼容,驱
动程序是否应使用BOOLEAN 取代BIT
false
treatUtilDateAsTi
mestamp
treatUtilDateAsTimestamp=true 时,调用
PreparedStatement.setObject()时,把
java.util.Date 映射为TIMESTAMP 类型。
true
useGmtMillisFor
Datetimes
在创建Date和Timestamp实例之前将会
话时区和GMT 之间进行转换
false
useHostsInPrivi
leges

DatabaseMetaData.getColumn/TablePr
ivileges()中为用户添加
“@hostname”。(true/false, 默认为
true)
True
useJDBCComplian
tTimezoneShift
使用java.util.Calendar 作为JDBC 参
数时,驱动程序转换
TIME/TIMESTAMP/DATETIME 等数据类型
的时区信息是否应该使用JDBC 符合度
规则
false
useOldAliasMeta
dataBehavior
当useOldAliasMetadataBehavior
=true 时,调用
ResultSetMetaData.getColumnName() 或
false

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 23 -
ResultSetMetaData.getTableName()时返回
值为别名。默认为false(8.3.81.51 版本之
前默认为true)。
useOnlyServerEr
rorMessages
对服务器返回的错误消息,不事先设定
“标准的”SQLState 错误消息
true
useServerPrepSt
mts
如果服务器支持,那么使用服务器端预
处理语句(默认为true)
true
useSqlStateCode
s
使用SQL 标准的状态代码取代'legacy'
X/Open/SQL 状态代码(true/false, 默
认为true)
true
useStreamLength
sInPrepStmts
是否采用
PreparedStatement/ResultSet.setXXX
Stream()方法调用中的流长度参数
(true/false,,默认为true)
true
useTimezone
在服务器和客户端时区之间转换时间/
日期类型(true/false, 默认为 false)
false
useUnbufferedIn
put
不使用BufferedInputStream 来从服务
器读取数据
true
yearIsDateType
JDBC 对待GBase 的YEAR 类型,应该看
作是java.sql.Date,还是看作SHORT
true

GBase 8a 程序员手册JDBC 篇


- 24 -

南大通用数据技术股份有限公司
zeroDateTimeBeh
avior
当驱动程序遇到全由0 组成的DATETIME
值时,应出现什么(GBase 用于表示无
效值)
,可选的有exception、round 和
convertToNull。
exception
functionsNeverR
eturnBlobs
总是将函数返回类型为blob 的返回为
strings。只影响返回类型为blob 的函
数。
False
caseSensitiveFl
ag
设置对通过getColumnName 和
getColumnLabel方法获取的列信息是否
进行大小写转换。0:不转换,1:转小
写,2:转大写
0