返回首页

gbase数据、南大通用产品文档:GBase8sonmode c:强制 checkpoint

更新日期:2024年09月11日

语法:

元素
用途
关键注意事项
-c
强制用于将缓冲区清仓到
磁盘的 checkpoint
如果逻辑日志中的最新检查 checkpoint 记录正
在阻止释放逻辑日志文件(状态 U-B-L),那么可
以使用 -c 选项强制同步 checkpoint 。
block
阻塞数据库服务器运行任
何事务
当数据库服务器阻塞后,
用户可以以只读方式访问
它。使用此选项在 GBase 8s 上执行外部备份。
有关更多信息,请参阅 GBase
8s 备份与恢复指

timeout
指示在返回命令提示符之
前等待 checkpoint 清除
的秒数
timeout 选项只有在配置了 DELAY_APPLY 配置参
数后才能应用
(请参阅 DELAY_APPLY 配置参数 )

如果启用了 DELAY_APPLY 配置参数,那么主服务
器请求的 checkpoint 可能在扩展的时间段内无
法到达辅助服务器。也可能是没有其它
checkpoint 暂存在暂存目录中。缺省的 timeout
值为 15 秒,允许的最大 timout 值为 10 分钟
(600 秒)。请参阅 GBase 8s 备份与恢复指南
unblock
不阻塞数据库服务器
当数据库服务器未阻塞时,
可以继续数据事务和正
常的数据库服务器操作。请在完成了 GBase
8s 上

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 353 -

元素
用途
关键注意事项
的外部备份之后使用此选项。
有关更多信息,请参阅 GBase
8s 备份与恢复指


该命令具有等同的 SQL 管理 API 函数。

使用GBase C API 执行SQL 语句
/*打印表中的数据,示例demo_1,demo_2,demo_3 调用此函数*/
void print_table(GBASE* gbase, char* table_name)
{
GBASE_RES* res = NULL;
GBASE_FIELD* fields = NULL;
GBASE_ROW row;
unsigned int num_fields;
char sql_select[500] = "select * from ";
int i=0;

while(table_name[i]){sql_select[14+i] = table_name[i]; i++;}
sql_select[14+i] = '\0';
if(gbase_query(gbase, sql_select))
{
printf("%d\t%s\n", gbase_errno(gbase),
gbase_error(gbase));
exit(0);
}
res = gbase_store_result(gbase);
num_fields = gbase_num_fields(res);
while(fields = gbase_fetch_field(res))
{
printf("|%s\t", fields->name);

GBase 8a 程序员手册C API 篇


- 72 -

南大通用数据技术股份有限公司
}
printf("|\n");
for(i=0;i{
printf("--------");
}
printf("\n");
while((row = gbase_fetch_row(res)) != NULL)
{
for(i=0; i < num_fields; i++)
{
printf("|%s\t", row[i]);
}
printf("|\n");
}
gbase_free_result(res);
}
/*
使用sql 文创建表,并进行数据增、删、查、改操作
*/
void demo_1(void)
{
GBASE* gbase=NULL;
const char* sql_drop_table = "drop table if exists g_demo1";
const char* sql_create_table = "create table g_demo1(id int,
name varchar(20))";
const char* insert_mode = "insert into g_demo1(id,
name)values(%d, '%s')";
int id[NUM_INSERT];
char name[NUM_INSERT][20];
char sql_insert[200];
const char* delete_mode = "delete from g_demo1 where id=%d";
char sql_delete[200];
const char* update_mode = "update g_demo1 set name='udpate'
where id=%d";
char sql_update[200];



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 73 -
const char* sql_select = "select * from g_demo1";
GBASE_RES* res = NULL;
GBASE_FIELD* fields = NULL;
GBASE_ROW row;

unsigned int i = 0;
unsigned int num_fields = 0;

