天晴如许

在网站数据采集和网站分析行业,让数据采集标准化和自动化;由海量日志基于hadoop分析到实时分析;提供Web Analytics工具发挥数据运营威力。

导航

DBA实用操作技巧

[表空间以及表分区相关操作]

查看临时表空间大小:

SELECT COUNT(*) FROM DBA_EXTENTS WHERE SEGMENT_TYPE='TEMPORARY';

 

查看所有表和索引大小:

SELECT  SEGMENT_TYPE,SEGMENT_NAME, TABLESPACE_NAME, SUM(bytes)/(1024*1024) sumblock
FROM    USER_SEGMENTS
GROUP BY SEGMENT_TYPE, SEGMENT_NAME, TABLESPACE_NAME 
ORDER BY 1,4 DESC ; 

 

查看某天的所有分区大小:

SELECT  SEGMENT_TYPE,SEGMENT_NAME, PARTITION_NAME, TABLESPACE_NAME, SUM(bytes)/(1024*1024) sumblock
FROM    USER_SEGMENTS
WHERE PARTITION_NAME like 'P20070220%'
GROUP BY SEGMENT_TYPE,SEGMENT_NAME,PARTITION_NAME, TABLESPACE_NAME 
ORDER BY 1,2 DESC ;

 

查看所有索引的小小:

SELECT  SEGMENT_TYPE,SEGMENT_NAME, SUM(bytes)/(1024*1024) sumblock
FROM    USER_SEGMENTS
WHERE SEGMENT_TYPE like 'INDEX%'
GROUP BY SEGMENT_TYPE,SEGMENT_NAME 
ORDER BY 1,3 DESC ;


查看某个表的所有分区大小:

SELECT  SEGMENT_TYPE,SEGMENT_NAME, PARTITION_NAME, SUM(bytes)/(1024*1024) sumblock
FROM    USER_SEGMENTS
WHERE SEGMENT_NAME = 'ANALOG_RES_PERL2QUERYTRACE'
GROUP BY SEGMENT_TYPE,SEGMENT_NAME,PARTITION_NAME 
ORDER BY 1,3 DESC ;


查看某表空间中所有表的大小:

SELECT  SEGMENT_TYPE, SEGMENT_NAME, TABLESPACE_NAME, SUM(bytes)/(1024*1024) sumblock
FROM    USER_SEGMENTS
WHERE TABLESPACE_NAME = 'CNWEBLOG_RES_DW'
GROUP BY SEGMENT_TYPE,SEGMENT_NAME,TABLESPACE_NAME 
ORDER BY 1, 4 DESC;


更新视图:

create or replace view ANALOG_VIEW_PERL2QUERYTRACE
as
select b.report_time,a.query_id,a.QUERY_REPORT_ID, b.pageview
from analog_dim_perl2querytrace a,
     analog_res_perl2querytrace b
WHERE a.query_name=b.QUERY_NAME ;


据备份,创建按月表分区:

select * from analog_res_perl2querytrace where rownum<10 order by report_time;

REPORT_TIME QUERY_NAME                                      PAGEVIEW
----------- --------------------------------------------- ----------
   20050501 news=daohang                                        2255
   20050501 offerdetail=sellofferpv-brand                        475
   20050501 alishop=offerlisttrustscore                         1552
   20050501 alishopself=companysamplebutton                    19054
   20050501 twograde=sellerbanner1                                70
   20050501 info=alitalk                                          84
   20050501 cnalibaba1=5                                         612
   20050501 cnalibaba1=16                                        490
   20050501 info=rednews                                         438
9 rows selected.
Elapsed: 00:00:00.01

 

