返回首页

gbase数据、南大通用产品文档:GBase8s备份与恢复

更新日期:2024年09月11日

1. 数据库中应具有完全(增量)备份恢复功能
【准备】
cd /opt/gbase8s
mkdir backups
chmod 777 backups
chown gbasedbt:gbasedbt backups
onmode -wf TAPEDEV=/opt/gbase8s/backups
onmode -wf LTAPEDEV=/opt/gbase8s/backups
onmode -wf BAR_BSALIB_PATH=/opt/gbase8s/lib/libbsapsm.so
export BAR_BSALIB_PATH=/opt/gbase8s/lib/libbsapsm.so
onmode -wf PSM_CATALOG_PATH=/opt/gbase8s/etc/psm
1)准备数据(sysdba 与表 db3:t1 符合强访策略)
drop database if exists db3;
create database db3 with log;
create table t1(id int);
insert into t1 values(1);
2)进行 0 级备份
onbar -b -w -L 0
输入用户名 sysdba
3)备份完成后,删除数据库 db3
4)关闭数据库实例,进行0级恢复
onbar –r
5)验证数据恢复成功:
connect to 'db3@ol_gbase8s' user 'sysdba';
select * from t1; --返回 1 行(1)
6)以 sysdba 身份再次插入数据

GBase 8s 安全技术指南
南大通用数据技术股份有限公司
- 42 -

insert into t1 values(2);
7)进行 1 级备份
onbar -b -L 1
输入用户名 sysdba
8)关闭数据库实例,进行1级恢复
onmode -ky
onbar -r
查询表 t1 中的数据:
select * from t1; --返回2行(1) (2)
2. 数据库管理系统应对备份与恢复操作设置权限
检查各用户权限,查看备份权限是否被严格限制
1)具备备份恢复权限的授权用户执行备份还原操作,查看是否成功,如root
用户;
2)以不具备备份权限的用户登录,执行备份还原操作,查看是否失败,如新
建用户 user1。
3. 备份数据加密
以授权用户登录,对数据进行备份操作,vi备份数据文件为密文存储
4. 数据库管理系统应具有备份数据完整性保护机制
以授权用户身份分别执行备份操作,使用 vi 打开并篡改备份文件,使用修改
后的备份文件进行还原操作,操作失败

参数说明:控制每个事务允许断定锁的最大数量,是一个平均值。

共享的断定锁表的大小是以假设任意时刻最多只有
max_pred_locks_per_transaction*(max_connections+max_prepared_transactions) 个独
立的对象需要被锁住为基础进行计算的。
不超过设定数量的多个对象可以在任一时
刻同时被锁定。
当在一个事务里面修改很多不同的表时,
可能需要提高这个默认数
值。只能在服务器启动的时候设置。

增大这个参数可能导致GBase 8c 请求更多的System V 共享内存,
有可能超过操作
系统的缺省配置。
该参数属于POSTMASTER 类型参数,
请参考表GUC 参数设置方式中对应设置方法进
行设置。
取值范围:整型,10 ~ INT_MAX
默认值:64

当编写 GBase 8s ESQL/C 代码时可以使用下列 GBase 8s ESQL/C 预处理器的功能:

include 伪指令展开程序中的 GBase 8s ESQL/C include 文件。
define 和 undef 伪指令创建编译时的定义。
ifdef 、ifndef 、else 、elif 和 endif 伪指令指定条件编译。
与嵌入式 SQL 语句一样,
您可以使用以下 GBase 8s ESQL/C 预处理器指令的两种格
式之一 :
EXEC SQL 关键字:
EXEC SQL preprocessor_directive;
EXEC SQL 关键字符号 ANSI 标准。
美元符号($):
$preprocessor_directive;
在任一格式中,使用下列章节描述的有效的预处理器伪指令替换
preprocessor_directive 。必须用分号(;)终止这些指令。
GBase 8s ESQL/C 预处理器分两个阶段工作。
在第 1 阶段,
它作为 GBase 8s ESQL/C
代码的预处理器。在第 2 阶段,它将所有嵌入式 SQL 代码转换为 C 代码。
在第 1 阶段,GBase 8s ESQL/C 预处理查询通过处理所有 include 伪指令

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 30 -
($include 和 EXEC SQL include 语句)在源文件中并入其它文件。同样在第 1 阶段,
GBase 8s ESQL/C 通过处理 define($define 和 EXEC SQL define)和 undef($undef
和 EXEC SQL undef)伪指令创建或移除编译时的定义。
本节的其余部分将详细介绍 GBase 8s ESQL/C 预处理程序伪指令。
include 指令
include 伪指令运行您指定在 GBase 8s ESQL/C 程序中包含的文件。
GBase 8s ESQL/C 预处理器程序将指定文件的内容放到 GBase 8s ESQL/C 源文件中。
GBase 8s ESQL/C 预处理程序的第一阶段将 filename 的内容读入 include 指令位置的
当前文件中。
可以使用以下两种格式之一的 include 预处理器指令:
EXEC SQL include filename;
$include filename;
将 filename 替换为要包含在程序中的文件的名称。您可以指定带有或不带引号的文
件名。但是,如果使用完整路径名称,则必须将路径名括在引号中。
以下示例显示了如何在 Windows™ 环境中使用完整路径名。
EXEC SQL include decimal.h;

