开始,因为ramdisk是fat32格式,给tempdb添加文件时,总是报错:
标题: Microsoft SQL Server Management Studio
------------------------------更改 对于 数据库“tempdb”失败。  (Microsoft.SqlServer.Smo)有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.2047.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=更改+Database&LinkId=20476------------------------------
其他信息:执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)------------------------------找不到或无法初始化语句中列出的一个或多个文件。
检查文件 'R:\temp\tempram.ndf' 的扇区大小时出现错误。请将此文件移动到可以从中检索扇区大小的本地 NTFS 卷。有关详细信息,请查看 SQL Server 错误日志。 (Microsoft SQL Server,错误: 5009)有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.1399&EvtSrc=MSSQLServer&EvtID=5009&LinkId=20476------------------------------
按钮:确定
------------------------------于是,千辛万苦(因为内存虚拟文件、临时目录都在上面)把ramdisk改为ntfs了
结果还是这样,搜到(http://topic.csdn.net/t/20041228/16/3682856.html,它是启动时报错,我是参加tempdb数据文件时报错)有说是因为权限不够,但是我的sql启动帐号是system,而且的确对r:盘有所有权限(除了“特别的权限”是灰色无法选中)

解决方案 »

  1.   

    日志对应有:消息
    An unexpected error occurred while checking the sector size for file 'R:\temp\tempram.ndf'. Move the file to a local NTFS volume, where the sector size can be retrieved. Check the SQL Server error log for more information.错误: 5177,严重性: 16,状态: 1。
      

  2.   

    开的ramdisk才2G,tempram文件才设了128M,最多512M
    后来已经转为ntfs了以前sql6.5据说有把tempdb放在内存的选项,7以后反而没有了
      

  3.   

    理论上,这么做是没必要的sql server会自动分配内存,临时表在内存足够的情况下是放在内存的。
      

  4.   

    主要是觉得,虽然os、dbms会利用缓存,但是tempdb毕竟是每次都需要写盘的
    (即使设了滞后写入,也是会实际写一次的)
    这样一来就慢了,而且对硬盘也有磨损
      

  5.   

    6.5不是有把tempdb放在内存的选项,而是必须放在内存,但是就不能太大了你的做法等于是强制将内存给sql server使用,可以考虑设置sql server的最小内存为一个合适的数就可以了注意将太多内存给sql server并不一定提高速度,因为sql server要正常运行也需要其它的资源,比如网络,极端的,内存全部给sql server的结果是sql server不能运行,因为没有其他的支持。
      

  6.   

    主要是希望把对tempdb写操作引发的写盘行为完全消化
    这里会快一些,而且硬盘读写的次数也因此减少因为系统的服务器最近换了一个16G内存的,因为应用数据不算多,dbms一般都只能使用4G左右(启用了awe)
    想利用得彻底一些
      

  7.   

    TEMPDB的文件数据最好和CPU的颗数对应,分配到不同的磁盘上,性能提高的比较彻底一点。
      

  8.   

    最小:4096M
    最大:2147483647M而且,也很难遇到它很快占满最小内存的情况
    只有1次不知道做过什么事情,它启动很快占了4G;其它都是几天也占不到4G
      

  9.   

    将sql server 服务帐号更改为指定一个本地管理员帐号试试(从配置管理器修改,不要从services.msc修改)。
      

  10.   

    http://topic.csdn.net/u/20090313/10/E90163F0-E36C-43A7-81D1-4095C33A5A3E.html
      

  11.   

    我试了下,local system也可以成功。没遇到楼主的问题。
      

  12.   


    哦,这篇让我想起了以前是看到过这个办法(附加)。。彻底忘掉了!谢谢只是不知道对于tempdb,附加的方式行不行。业务库文件放ramdisk(有电池保护也不行,死机不丢数据才行)是不敢的
    只敢把tempdb放ramdisk
      

  13.   


    我的sql启动帐号就是system啊,看了盘、目录的安全权限,都是全部的
      

  14.   

    附:ramdisk和实际硬盘的比较2x4核+3x300G -ramdisk 
    2x4核+3x300G 
    http://www.cndev.org/.imgdb/sn10141/GUID-B732AF5E-A2F4-4AE2-86DA-2D44CD36BFD6.gif
      

  15.   

    2x4核+3x300G 实际硬盘:
      

  16.   

    数据库应用 (thanks dog_come):MS SQL2000, WIN2003/32, 客户端读写都比较多,所以用RAMDISK作为临时表的磁盘,看先看看临时表的磁盘使用规模,再决定使用的RAMDISK大小
    方法如下:
    1、检查tempdb的逻辑名字和它的存在位置。可以使用下面语句:
    Select name, physical_name
    FROM sys.master_files
    Where database_id = DB_ID('tempdb');
    2、暂停数据库服务.
    3、拷贝原来tempdb的文件到新的位置(原来文件位置可以通过上述查询得到)。
    3、拷贝完毕后,启动数据库服务。
    4、执行如下命令:
    USE master;
    GO
    Alter DATABASE tempdb
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\tempdb\tempdb.mdf');
    GO
    Alter DATABASE tempdb
    MODIFY FILE (NAME = templog, FILENAME = 'E:\tempdb\templog.ldf');
    GO
    在这里,name=tempdev 和templog是tempdb的逻辑名字,FileName='E:\temdb\tempdb.mdf'是tempdb的新位置.
    5、最后检查tempdb移动是否成功。需要注意的是最好直接把临时表文件放在RAMDISK的根目录,因为一重启RAMDISK就清空,如果放在目录内启动后目录就没了,SQL服务会出错。——使用上面的做法,是可以把tempdb的路径改到ramdisk了!
    但是!!此时使用的还是原来的2个文件,需要重启数据库才生效
    一关闭数据库,再开就不行了:
    SQL Server (MSSQLSERVER) 服务正在启动 ..
    SQL Server (MSSQLSERVER) 服务无法启动。发生服务特定错误: 1814.请键入 NET HELPMSG 3547 以获得更多的帮助。估计还是tempdb的新文件不能被接受!
    但是,想再改tempdb为原路径,没机会了!!因为数据库不能启动,无法设置也无法执行sql了!!!幸亏是在临时的测试机上,否则就麻烦了。
      

  17.   

    不明白你重新启动后tempdb文件为什么会没有,网上有大量免费ramdisk软件可以关机保存数据的,你用了哪个?
      

  18.   


    这个问题里我都还没重启电脑,(重启电脑的保存脚本是没有问题)
    是sqlserver重启时,认为tempdb的数据文件不可使用:日志如下:
    正在清除 tempdb 数据库。

    检查文件 'r:\tempdb.mdf' 的扇区大小时出现错误。请将此文件移动到可以从中检索扇区大小的本地 NTFS 卷。有关详细信息,请查看 SQL Server 错误日志。
    接着就是
    无法创建 tempdb。可能没有足够的可用磁盘空间。请删除 tempdb 驱动器上的其他文件并重新启动 SQL Server,以释放更多的磁盘空间。请检查事件日志,看其中是否还有其他错误可表明为什么无法初始化 tempdb 文件。情况是:sql2005+win2003,都是32位的企业版。。
    ramdisk设为ntfs了,扇区设512或4096都不行
      

  19.   

    我用的ramdisk软件是gavotteramdisk关机前的保存,需要自己写一个保存数据的脚本
    开机后再自动执行一个恢复数据的脚本
    这2个基本都没有问题,工作得很好tempdb的问题是文件都还存在,但是就不被接受
      

  20.   

    SQL Server啟動時會由Model DB產生出TempDB,接著它會自動把TempDB放置到指定的位置,如果RamDisk的服務晚於SQL Server啟動,這會造成TempDB不知道該放在那邊而造成初始化的嚴重錯誤,為了解決這個問題,考慮設置Batach或是服務相依,讓RamDisk程式或服務總是早於SQL Server啟動,如此一來就能解決這個問題。