生产中索引表空间的恢复策略

在日常的生常中索引表空间通常不作备份,原因:数据表空间大,索引表空间也跟着大,数据量不少,备份艰难,降低系统效率

SQL> create tablespace test_index
  2  datafile '/u01/disk1/test_index.dbf'
  3  size 2M;

Tablespace created.


SQL> create index index_1 on scott.dept(dname) tablespace test_index nologging;——用nologging参数,不走redo操作,建索引会快些,提高了系统效率,因为也不想用备份来恢复它们,我们想用重建它们,因此也没必要记录,
提示:最好把创建索引表空间和创建索引的命令单独保存在一个脚步中,方便以后恢复时,一跑脚步就OK,不用手工敲代码

Index created.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> ho ls /u01/disk1/test_index.dbf
/u01/disk1/test_index.dbf

SQL> ho rm -f  /u01/disk1/test_index.dbf

SQL> ho ls /u01/disk1/test_index.dbf
ls: /u01/disk1/test_index.dbf: No such file or directory

SQL> startup
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  1218316 bytes
Variable Size              62916852 bytes
Database Buffers          100663296 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/disk1/test_index.dbf'

SQL> alter database datafile 7 offline;
alter database datafile 7 offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled


SQL> alter database datafile 7 offline drop;

Database altered.

SQL> alter database open;

Database altered.


SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
SYSAUX                         ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST_UNDO                      ONLINE
TEST_INDEX                     ONLINE 虽然删除了,但是显示还是online


SQL> select INDEX_NAME,TABLE_NAME,TABLESPACE_NAME,STATUS from user_indexes
  2  where INDEX_NAME = 'INDEX_1';

INDEX_NAME      TABLE_NAME    TABLESPACE_NAME STATUS
--------------- ------------- --------------- --------
INDEX_1         DEPT          TEST_INDEX      VALID  ——还是显示可用



SQL> select a.FILE_ID,a.FILE_NAME,b.STATUS
  2  from dba_data_files a,v$datafile b
  3  where a.FILE_ID = b.file#;

   FILE_ID FILE_NAME                                          STATUS
---------- -------------------------------------------------- -------
         1 /u01/app/oracle/oradata/orcl/system01.dbf          SYSTEM
         2 /u01/app/oracle/oradata/orcl/undotbs01.dbf         ONLINE
         3 /u01/app/oracle/oradata/orcl/sysaux01.dbf          ONLINE
         4 /u01/app/oracle/oradata/orcl/users01.dbf           ONLINE
         5 /u01/app/oracle/oradata/orcl/example01.dbf         ONLINE
         6 /u01/disk1/test_undo.dbf                           ONLINE
         7 /u01/disk1/test_index.dbf                          OFFLINE

SQL> drop tablespace TEST_INDEX including contents;

Tablespace dropped.

SQL> select a.FILE_ID,a.FILE_NAME,b.STATUS
  2  from dba_data_files a,v$datafile b
  3  where a.FILE_ID = b.file#;

   FILE_ID FILE_NAME                                          STATUS
---------- -------------------------------------------------- -------
         1 /u01/app/oracle/oradata/orcl/system01.dbf          SYSTEM
         2 /u01/app/oracle/oradata/orcl/undotbs01.dbf         ONLINE
         3 /u01/app/oracle/oradata/orcl/sysaux01.dbf          ONLINE
         4 /u01/app/oracle/oradata/orcl/users01.dbf           ONLINE
         5 /u01/app/oracle/oradata/orcl/example01.dbf         ONLINE
         6 /u01/disk1/test_undo.dbf                           ONLINE
查看验证了TEST_INDEX被真正地删掉了

重建表可空间和索引
SQL> create tablespace test_index
  2  datafile '/u01/disk1/test_index.dbf'
  3  size 2M;

Tablespace created.

SQL> create index index_1 on scott.dept(dname) tablespace test_index nologging;

Index created.

SQL> select a.FILE_ID,a.FILE_NAME,b.STATUS
  2  from dba_data_files a,v$datafile b
  3  where a.FILE_ID = b.file#;

   FILE_ID FILE_NAME                                          STATUS
---------- -------------------------------------------------- -------
         1 /u01/app/oracle/oradata/orcl/system01.dbf          SYSTEM
         2 /u01/app/oracle/oradata/orcl/undotbs01.dbf         ONLINE
         3 /u01/app/oracle/oradata/orcl/sysaux01.dbf          ONLINE
         4 /u01/app/oracle/oradata/orcl/users01.dbf           ONLINE
         5 /u01/app/oracle/oradata/orcl/example01.dbf         ONLINE
         6 /u01/disk1/test_undo.dbf                           ONLINE
         7 /u01/disk1/test_index.dbf                          ONLINE ——显示回来了

7 rows selected.

总结:
基本思路:模拟丢失,如果不是重要的数据表空间(例如:临时表空间,索引表空间)可以用offline drop ,然后startup后重建即可,如果有关键数据的表空间,那就要recover了



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

转载于:http://blog.itpub.net/26465805/viewspace-712597/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值