Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3693539
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2020-07-12 15:24:39

验证对于interval分区,如果提前扩展一下,遇到了几个小问题,一路下来记录到小本本里。
红色的都是坑。

获取ddl
--输出信息采用缩排或换行格式化
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', TRUE); --实际效果没那么美好 还是有个别单词被断开,换行
--确保每个语句都带分号
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
--关闭表索引、外键等关联(后面单独生成)
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'REF_CONSTRAINTS', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER', FALSE);
--关闭存储、表空间属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', FALSE);
--关闭创建表的PCTFREE、NOCOMPRESS等属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
set pages 0 long 99999999 
exec dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM,'EXPORT',true);
SELECT DBMS_METADATA.GET_DDL('TABLE','TAB1','USER1') FROM DUAL;


创建测试表
  CREATE TABLE c1
   ( "D_RECORD_ID" NUMBER(19,0) NOT NULL ENABLe,     
  "D_RYMDHM" DATE,                                                               
  "D_UPDATE_TIME" DATE,                                                          
  "D_DATETIME" DATE,                                                             
  "D_DATA_ID" VARCHAR2(30 BYTE),                                                       
  "V_REPORT" VARCHAR2(4000 BYTE)                                                 
   )                                     
  PARTITION BY RANGE ("D_DATETIME") INTERVAL (NUMTODSInTERVAL(1,'HOUR'))      
 (PARTITION "OCEA_CHN_BUSHIP_REP_P"  VALuES LESS THAN (TO_DATE('1940-01-01 00:0:00', 'YYYY-MM-DD HH24:MI:SS')));


查看信息

SELECT TABLE_NAME, count(*) part_count
  FROM DBA_TAB_PARTITIONS
 WHERE TABLE_NAME in (select table_name
                        from dba_part_tables
                       where owner = 'A'
                         AND INTERVAL like '%HOUR%')
 group by table_name
 order by 2;
SELECT * FROM User_Part_Tables where table_name='C1';
SELECT * FROM  user_TAB_PARTITIONS  where table_name='C1';
这时应该只能看到一个分区信息。

必须enable 一下否则会报错ora-14402
alter table c1 enable row movement;


必须增加一条数据后才能执行下面语句,否则不会创建分区的
insert into c1 (D_RECORD_ID,D_DATETIME)values (1,sysdate);
commit;


declare v_key date;
begin
select sysdate into v_key from dual;
for x in 1 ..3 loop
update c1 set D_DATETIME=v_key where rownum=1; 
rollback;
  v_key:=v_key+numtodsinterval(1,'hour');
   dbms_output.put_line(v_key);
end loop;
end;
/


确认分区被扩展了:

SELECT TABLE_NAME, count(*) part_count
  FROM DBA_TAB_PARTITIONS
 WHERE TABLE_NAME in (select table_name
                        from dba_part_tables
                       where owner = 'A'
                         AND INTERVAL like '%HOUR%')
 group by table_name
 order by 2;
SELECT * FROM User_Part_Tables where table_name='C1';
SELECT * FROM  user_TAB_PARTITIONS  where table_name='C1';
表c1这时就有了4个分区了,tmd。

统计近期告警日志中,哪些间隔分区表扩展过多少次:
 tail -20000 a1.log |fgrep "INTERVAL" |awk '{print  $2}' |awk -F: '{print $1 }' |sort |uniq -c|sort -rn|head
这个方法比数据字典要全,RAC环境要看看其他节点的告警日志结果。
阅读(3069) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~