Sqlerver数据库/事务日志已满处理办法

一、简单方法

1、右键数据库→属性→选项→故障还原模型→设为简单→确定;
2、右键数据库→所有任务→收缩数据库→确定;
3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。

二、复杂方法

1、清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2、截断事务日志
BACKUP LOG 数据库名 WITH NO_LOG
3、收缩数据库文件(如果不压缩,数据库的文件不会减小)
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(客户资料)
--收缩指定数据文件,

1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)

事物日志己满解决办法

如果出现提交了一个大的事务把整个日志库填满了,这时无论你怎么截断日志都是徒劳时,可以有三种办法解决:

1.重启数据库(最笨的但最有效的),但肯定会有REDO和UNDO恢
  复时间长。
2.给数据库日志加空间,但必须有足够的空间。
3.找出执行大事物SESSION的ID,KILL它,但也会回滚,而且不
  定可以KILL得掉。
 
***********************************************
对于第1个方法,可否直接修改sysdatabases里的status设为-32768,然后再进入数据库dump tran dbname with truncate_only,然后再重启把status设为0。这样的话,可以不用等待redo和undo的时间,这种方法有时会造成数据库数据不一致。
 
***********************************************
在排除了硬件故障的前提下,Adaptive Server能够启动,但是应用系统不能操作,许多情况下都是由于应用系统数据库日志太慢了,一般在这种情况下使用dump tran dbname with truncate_only就可以解决问题了,但是有时日志满得出了问题,如以下从errorlog文件片断中显示的那样:

 代码如下 复制代码

server  Database 'sybsystemprocs' is now online.

server  Recovering database 'testdb'.

server  Redo pass: 6000 records done (11%); 47493 records left.

server  Redo pass: 48000 records done (89%); 5493 records left.

server  Redo pass of recovery has processed 787 committed and 44 aborted transactions.

server  Error: 1105, Severity: 17, State: 3

server  Can't allocate space for object 'syslogs' in database 'testdb' because 'logsegment' segment is full/has no free extents. If you ran out of space in syslogs, dump the transaction log. Otherwise, use ALTER DATABASE or sp_extendsegment to increase size of the segment.

server  Error: 3475, Severity: 21, State: 7

server  There is no space available in SYSLOGS for process 1 to log a record for which space has been reserved. This process will retry at intervals of one minute. The internal error number is -4.

kernel  shutdownproc: shutting down SQL Server!

server  SQL Server shutdown by request.

业务系统数据库不能正常启动,对于这一类问题,我们按照如下步骤解决:

第一步,启用allow updates to system tables,这样可以使具有系统管理员角色的用户能够改变系统表并可创建和修改系统表的存储过程,其中系统表包括master数据库中所有Sybase提供的表以及用户数据库中所有以“sys”开头的表和在sysobjects表中其ID值小于或等于100的表。系统表的不正确变更会导致数据库损坏和数据丢失,修改系统表时务必要使用begin transaction来保护数据库不受可能损坏数据库的错误影响,完成修改后应立即禁用allow updates to system tables。

 代码如下 复制代码

1>;sp_configure "allow update",1

第二步,Adaptive Server中的每个数据库在sysdatabases中都有相应的一行,安装Adaptive Server后,master数据库、model数据库、sybsystemprocs和tempdb数据库在sysdatabases中都将有相应的条目,如果已经安装审计功能,sybsecurity数据库也将在其中有相应的条目。修改sysdatabases表,将testdb的状态修改为-32768,然后在关闭Adaptive Server后重新启动Adaptive Server。

 代码如下 复制代码

1>; update sysdatabases set status=-32768 where name = "testdb"

1>; shutdown

第三步,由于事务日志已经很满,不能使用常规方法转储此事务日志,如果使用了dump transaction或dump transaction with truncate_only命令,而命令又由于日志空间不足失败时,可以使用dump transaction的特殊选项with no_log,此选项可截断事务日志而不记录转储事务事件。所有dump tran with no_log都将在Adaptive Server错误日志中进行报告,这些消息包括执行此命令的用户ID、指示成功或失败的消息,no_log是唯一生成错误日志消息的转储选项。但是这个选项(包括with truncate_only)没有提供任何方法可恢复自从上次例行转储后提交的事务。

 代码如下 复制代码

1>; use testdb

1>; dump tran testdb with no_log

第四步,修改sysdatabases表,将testdb的状态恢复为0,然后禁用allow updates to system tables。

 代码如下 复制代码

