首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用现有数据对数据库进行重大更改的安全/可靠/标准流程?

使用现有数据对数据库进行重大更改的安全/可靠/标准流程?
EN

Stack Overflow用户
提问于 2012-09-28 02:01:15
回答 4查看 62关注 0票数 1

我想要一张摆满旗帜和字段的桌子,然后把它分解成更小的桌子。要修改/分解的父表已经包含必须小心处理的实时数据。

这是我的攻击计划,我希望这个周末执行,而没有人使用这个系统。

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

对我来说,以上这些看起来很合理,也很简单,我相当肯定它会成功的。我对实现这一目标的其他技术很感兴趣(以上是我唯一能想到的),以及任何有助于保持组织性的工具。现在我在用笔和纸跑。

我问的原因是,现在有好几次,我一直在重新发明方向盘,只是因为我不知道更好的东西,而更有经验的人走过来,看到我在做什么,说:“哦,有一种内置的方式来帮助我,”或者,“有一种更简单的方法来做到这一点。”我用Visual做了好几个月的编码,然后有人过来对我说:“你知道断点是用来处理代码的,是吗?”--生活发生了变化,哈。

我有带有SSMS的Server 2008 R2。

EN

回答 4

Stack Overflow用户

发布于 2012-09-28 02:50:41

帮助您创建“_old”表的一个好方法是:

代码语言:javascript
复制
SELECT  *
INTO    mytable_old
FROM    mytable

选择INTO将复制所有数据,并在一步内为您创建表。

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

票数 1
EN

Stack Overflow用户

发布于 2012-09-28 03:34:08

如果可能的话,我首先要做的是某种测试环境。如果您有依赖于数据库的外部应用程序,那么请确保它们都运行在您修改过的结构上,没有任何问题。

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

代码语言:javascript
复制
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%MyTable%'

尝试确保新模式和旧模式之间的查询具有某种功能等价性。可以对重命名的表运行一些查询/查询,然后让您重新处理的架构引用新的表结构。这样,您就可以确保返回的数据对两种结构都是相同的。如果可能的话,提前准备这些内容,这样,一旦您完成了修改,就可以进行一系列检查,如果有差异,这可以帮助您决定是继续进行更改,还是将其退回去。

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

票数 0
EN

Stack Overflow用户

发布于 2012-09-28 04:31:45

这并不能真正解决您的整体问题,但是您可能会发现一些工具对您的第4步很有用,这就是RedGate的SQL比较数据比较。SQL比较将执行模式迁移,而数据比较将有助于迁移数据。您可以将数据移动到新列和新表,填充默认值,从dev同步到生产,等等。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12632608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档