您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Informix培训教材整理之系统维护技巧谈
Informix培训教材整理之系统维护技巧谈Informix是一种大型的数据库管理系统,具有先进的技术、性能与可靠性,在全球范围的各种应用中使用十分广泛,包括政府、金融保险、邮政电信、制造及零售等重要行业或领域。本文根据笔者在SCOUnix/Xenix上使用Informix-4GL与Informix-SQL的经验,简要介绍Informix系统维护中的几个较为特殊的问题及其处理方法。表文件的修复:Informix的数据库是指由若干张表所构成的集合,其中每一张表对应着两个文件,即数据文件(后缀为.dat)与索引文件(后缀为.idx)。当系统出现异常、死机、掉电或非正常关闭时,有时会使一些使用中的表文件未能正常关闭而出现毁损,当系统再次对这些表进行相关操作时,就会报告“不能检索下一条记录”、“不能删除记录”等错误信息。通常,数据文件是很少发生问题的。要判别数据文件是否正常,只需执行select*from〈table—name〉语句或类似的语句即可,但不能使用where、orderby等子句,以免利用到索引文件,目的就是纯粹从数据文件中依次读取数据。如果数据读取顺利且记录个数正确,表明该文件完好无损;反之,则有问题,通常只能用其数据备份来恢复。如果数据文件正确无误,那么就该检查相应的索引文件。Informix提供有一个实用程序bcheck,专门用来检查与修复索引文件,即依次比较数据文件与索引文件,倘若不一致,就询问是否删除和重建有问题的索引。bcheck有许多选项可供选用,其中-n和-y用于对所有的提问都回答“no”或“yes”,让系统自动进行一系列的操作。其语法如下:bcheck[选项]〈表文件名〉要检查表的索引文件,应先运行bcheck-n命令。如果一切正常,说明索引没有问题。一旦发现有错误报告(如有多少个错误数据记录指针、丢失了多少个数据记录指针或索引结点指针等),则再执行bcheck-y命令即可将其修复。Informix-SQL中的语句checktable〈表名〉与repairtable〈表名〉在运行时分别以选项-n与-y调用bcheck命令,功能一样,不同的只是使用表名而不是表文件名。如果索引文件没有相应的读写权限,或者没有正确指明其路径,在bcheck时会出现“无法打开索引文件”的信息。如果索引文件被删除或格式被破坏了,也有同样的信息。此时可从数据备份中将对应的索引文件拷贝回来,也可暂时创建一个字段与索引均与原表完全一致的新表并将其索引文件拷贝给原表,再运行bcheck-y命令修复。表空间的回收Informix对数据表的管理方式较为特殊,当数据量增加时,表所占用的磁盘空间随之增加;但数据记录被删除时,原先所占用的空间暂不释放,依然由该表所控制,作为日后增加记录时使用。为提高系统的性能及有关各表的查询速度,应及时回收这种“空闲”的磁盘空间。使用bcheck-s命令可回收索引文件的空间,其中-s选项的作用是重新估算索引文件的大小。要同时回收数据文件与索引文件的空间,可让DBMS(数据库管理系统)去做表结构的修改工作,但修改前后的表结构及有关权限要保证一样。可利用Informix-SQL达此目的,最为保险的做法是先给相应的表增加一个字段,再将该字段删除。也可利用altertable命令“欺骗”DBMS去修改表的结构,如altertableaamodify(bbsmallint),其中aa表的字段bb的类型本来就是smallint。表的迁移任何一个Informix数据库都有九个系统表,用于记录数据库的有关信息,其中系统表systables(用于描述数据库中的各表)中的字段dirpath指明各表文件的绝对路径或相对路径。Informix数据库的搜索路径一般由环境变量DBPATH来设定,系统根据DBPATH的正确设定即可找到相应的数据库及其各表。迁移Informix数据库表时(比如从Unix/Xenix的根文件系统迁移到分离的文件系统/u),只要重新设定DBPATH,通常系统即可正常运行。如果报告某些表找不到了(实际上这些表文件还在,且有关权限也对),问题就在于systables表中的dirpath字段值采用了绝对路径,此时要用update命令修正其值,最好改用相对路径,即直接改为表文件名。系统查询的优化Informix在执行查询(特别是多表查询)指令前,会利用其所提供的优化器(cost-basedoptimizer,基于成本的优化器),依据当时系统所记载的有关各表的相关信息,按照一定的判断法则进行分析并选择出一条最有效率的途径来执行。系统必须掌握各表的正确数据,才不至于做出错误的选择。但出于系统效率上的考虑,不可能随时修改记录各表最新状况的相关文件,否则会增加许多额外的输入/输出负担。因此,应定期执行这种信息的更新操作。在Informix数据库的系统表systables中有一字段nrows,专门用来记录各表的记录个数。优化器在运行法则判断时,各表的nrows值具有很高的参考价值。nrows的更新可通过如下命令来完成,即:updatestatistics[fortable〈table—name〉]其中,方括号[]中的子句是可选的,用于指定表名,以对该表进行更新;否则,将对数据库中的各表进行全部更新。一一Informix数据库安全性informix动态服务器提供两个级别的访问特权,来保证数据库的安全性。数据库特权控制对数据库的访问和在数据库上创建表和索索引的权力。表的特权指定用户在特定的表上所能进行的操作。informix动态服务器支持表级的修改,插入和删除的安全性,同时增强了列级的更新和查询的安全性。分离特权语句用于向用户授予适当的访问基级别的特权,或回收特权。由于informx安全性是在用户级别上的,因此,不需要进行分离的数据库登录。存储过程通过建立他们自己的,有别于数据库的许可权限而提供了附加的安全机制。存储过程的所有者向用户授予执行该存储过程的权限,允许用户执行该存储过程中所有的SQL操作,但对其他的数据库访问加以限制。通过使用存储过程来限制用户执行某些用户执行某些数据库的操作,数据库管理员可以提高系统的安全性安全审计INFORMIX动态服务器提供的安全审计功能对用来操作的每一个数据库对象提供跟踪和操作记录。这一功能符合“美国国家计算机安全中心”提出的C2级安全要求模型。借助于INFORMIX动态服务器,你可以对系统中用户的活动进行选择性监控。安全审计的界面是由命令行驱动的,或是有参数调节控制的,它允许你指定对某一特定用户的特定活动进行监控。Informix数据一致性如果说高可用性能保证系统级的完整性,那么数据的一致性是在事务级保证完整性。INFORMIX动态服务器通过事务日志和内部一致性检查、创建和加强封锁过程、隔离级别和业务规则来保证数据的一致性。事务日志如果一个操作不能完成,则已经完成的那部分事务必须从数据库中清除,以保持数据的一致性。为了清楚部分完成的事务,INFORMIX动态服务器在逻辑日志中对所有事务的历史记录进行维护,并以这些事务记录作为依据,将数据库恢复到事务之前的状态。内部一致性检查内部一致性检查为提醒管理员数据或系统的不一致状态而专门设计。INFORMIX动态服务器包含一个数据级的检查机制,它能够发现由于硬件或操作系统故障而引起的数据不一致。如果发现了不一致,该内部机制就自动向INFORMIX动态服务器消息日志发消息。为了更好地确定不一致的原因,INFORMIX动态服务器管理员可以指导用户来设置一致性检查环境变量,这些变量产生诊断结果(例如,在不一致发生的共享内存中的内容),来帮助确定不一致发生的原因。封锁和处理的独立性为了保持数据的一致性,所需的另一个重要的功能是封锁过程和处理的独立性。这些安全性措施保护当前正在被访问或修改的数据不会被其它用户更改。封锁数据库服务器引入封锁机制来防止错误的发生。锁是一个程序加在数据片断上的声明或限制。数据库服务器保证只要数据是被封锁的,其它任何数据库服务器进程都不能对其进行修改。当另一数据库服务器程序要求对该数据库进行修改时,数据库服务器使该程序要么等待,要么返回一个错误。INFORMIX动态服务器还能防止死锁的发生。死锁是两个用户都封锁着另一个用户所等待得数据。例如,用户A封锁了一个元组,并且在用户A访问B所封锁的数据之前不会将其释放。INFORMIX动态服务器能立即检测到死锁的发生,并向第二个程序发出出错消息,以防止死锁状态的出现。一个表或事务的吞吐量会受封锁策略的影响。使用排它锁对数据进行访问的应用会发现其它的数据库服务器进程都在花时间等待对数据进行访问。因此,INFORMIX动态服务器提供了几个不同级别的封锁。数据库服务器可以在单个记录、页面、表和数据库的级别上加锁。在创建表和改变表结构时,可以指定记录和页面级别的封锁。在用户应用中可以指定表和数据库级别的封锁。隔离级别隔离级别是读操作独立于其它并发数据库服务进程的程度;其它进程可以对你正在读的记录进行什么修改,以及你可以对其它进程正在读或修改的哪些记录进行读操作。隔离级别只能影响读操作,它们不作用于其它的语句,如插入,删除,更新等。INFORMIX动态服务器有四个隔离级别:脏读、提交读、游标的稳定性、以及重复读。脏读是隔离级别中最简单的一个,它实际上根本没有提供任何独立性。当一个程序使用脏读来访问数据时,它不加锁。对于脏读,用户可以读任何数据,包括以提交的未提交的。提交读保证INFORMIX动态服务器只能读提交给数据库的记录。在对记录进行访问之前,数据库服务器检查是否有更新进程给该记录加了锁。如果没有加锁,数据库服务器就对该数据进行访问。提交读保证数据库服务器不会读未提交的数据,因为在作了修改而又没有提交的记录上加了锁。下一个隔离级别是游标的稳定性。使用游标的稳定性时,数据库服务器在所读的最新记录上加上锁。每次仅对一个记录加锁;每当读新的记录时,就将原来的锁释放。这个孤立级别保证程序在读的当前的记录不会被改变。重复读保证在读操作过程中,所得到的结果与在该事务中其它时刻得到的结果是一致的。重复读不仅在所读的记录上加共享锁,而且还阻止其它用户违反数据库的读锁标准向数据库中增加记录或更新记录。业务规则业务规则能增强字段级的数据一致性,这些规则指定数据可能的值、列的缺省值,以及列与列之间的关系。业务规则必须由对数据进行访问和操作的应用来限定。但是,INFORMIX动态服务器不依赖于应用来实现这些规则。实际上,INFORMIX动态服务器可以独立实现这些规则。责任的集中减轻了用户应用的负担,并保证了业务规则的继承性。INFORMIX动态服务器支持完整性约束、存储过程和触发器,从而保证业务规则。完整性约束INFORMIX支持ANSISQL的完整性约束,保证信息不会被不当地删除,插入的数据满足字段的特殊要求。INFORMIX动态服务器提供两种类型的完整性约束:参照完整性和实体完整性。参照完整性允许用户定义和保证字段之间的关系。例如,INFORMIX动态服务器的参照完整性可以保证,对于主表中有关的一个实体的信息,如果在子表中存在相应的信息的话,那么主表信息不会被删除。这就保证不会在某客户的订单存在的情况下将该客户删除。实体完整性为特定字段规定合法取值范围。这样的检查允许DBA对所允许的值的范围作出规定。缺省值允许用户指定符合字段数据类型的任何智值作为缺省值。存储过程存储过程是以命名过程的形式存储在数据库中的SQL命令和编程语句,以保证常用操作的一致实现。存储过程在数据库中,而不是在应用程序中对常用的优化过的应用例程进行维护。存储过程减少数据库操作所需要的网络流量。因为存储过程可在一个命令中处理多个任务(如插入、更新和删除)。在处理请求之后,存储过程仅返回满足条件的结果,而不是每一个查询结果的集合。触发器触发器是唤醒存储过程的另一种方法。与应用程序调用存储过程来实现业务规则的方法不同,触发器可以被定义为:在需要进行插入、删除、和更新的时候,启动数据库服务器自动执行存储过程(或SQL语句)。由于触发器是存储在系统数据字
本文标题:Informix培训教材整理之系统维护技巧谈
链接地址:https://www.777doc.com/doc-3974289 .html