系列文章目錄
【SQL開發實戰技巧】系列(一):關于SQL不得不說的那些事
【SQL開發實戰技巧】系列(二):簡單單表查詢
【SQL開發實戰技巧】系列(三):SQL排序的那些事
【SQL開發實戰技巧】系列(四):從執行計劃討論UNION ALL與空字符串&UNION與OR的使用注意事項
【SQL開發實戰技巧】系列(五):從執行計劃看IN、EXISTS 和 INNER JOIN效率,我們要分場景不要死記網上結論
【SQL開發實戰技巧】系列(六):從執行計劃看NOT IN、NOT EXISTS 和 LEFT JOIN效率,記住內外關聯條件不要亂放
【SQL開發實戰技巧】系列(七):從有重復數據前提下如何比較出兩個表中的差異數據及對應條數聊起
【SQL開發實戰技巧】系列(八):聊聊如何插入數據時比約束更靈活的限制數據插入以及怎么一個insert語句同時插入多張表
【SQL開發實戰技巧】系列(九):一個update誤把其他列數據更新成空了?Merge改寫update!給你五種刪除重復數據的寫法!
【SQL開發實戰技巧】系列(十):從拆分字符串、替換字符串以及統計字符串出現次數說起
【SQL開發實戰技巧】系列(十一):拿幾個案例講講translate|regexp_replace|listagg|wmsys.wm_concat|substr|regexp_substr常用函數
【SQL開發實戰技巧】系列(十二):三問(如何對字符串字母去重后按字母順序排列字符串?如何識別哪些字符串中包含數字?如何將分隔數據轉換為多值IN列表?)
【SQL開發實戰技巧】系列(十三):討論一下常用聚集函數&通過執行計劃看sum()over()對員工工資進行累加
【SQL開發實戰技巧】系列(十四):計算消費后的余額&計算銀行流水累計和&計算各部門工資排名前三位的員工
【SQL開發實戰技巧】系列(十五):查找最值所在行數據信息及快速計算總和百之max/min() keep() over()、fisrt_value、last_value、ratio_to_report
【SQL開發實戰技巧】系列(十六):數據倉庫中時間類型操作(初級)日、月、年、時、分、秒之差及時間間隔計算
【SQL開發實戰技巧】系列(十七):數據倉庫中時間類型操作(初級)確定兩個日期之間的工作天數、計算—年中周內各日期出現次數、確定當前記錄和下一條記錄之間相差的天數
【SQL開發實戰技巧】系列(十八):數據倉庫中時間類型操作(進階)INTERVAL、EXTRACT以及如何確定一年是否為閏年及周的計算
【SQL開發實戰技巧】系列(十九):數據倉庫中時間類型操作(進階)如何一個SQL打印當月或一年的日歷?如何確定某月內第一個和最后—個周內某天的日期?
【SQL開發實戰技巧】系列(二十):數據倉庫中時間類型操作(進階)獲取季度開始結束時間以及如何統計非連續性時間的數據
【SQL開發實戰技巧】系列(二十一):數據倉庫中時間類型操作(進階)識別重疊的日期范圍,按指定10分鐘時間間隔匯總數據
【SQL開發實戰技巧】系列(二十二):數倉報表場景? 從分析函數效率一定快嗎聊一聊結果集分頁和隔行抽樣實現方式
【SQL開發實戰技巧】系列(二十三):數倉報表場景? 如何對數據排列組合去重以及通過如何找到包含最大值和最小值的記錄這個問題再次用執行計劃給你證明分析函數性能不一定高
【SQL開發實戰技巧】系列(二十四):數倉報表場景?通過案例執行計劃詳解”行轉列”,”列轉行”是如何實現的
【SQL開發實戰技巧】系列(二十五):數倉報表場景?結果集中的重復數據只顯示一次以及計算部門薪資差異高效的寫法以及如何對數據進行快速分組
【SQL開發實戰技巧】系列(二十六):數倉報表場景?聊聊ROLLUP、UNION ALL是如何分別做分組合計的以及如何識別哪些行是做匯總的結果行
【SQL開發實戰技巧】系列(二十七):數倉報表場景?通過對移動范圍進行聚集來詳解分析函數開窗原理以及如何一個SQL打印九九乘法表
【SQL開發實戰技巧】系列(二十八):數倉報表場景?人員分布問題以及不同組(分區)同時聚集如何實現
【SQL開發實戰技巧】系列(二十九):數倉報表場景?簡單的樹形(分層)查詢以及如何確定根節點、分支節點和葉子節點
【SQL開發實戰技巧】系列(三十):數倉報表場景?樹形(分層)查詢如何排序?以及如何在樹形查詢中正確的使用where條件
【SQL開發實戰技巧】系列(三十一):數倉報表場景?分層查詢如何只查詢樹形結構某一個分支?如何剪掉一個分支?
【SQL開發實戰技巧】系列(三十二):數倉報表場景?對表中某個字段內的值去重
【SQL開發實戰技巧】系列(三十三):數倉報表場景?從不固定位置提取字符串的元素以及搜索滿足字母在前數字在后等條件的數據
【SQL開發實戰技巧】系列(三十四):數倉報表場景?如何對數據分級并行轉為列
【SQL開發實戰技巧】系列(三十五):數倉報表場景?根據條件返回不同列的數據以及Left /Full Join注意事項
【SQL開發實戰技巧】系列(三十六):數倉報表場景?整理垃圾數據:查找數據的連續性時間和重疊時間的關系,初始化開始結束時間
【SQL開發實戰技巧】系列(三十七):數倉報表場景?從表內始終只有近兩年的數據,要求用兩列分別顯示其中一年的數據聊行轉列隱含信息的重要性
【SQL開發實戰技巧】系列(三十八):數倉報表場景?拆分字符串進行連接
【SQL開發實戰技巧】系列(三十九):Oracle12C常用新特性?新增分頁查詢
【SQL開發實戰技巧】系列(四十):Oracle12C常用新特性?可以在同樣的列(列組合)上創建多個索引以及可以對DDL操作進行日志記錄
【SQL開發實戰技巧】系列(四十一):Oracle12C常用新特性?APPROX_COUNT_DISTINCT以及TEMP UNDO(臨時undo記錄可以存儲在一個臨時表中)
【SQL開發實戰技巧】系列(四十二):Oracle12C常用新特性?With FUNCTION新特性
【SQL開發實戰技巧】系列(四十三):Oracle12C常用新特性?轉換函數的增強和不可見字段
【SQL開發實戰技巧】系列(四十四):Oracle12C常用新特性?你知道嗎Oralcle新增了類似Mysql的自增列(Identity Columns)功能
【SQL開發實戰技巧】系列(四十五):Oracle12C常用新特性?varchar2/nvarchar2類型最大長度由4000字節擴展到32767字節
【SQL開發實戰技巧】系列(四十六):Oracle12C常用新特性?會話級序列及數據泵(DataPump增強)支持像表一樣導出視圖
【SQL開發實戰技巧】系列(四十七):Oracle12C常用新特性?非分區表在線轉分區表online clause(不停業務+索引有效)
【SQL開發實戰技巧】系列(四十八):Oracle12C常用新特性?多分區操作和管理
文章目錄
- 系列文章目錄
- 前言
- 【SQL開發實戰技巧】系列(四十八):Oracle12C常用新特性?多分區操作和管理
- 一、增加多個新分區
- 二、同時截斷/刪除多個分區
- 三、同時拆分多個分區
- 四、同時合并多個分區
- 總結
前言
本篇文章主要給講解的Oracle12C+的新特性是:*** 多分區操作和管理:通過ALTER TABLE ADD PARTITION增加多個新分區、 通過ALTER TABLE table_name {DROP|TRUNCATE}PARTITIONS 同時截斷/刪除多個分區、通過SPLIT PARTITION同時拆分多個分區、通過ALTER TBALE MERGE PARTITIONS合并多個分區***
【SQL開發實戰技巧】這一系列博主當作復習舊知識來進行寫作,畢竟SQL開發在數據分析場景非常重要且基礎,面試也會經常問SQL開發和調優經驗,相信當我寫完這一系列文章,也能再有所收獲,未來面對SQL面試也能游刃有余~。
【SQL開發實戰技巧】系列(四十八):Oracle12C常用新特性?多分區操作和管理
一、增加多個新分區
在Oracle 12c R1之前,一次只可能添加一個新分區到一個已存在的分區表。要添加一個以上的新分區,需要對每個新分區都單獨執行一次ALTER TABLE ADD PARTITION
語句。而Oracle 12c只需要使用一條單獨的ALTER TABLE ADD PARTITION
命令就可以添加多個新分區,這增加了數據庫靈活性。
案例:
創建測試用表:
CREATE TABLE t1_part (eno number(8), ename varchar2(40), sal number (6))PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (30000));
插入一條數據:
insert into t1_part values(1,'a',1);
insert into t1_part values(2,'a',10001);
insert into t1_part values(3,'a',20001);
select segment_name,segment_type,PARTITION_NAME,TABLESPACE_NAME from user_segments where segment_name = 'T1_PART';
ALTER TABLE t1_part ADD PARTITION p4 VALUES LESS THAN (35000),PARTITION p5 VALUES LESS THAN (40000);
insert into t1_part values(4,'a',34000);
insert into t1_part values(5,'a',35001);
select segment_name,segment_type,PARTITION_NAME,TABLESPACE_NAME from user_segments where segment_name = 'T1_PART';
二、同時截斷/刪除多個分區
作為數據維護的一部分,DBA通常會在一個分區表上進行刪除或截斷分區的維護任務。在12c R1之前,對于一個已存在的分區表一次只可能刪除或截斷一個分區。而對于Oracle12c, 可以用單條ALTER TABLE table_name {DROP|TRUNCATE}PARTITIONS
命令來撤銷或合并多個分區和子分區。
案例:
alter table t1_part drop partitions p4,p5;
ALTER TABLE t1_part TRUNCATE partitions p2,p3;
select segment_name,segment_type,PARTITION_NAME,TABLESPACE_NAME from user_segments where segment_name = 'T1_PART';
select * from t1_part partition(p2)
union all
select * from t1_part partition(p3);
no rows.
三、同時拆分多個分區
在12c中新增強的SPLIT PARTITION 語句可以只使用一個單獨命令將一個特定分區或子分區分割為多個新分區。
案例:
創建測試用表:
CREATE TABLE t2_part (eno number(8), ename varchar2(40), sal number(6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p_max VALUES LESS THAN (MAXVALUE) );
insert into t2_part values(1,'a',1);
insert into t2_part values(2,'a',10009);
insert into t2_part values(2,'a',20000);
select segment_name,segment_type,PARTITION_NAME,TABLESPACE_NAME from user_segments where segment_name = 'T2_PART';
ALTER TABLE t2_part
SPLIT PARTITION p_max INTO
(PARTITION p3 VALUES LESS THAN (25000),
PARTITION p4 VALUES LESS THAN (30000),
PARTITION p_max);
insert into t2_part values(4,'a',24000);
insert into t2_part values(5,'a',26000);
insert into t2_part values(6,'a',29000);
select segment_name,segment_type,PARTITION_NAME,TABLESPACE_NAME from user_segments where segment_name = 'T2_PART';
四、同時合并多個分區
在12C中可以使用單條ALTER TBALE MERGE PARTITIONS 語句將多個分區合并為一個單獨分區。
案例:
alter table t2_part merge partitions p2 to p3 into partition p_m23;
select segment_name,segment_type,PARTITION_NAME,TABLESPACE_NAME from user_segments where segment_name = 'T2_PART';
總結
以上是總結的Oracle12C+對于分區表的一些實用的新特性實戰。