⑴ sql SERVER 日志过大怎么办
/*--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/
--下面的所有库名都指你要处理的数据库的库名
1.清空日志(SQL2000时可用)
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)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
a.分离
EXEC sp_detach_db @dbname = '库名'
b.删除日志文件
c.再附加
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
⑵ sql server数据库显示100多个GB!~怎么回事
可能是运行久了日志的问题吧,你可以试着在查询分析器里运行
backup
log
数据库名
with
no_log
DBCC
SHRINKDATABASE
(数据库名,
10)
DBCC后的10是收缩后的数据库可用空间
你试试看这样是不是减小了很多,我以前也曾经出现过你这样的事情,运行久了日志占用太大
⑶ SQL server数据库日志满了怎么处理
解决方法
日志文件满而造成SQL数据库无法写入文件时,可用两种方法:
一种方法:清空日志。
1.打开查询分析器,输入命令
DUMP
TRANSACTION
数据库名
WITH
NO_LOG
2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。
另一种方法有一定的风险性,因为SQL
SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。
1:
删除LOG
分离数据库
企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
附加数据库
企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K。
注意:建议使用第一种方法。
如果以后,不想要它变大。
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:
alter
database
数据库名
set
recovery
simple
另外,如上图中数据库属性有两个选项,与事务日志的增长有关:
Truncate
log
on
checkpoint
(此选项用于SQL7.0,SQL
2000中即故障恢复模型选择为简单模型)
当执行CHECKPOINT
命令时如果事务日志文件超过其大小的70%
则将其内容清除在开发数据库时时常将此选项设置为True
Auto
shrink
定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25%
当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate
log
on
checkpoint
选项设为True
时才能进行。
注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。
⑷ SQL server数据库日志满了怎么处理
一、删除日志文件。
二、手动收缩。操作如下:
1、在数据库页面中选择“选项”;
⑸ sql server 数据库日志过大会影响运行速度吗
sql server数据库日志文件过大不会影响运行速度,但是会导致数据无法写入。
SQL Server数据库中,当日志文件过大或者日志已满时就会影响到数据库的正常工作。而日志文件已满常常会造成SQL Server数据库无法写入的问题。
解决方法:
1、右键数据库→属性→选项→故障还原模型→设为简单→确定;
2、右键数据库→所有任务→收缩数据库→确定;
3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。
⑹ 如何清理sql server 已满的数据库日志
SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件
方法一:
1、打开查询分析器,输入命令
backup log database_name WITH NO_log
2、再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了。
方法二:
设置检查点,自动截断日志
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如用户数据库cwbase1)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
方法三:通过SQL收缩日志
把代码复制到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可
SET NOCOUNT on
DECLARE @logicalFileName sysname,
@MaxMinutes int,
@NewSize int
USE tablename -- 要操作的数据库名
select @logicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日志文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
select @OriginalSize = size
from sysfiles
WHERE name = @logicalFileName
select 'Original Size of ' + db_name() + ' log is ' +
ConVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
ConVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'mb'
from sysfiles
WHERE name = @logicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter int,
@StartTime DATETIME,
@Trunclog VARCHAR(255)
select @StartTime = getdate(),
@Trunclog = 'backup log ' + db_name() + ' WITH TRUNCATE_onLY'
DBCC SHRINKFILE (@logicalFileName, @NewSize)
EXEC (@Trunclog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > datediff (mi, @StartTime, getdate()) -- time has not expired
AND @OriginalSize = (select size from sysfiles WHERE name = @logicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
select @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill log')
DELETE DummyTrans
select @Counter = @Counter + 1
END
EXEC (@Trunclog)
END
select 'Final Size of ' + db_name() + ' log is ' +
ConVERT(VARCHAR(30),size) + ' 8K pages or ' +
ConVERT(VARCHAR(30),(size*8/1024)) + 'mb'
from sysfiles
WHERE name = @logicalFileName
DROP TABLE DummyTrans
SET NOCOUNT off
方法四:删除日志文件。
此方法有一定的风险性,因为sql server的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。1、操作前请断开所有数据库连接。
2、分离数据库
分离数据库:企业管理器->服务器->数据库->cwbase1->右键->分离数据库
分离后,cwbase1数据库被删除,但保留了数据文件和日志文件
3、删除log物理文件
删除LOG物理文件,然后附加数据库: 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的log,大小只有500多k。
注意:建议使用第一种方法。操作前请确保所有操作员都已经推出系统,断开数据库的连接。
以上操作前,请务必做好数据备份!
1.sql server 2005 清除日志语句
mp transaction 数据库名称 with no_log
backup log 数据库名称 with no_log
dbcc shrinkdatabase(数据库名称)
⑺ sql server 2008 日志文件如何消除,现在的日志文件已达370多G,好多种方法都试了也不管用。急急
如果数据库是镜像,那么日志文件无法变小,除非备份日志后并重启数据库;
不过,备份日志可以截断日志文件,让日志文件空间重复使用,此时虽然日志文件有370G,但是实际上只用了一部分,未使用的,会用新日志覆盖上去,你定期备份日志来截断,sql:
备份日志可以截断日志,让日志空间可以循环使用,这样可以使日志文件的大小不再增长。
BACKUP LOG dbname TO DISK = 'e:log20111122.bak'--备份完整日志
简单的办法就是设置日志模式为Simple了
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE
再给一个看日志文件使用率的sql:
--查看当前数据库日志文件大小和使用率,size以8KB为单位,所以除128就是MB
SELECTname,data_space_id文件组id,size/128[文件大小(兆)],
FILEPROPERTY(name,'SpaceUsed')/128[已用空间(兆)],
size/128-FILEPROPERTY(name,'SpaceUsed')/128[未用空间(兆)],
FILEPROPERTY(name,'SpaceUsed')*100.0/size[使用率(%)],
max_size/128[最大值(兆)],
caseis_percent_growthwhen0thencast(growth/128asnvarchar)+'兆'elsecast(growthasnvarchar)+'%'end增长值,
physical_name物理路径
FROMsys.database_filesaORDERBYa.[name]
⑻ SQL数据库日志满
当前的解决方法是:把硬盘上的其他文件删除,以空出硬盘空间,将数据库的日志文件大小改成无限制,然后分离数据库,要确保分离成功,、然后把数据库日志文件删除(最好是先改名,以防万一)。再附加数据库,这样会重建日志文件。
加回去之后,将数据库改成自动收缩,把日志文件改成按mb增长,增长最大设为一个固定的值,值的大小看数据处理情况,存在大指的update操作的话,应设为大一点。
从此,你可以放心使用了。
⑼ SQL日志满,怎样解决
简单,
在查询分析器中运行
backup log 数据库名 with no_log
然后在企业管理器中所有任务->收缩数据库->收缩文件
⑽ SQL Server事务日志被填满的原因是什么
错误描述:数据库的事务日志已满。若要查明无法重用日志中的空间的原因 ,请参阅sys.databases 中的 log_reuse_wait_desc 列 。
首先引入一下事务日志的概念
事务日志是一个与数据库文件分开的文件。它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。事务日志还称作前滚日志或重做日志。
事务日志是备份和恢复的重要组件,也是使用 SQL Remote 或 [复制代理] 复制数据所必需的。
在缺省情况下,所有数据库都使用事务日志。事务日志的使用是可选的,但是,除非您因特殊原因而不使用,否则您应始终使用它。运行带有事务日志的数据库可提供更强的故障保护功能、更好的性能以及数据复制功能。
引发异常的原因:
a.未提交的事务
b.非常大的事务
c.操作:DBCC DBREINDEX 和 CREATE INDEX
d.在从事务日志备份还原时
e.客户端应用程序不处理所有结果
f.查询在事务日志完成扩展之前超时,您收到假的“Log Full”错误消息
g.未复制的事务
解决办法:
1.释放磁盘空间(菜鸟适用);
2.把数据库移到内存充足的磁盘(原理同上);
3.清空日志:DUMP TRANSACTION 库名 WITH NO_LOG;
4.截断事务日志:BACKUP LOG 库名 WITH NO_LOG;