sybase ASE日志空间不够怎么办

背景

相信大家都被数据库日志空间大小困扰过,因为空间不足,数据库操作会卡住甚至锁住,对于生产环境极其危险,那么如果所使用的日志空间不够怎么办?

解决方案

  1. 方案一:
    扩容,将数据库空间日志扩大即可,emmm,我知道这是废话,但是条件允许能扩则扩。

  2. 方案二:
    sql语句优化,比如清表truncate替代delete,这样可以减少日志输出。

  3. 方案三:
    关闭局部事务,很多操作,比如批量更新某个字段,其成功与否对第二次更新并没有什么影响。
    比如数据库某字段需要将所有标识改为1,第一次失败并不需要回滚,再运行于一次即可。

  4. 方案四:
    将业务层事务进行拆分,比如先删除再增加的操作,可以让其在action层控制。其中删除使用一个事务,增加使用一个事务。当删除成功后再启用增加操作。当然,这个逻辑也可以写在业务层,但是如果用spring的声明事务配置(xml),则需要对特定的serivce类关闭事务拦截,推荐使用注释@Transactional配置关闭事务控制。

  5. 方案五:
    将语句:dump transaction 数据库名称 with truncate_only写进程序,在操作前后执行,可以清除空闲的日志空间。这个操作是没有危险性的,在清除前会判断并发操作。只是这个方法不会备份日志,这意味着万一数据库出现数据问题,将无法通过事务日志来找回数据。
    6.方案六:
    最后一招语句:dump transaction 数据库名 with no_log。这个语句与方案五相比危险性高很多,它不会做并发检查,通常被用于最后一招。
    它的好处是如果其他dump transaction语句不能使用,它依旧可以清除日志。

原创文章 5 获赞 9 访问量 112

猜你喜欢

转载自blog.csdn.net/weixin_44159662/article/details/105768044