informix数据库的日志模式
admin
2023-06-08 16:41:48
0

    今天操作数据库进行批量DML操作的时候,报了一个以前没有见过的错误, java.sql.SQLException: No Transaction Isolation on non-logging db's,特此写一遍记录一下自己的解决过程。


首先,我从上述报错看出大体就是此库不记录日志,但是以前我们的事务操作是一定会有日志的。所以展开了如下搜索。


1,查看日志模式:

onmonitor --> Logical-logs -->Databases  看各个库的 Log Status

一看,状态果然是N。这样的话,就不支持事务。所以会报错。


2,修改模式:

ontape -s -B dbname

我执行该语句报错了,Error changing logging status - 'bmt'. iserrno 107. Program over. 原因好像是,执行该命令时,需要数据库服务器是脱机的,就是不能执行任何增删改查的操作才可以


ontape –s –L 0 –N dbname  将数据库dbname从-U,-B,-A其中一种模式改变到-N模式,创建0级备份 

ontape –s –L 0 –U cem2  将数据库”cem2”从-N改变到-U模式,创建0级备份 

ontape –s –L 0 –B cem2  将数据库”cem2”从-N改变到-B模式,创建0级备份 

ontape –s –L 0 –A cem2  将数据库”cem2”从-N改变到-A模式,创建0级备份 

####ontape工具在-U,-B,-A三种模式中任何一种改变到另一种不需创建系统备份; 要完全从不带日志模式改成带日志模式,或者反过来,需要创建一个0级备份;


另外,

create database dbname with log

创建数据库状态是U

create database dbname with buffered log

创建数据库状态是B
这两种都带日志,支持事务。


下面大致列一下,各个模式的含义:

-N  No Logging  没有日志 

-U  Unbuffered Logging   非缓冲日志 

-B  Buffered Logging   缓冲日志 

-A  Unbuffered Logging, Mode ANSI   ANSI模式

No Loggin 没有日志模式:只向逻辑日志中记录很少的信息,只能执行DDL语句,不支持事务,也就是不能执行DML语句。一个不带日志的数据库环境可以具有很高的吞吐率,但在发生严重的实例失败时没有能力重建对数据库的修改。

Unbuffered Logging   非缓冲日志模式:只要事务提交,就会将包含该事务信息的物理日志和逻辑日志缓冲区刷新到磁盘上。这样的话,即使出现严重的实例错误,数据完整性和一致性也可以在事务级得到保证。但是因为每一次提交事务都会导致缓冲区被刷新到磁盘上,所以增加了磁盘I/O。另外,因为刷新是按照当前事务的进度将整个缓冲区内容都写到逻辑日志中,所以逻辑日志的页面中会有很多没有用的数据。日志填充得很快,但其中包含的“真正”数据却比缓冲日志数据库环境少得多。

Buffered Logging   缓冲日志模式:环境将在逻辑日志和物理日志缓冲区中保留这些事务信息,直到该缓冲区填满,或者发生检查点操作,或者是当事务还没有被写往日志之前关闭了产生该事务的用户连接。在“缓冲日志”数据库环境中,每个事务所造成的磁盘I/O大大降低,因此实例会运行得较快,但是因为事务信息存储在共享内存中,严重的实例错误就会很危险,当实例的共享内存被释放时,那些还没有写到磁盘上的事务信息就都丢失了。

#####非缓冲日志模式和缓冲日志模式的操作方式完全相同,其不同点在于何时将日志记录写到磁盘上。

Unbuffered Logging, Mode ANSI ANSI模式:ANSI模式的操作与非缓冲日志一样,但它还强制与ANSI事务处理方式一致。ANSI一致性包括这样一些特点和规则,如对引用表的唯一属主命名,表级权限的不同缺省值,游标读和更新能力的不同,以及character和decimal数据类型对数据类型越界或定义语句如何反应的不同。  

####OnLine Dymanic Server在ANSI数据库环境中并不严格强制遵从所有的ANSI标准,如果你执行一条非ANSI的SQL语句,实例会产生一条警告信息,但仍然往下处理。除非操作环境要求使用ANSI标准,否则使用ANSI模式不会得到任何好处。


如果想从N模式改到B模式,步骤如下:

onmode -u            清除连接session,进入quiescent mode

ontape -s -B spdb    修改spdb的日志模式为B

onmode -m            切回到联机模式

onmonitor--> Logical-Logs-->Databases   再次查看spdb的日志模式,已经改回为B,重启应用成功。


另附几个命令:

查找进程的命令:onstat -g sql | grep dbname

删除进程的命令:onmode -z 进程号




相关内容

热门资讯

神舟二十三号载人飞船发射升空 IT之家 5 月 24 日消息,刚刚,搭载神舟二十三号载人飞船的长征二号 F 遥二十三运载火箭在酒泉...
浙江上线“创新积分制”数智平台 来源:中国新闻网 中新网杭州5月24日电(鲍梦妮)5月24日,在2026年浙江省“全国科技活动周”上...
国内知名冷门绝学大咖齐聚深圳,... 本文转自【光明日报】; 5月22日上午,作为2026文化强国建设高峰论坛重要组成部分,首届冷门绝学传...
神舟二十三号载人飞行任务航天员... 据微信公众号“中国载人航天”消息,5月24日20时16分,神舟二十三号载人飞行任务航天员乘组出征仪式...
以总理:同特朗普一致认为须消除... 新华社耶路撒冷5月24日电(记者庞昕熠 王卓伦)以色列总理内塔尼亚胡24日在社交平台发文称,他和美国...
专家解读|秉持以人为本 统筹发... 随着大模型、生成式人工智能、智能体等技术的迭代创新,人工智能正在进入加速应用的新阶段,由此引发的社会...
原创 v... vivo在5月份的新机继续增加,比如vivo S60系列、vivo Y600 Turbo等,均在5月...
“暗面”之下:山西沁源82死矿... 山西省沁源县,留神峪煤矿。5月23日傍晚,作业现场已被拦住,你只能在矿区门口看到一道栅栏,背后封锁着...
神二十三发射任务将创下多个“首... 神舟二十三号即将发射,现场各项准备工作如何?凤凰卫视特派记者孙伟健从酒泉卫星发射中心发回现场报道。
山西留神峪煤矿事故调查:写满安... 5月22日19时29分,山西沁源的暮色尚未完全降临,有着45年开矿历史的通洲集团留神峪煤矿,骤然迎来...