/*初始化GBASE 结构体*/
if(!(gbase = gbase_init(0)))
{
fprintf(stderr, "不能初始化GBASE 结构体!\n");
exit(1);
}

/*数据库连接*/
if(!gbase_real_connect(gbase, host, user, passwd, db, port,
NULL, 0))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
gbase->reconnect = 1;

/*在数据库中创建表*/
if(gbase_query(gbase, sql_drop_table))
{
fprintf(stderr, "%s", gbase_error(gbase));
exit(1);
}
if(gbase_query(gbase, sql_create_table))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
/*向数据库表中插入数据*/
for(i=0; i
GBase 8a 程序员手册C API 篇


- 74 -

南大通用数据技术股份有限公司
{
id[i] = i;
sprintf(name[i], "name_%d", i);
}
for(i=0; i{
sprintf(sql_insert, insert_mode, id[i], name[i]);
if(gbase_query(gbase, sql_insert))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
}
/*从数据库表中选择出数据,并显示*/
if(gbase_query(gbase, sql_select))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
res = gbase_store_result(gbase);
printf("插入操作后表的内容\n");
if(res)
{
num_fields = gbase_num_fields(res);
while(fields = gbase_fetch_field(res))
{
printf("\t| %s ", fields->name);
}
printf("\t|\n");
while((row = gbase_fetch_row(res)) != NULL)
{
for(i=0; i < num_fields; i++)
{
printf("\t| %s ", row[i]);
}
printf("\t|\n");
}



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 75 -
}

/*更新数据库表中数据*/
sprintf(sql_update, update_mode, id[0]);
if(gbase_query(gbase, sql_update))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
printf("更新操作后表的内容\n");
print_table(gbase, "g_demo1");

/*删除数据库表中数据*/
sprintf(sql_delete, delete_mode, id[1]);
if(gbase_query(gbase, sql_delete))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
printf("删除操作后表的内容\n");
print_table(gbase, "g_demo1");
/*释放结果集*/
gbase_free_result(res);
/*释放数据库连接句柄*/
gbase_close(gbase);
}

/*
使用预处理语句进行数据插入和选择操作
*/
void demo_2(void)
{
GBASE* gbase=NULL;
GBASE_STMT* stmt;
GBASE_BIND bind[2];


GBase 8a 程序员手册C API 篇


- 76 -

南大通用数据技术股份有限公司
const char* sql_drop_table = "drop table if exists g_demo2";
const char* sql_create_table = "create table g_demo2(id int,
name varchar(20))";
const char* insert_mode = "insert into g_demo2(id,
name)values(?, ?)";
int in_id[NUM_INSERT];
char in_name[NUM_INSERT][20];
const char* update_mode = "update g_demo2 set name='update'
where id=?";
const char* delete_mode = "delete from g_demo2 where id=?";
const char* select_mode = "select id, name from g_demo2";
int out_id[NUM_INSERT];
char out_name[NUM_INSERT][20];

unsigned int i = 0;
int temp = 0;
unsigned int num_fields = 0;

/*初始化GBASE 结构体*/
if(!(gbase = gbase_init(0)))
{
fprintf(stderr, "不能初始化GBASE 结构体!\n");
exit(1);
}
/*数据库连接*/
if(!gbase_real_connect(gbase, host, user, passwd, db, port,
NULL, 0))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);

}
gbase->reconnect = 1;
/*在数据库中创建表*/
if(gbase_query(gbase, sql_drop_table))
{
fprintf(stderr, "%s", gbase_error(gbase));
exit(1);



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 77 -
}
if(gbase_query(gbase, sql_create_table))
{
fprintf(stderr, "\n%s\n", gbase_error(gbase));
exit(1);
}
/*向数据库表中插入数据*/
for(i=0; i{
in_id[i] = i;
sprintf(in_name[i], "name_%d", i);
}
if(!(stmt = gbase_stmt_init(gbase)))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}
if(gbase_stmt_prepare(stmt, insert_mode,
strlen(insert_mode)))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}

