创建用于测试的重复SQL数据库

时间:2012-10-03 08:26:40

标签: sql-server

我在winforms c#中创建了SQL服务器和前端用户应用程序的数据库。 它已经启动并运行良好,但我现在已经被要求设置客户端的测试版本来培训新员工,这样他们就可以在培训时输入虚拟数据,而不会影响“真实”的实时数据库。 / p>

当我安装数据库时,我把它全部编写了脚本,但事情发生了变化,我并不特别想再次编写所有表的脚本。

是否有一种快速,方便的方法可以在同一台服务器上复制数据库(及其数据),但名称不同?

编辑(在Tony Hopkinson之后发布)

我已经达到了这个

exec sp_addumpdevice 'Disk','MyDatabaseBackup',N'D:\MyDatabaseBackup' 
Restore Database MyDatabase From MyDatabaseBackup With File = 1, 
Move 'MyDatabase' To N'C:\Program Files\Microsoft SQL 
Server\MSSQL11.SQLE\MSSQL\DATA\MyDatabaseTEST.mdf', 
Move 'MyDatabase_Log' To N'C:\Program Files\Microsoft SQL 
Server\MSSQL11.SQLE\MSSQL\DATA\MyDatabaseTEST_log.ldf', 
NORECOVERY,  NOUNLOAD,  STATS = 10 
RESTORE LOG [MyDatabaseTEST] FROM  [MyDatabaseBackup] WITH  FILE = 2,  NOUNLOAD,  STATS = 10 
exec sp_dropdevice MyDatabaseBackup 

但是我收到以下错误消息

Msg 3234,Level 16,State 2,Line 2 逻辑文件“MyDatabase”不是数据库“MyDatabase”的一部分。使用RESTORE FILELISTONLY列出逻辑文件名。 Msg 3013,Level 16,State 1,Line 2 RESTORE DATABASE异常终止。 Msg 3154,Level 16,State 4,Line 6 备份集包含除现有“MyDatabaseTEST”数据库之外的数据库的备份。 Msg 3013,Level 16,State 1,Line 6 RESTORE LOG异常终止。 设备掉线。

7 个答案:

答案 0 :(得分:30)

在SQL Server管理工作室中使用copy database选项

enter image description here

答案 1 :(得分:5)

我发现这种方法在SQL Server 2005和2008 Express Editions上最有效:

来自Microsoft Docs

  1. 右键单击要复制的数据库,然后选择任务 - >"备份..."
  2. 将备份保存为.bak文件
  3. 右键单击"数据库" SQL Server Management Studio中对象资源管理器中的文件夹
  4. 选择"还原数据库"
  5. 作为来源,选择"文件"并指向您之前创建的.bak文件。
  6. 更改要还原到的数据库的名称(这对我来说是关键步骤 - 您不受限于下拉列表中的选项。)
  7. SSMS会根据您提供的名称将.bak文件还原到新数据库。 enter image description here

答案 2 :(得分:3)

首先对当前数据库进行完整备份,当然你有:)

你将它恢复到另一个

e.g。

之类的东西
exec sp_addumpdevice 'Disk','LiveDataBackup',N'Insert backup file name here including path'
Restore Database TestData From LiveDataBackup With File = 1,
Move 'LiveData' To N'Path to where sqlserver expects the mdfs to be\TestData.mdf',
Move 'LiveData_Log' To N'Path to where sqlserver expects the ldf to be\TaxData1.ldf',
NORECOVERY,  NOUNLOAD,  STATS = 10
RESTORE LOG [TestData] FROM  [LiveDataBackup] WITH  FILE = 2,  NOUNLOAD,  STATS = 10
exec sp_dropdevice LiveDataBackup

上面假设您的实时数据库被巧妙命名为LiveData并测试TestData。

mdf和ldf的路径取决于sql server的版本和实例名称

应该是这样的 C:\ Program Files \ Microsoft SQL Server \ MSSQL11.DENALI \ MSSQL \ DATA \

MSSQL11,因为它是sql 2012,而DENALI是我的实例名称,它默认安装在C:\ Program Files

也没有替换,所以如果你想再次运行它,你需要删除你的测试数据库。

从GUI可能有一些方法可以做到这一点,但我发现它是一个庞大的PIA试图将UI与我想要做的事情联系起来。

答案 3 :(得分:2)

使用MS SQLServer 2012,您需要执行3个基本步骤

首先,生成仅包含源数据库结构的.sql文件

  

=>右键单击源数据库,然后单击“任务”,然后单击“生成脚本”   =>按照向导,你可以在本地保存.sql文件

其次,在.sql文件中替换源数据库与目标数据库

  

=>右键单击目标文件,打开.sql文件并按New Query和Ctrl-H或(编辑 - 查找和替换 - 嘎嘎替换)

最后,填充数据

  

=>右键单击detination DB,然后单击Tasks,然后单击Import Data   =>数据源drop dow设置为“.net框架数据procider for sql server”+设置连接字符串文本字段在DATA ex:Data Source = Mehdi \ SQLEXPRESS; Initial Catalog = db_test; User ID = sa; Password = sqlrpwrd15
  =>与目的地相同的事情   =>检查您要转移的表格或“source:.....”旁边的复选框以检查所有这些

你已经完成了。

答案 4 :(得分:1)

  • 将数据库转储到备份文件中
  • 从转储中重新创建数据库 - 这是一个可以运行的脚本 - 使用不同的名称(必须更改为脚本)

您可以关注(this

答案 5 :(得分:0)

您要将一个Database_Production复制到同一服务器中的Database_Testing。我将以database_production数据库为例。我已经在服务器上成功测试了。

首先,备份数据库Database_Production。

备份数据库Database_Production 到disk ='H:\ test \ Database_Production.bark';

第二,还原Database_Production,这可以将数据库名称重命名为Database_Testing。

还原数据库Database_Testing 来自磁盘='H:\ test \ Database_Production.bark' 将“ Database_Production_Data”移至“ H:\ test \ Database_Testing_Data.mdf”, 将“ Database_Production_log”移动到“ H:\ test \ Database_Testing_Data.ldf”; GO

然后将数据库Database_Production复制到数据库Database_Testing。 MOVE语句使数据和日志文件还原到指定的位置。您无需创建数据库Database_Testing,脚本将创建它。

答案 6 :(得分:0)

如果需要在同一服务器上创建数据库,只需创建一个空数据库。右键单击它,然后选择“还原”->选择要复制的数据库,然后单击“确定”。