【发布时间】:2011-06-23 06:56:25
【问题描述】:
我正在为我的公司编写一些批处理脚本,我在一些历史批处理脚本中看到了以下步骤:
- 有一个
Delete from table where....声明 - Oracle 导入工具用于导入单条记录
- 重新编译架构
我认为您不需要在删除然后导入(插入)后重新编译架构。我错了吗?是否有可能 DDL 语句(如 delete 和 insert)可能会导致对象无效?
【问题讨论】:
我正在为我的公司编写一些批处理脚本,我在一些历史批处理脚本中看到了以下步骤:
Delete from table where....声明我认为您不需要在删除然后导入(插入)后重新编译架构。我错了吗?是否有可能 DDL 语句(如 delete 和 insert)可能会导致对象无效?
【问题讨论】:
我假设您在导入时指定了 TABLES 参数?如果是这样,则您处于 TABLE 模式,这意味着不会导入程序对象、视图等。 imp 命令确实对进程可能导入的任何 PL/SQL 程序单元执行编译。可以想象,这可能会使其他依赖对象无效,因此批处理脚本中的重新编译步骤。当然,很多时候这种东西是根据另一个用作模板的脚本放入一个脚本中的,很容易就没有必要了。
【讨论】:
想不出为什么会发生这种情况,除非您的 DML 弄乱了数据字典,这听起来是个非常糟糕的主意...
另一个想法是,重新编译可能会产生执行所需 COMMIT 的副作用?
【讨论】: