小编Sau*_*hin的帖子

Oracle Ref 分区:由于子表行迁移导致死锁

我的订购应用程序使用 Oracle 11g 数据库。这个数据库有一个主表 ORDERS 和多个子表,如 ORDER_DETAILS、PLAN 等。

ORDERS 表在 STATUS 列上进行 LIST 分区,所有其他表都使用 ORDERID 作为外键进行引用分区。

在负载高峰时,当订单状态发生变化并且 ORDERS 表行从一个分区移动到另一个分区时,Oracle 将对 ORDERS 表分区引用的所有子表执行行迁移。由于许多表依赖于 ORDERS 表,大量行移动发生导致子表之一出现死锁。

我的问题是,如何解决在ORACLE 的内部行迁移步骤中造成的死锁?

这是一个示例设置:

订单表:

CREATE TABLE ORDERS (
       orderID   NUMBER PRIMARY KEY,
       description    VARCHAR2(30),
       status   VARCHAR2(30))
  PARTITION BY LIST (status) (  
       PARTITION A VALUES ('COMPLETED'), 
       PARTITION B VALUES ('ACTIVE'), 
       PARTITION C VALUES ('SUBMITTED'))
Run Code Online (Sandbox Code Playgroud)

子表:PLAN

CREATE TABLE PLAN (
       planID   NUMBER PRIMARY KEY,
       orderID    NUMBER,
       description   VARCHAR2(30),
       CONSTRAINT FKC64393AD1EC7235 FOREIGN KEY (orderID) 
       REFERENCES ORDERS (orderID) ON DELETE …
Run Code Online (Sandbox Code Playgroud)

oracle deadlock oracle-11g

8
推荐指数
1
解决办法
952
查看次数

删除分区并“在线”重建全局索引

我正在使用 Oracle 11g。

我需要删除分区并重建全局索引。下面的查询运行良好,但会阻塞表上的所有 DML 操作,直到重建索引。

ALTER TABLE ABC DROP PARTITION PART1 UPDATE GLOBAL INDEXES;
Run Code Online (Sandbox Code Playgroud)

但是,如果我将查询分成 2 部分并分别使用 ONLINE 选项重建索引,则在重建索引时 DML 查询不会被阻止

ALTER TABLE ABC DROP PARTITION PART1;
ALTER INDEX XYZ REBUILD ONLINE;
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是执行删除分区和重建索引之间的时间,这些索引将无法使用,可能会产生性能问题。

所以我的问题是,是否有任何选项可以在一个查询中删除分区并“在线”重建索引?目前我认为我们没有以下选择。

ALTER TABLE ABC DROP PARTITION PART1 UPDATE GLOBAL INDEXES ONLINE;
Run Code Online (Sandbox Code Playgroud)

oracle partitioning

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

oracle ×2

deadlock ×1

oracle-11g ×1

partitioning ×1