返回首页

gbase数据、南大通用产品文档:GBase8sarchecker 模式引用

更新日期:2024年09月11日

本节中的主题描述了 archecker 模式命令文件使用的类似 SQL 的语句。该文件提供
archecker 实用程序用于执行数据恢复的信息。
使用模式命令文件可指定源表和目标表,并定义表模式。
有关指定 archecker 使用哪个命令文件的信息,请参阅模式命令文件。
以下是 archecker 支持的语句:

CREATE TABLE

DATABASE

INSERT INTO

RESTORE

SET
重要: archecker 实用程序文件中允许出现标准 SQL 注释,在处理中将忽略这些注释。
以下主题中描述了这些语句的语法。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 199 -
CREATE TABLE 语句
CREATE TABLE 语句描述了源表和目标表的模式。如果目标表是外部的,那么使用
CREATE EXTERNAL TABLE 语句部分中描述的 CREATE EXTERNAL TABLE 语句。
语法
archecker 模式命令文件中使用的 CREATE TABLE 的语法与对应 GBase 8s SQL 语句相
同。有关此语法的描述,请参阅《GBase 8s SQL 指南:语法》。
用途
您必须在 archecker 模式命令文件中包含源表的模式。 该模式必须和创建归档时源表的模
式相同。
源表的模式未由 archecker 验证。如未提供准确的模式,会发生不可预测的结果。
源表不可以是同义词或视图。源表的模式仅需列列表和存储选项。 将忽略诸如扩展数据块
大小和锁定方式等其他属性。 对于 ON-Bar 归档,archecker 使用源表的存储空间列表来
创建要从存储管理器中检索的对象列表。如果源表是分段的,必须列出所有包含源表数据
的数据库空间。archecker 实用程序只从模式命令文件中列出的数据库空间中抽取数据。
如果源表包含约束、索引或触发器,那么在恢复期间将会自动禁用这些约束、索引或触发
器。 还会禁用参考目标表的外部约束。 恢复完成后,约束、索引和触发器将被启用。 为
了顺利地执行恢复,在执行恢复前除去约束、索引和触发器。
您必须还在命令文件中包含目标表的模式。 如果执行恢复时目标表不存在,将使用所提供
的模式创建它。
如果目标表存在,其模式必须和命令文件中指定的模式匹配。随后将数据附加到现有的表。

示例
源表和目标表的模式不一定要相同。
以下示例显示了如何能够在执行数据抽取之后对源数
据重新分区:
CREATE TABLE source (col1 integer, ...) IN dbspace1;
CREATE TABLE target (col1 integer, ...)
FRAGMENT BY EXPRESSION
MOD(col1, 3) = 0 in dbspace3,
MOD(col1, 3) = 1 in dbspace4,
MOD(col1, 3) = 2 in dbspace5;
INSERT INTO target SELECT * FROM source;

CREATE EXTERNAL TABLE 语句
CREATE EXTERNAL TABLE 语句描述了外部目标表的模式。
语法

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 200 -
archecker 模式文件的 CREATE EXTERNAL TABLE 语句的语法和 SQL CREATE
EXTERNAL TABLE 语句不同。


元素
描述
column
列名。
必须符合 SQL 标识语法规则。 有关更多信息,请参阅《GBase
8s
SQL 指南:语法》。
data_type
列的内置数据类型。
有关数据类型的更多信息,
请参阅
《GBase
8s
SQL 指
南:参考》。
filename
放置数据的文件名或管道设备名。 管道设备必须在启
动 archecker 实用程序之前就已存在。
名称
存储外部数据的表的名称。
在当前数据库中的表、
视图和同义词的名称
中必须是唯一的。
必须符合 SQL 数据库对象命名规则。
有关更多信息,
请参阅《GBase 8s SQL 指南:语法》。
用途
当使用 CREATE EXTERNAL TABLE 语句向外部表发送数据时,数据只从 0 级归档中抽
取。 逻辑日志不在外部表上前滚。
您可以为外部文件指定以下两种格式之一:
DELIMITED:ASCII 定界文件。这是缺省的格式。
GBASEDBT:内部二进制表示法。为优化性能,不应该将过滤器应用于外部表。 如果过滤
器存在,将出现警告以指示会将其忽略。
有关使用 CREATE EXTERNAL TABLE 语句的示例,请参阅恢复到外部表。

