返回首页

gbase数据、南大通用产品文档:GBase8s使用 ontape 修改数据库日志记录方式

更新日期:2024年09月11日

如果您将 ontape 用作备份工具,那么可使用 ontape 来更改数据库的日志记录方式。
使用 ontape 打开事务日志记录
在您修改数据库日志记录方式之前,请阅读更改数据库日志记录方式。
在创建 0 级备份的同时用 ontape 向数据库添加日志记录。
例如,要使用 ontape 向名为 stores_demo 的数据库添加已缓冲日志记录,请运行以下命
令:
ontape -s -B stores_demo
要使用 ontape 向名为 stores_demo 的数据库添加未缓冲日志记录,请运行以下命令:
ontape -s -U stores_demo
除了打开事务日志记录以外,这些命令还创建整个系统存储空间备份。当 ontape 提示您
提供备份级别时,请指定 0 级备份。
提示: 对于 ontape,您必须执行所有存储空间的 0 级备份。
使用 ontape 结束日志记录
要使用 ontape 为名为 stores_demo 的数据库结束日志记录,请运行以下命令:
ontape -N stores_demo
使用 ontape 更改缓冲方式

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 278 -
要使用 ontape 在名为 stores_demo 的数据库上将缓冲方式从已缓冲日志记录更改为未缓
冲日志记录,但不创建存储空间备份,请运行以下命令:
ontape -U stores_demo
要使用 ontape 在名为 stores_demo 的数据库上将缓冲方式从未缓冲日志记录更改为已缓
冲日志记录,但不创建存储空间备份,请运行以下命令:
ontape -B stores_demo
使用 ontape 使数据库符合 ANSI 标准
要使用 ontape 使已经使用事务日志记录(未缓冲或已缓冲)的名为 stores_demo 的数据
库成为符合 ANSI 标准的数据库,请运行以下命令:
ontape -A stores_demo
要使用 ontape 使尚未使用事务日志记录的名为 stores_demo 的数据库成为符合 ANSI 标
准的数据库,请运行以下命令:
ontape -s -A stores_demo
除了使数据库符合 ANSI 标准以外,该命令还同时创建存储空间备份。当提示您提供级
别时,请指定 0 级备份。
提示: 在将日志记录方式更改为符合 ANSI 标准之后,就不能再轻易对其进行更改。要更改符合 ANSI
标准的数据库的日志记录方式,请卸载数据,使用新日志记录方式重新创建数据库,并重新装入数据。
有关详细信息,请参阅更改符合 ANSI 标准的数据库的日志记录方式。


GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 7 -
DB-Access 实用程序的需求
在客户机上启动 DB-Access 之前,请先设置客户机环境。
客户机上的 DB-Access 实用程序可以直接访问 Client SDK 与其建立了客户机/服务器连
接的 GBase 8s 数据库。
启动 Client SDK 随附的 DB-Access 实用程序之前,请先执行以下任务:
l
设置 sqlhosts 信息。
l
将 GBS_HOME 环境变量设置为 Client SDK 安装目录。

(1) INSERT ALL/FIRST 子句语法
功能描述:
INSERT ALL 是指将同一批数据插入到符合条件的若干张表中,INSERT FIRST 是指将
同一批数据插入到第一个符合条件的表中。也就是说,当表达式第一个条件为TRUE 之
后,INSERT FIRST 会跳过后面的条件并结束插入,而INSERT ALL 会继续执行接下来若干
条件为TRUE 的操作。

What’s new in GBase 8s V8.8


南大通用数据技术股份有限公司
8/60


语法:

