收缩数据库

bean_sql 2012-05-04 09:33:45
请教下各位;
客户服务器上的数据库说越来越大,
备份下来由1个G,
当客户把数据库给我时,
我附加后 再备份下 发现是文件只有450M,
当我有压缩备份后 文件只有200M,
请问下是不是因为服务器上日志的原因,
如果是日志的原因,
以下这段代码是否能够解决

--在sql server 2008上,收缩日志之前必须把数据备份等级设置为simple(简单),切记!

ALTER DATABASE your_database_name SET RECOVERY SIMPLE
GO

-- 收缩
DBCC SHRINKFILE (2,30) --30单位为M,日志文件的大小
GO

-- 更改模式为FULL ,再改回来,如果本身就已是simple,那就不必要了
ALTER DATABASE your_database_name SET RECOVERY FULL
GO


...全文
158 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

SQL code

select name from sys.database_files WHERE type_desc = 'LOG'


查到你要收缩的数据库日志名字,然后替换语句中的文件名就行了。
前提是在当前数据库下执行上面的语句
[/Quote]
楼主结贴吧,顺便膜拜一下这位大婶。
孤独加百列 2012-05-04
  • 打赏
  • 举报
回复

select name from sys.database_files WHERE type_desc = 'LOG'

查到你要收缩的数据库日志名字,然后替换语句中的文件名就行了。
前提是在当前数据库下执行上面的语句
bean_sql 2012-05-04
  • 打赏
  • 举报
回复
黄_瓜 2012-05-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

小爱的脚本我用数据库日志名放进去 提示找不到文件或被删除
-------------------------------------------------------
问题里提到的脚本无效,
发现时用户的原因,本地我用sa账户是ok的
但是服务器是自定义账户,应该是没有权限 ...

引用 10 楼 的回复:

收缩没必要 更改数据库数据模型吧


你是不是文件找错了 ……
[/Quote]
蠢货
bean_sql 2012-05-04
  • 打赏
  • 举报
回复
小爱的脚本我用数据库日志名放进去 提示找不到文件或被删除
-------------------------------------------------------
问题里提到的脚本无效,
发现时用户的原因,本地我用sa账户是ok的
但是服务器是自定义账户,应该是没有权限 ...

[Quote=引用 10 楼 的回复:]

收缩没必要 更改数据库数据模型吧


你是不是文件找错了 sys.database_files 看一下文件名字。

SQL code
USE 数据库
GO
DBCC SHRINKFILE (N'文件名' , 1)
GO
[/Quote]
黄_瓜 2012-05-04
  • 打赏
  • 举报
回复
收缩没必要 更改数据库数据模型吧


你是不是文件找错了 sys.database_files 看一下文件名字。

USE 数据库
GO
DBCC SHRINKFILE (N'文件名' , 1)
GO
bean_sql 2012-05-04
  • 打赏
  • 举报
回复
在服务器里面执行无效..
bean_sql 2012-05-04
  • 打赏
  • 举报
回复

发现我放在问题里的脚本不能用
bean_sql 2012-05-04
  • 打赏
  • 举报
回复

数据库占用300M
日志占用800M
[Quote=引用 4 楼 的回复:]

学习。给你的1g里面 你看看你日志有多大
[/Quote]
小飛不想飛 2012-05-04
  • 打赏
  • 举报
回复
LZ可以的話結貼給分吧..我在線接著呢..
黄_瓜 2012-05-04
  • 打赏
  • 举报
回复
日志文件可以定期shrink,但是数据模式一般不要设置为simple
纯订阅、存放临时性数据的数据库可以设置为simple
黄_瓜 2012-05-04
  • 打赏
  • 举报
回复
学习。给你的1g里面 你看看你日志有多大
bean_sql 2012-05-04
  • 打赏
  • 举报
回复
非常感谢...
[Quote=引用 2 楼 的回复:]

SQL code

LZ上面的方法可以,我下面還有幾種方法,LZ可以看看
方法一:
--BigData为数据库名(該方法在SQL2008無效)
DUMP TRANSACTION BigData WITH NO_LOG
BACKUP LOG BigData WITH NO_LOG
DBCC SHRINKDATABASE(BigData )
方法二:
USE BigData;
GO
BACKUP ……
[/Quote]
小飛不想飛 2012-05-04
  • 打赏
  • 举报
回复

LZ上面的方法可以,我下面還有幾種方法,LZ可以看看
方法一:
--BigData为数据库名(該方法在SQL2008無效)
DUMP TRANSACTION BigData WITH NO_LOG
BACKUP LOG BigData WITH NO_LOG
DBCC SHRINKDATABASE(BigData )
方法二:
USE BigData;
GO
BACKUP LOG DATABASENAME TO DISK='d:\test.bak'
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (Bigdata_Log, 1);
GO
方法三:
use DB_NAME
sp_dboption DB_NAME, "trunc. log on chkpt.", true
checkpoint
sp_dboption DB_NAME, "autoshrink", true
--每一行指令请单独执行。其中的DB_NAME是指Database Name,在下完语法后的数小时至数十小时,该LOG档会逐渐释放空间,最后大约都会维持在数1024KB左右

僅供參考哦
昵称被占用了 2012-05-04
  • 打赏
  • 举报
回复
试下嘛

如果一般情况下,设置简单模式不必修改回来,就不必过一段时间收缩一次了

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