如何在清理Informix数据库日志?

时间:2021-07-04 08:55:37
各位专家、高手,大家好,请问如何清理Informix的数据库逻辑日志?我用onstat -l查看了一个逻辑日志的使用情况,发现有10个逻辑日志,大小均为7500,其中9个的使用率为100%。我在运行一对账程序时(长事务程序),速度非常慢,但对账的数据只有400多笔,以前上千笔的数据对账时也只用了几十秒,所以我怀疑是逻辑日志满了造成对账时间过长,但不知如何清掉逻辑日志,释放逻辑日志空间。我试着执行ontape -a先备份逻辑日志,但因服务器没有磁带机,备份时总是失败。请大家帮忙分析一个,如何解决这个问题?

10 个解决方案

#1


将日志文件备份指向/dev/null试试。

备份以后就就应该不大了。

#2


日志备份已经指向/dev/null了。onconfig相关参数如下:
# Log Archive Tape Device
LTAPEDEV       /dev/null        # Log tape device path
LTAPEBLK       16               # Log tape block size(Kbytes)
LTAPESIZE      150000           # Max amount of data to put on log tape(Kbytes)
但执行ontape -a时,系统提示:
Logbackup failed - Log backup to device nul not allowed
Please label this tape as number 1 in the log tape sequence.
This tape contains the following logical logs:
   1(partial)
然后再用onstat -l查看逻辑日志时,问题依旧,十个逻辑日志有9个%used值为100%。

#3


应该没关系了,我都是这样做的。

#4


ontape -p 删除日志



ontape应用程序提供以下功能:
 申请逻辑日志backup
 启动逻辑日志文件连续backup
 创建archive
 执行数据重装
 改变数据库日志登录状态
只有注册为root或informix的用户才能执行ontape。
2. 使用说明
用户可以在shell提示符下使用ontape -- 的到简单提示。
语法如下:
ontape { -a | -c | -l | -p | -r [-D Dbspace-list] | -s [-L archive_level] [-A database_list] [-B database_list] [-N database_list] [-U database_list] }
根据功能分类说明如下:
 改变日志记录(logging)的状态
ontape  [-s {-A|-B|-U}|-N ]  [数据库]
-s 选项初始化一个档案(archive)
-A 选项将指定数据库状态设置为与 ANSI兼容的日志记录方式
-B 选项将指定数据库状态设置为缓冲(buffer)的日志记录方式
-U 选项将指定数据库状态设置为非缓冲(unbuffer)的日志记录方式
-N 选项中止指定数据库的日志(logging)
 建立备份档案
首先说明备份级别,备份分为3级,它们是:
0 级 备份所有有用的页
1 级 备份所有上次0级备份后有变动的页
2 级 备份所有上次1级备份后有变动的页
0 级备份是基础,它备份恢复数据恢复时需要的所有页,假设数据库数据遭到完全的破坏,它也能恢复备份时的全部数据,但时间较长。1级备份在0级的基础上,它备份的内容较少,但需要的时间较少,2级备份又次之。将三种备份结合起来能达到较好效果。下面是一个建议的备份时间表,可根据自己的情况建立备份时间表。
星期日 0级备份
星期二、四 1级备份
星期一、三、五、六 2级备份
在做备份前应做好以下事情:
确保有足够的逻辑日志空间
保留一份 ONCONFIG 文件的拷贝
检验数据库一致性
确保数据库在正确的状态下(在线模式或静模式)
不做其他的管理事项
不使用后台方式(background mode)
在磁带上贴好标签
开始一次备份:
ontape  -s  [-L {0|1|2}]
-L 选项指定备份级别
 开始自动逻辑日志备份
ontape -a
本选项在一个逻辑日志文件满后自动备份
 连续的逻辑日志备份
ontape  -c
本选项开始一次连续的逻辑日志备份,使用CTRL-c 可中止
 恢复备份数据
有时需要恢复备份的数据,恢复有三种方式,即冷恢复(cold restore)、热恢复( warm restore)、混合恢复(mixed restore)。冷恢复在离线方式(off-line)恢复,热恢复在在线方式下(on-line)恢复,混合恢复则是先作冷恢复,再作热恢复。可以恢复全部数据,也可只恢复指定的数据空间:
ontape  -r  [-D [数据空间]]

#5


碰到长事务,应该是逻辑日志不够用了,建议增加逻辑日志个数,10个明显太少。
这是最简单的解决方法。
至于备份到null竟然不允许,有点怪,没碰到过。

#6


感谢大家的发言,希望与各位高手成为很好的朋友。后来发现对账速度慢的问题好象不是逻辑日志的问题,操作步骤如下:
1)将Informix应用数据库dbexport出来;
2)将应用数据库drop掉;
3)执行onmonitor修改逻辑日志文件小为25000(以前为7500);
4)执行Parameters->Initialize
5)重启机器,然后oninit
6)恢复备份的应用数据库
这时10个逻辑文件的占用率大多为0%,再运行对账程序,速度慢的问题依旧。
7)查看对账程序的源码,发现速度慢是因为其中的一个while循环,其中有一条select count(*) ......的sql语句,怀疑可能是因为表中没有建索引,造成对账时反复执行这条sql语句造成速度慢
8)在对账表中建立一个索引,索引中包括的字段为循环中sql语句中对应where查询条件部分涉及的字段
再对账时只用了几秒钟。问题就这样解决了。我分析主要原因可能不是逻辑文件的原因,是因为索引的原因。再次感谢大家。

#7


