我这里有一个08年的利用oracle 9.2.0.6 的数据库,原先软件的一个功能是不常用的功能,所以用的那个数据库也没有分区。就是一个平常的表。但现在这个功能已经经常在用了。数据库记录非常的多,并且这个软件主要功能是将图片放到库里面存放。几乎最长3天就要TRUNCATE TABLE 一次。要不整个系统就会很慢慢。所以现在我有以下问题,
一、能否在不改变软件访问方式(软件太老,厂家不提供支持,无法改动)的情况下,对这个表以每天的日期进行分区。
二、如果第一个无法实现的话,是否可以有个脚本自动删除3天以前的数据。并且自动释放表空间?
对于oracle不懂,请各们大大们指点。

解决方案 »

  1.   

    写个触发器,就可以的吧
    where 字段 < sysdate - 3下边是个例子。--创建触发器删除时,删除对应的全部字段
    CREATE TRIGGER Delete_Group ON [GroupPerson] --要创建的触发器名称和作用在GroupPerson表上
    FOR  DELETE 
    AS
    declare @AutoId int  --定义删除参数AutoId(唯一ID)
    select @AutoId = AutoId from deleted --参数赋值
    delete from Group_TextTemp where GroupId = @AutoId       --删除临时保存内容表
    Go
      

  2.   

    1,2都可以可以自己写个JOB或者LINUX的CRONTAB定时去操作分区就行了,没有什么难度
      

  3.   

    表不能更改,oracle支持在线重定义。你也可以写过程去处理3天后的数据
      

  4.   

    1,可以先建立一个表 TB_B ,和原来的表 TB_A 字段结构一样。
    2,然后对 TB_B 按日期进行区间分区,如果还有其他特性的话,可以考虑建个组合分区。
    3,把  TB_A 的数据导入到 TB_B 。
    4,确认无问题后,将TB_B rename 成 TB_A 。
      

  5.   

    1、仔细推敲分区依据
    2、UNIX crontab 定时任务,客户端的定时任务,oracle的dbms_job定时任务都可以定时删除
    3、如果数据重要的话,还是要注意备份 create table XXX_YYMMDD as select * from XXX
    execute immediate“truncate table XXX”
      

  6.   

    yes,oracle支持在线重定义。你也可以写过程去处理3天后的数据
      

  7.   

    1 可以实现按每天进行分区,你可以写一个存储过程,取当前系统时间,然后写一个job每天自动执行
    2 也可以实现,编写删除的存储过程,写job3天执行一次就可以了