返回首页

gbase数据、南大通用产品文档:GBase8s监视动态添加的日志的事件

更新日期:2024年09月11日

监视以下由动态添加的日志文件触发的事件警报(见下表)。 当每个警报被触发,就向消
息日志写入一条消息。有关更多信息,请参阅《GBase
8s 管理员参考》中有关事件警报和
配置参数的章节。
您可以包含 onparams 命令以在您的事件类标识 27(日志文件必需的)的警报脚本中添
加日志文件。您的脚本还可运行 onstat
-d 命令来检查有否足够空间,并对具有足够空
间的位置执行 onparams a -i。必须使用 -i 选项在当前日志文件之后添加新的日志。

表 1. 动态添加的日志文件的事件警报
类标

严重性
类消息
消息
26
3
动态添加的日志文
件 log_number
当数据库服务器动态添加日志文件时显示该消息。
动态地将日志文件 log_number 添加到数据库
空间 dbspace_number。
27
4
需要日志文件
当 DYNAMIC_LOGS 设置为 1 且数据库服务器等待
您添加日志文件时,显示该消息。
警报:最旧的逻辑日志 log_number 包含来自
打开的事务 transaction_address 的记录。逻
辑日志记录将保持阻塞状态,直到添加了日志文
件为止。如下所示,使用 onparams -a 命令
和 -i(插入)选项添加日志文件:onparams -a
-d dbspace -ssize-i
然后尽快完成该事务。
28
4
没有可用于日志文
件的空间
警报:因为最旧的逻辑日志 log_number 包含来
自 transaction_address 打开事务的记录,那么
服务器将尝试动态添加日志文件。但没有可用的空
间。添加数据库空间或块,然后尽快完成该事务。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 312 -
下表显示数据库服务器对于 DYNAMIC_LOGS 配置参数的每个设置执行的操作。
表 2. DYNAMIC_LOGS 设置
DYNAMIC_
LOGS
含义
事件警报 等待添加日

动态日志添加
2(缺省值) 允许自动分配新日志文件,从而
防止打开的事务挂起系统。
是(26、
28)


1
允许手动添加新日志文件。
是 (27)


0
不分配日志文件,但发出以下有
关打开的事务的消息:
警告: 最旧的逻辑日志文
件 log_number 包含来自打开
事务 transaction_address 的
记录,但是动态日志功能已关闭。



ifx_rc_isnull() 函数返回指示行或集合是否为空的值。
语法
ifx_rc_isnull(nullflag, rchandle)
参数
该函数接受以下参数。
参数
类型
用于
描述
nullflag
SQL_SMALLINT
输出
指示行或集合是否为空的标志。
值可能
为:
l
TRUE
l
FALSE
rchandle
HINFX_RC
输入
行或集合的句柄
用法
ifx_rc_isnull() 函数返回指示行或集合是否为空的值。

更新游标允许您删除或更新当前行;即,最近访存的行。使用 GBase 8s ESQL/C 编写的下
列示例展示更新游标的声明:
EXEC SQL
DECLARE names CURSOR FOR
SELECT fname, lname, company
FROM customer
FOR UPDATE;
使用此游标的程序可以常规的方法访存行。
EXEC SQL
FETCH names INTO :FNAME, :LNAME, :COMPANY;
如果该程序然后决定需要修改该行,则它可这么做。
if (strcmp(COMPANY, "SONY") ==0)
{
EXEC SQL
UPDATE customer
SET fname = 'Midori', lname = 'Tokugawa'

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 234 -

WHERE CURRENT OF names;
}
关键字 CURRENT OF names 替代 WHERE 子句中的常规测试表达式。在其他方面,
UPDATE 语句保持不变,
即使包括表名称的规范,
在游标名称中其为隐式的,
但仍然需要。


关键字 UPDATE 的用途
游标中的关键字 UPDATE 的用途是让数据库服务器可更新(或删除)它访存的任何行。
数据库服务器在通过更新游标访存的行上放置较多的需求锁,而当它访存未使用那个关键
字声明的游标的行时,放置较少的需求锁。此操作使常规的游标有较好的性能,以及在多
处理系统中更高的并发使用级别。(对多用户环境编程 讨论锁和并发使用的级别。)

更新特定的列
下列示例已更新了前面的更新游标示例的特定的列:
EXEC SQL
DECLARE names CURSOR FOR
SELECT fname, lname, company, phone
INTO :FNAME,:LNAME,:COMPANY,:PHONE FROM customer
FOR UPDATE OF fname, lname
END-EXEC.
仅可通过此游标更新 fname 和 lname 列。作为错误拒绝如下语句:
EXEC SQL
UPDATE customer
SET company = 'Siemens'
WHERE CURRENT OF names
END-EXEC.
如果程序尝试这样的更新,则返回错误代码且不发生更新。由于删除影响所有列,因此,
也拒绝使用 WHERE CURRENT OF 的删除尝试。

不总是需要的 UPDATE 关键字
SQL 的 ANSI 标准不提供游标定义中的 FOR UPDATE 子句。当程序使用符合 ANSI 的
数据库时,它可使用任何游标来更新或删除。