Sqlserver还原数据库时,日志文件过大,如何减少

时间:2021-03-12 21:40:35
从远程sqlserver上拷贝数据库文件mdf,大小为2.5G,然后在本地上创建一个同名的数据库,然后进行还原,即导入远程备份的mdf文件,还原后,发现生成的ldf文件文件很大,有40G,把磁盘空间都占满了,怎么减小这个日志文件的大小?

14 个解决方案

#1


--收缩事务日志

backup log register with NO_LOG 
backup log register with TRUNCATE_ONLY 
DBCC SHRINKDATABASE(register) 

#2


分离,删除日志文件,附加.

#3


收缩,没什么重要的就删掉

#4


引用 3 楼 mingpei0703 的回复:
收缩,没什么重要的就删掉
具体怎么操作?

#5


引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.

上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断日志 blpsjxc_sl是数据库名
Use blpsjxc_sl
DBCC SHRINKFILE ( 2,1,TRUNCATEONLY ) --收缩日志文件,2是文件号

#6


引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断日志 blpsjxc_sl是数据库名
Us……
"2是文件号"中的2是常量吗?

#7


引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断日志 blpsjxc_sl是数据库名
Us……
执行完毕后,我的日志文件只有1m了,原因是什么,做了哪些操作?

#8


引用 7 楼 paodan 的回复:
引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断……


这个没什么 可以直接用mdf文件还原

#9


引用 8 楼 fredrickhu 的回复:
引用 7 楼 paodan 的回复:
引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl wi……
缩减日志是不是日志文件的信息丢失了?对数据库有什么影响吗?

#10


截断先 backup log logname with no_log
再压缩  dbcc shrinkfile(logname,0)

#11


引用 10 楼 aspwebchh 的回复:
SQL code
截断先 backup log logname with no_log
再压缩  dbcc shrinkfile(logname,0)
这里不需要指定哪个数据库吗?logname是不是指定是要压缩的哪个文件的名称?

#12


很简单呀,收缩日志就可以了呀。
--例:收缩数据库CR_YPPF8日志,其中ChaoRan_Log表示数据库逻辑文件名

DBCC SHRINKDATABASE (CR_YPPF8, 10);  --收缩数据库
--收缩日志-------------------
USE CR_YPPF8;
GO

ALTER DATABASE CR_YPPF8
SET RECOVERY SIMPLE;
GO

DBCC SHRINKFILE (ChaoRan_Log, 1);
GO

ALTER DATABASE CR_YPPF8
SET RECOVERY FULL;
GO 

#13



--1.完整备份
DECLARE @File NVARCHAR(255)
SELECT @File='D:\数据库备份\'+REPLACE(CONVERT(NVARCHAR(10),GETDATE(),120),'-','')+'.bak'
BACKUP DATABASE [数据库] TO DISK = @File  WITH NOFORMAT, INIT,  
    NAME = N'数据库完整备份', 
    SKIP, NOREWIND, NOUNLOAD,  STATS = 10;
GO    
--2.日志备份,截断事务日志
DECLARE @File NVARCHAR(255)
SELECT @File='D:\数据库备份\'+REPLACE(CONVERT(NVARCHAR(10),GETDATE(),120),'-','')+'_Log.bak'
BACKUP LOG [数据库] TO  DISK = @File WITH NOFORMAT, INIT,  
 NAME = N'数据库-事务日志  备份', 
 SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

--3.设置恢复模式为简单
ALTER DATABASE [数据库]
SET RECOVERY SIMPLE;
GO
--4.收缩事务日志
DBCC SHRINKFILE (db_Log, 1);
GO
--5.设置恢复模式为完整
ALTER DATABASE [数据库]
SET RECOVERY FULL;
GO

可参考我的博客文章
http://blog.csdn.net/jamespanjunwei/archive/2011/06/14/6543771.aspx

#14


sp_deattach_db
sp_attach_single_file_db
sp_attach_db
如果日志不需要的话 直接删除
先分离数据库 然后添加数据库即可