CREATE TABLE analog_res_perl2querytrace_1
(
 REPORT_TIME                NUMBER,
 QUERY_NAME                 VARCHAR2(256),
 PAGEVIEW                   NUMBER
)
PARTITION BY RANGE (REPORT_TIME)
  (
  PARTITION P200505    VALUES less than (20050601),
  PARTITION P200506    VALUES less than (20050701),
  PARTITION P200507    VALUES less than (20050801),
  PARTITION P200508    VALUES less than (20050901),
  PARTITION P200509    VALUES less than (20051001),
  PARTITION P200510    VALUES less than (20051101),
  PARTITION P200511    VALUES less than (20051201),
  PARTITION P200512    VALUES less than (20060101),
  PARTITION P200601    VALUES less than (20060201),
  PARTITION P200602    VALUES less than (20060301),
  PARTITION P200603    VALUES less than (20060401),
  PARTITION P200604    VALUES less than (20060501),
  PARTITION P200605    VALUES less than (20060601),
  PARTITION P200606    VALUES less than (20060701),
  PARTITION P200607    VALUES less than (20060801),
  PARTITION P200608    VALUES less than (20060901),
  PARTITION P200609    VALUES less than (20061001),
  PARTITION P200610    VALUES less than (20061101),
  PARTITION P200611    VALUES less than (20061201),
  PARTITION P200612    VALUES less than (20070101),
  PARTITION P200701    VALUES less than (20070201),
  PARTITION P200702    VALUES less than (20070301),
  PARTITION P200703    VALUES less than (20070401),
  PARTITION P200704    VALUES less than (20070501),
  PARTITION P200705    VALUES less than (20070601),
  PARTITION P200706    VALUES less than (20070701),
  PARTITION P200707    VALUES less than (20070801),
  PARTITION P200708    VALUES less than (20070901),
  PARTITION P200709    VALUES less than (20071001),
  PARTITION P200710    VALUES less than (20071101),
  PARTITION P200711    VALUES less than (20071201),
  PARTITION P200712    VALUES less than (20080101)
  );
insert  /*+append*/ into analog_res_perl2querytrace_1 select * from analog_res_perl2querytrace; 
commit;
rename analog_res_perl2querytrace to analog_res_perl2querytrace_2;
rename analog_res_perl2querytrace_1 to analog_res_perl2querytrace;  

analyze table analog_res_perl2querytrace compute statistics;
grant select on analog_res_perl2querytrace to rnd;

动增加表分区:
1、以oracle用户进入cn_logdb
2、“crontab -l”可以查看当前运行了哪些程序
3、/home/oracle/admin/kevin/add_partition.sh自动添加一个月的表分区(每天一个分区)
add_partition.sh脚本主要是靠add_partition函数起作用。
SQL> select text from all_source where name = upper('add_partition')
 
TEXT
-----------------------------------------------------------------------------------------------------------------------------

FUNCTION add_partition
(
        months VARCHAR2  DEFAULT  TO_CHAR(ADD_MONTHS(SYSDATE,1),'yyyymm')
)
RETURN CLOB
AS
        CURSOR  to_add IS
        SELECT  OWNER,SEGMENT_NAME,TABLESPACE_NAME,MAX(PARTITION_NAME)
        FROM    DBA_SEGMENTS
        WHERE   SEGMENT_TYPE='TABLE PARTITION'
        AND     owner not in ('SYS','SYSTEM','TEST','SH','HRODS')
        AND     SEGMENT_NAME NOT LIKE '%HIS'
        AND     SEGMENT_NAME NOT LIKE '%HISTORY'
        AND     TABLESPACE_NAME NOT LIKE '%HIS'
        AND     TABLESPACE_NAME NOT LIKE '%HISTORY'
        AND     (OWNER,SEGMENT_NAME,PARTITION_NAME) IN (SELECT OWNER,SEGMENT_NAME,MAX(PARTITION_NAME)
                                                          FROM DBA_SEGMENTS
                                                         WHERE   SEGMENT_TYPE='TABLE PARTITION'
                                                         AND     owner not in ('SYS','SYSTEM','TEST','SH','HRODS')
                                                         AND     SEGMENT_NAME NOT LIKE '%HIS'
                                                         AND     SEGMENT_NAME NOT LIKE '%HISTORY'
                                                         AND     TABLESPACE_NAME NOT LIKE '%HIS'
                                                         AND     TABLESPACE_NAME NOT LIKE '%HISTORY'
                                                       GROUP BY owner,SEGMENT_NAME)
        --AND     SEGMENT_NAME IN ('IM_USER_FATDT0','IM_ACTIVE_DAILY')   -- ?è??im_user_fatdt0 IM_ACTIVE_DAILY???óè?·???
        GROUP BY owner,SEGMENT_NAME,TABLESPACE_NAME;


        CURSOR add_day IS
                SELECT  YYYYMMDD, NEXT_YYYYMMDD
                FROM    pub.times
                WHERE   CAL_YYYYMM=months
                ORDER BY 1;

        partition_column_type   VARCHAR2(20);
        part_sqlstr1    VARCHAR2(100);

        part_sqlstr2    VARCHAR2(100);
        sqlstr          VARCHAR2(32767);

        errormsg        CLOB;

        TYPE varray_type IS VARRAY(1000) OF VARCHAR2(600);
        sqlvar varray_type;