使用说明:
INSERT ALL/FIRST 包括如下子句:
1.
ALL/FIRST 关键字:
ALL/FIRST 关键字省略时为ALL,
ALL 和FIRST 不能同时出现。
2.
WHEN condition 条件表达式:condition 是返回结果为布尔类型的算数表达式,
不支持省略,支持一个或多个条件表达式,多个表达式可用AND、OR 等逻辑
运算符和谓词连接。表达式中出现的列名必须是subquery 子句返回的列,运
算符两边都支持列名。
3.
THEN into 子句:表示条件满足时,将数据插入到into 子句的表中,into 子句
不支持省略。
into 子句支持在表后括号中罗列本表列名,
列名省略时表示需要
对表中所有列依次顺序插入数据。
4.
values 子句:用于指定需要插入的值,支持列名、函数、运算符、常量值等形
式,此处的列名为subquery 子句返回的列,如果subquery 子句对投影列使用
了别名,则values 子句中的列名指的是subquery 子句中投影列的别名。
注意:
i.
如果into 子句的表中本次插入值的列的数量少于subquery 子句返回列的数
量,则需要在into 子句表后括号中罗列列名并在values 子句中指定需要插入
的值。
ii.
values 子句支持省略,省略时,into 子句中表列的数量需要和subquery 子句
返回的列数量一致。
5.
WHEN…THEN…支持多次出现:WHEN…THEN…组合使用时,当表达式第一个
条件为TRUE 之后,INSERT FIRST 会跳过后面的条件并结束插入,而INSERT ALL
会继续执行接下来若干条件为TRUE 的操作。
6.
ELSE 子句:
当WHEN 子句根据条件表达式判断为假而都没有执行后,
执行ELSE
子句中的into 子句部分,其用法同WHEN 子句中的。ELSE 子句支持省略。

What’s new in GBase 8s V8.8


南大通用数据技术股份有限公司
9/60


7.
subquery 子句:subquery 子句返回的是一个数据集,支持SELECT…FROM…、
WHERE、UNION 等,具体用法可参考SQL 相关标准。
注意:
i.
subquery 返回列的类型需要与into 子句中表列的类型匹配,即需要类型一致
或者符合隐式转换规则。
举例:
CREATE TABLE testtb1(a1 int, a2 int);
CREATE TABLE testtb2(b1 int, b2 int);
CREATE TABLE testtb3(c1 int, c2 int);
CREATE TABLE testtb(col1 int, col2 int);
INSERT INTO testtb
VALUES(1, 1);
INSERT INTO testtb
VALUES(2, 2);
INSERT INTO testtb
VALUES(3, 3);
INSERT INTO testtb
VALUES(4, 4);
INSERT FIRST
WHEN col1 > 3 THEN INTO testtb1 (a1, a2) VALUES (col1, col2)
WHEN col1 > 2 THEN INTO testtb2 (b1, b2) VALUES (col1, col2)
ELSE INTO testtb3 (c1, c2) VALUES (col1, col2)
SELECT col1,col2 FROM testtb;
INSERT ALL
WHEN col1 > 3 THEN INTO testtb1
WHEN col1 > 2 THEN INTO testtb2 ELSE INTO testtb3
SELECT col1,col2 FROM testtb;

(2) WITH FUNCTION 子句语法
功能描述:
兼容ORACLE 的WITH FUNCTION 语法,
允许在WITH 语法中定义一个或多个PL/SQL
函数,并在后续的SELECT 语句中使用调用该函数。
为提供更好的Oracle 兼容性,WITH FUNCTION 的语法结构和使用方式,与ORACLE
中的WITH FUNCTION 保持一致,即在WITH FUNCTION 中定义的函数,其生命周期仅限
于本条SQL 执行期间,
无法在数据库任何系统表中查询到该函数相关信息,
也不允许其
它SQL 语句调用该函数。

What’s new in GBase 8s V8.8


南大通用数据技术股份有限公司
10/60


语法:

plsql_declarations:==


注:上图中,本版本只实现红色方框内分支语法
body:==