DATABASE 语句
在 archecker 实用程序中,DATABASE 语句用于设置当前的数据库。
语法

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

元素
描述
dbname 当前数据库的名称。
用途
可以使用多条 DATABASE 语句。所有该语句后引用的表的名称都和当前的数据库关联。
如果源表的日志记录方式是 ANSI 而表的模式中使用了缺省的十进制列,那么必须声明数
据库的日志记录方式。
如果未声明源数据库的日志记录方式,不会返回错误,但可能出现意外的结果和数据。
示例
在以下示例中,源表和目标表都驻留在同一个数据库 dbs 中。
DATABASE dbs;
CREATE TABLE source (...);
CREATE TABLE target (...);
INSERT INTO target SELECT * from source;
您可以使用多重数据库语句将表从一个数据库抽取到另一个数据库。
DATABASE dbs1;
CREATE TABLE source (...) IN dbspace1;
DATABASE dbs2;
CREATE TABLE target (...) IN dbspace2;
INSERT INTO dbs2:target SELECT * FROM dbs1:source;

INSERT 语句
INSERT 语句告知 archecker 实用程序要抽取的表以及用于放置抽取数据的位置。
语法


GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 202 -
元素
描述
过滤器
(filter)
INSERT 语句支持以下过滤器:

=, !=, <>

>, >=, <, <=

[NOT] MATCHES, [NOT] LIKE

IS [NOT] NULL

AND, OR

TODAY, CURRENT
archecker 实用程序不支持以下操作程序:

聚集

函数和过程

下标

子查询

视图

连接
过滤器只能应用于纯物理的恢复。
src_column
要抽取的列的列表。
src_table
从中恢复数据的归档中的源表。
target_column 数据将被恢复的一个或多个目标列。
target_table
数据将被恢复的目标表。
示例
以下示例演示了 INSERT 语句最简单的格式。
该语句从源表中抽取所有行和列到目标表。

INSERT INTO target SELECT * FROM source;
也可以抽取一部分列。在以下示例中,源表中只有两列被插入到目标表中。
CREATE TABLE source (col1 integer, col2 integer, col3 integer, col4 integer);
CREATE TABLE target (col1 integer, col2 integer);
INSERT INTO target (col1, col2) SELECT col3, col4 FROM source;

RESTORE 语句
RESTORE 语句是将表恢复到特定时间点的可选命令。

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

元素
描述
"time" 该表要恢复到的日期和时间。
用途
TO 子句用来将表恢复到特定的时间点,该时间点由日期和时间指定,或由保留字
CURRENT 指定。
一个命令文件中只能指定一个 RESTORE 语句。 如果命令文件中未出现该语句,那么系
统将被恢复到最近一次使用逻辑日志的时间。
如果出现了 WITH NO LOG 子句,那么只执行物理恢复。 此外,两个额外列及索引未添
加到目标表。 纯物理的恢复只基于 0 级归档。
提示: 当没有逻辑日志时,请使用该选项。您将收不到任何有关逻辑恢复的消息。
示例
RESTORE TO CURRENT WITH NO LOG;

SET 语句
SET 语句控制表级卸装库中的不同功能。
语法

元素
描述
number
设置物理恢复期间在提交前插入的记录数量。缺省值为 1000。
dbspace
用作工作存储空间的数据库空间。缺省值是根数据库空间。不能用临时
数据库空间作为工作存储空间。
archecker 实用程序在逻辑恢复中为逻辑日志记录的登台创建了几个表。 这些表
在 sysutils 数据库中创建,并存储在工作存储空间中。
示例

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 204 -
SET COMMIT TO 20000;
SET WORKSPACE to dbspace1;

