代码改变世界

如何备份SQLServer到网络共享

2023-03-26 15:18  abce  阅读(2415)  评论(0编辑  收藏  举报

首选和最直接的方法是简单地创建数据库的本地备份,然后将相应的备份文件复制到网络共享。你可以通过创建一个像这样的批处理脚本来做到这一点:

SET LocalFolder=C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLBackup
SqlCmd -E -Q "Backup Database MyDB To Disk='%LocalFolder%MyDB.bak'"
XCopy "%LocalFolder%MyDB.bak" "\192.168.16.55BackupDatabases" /Z /V
DEL "%LocalFolder%MyDB.bak"

包含了以下的主要内容:
1.设置一个变量,定义了本地备份目录
2.创建一个备份,备份到本地目录
3.拷贝备份文件到网络共享存储
4.删除本地的备份

首选这种方法是因为它可以开箱即用,并且由于备份是在本地磁盘上创建的,因此备份失败的可能性很小。但是,如果没有足够的磁盘空间来存储备份文件的本地副本,则此操作将失败。在这种情况下,将需要添加额外的磁盘空间或直接备份到网络共享存储。

 

 

直接备份到网络共享存储
比如:

SqlCmd -E -Q "Backup Database MyDB To Disk='\192.168.16.55BackupDatabasesMyDB.bak'"

不过,你可能会遇到下面的错误:

Msg 3201, Level 16, State 1, Server JF, Line 1
Cannot open backup device '\192.168.16.55BackupDatabasesMyDB.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Server JF, Line 1
BACKUP DATABASE is terminating abnormally.

尽管你使用Windows身份验证和Windows帐户作为通过Windows资源管理器访问和复制文件到共享的能力运行SQL备份命令,但仍会出现此错误。

此操作失败的原因是SQL命令是在运行SQL Server服务的帐户范围内执行的。当在计算机上查看服务列表时,很可能会看到SQL Server服务运行为(登录为列)本地系统或网络服务(Local System或Network Service),他们是没有网络访问权限的系统帐户。
在我们的系统上,对网络共享命令的备份失败,因为SQL Server服务作为本地系统(Local System)运行,同样不能访问任何网络资源。

为了允许SQL直接备份到网络共享,我们必须将SQL Server服务作为一个能够访问网络资源的本地帐户运行。编辑SQL Server服务的属性,并在"登录"选项卡中,将该服务配置为具有网络访问权限的备用帐户。

当单击OK时,将得到一个提示,提示设置直到重新启动服务才会生效。

重启

现在应该显示SQL Server服务使用你配置的帐户运行。

现在就可以执行上面的备份操作了。

SqlCmd -E -Q "Backup Database MyDB To Disk='\192.168.16.55BackupDatabasesMyDB.bak'"

会看到如下成功的消息:

Processed 152 pages for database 'MyDB', file 'MyDB' on file 1.
Processed 2 pages for database 'MyDB', file 'MyDB_log' on file 1.
BACKUP DATABASE successfully processed 154 pages in 0.503 seconds (2.493 MB/sec).

在网络共享中也可以看到备份的文件了。

需要注意的是,备份命令希望能够直接连接到网络共享,而不需要提示输入凭据。你配置运行SQL Server服务的帐户必须与各自凭据允许访问的网络共享具有可信连接,否则可能会发生这样的错误:

Msg 3201, Level 16, State 1, Server JF, Line 1
Cannot open backup device '\192.168.16.55BackupDatabasesMyDB.bak'. Operating system error 1326(Logon failure: unknown user name or bad password.).
Msg 3013, Level 16, State 1, Server JF, Line 1
BACKUP DATABASE is terminating abnormally.

此错误表明该帐户的用户名和密码不被网络共享接受,命令执行失败。

 

另一个需要记住的问题是,备份是直接对网络资源执行的,因此网络连接中的任何故障都可能导致备份失败。因此,应该只备份到稳定的网络位置。