数据库 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases
(2014-11-25 11:24:20)
标签:
事务日志收缩处理数据库收缩文件sql事务日志已满处理sql事务日志已满错误sql收缩数据库 |
分类: 数据库学习 |
一、错误信息
数据库 '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文件
--附加数据库:
--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.htm和http://msdn.microsoft.com/zh-cn/library/ms189493.aspx