2

我有一个包含 300 多列和数十万条记录的表。我需要重命名现有列之一。

有什么我需要担心的吗?此操作是否会对解释计划等产生影响?

笔记:

  1. 我正在开发 Oracle 11g 上的实时生产数据库。

  2. 此列当前未使用。它没有为任何行填充,我 100% 确定没有任何现有查询引用此列。

4

1 回答 1

3

如果“在实时生产数据库上工作”意味着您将在人们工作时尝试在较低环境中进行测试而不进行测试,那么我强烈反对该计划。

涉及您正在对其执行 DDL 的表的现有查询计划将失效,因此这些查询将需要再次进行硬解析。如果有大量此类查询,这很容易成为一项昂贵的操作。某些查询计划当然可能会因为其他内容发生更改而更改(即统计信息不同,设置不同,绑定变量不同等)。它们不会因为列名更改而更改,但列名更改可能导致计划改变。

显然,您正在执行的任何查询都需要在重命名列后立即使用新名称。这通常意味着您需要在修改代码(包括存储过程)以及列名时进行协调发布。反过来,这通常意味着您将其作为构建的一部分进行,其中至少包含一些停机时间。如果您拥有企业版,您可能可以在不停机的情况下进行基于版本的重新定义,但这会增加流程的复杂性,并且您绝对需要在产品中实施之前彻底测试。

于 2012-06-14T21:12:31.347 回答