文档解释
ORA-28109: the number of related policies has exceeded the limit of 16
Cause: Too many policies are involved in the same objects.
Action: Drop one or more policies. Or combine a few of them into one.
ORA-28109 就是一个错误消息,由 Oracle 数据库引擎返回给用户以表示某个操作无法完成。
官方解释
ORA-28109 是一个拒绝服务(Denial of Service)的错误,它是因为用户的数据表中使用了太多相关性约束而传递一系列错误信息。这个错误通常发生在 Oracle 在创建或更改数据表或索引时,要求创建的数据表或索引引用的相关约束超过了最大限制(16 个),这样就需要系统拒绝服务了。
常见案例
1. 在 Oracle 中将多个外键字段与同一目标表的唯一索引进行关联时,可以发生 ORA-28109。
2. 用户在创建新表或更改现有表时,添加了一个或多个基于此表的外键时,也会发生 ORA-28109。
一般处理方法及步骤
1. 关闭所有访问你要更改的表的会话,并根据 Oracle 访问控制(Oracle Access Control),更新 DDL 操作或 DML 操作权限,来防止其他会话更改表。
2. 使用支持或存储所有使用的外键的单一表,这样就可以使用一个外键约束,而不是创建多个外键。
3. 删除一些相关约束,以便 ORA-28109 错误不再出现。
4. 使用 Oracle ALTER TABLE 语句,以将满足关系约束的表格段添加到满足关系一致性约束的表中。
5. 使用 ALTER DATABASE 语句,修改关系一致性约束(如果有),或添加有效的引用约束,以实现有用的限制。
6. 最后,使用 ALTER TABLE 语句,对表执行更新,以便限制受 ORA-28109 错误影响的表段。