memset(bind, 0, sizeof(bind));

bind[0].buffer_type = GBASE_TYPE_LONG;
bind[1].buffer_type = GBASE_TYPE_STRING;
bind[1].buffer_length = 20;
printf("插入操作后表的内容\n");
for(i=0; i{
bind[0].buffer = (void*)∈_id[i];
bind[1].buffer = (void*)in_name[i];

if(gbase_stmt_bind_param(stmt, bind))
{

GBase 8a 程序员手册C API 篇


- 78 -

南大通用数据技术股份有限公司
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}
if(gbase_stmt_execute(stmt))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}
}
/*从数据库表中选择数据*/
if(gbase_stmt_prepare(stmt, select_mode,
strlen(select_mode)))
{
fprintf(stderr, "\n%s'n", gbase_stmt_error(stmt));
exit(1);
}
memset(bind, 0, sizeof(bind));

bind[0].buffer_type = GBASE_TYPE_LONG;
bind[1].buffer_type = GBASE_TYPE_STRING;
bind[1].buffer_length = 20;

if(gbase_stmt_execute(stmt))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}

for(i=0; i{
bind[0].buffer = (void*)&out_id[i];
bind[1].buffer = (void*)out_name[i];

if(gbase_stmt_bind_result(stmt, bind))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 79 -
}
if(!gbase_stmt_fetch(stmt))
{
printf("\t|%d\t|%s\t|\n", out_id[i] , out_name[i]);
}
else
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}
}
/*更新数据库表中数据*/
if(gbase_stmt_prepare(stmt, update_mode,
strlen(update_mode)))
{
fprintf(stderr, "\n%s'n", gbase_stmt_error(stmt));
exit(1);
}
memset(bind, 0, sizeof(bind));

temp = 0;
bind[0].buffer_type = GBASE_TYPE_LONG;
bind[0].buffer = (void*)&temp

if(gbase_stmt_bind_param(stmt, bind))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}

if(gbase_stmt_execute(stmt))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}
printf("更新操作后表的内容\n");
print_table(gbase, "g_demo2");

GBase 8a 程序员手册C API 篇


- 80 -

南大通用数据技术股份有限公司
/*删除数据库表中数据*/
if(gbase_stmt_prepare(stmt, delete_mode,
strlen(delete_mode)))
{
fprintf(stderr, "\n%s'n", gbase_stmt_error(stmt));
exit(1);
}
memset(bind, 0, sizeof(bind));

temp = 1;
bind[0].buffer_type = GBASE_TYPE_LONG;
bind[0].buffer = (void*)&temp

if(gbase_stmt_bind_param(stmt, bind))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}

if(gbase_stmt_execute(stmt))
{
fprintf(stderr, "\n%s\n", gbase_stmt_error(stmt));
exit(1);
}
printf("删除操作后表的内容\n");
print_table(gbase, "g_demo2");

/*关闭STMT 语句句柄*/
if(gbase_stmt_close(stmt))
{
fprintf(stderr, "%s\n", gbase_stmt_error(stmt));
exit(1);
}
/*释放数据库连接句柄*/
gbase_close(gbase);
}



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 81 -

功能描述
回滚当前事务并取消当前事务中的所有更新。
在事务运行的过程中发生了某种故障,
事务不能继续执行,
系统将事务中对数据库的所
有已完成的操作全部撤销,数据库状态回到事务开始时。
注意事项
如果不在一个事务内部发出ROLLBACK 不会有问题,但是将抛出一个NOTICE 信息。
语法格式
ROLLBACK [ WORK | TRANSACTION ];
参数说明
WORK | TRANSACTION
可选关键字。除了增加可读性,没有任何其他作用。
示例

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1223
--开启一个事务
gbase=#START TRANSACTION;
--取消所有更改
gbase=#ROLLBACK;
相关命令
COMMIT | END