返回首页

gbase数据、南大通用产品文档:GBase8s示例代码约定

更新日期:2024年09月11日

SQL 代码的示例在整个出版物中出现。
除非另有说明,
代码不特定于任何单个的 GBase 8s
应用程序开发工具。
如果示例中仅列出 SQL 语句,那么它们将不用分号定界。例如:您可能看到以下示例中
的代码:
CONNECT TO stores_demo
...
DELETE FROM customer
WHERE customer_num = 121
...
COMMIT WORK
DISCONNECT CURRENT
要将此 SQL 代码用于特定产品,必须应用该产品的语法规则。例如,如果使用的是 SQL
API,那么必须在每条语句的开头使用 EXEC SQL,并在每条语句的结尾使用分号(或其
他合适的定界符)。 如果使用的是 DB–Access,那么必须用分号将多条语句隔开。
提示: 代码示例中的省略点表示在整个应用程序中将添加更多的代码,但是不必显示它以描述
正在讨论的概念。
有关使用特定应用程序开发工具或 SQL API 的 SQL 语句的详细指导,
请参阅您的产品文
档。

任务或传感器的操作是用于执行一个或多个操作的 SQL 语句或例程。
如果操作中仅包含单个操作,SQL 语句很有用。 如果操作中包含多个操作,使用 C 或
Java™ 编写的存储过程或用户定义的例程很有用。操作存储在 ph_task 表的 tk_execute 列
中。
创建操作时具有很高的灵活性。 操作类型可包括:

执行 DML 操作。
可使用传感器在表中插入或更新数据。
可使用任务从表中删除较
旧的数据。

执行管理操作。
可使用任务来运行 SQL 管理 API 函数,
以管理数据库服务器。


GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 543 -
如,可创建一个任务来每两分钟执行一次检查点。

基于阈值执行操作。可使用 ph_threshold 表中的阈值确定是否必须运行某个任务操
作。
例如,
可创建一个任务,
该任务在可用共享内存量低于阈值时添加共享内存段。


创建警报以报告操作或警告存在潜在问题。例如,可创建一个任务,用于在用户会
话终止时终止在 ph_alert 表中插入行的空闲用户。也可创建任务来监视备份,并在
备份未执行时在 ph_alert 表中插入警告。
请在任务或传感器操作中使用以下变量:

$DATA_TASK_ID:用于指示当前任务或传感器。该变量对应于 ph_task 表
中 tk_id 字段的值。

$DATA_SEQ_ID:
用于指示任务或传感器的当前执行情况。
该变量对应于 ph_task 表
中的 tk_sequence 字段和 ph_run 表中的 run_task_sequence 字段的值。
示例
以下操作是使用的 SQL 语句,供内置 mon_command_history 任务用于
从 command_history 表中除去较旧的行。
DELETE FROM command_history
WHERE cmd_exec_time < (
SELECT CURRENT - value::INTERVAL DAY to SECOND
FROM ph_threshold
WHERE name = 'COMMAND HISTORY RETENTION' )
以下示例描述的是 SQL 语句,供内置 mon_vps 传感器用于向 mon_vps 结果表添加数据:
INSERT INTO mon_vps
SELECT $DATA_SEQ_ID, vpid, num_ready,
class, usecs_user, usecs_sys
FROM sysmaster:sysvplst
以下示例描述的是存储过程,用于终止空闲时间超过了阈值设置值的用户会话,并且
向 ph_alert 表添加警报。
/*
**************************************************************
* Create a function that will find all users that have
* been idle for the specified time. Call the SQL admin API to
* terminate those users. Create an alert to track which
* users have been terminated.
**************************************************************
*/

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 544 -
CREATE FUNCTION idle_timeout( task_id INT, task_seq INT)
RETURNING INTEGER

DEFINE time_allowed INTEGER;
DEFINE sys_hostname CHAR(16);
DEFINE sys_username CHAR(257);
DEFINE sys_sid INTEGER;
DEFINE rc INTEGER;

{*** Get the maximum amount of time to be idle ***}
SELECT value::integer

INTO time_allowed

FROM ph_threshold
WHERE name = "IDLE TIMEOUT";

{*** Find all users who are idle longer than the threshold ***}
FOREACH SELECT admin("onmode","z",A.sid), A.username, A.sid, hostname
INTO rc, sys_username, sys_sid, sys_hostname
FROM sysmaster:sysrstcb A , sysmaster:systcblst B,
sysmaster:sysscblst C
WHERE A.tid = B.tid
AND C.sid = A.sid
AND lower(name) in ("sqlexec")
AND CURRENT - DBINFO("utc_to_datetime",last_run_time) >
time_allowed UNITS MINUTE
AND lower(A.username) NOT IN( "gbasedbt", "root")

{*** If a user is successfully terminated, log ***}
{*** the information into the alert table. ***}
IF rc > 0 THEN
INSERT INTO ph_alert
(
ID, alert_task_id,alert_task_seq,
alert_type, alert_color,
alert_state,
alert_object_type, alert_object_name,
alert_message,
alert_action

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 545 -
) VALUES (
0,task_id, task_seq,
"INFO", "GREEN",
"ADDRESSED",
"USER","TIMEOUT",


"User "||TRIM(sys_username)||"@"||TRIM(sys_hostname)||



" sid("||sys_sid||")"||
" terminated due to idle timeout.",
NULL
);
END IF

END FOREACH;

RETURN 0;

END FUNCTION;



sword GCIDirPathColArrayReset(
GCIDirPathColArray *dpca,
GCIError *errhp
);

重置数据数组,以便再次重新设置新的内容。

参数
输入
/输出


dpca
输入
数据数组描述符指针
errhp
输入
错误信息句柄, 该接口调用失败时, 错误信息会存在该句柄上

如果执行成功, 返回GCI_SUCCESS,否则返回GCI_ERROR。