DB2 10.5 for Linux, UNIX, and Windows

使数据库对象软失效

软失效功能处于活动状态时,您可以删除正被其他运行中的事务使用的对象。正在使用所删除对象的事务将被允许继续运行,但任何要访问所删除对象的新事务都将被拒绝。

已进行高速缓存的语句和程序包如果直接或间接地引用了正被删除或更改的对象,那么所有这些语句和程序包都将被标记为无效(称为失效)。软失效功能使影响被引用对象的 DDL 能够避免由于它们所引用对象被正在运行的语句锁定而等待,并允许任何活动访问通过使用该对象的高速缓存版本继续进行,从而消除锁定超时的可能性。

相反,如果使用硬失效功能,那么引用对象时将挂起互斥锁定。这将确保所有进程使用相同的对象版本,并确保一旦删除对象就不允许对其进行任何访问。

软失效功能是通过 DB2_DDL_SOFT_INVAL 注册表变量启用的;缺省情况下,此注册表变量设为 ON。

以下列表显示了支持软失效功能的数据定义语言(DDL)语句:
  • ALTER TABLE...DETACH PARTITION
  • CREATE OR REPLACE ALIAS
  • CREATE OR REPLACE FUNCTION
  • CREATE OR REPLACE TRIGGER
  • CREATE OR REPLACE VIEW
  • DROP ALIAS
  • DROP FUNCTION
  • DROP TRIGGER
  • DROP VIEW
注: 在 DB2® V9.7 FP1 及更高版本的发行版中,ALTER TABLE...DETACH PARTITION 将在所有隔离级别对直接或间接引用分区表的已高速缓存语句执行软失效。在将已拆离的分区转换为独立表之前,后续的异步分区拆离任务将对先前已执行软失效的已高速缓存语句执行硬失效。

DB2_DDL_SOFT_INVAL 注册表变量不会影响由 ALTER TABLE...DETACH PARTITION 完成的失效。

软失效支持仅适用于动态 SQL 以及在“游标稳定性”(CS) 和“未落实的读”(UR) 隔离级别下执行的扫描。对于 ALTER TABLE...DETACH PARTITION 语句,软失效适用于所有隔离级别下的扫描。

示例

假定存在一个名为 VIEW1 的视图。您打开一个游标,然后运行语句 SELECT * from VIEW1。此后不久,数据库管理员发出命令 DROP VIEW VIEW1 从数据库中删除 VIEW1。在使用硬失效功能的情况下,DROP VIEW 语句将必须等待对 VIEW1 挂起互斥锁定,直到 SELECT 事务完成为止。在使用软失效功能的情况下,DROP VIEW 语句不会对该事务挂起互斥锁定。该视图将被删除,但是,该 SELECT 语句将使用该视图的最新定义继续运行。在该 SELECT 语句完成之后,任何使用 VIEW1 的后续尝试(即使此尝试由刚刚使用该视图的用户或进程进行)都将导致错误(SQL0204N)。