SQL2005的TEMPDB怎样转移到其他盘符

zhengdows 2010-04-10 04:52:43
我们的数据库设置了两台服务器的合并复制,由于需要复制的表的数据量很大,所以导致TEMPDB经常占用很多的空间,有时候TEMPDB所在的盘符空间没有了,TEMPDB又不能SHRINK,请问能不能把它转移到其他盘符?
我在ManagementStudio中看,好象TEMPDB不能分离和附加,如果停止服务,把文件剪切到其他位置,又怕系统不能正常启动,请问有没有其他的办法?
...全文
1047 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcw321321 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 htl258 的回复:]
SQL code
SQL2005/2008 tempdb数据库路径的转移
--By :Tony

1.停止SQL服务

2.复制 tempdb数据库的两个文件(.mdf/.ldf) 到新文件夹,如(D:\tempdb)

3.启动SQL服务

4.打开SQL Server Management Studio,执行以下代码:

USE master;
GO
ALTER……
[/Quote]

我发现直接使用
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\tempdb\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\tempdb\templog.ldf');
GO

下次SQL 重启就改过来了,不知道LS牛人们为什么需要那么多步骤,还请多多指教。
cxmcxm 2010-04-10
  • 打赏
  • 举报
回复
笨办法,分离数据库,重装数据库到别的位置,再附加数据库.
清风智语 2010-04-10
  • 打赏
  • 举报
回复
如果不停止的情况下可以考虑为其增加一个ndf文件,将ndf至于其他的驱动器上
Mr_Nice 2010-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 htl258 的回复:]
SQL code
SQL2005/2008 tempdb数据库路径的转移
--By :Tony

1.停止SQL服务

2.复制 tempdb数据库的两个文件(.mdf/.ldf) 到新文件夹,如(D:\tempdb)

3.启动SQL服务

4.打开SQL Server Management Studio,执行以下代码:

USE master;
GO
ALTER……
[/Quote]

up
feixianxxx 2010-04-10
  • 打赏
  • 举报
回复
htl258_Tony 2010-04-10
  • 打赏
  • 举报
回复
SQL2005/2008 tempdb数据库路径的转移
--By :Tony

1.停止SQL服务

2.复制 tempdb数据库的两个文件(.mdf/.ldf) 到新文件夹,如(D:\tempdb)

3.启动SQL服务

4.打开SQL Server Management Studio,执行以下代码:

USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\tempdb\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\tempdb\templog.ldf');
GO

5.再次停止SQL服务

6.删除原tempdb旧文件

7.再次启动SQL服务,大功告成。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/04/10/5471174.aspx
--小F-- 2010-04-10
  • 打赏
  • 举报
回复
SQL Server会自动创建一个名为tempdb的数据库作为工作空间使用,当您在存储过程中创建一个临时表格时,比如(CREATE TABLE #MyTemp),无论您正在使用哪个数据库,SQL数据库引擎都会将这个表格创建在tempdb数据库中。


SQL Server会自动创建一个名为tempdb的数据库作为工作空间使用,当您在存储过程中创建一个临时表格时,比如(CREATE TABLE #MyTemp),无论您正在使用哪个数据库,SQL数据库引擎都会将这个表格创建在tempdb数据库中。

而且,当您对大型的结果集进行排序,比如使用ORDER BY或GROUP BY或UNION或执行一个嵌套的SELECT时,如果数据量超过了系统内存容量,SQL数据库引擎就会在tempdb中创建工作表格。在您运行DBCC REINDEX或者向现有的表格中添加集群序列时, SQL数据库引擎同样会使用tempdb。实际上,任何针对大型表格的ALTER TABLE命令都会在tempdb中吃掉大量的磁盘空间。

在理想状态下,SQL会在完成指定操作后自动清理,并销毁这些临时表格,但是,很多问题都会导致错误。比如,您的代码创建了一个事务,但是却没能执行或重新运行,那么这些孤儿对象将遗留在tempdb中。而且,对大型数据库运行DBCC CHECK时,它还会消耗掉大量的空间,您往往会发现tempdb比设想的要大很多,甚至还会收到SQL即将用完磁盘空间的出错信息。

您有很多方法可以来修正这一情况,但从长远看来,您需要执行其它的步骤来保证正常使用。

为tempdb“减肥”最简单的办法就是关闭SQL数据库引擎然后重新启动,但是在重要的任务中,这样做可能难度很大;另一方面,如果您已经处于无法承受的状态,那么我的建议就是将这个坏消息告知您的上司,然后开始操作。

如果您幸运拥有另外一块磁盘可以用来放置tempdb,可以进行如下的操作:

USE master

GO

ALTER DATABASE tempdb modify file (name = tempdev, filename = NewDrive:Pathtempdb.mdf )

GO

ALTER DATABASE tempdb modify file (name = templog, filename = NewDrive:Pathtemplog.ldf )

GO

还有三项关于tempdb的属性应该检查:自动增长标记,初始大小和恢复模式,以下是关于这些属性的小窍门:

自动增长标记:记住将这个标记设为True。

初始大小:tempdb的初始大小要根据常用的工作负载来设定,如果有很多用户在使用GROUP BY、ORDER BY或者对大型表格进行聚合操作,那么您的常用工作负载会相当大。如果服务器脱机时,您可能需要检查日志文件与数据文件是否位于同一磁盘,如果这样的话,应当将需要将它们转移到新的磁盘上,您只需指明相应的数据库并使用相同的命令即可。

恢复模式:将恢复模式设定为True意味着让SQL自动截去tempdb的日志文件(在使用了每个表格之后),要找出tempdb所使用的恢复模式,可以使用如下命令:

SELECT DATABASEPROPERTYEX( tempdb , recovery )

恢复模式有三种选择:简单、完整或大量记录(bulk-logged),如要改变设置,可以使用以下命令:

ALTER DATABASE tempdb SET RECOVERY SIMPLE

这些步骤可以优化您系统中使用的tempdb,除了解决磁盘空间问题外,您还会发现SQL Server系统性能的提升。

34,838

社区成员

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

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