文档库 最新最全的文档下载
当前位置:文档库 › informix

informix


问题:不能执行onmonitor
[root@tonykorn97 ~]# su - informix
[informix@tonykorn97 ~]$ onmonitor
Termcap entry too long
Too many tc= indirections

Program stopped at "tb4_main.4gl", line number 71.
FORMS statement error number -1170.
The type of your terminal is unknown to the system.





原因:需要执行:
export TERMINFO=/home/informix/etc/typetab
export TERMCAP=$INFORMIXDIR/etc/termcap

但是此时运行onmonit的时候出现:
Please enter the output filename and press Return >>
Display all Status menu screens to a file.
不能用键盘上的左右键操作,需要用快捷键操作。

修改/home/informix/.bashrc在里面增加
export TERMINFO=/home/informix/etc/typetab
export TERMCAP=/home/informix/etc/termcap
后正常。

------------------------------------------------------------------------------
Informix数据库dbexport后用dbimport导入时出现长事务错误问题的解决办法。

Informix数据库,在进行新老平台的数据库迁移时,先用dbexport命令导出老平台的数据库,
dbexport smpdb(数据库名) -o /tempsapce/ (导出路径)
然后用dbimport smpdb -c -d workdbs -i /tempspace/smpdb.exp -l buffered 命令导入时,
执行一段时间后,出现以下的错误提示:
458 - Long transaction aborted.
101 - ISAM error: file is not open.
原因分析:观察到每次都是执行到相同的一张表时候出现这样的错误,而且根据错误提示,
是出现了长事务所以导致导入过程中断。系统出现长事务是由于可用的逻辑日志不能满足一个事务的需要,
由于该表的数据量都非常大,记录条数有好几百万,所以在导入这样的大表时,系统定义的逻辑日志不能满足该事务的需要,
所以就出现了以上的错误。
避免这一情况的常用方法是:关闭数据库日志记录,或增加逻辑日志以允许较长的事务通过。
但在本问题中,如果要通过增加逻辑日志的办法来解决显然是不现实的,所以我们通过在数据库无日志方式下导入数据、
导入完成之后再改变数据库的日志状态的方法来解决。
解决办法:
在无日志方式下导入数据:dbimport smpdb(数据库名) -c -d worddbs(数据空间名) -i /tempspace/smpdb.exp,
然后执行ontape -s -B smpdb来给数据库增加缓冲类型日志,
最后执行onmonitor命令查看smpdb的日志状态是否为B,如果是,则正确。

------------------------------------------------------------------------------

什么是逻辑日志
日志是记录数据库操作的。包括物理日志、逻辑日志。物理日志记录数据库物理变化,即变化的数据信息,
而逻辑设备记录逻辑的变化,比如insert, update等动作,但不是记录具体数据,那个由物理日志完成。

逻辑日志的类型

可以用informix的日志类型来理解逻辑日志:无

日志, 无buffer日志, 有buffer日志, asii日志

无日志:不记录日志,此时当然也不支持事务(可以在大事务时,临时切换到无日志状态以防止长事务发生。)
无buffer日志:也并不是每个操作都直接写到磁盘,而是每个事务完成后马上写。
buffer日志:一般会在buffer满了后才写到磁盘
assii日志:和无buffer处理相似
各日志间的切换命令:

逻辑日志的备份方式

先说一下备份级别,也同样用informix的概念来理解
备份级别分为 0, 1, 2
0:完全备份
1:自上一次完全备份,进行增量
2:自上一次增量进行增量

备份方式有两种:自动、连续

所谓自动并不是想像中的自动,它运行一次后会结束,这样就要有脚本或人工定时去备份逻辑日志,不然会被填满。
可以用命令:ontape -a 来切换到自动备份

而连续才是想像中自动的意思,他不会停止,只要日志满了就会去备份。通常如果不想去费心思管理逻辑日志,可以设置为连续。
可以用命令:ontape -c 来切换到连续备份

informix中逻辑日志的工作流程

