我一直在忙于寻找各种方法来复制sqlserver中的数据库,而且似乎完全卡住了!关于该主题有各种各样的问题和答案,但是似乎都不适合我的情况。
基本上,我想做的是最好以我选择的任何方法将数据库设置为处于特定状态(模式+数据)-在应用程序中处理,编写插入等。然后,我想保留该数据库的副本可以用作一组特定的测试针对/需要进行测试的状态的数据库。我需要能够将此名称拖放到任何数据库名称中,而不仅仅是将其提取时所使用的名称。我需要它从构建服务器的命令行工作。
理想情况下,我希望能够执行以下操作:
outputFile = "something.IDontCareWhatExtension"
databaseName = "aDatabase"
SaveDatabase(databaseName, outputFile)
还有其他地方:
inputFile = "theFilename"
databaseName = "somethingOtherDatabase"
Load(databaseName, inputFile);
这似乎不是一个大问题!我一直在用imp + exp在oracle中做类似的事情,它基本上可以满足我的要求。
到目前为止,我已经尝试使用SMO .net库。这是当您右键单击=>任务=>生成脚本时在SSMS中使用的功能。这些基本上无法按您期望的那样工作,并且需要大量的编程工作才能消除约束之类的问题。在花更多的时间使用这种方法之前,我想我会更详细地介绍备份和还原,但是这些备份似乎只能用于备份和还原内容(也许线索就在此!)!例如,他们似乎没有让您说将备份安装到哪个数据库。
请帮忙!难道这不难吗?!
我能想到的唯一另一件事是,我应该采用一种不同的方法并改为编写数据库安装脚本-在该脚本中,我为特定版本生成架构,然后手工生成大量插入语句。但这将阻止我们从服务器获取客户端数据以重现错误。
您可以在将数据库恢复到所需的特定状态时对其进行备份,然后将其还原以进行测试。
BACKUP DATABASE [ReadyForTesting] TO DISK = N'C:\Temp\Backup.bak' WITH COPY_ONLY, NOFORMAT, NOINIT, NAME = N'ReadyForTesting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
然后,要恢复,只需指定其他名称以使其成为副本或克隆即可:
USE [master]
RESTORE DATABASE [Restored_Copy] FROM DISK = N'C:\Temp\Backup.bak' WITH FILE = 1, MOVE N'dbfile' TO N'C:\MDFPath\Filename.mdf', MOVE N'LogFile' TO N'C:\LogPath\Filename_log.LDF', NOUNLOAD, STATS = 5
GO
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句