间隔分区表导出指定的分区数据

180大表备份处理方法:

准备备份空间:

SQL> conn zy/xxx

已连接。

SQL> create or replace directory bak as '/bak/dmp180';

目录已创建。

SQL> grant read,write on directory bak to public;

授权成功。

SQL> exit        

查看最大分区表数据:

         SEGMENT_NAME    SUM(BYTES)/1024/1024/1024

1       IPTV_ZTE_DATA      751

2       IPTV_HW_DATA      266

3       AAA_DATA       63

4       KD_HW_DATA          39

5       HJLL_ONLINE_DATA        38

6       HJJL_LIULIANG_DATA     21

7       KD_FH_DATA  6

参考语句zy用户下:

select segment_name,sum(bytes)/1024/1024/1024 from user_segments

where  segment_type in('TABLE PARTITION') group by segment_name  order by sum(bytes) desc;

确认可清理备份的数据:

 select * from IPTV_ZTE_DATA where currenttime

 select * from IPTV_HW_DATA  where PCF_TIMESTAMP

 select * from AAA_DATA where inserttime

 select * from KD_HW_DATA where inserttime

select * from HJLL_ONLINE_DATA  where  inserttime

select * from HJJL_LIULIANG_DATA where INSERTTIME

select * from KD_FH_DATA where INSERTTIME

准备导出备份脚本:

通过pl/sql 查看分区结构,查看对应表2018年3月1日之前的分区名称

或者通过如下语句查询:

SELECT *
  FROM (SELECT TABLE_OWNER,
                TABLE_NAME,
                PARTITION_NAME,
               substr(LONG_HELP.SUBSTR_OF('SELECT HIGH_VALUE
FROM   DBA_TAB_PARTITIONS WHERE TABLE_OWNER=:TABLE_OWNER 
AND TABLE_NAME=:TABLE_NAME
AND PARTITION_NAME=:PARTITION_NAME',
                                     1,
                                     4000,
                                     'TABLE_OWNER',
                                     TABLE_OWNER,
                                     'TABLE_NAME',
                                     TABLE_NAME,
                                     'PARTITION_NAME',
                                     PARTITION_NAME),11,19) HIGH_VALUE
           FROM DBA_TAB_PARTITIONS
           where table_name in('IPTV_ZTE_DATA','IPTV_HW_DATA','AAA_DATA','KD_HW_DATA','HJLL_ONLINE_DATA','HJJL_LIULIANG_DATA','KD_FH_DATA')
           ) b 
          where b.high_value='2018-02-28 00:00:00'
 order by HIGH_VALUE;

函数准备:

create or replace package long_help
authid current_user
as
function substr_of
( p_query in varchar2,
p_from  in number,
p_for   in number,
p_name1 in varchar2 default NULL,
p_bind1 in varchar2 default NULL,
p_name2 in varchar2 default NULL,
p_bind2 in varchar2 default NULL,
p_name3 in varchar2 default NULL,
p_bind3 in varchar2 default NULL,
p_name4 in varchar2 default NULL,
p_bind4 in varchar2 default NULL )
return varchar2;
end;
/
create or replace package body long_help
as
    g_cursor number := dbms_sql.open_cursor;
    g_query  varchar2(32765);
procedure bind_variable( p_name in varchar2, p_value in varchar2 )
is
begin
    if ( p_name is not null )
    then
        dbms_sql.bind_variable( g_cursor, p_name, p_value );
    end if;
end;

function substr_of
( p_query in varchar2,
  p_from  in number,
  p_for   in number,
  p_name1 in varchar2 default NULL,
  p_bind1 in varchar2 default NULL,
  p_name2 in varchar2 default NULL,
  p_bind2 in varchar2 default NULL,
  p_name3 in varchar2 default NULL,
  p_bind3 in varchar2 default NULL,
  p_name4 in varchar2 default NULL,
  p_bind4 in varchar2 default NULL )
return varchar2
as
    l_buffer       varchar2(4000);
    l_buffer_len   number;