informix逻辑日志一般有多个。建立多个日志的原因我想是考虑到效率。当多个进程需要记录日志时,可以同时向多个日志文件中写。
在informix配置文件中logfiles指定逻辑日志文件的个数(最少为3个,最大为X个)。logsize指定每个逻辑日志文件的大小。
(总逻辑日志空间为:logsize*logfiles) 这里的配置只在informix实例初始化时才起作用,
即oninit -i 。当然在使用过程中如果有需求要改变逻辑日志的个数或大小不能通过oninit -i 来实现。
onparams可以对逻辑日志文件进行动态的添加,更改大小,删除,移动等操作。

buffer中逻辑日志什么时候写入日志文件

上面,说到我们会建立多个日志文件用来记录逻辑日志,但并不是每产生一次操作记录就向日志文件中写,那样io太多。
而是在记录在buffer中。当达到一定限度时再写入日志文件,那么什么时候buffer会写入文件中呢?
1. buffer满了 用来记录逻辑日志的buffer的大小由onconfig文件中的logbuff决定,当buffer写满后会写入日志文件。
这儿可以看到设置合适的 logbuff大小还是对效果有影响的。如果过小,buffer很快被写满,就要做一次io, 写入日志文件。
这样会造成过多的IO。如果过大,常时间buffer中的数据不写入日志文件,如果有意外发生,造成较大的不可恢复。
同时点用太多内存有可能影响整体性能。

逻辑日志写满了怎么办?

当逻辑日志写满后,数据库就会被塞住,而不能进行任何操作。所以不能让逻辑日志写满。那么就要保证逻辑日志文件可以循环使用。
下面是一种方案:当

某逻辑日志文件写满后,将逻辑日志进行备份,然后再把这个日志文件设备为可用。
informix也是这么做的,系统运行时,可以让日志文件写满后进行连续备份,这样就可以循环使用日志文件了。
那么备份到哪呢?在onconfig文件中,LTAPEDEV指定备份的磁带,我现在设置成/dev/null 其实是不备份的,
但让informix以为已经备份,以至系统可以向下正常运行。当然,如果我指定到备份设备,就可以备份了。
如果把备份设备指定到/dev/null ,那么备份方式将自动为连续备份。
如果把备份设备指到了具体的磁带机,那么可以用ontape -c来设置备份方式为连续备份

下面一段是关于日志状态的说明:
先对下面的一段进行一些说明,number一共到9说明有9个逻辑日志,size为12500说明生个逻辑日志文件大小10M。
used当然是已经使用过了多少。
可以看到大部已经使用完。不用害怕,这是很正常的。可以看到%used为100%的flags为U-B U虽然说明已经满了,
但B却说明了已经备份过了,可以进行循环使用。如果当前使用的日志文件满了后,会自动切换到下一个U-B上。
第8个日志文件flags为U---C-L 说明这个是当前正在使用的日志文件。使用onmode -l可以切换到下一个日志文件,
切换后再用onstat -l查看,可以看到第9个日志文件变为U---C状态,说明已经在使用下一个了,而它的%usered则为0。
也验证了U-B状态会循环使用的说明。
还有一点要注意,即使在当前使用的日志后面有没有满的日志,informix也不会跳过当前使用的日志去写入下面的日志文件,
只有当前日志满了后才切换到下一个(或用onmode -l强制转到下一个)

address number flags uniqid begin size used %used
8352f680 1 U-B---- 11544 1061e7 12500 12500 100.00%
8352f69c 2 U-B---- 11545 1092bb 12500 12500 100.00%
8352f6b8 3 U-B---- 11546 10c38f 12500 12500 100.00%
8352f6d4 4 U-B---- 11547 10f463 12500 12500 100.00%
8352f6f0 5 U-B---- 11548 112537 12500 12500 100.00%
8352f70c 6 U-B---- 11549 11560b 12500 12500 100.00%
8352f728 7 U-B---- 11550 6135e6 12500 12500 100.00%
8352f744 8 U---C-L 11551 6166ba 12500 10616 84.93%
8352f760 9 U-B---- 11530 61978e 12500 12500 100.00%
逻辑日志文件的状态显示包括两个区域:
number:标识单个逻辑日志文件的logid。
flags:标明相应逻辑日志文件的状态。flags状态标志有七个位置,但仅第一,三,五,七位置
有标志值。
第一个位置上,可能出现A,F,U三个标志中的一个;
第三个位置上,标志B可能出现也可能也可能不出现;
第五个位置上

