在文檔中,對INTERVAL分區執行一些操作之前都會先執行分區的鎖定操作。
和其他類型的分區表不同,INTERVAL分區表的分區並不一定是已經存在的,分區是否存在與使用者插入的資料的範圍有關。
可以看到,文檔在對INTERVAL分區執行SPLIT等分區操作之前都會執行一個鎖分區的操作,事實上這個鎖操作並非是避免使用者DML對DDL操作的影響,而是為了確保要操作的分區存在:
SQL> CREATE TABLE T_PART_INTER
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (ID)
6 INTERVAL (100)
7 (PARTITION P1 VALUES LESS THAN (100),
8 PARTITION P2 VALUES LESS THAN (200));
表已建立。
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
2 FROM USER_TAB_PARTITIONS
3 WHERE TABLE_NAME = 'T_PART_INTER';
TABLE_NAME PARTITION_NAME HIGH_VALUE
--------------- --------------- ----------------------------------------
T_PART_INTER P1 100
T_PART_INTER P2 200
SQL> ALTER TABLE T_PART_INTER
2 MOVE PARTITION FOR(250);
ALTER TABLE T_PART_INTER
*
第1行出現錯誤:
ORA-02149:指定的分區不存在
SQL> LOCK TABLE T_PART_INTER
2 PARTITION FOR(250)
3 IN SHARE MODE;
表鎖定。
SQL> ALTER TABLE T_PART_INTER
2 MOVE PARTITION FOR(250);
表已更改。
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
2 FROM USER_TAB_PARTITIONS
3 WHERE TABLE_NAME = 'T_PART_INTER';
TABLE_NAME PARTITION_NAME HIGH_VALUE
--------------- --------------- ----------------------------------------
T_PART_INTER P1 100
T_PART_INTER P2 200
T_PART_INTER SYS_P102 300
可以看到,LOCK TABLE使得Oracle新增了INTERVAL分區。
從這個現象推測,新增資料會導致INTERVAL新增分區,LOCK PARTITION也會導致新增分區,而新增資料會導致LOCK PARTITION,那麼Oracle很可能是在監測到鎖分區的操作之後對INTERVAL分區進行了新增操作。
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/
SQL> LOCK TABLE T_PART_INTER
2 PARTITION FOR (320)
3 IN ROW SHARE MODE;
表鎖定。
SQL> LOCK TABLE T_PART_INTER
2 PARTITION FOR (430)
3 IN ROW EXCLUSIVE MODE;
表鎖定。
SQL> LOCK TABLE T_PART_INTER
2 PARTITION FOR (560)
3 IN SHARE ROW EXCLUSIVE MODE;
表鎖定。
SQL> LOCK TABLE T_PART_INTER
2 PARTITION FOR (670)
3 IN EXCLUSIVE MODE;
表鎖定。
SQL> LOCK TABLE T_PART_INTER
2 PARTITION FOR (780)
3 IN SHARE UPDATE MODE;
表鎖定。
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
2 FROM USER_TAB_PARTITIONS
3 WHERE TABLE_NAME = 'T_PART_INTER';
TABLE_NAME PARTITION_NAME HIGH_VALUE
--------------- --------------- ----------------------------------------