GBase 8s
运维管理
文章

GBase 8s常见问题 -- 事务相关问题

发表于2024-01-31 16:26:48291次浏览3个评论

一、Transaction not available.

事务不可用,当前数据库没有开启日志。

需要将数据库转换为记录日志模式,或者新建一个带日志的数据库使用

转换日志模式:

1. ontape

ontape -s -L 0 -U testdb -t /dev/null

-s -L 0 是做0级备份的参数

-U 是将数据库转换为 无缓冲日志模式 (unbuffered log),B是 有缓冲日志(buffered log),N是 无日志,A是 ansi日志(不建议使用)

testdb 是数据库名,转换多个数据库可以用空格隔开

-t /dev/null 是指定备份文件路径,这里是丢弃备份文件,如果需要保留按你自己的配置来

也可以一次性将多个数据库修改为不同的模式:

ontape -s -L 0 -U testdb -B testdb2 -t /dev/null

修改完成后会在online日志中输出修改后的日志模式

'testdb' - New logging mode: UNBUFFERED

 

2. ondblog

ondblog unbuf testdb

unbuf 是转换为 无缓冲日志模式 (unbuffered log),buf是 有缓冲日志(buffered log),nolog是 无日志,ansi是 ansi日志(不建议使用)

testdb 是数据库名,转换多个数据库可以用空格隔开

 

ondblog可以在不备份的情况下,改变数据库的日志模式,但是将数据库从 无日志 模式改为其他有日志模式时,需要做一次0级备份之后才能生效。

3. 管理API函数(在sysadmin数据库中执行task/admin函数)

execute function sysadmin:task('alter logmode','testdb','u')

testdb是数据库名

u是无缓冲日志,b是缓冲日志,n是无日志,a是ansi日志

使用这种方式修改日志模式,通常不需要0级备份。

4. 查看日志模式

在sysmaster系统库中查询sysdatabases系统表

SELECT * FROM sysmaster:sysdatabases

is_logging  1是有日志,0是无日志

is_buff_log  1是有缓冲,0是无缓冲

is_ansi   是否为ansi日志

is_nls    是否启用GLS,在GL_USEGLU=1环境变量下创建的数据库这个值就是1

 

二、Not in transaction.

不在事务中

这个错误是在没开启事务的情况下,执行了commit/rollback造成的,没有实际影响,可以忽略。

建议检查一遍事务流程,看看有没有该开启事务时却没有开启事务的情况。

 

三、java.sql.SQLWarning: Database has transactions、java.sql.SQLWarning: Database selected

有些小伙伴在使用c3p0连接池时,连接数据库会报出类似这样的SQLwarning

这个是执行切换数据库时返回的提示信息,没有实际影响,可以忽略。

测试时,使用try/catch是抓不到这条信息的,主动使用stmt.getWarnings()才能抓到这两条错误信息,所以直接忽略就可以。

 

 

 

 

 

 

 

 

 

 

 

评论

登录后才可以发表评论
用户头像
路路路发表于 9个月前
赞~
用户头像
路路路发表于 7个月前
mark
用户头像
levvel发表于 5个月前
进来看看,应该有收获