赞成 qdice007(小飞侠) 的说法,如果慢主要还是逻辑日志空间不够,逻辑日志空间对事务影响很大,所以不要轻易删除逻辑日志。而且逻辑日志是由数据库自动循环使用的,不存在满的说法,所谓满就是事务已经占据太多逻辑日志空间,已经达到吃水线了

#8


我们公司也有同样的问题,顶一下!

#9


该回复于2008-05-04 10:29:43被版主删除

#10


该回复于2008-05-04 10:42:22被版主删除

#1


将日志文件备份指向/dev/null试试。

备份以后就就应该不大了。

#2


日志备份已经指向/dev/null了。onconfig相关参数如下:
# Log Archive Tape Device
LTAPEDEV       /dev/null        # Log tape device path
LTAPEBLK       16               # Log tape block size(Kbytes)
LTAPESIZE      150000           # Max amount of data to put on log tape(Kbytes)
但执行ontape -a时,系统提示:
Logbackup failed - Log backup to device nul not allowed
Please label this tape as number 1 in the log tape sequence.
This tape contains the following logical logs:
   1(partial)
然后再用onstat -l查看逻辑日志时,问题依旧,十个逻辑日志有9个%used值为100%。

#3


应该没关系了,我都是这样做的。

#4


ontape -p 删除日志



ontape应用程序提供以下功能:
 申请逻辑日志backup
 启动逻辑日志文件连续backup
 创建archive
 执行数据重装
 改变数据库日志登录状态
只有注册为root或informix的用户才能执行ontape。
2. 使用说明
用户可以在shell提示符下使用ontape -- 的到简单提示。
语法如下:
ontape { -a | -c | -l | -p | -r [-D Dbspace-list] | -s [-L archive_level] [-A database_list] [-B database_list] [-N database_list] [-U database_list] }
根据功能分类说明如下:
 改变日志记录(logging)的状态
ontape  [-s {-A|-B|-U}|-N ]  [数据库]
-s 选项初始化一个档案(archive)
-A 选项将指定数据库状态设置为与 ANSI兼容的日志记录方式
-B 选项将指定数据库状态设置为缓冲(buffer)的日志记录方式
-U 选项将指定数据库状态设置为非缓冲(unbuffer)的日志记录方式
-N 选项中止指定数据库的日志(logging)
 建立备份档案
首先说明备份级别,备份分为3级,它们是:
0 级 备份所有有用的页
1 级 备份所有上次0级备份后有变动的页
2 级 备份所有上次1级备份后有变动的页
0 级备份是基础,它备份恢复数据恢复时需要的所有页,假设数据库数据遭到完全的破坏,它也能恢复备份时的全部数据,但时间较长。1级备份在0级的基础上,它备份的内容较少,但需要的时间较少,2级备份又次之。将三种备份结合起来能达到较好效果。下面是一个建议的备份时间表,可根据自己的情况建立备份时间表。
星期日 0级备份
星期二、四 1级备份
星期一、三、五、六 2级备份
在做备份前应做好以下事情:
确保有足够的逻辑日志空间
保留一份 ONCONFIG 文件的拷贝
检验数据库一致性
确保数据库在正确的状态下(在线模式或静模式)
不做其他的管理事项
不使用后台方式(background mode)
在磁带上贴好标签
开始一次备份:
ontape  -s  [-L {0|1|2}]
-L 选项指定备份级别
 开始自动逻辑日志备份
ontape -a
本选项在一个逻辑日志文件满后自动备份
 连续的逻辑日志备份
ontape  -c
本选项开始一次连续的逻辑日志备份,使用CTRL-c 可中止
 恢复备份数据
有时需要恢复备份的数据,恢复有三种方式,即冷恢复(cold restore)、热恢复( warm restore)、混合恢复(mixed restore)。冷恢复在离线方式(off-line)恢复,热恢复在在线方式下(on-line)恢复,混合恢复则是先作冷恢复,再作热恢复。可以恢复全部数据,也可只恢复指定的数据空间:
ontape  -r  [-D [数据空间]]

#5


碰到长事务,应该是逻辑日志不够用了,建议增加逻辑日志个数,10个明显太少。
这是最简单的解决方法。
至于备份到null竟然不允许,有点怪,没碰到过。

#6


感谢大家的发言,希望与各位高手成为很好的朋友。后来发现对账速度慢的问题好象不是逻辑日志的问题,操作步骤如下:
1)将Informix应用数据库dbexport出来;
2)将应用数据库drop掉;
3)执行onmonitor修改逻辑日志文件小为25000(以前为7500);
4)执行Parameters->Initialize
5)重启机器,然后oninit
6)恢复备份的应用数据库
这时10个逻辑文件的占用率大多为0%,再运行对账程序,速度慢的问题依旧。
7)查看对账程序的源码,发现速度慢是因为其中的一个while循环,其中有一条select count(*) ......的sql语句,怀疑可能是因为表中没有建索引,造成对账时反复执行这条sql语句造成速度慢
8)在对账表中建立一个索引,索引中包括的字段为循环中sql语句中对应where查询条件部分涉及的字段
再对账时只用了几秒钟。问题就这样解决了。我分析主要原因可能不是逻辑文件的原因,是因为索引的原因。再次感谢大家。

#7


赞成 qdice007(小飞侠) 的说法,如果慢主要还是逻辑日志空间不够,逻辑日志空间对事务影响很大,所以不要轻易删除逻辑日志。而且逻辑日志是由数据库自动循环使用的,不存在满的说法,所谓满就是事务已经占据太多逻辑日志空间,已经达到吃水线了

#8


我们公司也有同样的问题,顶一下!

#9


该回复于2008-05-04 10:29:43被版主删除

#10


该回复于2008-05-04 10:42:22被版主删除