ORA-39906: Constraint string between table string.string in tablespace string and table string.string in tablespace string. ORACLE 报错 故障修复 远程处理
文档解释
ORA-39906: Constraint string between table string.string in tablespace string and table string.string in tablespace string.
Cause: Informational message to describe a failure during transportable containment checking.
Action: None required.
ORA-39906 错误指示强制执行违反熄灭前检查约束(EC)之间的表之间的引用约束失败,指出强制执行中的表所在的表空间。
官方解释
ORA-39906 错误代表索引登记强行失败的熄灭前检查限制,因为两个表处于不同的表空间。ORA-39906 发生,当使用 DBMS_RLS.ADD_POLICY 时尝试添加到不同表空间中的表之间的约束时。
常见案例
当您试图在不同表空间中的两个表之间添加外键约束时,可能会发生 ORA-39906 错误,如下所示:
ALTER TABLE table1
ADD CONSTRAINT FK_table1_table2
FOREIGN KEY(ID) REFERENCES table2(ID);
一般处理方法及步骤
1. 将所有表移动到同一表空间,以解决 ORA-39906 错误。
2. 通过在最高层使用系统表空间,然后在其它表空间添加一致性索引,来解决 ORA-39906 错误。
3. 更新存储参数“FilesystemIoOptions”,如果该值设置为“setall”,则可以解决 ORA-39906 错误。
ALTER SYSTEM SET FilesystemIoOptions= setall SCOPE=SPFILE;
4. 重新启动实例以使对配置参数的更改生效。