GBase 8s常见问题 -- 事务相关问题
一、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 testdbunbuf 是转换为 无缓冲日志模式 (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()才能抓到这两条错误信息,所以直接忽略就可以。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526