Informix培训教材整理之系统维护技巧谈.docx
- 文档编号:10007801
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:24
- 大小:33.53KB
Informix培训教材整理之系统维护技巧谈.docx
《Informix培训教材整理之系统维护技巧谈.docx》由会员分享,可在线阅读,更多相关《Informix培训教材整理之系统维护技巧谈.docx(24页珍藏版)》请在冰豆网上搜索。
Informix培训教材整理之系统维护技巧谈
Informix培训教材整理之系统维护技巧谈
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。
表的迁移
任何一个Informix数据库都有九个系统表,用于记录数据库的有关信息,其中系统表systables(用于描述数据库中的各表)中的字段dirpath指明各表文件的绝对路径或相对路径。
Informix数据库的搜索路径一般由环境变量DBPATH来设定,系统根据DBPATH的正确设定即可找到相应的数据库及其各表。
迁移Informix数据库表时(比如从Unix/Xenix的根文件系统迁移到分离的文件系统/u),只要重新设定DBPATH,通常系统即可正常运行。
如果报告某些表找不到了(实际上这些表文件还在,且有关权限也对),问题就在于systables
表中的dirpath字段值采用了绝对路径,
此时要用update命令修正其值,最好改用相对路径,即直接改为表文件名。
系统查询的优化
Informix在执行查询(特别是多表查询)指令前,会利用其所提供的优化器(cost-based
optimizer,基于成本的优化器),依据当时系统所记载的有关各表的相关信息,按照一定的判断法则进行分析并选择出一条最有效率的途径来执行。
系统必须掌握各表的正确数据,才不至于做出错误的选择。
但出于系统效率上的考虑,不可能随时修改记录各表最新状况的相关文件,否则会增加许多额外的输入/输出负担。
因此,
应定期执行这种信息的更新操作。
在Informix数据库的系统表systables中有一字段nrows,专门用来记录各表的记录个数。
优化器在运行法则判断时,各表的nrows
值具有很高的参考价值。
nrows的更新可通过如下命令来完成,即:
update
statistics [for table 〈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支持ANSI SQL的完整性约束,保证信息不会被不当地删除,插入的数据满足字段的特殊要求。
INFORMIX动态服务器提供两种类型的完整性约束:
参照完整性和实体完整性。
参照完整性允许用户定义和保证字段之间的关系。
例如,INFORMIX动态服务器的参照完整性可以保证,对于主表中有关的一个实体的信息,如果在子表中存在相应的信息的话,那么主表信息不会被删除。
这就保证不会在某客户的订单存在的情况下将该客户删除。
实体完整性为特定字段规定合法取值范围。
这样的检查允许DBA对所允许的值的范围作出规定。
缺省值允许用户指定符合字段数据类型的任何智值作为缺省值。
存储过程 存储过程是以命名过程的形式存储在数据库中的SQL命令和编程语句,以保证常用操作的一致实现。
存储过程在数据库中,而不是在应用程序中对常用的优化过的应用例程进行维护。
存储过程减少数据库操作所需要的网络流量。
因为存储过程可在一个命令中处理多个任务(如插入、更新和删除)。
在处理请求之后,存储过程仅返回满足条件的结果,而不是每一个查询结果的集合。
触发器
触发器是唤醒存储过程的另一种方法。
与应用程序调用存储过程来实现业务规则的方法不同,触发器可以被定义为:
在需要进行插入、删除、和更新的时候,启动数据库服务器自动执行存储过程(或SQL语句)。
由于触发器是存储在系统数据字典中的,因此不需要应用程序来完成维护触发器代码。
同样,由于无法绕过触发器,所以跨所有事务的完整性约束也得到了保证。
Informix安全审计
什么是安全审计
安全审计可以创建用户在数据库中活动的事件记录,通过这些记录可检查不平常或可疑的数据库活动。
可以记录的事件有:
成功或者失败的操作。
你可以只记录成功的操作,或者只记录失败的操作,或者两种都记录。
online系统的连接。
你可以记录与online系统建立连接的情况,包括是谁建立了这个连接,在什么时刻
系统和数据库管理事件。
任何管理事件例如增加dbspaces和chunks,归档,赋权,回收权限,或者当前的事务日志都可以被审计。
数据库和表的操作。
select,insert,update,或者delete语句都可以被审计,但是不允许只对某一个表的操作进行审计。
审计是如何工作的
管理员首先要创建audit masks(审计掩码),一个audit masks就像一个过滤器,检查用户的活动是否应该被审计。
audit masks存储在sysmaster数据库的sysaudit表中。
如果执行数据库操作,而这个操作在被审计的范围内,online会自动在审计日志中插入一条记录。
审计日志是一个UNIX文件,其中保存有审计的记录。
这个文件有可能会变得很大,主要看audit masks中包括的操作的数量和操作的类型。
对每一个数据库用户可以有单独的user mask(用户掩码)。
另外,管理员可以设置一个默认掩码,这样没有设置user mask的用户就可以使用这个默认的掩码。
审计掩码
审计掩码告诉online什么事件需要被审计。
审计掩码的种类如下:
单独的审计掩码(indiviual masks)。
单独审计掩码是为每一个用户创建的掩码,其作用是对每一个用户的活动进行审计的。
默认的用户掩码(_default masks)。
默认的用户掩码会被用在任何没有单独设置掩码的用户上。
必须的用户掩码(_require masks)。
必须的用户掩码会忽略单独用户掩码和默认用户掩码中的内容。
任何在_require用户掩码中设置的事件都会被审计,而不管用户的单独掩码中是否设置了这些事件。
排它用户掩码(_exclusive masks)。
排它用户掩码同样会覆盖单独的用户掩码和默认用户掩码。
其中包含的事件不会被审计,即使这些事件存在于单独的用户掩码和默认用户掩码中。
这些事件不会覆盖_require掩码中的事件。
你也许想要对有经验的用户很少事件进行审计,对没有经验的用户更多的事件进行审计。
为了达到这种目的,为有经验的用户创建一个单独审计掩码其中包括较少的事件。
为所有的其它用户创建一个默认审计掩码,其中列出更全面的审计事件。
管理员必须创建所有的掩码;_default,_require,_exclude和单独用户掩码。
审计角色
在7.10.UD1之后,审计角色可以在用户之间实现独立的审计功能。
数据库系统安全官员(DBSSO)的责任是维护审计掩码。
审计分析官员(AAO)分析审计记录,发现安全问题。
为了更高的安全性,DBSSO,AAO,和ONLINE管理员应该由不同的人员来担当。
要设置基于角色的存取控制,ONLINE系统管理员应该设置两个环境变量。
$DBSSOOWNER环境变量应该在DBSSO的登录脚本之中。
$AAOWNER环境变量应该设置在AAO的登录脚本中。
如果设置了这两个变量:
只有AAO可以打开或者关闭审计功能。
只有DBSSO可以使用onaudit工具来维护审计掩码。
设置安全审计
设置安全审计的步骤:
1.打开安全审计。
2.设置审计参数。
3.创建审计掩码和审计事件。
打开审计功能:
有两种方法可以打开安全审计:
使用onaudit工具,或者通过配置参数。
在7.10UD1之前,这些参数是在$ONCONFIG文件中设置,在7.10UD1之后,这些参数在$INFORMIXDIR/aaodir/adtcfg文件中设置。
安全审计在你第一次初始化或者关闭和重新启动online的时候生效。
你必须明确地打开审计功能:
作为informix用户,运行以下的命令:
onaudit -1 1
审计功能会立即对任何的新的连接生效。
这个命令同时会修改ADTMODE配置参数,这样在下一次online启动的时候会自动生效。
也可以通过修改ADTMODE参数为1来打开安全审计。
在修改了这个配置参数之后,你必须重新启动online,让改动生效。
在ONLINE7.10.UD1版本之前,这个参数在$ONCONFIG文件中配置,在这个版本之后,这个参数在$INFORMIXDIR/aaodir/adtcfg文件中设置,并增加了更多的功能:
ADTMODE=1 写到informix审计记录中。
不自动审计DBSSO和DBSA活动。
ADTMODE=2 写到操作系统的审计记录中。
这个选项只在操作系统支持审计的时候才会生效。
不自动审计DBSSO和DBSA的活动。
ADTMODE=3 写到INFORMIX审计记录中。
自动审计所有的DBSSO活动。
ADTMODE=4 写到操作系统审计记录中。
自动审计所有的DBSSO活动。
ADTMODE=5 写到INFORMIX审计记录中。
自动审计DBSA活动。
ADTMODE=6 写到操作系统审计记录中。
自动审计DBSA活动。
ADTMODE=7 写到INFORMIX审计记录中。
自动审计所有DBSSO和DBSA活动
设置审计文件参数:
1.指定审计文件的目录:
onaudit -p /work/audit
或者ADTPATH /work/audit
2.指定审计文件的大小:
onaudit
onaudit -s 50000
或者ADTSIZE 50000
在创建审计掩码之前需要设置其它的两个审计参数,它们是:
审计文件所在的目录。
审计文件中存储所有用户的审计记录。
首先创建一个目录。
确保这个目录的权限为只能被INFORMIX帐号存取。
在online处于启动状态的时候,你可以通过执行如下的命令来修改审计目录:
onaudit -p 路径
其中路径名为将要放置审计文件的路径名。
onaudit命令同时会修改ADTPATH配置参数的值。
你可以手工修改ADTPATH参数的值。
然尔通过这种方式,你必须关闭和重新启动ONLINE,让改动生效。
默认文件大小。
ONLINE在ADTSIZE配置参数中限制了审计文件的大小。
当审计文件的大小到达ADTSIZE的时候,一个新的审计文件会在ADTPATH路径下创建。
你可以通过onaudit工具来修改审计文件的大小,同时会修改ADTSIZE配置参数,这个大小的单位是字节:
onaudit -s 50000
你可以手工修改ADTSIZE参数的值。
然尔通过这种方式,你必须关闭和重新启动ONLINE,让改动生效。
通过限制审计文件的大小,你可以周期性地将旧的审计文件归档或者删除。
你也可以在当前的审计文件没有满的时候自动启动一个新的审计文件,方法是执行如下命令:
onaudit -n
设置错误参数
最后,你可以指定由于某种原因导致不能写审计文件的情况下,系统执行什么操作:
停止(0)模式-在一个用户会话试图写一个审计文件,但是写文件失败,它会等待,然后每秒重试一次。
在审计文件可以写之前,这个会话不能做任何操作。
继续
(1)模式-这种模式意味着会话会继续下去,即使不能够写审计日志,online的信息日志中会接到一条错误信息,说日志文件不能存取和更新。
HALT(0)是默认的错误模式。
你可以通过两种办法来修改错误模式。
使用onaudit工具:
onaudit -e error-mode
这个命名执行的同时会修改ADTERR配置参数。
修改在$ONCONFIG文件中的ADTERR参数的值,为了让这个改变生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Informix 培训教材 整理 系统维护 技巧