Oracle 相关操作记录

项目场景:

orcl 快速删除表中百万或千万数据

orcl 数据库表中数据达到上千万时,常规写入日志,删除非常慢
bqh8表中目前有10000000条数据,需要保留19条数据,其余全部清除掉。

注意:使用 truncate 删除表数据不可恢复!

1、首先把需要保留的数据备份到temp1临时表中。

create table temp1 as select * from deleteTableName where id<20;
select * from temp1;

2、然后再用truncate删除整个表的数据。

truncate table deleteTableName ;
select * from deleteTableName ;

3、最后再把temp1表中的数据复制到bqh8表中。

insert into deleteTableName select * from temp1;
commit;
select * from deleteTableName ;

truncate与delete的区别:

1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。
2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollbacksegments, 而truncate不会。
3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!
而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不能够恢复!
4、truncate 调整high water mark 而delete不;truncate之后,TABLE的HWM退回到INITIAL和NEXT的位置(默认)delete 则不可以。
5、truncate 只能对TABLE,delete 可以是table,view,synonym。
6、TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE
则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限。

7、在外层中,truncate或者delete后,其占用的空间都将释放。

8、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。


TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE
TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE
语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE
通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE TABLE
删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。 如果想保留标识计数值,请改用
DELETE。 如果要删除表定义及其数据,请使用 DROP TABLE 语句。

原文

ORA-01502: 索引或这类索引的分区处于不可用状态

@Override
	public void run() {
		bytes = mmInStream.read(buffer);
		mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
	}

原因分析:

原因: 出现这个问题,可能有人move过表,或者disable 过索引。

  1. alter table xxxxxx move tablespace xxxxxxx 命令后,索引就会失效。
  2. alter index index_name unusable,命令使索引失效。

例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。


解决方案:

  1. 重建索引才是解决这类问题的完全的方法。
alter index index_name rebuild (online)alter index index_name rebuild;
  1. 如果是分区索引只需要重建那个失效的分区 。
 alter index index_name rebuild partition partition_name (online);
 或者alter index index_name rebuild partition partition_name;
  1. 或者改变当前索引的名字。

原文 作者:西谷haul

oracle相同数据取第一条,oracle去除重复, 获取取最新的第一条数据

row_number() over ( partition by ‘去重列名称’ order by ‘排序列名’ desc ) as group_idx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值