收缩数据库出现“不能收缩 ID 为 2 的数据库中 ID 为 1 的文件,因为它正由其他进"

showwzl 2011-07-10 10:27:07
收缩数据库出现“不能收缩 ID 为 2 的数据库中 ID 为 1 的文件,因为它正由其他进"

这个问题该怎么处理啊!tempdb太多收缩去报错。求高人指点,重启不行!!!
...全文
714 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cd731107 2011-07-10
  • 打赏
  • 举报
回复
还有一个笨办法,先复制一个干净tempdb数据库文件,再启动到安全模式下替换一下试试,
原来的那个最好重命名一下,不要直接替换
cd731107 2011-07-10
  • 打赏
  • 举报
回复
问题原因:tempdb是SQL Server 2000中非常重要的一个系统数据库,这个数据库没有办法使用数据库维护计划来进行收缩。如果tempdb数据库日志满了后,会造成数据库备份失败、数据库无法写入数据等问题,因此,tempdb数据库和日志的收缩的日常维护就显得非常重要。

问题解决:我们不能使用维护计划来收缩tempdb数据库和日志文件,可以采用SQL脚本的方法,使用Agent作业来实现。

企业管理器—管理—SQL Server代理—作业,新建一个作业。

名称:tempdb 日志清除,收缩数据库

步骤:shrik 内容:

use tempdb
go
dbcc shrinkfile(tempdev,truncateonly)
dbcc shrinkfile(templog,truncateonly)

调度:每天早上6:00执行。

注意:我们公司的试验服务器安装的是SQL Server 2005,同样出现了tempdb日志已满的问题,使用上面的脚本却没有办法执行成功。后来发现这个数据库tempdb的故障还原模型被改成了“完全”。只要把tempdb的故障还原模型改回“简单”,再执行上面的SQL脚本就可以了。如果还不行,就需要使用SQL的单用户模式启动SQL,启动方法:开始—运行,输入“services.msc”,回车,找到服务MSSQLSERVER,先停止该服务,再在启动参数中写入“-c -m”,再点“启动”,启动SQL服务。然后再执行相应的操作即可。最后别忘了把启动参数去掉,再重启SQL及相关的服务,最重要的是Agent。

showwzl 2011-07-10
  • 打赏
  • 举报
回复
tempdb.mdf 竟然有50个G 这该怎么是好!!!!
showwzl 2011-07-10
  • 打赏
  • 举报
回复
tempdb能收缩啊,右键—》任务—》收缩
或者
use tempdb
go

dbcc shrinkfile (tempdev, 'target size in MB')
go
-- this command shrinks the primary data file

dbcc shrinkfile (templog, 'target size in MB')

但是,今天我执行右键方式收缩的时候,不小心异常关掉了收缩窗体。
然后在重新右键收缩,根本不显示收缩框
用语句收缩,就提示
不能收缩 ID 为 2 的数据库中 ID 为 1 的文件,因为它正由其他进。
Zoezs 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 showwzl 的回复:]
不能收缩 ID 为 2 的数据库中 ID 为 1 的文件,因为它正由其他进。
这个问题怎么搞定呢???
[/Quote]
tempdb不能直接被收缩
老潘 2011-07-10
  • 打赏
  • 举报
回复
重启SQLSever服务,tempdb会释放空间
showwzl 2011-07-10
  • 打赏
  • 举报
回复
不能收缩 ID 为 2 的数据库中 ID 为 1 的文件,因为它正由其他进。
这个问题怎么搞定呢???
Zoezs 2011-07-10
  • 打赏
  • 举报
回复
use tempdb
go
sp_helpfile
go

结果如下:
tempdev 1 E:\SQLTemp\tempdb.mdf PRIMARY 102400 KB 102400 KB 10% data only
templog 2 E:\SQLTemp\templog.ldf NULL 25728 KB 102400 KB 10% log only

第二,使用sys.master_files;

use master
go
select * from sys.master_files where name like 'temp%'

结果为:

2 1 NULL 0 ROWS 1 tempdev E:\SQLTemp\tempdb.mdf 0
2 2 NULL 1 LOG 0 templog E:\SQLTemp\templog.ldf 0

上面是已经修改过的地址,tempdb的修改只能通过如下方式来进行:


use mastergoAlter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')goAlter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')go运行完上述命令后,还需要重启实例,方能生效。
Zoezs 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 showwzl 的回复:]
占用C盘太大,C盘空间不够了. 必须的收缩啊! 现在是收缩也收缩不了!
[/Quote]
你重启下sql的service tempdb就没有了。你可以吧tempdb放在别的盘。、
showwzl 2011-07-10
  • 打赏
  • 举报
回复
占用C盘太大,C盘空间不够了. 必须的收缩啊! 现在是收缩也收缩不了!
-晴天 2011-07-10
  • 打赏
  • 举报
回复
tempdb 是系统数据库,用不着收缩的.

34,591

社区成员

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

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