,可能为标志C也可能为空;
第七个位置上,可能是标志L也可能为空;

位置 标志 含义
1 A Added,新增加的逻辑日志文件,仅当建立一个(根dbspace的)0级archive
后才能使用。
1 F Free,该逻辑日志文件空闲并可以使用。
1 U Used,该逻辑日志文件正在使用而未释放,OnLine恢复时还需要该文件(回
滚一个事务或找到上一个检查点记录)
3 B Backed-UP,该逻辑日志文件已备份。
5 C Current,该逻辑日志文件是当前正在填充的逻辑日志文件。
7 L Last,该逻辑日志文件包含有最近一次检查点记录,在新的检查点记录写入
另一个日志文件之前,该文件及后面的逻辑日志文件不能释放。


所有状态标志的可能组合
状态标志 逻辑日志文件的状态
A------ 上次0级archive以来新增加的逻辑日志文件,暂时不能使用
F------ 空闲
U------ 正在使用,还没有备份
U-B---- 日志已备份,恢复时还需要
U-B---L 日志已备份,包含上次检查点记录,恢复时还需要此文件
U---C-- 当前日志文件
U---C-L 当前日志文件,并包含上次检查点记录


长事务

先说一下引起长事务的原因,一个逻辑日志文件中包括一个没有结束的事务时,这个日志文件是不能被备份的。
如果一个事务特别长,那么就有可能把所有日志文件都写满。如果所有日志被写满是很麻烦的。
informix会控制当日志写入量达到一定程度时,就报告这个事务为长事务,然后进行回滚,以防止日志被写满。

这儿就有两个高水位线的概念,在onconfig文件中HTXHWM 这是一个百分比,当已经使用日志量达到这个总日志量的这个百分比时,
就报告长事务。开始回滚,期间别的操作还可以进行(写入日志),但当达到另一个水准线时LTXEHWM informix会停止其它进程的操作,
用所有精力进行回滚。(当达到这个水平时,如果再接受别的进程写入日志,有可能不能完成回滚就已经填满所有日志。
回滚也是要写入大量日志的!)

上面就是长事务的原因。所以进行比较大的事务操作时,可以暂时切换到无日志状态。如果不能即时关闭日志记录,
可以把日志文件大小加大,都有可能解决上面的问题。

注意:长日志是指发生在一个日志文件不能备份的情况下,所以增加日志文件个数并不管用,只有适当增加每个日志文件大小


------------------------------------------------------------------------------

3.利用onmonitor工具置应用数据库为no logged 状态.
onmonitor->Logical-Logs->Database->选择要修改的数据库->Press F3 or CTRL-B确认->选择No Logging项->Press F3 or CTRL-B确认

.
此时数据库就被修改称不带日志状态. 然后执行ontape -s -B smpdb来给数据库增加缓冲类型日志,
最后执行onmonitor命令查看smpdb的日志状态是否为B,如果是,则正确。


------------------------------------------------------------------------------
UNIX安装网卡驱动
mkdir tmp cp GBE.VOL /tmp/VOL.000.000
执行custom选择安装网卡驱动
netconfig配置tcp/ip
------------------------------------------------------------------------------
onspaces -a rootdbs -p /home/informix/dbs/rootdbs1 -o 0 -s 204800
动态加chunk
------------------------------------------------------------------------------
route print

要显示 IP 路由表中以 10. 开始的路由,请键入:

route print 10.*

要添加默认网关地址为 192.168.12.1 的默认路由,请键入:

route add 0.0.0.0 mask 0.0.0.0 192.168.12.1

要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的路由,请键入:

route add 10.41.0.0 mask 255.255.0.0 10.27.0.1

要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的永久路由,请键入:

route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1

要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,跃点数为 7 的路由,请键入:

route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7

要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,接口索引为 0x3 的路由,请键入:

route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0x3

要删除目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由,请键入:

route delete 10.41.0.0 mask 255.255.0.0

要删除 IP 路由表中以 10. 开始的所有路由,请键入:

route delete 10.*

要将目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由的下一个跃点地址由 10.27.0.1 更改为 10.27.0.25,请键入:

route change 10.41.0.0 mask 255.255.0.0 10.27.0.25



相关文档