在sql server中复制数据库
Posted
技术标签:
【中文标题】在sql server中复制数据库【英文标题】:Copying databases in sql server 【发布时间】:2014-05-22 15:24:41 【问题描述】:我一直忙于研究在 sqlserver 中复制数据库的各种方法,但似乎完全卡住了!关于这个主题有各种各样的问题和答案,但似乎没有一个适合我的情况。
基本上我要做的是最好通过我选择的任何方法将数据库设置为特定状态(模式 + 数据) - 在应用程序中乱搞,编写插入等。然后我想保留该数据库的副本,该副本可用作特定测试集针对/要求运行的 状态。我需要能够将它放入任何数据库名称中,而不仅仅是我提取它时碰巧出现的那个。 我需要这个从构建服务器的命令行工作。
理想情况下,我希望能够做这样的事情:
outputFile = "something.IDontCareWhatExtension"
databaseName = "aDatabase"
SaveDatabase(databaseName, outputFile)
还有其他地方:
inputFile = "theFilename"
databaseName = "somethingOtherDatabase"
Load(databaseName, inputFile);
这似乎不是一个大问题!我一直在用 imp + exp 在 oracle 中做类似的事情,它基本上可以满足我的需求。
到目前为止,我已经尝试过使用 SMO .net 库。当您执行数据库右键单击 => 任务 => 生成脚本时,这就是 SSMS 引擎盖下使用的内容。这些基本上不会像您期望的那样工作,并且需要大量的编程工作才能消除诸如约束之类的事情。在花更多时间研究这种方法之前,我想我会更详细地研究备份和恢复,但这些似乎只是为备份和恢复事物而准备的(也许线索就是名字!)!例如,他们似乎没有让您说出要将备份安装到哪个数据库。
请帮忙!肯定不会这么难吧?!
我唯一能想到的另一件事是,我应该采用不同的方法并改为编写数据库安装脚本 - 我为特定版本生成架构,然后手工制作大量插入语句。不过,这将阻止我们从服务器中提取客户端数据来重现错误。
【问题讨论】:
hm 所以问题是您恢复的数据库总是与您备份的数据库具有相同的名称?恢复后不会简单的重命名吗? 您可以编写一个存储过程来备份和恢复您的数据库。然后从控制台应用程序调用它。你调查过吗? @DrCopyPaste 你能详细说明一下吗? 【参考方案1】:您可以在数据库达到您想要的特定状态时对其进行备份,然后为您的测试恢复该备份。
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
【讨论】:
您只是在寻找运行数据库备份和恢复的语法吗? Move N'dbfile' 需要输入哪些值?我收到一些语法错误。起初我以为这些是常数! 第一个是逻辑名,第二个是路径和文件名。您需要为 mdf 移动一次,为 ldf 移动一次,然后为任何 ndf 文件额外移动一次。您可以通过右键单击 SSMS 中的数据库并转到属性,然后查看文件选项卡来找到此信息。 干杯。您也可以通过执行以下操作从转储中获取它:RESTORE filelistonly FROM DISK = N'pathToFile' 不错的一个!现在开始工作了。我没想到必须指定文件路径,但它会做!以上是关于在sql server中复制数据库的主要内容,如果未能解决你的问题,请参考以下文章
SQL server 数据库 如何把一张表复制到另一个数据库表中