EXEC SQL include "C:\apps\finances\credits.h";
提示: 如果指定完整路径名,当文件位置变化后您必须重新编译此程序。更好的编
程实践使用 esql -I 选项指定搜索位置,并使用 include 指定文件名。
如果忽略了文件名周围的引号,GBase 8s ESQL/C 将文件名更改为小写字母。如果省
略了路径名,GBase 8s ESQL/C 预处理程序检查该文件的预处理程序的搜索路径。
可以对以下类型文件使用 include :
GBase 8s ESQL/C 头文件
不必对 GBase 8s ESQL/C 头文件使用 .h 文件扩展名;
编译器假定您的程序引用了扩
展名为 .h 的文件。以下示例显示了包含 GBase 8s ESQL/C 头文件的有效语句:
EXEC SQL include varchar.h;
$include sqlda;
EXEC SQL include sqlstype;
其它用户定义的文件
必须指定您想要包含文件的确切名称。当您包含的不是 GBase 8s ESQL/C 头文件的
头文件时,编译器不会假定 .h 扩展名。
以下示例显示在 UNIX 环境下包含 constant_defs 和 typedefs.h 文件的有效语句:
EXEC SQL include constant_defs;
EXEC SQL include "constant_defs";

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 31 -
$include typedefs.h;
EXEC SQL include "typedefs.h";
如果指定的文件包含嵌入式 SQL 语句或者其它 GBase 8s ESQL/C 语句,
您必须使用
GBase 8s ESQL/C include 伪指令。
使用标准 C #include 伪指令包含系统头文件。
C 的 #include 在 GBase 8s ESQL/C
预处理后包含一个文件。
限制: 在声明部分不支持嵌入式 INCLUDE 语句,并可能产生误导性错误。
define 和 undef 指令
GBase 8s ESQL/C 预处理程序允许您创建只对 GBase 8s ESQL/C 预处理程序可用的
简单变量。 GBase 8s 调用这些变量定义。GBase 8s ESQL/C 预处理程序使用两个指令管
理这些定义:
define
创建名称标志定义。该定义的范围是从您将其定义到 GBase 8s ESQL/C 源文件
的末尾。
undef
移除 EXEC SQL define 或 $define 创建的名称标志。
GBase 8s ESQL/C 预处理程序而不是 C 预处理查询(处理 #define 和 #undef)处
理这些指令。
GBase 8s ESQL/C 预处理程序创建
(define)
或移除
(undef)
预处理阶段 1
中的这些定义。
GBase 8s ESQL/C define 指令创建具有以下格式的定义:
Boolean 符号的格式是 define symbolname;
以下示例显示如何定义 Boolean 符号 TRANS 的两种方法:
EXEC SQL define TRANS;
$define TRANS;
整数常量的格式是 define symbolname value;
以下示例显示了两个整数常量的格式,MAXROWS (具有值 25 )和
USETRANSACTIONS (具有值 1):
EXEC SQL define MAXROWS 25;
$define MAXROWS 25;

EXEC SQL define USETRANSACTIONS 1;
$define USETRANSACTIONS 1;
重要:
不同于 C #define 定义,
define 指令不支持字符串常量或接收运行时的值的
语句的宏。
可以使用 esql 命令行选项 -ED 和 -EU 覆盖源程序中的 define 和 undef 语句。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 32 -
ifdef 、ifndef 、elif 、else 和 endif 指令
GBase 8s ESQL/C 预处理程序支持条件编译的以下指令:
ifdef
如果定义已创建名称,则测试名称并执行后续的语句。
ifndef
如果定义未创建名称,则测试名称并执行后续的语句。
elif
开始 ifdef 或 ifndef 条件的替代部分并检查另一个 define 的存在。它是
“else if define ” 的缩写。
else
开始 ifdef 或 ifndef 条件的替代部分。
endif
结束 ifdef 或 ifndef 条件。
在以下示例中,
如果之前使用 define 指令定义 USETRANSACTIONS 名称,
则进行
编译 BEGIN WORK 语句:
EXEC SQL ifdef USETRANSACTIONS;
EXEC SQL begin work;
EXEC SQL endif;
下列示例说明 elif 语句的使用。该样本将会输出 “USETRANSACTIONS defined”。
EXEC SQL define USETRANSACTIONS;



EXEC SQL ifndef USETRANSACTIONS;
printf(“USETRANSACTIONS not defined”);
EXEC SQL elif USETRANSACTIONS;
printf(“USETRANSACTIONS defined”);
EXEC SQL endif;
GBase 8s ESQL/C 预处理查询不支持一般的 if 指令,它仅支持 ifdef 和 ifndef 语
句来测试名称是否使用 define 定义。
GBase 8s ESQL/C 预处理程序处理预处理的阶段 1 中的条件编译定义。