参数说明:
1.
WITH:语法关键词,不可省略;
2.
FUNCTION RETURN IS:函数heading,固定格式,
不可省略;
3.
BEGIN ... END:函数body,固定格式,不可省略;
4.
:函数逻辑功能实现,其语法规则与GBase 8s 当前版本所支持的
PL/SQL 语法规则保持一致;
举例:
CREATE TABLE t1(id number);
INSERT INTO t1 VALUES(12);
--test 1 with func
\set SQLTERM /
WITH FUNCTION with_func_1(p_id in number) RETURN number IS BEGIN
RETURN p_id;
END;
SELECT with_func_1(id) FROM t1 /
WITH PROCEDURE with_proc_1(p_id in number) IS BEGIN RAISE NOTICE
'p_id =%d', p_id;
END;
SELECT id FROM t1 /

What’s new in GBase 8s V8.8


南大通用数据技术股份有限公司
11/60


WITH FUNCTION with_func_1(p_id in number) RETURN number IS BEGIN
RETURN p_id;
END;
FUNCTION with_func_2(p_id in number) RETURN number IS BEGIN RETURN
p_id + 100;
END;
SELECT with_func_1(id),with_func_2(id) FROM t1;

(3) WITH AS 子句语法
功能描述:
使用WITH AS 语句可定义子查询别名和列别名,
并可在其他子查询和select 查询块
引用该别名。定义的别名作用域仅限于紧跟在WITH AS 之后的select 查询块的单次查
询,查询后失效。在select 查询块未定义关联条件下,查询语句的结果集为各子查询结
果的笛卡尔积。
语法:
WITH <子查询别名 [(<列名>{,<列名>})] AS(子查询)>
[,<子查询别名 [(<列名>{,<列名>})] AS(子查询)>]
select 查询块
使用说明:
1.
子查询别名支持的字符与现有系统表名保持一致;
2.
支持with 子句的子查询数量为一个或多个;
3.
支持with 子句的子查询可不罗列列别名,不罗列列别名时,列名与子查询投
影列列名保持一致;
4.
支持with子句的子查询名称可与当前模式下基础表或基础视图重名,
重名时,
均被当做子查询别名处理。
5.
with 子句定义的名称,
其生命周期为紧邻WITH AS 语句之后的select 语句查询
块查询后结束,
且查询一次后就失效。
with 子句中无法访问到其他模式的基础
表或基础视图;
6.
支持with 子句的子查询为多个使用集合运算符联结(UNION ALL、UNION、
EXCEPT 或 INTERSECT)的select 查询语句,且集合运算符的查询语句不能使
用with 定义的子查询别名。子查询别名没有指定列,子查询包含UNION ALL
等词语时,结果集的列名字与现有UNION ALL 等语句保持一致;

What’s new in GBase 8s V8.8


南大通用数据技术股份有限公司
12/60


7.
支持with 子句的定义的子查询别名,在查询块未使用;
8.
支持with 子句的多个子查询可引用已定义的子查询别名,且只能先定义后引
用;
9.
支持select 查询块嵌套WITH AS;
10. 支持with 子句在批处理的语句中使用;
11. 支持在delete、insert…select、update 子句中使用;
12. 使用WITH AS 定义子查询别名时,支持使用function 定义函数。支持with 语
句中有多条function 语句和多条as 语句,
function 语句必须放在as 语句之前,
as 语句可以使用function 定义的函数,两类语句不允许穿插。as 定义子查询
别名支持与function 语句重名。
定义CTE 的语法格式:
WITH expression_name [(column_name [,...n] )] AS
(cte_query_definition)
举例说明:
WITH cr AS
(SELECT CountryRegionCode
FROM person.CountryRegion
WHERE Name LIKE 'C%' )
SELECT *
FROM person.StateProvince
WHERE CountryRegionCode IN
(SELECT * FROM cr)
其中cr 是一个公用表表达式,该表达式在使用上与表变量类似,只是SQL Server
在处理公用表表达式的方式上有所不同。

(4) ROLLUP、CUBE 和 GROUPING SETS 分组统计语法
GROUP BY 的分组项支持:expr 值表达式、ROLLUP 子句、CUBE 子句、GROUPING
SETS 子句。
语法:

What’s new in GBase 8s V8.8


南大通用数据技术股份有限公司
13/60