在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

数据库中间隔分区表的删除逻辑

116次阅读
没有评论

共计 6767 个字符,预计需要花费 17 分钟才能阅读完成。

这篇文章主要介绍了数据库中间隔分区表的删除逻辑,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

主要讨论如下:
1. 间隔分区表的删除逻辑
2. 如何处理 ORA-14758 报错

创建间隔分区
create table t_interval
(
  a DATE,
  b int,
  c int
  )
PARTITION BY RANGE (a)
  INTERVAL (numtodsinterval(3, day))
  (
  PARTITION P1 VALUES LESS THAN (TO_DATE( 2018-1-2 , YYYY-MM-DD))
  );
insert into t_interval values(TO_DATE( 2018-01-01 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-02 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-05 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-08 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-11 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-14 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
commit;

09:45:19 SQL   select PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,INTERVAL from dba_tab_partitions where table_name= T_INTERVAL

PARTITION_NAME  HIGH_VALUE  PARTITION_POSITION INTERVAL
——————– ——————————————————————————– —————— ———
P1  TO_DATE(2018-01-02 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  1 NO
SYS_P2876  TO_DATE(2018-01-05 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  2 YES
SYS_P2877  TO_DATE(2018-01-08 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  3 YES
SYS_P2878  TO_DATE(2018-01-11 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  4 YES
SYS_P2879  TO_DATE(2018-01-14 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  5 YES
SYS_P2880  TO_DATE(2018-01-17 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  6 YES

6 rows selected.
interval 列指示分区是否是间隔分区。创建表时指定的分区不属于间隔分区范畴。

更改表的分区间隔
alter table t_interval set interval(NUMTODSINTERVAL(2, day
09:46:57 SQL select PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,INTERVAL from dba_tab_partitions where table_name= T_INTERVAL

PARTITION_NAME  HIGH_VALUE  PARTITION_POSITION INTERVAL
——————– ——————————————————————————– —————— ———
P1  TO_DATE(2018-01-02 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  1 NO
SYS_P2876  TO_DATE(2018-01-05 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  2 NO
SYS_P2877  TO_DATE(2018-01-08 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  3 NO
SYS_P2878  TO_DATE(2018-01-11 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  4 NO
SYS_P2879  TO_DATE(2018-01-14 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  5 NO
SYS_P2880  TO_DATE(2018-01-17 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  6 NO

6 rows selected.

Elapsed: 00:00:00.00
分区间隔更改之后,interval 列都变成了 NO。

插入数据产生新分区
insert into t_interval values(TO_DATE( 2018-01-18 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-20 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-22 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-24 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-01-26 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
commit;
09:48:55 SQL select PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION,INTERVAL from dba_tab_partitions where table_name= T_INTERVAL

PARTITION_NAME  HIGH_VALUE  PARTITION_POSITION INTERVAL
——————– ——————————————————————————– —————— ———
P1  TO_DATE(2018-01-02 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  1 NO
SYS_P2876  TO_DATE(2018-01-05 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  2 NO
SYS_P2877  TO_DATE(2018-01-08 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  3 NO
SYS_P2878  TO_DATE(2018-01-11 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  4 NO
SYS_P2879  TO_DATE(2018-01-14 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  5 NO
SYS_P2880  TO_DATE(2018-01-17 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  6 NO
SYS_P2881  TO_DATE(2018-01-19 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  7 YES
SYS_P2882  TO_DATE(2018-01-21 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  8 YES
SYS_P2883  TO_DATE(2018-01-23 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  9 YES
SYS_P2884  TO_DATE(2018-01-25 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  10 YES
SYS_P2885  TO_DATE(2018-01-27 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGORIA  11 YES

11 rows selected.
新生成的分区属于间隔分区。

尝试删除分区
09:49:26 SQL alter table t_interval drop partition SYS_P2880;
alter table t_interval drop partition SYS_P2880
  *
ERROR at line 1:
ORA-14758: Last partition in the range section cannot be dropped
经过多次尝试之后发现,发现无法删除间隔分区最后一个为 NO 的分区。

如果一定要删除最后一个为 NO 的分区的话,那么需要把分区表 dba_tab_partitions 的 interval 列都变为 NO。
方法很简单,就是指定 interval 属性为当前值,再执行一遍:
alter table t_interval set interval(NUMTODSINTERVAL(1, day
然后删除
09:55:32 SQL alter table t_interval drop partition SYS_P2880;

Table altered.

Elapsed: 00:00:00.01
再插入数据产生新的间隔分区
insert into t_interval values(TO_DATE( 2018-02-01 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-02-02 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
insert into t_interval values(TO_DATE( 2018-02-03 10:00:00 , YYYY-MM-DD HH24:MI:SS),1,1);
commit;

抓取表的 ddl

set pagesize 0
set long 90000
select dbms_metadata.get_ddl(TABLE , T_INTERVAL , MING) from dual;
10:35:19 SQL select dbms_metadata.get_ddl(TABLE , T_INTERVAL , MING) from dual;

 

  CREATE TABLE MING . T_INTERVAL
  (  A DATE,
  B NUMBER(*,0),
  C NUMBER(*,0)
  ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CAC
HE DEFAULT)
  TABLESPACE TBS_MING
  PARTITION BY RANGE (A) INTERVAL (NUMTODSINTERVAL(1, DAY))
 (PARTITION SYS_P2877   VALUES LESS THAN (TO_DATE( 20
18-01-08 00:00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_C
ALENDAR=GREGORIAN )) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS
2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE TBS_MING ,
 。。。省略。。。
 PARTITION SYS_P2890   VALUES LESS THAN (TO_DATE( 2018-01-30 00:
00:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREG
ORIAN )) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE
DEFAULT)
  TABLESPACE TBS_MING ,
 PARTITION SYS_P2891   VALUES LESS THAN (TO_DATE( 2018-01-31 00:00
:00 , SYYYY-MM-DD HH24:MI:SS , NLS_CALENDAR=GREGOR
IAN )) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DE
FAULT)
  TABLESPACE TBS_MING )

会发现间隔分区定义并没有出现在表的 ddl 定义语句中。当表分区属性 interval 变为 NO 后,分区被转变成范围分区,然后才会加入到表的 ddl 语句中。

1. 间隔分区 interval 为 NO 的最后一个分区无法删除,都变为 NO 的时候,则可以删除任意一个分区
2.alter table t_interval set interval 命令可以将 interval 属性都变为 NO。
3. 间隔分区定义不出现在表的 ddl 语句中,interval 变为 NO 后,才会加入到表的 ddl 语句中。

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“数据库中间隔分区表的删除逻辑”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计6767字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: xart在线 | 99草在线视频 | 一级a性色生活片久久毛片 一级a性色生活片毛片 | 一级毛片一级毛片a毛片欧美 | 亚洲精品无码成人片 | 无遮挡呻吟娇喘视频免费播放 | 尹人成人 | 在线观看www | 久久久久国产精品免费 | 欧美裸体xxxx极品少妇 | 无码中文人妻在线一区 | 88国产经典欧美一区二区三区 | 99视频这里有精品 | 欧洲成人一区二区三区 | 韩国特级一级毛片免费网站 | 亚洲国产一区二区三区最新 | 乱色精品无码一区二区国产盗 | 一级@片 | 中文字幕一区精品欧美 | 公么大龟弄得我好舒服秀婷视频 | h网站在线免费观看 | 美女国产精品 | 成年网站在线在免费播放 | 日韩美三级 | 久久精品国产亚洲av高清色欲 | 国产好爽…又高潮了毛片 | 亚洲欧美网站 | 国产成人国产在线观看入口 | 久久中文字幕一区二区三区 | 成人毛片一区二区 | 欧美一级在线播放 | 青青偷拍免费视频播放 | 亚洲精品国产福利 | 99蜜桃臀久久久欧美精品网站 | 亚洲a影院 | 亚洲色偷偷综合亚洲avyp | 国产精品久久久久久日本 | 九九国产在线观看 | 无遮挡又黄又爽又色的视频免费 | 国产女人成人精品视频 | 国产亚洲欧美一区二区三区 |