1. 程式人生 > >oracle按時間自動建立分割槽表

oracle按時間自動建立分割槽表

首先明確分割槽表和表分割槽的區別:表分割槽是一種思想,分割槽表示一種技術實現。當表的大小過G的時候可以考慮進行表分割槽,提高查詢效率,均衡IO。oracle分割槽表是oracle資料庫提供的一種表分割槽的實現形式。表進行分割槽後,邏輯上仍然是一張表,原來的查詢SQL同樣生效,同時可以採用使用分割槽查詢來優化SQL查詢效率,不至於每次都掃描整個表

一、分割槽表基本操作

1、按時間分割槽表建立: 

create table t_test (
   pk_id                number(30)                      not null,
  add_date_time        DATE,
   constraintPK_T_TEST primary key (pk_id)
)
PARTITION BY RANGE (add_date_time)
(
  PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
  PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
  PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS
)

其中add_date_time為分割槽欄位,每一年一個分割槽。

插入100W資料

declare
  i    int := 1;
  yearVARCHAR2(20);
begin
  loop
    year := CASEmod(i, 3)
             WHEN 0 THEN
              '2012-01-14 12:00:00'
             WHEN 1 THEN
              '2013-01-14 12:00:00'
             ELSE
              '2014-01-14 12:00:00'
            END;
           insert into t_test values(i, to_date(year, 'yyyy-mm-dd hh24:mi:ss'));
    exit when i= 1000000;
    i := i + 1;
  end loop;
end;

檢視分割槽表的分割槽的詳細資訊

Select table_name,partition_name,high_value fromdba_tab_partitions where table_name='T_TEST';

2、分割槽表修改

2.1增加一個分割槽

分兩種情況:1.沒有maxvalue分割槽。2.有maxvalue分割槽。我們建立的分割槽就是沒有maxValue的分割槽

1.沒有maxvalue分割槽新增新分割槽:

alter table t_test add partition t_test_2015 VALUESLESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACETS_MISPS ;

2、有maxvalue分割槽新增新分割槽:

有了maxvalue,就不能直接add partition,而是需要max分割槽split。例如我們將建立的分割槽的語句修改下:

create table t_test (
   pk_id                number(30)                      not null,
  add_date_time        DATE,
   constraintPK_T_TEST primary key (pk_id)
)
PARTITION BY RANGE (add_date_time)
(
  PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
  PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
  PARTITIONt_test_2014 VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
    PARTITION t_test_maxVALUES LESS THAN (MAXVALUE)
)

增加一個2016年的分割槽語句為:

