使数据库对象软失效
当软失效功能处于活动状态时,您可以删除正被其他运行中的事务使用的对象。正在使用所删除对象的事务将被允许继续运行,但任何要访问所删除对象的新事务都将被拒绝。
已进行高速缓存的语句和程序包如果直接或间接地引用了正被删除或更改的对象,那么所有这些语句和程序包都将被标记为无效(称为失效)。软失效功能使影响被引用对象的 DDL 能够避免由于它们所引用对象被正在运行的语句锁定而等待,并允许任何活动访问通过使用该对象的高速缓存版本继续进行,从而消除锁定超时的可能性。
相反,如果使用硬失效功能,那么引用对象时将挂起互斥锁定。这将确保所有进程使用相同的对象版本,并确保一旦删除对象就不允许对其进行任何访问。
软失效功能是通过 DB2_DDL_SOFT_INVAL 注册表变量启用的;缺省情况下,此注册表变量设为 ON。
- 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_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)。