当索引处于不可用状态时,数据将不能插入,会提示:ora-01502:state unusuable。
且这种情下,只要表中有一个索引处于不可用状态,都会使表处于不可插入状态。
可以修改参数来实现这种情况下的数据插入问题:alter session set skip_unusable_indexes=true;
但是有种情况除外,当有存在唯一主键索引时,数据依然不能插入。
而且主键索引也不能drop,因此想通过删除主键索引再修改参数来实现数据的可插入是不可实现的。
因此这种情况下(索引状态处于不可用状态时)较好的办法是,先删除要进行本地索引分区的索引(此时尚未进行本地分区),
创建本地分区索引后,再drop表分区,这样的好处是本来drop分区后需要重建n+1个索引,
现在只要重建n个索引,这样的话就省去了重建这个索引的时间了。
对于本地分区前缀索引,删除分区只会对所在分区的部分产生影响,对于其他的部分则仍然是正常状态的。
另:修改参数只能对于当前session所在的用户有效,对于其他session,如果没有设置该条件,数据还是处于不可插入状态的。
以上情况,需要在实际的应用中充分考虑到这些问题才能最大的减少所带来的数据丢失。
重命名分区不会对索引状态产生影响。
注:
1、如何删除分区
alter table [table_name] drop partition [partition_name];
2、如何删除与创建本地分区索引
删除:drop index [index_name];
创建:create index [index_name] on [table_name]([index_column]) tablespace [tablespace_name] local [nologging/logging];
注意:
当在大表上建立索引时,使用NOLOGGING选项可以最小化重做记录.使用NOLOGGING选项有以下优点.
节省重做日志空间
降低索引建立实际
提高索引并行建立的性能.
但是nologging参数不建议在部署了dataguard的情况下使用,因为dataguard是基于归档日志来进行远程备份的。
3、如何重建索引:
alter index [index_name] rebuild [parallel {number}] [nologging/loggin];
4、如何创建分区:
--范围分区
create table [table_name] partition by range([col_name])(
partition [part_name] values less than [range_value] tablespace [tablespace_name],
...
)
--列表分区
--hash分区
5、如何截断分区:
alter table [table_name] truncate partition
延伸:truncate一个表或一个分区,能使HWM重至为0,而delete则不能。
6、如何重命名分区:
alter table [table_name] rename partition [old_name] to [new_name];
7、如何查询索引状态:
select ind.table_name, ind.index_name, ind.status
from user_indexes ind
where ind.index_name = '[index_name]'
and ind.table_name = '[table_name]'
8、如何添加分区:
alter table [table_name] add partition [partition_name] values less than([range_value]).
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12932950/viewspace-264925/ ,如需转载,请注明出处,否则将追究法律责任。