Chinaunix首页 | 论坛 | 博客
  • 博客访问: 814909
  • 博文数量: 328
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 3810
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 22:00
文章分类

全部博文(328)

文章存档

2009年(2)

2008年(84)

2007年(207)

2006年(35)

我的朋友

分类: Sybase

2006-12-24 14:43:37

日志的管理

  日志问题产生的原因

  SQL SERVER的日志达到一定程度时,会阻塞其它事务的处理,在九七工程项目的维护过程中,曾多次出现日志溢出导致系统的瘫痪。引起日志溢出的主要原因有:

  1:系统管理人员没有及时清除日志。SQL SERVER在缺省值下,必须定期备份数据和日志,日志不能自动的清除。

  2:由于执行非法的语句,如执行一条ute语句,由于条件出错,导致无限量的产生日志,直到系统死机。

  日志问题的解决办法

  针对不同的错误原因,错误的严重性,采取不同的解决办法:

  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

  /* 备份日志到磁带,然后打印备份的段名,数据库名 */  

阅读(800) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~