1. 程式人生 > >oracle表按日期分割槽建立、新增、修改、刪除

oracle表按日期分割槽建立、新增、修改、刪除

Oracle11G分割槽表

  當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃描整張表。

作用:

  Oracle的表分割槽功能通過改善可管理性、效能和可用性,從而為各式應用程式帶來了極大的好處。通常,分割槽可以使某些查詢以及維護操作的效能大大提高。此外,分割槽還可以極大簡化常見的管理任務,分割槽是構建千兆位元組資料系統或超高可用性系統的關鍵工具。

  分割槽功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫物件的段叫做分割槽。每個分割槽有自己的名稱,還可以選擇自己的儲存特性。從資料庫管理員的角度來看,一個分割槽後的物件具有多個段,這些段既可進行集體管理,也可單獨管理,這就使資料庫管理員在管理分割槽後的物件時有相當大的靈活性。但是,從應用程式的角度來看,分割槽後的表與非分割槽表完全相同,使用 SQL DML 命令訪問分割槽後的表時,無需任何修改。

什麼時候用:

  1、表的大小超過2GB。

  2、表中包含歷史資料,新的資料被增加都新的分割槽中。

優點: 

  1、改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。

  2、增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用;

  3、維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;

  4、均衡I/O:可以把不同的分割槽對映到磁碟以平衡I/O,改善整個系統性能。

1.建立分割槽表--按月份自動建立分割槽的分割槽表

create table table_partition
(
TERMINALNO varchar(100) not null,
ESCFLOWNO varchar(100) not null,
FLOWLOCATION char(1) not null,
TRANSDATE date not null,
TRANSSTAMP timestamp default current_timestamp
) partition by range (TRANSDATE) interval (numtoyMinterval (1,'MONTH'))
(
partition p9 values less than (to_date('2017-10-01', 'yyyy-mm-dd'))
)
tablespace temp_tablespace;

2:分割槽表增、刪、改、查

--range間隔分割槽的情況 ORA-14760: 不允許對間隔分割槽物件執行 ADD PARTITION
--改為非間隔分割槽 並再改成按天間隔
ALTER TABLE table_partition SET INTERVAL ();
--add partition 不能小於當前分割槽的最小分割槽時間
alter table table_partition add partition montu_1 values less than(to_date('20180907','yyyymmdd'));
--按天間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'YEAR'));
--按月間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'MONTH'));
--按天間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'DAY'));
--按周間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'DAY'));
--range非間隔分割槽的情況
--add partition 不能小於當前分割槽的最小分割槽時間
alter table table_partition add partition montu_2 values less than(to_date('20180907','yyyymmdd'));
--按天間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'YEAR'));
--按月間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'MONTH'));
--按天間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'DAY'));
--按周間隔分割槽
ALTER TABLE table_partition SET INTERVAL (numtoyMinterval (1,'DAY'));

--刪除表分割槽 注意改刪除會將改分割槽下面的資料全部刪除
alter table table_partition drop partition P_MONTH_1;

--顯示資料庫所有分割槽表的資訊:
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 montu_2;

--重命名錶分割槽 將a1更改為a2

ALTER TABLE SALES RENAME PARTITION a1 TO a2;

 

3:按分割槽查詢資料

--查詢當前分割槽中資料
select * from esc_trans_log partition(SYS_P97)

-- 跨分割槽查詢
select * from esc_trans_log partition(SYS_P97)
union all
select * from esc_trans_log partition(SYS_P98)