- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在努力寻找合适的解决方案。我有一个相当大的 SQL Server 2008 Express 数据库,其中包含 60 多个表(许多具有键约束)和一大堆数据。
我基本上需要将所有这些表以及数据和约束从一个数据库准确地复制到另一个数据库。我基本上是在复制网站 A - 以在不同的域上生成一个完全相同的副本(网站 B),因此我们最终得到两个完全相同的网站并行运行,每个网站都有自己相同的数据库。
数据库 A 已在网站 A 上启动并运行。数据库 B 已设置并拥有自己的用户。我只需要完整地从 A 到 B 获取表和数据。我可以修改我的 web.config 连接以使用数据库 B 的登录凭据,它应该可以工作。
我已经尝试备份数据库 A 并通过 Management Studio Express 恢复到数据库 B,但它告诉我:
System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing 'database-B' database.
(Microsoft.SqlServer.Smo)
我还尝试在 Management Studio Express 中右键单击数据库 A,然后转到 Tasks > Generate scripts
。但是,当我这样做并在数据库 B 上运行 SQL 脚本时,在导入内容时,我会遇到大量与外键等相关的错误。它似乎在做正确的事情,但无法处理不同的键/关系。
那么有没有人知道一种简单、万无一失的方法可以让我的数据 100% 准确且完整地从数据库 A 传输到数据库 B?
我想我在大约 5 年前使用 SQL Server 数据库发布向导来做类似的事情,但该产品现在似乎已经不存在了 - 我尝试安装它并且它要我将我的 SQL Server 版本降级到 2005,所以我不去那里!
最佳答案
不要为此使用用户界面。如果您不熟悉 BACKUP/RESTORE 的各个方面,那么 UI 只会让您误入歧途以获取大量选项。最简单的备份命令是:
BACKUP DATABASE dbname TO DISK = 'C:\some folder\dbname.bak' WITH INIT;
现在要将其恢复为不同的数据库,您需要知道文件名,因为它会尝试将相同的文件放在相同的位置。因此,如果您运行以下命令:
EXEC dbname.dbo.sp_helpfile;
您应该会看到包含数据和日志文件的名称和路径的输出。当您构建恢复时,您需要使用这些,但将路径替换为新数据库的名称,例如:
RESTORE DATABASE newname FROM DISK = 'C\some folder\dbname.bak'
WITH MOVE 'dbname' TO 'C:\path_from_sp_helpfile_output\newname_data.mdf',
MOVE 'dbname_log' TO 'C:\path_from_sp_helpfile_output\newname_log.ldf';
您必须将 dbname
和 newname
替换为您的实际数据库名称,以及 some folder
和 C:\path_from_sp_helpfile_output\
与您的实际路径。除非我知道它们是什么,否则我无法在我的答案中给出更具体的答案。
** 编辑 **
这是一个完整的重现,对我来说完全没问题:
CREATE DATABASE [DB-A];
GO
EXEC [DB-A].dbo.sp_helpfile;
部分结果:
name fileid filename
-------- ------ ---------------------------------
DB-A 1 C:\Program Files\...\DB-A.mdf
DB-A_log 2 C:\Program Files\...\DB-A_log.ldf
现在我运行备份:
BACKUP DATABASE [DB-A] TO DISK = 'C:\dev\DB-A.bak' WITH INIT;
当然,如果克隆目标(在本例中为 DB-B
)已经存在,您需要删除它:
USE [master];
GO
IF DB_ID('DB-B') IS NOT NULL
BEGIN
ALTER DATABASE [DB-B] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [DB-B];
END
GO
现在这个恢复将成功运行:
RESTORE DATABASE [DB-B] FROM DISK = 'C:\dev\DB-A.bak'
WITH MOVE 'DB-A' TO 'C:\Program Files\...\DB-B.mdf',
MOVE 'DB-A_log' TO 'C:\Program Files\...\DB-B_log.ldf';
如果您遇到有关 BAK 文件内容的错误,那么我建议您确认您确实正在生成一个新文件,并且您在 RESTORE 命令中指向了正确的文件。请尝试上面的方法,让我知道它是否有效,并尝试找出您正在做的不同流程的任何部分。
关于database - 将现有数据库克隆到新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319855/
我有一个如下图所示的情节。对于这个情节,我想在情节(右下角或左下角)的某处添加类似的线图。我正在使用的子图的命令是 plot( 1:121, sample(1:121),type='l' ) 它绘制在
我有一个单表数据库,我继承并迁移到 SQL Server,然后通过创建、链接和填充一大堆表示主表中项目的查找类型表来规范化它。我现在想用它们的外键替换原始表中的那些项目。我是不是一直在写一堆查询或 U
我有一个 Web 应用程序,它当前正在从服务器获取 PDF 的 base64 表示。我可以使用 Mozilla 的 pdf.js 在 上显示它并使用下拉菜单切换页面。 根据我所能找到的一切和Can
在 DB2 上运行的 Moodle 2 安装中,删除用户不成功,返回从数据库读取错误: Debug info: [IBM][CLI Driver][DB2/LINUXX8664] SQL0206N "
我在grails项目的RH包中添加了一个名为Authorization的新域类。 然后,我从grails菜单自动生成了 Controller 和 View 。 但是当我尝试输入 Controller
今天,我发现了一个有趣的plunker,经过谷歌大量搜索后一无所获,希望我能在这里找到答案。我只是想要那个笨蛋的副本。我不想使用复制和粘贴技术。有什么方法可以获取已建立的 plunk 的副本吗?我如何
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Migrate normal sqlite3 database to core data? 是否可以将现有的 sql
我正在尝试在我的应用程序上添加启动画面。我干净地构建了程序,但我选择了错误的文件。现在我第二次编辑了 VM 选项并再次干净构建,现在我收到此错误: C:\Users\User\Documents\Ne
我已经查看了很多问题,我不相信这是重复使用单元格的结果,因为新的单元格图像是正确的,但是现有的单元格图像不正确并且曾经是正确的。我会先发布图片,以便更容易理解问题。 我有一个图像单元的 Collect
我在来自 Vaadin 的 ContainerHierarchicalWrapper 的这段代码中有一个非常奇怪的错误: for (Object object : children.keySet())
到目前为止,我正在使用 Globalize用于我的 JavaScript 应用程序的 i18n 和 l10n(使用 jQuery UI 构建)。这行得通,但它将我的代码与另一个特定的库联系在一起。现在
我正在创建一个 JHipster 应用程序,现在确定了 full text search 的必要性.我知道 JHipster 与 Elasticseach 集成,但我在创建项目时没有启用它。有没有一种
我一直在寻找堆栈中的建议,但我仍然不能 100% 确定改进它的最佳方法。我有一个存储大约 130K 条记录的 mysql INNODB“产品”表。杂项产品数据等大约有 80 个字段,然后我们一直在为每
我在一本书上看到,它说:当我们使用另一个初始化新创建的对象时 - 使用复制构造函数创建一个临时对象,然后使用赋值运算符将值复制到新对象! 后来在书中我读到:当使用另一个对象初始化新对象时,编译器创建一
我第一次安装现有的 Django 项目时遇到了启动服务器 python manage.py runserver 的问题 这是我做的 1.克隆仓库, 2.制作虚拟环境 3.pip安装要求.txt 4.生
我有一个网站,还有一个登录表单。我不想使用 PHP 来检查我的 MySQL 数据库,因此我正在寻找一种方法来检查用户凭据以查看是否已有 Linux 用户。我知道 PAM,但我还没有找到任何有关如何从网
我有一个现有的 Umbraco 项目在 IIS 服务器上运行。当我开始这个项目时,我基本上是将 Umbraco 直接安装到服务器上,并通过管理界面进行编码,直到网站启动并上线。 现在,客户想要一些更改
我是 Android 开发新手,目前正在学习一些教程。当我在 Eclipse 中设置一个新的 Android 项目,并选择 Windows -> Android SDK and AVD Manager
我有这个注册页面可以正常工作,但对于电子邮件字段,我需要确保电子邮件正确有效1:正确2 : 有效 为了正确添加电子邮件,我正在使用 Java 脚本验证来维护abc@def.com 很好用 但我的问题是
首先让我说我不熟悉 COM 引用,并且我在 Windows 7 64 位计算机上使用 VS2010。今天早上,我从 TFS 中删除了一个现有项目。然后我尝试构建项目并收到此错误: The type o
我是一名优秀的程序员,十分优秀!