35

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

当我安装数据库时,我已经编写了所有脚本,但是从那以后情况发生了变化,我不想再次编写所有表的脚本。

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

编辑(在托尼霍普金森的帖子之后)

我已经做到了

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 

但我收到以下错误消息

消息 3234,级别 16,状态 2,第 2 行逻辑文件“MyDatabase”不是数据库“MyDatabase”的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名。消息 3013,级别 16,状态 1,第 2 行 RESTORE DATABASE 异常终止。消息 3154,级别 16,状态 4,第 6 行 备份集保存现有“MyDatabaseTEST”数据库以外的数据库的备份。消息 3013,级别 16,状态 1,第 6 行 RESTORE LOG 异常终止。设备掉落。

4

7 回答 7

40

在 SQL Server Management Studio 中使用复制数据库选项

在此处输入图像描述

于 2012-10-03T08:30:07.720 回答
16

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

微软文档

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

SSMS 将根据您提供的名称将您的 .bak 文件恢复到新数据库。 在此处输入图像描述

于 2017-09-07T21:16:28.210 回答
3

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

你把它恢复到另一个

例如类似的东西

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 和 test,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 与我想做的事情联系起来。

于 2012-10-03T08:57:11.970 回答
2

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

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

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

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

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

最后,填充数据

=>右键单击目标数据库,然后任务,然后导入数据=>数据源下拉设置为“.net framework data procider for sql server”+在数据下设置连接字符串文本字段,例如:数据源=Mehdi\SQLEXPRESS; Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
=> 与目标相同 => 选中要传输的表或选中“源:.....”之外的复选框以检查所有表

你完成了。

于 2015-01-09T11:08:49.090 回答
1
  • 将数据库转储到备份文件中
  • 从您的转储重新创建您的数据库 - 这是一个您可以运行的脚本 - 具有不同的名称(您必须更改为脚本)

你可以关注(这个

于 2012-10-03T08:29:02.020 回答
1

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

首先,备份数据库Database_Production。

BACKUP DATABASE Database_Production TO DISK ='H:\test\Database_Production.bark';

其次,恢复 Database_Production,这可以将数据库名称重命名为 Database_Testing。

RESTORE DATABASE Database_Testing 
    FROM DISK='H:\test\Database_Production.bark' 
    WITH 
        MOVE 'Database_Production_Data' TO 'H:\test\Database_Testing_Data.mdf',
        MOVE 'Database_Production_log' to  'H:\test\Database_Testing_Data.ldf';
GO

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

于 2019-10-12T14:16:57.450 回答
0

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

于 2020-05-31T17:08:08.763 回答