我需要编写一个工具来克隆数据库,而不是分离它并复制.mdf和.ldf,最好只备份它并恢复新创建的数据库吗?
有没有办法使用SQL从.bak创建数据库?
答案 0 :(得分:4)
是的,您可以使用备份作为克隆数据库的方法。为此,您只需使用RESTORE命令。
例如:
RESTORE DATABASE DatabaseName
FROM DISK = N'C:\Path\To\Your\File.bak'
有关RESTORE命令参数的进一步参考,请查看MSDN参考:Click!
答案 1 :(得分:3)
为了扩展Maximilian Mayerl的答案,我建议使用MSBuild Community Tasks库的MSBuild和ExecuteDDL任务来自动执行此过程。
您将从像这样的SQL脚本开始(可能称为CloneDb.sql):
USE master
GO
RESTORE DATABASE dbname
FROM DISK = 'SOURCEDIR\dbname.bak'
WITH REPLACE, FILE = 1,
MOVE N'dbname' TO N'DBDEVICEDIR\dbname.mdf',
MOVE N'dbname_log' TO N'DBDEVICEDIR\dbname_log.LDF',
NOUNLOAD,
STATS = 10
GO
在MSBuild脚本中,您将创建一个包含如下序列的目标:
<FileUpdate Files="$(BuildDir)\CloneDb.sql"
Regex="SOURCEDIR"
ReplacementText="$(SqlSafeActualBuildDir)\dbdeploy" />
<FileUpdate Files="$(BuildDir)\CloneDb.sql"
Regex="DBDEVICEDIR"
ReplacementText="$(SqlSafeActualBuildDir)\dbdevices" />
<ExecuteDDL Files="$(BuildDir)\CloneDb.sql" ConnectionString="Server=$(LocalDbServer);Database=master;Trusted_Connection=True;" />
有了这个,从Visual Studio命令行运行“msbuild.exe CloneDb.proj / t:”将一步克隆您的数据库。为方便起见,您可以将命令放在批处理文件中。
我为我当前的项目创建了一个更精细的版本,由十几个开发人员组成的团队使用它来创建我们项目用于满足自己开发需求的数据库的本地版本。
答案 2 :(得分:2)
您可以使用已经回答的备份执行此操作。虽然在进行这些临时备份时使用COPY ONLY选项以避免对主备份进行调整,但没有人提及
BACKUP DATABASE YourDB
TO DISK = 'C:\Backups\YourDB.bak'
WITH COPY_ONLY;
答案 3 :(得分:1)
可能会是这样的:
RESTORE DATABASE [NewDB]
FROM DISK = N'Path\file.bak'
WITH FILE = 1,
MOVE N'NewDB_Data' TO N'C:\Data\MSSQL.1\MSSQL\Data\NewDB_Data.mdf',
MOVE N'NewDB_Log' TO N'C:\Data\MSSQL.1\MSSQL\Data\NewDB_Log.ldf',
NOUNLOAD, STATS = 10
答案 4 :(得分:1)
最简单的方法,如果你是新手,我会说是
a)在SQL Management Studio中创建一个数据库,但不是单击“确定”来创建它,而是将操作编写为SQL脚本并运行它。
b)恢复管理工作室中的.bak文件,确保备份文件位置指向正确的位置并再次编写操作脚本而不是单击“确定”。
c)将两个文件合并为1,为您提供“克隆数据库”sql脚本。
答案 5 :(得分:1)
使用c#.net实现您想要的功能是文章的内容,该文章讨论了创建应用程序以备份和恢复数据库:http://www.geekpedia.com/tutorial180_Backup-and-restore-SQL-databases.html
答案 6 :(得分:1)
我们使用SQL Server 2005并不断复制和交换数据库以进行测试。我们现在总是使用备份和恢复。分离,重新连接.mdf和.ldf文件经常导致SQL Server损坏到需要重新安装的程度,并且在此之前进行非常难看的清理甚至是可能的。正如其他几个人所建议的那样,使用.bak文件非常简单。