我有一个小的SQL数据库,这是我的开发PC上只有。我想经常把它备份到u盘里。如果我能让它在检测到u盘时自动按时间表完成,那就更好了。做这件事的好方法是什么?
我是这样做的,每次我插入u盘时,数据库和其他文件夹都会自动同步到u盘:
- 安装微软制作的SyncToy。
- 添加一个文件夹对从DB文件夹复制到USB驱动器
- 将文件过滤为只复制想要复制的文件。
- 创建一个名为SyncMe.bat的批处理程序,并将其保存在USB驱动器上 从控制面板打开事件查看器。
- 导航到应用程序和服务日志> Microsoft> Windows DriverFrameworks-UserMode>操作
- 清除日志,以便更容易找到正确的事件。
- 插入u盘
- 刷新日志,找到特定于该USB驱动器的最新事件,右键单击,并将任务附加到此事件
- 添加一个操作来运行您创建的SyncMe.bat程序
SyncMe.bat内容(更新以反映您的路径和文件名):
@echo off
if exist "G:SyncMe.bat" goto fileexists
goto nofile
:fileexists
"C:Program FilesMicrosoft SQL Server100ToolsBinnOSQL.EXE" -S computernameinstancename -E -n -Q "master..sp_detach_db 'DatabaseName'"
"C:Program FilesSyncToy 2.1SyncToyCmd.exe" -R
"C:Program FilesMicrosoft SQL Server100ToolsBinnOSQL.EXE" -S computernameinstancename -E -n -Q "master..sp_attach_db 'DatabaseName', 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.InstanceNameMSSQLDATADatabaseName.mdf','C:Program FilesMicrosoft SQL ServerMSSQL10_50.InstanceNameMSSQLDATALogName_log.ldf'"
goto end
:nofile
echo SyncMe.bat not found on G:
goto end
:end
我不认为你可以让SQL Server为你做这一切。我最终编写了一个小的控制台应用程序,使用SMO为我做这项工作:
Server sqlServer = new Server(@"MYMACHINEINSTANCENAME");
sqlServer.DetachDatabase("MyDatabaseName", false);
// copy the mdf and ldf to your thumb drive
StringCollection databaseFiles = new StringCollection();
databaseFiles.Add(@"C:MyDBLocMyDatabase.mdf");
databaseFiles.Add(@"C:MyDBLocMyDatabase.ldf");
sqlServer.AttachDatabase("MyDatabaseName", databaseFiles);
你可以做的是复制。mdf和。ldf文件,如果你没有改变任何设置,你应该可以在这里找到它们:
C:Program FilesMicrosoft SQL ServerMSSQL10。SQLEXPRESS 该数据
我不认为你可以这样做,而服务器正在运行,但你可以从管理工作室(右键单击数据库)轻松地分离DB ..任务. .分离)。然后你就可以复制这些文件了,首先压缩它们会在大小和版本上有很大的不同。
反过来,在management studio中,您可以选择数据库节点,然后右键单击。附加数据库以再次附加它们。
这似乎是一篇关于这个问题的好文章。
问候Gert-Jan