加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数据库 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 

(2014-11-25 11:24:20)
标签:

事务日志收缩处理

数据库收缩文件sql

事务日志已满处理

sql事务日志已满错误

sql收缩数据库

分类: 数据库学习

       在一次向表中插入大量数据的过程中,SQL Server提示“事务日志已满”的错误,下面以数据库 test 为例,其详细的处理过程如下。

 

一、错误信息
数据库 'text' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。


二、解决过程
1、SQL Server2000数据下收缩日志处理,在查询分析器中执行以下命令:
a、清空日志
dump transaction [test] with no_log
b、截断事务日志
backup log [test] with no_log
c、收缩数据库
dbcc shrinkdatabase([test])


2、SQL Server2005数据下收缩日志处理:

注意:一般只做第a,b,c步,不建议做第d,f两步;第d步不安全,有可能损坏数据库或丢失数据,第f步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复。

a、清空日志
dump transaction test with no_log

b、截断事务日志:
backup log test with no_log

c、收缩数据库文件(如果不压缩,数据库的文件不会减小)

企业管理器下收缩日志文件手动操作路径:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xM(这里会给出一个允许收缩到的最小M数,直接输入这个数,

确定就可以了)。
企业管理器下收缩数据文件手动操作路径:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择数据文件--在收缩方式里选择收缩至xM(这里会给出一个允许收缩到的最小M数,直接输入这个数,确

定就可以了)。

--SQL命令收缩数据库
DBCC SHRINKDATABASE(test)

--收缩指定数据文件,fileid是文件号,可以通过这个语句查询到:
--查询数据文件号
use test
go
select * from sysfiles

--收缩指定文件号数据文件
DBCC SHRINKFILE(2)


d、为了最大化地缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)

--分离数据库:
   企业管理器--服务器--数据库--右键--分离数据库

--在我的电脑中删除LOG文件
   根据日志文件物理路径,找到日志文件,备份后删除。

--附加数据库:
   企业管理器--服务器--数据库--右键--附加数据库
   这种方法将生成新的LOG文件,大小只有500多KB。


--SQL命令分离、附加数据库test操作过程
--分离
EXEC sp_detach_db @dbname = 'test'

--删除日志文件
   根据日志文件物理路径,找到日志文件,备份后删除。

--再附加
EXEC sp_attach_single_file_db @dbname = 'test',@physname = 'c:\rogram Files\Microsoft SQL Server\MSSQLData\test.mdf'


e、为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择“自动收缩”

--SQL语句设置方式:
EXEC sp_dboption 'test','autoshrink','true'


f、如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:
alter database test modify file(name=逻辑文件名,maxsize=20MB)


3、SQL Server2008数据下收缩日志处理
在SQL2008中收缩日志文件就必须在简单模式下进行,等清除动作完毕再调回到完全模式。
在对象资源管理器中执行以下命令:
--修改数据库恢复模式为简单模式
use master
go
alter database mytest set recovery simple with no_wait
go
alter database mytest set recovery simple
go
--收缩日志文件
use mytest
go
--查询文件信息
select * from sysfiles
go
--收缩日志文件为指定大小2MB
dbcc shrinkfile('mytest_log',2,truncateonly)
go
--还原数据库恢复模式为完全模式
use master
go
alter database mytest set recovery full with no_wait
alter database mytest set recovery full

 

注意:如果dbcc shrinkfile(dbname,target_size,{notruncate|truncateonly})指定了 target_size,则 DBCC SHRINKFILE 尝试将文件收缩到指定大小。 将要释放的文件部分

中的已使用页重新定位到保留的文件部分中的可用空间。 例如,如果数据文件为 10 MB,则 target_size 为 8 的 DBCC SHRINKFILE 操作会将文件最后 2 MB 中所有的已使用页

重新分配到文件前 8 MB 中的任何未分配页中。 DBCC SHRINKFILE 不会将文件收缩到小于存储文件中的数据所需要的大小。 例如,如果使用 10 MB 数据文件中的 7 MB,则带有

target_size 为 6 的 DBCC SHRINKFILE 语句只能将该文件收缩到 7 MB,而不能收缩到 6 MB。

 

 

 

本文参考资料:http://www.jb51.net/article/37303.htmhttp://msdn.microsoft.com/zh-cn/library/ms189493.aspx

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有