none
请教个关于SQL2005 使用网络服务器磁盘存数据库文件的问题 RRS feed

  • 问题

  • 我现在想用一台服务器跑SQL2005的服务,但数据库文件存放在另外一台服务器的磁盘上。

    我现在是先映射了一个网络驱动器,但修改文件位置的时候,他报下面的错误,麻烦高手帮忙看下:

    消息 5110,级别 16,状态 2,第 1 行
    文件 "Z:\incr\incrv8" 位于数据库文件不支持的网络路径上。
    消息 942,级别 14,状态 4,第 1 行
    由于数据库 'incrv8' 离线,无法打开该数据库。

    映射命令:exec master..xp_cmdshell 'net use Z: \\192.168.1.2\G "password" /user:192.168.1.2\test'

    修改命令:ALTER DATABASE incrv8 SET OFFLINE

    ALTER DATABASE incrv8 MODIFY FILE ( NAME = incrv8, FILENAME = 'Z:\incr\incrv8')

     

    2010年8月5日 6:38

答案

  • SQL Server 2008 第二版 10.50 可以支持把用户数据库放在file share上。 例如

    Create database myDB

    on

    (name=myDb_Data, filename='\\server1\share1\myDb_Data.mdf')

    log on

    (name=myDb_Log, filename='\\server1\share1\myDb_Log.ldf')

    类似的还支持Alter database modify file, Alter database add file.

    2010年8月5日 10:18
  • 我现在想用一台服务器跑SQL2005的服务,但数据库文件存放在另外一台服务器的磁盘上。

    我现在是先映射了一个网络驱动器,但修改文件位置的时候,他报下面的错误,麻烦高手帮忙看下:

    消息 5110,级别 16,状态 2,第 1 行
    文件 "Z:\incr\incrv8" 位于数据库文件不支持的网络路径上。
    消息 942,级别 14,状态 4,第 1 行
    由于数据库 'incrv8' 离线,无法打开该数据库。

    映射命令:exec master..xp_cmdshell 'net use Z: \\192.168.1.2\G "password" /user:192.168.1.2\test'

    修改命令:ALTER DATABASE incrv8 SET OFFLINE

    ALTER DATABASE incrv8 MODIFY FILE ( NAME = incrv8, FILENAME = 'Z:\incr\incrv8')

     

    xp_cmdshell  的映射是在你这个会话中生效的, 你应该先彻底解决 sql server 访问共享目录的问题, 否则即使你通过一些手段修改成功, 也无法正常使用数据库.

    sql server 要访问共享目录, 首先需要使用指定的用户(不是 local system 这样的内置用户), 如果是域用户, 那么这个用户当然要有访问共享目录的权限

    如果不是域用户, 那么你需要在两台 Server 上使用同名同密码的用户.

    2010年8月6日 4:49