#1


--收缩事务日志

backup log register with NO_LOG 
backup log register with TRUNCATE_ONLY 
DBCC SHRINKDATABASE(register) 

#2


分离,删除日志文件,附加.

#3


收缩,没什么重要的就删掉

#4


引用 3 楼 mingpei0703 的回复:
收缩,没什么重要的就删掉
具体怎么操作?

#5


引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.

上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断日志 blpsjxc_sl是数据库名
Use blpsjxc_sl
DBCC SHRINKFILE ( 2,1,TRUNCATEONLY ) --收缩日志文件,2是文件号

#6


引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断日志 blpsjxc_sl是数据库名
Us……
"2是文件号"中的2是常量吗?

#7


引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断日志 blpsjxc_sl是数据库名
Us……
执行完毕后,我的日志文件只有1m了,原因是什么,做了哪些操作?

#8


引用 7 楼 paodan 的回复:
引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl with TRUNCATE_ONLY --截断……


这个没什么 可以直接用mdf文件还原

#9


引用 8 楼 fredrickhu 的回复:
引用 7 楼 paodan 的回复:
引用 5 楼 cd731107 的回复:
引用 2 楼 qianjin036a 的回复:
分离,删除日志文件,附加.


SQL code
上面的方法处理起来比较简单,非要用脚本处理的化,也可以,如下:
--把下面数据库名称blpsjxc_sl换成你要压缩的数据库名称
use master
backup Log blpsjxc_sl wi……
缩减日志是不是日志文件的信息丢失了?对数据库有什么影响吗?

#10


截断先 backup log logname with no_log
再压缩  dbcc shrinkfile(logname,0)

#11


引用 10 楼 aspwebchh 的回复:
SQL code
截断先 backup log logname with no_log
再压缩  dbcc shrinkfile(logname,0)
这里不需要指定哪个数据库吗?logname是不是指定是要压缩的哪个文件的名称?

#12


很简单呀,收缩日志就可以了呀。
--例:收缩数据库CR_YPPF8日志,其中ChaoRan_Log表示数据库逻辑文件名

DBCC SHRINKDATABASE (CR_YPPF8, 10);  --收缩数据库
--收缩日志-------------------
USE CR_YPPF8;
GO

ALTER DATABASE CR_YPPF8
SET RECOVERY SIMPLE;
GO

DBCC SHRINKFILE (ChaoRan_Log, 1);
GO

ALTER DATABASE CR_YPPF8
SET RECOVERY FULL;
GO 

#13



--1.完整备份
DECLARE @File NVARCHAR(255)
SELECT @File='D:\数据库备份\'+REPLACE(CONVERT(NVARCHAR(10),GETDATE(),120),'-','')+'.bak'
BACKUP DATABASE [数据库] TO DISK = @File  WITH NOFORMAT, INIT,  
    NAME = N'数据库完整备份', 
    SKIP, NOREWIND, NOUNLOAD,  STATS = 10;
GO    
--2.日志备份,截断事务日志
DECLARE @File NVARCHAR(255)
SELECT @File='D:\数据库备份\'+REPLACE(CONVERT(NVARCHAR(10),GETDATE(),120),'-','')+'_Log.bak'
BACKUP LOG [数据库] TO  DISK = @File WITH NOFORMAT, INIT,  
 NAME = N'数据库-事务日志  备份', 
 SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

--3.设置恢复模式为简单
ALTER DATABASE [数据库]
SET RECOVERY SIMPLE;
GO
--4.收缩事务日志
DBCC SHRINKFILE (db_Log, 1);
GO
--5.设置恢复模式为完整
ALTER DATABASE [数据库]
SET RECOVERY FULL;
GO

可参考我的博客文章
http://blog.csdn.net/jamespanjunwei/archive/2011/06/14/6543771.aspx

#14


sp_deattach_db
sp_attach_single_file_db
sp_attach_db
如果日志不需要的话 直接删除
先分离数据库 然后添加数据库即可