【IT168 服务器学院】数据库系统管理主要包含如下内容:
1:日志管理
日志问题产生的原因
日志问题的解决办法
2:一致性校验
3:审计管理
1 日志的管理
日志问题产生的原因
SQL SERVER的日志达到一定程度时,会阻塞其它事务的处理,在九七工程项目的维护过程中,曾多次出现日志溢出导致系统的瘫痪。引起日志溢出的主要原因有:
1:系统管理人员没有及时清除日志。SQL SERVER在缺省值下,必须定期备份数据和日志,日志不能自动的清除。
2:由于执行非法的语句,如执行一条update语句,由于条件出错,导致无限量的产生日志,直到系统死机。
日志问题的解决办法
针对不同的错误原因,错误的严重性,采取不同的解决办法:
1:由小的事务引起日志溢出,系统能正常启动。
解决办法:
扩大数据库日志空间:
alter database 数据库名 on 设备名=数量(M为单位)
sp_logdevice 数据库名,设备名
清除日志
dump transaction 数据库名 with no_log(no_truncate)
2:由大的事物引起日志溢出,系统较长时间内无法正常启动或数据库无法恢复
解决办法:
等待。
较长的事务恢复时间较长,在无锡,有一次由于用户执行一条更新用户信息的SQL语句,由于使用错误的关联条件,导致日志溢出,恢复
日志花了14小时。日志恢复完成后,一般系统就可正常运行。
强行清空日志。
在实在无法恢复数据库或有近期备份的情况下,可采用强行清空日志的方法。采取这种方法的后果有可能彻底破坏数据库。执行步骤如下:
Ⅰ 以-v 方式启动SQL SERVER(不检测日志)
Ⅱ 修改数据库状态为-32768(阻塞状态)
update sysdatabases set status=-32768 where name=数据库名
Ⅲ 授权sybase_ts_role权限(sybase_ts_role为SQL SERVER特殊
管理员权限,在日常的数据库管理中,不需要这个角色)
sp_role “grant”,”sybase_ts_role”,sa
set role “sybase_ts_role”
Ⅳ 清除日志
dbcc rebuild_log(数据库名,1,1)
完成以上步骤后,重新启动SQL SERVER即可。如果数据库能正常启
动,数据库就恢复完成;如果无法启动,只能重新创建数据库。
避免产生日志溢出的方法有:人工方法和自动方法。
人工方法:根据执行任务量的不同,定期备份日志和清除无用的日志,尽量增加日志可用的空间。优点:安全,数据库被破坏时,能恢复到上次备份的日志时为止。缺点:需人工操作,长时间不备份日志或执行非法的语句,有可能导致日志溢出。
自动方法:通过数据的阀值,可实时控制日志的溢出。优点:不会产生日志溢出。缺点:日志有可能会丢失,增大数据库处理的负担。阀值创建方法如下:
1:创建段
sp_addsegment 段名,数据库名,设备名
相关过程:sp_helpsegment,sp_dropsegment
2:创建阀值
sp_addthreshold 数据库名,段名,空闲空间,执行过程名
相关过程:sp_helpthreshold,sp_modifythreshold,sp_dropthreshold
创建阀值之后,当日志空闲空间达到阀值定义的空闲空间时,SERVER自动激活阀值定义的存储过程名。该存储过程对日志进行处理。以下以最简单的处理过程为例说明。
Create procedure sp_thresholdaction
@dbname varchar(30),
@segmentname varchar(30),
@space_left int,
@status int
as
dump transaction @dbname to tapedump1
print “LOG DUMP:’%1!’ for ‘%2!’ dumped”,@segmentname,@dbname
/* 备份日志到磁带,然后打印备份的段名,数据库名 */
2 一致性的检测
数据库如果经常非正常的shutdown可能引起数据的错误;长时间的运行有可能导致索引等错误。直接后果是运行速度明显下降、无法利用BCP备份数据(BCP执行结果错误)。此外还会影响物理空间的分配。数据库的检测可采用数据库提供的过程执行,最重要的一个过程如下:
1:dbcc checkcatalog(数据库名)
检查系统数据表中数据的一致性问题,如验证syscolumns表中的某个类型包含systypes表中的一行等。
2:dbcc checkdb(数据库名,skip_ncindex)
检查数据库中的每个表的空间分配情况,在数据转储时,可采用带
skip_ncindex参数的方法加快表的检查速度。
3:dbcc checktable(表名)
检查每个表的分配信息,包含如下内容:页面连接、索引排序、指针的一致性、每页上的数据行在对象分配映射(OAM)页的入口。
4:dbcc checkalloc(表名|数据库名,full,nofix)
检查核实是否所有的页都被正确的分配,未分配的页是否也不是页面链的一部分,以及不属于页面链部分的页是否也未标记被分配了。
除了对已分配的页面进行检查外,checkalloc也检查数据库中所有分配页,以确保它们包含有效的信息。
3 审计管理
审计系统是作为SYSTEM10发行的一部分引入的。使用审计主要原因有:
1:检测数据库对象访问的信息;
2:跟踪SQL SERVER中的潜在热点或怀疑问问题的区域使用信息;
3:监控存储过程的使用信息;
4:收集表的选择、插入、更新和删除的特定数据来确定变更率;
5:监控特定的用户的活动。
除了以上正常审计的功能外,审核校验还提供了分析应用程序的捷径,主要表现在以下几个方面:
1:分析语法结构。我们目前很多应用系统采用PB开发,数据的显示和操作利用SYBASE公司的专利検荽翱凇N朔治鍪荽翱诘挠锓ǎ刹捎?/FONT>PB的断点调试方法,这种方法得到的结果无法直接保存,不易管理,采用审计方法可记录用户的操作全过程。方法如下:采用特定的用户登录,对该用户设定全程审计,浏览sysaudits表即可查看执行的全过程,包括执行的语法,执行时间等。
2:优化程序,特别是复杂的SQL和存储过程。在审计结果表中,通过分析优化过的SQL语句,我们可以分析到SQL使用的索引、SQL执行所花的时间,存储过程的执行方案。利用这些数据我们可以分析表索引建立的合理性,存储过程编写合理性等。
3:表的利用率。通过一段时间的审计,可以得到所有表操作的频繁度,SQL SERVER可以利用CACHE等技术,把频繁使用的表调到内存,减少I/O操作,提高系统的整体性能。
4:系统维护的管理。对表数据的修改也许涉及到系统的多个地方,需要对表结构进行修改时,可能会遗漏导致系统的错误。通过对表的审计,记录所有与该表有关的所有功能,可以提前发现问题、解决问题。