oracle表分区实操训练
生活随笔
收集整理的這篇文章主要介紹了
oracle表分区实操训练
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? 關于網上oracle表分區介紹的的文檔有很多(不過大概看了下基本都是一個模板刻出來的),看完后自己實際操練了下,雖然以前的項目中也用過,但是自己并沒有參與弄過,今天就在本機的庫上爽了一把。
操練環境:
一個表(電子簽章人員信息表)有20多萬條數據,重新建個一模一樣的表,并對此新表進行表分區設計
操練技能:
主要是對復合分區的練習,首先對日期進行范圍分區,再對分區進行列表字分區。
實操代碼:
1、創建存量數據表(里面有實際數據)
-- Create table create table ESSC_USER (user_id VARCHAR2(255) not null,aac002 VARCHAR2(22),aac003 VARCHAR2(255),aac067 VARCHAR2(255),sign_no VARCHAR2(255),sign_seq VARCHAR2(255),channel_no VARCHAR2(255),aab301 VARCHAR2(255),sign_level VARCHAR2(255),region_name VARCHAR2(255),valid_date VARCHAR2(10),sign_date VARCHAR2(10),bind_channel VARCHAR2(20) ) tablespace USERSpctfree 10initrans 1maxtrans 255storage(initial 64next 1minextents 1maxextents unlimited); -- Add comments to the columns comment on column ESSC_USER.aac002is '身份證號碼'; comment on column ESSC_USER.aac003is '姓名'; comment on column ESSC_USER.sign_nois '簽發號'; comment on column ESSC_USER.sign_seqis '簽發序列'; comment on column ESSC_USER.channel_nois '簽發渠道'; comment on column ESSC_USER.aab301is '行政區劃'; comment on column ESSC_USER.sign_levelis '簽發等級'; comment on column ESSC_USER.sign_dateis '簽發日期'; -- Create/Recreate indexes create index INDEX_AAB301_3 on ESSC_USER (AAB301, SIGN_DATE, CHANNEL_NO)tablespace USERSpctfree 10initrans 2maxtrans 255storage(initial 8Mnext 1Mminextents 1maxextents unlimited); create index INDEX_AAC002 on ESSC_USER (AAC002)tablespace USERSpctfree 10initrans 2maxtrans 255storage(initial 7Mnext 1Mminextents 1maxextents unlimited); -- Create/Recreate primary, unique and foreign key constraints alter table ESSC_USERadd primary key (USER_ID)using index tablespace USERSpctfree 10initrans 2maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);2、創建實操訓練表
(1)范圍分區
//根據簽發日期來分區 CREATE TABLE essc_user_copy PARTITION BY RANGE (SIGN_DATE) (PARTITION date_01 VALUES LESS THAN (20181001) TABLESPACE CP3,PARTITION date_02 VALUES LESS THAN (20191001) TABLESPACE CP3,PARTITION date_03 VALUES LESS THAN (MAXVALUE) TABLESPACE CP3)AS SELECT * FROM essc_user where 1=2 注意:由于本表中的SIGN_DATE字段是varchar2類型的,所以直接寫日期格式,如果各位童鞋的類型是日期型則使用下列的方式轉換一下:TO_DATE('20180101','YYYYMMDD')CREATE TABLE essc_user_copy PARTITION BY RANGE (SIGN_DATE) (PARTITION date_01 VALUES LESS THAN (TO_DATE('20180101','YYYYMMDD')) TABLESPACE CP3,PARTITION date_02 VALUES LESS THAN (TO_DATE('20190101','YYYYMMDD')) TABLESPACE CP3,PARTITION date_03 VALUES LESS THAN (MAXVALUE) TABLESPACE CP3)AS SELECT * FROM essc_user where 1=2(2)列表分區
//根據簽發等級來分區CREATE TABLE essc_user_copy partition by list(sign_level)(partition pur120000 values ('1'),partition pur150000 values ('2'))AS SELECT * FROM essc_user where 1=2(3)組合分區
//先根據日期范圍分區,在根據簽發登記進行子分區 CREATE TABLE essc_user_copy PARTITION BY RANGE(SIGN_DATE) SUBPARTITION BY LIST (sign_level)(PARTITION date_01 VALUES LESS THAN(20181001) ( SUBPARTITION SIGN_LEVEL1 VALUES ('1'), SUBPARTITION SIGN_LEVEL2 VALUES ('2') ), PARTITION date_02 VALUES LESS THAN (20191001) ( SUBPARTITION SIGN_LEVEL3 VALUES ('1'), SUBPARTITION SIGN_LEVEL4 VALUES ('2') ), PARTITION date_03 VALUES LESS THAN (MAXVALUE) ( SUBPARTITION SIGN_LEVEL5 VALUES ('1'), SUBPARTITION SIGN_LEVEL6 VALUES ('2') ) )AS SELECT * FROM essc_user where 1=2 注意:對于日期范圍分區的時候根據其類型進行相應的轉換3、注意項
(1)各分區的名字不能相同,否則會報錯。
(2)根據設定的分區,插入的數據必須在此分區范圍內,如果不在則報錯如下:
(3)表分區和表空間是兩個不同的概念,在分區過程中每個分區默認可以寫該表所在的表空間,也可寫不同的表空間,表空間是實際的物理分配。如果不寫則默認會有一個表空間USER
4、表分區后的常用查詢操作
(1)查詢相應分區的數據
//全表查詢 SELECT COUNT(USER_ID) FROM essc_user_copy; //分區查詢 SELECT COUNT(USER_ID) FROM essc_user_copy PARTITION(date_02); //子分區查詢 SELECT COUNT(USER_ID) FROM essc_user_copy SUBPARTITION(SIGN_LEVEL6);(2)查詢分區情況
/*查詢表上有多少分區*/ SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='essc_user_copy' /*顯示數據庫所有分區表的信息:*/ SELECT * FROM DBA_PART_TABLES /*顯示當前用戶可訪問的所有分區表信息:*/ SELECT * FROM ALL_PART_TABLES /*顯示當前用戶所有分區表的信息:*/ SELECT * FROM USER_PART_TABLES /*顯示表分區信息 顯示數據庫所有分區表的詳細分區信息:*/ SELECT * FROM DBA_TAB_PARTITIONS /*顯示當前用戶可訪問的所有分區表的詳細分區信息:*/ SELECT * FROM ALL_TAB_PARTITIONS /*顯示當前用戶所有分區表的詳細分區信息:*/ SELECT * FROM USER_TAB_PARTITIONS /*顯示子分區信息 顯示數據庫所有組合分區表的子分區信息:*/ SELECT * FROM DBA_TAB_SUBPARTITIONS /*顯示當前用戶可訪問的所有組合分區表的子分區信息:*/ SELECT * FROM ALL_TAB_SUBPARTITIONS /*顯示當前用戶所有組合分區表的子分區信息:*/ SELECT * FROM USER_TAB_SUBPARTITIONS /*顯示分區列 顯示數據庫所有分區表的分區列信息:*/ SELECT * FROM DBA_PART_KEY_COLUMNS /*顯示當前用戶可訪問的所有分區表的分區列信息:*/ SELECT * FROM ALL_PART_KEY_COLUMNS /*顯示當前用戶所有分區表的分區列信息:*/ SELECT * FROM USER_PART_KEY_COLUMNS /*顯示子分區列 顯示數據庫所有分區表的子分區列信息:*/ SELECT * FROM DBA_SUBPART_KEY_COLUMNS /*顯示當前用戶可訪問的所有分區表的子分區列信息:*/ SELECT * FROM ALL_SUBPART_KEY_COLUMNS /*顯示當前用戶所有分區表的子分區列信息:*/ SELECT * FROM USER_SUBPART_KEY_COLUMNS /*怎樣查詢出oracle數據庫中所有的的分區表*/ SELECT * FROM user_tables a where a.partitioned='YES' /*刪除一個表的數據*/ truncate table table_name; /*刪除分區表一個分區的數據*/ alter table table_name truncate partition partDemo;?
總結
以上是生活随笔為你收集整理的oracle表分区实操训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文的框架和逻辑如何把握?
- 下一篇: app的appPackage、appAc