返回首页

gbase数据、南大通用产品文档:GBase8s日志记录过程

更新日期:2024年09月11日

这些主题详细描述了数据库空间、BLOB 空间和智能大对象空间的日志记录过程。这些信
息对于执行常规数据库服务器管理任务不是必需的。
数据库空间日志记录
数据库服务器对涉及数据库空间中所存储数据的操作使用以下日志记录过程:
1. 将数据页从磁盘读到共享内存页缓冲区
2. 将未更改的页复制到物理日志缓冲区(如果需要)
3. 将新数据写入页缓冲区并创建事务的逻辑日志记录(如果需要)
4. 将物理日志缓冲区清空到磁盘上的物理日志
5. 将逻辑日志缓冲区清空到磁盘上的逻辑日志文件
6. 清空页缓冲区并将其写回到磁盘上

BLOB 空间日志记录
数据库服务器记录 BLOB 空间数据,但数据不经过共享内存或磁盘上的逻辑日志文件。
数据库服务器将存储在 BLOB 空间中的数据直接从磁盘复制到磁带上。对 BLOB 空间
开销页(自由图页和位图页)的修改记录是仅有的到达逻辑日志的 BLOB 空间数据。

BackUp table vcname000001.test.t1 start
--------------------------------------------

ifx_int8sub() 函数将两个 int8 类型值相减。
语法
mint ifx_int8sub(n1, n2, difference)
ifx_int8_t *n1;
ifx_int8_t *n2;
ifx_int8_t *difference;
n1
指向包含第一个运算对象的 int8 结构的指针。
n2
指向包含第二个运算对象的 int8 结构的指针。
difference
指向包含 n1 与 n2 的差(n1 - n2)的 int8 结构的指针。

用法

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 744 -
difference 可与 n1 或 n2 相同。

返回代码
0
减法成功。
-1284
减法导致溢出或下溢。
示例
demo 目录中的文件 int8sub.ec 包含下列样例程序。
/*
*int8sub.ec *

The following program obtains the difference of two INT8 type values.
*/

#include

EXEC SQL include "int8.h";

char string1[] = "6";
char string2[] = "9,223,372,036,854,775";
char string3[] = "999,999,999,999,999.5";
char result[41];

main()
{
mint x;
ifx_int8_t num1, num2, num3, sum;

printf("IFX_INT8SUB Sample ESQL Program running.\n\n");

if (x = ifx_int8cvasc(string1, strlen(string1), &num1))

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 745 -
{
printf("Error %d in converting string1 to INT8\n", x);
exit(1);
}
if (x = ifx_int8cvasc(string2, strlen(string2), &num2))
{
printf("Error %d in converting string2 to INT8\n", x);
exit(1);
}

/* subtract num2 from num1 */

if (x = ifx_int8sub(&num1, &num2, ∑))
{
printf("Error %d in subtracting INT8s\n", x);
exit(1);
}
if (x = ifx_int8soasc(∑, result, sizeof(result)))
{
printf("Error %d in converting INT8 result to string\n", x);
exit(1);
}
result[40] = '\0';
printf("\t%s - %s = %s\n", string1, string2, result);
/* display result */

if (x = ifx_int8cvasc(string3, strlen(string3), &num3))
{
printf("Error %d in converting string3 to INT8\n", x);
exit(1);
}

/* notice that digits right of the decimal are truncated. */

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 746 -

if (x = ifx_int8sub(&num2, &num3, ∑))
{
printf("Error %d in subtracting INT8s\n", x);
exit (1);
}
if (x = ifx_int8soasc(∑, result, sizeof(result)))
{
printf("Error %d in converting INT8 result to string\n", x);
exit(1);
}
result[40] = '\0';
printf("\t%s - %s = %s\n", string2, string3, result);
/* display result */

printf("\nIFX_INT8SUB Sample Program over.\n\n");
exit(0);
}
输出

IFX_INT8SUB Sample ESQL Program running.

6 - 9,223,372,036,854,775 = -9223372036854769
9,223,372,036,854,775 - 999,999,999,999,999.5
= 8223372036854776
IFX_INT8SUB Sample Program over.