【发布时间】:2011-11-09 15:21:50
【问题描述】:
我有一个小型 SQL 数据库,仅在我的开发 PC 上。我想经常将其备份到拇指驱动器上。如果我可以让它在检测到拇指驱动器时按计划自动执行,那就更好了。有什么好的方法可以做到这一点?
【问题讨论】:
标签: sql-server database sql-server-2008 backup replication
我有一个小型 SQL 数据库,仅在我的开发 PC 上。我想经常将其备份到拇指驱动器上。如果我可以让它在检测到拇指驱动器时按计划自动执行,那就更好了。有什么好的方法可以做到这一点?
【问题讨论】:
标签: sql-server database sql-server-2008 backup replication
这就是我每次插入 USB 驱动器时让数据库和其他文件夹自动同步到我的 USB 驱动器的方法:
SyncMe.bat 内容(更新以反映您的路径和文件名):
@echo off
if exist "G:\SyncMe.bat" goto fileexists
goto nofile
:fileexists
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\OSQL.EXE" -S computername\instancename -E -n -Q "master..sp_detach_db 'DatabaseName'"
"C:\Program Files\SyncToy 2.1\SyncToyCmd.exe" -R
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\OSQL.EXE" -S computername\instancename -E -n -Q "master..sp_attach_db 'DatabaseName', 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.InstanceName\MSSQL\DATA\DatabaseName.mdf','C:\Program Files\Microsoft SQL Server\MSSQL10_50.InstanceName\MSSQL\DATA\LogName_log.ldf'"
goto end
:nofile
echo SyncMe.bat not found on G:\
goto end
:end
【讨论】:
我认为您无法让 SQL Server 为您完成这一切。我最终会编写一个使用SMO 为我完成工作的小控制台应用程序:
Server sqlServer = new Server(@"MYMACHINE\INSTANCENAME");
sqlServer.DetachDatabase("MyDatabaseName", false);
// copy the mdf and ldf to your thumb drive
StringCollection databaseFiles = new StringCollection();
databaseFiles.Add(@"C:\MyDBLoc\MyDatabase.mdf");
databaseFiles.Add(@"C:\MyDBLoc\MyDatabase.ldf");
sqlServer.AttachDatabase("MyDatabaseName", databaseFiles);
【讨论】:
您可以做的是复制 .mdf 和 .ldf 文件,如果您没有更改任何设置,您应该可以在这里找到它们:
C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
我认为您无法在服务器运行时执行此操作,但您可以轻松地从 Management Studio 中分离数据库(右键单击数据库 .. 任务 .. 分离)。然后你可以肯定地复制文件,首先压缩它们应该会在大小上产生很大差异并且易于版本化它们。
反过来,在管理工作室中,您可以选择数据库节点,然后通过 richtclick .. attach database 再次附加它们。
This 似乎是一篇关于此事的好文章。
问候格特-扬
【讨论】: