环境: SQL 2008
场景: 在load data 的过程中, log file 的size 会逐渐的增长,最后占满磁盘空间,最后的size都15G了,汗……,导致我
N多数据没有导进数据库办法: 1: 设置auto shrink = True , Recovery Model = Simple, Enable Atuo growth = Ture ,Max File Size = 50M
2: 设置auto shrink = True , Recovery Model = Simple, Enable Atuo growth = False结果: 1,2 都fail了P.S: 对于办法 1, 我以为在 log file size 到达 50M的时候,会自动收缩的,但实际上还是报错,说 log file is full
对不办法 2, 报错信息同 办法1我实在没办法了,恳请大家办忙,全部散分
BACKUP LOG 库名 WITH NO_LOG
DBCC SHRINKFILE( '日志文件名',新的大小数值型如1)办法2:
先分享数据库,然后直接把日志文件删除,再附加数据库文件上去,因为日志文件已经删除,它会自动创建一个新的日志文件。这样是OK的。如果你还觉得不保险,那可以先做个备份
对于办法2 , 如果确保生成的log file ,它将来还是有可能会不断增长,有可能还会占满磁盘空间吧
设置手动收缩了一次,我已经设置Recovery Model = Simple了,还是不行,比较崩溃,不过还是谢谢大家
--add log file
alter database xx add log file(name=log1,filename='c:\log.ldf',maxsize=unlimited);
请问batchsize如何设计,我是利用loader往数据库里导入信息,信息量很大,我们刚导入4个period,log file就增长了5G,我们有100多个period,呵呵
我删除了原来的日志,生成了新的日志,但是还是说我log size is full。不过我这次的设置是auto shrink = True , Recovery Model = Simple, Enable Atuo growth = False
如果可以的话,请给出详细的步骤,谢谢
谢谢大家,及时的给我回复。
我现在比较担心的是,新生成的log file,它也会自动的增长,因为的我数据量实在太大,我担心新生成的log file,最后还是会占满空间,导致我的数据不能全部导入。我的设想是,能不能把log file的size ,控制在一定的大小之内,譬如500M-1G之间,或者说让它达到一定的范围内,可以auto-shrink(自动收缩)
这个没有用,它把一次导入作为一个工作单元,这个期间的事务日志是不能收shrink的。看你能不能分几批导入了,一次导入一些文件,多做几次。
backup log aaa with no_log
dbcc shrinkdatabase (aaa,truncateonly)
SQL 2008不支持 backup log aaa with no_log
但是还是很谢谢
综合2位的意见,我可以把我的步骤说的细致些,我是通过我们的软件,软件通过调用工具读取Excel的内容,来对数据库操作的,我能想到的比较笨的方法就是,把原先在一页的Transcaction的交易,分成几个sheet,然后再导入,没导入一个sheet,做一次shrink。不过我现在发现了一个新的问题,数据文件增长的也很快,如果可以对log进行shrink的话,也应该能对data进行shrink,那我担心就是,对data进行shrink之后,会不会对数据造成损毁或者破坏?
GO
DBCC SHRINKFILE (N'AdventureWorks_Data' , 0, TRUNCATEONLY)
GO3 设置数据库回到 FULL模式
就是因为数据太多,一次导不进去,才想到要shrink的
我用的是SQL2008,我没太明白,你的意思应该是,先设置成simple,在shrink(收缩),然后再回调到full模式吧,但是这样会使日志缩小吗?