互联网服务数据库注意事项

如何监控、维护Informix数据库空间?

本文对如何监控、维护Informix数据库空间的方法及注意事项作了一个简单的小结,以方便广大Informix DBA在日常工作中处理Informix数据库空间的问题。

1、如何监控Informix数据库空间的异常离线?

1.1、在相关的chunk进行I/O操作时如果相应的Chunk有问题,数据库会报相应的I/O错误,并将CHUNK置为“PD”;另外当数据库启动或是进行数据库备份时,Informix数据库会对所有空间进行例行的健康检查“sanity check”, 如果相应的chunk有错误,Informix数据Informix online.log中输出如下的错误信息:

08:39:58 IBM Informix Dynamic Server Version 9.40.FC4
08:39:58 Who: Session(1, informix@HBDB84_1, 0, c000000000b63028)
Thread(15, main_loop(), c000000000b21028, 3)
File: rspartn.c Line: 7747
08:39:58 Results: Chunk 117 is being taken OFFLINE.
08:39:58 Action: Restore chunk from archive.
08:39:58 stack trace for pid 9747 written to /tmp/af.3f7f15e
08:39:58 See Also: /tmp/af.3f7f15e
08:39:59 chunk failed sanity check
08:39:59 I/O error, Primary Chunk '/opt/informix/chunks/npmhis2008
_data/npmdb_npmchk_07' -- Offline (sanity)

1.2、“Oncheck –pr ” 输出
当数据库停止后,数据库的所有状态信息都会写到相应的Informix保留页中,此时离线状态下运行oncheck -pr可以准确的看到相关已经被置为"offline"的信息
“oncheck -pr |grep offline” 的输出:

Chunk number 73
Flags 0x10020 Chunk is offline
Chunk path /opt/informix/chknew/npm/hpmchk1_b
Chunk offset 5 (p)
Chunk size 10000000 (p)
Number of free pages 6723197
DBspace number 38

1.3、“Onstat –d ” 输出
当Chunk 离线后,“onstat -d”输出的"free"栏中的值通常是0,有时会被误认为是空间满而导致不可用了,其实是chunk异常PD后导致。

“onstat -d |grep PD” 的输出:
Chunks
address chunk/dbs offset size free bpages flags pathname
c00000020a8434f0 73 38 5 10000000 0 PD-B /opt/informix/chknew/npm/hpmchk1_b

1.4、相应的堆栈函数中我们可以看到“sane_chopen”,“afwarn_interface ”函数,表示对chunk进行sanity check,发现了错误

相应的堆栈输出:
( 0) legacy_hp_afstack
( 1) afstack
( 2) afhandler
( 3) afwarn_interface
( 4) sane_chopen
( 5) chopen_util
( 6) chopen
( 7) rscon
( 8) aud_iscon
( 9) chgstat
(10) onspace
(11) startup
(12) resume

2、如何检查确认空间离线的原因?

Chunk/Dbspace离线的原因多种多样,在数据库DBA寻找Informix 技术支持工程之前,应该排除诸如:物理磁盘设备损坏、硬件设备状态异常、操作系统异常导致的Informix 空间异常的情况。

2.1、检查相应的硬件日志、操作系统日志看是否有磁盘或硬件报错的信息;
2.2、对相应的磁盘物理设备进行硬件级检查,排除磁盘物理损坏的可能;
2.3、使用操作系统命令对相应的磁盘设备进行I/O读取检查

例如:dd if=/opt/informix/chknew/npm/hpmchk1_b of=/dev/null count=20000

2.4、检查相应物理磁盘设备的属组是否为"informix:informix 660“

例如:ls -lt /opt/informix/chknew/npm/hpmchk1_b

通过上述步骤的逐一排查,将会定位空间离线的原因,根据不同的原因我们将采取不同的方法进行修复

3、如何解决、修复空间离线问题

3.1、如果是磁盘物理损坏导致了数据丢失或损坏,最终导致的Informix数据库空间异常离线,需通过磁盘修复和数据库恢复进行修复或是强行将坏掉的空间从数据库删除修复;

3.2、如果是LV切换或是LV状态异常导致的Informix数据库空间离线,而磁盘硬件未有任何的损坏,则DBA可以通过如下命令自行修复离线的空间;

例如:onspaces -s -p -o -O -y

3.3、如果是相关的属组权限的问题,修改为正确的属组和权限(客户在进行相应的磁盘维护和划分时,有时会改变 相应磁盘空间的属组和权限导致Informix数据库的离线);

例如:
chown informix:informix /opt/informix/chknew/npm/hpmchk1_b
chmod 660 /opt/informix/chknew/npm/hpmchk1_b

3.4、如果磁盘修复后,数据并未损坏,DD操作也没有报错,备份恢复时间过长,此时可以考虑需求Informix技术支持使用内部工具尝试修复,但前提是内部工具存在风险
,客户一定要有备份,以备不时之需;

4、删除废弃空间的方法

Informix 空间(Chunk/Dbspace)里边存放着客户重要的生产数据和索引,非到万不得已,不建议进行空间删除操作,关键的数据库空间例如“rootdbspace”、“physical log dbspace” 和“logical log dbspace” 不能删除。进行删除操作前最好做好相关的备份,以便需要时进行恢复。

4.1、Informix不允许删除非空的数据库空间,所谓的非空并不是指什么信息都没有,而是指除了系统所需的53页外不允许有其他的页被使用,如果数据库空间(rootdbspace除外)仅有53页被使用,则认为是“空”可以通过“onspaces -d”删除;

例如:
/home/informix/940:oncheck -pe testdbs
DBspace Usage Report: testdbs Owner: informix Created: 10/13/2009
Chunk Pathname Size Used Free
2 ./dsk/gydbs 1000 53 947

Description Offset Size
------------------------------------------------------------- -------- --------
RESERVED PAGES 0 2
CHUNK FREELIST PAGE 2 1
testdbs:'informix'.TBLSpace 3 50
FREE 53 947
Total Used: 53
Total Free: 947

4.2、临时表空间可以直接通过“onspaces -d”删除;
参与4

4同行回答

aestartllaestartll运维工程师安能
哪去存起来 以后应该能用上显示全部
哪去存起来 以后应该能用上收起
电信设备制造商 · 2012-04-18
浏览1084
lwmailtlwmailt网络管理员北京华泰
值得收藏!谢谢显示全部
值得收藏!谢谢收起
电信设备制造商 · 2012-03-23
浏览1078
sikoleesikolee系统管理员sino
谢谢LZ,收集了显示全部
谢谢LZ,收集了收起
政府机关 · 2012-03-06
浏览1055
filvyofilvyo系统工程师B
受教了,顶~显示全部
受教了,顶~收起
互联网服务 · 2011-10-09
浏览1113

提问者

saigon
系统运维工程师China
擅长领域: 服务器UnixAIX

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2011-07-18
  • 关注会员:0 人
  • 问题浏览:4689
  • 最近回答:2012-04-18
  • X社区推广