alter table t_test split partition t_test_max at(TO_DATE('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) into (partitiont_test_2015,partition t_test_max);

2.2刪除一個分割槽

alter table t_test drop partition t_test_2014 

注:droppartition時,該分割槽記憶體儲的資料也將同時刪除,你的本意是希望刪除掉指定的分割槽但保留資料,你應該使用merge partition,執行該語句會導致glocal索引的失效需要重建全域性索引

2.3合併分割槽

相鄰的分割槽可以merge為一個分割槽,新分割槽的下邊界為原來邊界值較低的分割槽,上邊界為原來邊界值較高的分割槽,原先的區域性索引相應也會合並,全域性索引會失效,需要rebuild。

Alter  table t_test  merge partitions t_test_2013  ,t_Test_2014 into partition t_Test_2013_to_2014
二、對分割槽表進行查詢

2.1查詢

不使用分割槽查詢:預設查詢所有分割槽資料

select * from t_test 

使用分割槽查詢:只查詢該分割槽資料

select * from t_testpartition(t_test_2014) where add_date_time >=TO_DATE('2014-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss');

2.1插入

insert into t_test values(i, to_date(year,'yyyy-mm-dd hh24:mi:ss'));

2.1刪除

使用分割槽刪除

更新的時候指定了分割槽,而根據查詢的記錄不在該分割槽中時,將不會刪除資料

delete t_test partition(t_test_2013) where id=1;

不使用分割槽刪除

delete t_test  whereid=1;

2.1修改

使用分割槽更新

更新的時候指定了分割槽,而根據查詢的記錄不在該分割槽中時,將不會更新資料

delete t_test where id=1;
update t_test partition(t_test)  set id=1 where id=2;

不使用分割槽

delete t_test where id=1;
update t_test  set id=1 where id=2;

三、普通表和分割槽表互轉

普通表—>分割槽表

1、新建一個欄位一樣的中間的分割槽表(T_NEW)

2、將T資料匯入到T_NEW中

INSERT INTO T SELECT field1,filed2, …from T

將老表重新命名

RENAME T TO T_OLD;

將新表重新命名

RENAME T_NEW TO T;

這種適合靜態操作,不保證資料一致性。如果在生產環境切換,利用利用線上重定義功能

相關推薦

oracle時間自動建立分割槽

首先明確分割槽表和表分割槽的區別:表分割槽是一種思想,分割槽表示一種技術實現。當表的大小過G的時候可以考慮進行表分割槽,提高查詢效率,均衡IO。oracle分割槽表是oracle資料庫提供的一種表分割槽的實現形式。表進行分割槽後,邏輯上仍然是一張表,原來的查詢SQL同樣生

oracle11g分割槽時間自動建立

首先來介紹下numtodsinterval和numtoyminterval兩個函式。 numtoyminterval和numtoyminterval是日期轉換函式,作用:可以將數字轉換成相應

hive當天日期建立分割槽 | 動態往日期分割槽插入資料

hive建立分割槽表,以當天日期(“2014-08-15”)作為分割槽依據,hql如下: CREATE EXTERNAL TABLE IF NOT EXISTS product_sell( cate

oracle 建立分割槽以及自動新增分割槽

oracle提供了以下幾種分割槽型別:     範圍分割槽(range)     雜湊分割槽(hash)     列表分割槽(list)     範圍-雜湊複合分割槽(range-hash)     範圍-列表複合分割槽(range-list)          檢視分割槽數

oracle自動建立分割槽建立分割槽索引

-- Create table create table T_TEST1 (   t_key           varchar2(20),   createtime      DATE ) parti

Activiti-explorer從mysql切換Oracle不能自動建立表報錯:ORA-00942: 或檢視不存在

在activiti-explorer中activiti-customer-context.xml檔案正常配置情況下,程式碼處於全部註釋狀態,將註釋放開,然後在 <bean id="process

使用hibernate自動建立Mysql失敗原因及解決方法

原因: hibernate裡的dialect和Mysql的版本不匹配,SQL語句裡的type=“****”使用在MySQL5.0之前,5.0之後就要是使用engine=“****”。 解決: 修改hibernate.cfg.xml檔案 MySql5.0之前的配置 <property

sql server 建立分割槽

建立檔案組 alter database db_sp_360toandroid add filegroup Before201701alter database db_sp_360toandroid add filegroup userEventInfo201701alter databa

Hive: 建立分割槽(partition)及分割槽匯入csv文字檔案資料

2018.11.21 文章目錄 前言 方法 前言 某專案生產環境中的Hive是按月份分割槽,而測試環境的沒有分割槽,導致部分功能無法驗證。 方法 基本思路:分別建立兩個表,一張是分割槽表,另一

A.CTable 自動建立資料

1.新增依賴 <!-- A.CTable 自動建立資料表 --> <dependency> <groupId>com.gitee.sunchenbin.mybatis.actable</groupId> <artifactId>my

建立分割槽的時候出現ORA-01843

RDBMS 12.2.0.1 , OS Windows 。 在建立分割槽表的時候,提示ORA-01843錯誤。 [email protected]/nocdb>CREATE TABL

springBoot下java自動建立資料庫

####SpringBoot環境啟動專案建立資料庫表 ####使用環境 windows+eclipse+mysql+navicat ####步驟 1.建立SpringBoot專案 2.新建資料庫,配置連線資訊 3.編寫初始化資料庫表類 4.執行檢視結果 1.建立

分享知識-快樂自己:Oracle基本語法(建立空間、使用者、授權、約束等)使用指南

--2.1)建立主鍵約束-- alter table Student add constraint PK_Student_StuId primary key(StuId); alter table StuClass add constraint PK_StuClass_ClassId primar

oracle定時新增或刪除分割槽分割槽

                author:skatetime: 2009/04/15平臺如下:os:centos4.7oracle 10g定時新增或刪除分割槽表的分割槽這幾天,根據業務的需求和效能的考慮,需要定時刪除歷史資料,表裡只保留最近指定的wareid的資料,考慮刪除時對錶的影響及便利性,我決定把這

Shell指令碼執行hive語句 | hive以日期建立分割槽 | linux schedule程式 | sed替換檔案字串 | shell判斷hdfs檔案目錄是否存在

#!/bin/bash source /etc/profile; ################################################## # Author: ouyangyewei # #

Oracle和SQLServer的建立

create table course ( couno number(9) not null constraint pk_couno primary key, couname varchar2(40), score number(3) default 0

jpa在mysql中自動建立重複,只是大小寫不同

參考資料: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html http://www.alberton.info/dbms_identifiers_and_case_sens

在hive中建立分割槽,再關聯到hdfs有關位置,而不需匯入資料到hive

【需求】有時候我們不想匯入資料到hive中,而是通過在hive中建立關聯表的方式查詢hdfs上的資料,之後就能通過hive客戶端或者spark應用程式獲取hive的資料了。【原理】由於在hdfs中已存入了我們提前整理好的結構化資料(例如每條記錄都是以逗號分隔),那麼在hive

oracle11g自動建立分割槽(INTERVAL PATITION)後的定時刪分割槽

TRUCK_GPS_TRANS表利用oracle11的INTERVAL PATITION自動建立分割槽功能按天分割槽,現在要定時刪除30天之前的分割槽資料,保持表裡只有30天的業務資料,因為分割槽是動態建立,無法獲得分割槽名,所以要用到字典表user_objects ,儲存

SQL server 如何建立分割槽

一、分割槽表的定義:         一般情況下,我們建立資料庫表時,表資料都存放在一個檔案裡。但是如果是分割槽表的話,表資料就會按照你指定的規則分放到不同的檔案裡,把一個大的資料檔案拆分為多個小檔案,還可以把這些小檔案放在不同的磁碟下由多個cpu進行