oracle 11g 分割槽表建立(年月日周時分秒)
oracle 11g 支援自動分割槽,不過得在建立表時就設定好分割槽。
如果已經存在的表需要改分割槽表,就需要將當前表 rename後,再建立新表,然後複製資料到新表,然後刪除舊錶就可以了。
一、為什麼要分割槽
原因很簡單,快!
二、如何分割槽
2.1 按年分割槽
numtoyminterval(1, 'year')
--按年建立分割槽表
create table test_part
(
ID NUMBER(20) not null,
REMARK VARCHAR2(1000),
create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'year'))
(partition part_t01 values less than(to_date('2018-11-01', 'yyyy-mm-dd')));
--建立主鍵
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;
-- Create/Recreate indexes
create index test_part_create_time on TEST_PART (create_time);
2.2按月分割槽
numtoyminterval(1, 'month')
--按月建立分割槽表
create table test_part
(
ID NUMBER(20) not null,
REMARK VARCHAR2(1000),
create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'month'))
(partition part_t01 values less than(to_date('2018-11-01', 'yyyy-mm-dd')));
--建立主鍵
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;
2.3按天分割槽
NUMTODSINTERVAL(1, 'day')
--按天建立分割槽表
create table test_part
(
ID NUMBER(20) not null,
REMARK VARCHAR2(1000),
create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (NUMTODSINTERVAL(1, 'day'))
(partition part_t01 values less than(to_date('2018-11-12', 'yyyy-mm-dd')));
--建立主鍵
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;
2.4測試
可以新增幾條資料來看看效果,oracle 會自動新增分割槽。
--查詢當前表有多少分割槽
select table_name,partition_name from user_tab_partitions where table_name='TEST_PART';
--查詢這個表的某個(SYS_P21)裡的資料
select * from TEST_PART partition(SYS_P21);
三、numtoyminterval 和 numtodsinterval 的區別
3.1 numtodsinterval(<x>,<c>) ,x 是一個數字,c 是一個字串。
把 x 轉為 interval day to second 資料型別。
常用的單位有 ('day','hour','minute','second')。
測試一下:
select sysdate, sysdate + numtodsinterval(4,'hour') as res from dual;
結果:
3.2 numtoyminterval (<x>,<c>)
將 x 轉為 interval year to month 資料型別。
常用的單位有 ('year','month')。
測試一下:
select sysdate, sysdate + numtoyminterval(3, 'year') as res from dual;
結果:
四、給已有的表分割槽
需要先備份表,然後新建這個表,拷貝資料,刪除備份表。
-- 1. 重新命名
alter table test_part rename to test_part_temp;
-- 2. 建立 partition table
create table test_part
(
ID NUMBER(20) not null,
REMARK VARCHAR2(1000),
create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'month'))
(partition part_t1 values less than(to_date('2018-11-01', 'yyyy-mm-dd')));
-- 3. 建立主鍵
alter table test_part add constraint test_part_pk_1 primary key (ID) using INDEX;
-- 4. 將 test_part_temp 表裡的資料遷移到 test_part 表中
insert into test_part_temp select * from test_part;
-- 5. 為分割槽表設定索引
-- Create/Recreate indexes
create index test_part_create_time_1 on TEST_PART (create_time);
-- 6. 刪除老的 test_part_temp 表
drop table test_part_temp purge;
-- 7. 作用是:允許分割槽表的分割槽鍵是可更新。
-- 當某一行更新時,如果更新的是分割槽列,並且更新後的列植不屬於原來的這個分割槽,
-- 如果開啟了這個選項,就會把這行從這個分割槽中 delete 掉,並加到更新後所屬的分割槽,此時就會發生 rowid 的改變。
-- 相當於一個隱式的 delete + insert ,但是不會觸發 insert/delete 觸發器。
alter table test_part enable row movement;
相關文章
- Oracle 建立分割槽表Oracle
- 使用Oracle Database 11g建立Interval分割槽表OracleDatabase
- 建立oracle10g 11g分割槽表Oracle
- [間隔分割槽]Oracle10g、11g建立間隔分割槽表Oracle
- oracle 11g 分割槽表Oracle
- Oracle 分割槽表的建立Oracle
- js 年月日時分秒JS
- oracle10g 11g分割槽表建立舉例Oracle
- [引用分割槽表]Oracle 11g新特性之引用分割槽表Oracle
- ORACLE 11G分割槽表新功能:列表--範圍分割槽Oracle
- ORACLE 11g 範圍分割槽錶轉換INTERVAL分割槽表Oracle
- 分割槽表及分割槽索引建立示例索引
- oracle分割槽表和分割槽表exchangeOracle
- oracle 根據虛擬列建立以周幾為單位的分割槽表Oracle
- Oracle分割槽表及分割槽索引Oracle索引
- oracle分割槽表和非分割槽表exchangeOracle
- JS轉換成年月日時分秒JS
- Oracle 表分割槽Oracle
- oracle分割槽表Oracle
- oracle表分割槽Oracle
- Oracle 分割槽表Oracle
- Oracle分割槽表全域性索引新增分割槽時不會失效Oracle索引
- OceaBase 分割槽表建立技巧
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- ORACLE分割槽表管理Oracle
- oracle 建立所有分割槽索引Oracle索引
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- 分割槽表並行建立索引並行索引
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- ORACLE分割槽表梳理系列Oracle
- Oracle分割槽表遷移Oracle
- oracle 分割槽表詳解Oracle
- Oracle分割槽表介紹Oracle