1>; use master

1>; update sysdatabases set status = 0 where name = "testdb"

1>;sp_configure "allow update",0

时间: 2024-09-01 00:00:30

Sqlerver数据库/事务日志已满处理办法的相关文章

SQL Server中事务日志已满的原因以及解决办法

  错误描述:数据库的事务日志已满.若要查明无法重用日志中的空间的原因 ,请参阅sys.databases 中的 log_reuse_wait_desc 列 .   首先引入一下事务日志的概念(来自百度百科):   事务日志是一个与数据库文件分开的文件.它存储对数据库进行的所有更改,并全部记录插入.更新.删除.提交.回退和数据库模式变化.事务日志还称作前滚日志或重做日志.   事务日志是备份和恢复的重要组件,也是使用 SQL Remote 或 [复制代理] 复制数据所必需的.   在缺省情况下,

SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案_MsSql

执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限. 在网上Google了很久,试了些方法都不行:数据库所在磁盘还有很大的可用空间,试着下重药了. 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决. 记录一下清空日志的命令

SQL数据库日志已满解决方法

当前的解决方法是:把硬盘上的其他文件删除,以空出硬盘空间,将数据库的日志文件大小改成无限制,然后分离数据库,要确保分离成功,.然后把数据库日志文件删除(最好是先改名,以防万一).再附加数据库,这样会重建日志文件. 加回去之后,将数据库改成自动收缩,把日志文件改成按mb增长,增长最大设为一个固定的值,值的大小看数据处理情况,存在大指的update操作的话,应设为大一点. 在查询分析器上操作: 清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志: BACKUP L

SQL Server数据库日志已满的解决方法

Server Error in '/' Application.</pre><pre>--------------------------------------------------------------------------------</pre><pre> 数据库教程 'databasename' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 出现如上错误,请把数据库的故障恢复模式改为"简单"模式 , 即可解决 此

SQL数据库日志已满解决方法_MsSql

当前的解决方法是:把硬盘上的其他文件删除,以空出硬盘空间,将数据库的日志文件大小改成无限制,然后分离数据库,要确保分离成功,.然后把数据库日志文件删除(最好是先改名,以防万一).再附加数据库,这样会重建日志文件. 加回去之后,将数据库改成自动收缩,把日志文件改成按mb增长,增长最大设为一个固定的值,值的大小看数据处理情况,存在大指的update操作的话,应设为大一点. 在查询分析器上操作: 清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志: BACKUP L

SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限. 在网上Google了很久,试了些方法都不行:数据库所在磁盘还有很大的可用空间,试着下重药了. 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决. 记录一下清空日志的命令

DB2面向OLTP环境的物理数据库设计:数据库事务日志

数据库事务日志对于数据库恢复至关重要,也是设计高度可用的数据库解决方案的一个重要组成部分. 数据库日志使得从故障中恢复成为可能.它们还可以在 HADR 环境中同步主数据库和备用数据库. DB2 对每个数据库使用一组独立的日志文件. 所有数据库都有与自己有关联的日志.这些日志保留数据库变更的记录.如果数据库需要还原到最后一次完整离线备份之前的某个点,日志需要将数据前滚到故障点.DB2 数据库支持两种类型的数据库的日志:循环日志和归档日志. 循环日志 循环日志仅支持崩溃恢复,也就是说,如果 DB2

Photoshop提示暂存盘已满解决办法

昨天一朋友问我他的PS用不了了,一用PS里面功能就出现暂存盘已满,其原因是PS默认的暂存盘在启动部分,空间不够了,解决办法很简单.如下: 1. 打开PS(我的是8.0,其他版本应该差不多) 图1 打开ps 2."编辑"---找到最下面的"预设"---"增效工具与暂存盘",如图: 图2 修改"增效工具与暂存盘" 设置成你电脑空间比较大的盘,如图: 问题就解决了!

WPS云空间已满解决办法

  相信很多朋友都在使用金山WPS Office 2013.这个软件有一个十分好用的功能--Office文档云备份,可以让你将的Word文档.Excel文档和PPT文档等Office文档保存到WPS云空间里,让你就算电脑坏了也能通过WPS账号找回你云备份的文档! 经过多次改版,目前的Office文档云备份功能还是挺不错的,可以手动保存文档,也可以设定为文档自动漫游.唯一的遗憾的是,WPS云文档空间只有1G左右. WPS云文档备份功能怎么用--特色功能--打开云文档.保存云文档和文档漫游 如果你使