begin
    if ( nvl(p_from,0) <= 0 )
    then
        raise_application_error
        (-20002, 'From must be >= 1 (positive numbers)' );
    end if;
    if ( nvl(p_for,0) not between 1 and 4000 )
    then
        raise_application_error
        (-20003, 'For must be between 1 and 4000' );
    end if;
    if ( p_query <> g_query or g_query is NULL )
    then
        if ( upper(trim(nvl(p_query,'x'))) not like 'SELECT%')
        then
            raise_application_error
            (-20001, 'This must be a select only' );
        end if;
        dbms_sql.parse( g_cursor, p_query, dbms_sql.native );
        g_query := p_query;
    end if;
    bind_variable( p_name1, p_bind1 );
    bind_variable( p_name2, p_bind2 );
    bind_variable( p_name3, p_bind3 );
    bind_variable( p_name4, p_bind4 );
    dbms_sql.define_column_long(g_cursor, 1);
    if (dbms_sql.execute_and_fetch(g_cursor)>0)
    then
        dbms_sql.column_value_long
        (g_cursor, 1, p_for, p_from-1,
         l_buffer, l_buffer_len );
    end if;
    return l_buffer;
end substr_of;
end;
/

expdp zy/xxx directory=bak tables=IPTV_HW_DATA dumpfile=IPTV_HW_DATA_201803.dmp logfile=IPTV_HW_DATA_201803.log parfile=IPTV_HW_DATA_201803.par

文件IPTV_HW_DATA_201803.par内容:

EXCLUDE=STATISTICS,INDEX,TABLE_DATA:"IN (select partition_name from (select partition_name,to_number(substr(partition_name,instr(partition_name,'_P',-1)+2)) n from user_tab_partitions a where a.table_name='IPTV_HW_DATA') b where b.n>20759)"

expdp zy/xxx directory=bak tables=IPTV_ZTE_DATA dumpfile=IPTV_ZTE_DATA_201803.dmp logfile=IPTV_ZTE_DATA_201803.log parfile=IPTV_ZTE_DATA_201803.par

文件IPTV_ZTE_DATA_201803.par内容:

EXCLUDE=STATISTICS,INDEX,TABLE_DATA:"IN (select partition_name from (select partition_name,to_number(substr(partition_name,instr(partition_name,'_P',-1)+2)) n from user_tab_partitions a where a.table_name='IPTV_ZTE_DATA') b where b.n>20760)"

nohup ./xxx.sh > ./xxx.out &

准备清理分区脚本:

select 'alter table AAA_DATA drop partition '||partition_name|| ';' from (select partition_name,to_number(substr(partition_name,instr(partition_name,'_P',-1)+2)) n from user_tab_partitions a where a.table_name='AAA_DATA') b where b.n<=20624 order by b.n

查看索引状态:(本地索引不受drop分区影响)

select a.index_name,a.partition_name,a.status from user_ind_partitions a,user_indexes b

 where a.index_name=b.index_name and b.table_name='KD_FH_DATA' and a.status<>'USABLE'

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 12:54:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 12:54:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 12:54:01       87 阅读
  4. Python语言-面向对象

    2024-02-22 12:54:01       96 阅读

热门阅读

  1. 零基础到高级:Android音视频开发技能路径规划

    2024-02-22 12:54:01       46 阅读
  2. Redis降低内存占用(二)分片结构

    2024-02-22 12:54:01       51 阅读
  3. 【 OpenGL 教程06 】 关于着色器(01)

    2024-02-22 12:54:01       43 阅读
  4. 腾讯云主机Ubuntu22.04安装Odoo17

    2024-02-22 12:54:01       57 阅读
  5. 求逆序对

    2024-02-22 12:54:01       49 阅读
  6. Oracle普通用户启停JOB报错ORA 27486权限不足

    2024-02-22 12:54:01       50 阅读
  7. vue系列--图片通过鼠标滚轮放大缩小指令

    2024-02-22 12:54:01       49 阅读
  8. netty的TCP服务端和客户端实现

    2024-02-22 12:54:01       50 阅读
  9. 令牌颁发与管理服务

    2024-02-22 12:54:01       48 阅读