模式命令文件示例
本节包含为不同数据恢复方案显示不同命令文件语法的示例。
简单模式命令文件
本示例中的模式命令文件从 dbspace1 的最近一次 0 级备份中抽取一个表。 数据放置在表
test1:tlr 中,并且应用了日志,以使表 tlr 的时间变为当前时间点。
database test1;
create table tlr (
a_serial serial,
b_integer integer,
c_char char,
d_decimal decimal
) in dbspace1;
insert into tlr select * from tlr;
从先前备份中恢复表
本示例中的模式命令文件从 dbspace1 的 0 级备份中抽取一个表。 使用了逻辑日志将表的
时间变为“2003-01-01 01:01:01”。 数据放在表test1:tlr 中。
database test1;
create table tlr (
a_serial serial,
b_integer integer,
c_char char,
d_decimal decimal
) in dbspace1;
insert into tlr select * from tlr;
restore to '2003-01-01 01:01:01';
恢复到不同的表
本示例中的模式命令文件从 dbspace1 的最近备份中抽取名为 test1:tlr 的表,
并将数据放到
表 test1:tlr_dest 中。
database test1;
create table tlr (
a_serial serial,

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 205 -
b_integer integer,
c_char char(20),
d_decimal decimal,
) in dbspace1;
create table tlr_dest (
a_serial serial,
b_integer integer,
c_char char(20),
d_decimal decimal
) in dbspace2;
insert into tlr_dest select * from tlr;
抽取列的子集
本示例中的模式命令文件从 dbspace1 的最近备份中抽取表 test1:tlr,并将数据子集放到表
test1:new_dest 中
database test1;
create table tlr (
a_serial serial,
b_integer integer,
c_char char(20),
d_decimal decimal
) in dbspace1;
create table new_dest (
X_char char(20),
Y_decimal decimal,
Z_name char(40)
) in dbspace2;
insert into new_dest (X_char, Y_decimal) select c_char,d_decimal from tlr;
使用数据过滤
本示例中的模式命令文件从 dbspace1 的最近备份中抽取表 test1:tlr,并且只将数据放到表
test1:tlr 中列出条件为真的地方。
重要: 过滤器只能应用于物理恢复。
database test1;
create table tlr (
a_serial serial,
b_integer integer,
c_char char(20),

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 206 -
d_decimal decimal,
) in dbspace1;
insert into tlr
select * from tlr
where c_char matches ‘john*'
and d_decimal is NOT NULL
and b_integer > 100;
restore to current with no log;
恢复到外部表
本示例中的模式命令文件从 dbspace1 的最近备份中抽取名为 test1:tlr 的表,
并将数据放到
名为 /tmp/tlr.unl 的文件中。
database test1;
create table tlr
(a_serial serial,
b_integer integer
) in dbspace1;
create external table tlr_dest
(a_serial serial,
b_integer integer
) using ("/tmp/tlr.unl", delimited );
insert into tlr_dest select * from tlr;
restore to current with no log;
恢复多个表
本示例中的模式命令文件从 dbspace1 的最近备份中抽取表 test1:tlr 和 test1:tlr_2,并且将
数据放到 test1:tlr_1_dest 和 test1:tlr_2_dest。 这是恢复多个表的有效方法,因为它只需要
扫描一次归档和逻辑日志文件。
database test1;
create table tlr_1
( columns ) in dbspace1;
create table tlr_1_dest ( columns );
create table tlr_2
( columns ) in dbspace1;
create table tlr_2_dest ( columns );
insert into tlr_1_dest select * from tlr_1;
insert into tlr_2_dest select * from tlr_2;
执行分布式的恢复

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 207 -
本示例中的模式命令文件从 dbspace1 的最近备份中抽取表 test:tlr_1,
并将数据放到数据库
服务器 rem_srv 上的表 rem_dbs:tlr_1 中。
database rem_dbs
create table tlr_1
( columns );
database test1;
create table tlr_1
( columns ) in dbspace1;
insert into rem_dbs@rem_srv.tlr_1
select * from tlr_1;

7 备份与恢复配置参数引用

GBA-02DR-0009
错误码
错误标识
错误信息
GBA-02DR-0009

Gcluster
switch
to
readonly
mode
failed
错误出现原因
集群切换成readonly 模式失败
分析与建议
查看集群gcware 状态

client_min_messages
参数说明:
控制发送到客户端的消息级别。
每个级别都包含排在它后面的所有级别中的
信息。级别越低,发送给客户端的消息就越少。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
须知:
当client_min_messages 和log_min_messages 取相同值时,其值所代表的级别不同。
取值范围:枚举类型,有效值有debug、debug5、debug4、debug3、debug2、debug1、
info、log、notice、warning、error、fatal、panic。参数的详细信息请参见表15-1。在实际设
置过程中,如果设置的级别大于error,为fatal 或panic,系统会默认将级别转为error。
默认值:notice