SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。我已经设定简单模式恢复。 SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。我已经设定简单模式恢复。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1,在查询分析器中执行:dump transaction 数据库名 with no_log2,在企业管理器中“收缩数据库” backup log 数据库名 with no_loggodbcc shrinkdatabase(数据库名,50)godbcc shrinkfile(日志文件逻辑名,10) tempdb右键-》属性-》files-》选择文件-》自动增长-》限制文件大小-》改为100M试试呢tempdb大小最好不要随便限制,否则可能导致SQL执行失败。 谢谢楼上的XD们,我是在程序里面操作控制数据库的。因为要经常的操作这个数据。虽然一次dump transaction DB with NO_LOG,但是还是会慢慢的出现log啊。如何限定一个固定大小比如就10MB,自动循环使用?我设定了固定大小,不增长,结果导入数据不能导入了。 :( :( :( 如何通过SQL语句收缩数据库?1,在查询分析器中执行:dump transaction 数据库名 with no_log 2,在企业管理器中“收缩数据库” 我想把这2步都通过SQL语句执行。 不知楼主使用何种方式导入数据?建议:1.DOS命令行,使用bcp 加参数 -b100002.SQL 语句,使用查询分析器的Bulk Insert 带参数 BatchSize=100003.使用企业管理器-数据转换服务-本地包-新建(选择相应的源,目的)-转换数据任务属性-选中"总是提交最后的批处理"-插入批处理大小:10000 多谢楼上的xd建议。我是使用的SQL SERVER 2005 EXPRESS数据库,使用应用软件操作数据库ADO方式,通过使用OpenRowSet()函数进行数据的入库操作。其实,就是一堆CSV文本文件,我循环使用OpenRowSet或者OpenDataSource,目前我使用OpenRowSet导入。Bulk Insert也尝试过,和OpenRowSet效率差不多。此外对于此类 "1","2","3"....,"N"数据,如果使用Bulk Insert,则会连双引号"一起导入数据库,OpenRowSet/OpenDataSource则不会。请指教。 SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。--解决办法有三个:1 建立数据库的时候将日志文件设置成不增长的(也就是自动增长关闭)2 一定时间内进行数据库收缩3 将数据库进行分离,删除日志文件,在将数据文件附加但我的想法还是应该有日志文件的 SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。--解决办法有三个:1 建立数据库的时候将日志文件设置成不增长的(也就是自动增长关闭)2 一定时间内进行数据库收缩3 将数据库进行分离,删除日志文件,在将数据文件附加但我的想法还是应该有日志文件的 就数据导入而言,Bulk Insert 的导入效率是最高的,附来自SQL Server 联机丛书的示例:本例从指定的数据文件中导入订单详细信息,该文件使用竖杠 (|) 字符作为字段终止符,使用 |\n 作为行终止符。BULK INSERT Northwind.dbo.[Order Details] FROM 'f:\orders\lineitem.tbl' WITH ( FIELDTERMINATOR = '|', --行分隔符 ROWTERMINATOR = '|\n' --列分隔符 )本例指定 FIRE_TRIGGERS 参数。BULK INSERT Northwind.dbo.[Order Details] FROM 'f:\orders\lineitem.tbl' WITH ( FIELDTERMINATOR = '|', --行分隔符 ROWTERMINATOR = ':\n', --列分隔符 TabLock --表级锁定,这是提高数据导入效率的关键参数 )另外,应避免在表上建有任何形式的索引,触发器等.至于楼主所述将"也装载之数据库,可使用FormatFile格式化文件进行更精确的处理.详见 SQL Server 联机丛书. 如果你的硬盘不是很欠缺,就不要限制tempdb的大小,不然导致一些操作不能执行不是很麻烦么? 我已经设置数据库恢复模式为简单,可是发现log还是很大. 后来我就干脆使用应用程序每次关闭时,进行数据的收缩操作.发现如果设定log为不增长,当日志满时会导致数据库停止操作! 这是个很大的问题. 试试设置几个LOG文件(一般可为三个),每个不要太大,各限制其最大文件大小. 压缩日志及数据库文件大小(ms SQL SERVER) /*--特别注意请按步骤进行,未进行前面的步骤,请不要做后面的步骤否则可能损坏你的数据库.一般不建议做第4,6两步第4步不安全,有可能损坏数据库或丢失数据第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.--*/--下面的所有库名都指你要处理的数据库的库名1.清空日志DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志:BACKUP LOG 库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成--收缩数据库DBCC SHRINKDATABASE(库名)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfilesDBCC 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) 一般来说只做前三步!!!! sql2005数据问题? SQL server里设置的自增变量如果要删除中间某些元组怎么办? 请大家帮我看一下这么UPDATE是否可行? SQL两小题请教大家^^^^^^^^^^^^^^^^^^^ 求一个较难的sql语句 变量声明的问题 安装SQL Server2000“选择许可模式”出错:由于系统缓冲区空间不足或列队已满 请问知道一个表的名称,用什么命令能知道它的表结构?在线........ 关于从一个机器sql数据库导入另一个机器sql的问题 SQL 语句难题 查询12个月数据,没有数据的月份生成为0 今天下午面试的一道关于存储过程的上机题,高手答.....
2,在企业管理器中“收缩数据库”
go
dbcc shrinkdatabase(数据库名,50)
go
dbcc shrinkfile(日志文件逻辑名,10)
tempdb大小最好不要随便限制,否则可能导致SQL执行失败。
2,在企业管理器中“收缩数据库” 我想把这2步都通过SQL语句执行。
1.DOS命令行,使用bcp 加参数 -b10000
2.SQL 语句,使用查询分析器的Bulk Insert 带参数 BatchSize=10000
3.使用企业管理器-数据转换服务-本地包-新建(选择相应的源,目的)-转换数据任务属性-选中"总是提交最后的批处理"-插入批处理大小:10000
--
解决办法有三个:
1 建立数据库的时候将日志文件设置成不增长的(也就是自动增长关闭)
2 一定时间内进行数据库收缩
3 将数据库进行分离,删除日志文件,在将数据文件附加但我的想法还是应该有日志文件的
--
解决办法有三个:
1 建立数据库的时候将日志文件设置成不增长的(也就是自动增长关闭)
2 一定时间内进行数据库收缩
3 将数据库进行分离,删除日志文件,在将数据文件附加但我的想法还是应该有日志文件的
本例从指定的数据文件中导入订单详细信息,该文件使用竖杠 (|) 字符作为字段终止符,使用 |\n 作为行终止符。BULK INSERT Northwind.dbo.[Order Details]
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR = '|', --行分隔符
ROWTERMINATOR = '|\n' --列分隔符
)本例指定 FIRE_TRIGGERS 参数。BULK INSERT Northwind.dbo.[Order Details]
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR = '|', --行分隔符
ROWTERMINATOR = ':\n', --列分隔符
TabLock --表级锁定,这是提高数据导入效率的关键参数
)另外,应避免在表上建有任何形式的索引,触发器等.
至于楼主所述将"也装载之数据库,可使用FormatFile格式化文件进行更精确的处理.
详见 SQL Server 联机丛书.
/*--特别注意请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/--下面的所有库名都指你要处理的数据库的库名1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至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) 一般来说只做前三步!!!!