易截截图软件、单文件、免安装、纯绿色、仅160KB

oracle巨大表的数据删除的方法,20分钟搞定


oracle巨大表的数据删除的方法,20分钟搞定 
 
一个客户的日志表,已经有3000多千万的记录了,容量大约30G,打算维护一下,看了一下字段,发现日志是按日期记录的,打算只保留3个月的日志就好了。
第一个思路:
按条件查出来,直接DELETE
试了一下
delete from NTLS_LOGS  where to_char(START_TIMES,'yyyy-mm-dd hh:mi:ss') <'2008-08-01 00:00:00';
时间会非常长,不知道多少天能跑完,反正一个晚上没跑完,UNDO会增长到一个可怕的数字
这个思路是不行的
研究了一下,发现大多数人的思路是做个循环,每5000条左右提交一次,做了个测试语句试了一下,每小时能删除80-90万条,晕倒需要删除的数据是2700万条,猴年马月才能完成。
询问客户,发现这个业务日志表不是什么时候都要写的,每天晚上10点到第二天早上6点是没有人会使用的,很好,我立刻考虑了一种方法,思路是将需要的数据提取出来到一个新的表,然后将原表删除,将这个提取出来的表重命名为旧的日志表名。
呵呵,试一下这种方法的威力,生成新的数据整个过程只用了172S,也就是3分钟左右,表是生成了,但是没有索引,那就照抄原表的索引吧,呵呵最后花了18分21秒搞定了,其实原理就是只处理必须保留的数据这些数据远远小于要删掉的数据,跳过不需要的数据,采用CREAT SELECT AS可以充分使用索引,而且不会生存UNDO,因此速度大大加快,该方法的弊端是,必须要有一点时间,没有人使用这个表才行。
于是我写了一个SQL,将这个放到每月的自动执行计划里定期执行,定期维护这个表,避免表异常膨大,说了原理,就该上SQL了。
drop table new_log_temp;
create table new_log_temp as select * from NTLS_log  where timestamp > to_date(to_char(SYSDATE-90,'yyyy-mm-dd'),'yyyy-mm-dd');
drop NTLS_LOG;
alter  table new_log_temp rename to NTLS_LOG;
create index IDX_NTLS_LOG on NTLS_LOG (RECORD)
  tablespace INDEXES
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
create index IDX_NTLS_LOG_OPERATE_ID on NTLS_LOG (OPERATE)
  tablespace INDEXES
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (


相关文档:

Oracle中合并字符串总结

在数据库中经常要合并字符串,而合并字符串的方法有很多,现在总结如下:
--创建会话级临时表
create global temporary table TMPA
(
  ID   INTEGER,
  NAME VARCHAR2(10)
)
on commit preserve rows;
--插入记录
insert into tmpa select 1,'aa' from dual;
insert into tmpa select 1,'bb ......

Oracle Split功能函数

在pl/sql时经常会碰到将某些特定的符号转换成行,这功能相当于split.以前在网上收集的split函数如下:
CREATE OR REPLACE TYPE DJ_STR_SPLIT IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE PACKAGE Dj_Function_API IS
module_  CONSTANT VARCHAR2(25) := 'FNDBAS';
lu_name_ CONSTANT VARCHAR2(25) := 'DjFuncti ......

db2和oracle中的树查询(递归查询)语句

在db2和oracle中的对树的递归查询语句。
表结构:
create table  MAIN_NODE (
MLA_ID               INTEGER     not null        ,   //节点ID
MLA_ROOTID &nb ......

我的ORACLE RAC INSTALL for LINUX 10.2研究


我的ORACLE RAC INSTALL for LINUX 10.2研究 
 
我的ORACLE RAC INSTALL for LINUX 10.2研究
1、创建虚拟机
DB1虚拟机文件目录 g:\vmtest1 文件大小8G 内存944M(原谅我只有2GRAM)
DB2虚拟机文件目录 E:\vmtest2  文件大小8G 内存944M
在DB1上创建共享磁盘,
E:\SHARE 文件大小8G
DB2也创建磁盘, ......

Oracle监听程序当前无法识别连接描述符中请求的服务

安装好了之后可以通过这个路径找到一个文本文件:
oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora 还一个在同路径下的tnsnames.ora文件,这两个文本中的一些信息要一样的。
  你看看我的这两个文本文件的信息:
listener.ora
# listener.ora Network Configuration File:& ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号