BEGIN
        FOR l_c IN to_add LOOP

                SELECT  DATA_TYPE
                INTO    partition_column_type
                FROM    DBA_TAB_COLUMNS a,
                        DBA_PART_KEY_COLUMNS b
                WHERE   a.OWNER=b.OWNER
                AND     a.TABLE_NAME=b.NAME
                AND     a.COLUMN_NAME=b.COLUMN_NAME
                AND     a.owner=l_c.OWNER
                AND     a.TABLE_NAME=l_c.SEGMENT_NAME;


                IF      partition_column_type='DATE'
                THEN
                        part_sqlstr1 := 'TO_DATE(''';
                        part_sqlstr2 := ''',''YYYYMMDD'')) tablespace '||l_c.TABLESPACE_NAME ;
                ELSIF partition_column_type='NUMBER'
                THEN
                        part_sqlstr1 := '';
                        part_sqlstr2 := ') tablespace '||l_c.TABLESPACE_NAME ;
                ELSE
                        part_sqlstr1 := '''';
                        part_sqlstr2 := ''') tablespace '||l_c.TABLESPACE_NAME ;
                END IF;


                FOR l_d IN  add_day LOOP
                        sqlstr:='alter table '||l_c.owner||'.'
                                ||l_c.SEGMENT_NAME||' add partition p'||L_D.YYYYMMDD
                                ||' values less than ('
                                ||part_sqlstr1
                                ||L_D.NEXT_YYYYMMDD
                                ||part_sqlstr2;
                        BEGIN
                                exec_ddl(sqlstr);
                        EXCEPTION
                                WHEN OTHERS THEN
                                     errormsg:=errormsg||l_c.SEGMENT_NAME||'.'||L_D.YYYYMMDD||chr(10)||SQLCODE;
                        END;

                END LOOP;
        END LOOP;


        RETURN errormsg;
END;    

查看某个特定的表分区情况:
1、同上目录
2、sh partition.sh analog_res_perl2querytrace
如下运行情况:
[oracle@oracle-rac1 kevin]$ sh par* analog_res_perl2querytrace

 

SQL*Plus: Release 10.1.0.3.0 - Production on Fri Dec 28 20:15:31 2007

Copyright (c) 1982, 2004, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6 
OWNER    SEGMENT_TYPE       SEGMENT_NAME                     PARTITION_NAME       TABLESPACE_NAME             SUMBLOCK
-------- ------------------ -------------------------------- -------------------- ------------------------- ----------
CNWEBLOG INDEX              IDX_ANALOG_RES_PERL2QUERYTRACE                        CNWEBLOG_BIDX_DW                2688
CNWEBLOG TABLE              ANALOG_RES_PERL2QUERYTRACE_2                          CNWEBLOG_RES_DW                 2176
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200505              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200506              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200507              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200508              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200509              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200510              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200511              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200512              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200601              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200602              CNWEBLOG_RES_DW                   32
CNWEBLOG TABLE PARTITION    ANALOG_RES_PERL2QUERYTRACE       P200603              CNWEBLOG_RES_DW                   32

posted on 2010-11-14 21:32  天晴如许  阅读(509)  评论(0编辑  收藏  举报