
Informix是一种大型的数据库管理系统,具备先进的技术、性能和可靠性,在全球范围的各种应用中使用十分广泛,包括政府、金融保险、邮政电信、制造及零售等重要行业或领域。本文根据笔者在SCO Unix/Xenix上使用 Informix-4GL 和Informix-SQL的经验,简要介绍Informix系统维护中的几个较为特别的问题及其处理方法。
表文档的修复
Informix的数据库是指由若干张表所构成的集合,其中每一张表对应着两个文档,即数据文档(后缀为.dat)和索引文档(后缀为.idx)。当系统出现异常、死机、掉电或非正常关闭时,有时会使一些使用中的表文档未能正常关闭而出现毁损,当系统再次对这些表进行相关操作时,就会报告“不能检索下一条记录”、“不能删除记录”等错误信息。
通常,数据文档是很少发生问题的。要判别数据文档是否正常,只需执行select * from 〈table?name〉语句或类似的语句即可, 但不能使用where、order by等子句,以免利用到索引文档, 目的就是纯粹从数据文档中依次读取数据。
假如数据读取顺利且记录个数正确,表明该文档完好无损;反之,则有问题,通常只能用其数据备份来恢复。
假如数据文档正确无误,那么就该检查相应的索引文档。Informix提供有一个实用程式bcheck,专门用来检查和修复
索引文档,即依次比较数据文档和索引文档,倘若不一致,就询问是否删除和重建有问题的索引。bcheck有许多选项可供选用,其中-n和-y用于对任何的提问都回答“no”或“yes”,让系统自动进行一系列的操作。其语法如下:
bcheck [选项] 〈表文档名〉
要检查表的索引文档,应先运行bcheck -n命令。假如一切正常, 说明索引没有问题。一旦发现有错误报告(如有多少个错误数据记录指针、丢失了多少个数据记录指针或索引结点指针等),则再执行bcheck -y 命令即可将其修复。
Informix-SQL中的语句check table 〈表名〉和repair table 〈表名〉在运行时分别以选项-n和-y调用bcheck命令,
功能相同,不同的只是使用表名而不是表文档名。
假如索引文档没有相应的读写权限, 或没有正确指明其路径, 在bcheck时会出现“无法打开索引文档”的信息。假如索引文档被删除或格式被破坏了,也有同样的信息。此时可从数据备份中将对应的索引文档拷贝回来,也可暂时创建一个字段和索引均和原表完全一致的新表并将其索引文档拷贝给原表,再运行bcheck -y命令修复。
表空间的回收
Informix对数据表的管理方式较为特别,当数据量增加时,表所占用的磁盘空间随之增加;但数据记录被删除时,原先所占用的空间暂不释放,依然由该表所控制,作为日后增加记录时使用。为提高系统的性能及有关各表的查询速度,应及时回收这种“空闲”的磁盘空间。
使用bcheck -s命令可回收索引文档的空间,其中-s 选项的作用是重新估算索引文档的大小。要同时回收数据文档和索引文档的空间,可让DBMS(数据库管理系统)去做表结构的修改工作,但修改前后的表结构及有关权限要确保相同。可利用Informix-SQL达此目的,最为保险的做法是先给相应的表增加一个字段,再将该字段删除。也可利用alter table 命令“欺骗”DBMS去修改表的结构,如alter table aa modify(bb smallint),其中aa表的字段bb的类型本来就是smallint。
共2页: 上一页 [1] [2] 下一页
[ 1][ 2]
|