1

我想拿一张带有标志和字段的桌子,并将其分成较小的桌子。要修改/分解的父表已经包含必须小心处理的实时数据。

这是我的攻击计划,我希望在没有人使用系统的情况下在本周末执行。

  1. 创建我们需要的新表
  2. 将现有父表 ParentTable 重命名为 ParentTableOLD
  3. 创建一个名为 ParentTable 的新表,删除不需要的字段,并添加新字段
  4. 运行将 ParentTableOLD 中的条目复制到新表的过程,将旧数据映射到适用的新表/字段
  5. 删除 ParentTableOLD 表

以上对我来说似乎非常合理和简单,我相当肯定它会起作用。我对实现这一目标的其他技术感兴趣(以上是我唯一能想到的),以及任何有助于保持井井有条的工具。现在我在纸和笔上奔跑。

我问的原因是,现在有好几次,我一直在重新发明轮子,只是因为我不知道更好,有一个更有经验的人走过来看到我在做什么,然后说,“哦,有一个内置的方法来帮助做到这一点,”或者,“有一种更简单的方法可以做到这一点。” 在有人停下来说“你知道断点来单步执行代码,是吗?”之前,我用 Visual Studio 编写了几个月和几个月。---改变生活,哈哈。

我有带 SSMS 的 SQL Server 2008 R2。

4

4 回答 4

1

帮助您创建“_old”表的一个好技巧是:

SELECT  *
INTO    mytable_old
FROM    mytable

SELECT INTO 将复制所有数据一步为您创建表格。

这就是说 - 我实际上会保留当前的表名,而是将所有内容复制到另一个模式中。这将使查询和报告在旧模式(需要时)上运行变得更加容易,然后必须将“_old”添加到所有名称(因为您可以只查找/替换模式名称)。

于 2012-09-28T02:50:41.937 回答
0

这并不能真正解决您的整体问题,但您可能会发现对您的第 4 步有用的几个工具是 RedGate 的SQL 比较数据比较。SQL Compare 将执行架构迁移,而 Data Compare 将帮助迁移数据。您可以将数据移动到新列和新表,填充默认值,从开发同步到生产,等等。

您可以使用生产数据在开发环境中进行更改,当您对过程感到满意时,在生产中进行实际迁移。

于 2012-09-28T04:31:45.373 回答
0

如果可能的话,我首先要做的是某种测试环境。如果您有依赖数据库的外部应用程序,那么请确保它们都针对您修改后的结构运行而不会出现任何问题。

还要对可能引用您要重命名的表的数据库对象进行搜索。例如;

SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%MyTable%'

尝试并确保新旧模式之间的查询具有某种功能等效性。有一些查询/查询可以针对您重命名的表运行,然后让您重新设计的架构引用您的新表结构。这样,您可以确保两种结构返回的数据相同。如果可能,请提前准备好所有这些,以便在完成修改后您可以进行一系列检查,如果存在差异,这可以帮助您决定是继续更改还是取消更改。

最后,制定一个计划,以制定在发生灾难性事件时如何恢复到旧模式的计划。如果您已经使用新表结构一段时间,然后发现了一个重大问题,您能否恢复到旧表并成功地将数据从修改后的表结构中恢复到旧表中?基本上,只要遵守童子军规则并做好准备

于 2012-09-28T03:34:08.093 回答
-1

备份数据库(供参考: http: //msdn.microsoft.com/en-us/library/ms187510.aspx),然后您可以执行所需的步骤。如果一切顺利,那么继续恢复旧数据库(供参考: http: //msdn.microsoft.com/en-us/library/ms177429.aspx)您甚至可以自动执行此备份过程,例如,每周。

于 2012-09-28T02:10:11.990 回答