我希望使用预定的批处理文件对我的SQL Server数据库进行完整备份。我从这个网站尝试了很多代码,但没有任何效果。我只是想知道哪个exe文件实际创建了备份,所以我可以直接从cmd执行该文件。我试过的代码是
echo -- BACKUP DATABASE --
set /p DATABASENAME=Enter database name:
:: filename format Name-Date (eg MyDatabase.bak)
set BACKUPFILENAME=%CD%\%DATABASENAME%.bak
set SERVERNAME='server name'
echo.
sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK =
N'%BACKUPFILENAME%' WITH INIT , NOUNLOAD,
NAME = N'%DATABASENAME% backup', NOSKIP , STATS = 10, NOFORMAT"
我也试过这个
SqlCmd -E -S sql 'server_name' –Q “BACKUP DATABASE 'db_name' TO DISK=’f:\2014\02\19\db_name.bak’”
答案 0 :(得分:1)
我只是想知道哪个exe文件实际创建了备份,因此我可以直接从cmd执行该文件。
你不了解sql server是如何工作的,对吗?
运行备份的文件是您无法在命令行执行的服务器可执行文件 - 它基本上是运行数据库服务器并等待执行sql命令的exe - 或者同时执行100时间,或1000,它没有限制。
Sql server是一个合适的服务器,而不是一些很棒的小型数据库系统。
在上面的示例中:
SqlCommand是一个sql server附带的工具(它是sqlcommand.exe),用于向ALREADY RUNING sql server发送命令。
您发送的命令是“BACKUP DATABASEW,它告诉已经运行的服务器组成一个数据库。无论谁做了两个人都没有真正花费一分钟思考。
我不知道你在互联网上看到了什么,但语法是
http://technet.microsoft.com/en-us/library/ms186865(v=sql.100).aspx
为您的特定版本。
我建议你试一试。不要使用SqlCmd,请使用sql management studio。尝试让它工作 - 咳嗽 - 如果它失败了,请阅读并修复它所说的内容。如果您没有理解错误消息请求帮助,但是,嘿,没有错误消息,我们有点想法,你知道。一旦工作,就将其移植到您的批次中。
请注意,备份是服务器发送的命令。所以你的路径不是你的路径,而是来自服务器。在服务器身份下。没有用户映射的网络路径。
来自copmmand系列的正确方法确实是使用SqlCmd。现在,我不知道你喜欢你的服务器是多么不安全,但我需要一个密码。因此,我认为您从未打扰过阅读sqlcommand语法。它在
http://technet.microsoft.com/en-us/library/ms162773.aspx
我也很确定SqlCommand会给你一个错误输出,你只是好心,假设我们都有阅读你的思想的礼物 - 跳过完全没用。阅读它。
这样就完成了。这不是最好的答案,但也许有了它,你学会了不要忽视你屏幕上的内容 - 即错误信息。并且可能偶尔阅读文档而不是复制/粘贴“来自互联网的东西”。
答案 1 :(得分:0)
备份文件由SQL服务器自己创建,没有其他exe可以进行备份。 运行批处理文件时,它连接到SQL并要求SQL Server使用BACKUP DATABASE命令备份数据库。
在SqlCmd命令行上使用-E标志时,它使用可信连接连接到SQL,因此必须在有效且受信任的Windows用户下运行,如果它由计划运行,则可能不是这种情况批处理文件。 使用-U和-P标志在cmd命令行窗口中使用有效的SQL登录名(不是受信任的Windows帐户)测试命令,以检查此命令。
另一点是SQL必须能够访问您的F:驱动器,即。运行SQL的帐户必须有权访问它,如果此驱动器是网络驱动器,则运行SQL的帐户必须具有此网络驱动器上的适当访问权限(还有一个标志可启用网络驱动器访问权限)在旧版本的SQL上,但我认为它自sql 2008以来默认开启,不确定)。
答案 2 :(得分:0)
以下是上述解决方案的代码
echo off
cls
echo -- BACKUP DATABASE --
::set db name
set DATABASENAME=db_name
:: set path and format
set BACKUPFILENAME=PATH\%DATABASENAME%.bak
:: set server name
set SERVERNAME=server_name
echo.
::backup execution
sqlcmd -S %SERVERNAME% -d COFI -U vutagi -P vu1234 -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N'%BACKUPFILENAME%' WITH INIT , NOUNLOAD , NAME = N'%DATABASENAME% backup', NOSKIP , STATS = 10, NOFORMAT"