【问题标题】:Restore database backup over the network通过网络恢复数据库备份
【发布时间】:2010-09-06 04:48:32
【问题描述】:

如何通过网络使用 SQL Server 2005 恢复数据库备份?我记得以前这样做过,但你必须这样做的方式有些奇怪。

【问题讨论】:

    标签: sql-server database sql-server-2005 backup restore


    【解决方案1】:

    您几乎没有选择将网络文件用作备份源

    1. 映射网络驱动器/路径,托管文件,在与 MS-SQL Server 相同的用户下。
    2. 使用 xp_cmdshell 扩展存储过程从 MS SQL 内部映射网络驱动器(这样,命令 shell 将具有与运行 SSMS 的用户帐户相同的权限)
    -- allow changes to advanced options 
    EXEC sp_configure 'show advanced options', 1
    GO
    -- Update currently configured values for advanced options.
    RECONFIGURE
    GO
    -- To enable xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    -- Update currently configured values for advanced options.
    RECONFIGURE
    GO
    EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'
    

    之后驱动器 Z:将在服务器管理工​​作室中可见,或者只是

    RESTORE DATABASE DataBaseNameHere FROM DISK = 'Z:\BackNameHere.BAK'
    GO
    

    【讨论】:

    • 使用 SQL Server 当前服务用户调用 NET USE 可以解决问题。这个答案真的很有用。
    • 这是完美的。这是我们问题的解决方案:完全的 MSSQL 访问,但没有文件服务器访问。需要一个副本。如何?这就是解决方案。
    • 之后您是否需要运行EXEC sp_configure 'xp_cmdshell', 0 之类的东西来禁用xp_cmdshell? (出于安全原因或其他原因)。
    • 在管理工作室中生成 Windows 命令外壳非常酷。我认为值得一提的是,命令 shell 将以 same privilegies 作为运行 SSMS 的用户帐户。
    • @JimAho 我认为,从 MS SQL Server 启动的命令 shell 是一个很大的安全问题。但他们实现了它,以解决功能缺失或其他架构问题。其他 SQL 服务器不需要管理员权限或生成命令 shell 来执行常规任务,例如恢复备份...
    【解决方案2】:

    数据库通常在没有网络访问权限的帐户下作为服务运行。如果是这种情况,那么您将无法直接通过网络进行恢复。要么需要将备份复制到本地计算机,要么需要以具有适当网络访问权限的用户身份运行数据库服务。

    【讨论】:

    【解决方案3】:

    您无法通过 SSMS GUI 执行此操作,但您可以使用脚本执行此操作。 RESTORE DATABASE from DISK='\unc\path\filename' 如果您需要自动执行此过程,最好的方法是设置 SQL Server 作业并以有权访问文件位置的用户身份运行它。

    【讨论】:

    • 这不是真的。只要您在打开“恢复数据库...”对话框之前映射了网络驱动器,就可以通过网络恢复它。
    • SQL 2005 或 SQL 2008 工具并非如此
    【解决方案4】:

    确保在"Services.msc" 中运行SQL services 的用户是活动目录"Domain User" 这将解决问题。

    【讨论】:

      【解决方案5】:

      您可以使用SP xp_cmdshell 为sql server 映射网络驱动器,然后它将显示在文件浏览窗口中。

      EXEC xp_cmdshell 'NET USE Z: SERVERLOCATION PASSWORD /USER:DOMAIN\USERNAME'
      

      更多信息在这里:DB Restore from Network Drive

      为我工作!

      【讨论】:

        【解决方案6】:

        我不得不这样做几次,我只知道两个选项。将文件本地复制到 SQL Server,或在 SQL Server 上创建映射网络驱动器到包含备份文件的共享。

        【讨论】:

          【解决方案7】:

          此外,您需要确保 SQL Server 服务以具有网络访问权限的用户身份运行 - 以及对备份文件所在共享的权限。 “本地系统”将无权访问网络。

          【讨论】:

            【解决方案8】:

            附带说明,如果您碰巧在虚拟机上运行 SQL,只需在虚拟机上临时设置一个具有足够空间来复制您的备份文件的新驱动器,然后从该新驱动器进行恢复,通常就不会那么麻烦了本地副本,然后删除临时驱动器。

            如果停止/启动 SQL 服务以更改其帐户是一个问题,这可能很有用。

            【讨论】:

              【解决方案9】:

              在有备份的机器上创建一个共享驱动器,比如 server1 在文件夹“Backups”中有备份。将完全控制权授予运行 SQL Server 的帐户。在要还原以启动 SSMS 的服务器上,还原数据库并选择“从设备”。在“查找备份文件-”服务器“”对话框中,删除“选定路径”字段中的任何内容,并在“文件名”字段中提供完整路径,以便“\server\backups\db.bak”。至少在从 05 迁移到 08 时它对我有用。不是首选方法,因为任何网络故障都可能导致还原问题。

              【讨论】:

                【解决方案10】:
                EXEC sp_configure 'show advanced options', 1
                GO
                

                -- 更新高级选项的当前配置值。

                RECONFIGURE
                GO
                -- To enable xp_cmdshell
                EXEC sp_configure 'xp_cmdshell', 1
                GO
                

                -- 更新高级选项的当前配置值。

                RECONFIGURE
                GO
                

                --这应该在命令提示符(cmd)上运行

                NET USE Z: \\172.100.1.100\Shared Password /USER:administrator /Persistent:no
                

                然后在 SQL Server 上

                EXEC xp_cmdshell 'NET USE Z: \\172.100.1.100\Shared Password /USER:administrator /Persistent:no'
                

                --之后驱动器 Z: 将在服务器管理工​​作室中可见,或者只是

                RESTORE DATABASE DB FROM DISK = 'Z:\DB.BAK'
                WITH REPLACE
                

                【讨论】:

                猜你喜欢
                • 2022-06-16
                • 2014-01-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多