INTERVAL分割槽表鎖分割槽操作
在文件中,對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分割槽進行了新增操作。
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
--------------- --------------- ----------------------------------------
T_PART_INTER P1 100
T_PART_INTER P2 200
T_PART_INTER SYS_P102 300
T_PART_INTER SYS_P103 400
T_PART_INTER SYS_P104 500
T_PART_INTER SYS_P105 600
T_PART_INTER SYS_P106 700
T_PART_INTER SYS_P107 800
已選擇8行。
可以看到,由LOCK TABLE引發的任何模式的鎖操作,都會導致INTERVAL分割槽的新增,但是,SELECT FOR UPDATE操作並不會引發這個操作:
SQL> SELECT *
2 FROM T_PART_INTER
3 PARTITION FOR(890)
4 FOR UPDATE;
未選定行
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
T_PART_INTER SYS_P103 400
T_PART_INTER SYS_P104 500
T_PART_INTER SYS_P105 600
T_PART_INTER SYS_P106 700
T_PART_INTER SYS_P107 800
已選擇8行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-629177/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- Oracle11g INTERVAL分割槽新增分割槽策略Oracle
- ORACLE 11g 範圍分割槽錶轉換INTERVAL分割槽表Oracle
- 全面學習分割槽表及分割槽索引(17)--其它索引分割槽管理操作索引
- DATE型別INTERVAL分割槽型別
- oracle分割槽表和分割槽表exchangeOracle
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- 如何查詢分割槽表的分割槽及子分割槽
- Oracle分割槽表及分割槽索引Oracle索引
- Spark操作Hive分割槽表SparkHive
- 分割槽表attach detach操作
- 分割槽表的常用操作
- Oracle Interval Partition 自動分割槽表-實驗Oracle
- oracle分割槽表和非分割槽表exchangeOracle
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- MySql資料分割槽操作之新增分割槽操作MySql
- 全面學習分割槽表及分割槽索引(10)--交換分割槽索引
- PLSQL根據分割槽表的分割槽名批次truncate分割槽SQL
- 使用split對分割槽表再分割槽
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 分割槽表及分割槽索引建立示例索引
- 關於分割槽表的操作
- Sql Server系列:分割槽表操作SQLServer
- Oracle查詢Interval partition分割槽表內資料Oracle
- 使用Oracle Database 11g建立Interval分割槽表OracleDatabase
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- 非分割槽錶轉換成分割槽表
- 分割槽表分割槽索引查詢效率探究索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維