Oracle分區表設置詳解


Oracle分區表詳解

Oracle建議單表超過2G就需要進行分表,一萬數據大概3MB,單表最多分區為1024*1024-1個分區,我感覺夠我們使用了哈

廢話不多說,上示例,Oracle分表具體sql如下,大家可根據自己情況進行更改,具體理論后期有時間進行補充哈,希望可以幫助到各位大佬!

示例:

-- 創建臨時分區表
CREATE TABLE "MARKET"."STUDENT_2" ( 
	"ID" NUMBER, 
	"NAME" VARCHAR2 (255),
	"CREATE_TIME" TIMESTAMP (6),
	PRIMARY KEY ("ID") 
)
-- 根據那個字段進行分區 按月進行分區	按月自動分區
-- 按年year 、月month 
-- 按天 NUMTODSINTERVAL(1, 'day') 、按周(7, 'day')
PARTITION BY RANGE ("CREATE_TIME")  INTERVAL (numtoyminterval(1, 'month'))
(
-- than 分區的區間 只能有一個 分區存儲的為上一個月數據
 PARTITION STUDENT_A2 VALUES LESS THAN (to_date('2022-01-01', 'yyyy-mm-dd'))
 )


--查詢當前表有多少分區
select * from user_tab_partitions where table_name='STUDENT_2';

--查詢這個表的某個分區(SYS_P21)里的數據
select * from STUDENT_2 partition(STUDENT_A2);

-- 添加分區
alter table STUDENT_2 add PARTITION STUDENT_A3 VALUES LESS THAN (to_date('2022-02-01', 'yyyy-mm-dd'))

-- 刪除分區
ALTER TABLE STUDENT_2 DROP PARTITION STUDENT_A2;
-- 如果是全局索引,因為全局索引的分區結構和表可以不一致,若不一致的情況下,會導致整個全局索引失效,在刪除分區的時候,語句修改為:
ALTER TABLE STUDENT_2 DROP PARTITION STUDENT_A2 UPDATE GLOBAL INDEXES;

-- 查看分區索引
select * from user_ind_partitions;

-- 5. 為分區表設置索引全局索引
-- Create/Recreate indexes 
create index student_2_create_time_1 on STUDENT_2 (CREATE_TIME);

-- 6. 設置分區索引
CREATE INDEX INX_TAB_PARTITION_COL1 ON STUDENT_2(NAME) LOCAL;

-- 刪除索引
DROP INDEX INX_TAB_PARTITION_COL1;

--6.1、查詢索引、表上在那些列上創建了分區:

SELECT * FROM USER_PART_KEY_COLUMNS;


-- 7. 作用是:允許分區表的分區鍵是可更新。
-- 當某一行更新時,如果更新的是分區列,並且更新后的列植不屬於原來的這個分區,
-- 如果開啟了這個選項,就會把這行從這個分區中 delete 掉,並加到更新后所屬的分區,此時就會發生 rowid 的改變。
-- 相當於一個隱式的 delete + insert ,但是不會觸發 insert/delete 觸發器。
alter table STUDENT_2 enable row movement;

-- 關閉自動分區
alter table t set interval();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM