恢复非当前的还原表空间、临时表空间和只读表空间、索引表空间

时间:2021-07-04 20:40:48

一、恢复非当前还原表空间

恢复费当前的还原表空间实际上就是删除原来的还原表空间和对应的数据文件,然后重建还原表空间和与之对应的数据文件。因为非当前的还原表空间不在数据库的备份行列中,对非当前的还原表空间,oracle系统根本不会用到。所以回复非当前的还原表空间可以直接删除然后重建即可.。

  一、非当前还原表空间崩溃后要shutdown数据库库

  shutdown immediate;

  二、重启数据库获得崩溃的数据库文件的文件号

  startup

  三、提示无法标识/锁定文件(文件号)

    数据文件(文件号)......文件名.....

  四、脱机并删除数据文件

  alter database  datafile 文件号 offline drop;

  五、修改数据库到open状态

  alter database open;

  六、删除崩溃的非当前还原表空间和对应的数据文件。

  drop tablespace tablespace_name

  七、重建还原表空间

  create undo tablespace tablespace_name

    datafile 'F:\datafile_name.dbf'

    size 50m

    extent management local

  八、完成恢复非当前的还原表空间。

 

 二、恢复只读表空间

  只读表空间在被设置为只读表之后要备份一次,以后给表空间就不在oracle的备份行列中了。将只读数据归集添加到只读表空间中可以有效的提高系统的效率。在将表空间置为只读前后,该表空间的状态在控制文件中前后是不同的的。 一定要分别备份前后两个状态分别对应 的控制文件。

三、恢复临时表空间

  临时表空间崩溃后重启oracle系统,系统会自动的完成修复不需要人为的干预,在系统重启修复成功后会在报警日志文件alert.log中最后添加如下内容“re-creating tempfile ....*.dbf”。oracle系统根据数据字典中的数据文件名和表空间名称自动创建所需要的表空间和该表空间下的临时数据文件,完成自动恢复。

  但是对于要求24*7小时不停止运行的系统来说重启oracle是不现实的。可以采用向临时表空间中添加数据文件,然后删除原来损坏的数据文件的方法,代替已有的损坏的临时数据文件。

  方法如下:

  1、获得临时表空间与之对应的临时数据文件

  select tf.name file_name, ts.name tablespace_name from v$tempfile tf,v$tablespace ts where tf.ts#=ts.ts#;

  2、判断临时表空间是否损坏

  使用带有order by排序的sql查询语句。在数据量很大时,超出内存的容量oracle系统就会选择使用临时表空间。如果临时文件损坏会报错:

  error in identifing file

  ".......tempfile.dbf"

  unable to obtain file status

  3、判断出现错误后,向临时表空间中添加临时数据文件

  alter tablespace temp add tempfile

  '....tempfile2.dbf';

  size 20m

  4、删除损坏的临时数据文件

  alter tablespace temp drop tempfile

  '........tempfile1.dbf';

  5、确认临时表空间的状态为联机

  select tablespace_name,status from dba_tablespaces

  temp表空间的状态 为online说明临时表空间正常恢复。

  6、完成不关闭oracle系统的情况下恢复临时表空间。

四、恢复索引表空间

  采用重建索引的方法来恢复索引表空间。

  1、索引表空间对应的数据文件损坏后重启数据系统会报错

  无法标识/锁定数据文件(文件号)

  数据文件(文件号)‘......indexfile.dfb’

  2、将损坏的文件置为脱机
   alter database datafile 文件号 offline

  3、修改到open状态

  alter database open

  4、由数据文件号对应到tablespce

  select file_id,tablespace_name from dba_data_files;

  5、获取数据文件的状态

  select file#,status from v$datafile

  如果索引文件损坏,那么索引表空间对应的数据文件应该是offline状态

  6、删除索引表空间

  drop tablespace  index_tablespace including contents

  7、重建索引表空间和全部的索引

  create tablespace index_tablespace

  datafile '.......indexfile.dbf'

  extent management local

  uniform size 1m

  ==================

  重建索引

  create index index_name

  on tablename(colum_name) tablespace index_tablespace nologging

  nologging参数表示不写入重做日志文件中。意味着以后不会从重做日志文件中恢复而是采用重建索引的方法

  8、确认用户下对应的索引的信息

  select index_name,table_name,tablespace_name,status from user_indexes;

  9、确认数据文件的状态

  select file#,status from v$datafile

  10、确认重建的索引表空间的状态

  select tablespace_name,status from dba_tablespaces

  确认索引表空间为online状态。

  11、完成索引表空间的重建(恢复)