当前位置: 首页 > 面试题库 >

如何将架构和一些数据从SQL Server复制到另一个实例?

华良才
2023-03-14
问题内容

我的产品使用SQL Server数据库-
每个客户端在自己的Intranet上都有自己的部署实例。该数据库大约有200个表。它们中的大多数是只有几行的配置表,但是有几个事务数据表可能有几百万行。通常,我需要对客户的配置问题进行故障排除,因此我需要他们的数据库的副本才能在我的开发系统上本地使用…但是由于交易数据的原因,该副本可能很大,这使得客户很难发送我可以备份。我需要一种方法来备份/复制/导出大表以外的所有内容。

理想情况下,大表实际上属于一个单独的数据库目录,以便客户可以将其“数据”与“配置”分开备份。但是,我无权进行这种类型的更改,因此我正在寻找一种导出或复制配置部分而不必复制整个内容的好方法。

当前,我有一个快速且肮脏的.NET应用程序,该应用程序使用SQL适配器和数据集盲目地从所有表中选择*,而不是要忽略的表,然后将其转储到XML文件中(这是我穷人的导出功能)。我有一个配套应用程序,可以在本地使用该XML将XML重新加载到DataSet中,然后使用SQLBulkCopy将其加载到我的dev数据库中。我不得不做一些技巧来禁用约束等等,但是我做到了。这可以获取数据,但不能获取模式。…理想情况下,我希望获得一种与模式一起获取数据的方法。这是一种蛮力方法,我相信必须有一个更简单的方法。对更好的方法有什么建议吗?

由于我要与通常很少获得IT支持的最终用户打交道,因此该解决方案需要实现自动化。

(SQL 2005及更高版本)


问题答案:

我解决了如下问题。我创建了一个自定义winform应用程序以导出其数据:

  1. 使用SMO(传输类)将整个模式编写为.sql文件
  2. 使用以下命令遍历所有指定的表(实际上我只是列出了要忽略的大增长表,然后处理其他所有表):select * from
  3. 将记录捕获到DataTable对象中,并将其转储到.xml文件中
  4. 压缩整个文件夹,然后将其发送回给我

我有一个自定义的winform应用程序,可在开发系统上本地使用该应用程序导入数据:

  1. 创建一个空数据库
  2. 运行.sql文件以构建架构
  3. 禁用所有表上的所有约束(使用sp_foreachtable)
  4. 遍历所有.xml文件并使用SqlBulkCopy对象批量导入
  5. 重新启用所有约束(使用sp_foreachtable)

这种方法适用于我的数据库,但是对于某些数据库设计,我不一定会建议这样做。在我的情况下,有许多“小型”配置表,只有少数几个“大型”表之间的关系最小,因此我可以轻松地忽略大型表。如果存在更复杂的关系,那可能不是一个好的解决方案。

到目前为止似乎工作得很好。我希望找到一种无需编写自定义代码的好方法,但是我只用了几个小时的开发时间就可以使用它。

仅供参考,我几乎可以在sqlpubwiz中使用它,但是脚本编写脚本的选项是全部或全部……您不能忽略特定的表……这对我的应用程序来说是一个大问题。SMO中的Transfer对象是一个非常有用的类-
它只需要几行代码就可以编写整个数据库模式的脚本,包括按照正确的创建顺序创建的所有依赖关系,以便从头开始重新创建数据库!

http://msdn.microsoft.com/zh-
CN/library/microsoft.sqlserver.management.smo.transfer.aspx



 类似资料:
  • 问题内容: 在不修改数组a地址的情况下,将数据从数组b复制到数组a的最快方法是什么。我需要这样做,因为外部库(PyFFTW)使用了指向无法更改的数组的指针。 例如: 是否可以不循环地进行? 问题答案: 我相信 将快速制作出深层副本。正如Funsi所提到的,最新版本的numpy也具有该功能。

  • 没有开箱即用的解决方案可以将数据从一个Azure EventHub克隆到另一个EventHub。有什么可能的选择来实现这一点?

  • 问题内容: 我需要将表从一个数据库复制到另一个数据库。这将是一个cronjob。哪一种是最好的方法?PHP脚本或Shell脚本。PHP的问题是,两个数据库都有不同的用户名和密码,所以我不能这样做。 我应该只连接第一个DB以获得所有记录,然后使用WHILE循环将所有记录插入新数据库,还是有更好的方法? 我更喜欢用shell脚本代替PHP脚本来执行此操作。 谢谢 问题答案: 我把它丢了。比任何基于PH

  • 问题内容: 如何从一个数据库复制到另一个数据库。 数据库名称visco 我想将所有表从visco数据库复制到新数据库名称作为neptune 我创建了一个没有任何表的数据库,然后尝试从database1.bak文件还原数据库,然后显示错误为 需要查询帮助 问题答案: 使用SQL Server Management Studio: 选项1 ->右键单击要复制的数据库 ->选择“任务”>“生成脚本” -

  • 问题内容: 我有以下两个对等控制器。这些没有父项: 在控制器1中,我想更新由Controller2控制的HTML中的变量xxx的值。有办法吗? 问题答案: 绝对使用服务在控制器之间共享数据,这是一个有效的示例。$ broadcast不是要走的路,您应该避免在有更合适的方式时使用事件系统。使用“服务”,“值”或“常量”(用于全局常量)。 http://plnkr.co/edit/ETWU7d0O8K

  • 问题内容: 我正在尝试将数据从一个数据库复制到另一个数据库。一切工作正常,直到修改了源数据库中的一行之一(下面的堆栈跟踪)。按预期将新行添加到目标数据库。 对于每个数据库连接(mysql和hsqldb),我都有一个由以下bean组成的上下文文件: 在我为每个数据库连接中创建一个: 很简单: 我正在使用Spring Integration将2种服务方法连接在一起。服务方法如下: 我尝试过从s 分离列