全部回复

  • sql server 是不支持网络共享磁盘存储数据库的

    当然有些非官方的技巧可以通过修改磁盘位置把数据库移动到网络共享磁盘上。

    这样做没其实没多少好处,磁盘访问受制于网络,对性能没好处。

    要么放一起或者买个阵列,现在便宜的存储也很多哈。比你单独的一台服务器贵不了多少。

     


    family as water
    2010年8月5日 7:59
  • 恩。。确实是这样。

    但现在主要是存储还没到(需要到年底),但又急需用到应用。

    所以就考虑使用这个方法了。

    谢谢给予建议

    2010年8月5日 8:59
  • SQL Server 2008 第二版 10.50 可以支持把用户数据库放在file share上。 例如

    Create database myDB

    on

    (name=myDb_Data, filename='\\server1\share1\myDb_Data.mdf')

    log on

    (name=myDb_Log, filename='\\server1\share1\myDb_Log.ldf')

    类似的还支持Alter database modify file, Alter database add file.

    2010年8月5日 10:18
  • You can do that but sql will suspect database if unable to access it in proper speed.
    2010年8月5日 13:06
  • 可以用iscsi来变通处理,存储到远程去
    2010年8月6日 1:33
    版主
  • 我现在想用一台服务器跑SQL2005的服务,但数据库文件存放在另外一台服务器的磁盘上。

    我现在是先映射了一个网络驱动器,但修改文件位置的时候,他报下面的错误,麻烦高手帮忙看下:

    消息 5110,级别 16,状态 2,第 1 行
    文件 "Z:\incr\incrv8" 位于数据库文件不支持的网络路径上。
    消息 942,级别 14,状态 4,第 1 行
    由于数据库 'incrv8' 离线,无法打开该数据库。

    映射命令:exec master..xp_cmdshell 'net use Z: \\192.168.1.2\G "password" /user:192.168.1.2\test'

    修改命令:ALTER DATABASE incrv8 SET OFFLINE

    ALTER DATABASE incrv8 MODIFY FILE ( NAME = incrv8, FILENAME = 'Z:\incr\incrv8')

     

    xp_cmdshell  的映射是在你这个会话中生效的, 你应该先彻底解决 sql server 访问共享目录的问题, 否则即使你通过一些手段修改成功, 也无法正常使用数据库.

    sql server 要访问共享目录, 首先需要使用指定的用户(不是 local system 这样的内置用户), 如果是域用户, 那么这个用户当然要有访问共享目录的权限

    如果不是域用户, 那么你需要在两台 Server 上使用同名同密码的用户.

    2010年8月6日 4:49
  • 另外, 跨服务器的稳定性的读写效率始终是得不到保障的, 这样的做法可能导致你的数据库工作不稳定, 并且你可能要随时面临因为不稳定而产生的数据库损坏的情况.

    所以, 并不推荐你这样做.

    2010年8月6日 4:51
  • You can do that but sql will suspect database if unable to access it in proper speed.


    thank u for ur answer. ^_^

    2010年8月9日 8:19
  • SQL Server 2008 第二版 10.50 可以支持把用户数据库放在file share上。 例如

    Create database myDB

    on

    (name=myDb_Data, filename='\\server1\share1\myDb_Data.mdf')

    log on

    (name=myDb_Log, filename='\\server1\share1\myDb_Log.ldf')

    类似的还支持Alter database modify file, Alter database add file.

    谢谢 因为大多数应用暂时还基于SQL2005,升级2008暂时还没办法了。。呵呵
    2010年8月9日 8:27
  • 我现在想用一台服务器跑SQL2005的服务,但数据库文件存放在另外一台服务器的磁盘上。

    我现在是先映射了一个网络驱动器,但修改文件位置的时候,他报下面的错误,麻烦高手帮忙看下:

    消息 5110,级别 16,状态 2,第 1 行
    文件 "Z:\incr\incrv8" 位于数据库文件不支持的网络路径上。
    消息 942,级别 14,状态 4,第 1 行
    由于数据库 'incrv8' 离线,无法打开该数据库。

    映射命令:exec master..xp_cmdshell 'net use Z: \\192.168.1.2\G "password" /user:192.168.1.2\test'

    修改命令:ALTER DATABASE incrv8 SET OFFLINE

    ALTER DATABASE incrv8 MODIFY FILE ( NAME = incrv8, FILENAME = 'Z:\incr\incrv8')

     

    xp_cmdshell  的映射是在你这个会话中生效的, 你应该先彻底解决 sql server 访问共享目录的问题, 否则即使你通过一些手段修改成功, 也无法正常使用数据库.

    sql server 要访问共享目录, 首先需要使用指定的用户(不是 local system 这样的内置用户), 如果是域用户, 那么这个用户当然要有访问共享目录的权限

    如果不是域用户, 那么你需要在两台 Server 上使用同名同密码的用户.


    恩。。确实SQL访问共享目录的问题是关键。

    我想问下,SQL访问共享目录的帐号是否就是SQL的启动帐号呢?

    谢谢

    2010年8月9日 8:29
  • 另外, 跨服务器的稳定性的读写效率始终是得不到保障的, 这样的做法可能导致你的数据库工作不稳定, 并且你可能要随时面临因为不稳定而产生的数据库损坏的情况.

    所以, 并不推荐你这样做.


    那如果是群集方案的话,共享磁盘是不是也存在同样的风险呢?

    2010年8月9日 8:32
  • 我现在想用一台服务器跑SQL2005的服务,但数据库文件存放在另外一台服务器的磁盘上。

    我现在是先映射了一个网络驱动器,但修改文件位置的时候,他报下面的错误,麻烦高手帮忙看下:

    消息 5110,级别 16,状态 2,第 1 行
    文件 "Z:\incr\incrv8" 位于数据库文件不支持的网络路径上。
    消息 942,级别 14,状态 4,第 1 行
    由于数据库 'incrv8' 离线,无法打开该数据库。

    映射命令:exec master..xp_cmdshell 'net use Z: \\192.168.1.2\G "password" /user:192.168.1.2\test'

    修改命令:ALTER DATABASE incrv8 SET OFFLINE

    ALTER DATABASE incrv8 MODIFY FILE ( NAME = incrv8, FILENAME = 'Z:\incr\incrv8')

     

    xp_cmdshell  的映射是在你这个会话中生效的, 你应该先彻底解决 sql server 访问共享目录的问题, 否则即使你通过一些手段修改成功, 也无法正常使用数据库.

    sql server 要访问共享目录, 首先需要使用指定的用户(不是 local system 这样的内置用户), 如果是域用户, 那么这个用户当然要有访问共享目录的权限

    如果不是域用户, 那么你需要在两台 Server 上使用同名同密码的用户.


    恩。。确实SQL访问共享目录的问题是关键。

    我想问下,SQL访问共享目录的帐号是否就是SQL的启动帐号呢?

    谢谢

    Yes, sql service account needs permission on shared folder.
    2010年8月9日 13:58
  • 另外, 跨服务器的稳定性的读写效率始终是得不到保障的, 这样的做法可能导致你的数据库工作不稳定, 并且你可能要随时面临因为不稳定而产生的数据库损坏的情况.

    所以, 并不推荐你这样做.


    那如果是群集方案的话,共享磁盘是不是也存在同样的风险呢?

    No, cluster uses SAN as local disk through storage link. It's different from use unc name through network.
    2010年8月9日 14:01
  • 另外, 跨服务器的稳定性的读写效率始终是得不到保障的, 这样的做法可能导致你的数据库工作不稳定, 并且你可能要随时面临因为不稳定而产生的数据库损坏的情况.

    所以, 并不推荐你这样做.


    那如果是群集方案的话,共享磁盘是不是也存在同样的风险呢?

    No, cluster uses SAN as local disk through storage link. It's different from use unc name through network.

    rmiao..thx very much..

    abut the storage, i'm not good at it. i think i need to read much more.

    2010年8月9日 15:06