Oracle索引表空间数据文件丢失及重建

2014-11-24 17:13:02 · 作者: · 浏览: 0

重新创建索引:
使用以下选项可缩短创建索引所花费的时间:


PARALLEL NOLOGGING


SQL> CREATE INDEX rname_idx
ON hr.regions (region_name)
PARALLEL 4;



NOLOGGING:使用此关键字会加快索引的创建速度,因为创建进程创建的重做日志 条目极少。这种工作量大幅减小的重做生


成也适用于直接路径插入和 Direct Loader (SQL*Loader) 插入。这是永久性属性,因此将显示在数据字典中。可以随时使用


ALTER INDEX NOLOGGING/LOGGING 命令来加以更新。
注:若数据库在nologging状态时,所操作的数据应该备份,再将nologging改回来,以免重大失误难以恢复

丢失了索引表空间后进行恢复:
索引丢失时,更为快速、简单的方法是重新创建而不是尝试恢复索引。

索引是计算得到的对象,因为它们不提供任何原始数据,只是已存在数据的另一表示形式。因此,在大多数情况下,可以很容易地重新创建索引。
如果您的表空间仅包含索引,则可以简化在丢失了属于该表空间的数据文件后的恢复工作。
如果丢失了此类数据文件,则可以


执行以下步骤:


1.删除数据文件。


2.删除表空间。
3.重新创建索引表空间。


4.重新创建包含在表空间中的索引。
1.可以在不执行 RECOVER 任务的情况下恢复仅包含索引的表空间。


2.如果属于仅包含索引的表空间的数据文件丢失,则更为简单的方法可能是重新创建表空间和重新创建索引。



实验:索引表空间数据文件丢失


1.创建实验数据;


create tablespace INT_TBS datafile
'/u01/app/oracle/oradata/PROD/ind_tbs.dbf' size 20m;
create user ind_user indentified by user
default tablespace ind_tbs;


grant dba to ind_user;


conn ind_user/user


create table t1 tablespace user
as select * from dba_objects
where rownum<=100;


create index ind_t1_id on t1 (object_id);
create index ind_t1_name on t1 (upper(object_name));
create index ind_t1_com on t1 (object_id,object_name);


select index_name,tablespace_name,status from ind;
--查看索引状态


2.删除所有表空间的数据文件


!rm /u01/app/oracle/oradata/PROD/ind_tbs.dbf
!ls /u01/app/oracle/oradata/PROD/ind_tbs.dbf


3.触发问题;
set autot traceonly
--开启跟踪
select * from t1 where object_id=2;
--报错,索引文件没有找到
set autot off


alter index ind_t1_id rebuild online;
--报错,索引文件未找到


4.重建索引并指定到别的表空间


set long 99999
select dbms_metadata.get_ddl('INDEX','IND_T1_ID') from dual;


IND_USER@PROD>select dbms_metadata.get_ddl('INDEX','IND_T1_ID') FROM DUAL;


CREATE INDEX "IND_USER"."IND_T1_ID" ON "IND_USER"."T1" ("OBJECT_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "IND_TBS"
--建议关注compute statistics


alter index ind_t1_id rebulid online tablespace users;
alter index ind_t1_name rebulid online tablespace users;
alter index ind_t1_com rebulid online tablespace users;


select index_name,tablespace_name,status from ind;
--查看重建结果


5.删除或重建数据文件丢失的索引表空间


drop tablespace ind_tbs including contents and datafiles;
--删除表空间
alter system datafile 7 offline;
--如果删除表空间报错,数据文件正在打开,先offline 7 ,再删除;


create tablespace ind_tbs datafile '/u01/app/oracle/oradata/PROD/ind_tbs.dbf' size 20m;


alter index ind_t1_id rebulid online tablespace ind_tbs;
alter index ind_t1_name rebulid online tablespace ind_tbs;
alter index ind_t1_com rebulid online tablespace ind_tbs;


select index_name,tablespace_name,status from ind;
--查看重建状态;