Oracle將一張普通表更改為按天分割槽的表

2021-10-06 06:33:39 字數 2125 閱讀 8488

目前資料庫中有一張記錄軌跡的表patrol_track,因後期資料量會增長到很大,所以想根據該錶的create_time字段建立表分割槽,參考了網上的資料,作了如下處理:

檢視該錶是否支援重定義

sql

>

exec dbms_redefinition.can_redef_table(

user

,'patrol_track'

, dbms_redefinition.cons_use_pk)

;

出現如下的錯誤:

需要為該錶定義乙個主鍵

sql

>

alter

table patrol_track add

constraint pk_patrol_track primary

key(id)

;

定義主鍵後再次檢視是否支援重定義,執行結果:pl/sql過程已成功完成。

建立乙個相同結構的表patrol_track_new,並且按天分割槽

sql

>

create

table patrol_track_new (id number(19)

, create_time date

)partition

by range(create_time)

interval

(numtodsinterval(1,

'day'))

(partition p_day_1 values less than (to_date(

'2020-04-30'

,'yyyy-mm-dd'))

);

這是支援按天自增分割槽的,如果想按月分割槽的話,把numtodsinterval(1, 『day』)替換為numtoyminterval(1, 『month』)即可。

插入資料,檢視分割槽

sql

>

select table_name, partition_name from user_tab_partitions where table_name =

'patrol_track_new'

;

執行完後可以看到表已經存在幾個分割槽:

);將新建的表與原表進行同步

sql

>

execute dbms_redefinition.sync_interim_table(

user

,'patrol_track'

,'patrol_track_new'

);

sql

>

exec dbms_redefinition.finish_redef_table(

user

,'patrol_track'

,'patrol_track_new'

);

到這裡,再去查詢原表,已經可以查到分割槽。

注:

sql

>

exec dbms_redefinition.abort_redef_table(

user

,'patrol_track'

,'patrol_track_new'

);

oracle分割槽視窗按月按天自動分割槽

oracle將普通表改為分割槽表

oracle的普通表沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,下面介紹三種效率比較高的方法,並說明它們各自的特點。方法一 利用原表重建分割槽表。步驟 sql create table t id number primary key,time date 表已建立。sql...

將一張表的資料插入另外一張表

表cmb send sms create table cmb send sms send id bigint 20 not null auto increment comment 主鍵id phone no varchar 32 not null comment 手機號碼 status varcha...

Oracle將一張表幾個字段賦值到另一張表指定字段

由於某種原因客戶資料庫中 trp advp表部分記錄的projectname和groupname兩個字段值丟失,由於trp reportitem 表中可以找到對應的資料,於是通過該錶進行資料還原.trp advp中一條記錄對應trp reportitem中的多條記錄,因此需要對trp reporti...