ITPub博客

首页 > 数据库 > Oracle > Oracle数据清理

Oracle数据清理

原创 Oracle 作者:tiny_cion 时间:2020-10-22 11:39:11 0 删除 编辑

数据清理

1.*.aud 文件,*.trm *.trc 文件

常规删除 删除 3 天前的 .trc 文件和 .trm 文件

$ find /u01/app/oracle/diag/rdbms/ /trace/ -mtime +3 -name "*.trc" -exec rm -rf {} \;

$ find /u01/app/oracle/diag/rdbms/ /trace/ -mtime +3 -name "*.trm" -exec rm -rf {} \;

$ find /u01/app/oracle/admin/cdb/adump/ -mtime +3 -name "*.aud" -exec rm -rf {} \;

 

如果不用保留可以使用特殊删除(cd 到此目录将此目录的所有文件删除: 慎用 ):

cd $ORACLE_HOME/rdbm/trace/

$ls |xargs -n 10 rm –rf  

2. 归档文件

删除过时归档

$rman target /

crosscheck archivelog all;

delete expired archivelog all;

删除几天前的归档

delete archivelog all completed before ‘sysdata-7’;

删除到某时间点的归档

RMAN> delete noprompt archivelog until time "TO_DATE('20-07-01 22:25:03','yy-mm-dd hh24:mi:ss')";

3.incident

清除 10 天前的

$ adrci   

adrci> show home;

adrci> set home diag/rdbms/orcl/orcl

adrci>purge -age 14400 -type incident     

4.crfclust.bdb

1 )查看 crf 资源

$crsctl stat res –t -init

2 )停止 crf 资源

$crsctl stop res ora.crf –init

3 )删除 crfclust.bdb 文件

$cd 目录

$rm –rf crfclust.bdb

4 )启动 crf 资源

$crsctl start res ora.crf –init

5.delete/drop/truncate清理表

 1 )清空数据库所有表

a. 禁用外键约束:

SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' ||

       constraint_name || ';'

  FROM user_constraints

 where CONSTRAINT_TYPE = 'R';

将查询出来的语句执行

 

b. 查询所有的删除表语句并执行

SELECT 'DELETE FROM ' || table_name || ';'

  FROM USER_TABLES

 ORDER BY TABLE_NAME;

 

C. 查询启用外键约束并执行

SELECT 'ALTER TABLE ' || table_name || ' enable CONSTRAINT ' ||

       constraint_name || ';'

  FROM user_constraints

 where CONSTRAINT_TYPE = 'R';

 

数据库中的数据在依次执行完这三个步骤之后都清空。

 

2 )清里少数表的数据

truncate delete 都可以清空表中数据。

SQL 如下:

truncate table [ 表名];

delete from [ 表名] [where];commit;

 

delete truncate 的区别:

 

delete :是DML ,执行delete 操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo undo 表空间中以便进行回滚(rollback )和重做操作,但要注意表空间要足够大,需要手动提交(commit )操作才能生效,可以通过rollback 撤消操作;delete 可根据条件删除表中满足条件的数据,如果不指定where 子句,那么删除表中所有记录;delete 语句不影响表所占用的extent ,高水线(high watermark) 保持原位置不变。会产生rollback ,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments

 

truncate :是DDL ,会隐式提交,所以,不能回滚,不会触发触发器;truncate 会删除表中所有记录,并且将重置高水线和所有的索引,缺省情况下将空间释放到minextents extent ,除非使用reuse storage ,不会记录日志,所以执行速度很快,但不能通过rollback 撤消操作(如果一不小心把一个表truncate 掉,也是可以恢复的,只是不能通过rollback 来恢复);对于外键(foreignkey )约束引用的表,不能使用 truncate table ,而应使用不带 where 子句的 delete 语句;truncatetable 不能用于参与了索引视图的表。

 

附带说明drop

drop :是DDL ,会隐式提交,所以,不能回滚,不会触发触发器;drop 语句删除表结构及所有数据,并将表所占用的空间全部释放;drop 语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/ 函数将保留, 但是变为invalid 状态。

 

速度上,一般来说,drop> truncate > delete

 

如果想删除部分数据用delete ,注意带上where 子句,回滚段要足够大;如果想删除表,当然用drop ;如果想保留表而将所有数据删除,如果和事务无关,用truncate 即可;如果和事务有关,或者想触发trigger ,还是用delete ;如果是整理表内部的碎片,可以用truncate 跟上reuse stroage ,再重新导入/ 插入数据。

 

3 )清理分区表(需要注意全局索引(删除分区后需rebuild )、本地索引、主键)

a. 根据某个与时间相关的字段,一段一段时间的删除

delete from table1 where time_id  这种方式比较慢

b. 备份所有数据到另外一张表table_bak

create table table_bak as select * from table1;

备份最近一个月的数据到一张临时表

create table temptab as select * from table1 where data_id

删除表table1 中的数据

truncate table table1;

把最近一个月的数据插入到table1

insert  into table1(select * from temptab);

删除临时表

drop table temptab;

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30654353/viewspace-2728736/,如需转载,请注明出处,否则将追究法律责任。

下一篇: move lob online测试
请登录后发表评论 登录
全部评论

注册时间:2015-12-23

  • 博文量
    17
  • 访问量
    7817