索引表空間損壞的恢復

取元數據

select dbms_metadata.get_ddl('類型','對象','模式')

取出scott用戶下所有表的元數據

select(select dbms_metadata.get_ddl('TABLE',table_name,owner) from dual) fromdba_tables where owner='SCOTT';

取出scott用戶下所有所有的元數據

select(select dbms_metadata.get_ddl('INDEX',index_name,owner) from dual) fromdba_indexes where owner='SCOTT';

索引表空間損壞恢復的實驗

SQL>create tablespace ind_tbs datafile '/u01/tiger/oradata/orcl2/ind_tbs01.dbf'size 10m;

Tablespacecreated.

 

SQL> create index i1 on emp1(ename) tablespace ind_tbs;

 

Index created.

 

SQL> create index i2 on emp1(sal)tablespace ind_tbs;

 

Index created.

 

SQL> selectsegment_type,segment_name,owner from dba_segments wheretablespace_name='IND_TBS';

 

SEGMENT_TYPE       SEGMENT_NAME         OWNER

------------------ --------------------------------------------------

INDEX              I1                   SCOTT

INDEX              I2                   SCOTT

SQL> !cp /etc/passwd/u01/tiger/oradata/orcl2/ind_tbs01.dbf

 

SQL> select * from emp1 wheresal<1000;

 

    EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM    DEPTNO

---------- ---------- --------- ------------------- ---------- ---------- ----------

     7369 SMITH      CLERK           7902 17-DEC-80        800                    20

     7900 JAMES      CLERK           7698 03-DEC-81        950                    30

 

SQL> alter system switch logfile;

 

System altered.

 

SQL> select * from emp1 wheresal<1000;

 

    EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM    DEPTNO

---------- ---------- --------- ------------------- ---------- ---------- ----------

     7369 SMITH      CLERK           7902 17-DEC-80        800                    20

     7900 JAMES      CLERK           7698 03-DEC-81        950                    30

 

SQL> altersystem checkpoint;

 

System altered.

 

SQL> select * from emp1 where sal<1000;

select * from emp1 where sal<1000

*

ERROR at line 1:

ORA-00376: file 5 cannot be read at this time

ORA-01110: data file 5:'/u01/tiger/oradata/orcl2/ind_tbs01.dbf'

看一下五號文件在哪個表空間

SQL> select tablespace_name,file_id from dba_data_files where file_id=5;

 

TABLESPACE_NAME                   FILE_ID

------------------------------ ----------

IND_TBS                                 5

查看一下這個表空間裏存放的是什麼內容

SQL> select segment_type,segment_name,owner fromdba_segments where tablespace_name='IND_TBS';

 

SEGMENT_TYPE       SEGMENT_NAME         OWNER

------------------ --------------------------------------------------

INDEX              I1                   SCOTT

INDEX              I2                   SCOTT

獲取元數據

SQL> selectdbms_metadata.get_ddl(segment_type,segment_name,owner) ||';' from dba_segmentswhere tablespace_name='IND_TBS';

刪除壞了的索引表空間

SQL> drop tablespace ind_tbs includingcontents;

 

Tablespace dropped.

 

SQL> select name from v$datafile;

 

NAME

----------------------------------------

/u01/tiger/oradata/orcl2/system01.dbf

/u01/tiger/oradata/orcl2/undotbs01.dbf

/u01/tiger/oradata/orcl2/sysaux01.dbf

/u01/tiger/oradata/orcl2/users01.dbf

 

SQL> create tablespace ind_tbs datafile'/u01/tiger/oradata/orcl2/ind_tbs01.dbf' size 10m reuse;

 

Tablespace created.

 檢查看索引是否可以使用了

SQL> select * from emp1 wheresal<1000;

 

    EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM    DEPTNO

---------- ---------- --------- ------------------- ---------- ---------- ----------

     7369 SMITH      CLERK           7902 17-DEC-80        800                    20

     7900 JAMES      CLERK           7698 03-DEC-81        950                    30

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章