ora-8176原因及解决方法

在oracle undo_retention范围内,且_undo_autotune=false的情况下,一个语句执行的时候仍然发生ora-8176,语句如下:

INSERT INTO XXX SELECT
  *
FROM
  XXX AS OF SCN 217843607 A
WHERE
  NOT EXISTS (
    SELECT
      1
    FROM
      XXX b
    WHERE
      A .id= b.id
  )
AND tenantid = '*'

经查看,A和b关联的时候走了索引路径扫描,使用了索引的撤销块,导致出现该问题。将其调整为全表扫描走哈希连接后,没有该问题了。

INSERT INTO XXX SELECT /*+ full(a) */
  *
FROM
  XXX AS OF SCN 217843607 A
WHERE
  NOT EXISTS (
    SELECT
      1
    FROM
      XXX b
    WHERE
      A .id= b.id
  )
AND tenantid = '*'

更早的时候,其实LZ特地查看过官方文档,索引块也是有对应的撤销块的。

原文地址:https://www.cnblogs.com/zhjh256/p/11053845.html