`

Oracle 分区维护(使用procedure )

 
阅读更多
create or replace procedure pro_maintain_partition( tab_name in  varchar2)
as
  var_tab_name   varchar2(32) ;
  var_tab_bak_name   varchar2(32) ;
  var_partition      varchar2(32) ;
  var_less_than      varchar2(8) ;
  var_flag           number ;
begin
  select upper(tab_name) into var_tab_name from dual ;
  select upper(tab_name||'_bak') into var_tab_bak_name from dual ;

  select count(1) into var_flag from user_segments
  where segment_name = var_tab_name
  and partition_name like '%'||to_char(sysdate , 'yyyy_mm') ;

  select var_tab_name||'_'||to_char(sysdate , 'yyyy_mm') into var_partition from dual ;
  select to_char(add_months(sysdate , 1) , 'yyyymm')||'01' into var_less_than from dual ;

  if var_flag = 0 then
     --如当月分区不存在,则新增当月分区
     execute immediate 'alter table '||var_tab_name||' add partition '||var_partition||' values less than ('||var_less_than||')';
  end if;

  select count(1) into var_flag from user_segments
  where segment_name = var_tab_bak_name
  and partition_name like '%'||to_char(add_months(sysdate , -4) , 'yyyy_mm') ;

  if var_flag = 0 then
     select var_tab_bak_name||'_'||to_char(add_months(sysdate , -4) , 'yyyy_mm') into var_partition from dual ;
     select to_char(add_months(sysdate , -3) , 'yyyymm')||'01' into var_less_than from dual ;
     --如备份表分区不存在,则新增备份月分区
     execute immediate 'alter table '||var_tab_bak_name||' add partition '||var_partition||' values less than ('||var_less_than||')';
     --备份数据     
     select var_tab_name||'_'||to_char(add_months(sysdate , -4) , 'yyyy_mm') into var_partition from dual ;
     execute immediate 'insert into '||var_tab_bak_name||' select * from '||var_tab_name||' partition('||var_partition||')';
     
     /*insert into var_tab_bak_name
     select * from var_tab_name partition(var_partition) ;*/
     commit ;
     --删除已备份月分区     
     execute immediate 'alter table '||var_tab_name||' drop partition '||var_partition;
  end if;

end;




Table
-- Create table
create table TB_STEP_WAIT_HOLD
(
  YYYYMMDD        VARCHAR2(16),
  SHIFT           VARCHAR2(8),
  STAGEID         VARCHAR2(64),
  LOTID           VARCHAR2(16),
  RECPNAME        VARCHAR2(8),
  QTY             NUMBER,
  TRACKINTIME     DATE,
  TRACKOUTTIME    DATE,
  STEP_START_TIME DATE,
  Q_H_TIME        NUMBER,
  END_TIME        DATE,
  START_TIME      DATE,
  UPDATE_TIME     DATE
)
partition by range (YYYYMMDD)
(
  partition TB_STEP_WAIT_HOLD_2014_09 values less than ('20141001')
    tablespace RPTCMT_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 10M
      next 10M
      minextents 1
      maxextents unlimited
      pctincrease 0
    ),
  partition TB_STEP_WAIT_HOLD_2014_10 values less than ('20141101')
    tablespace RPTCMT_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 10M
      next 10M
      minextents 1
      maxextents unlimited
      pctincrease 0
    ),
  partition TB_STEP_WAIT_HOLD_2014_11 values less than ('20141201')
    tablespace RPTCMT_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 10M
      next 10M
      minextents 1
      maxextents unlimited
      pctincrease 0
    ),
  partition TB_STEP_WAIT_HOLD_2014_12 values less than ('20150101')
    tablespace RPTCMT_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 10M
      next 10M
      minextents 1
      maxextents unlimited
      pctincrease 0
    )
);



Bak Table
-- Create table
create table TB_STEP_WAIT_HOLD_BAK
(
  YYYYMMDD        VARCHAR2(16),
  SHIFT           VARCHAR2(8),
  STAGEID         VARCHAR2(64),
  LOTID           VARCHAR2(16),
  RECPNAME        VARCHAR2(8),
  QTY             NUMBER,
  TRACKINTIME     DATE,
  TRACKOUTTIME    DATE,
  STEP_START_TIME DATE,
  Q_H_TIME        NUMBER,
  END_TIME        DATE,
  START_TIME      DATE,
  UPDATE_TIME     DATE
)
partition by range (YYYYMMDD)
(
  partition TB_STEP_WAIT_HOLD_BAK_2014_08 values less than ('20140901')
    tablespace RPTCMT_DATA
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
      initial 10M
      next 10M
      minextents 1
      maxextents unlimited
      pctincrease 0
    )
);

分享到:
评论

相关推荐

    oracle函数大全及存储过程语法

    本资料包主要涵盖了Oracle中的函数大全、存储过程的语法以及Oracle分区的相关知识,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。下面将对这些主题进行深入的探讨。 **一、Oracle函数大全** Oracle...

    Oracle和数据结构

    四、Oracle分区和分片 1. 分区(Partitioning):大型表可以通过分区将数据分布在多个物理段上,提高查询效率和管理便捷性。常见的分区策略有范围分区、列表分区、哈希分区和复合分区。 2. 分片(Sharding):分片...

    Oracle-维护常用SQL语句.pdf

    ### Oracle 维护常用SQL语句详解 #### 1. 查看表空间的名称及大小 ```sql select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name...

    oracle存储过程创建表分区实例

    在 Oracle中,存储过程可以用来创建表分区实例,本文将详细介绍如何使用Oracle存储过程创建表分区实例。 一、Oracle存储过程的优点 Oracle存储过程有很多优点,例如: * 提高数据库的安全性:存储过程可以控制...

    Oracle习题集..

    Oracle习题集是一份专为学习和巩固Oracle数据库管理技能设计的资料,涵盖了SQL和PL/...通过完成这个Oracle习题集,学习者将能全面掌握Oracle数据库的关键概念和技术,为实际的数据库管理、开发和维护工作打下坚实基础。

    Oracle面试题

    本文将深入探讨Oracle的游标、与SQL Server的区别、Function与Procedure的区别、导入导出方式、数据库文件类型以及优化策略。 1. **Oracle游标**: - 游标允许我们处理查询结果集中的一行数据,分为显示游标和隐式...

    Oracle基本介绍与基本使用

    Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。本文将详细介绍Oracle的基本概念、核心组件以及基础使用方法。 一、Oracle数据库概述 Oracle...

    Oracle从入门到精通

    Oracle是一种关系型数据库管理系统(RDBMS),由Oracle公司开发并维护。它具有高度的数据安全性和稳定性,在企业级应用中非常受欢迎。Oracle支持多种操作系统,包括Windows、Linux等,并且能够处理大量的数据存储需求...

    oracle数据库各种功能语句以及驱动

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,由甲骨文公司开发和维护。它提供了丰富的功能,用于数据存储、管理、检索以及各种复杂的数据操作。本文将深入探讨Oracle数据库的各种功能语句及其驱动,帮助...

    oracle数据库开发规范.pdf

    根据提供的文件内容,可以看出这份文档是关于Oracle数据库开发规范的。接下来我将详细解释文档中涉及的Oracle...这部分内容对Oracle数据库的开发和维护至关重要,为数据库管理员和开发人员提供了规范化的开发指导。

    ibatis+oracle实例

    3. **存储过程调用**:Ibatis可以通过`<select>`、`<procedure>`元素调用Oracle的存储过程,增强业务逻辑的封装性。 4. **连接池管理**:Ibatis可以与各种连接池(如C3P0、Druid、HikariCP等)集成,提高数据库连接...

    Oracle 存储过程分页

    它可以为每个分组或分区分配一个唯一的行号,这使得在分页时可以对特定列进行排序。以下是一个示例: ```sql CREATE OR REPLACE PROCEDURE get_paged_data (start_row IN NUMBER, page_size IN NUMBER, cursor ...

    oracle 简明语法教程

    Oracle数据库是世界上最广泛使用的数据库管理系统之一...以上只是Oracle数据库语法的基础介绍,实际应用中还有触发器、游标、并发控制、分区表等高级特性。通过深入学习和实践,你可以逐渐熟悉并掌握Oracle的全面功能。

    Oracle 11g 教程 代码

    9. **分区表**:对于大数据量的表,Oracle 11g支持分区技术,通过将大表分成较小的部分,提高查询和维护效率。常见的分区方法有范围分区、列表分区、散列分区和复合分区。 10. **触发器**:触发器是一种数据库对象...

    oracle常用sql.rar

    以上只是Oracle SQL使用中的一部分关键知识点,实际应用中,DBA还需要了解更多的Oracle特性,如分区、物化视图、并行查询、闪回技术等,以及如何结合企业管理器(EM)和数据库性能监控工具进行日常维护和问题排查。...

    oracle面试题集锦

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。在面试中,Oracle相关的技术问题经常被问及,以下是一些关键知识点的详细解释: 1. Oracle与SQL Server的区别: - 平台:...

    oracle 帮助文档chm格式

    性能优化**:Oracle 9i的文档会介绍如何通过索引、物化视图、分区、SQL优化等手段提高数据库性能。了解这些技巧对于提升系统响应速度和处理大量数据至关重要。 **5. 安全性**:在文档中,你会看到如何设置用户权限...

    oracle数据库资料

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储、管理和处理方面具有卓越性能。"Oracle数据库资料"这个压缩包很可能是为学习和掌握Oracle数据库提供的一系列教程和参考文档。下面,我们...

Global site tag (gtag.js) - Google Analytics