恢复非关键的损失

1           恢复受损的临时表空间

1.1          临时数据

临时数据:是只在一个数据库会话的持续时间内存在的数据。包括:

排序数据

全局临时表

处理临时数据时不会生成撤销数据和重做日志。

1.2          查看临时空间配置

查看临时表空间及其临时文件与大小

sys@ORCL> select t.name, d.name file_name, d.bytes from v$tablespace t,

v$tempfile d where t.ts#=d.ts#;

 

NAME   FILE_NAME   BYTES

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

TEMP E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_TEMP_7RBDDLWS_.TMP

  20971520

Or

sys@ORCL> select tablespace_name, file_name, bytes from dba_temp_files;

 

TABLESPACE_NAME

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

FILE_NAME

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

  BYTES

----------

TEMP

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_TEMP_7RBDDLWS_.TMP

  20971520

查询默认的临时表空间

sys@ORCL> select property_value from database_properties where property_name='DE

FAULT_TEMP_TABLESPACE';

 

PROPERTY_VALUE

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

TEMP

查询指定用户所具有的临时表空间

sys@ORCL> select username, temporary_tablespace from dba_users where username='JOHN';

 

USERNAME                       TEMPORARY_TABLESPACE

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

JOHN                           TEMP

 

1.3          临时文件受损的情况

会有ora-01186ora-01157ora-01110错误报警

1.4          还原临时表空间

方法:

a重建临时文件

。在受损的临时表空间内添加另一个临时文件。

。将受损的临时文件脱机。

。删除受损的临时文件。

sys@ORCL> alter tablespace temp add tempfile

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\tempfile1.tmp' size 100m;

表空间已更改。

 

sys@ORCL> alter database tempfile 'E:\ORACLE\PRODUCT\10.2.0\

ORADATA\ORCL\DATAFILE\O1_MF_TEMP_7RBDDLWS_.TMP' offline;

 

数据库已更改。

 

sys@ORCL> alter database tempfile 'E:\ORACLE\PRODUCT\10.2.0\

ORADATA\ORCL\DATAFILE\O1_MF_TEMP_7RBDDLWS_.TMP' drop;

数据库已更改。

 

b 重建表空间

。创建一个新的临时表空间。

。通过alter database命令将用户切换到这个新的临时表空间。

sys@ORCL> create temporary tablespace temp_ts1 tempfile

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\temp_ts1.tmp' size 100m;

 

表空间已创建。

 

sys@ORCL> alter database default temporary tablespace temp_ts1;

 

数据库已更改。

 

sys@ORCL> drop tablespace temp including contents and datafiles;

 

表空间已删除。

 

2           恢复受损的联机重做日志文件

2.1          查看联机重做日志文件的配置

使用v$logv$logfile动态视图查看

sys@ORCL> select group#, sequence#, bytes, members, archived, status from v$log;

 

 

    GROUP#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

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

         1        124   52428800          3 YES INACTIVE

         2        125   52428800          3 YES INACTIVE

             3        126   52428800          3 NO  CURRENT

 

sys@ORCL> select group#, status, member from v$logfile order by group#;

 

 GROUP# STATUS

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

MEMBER

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

         1 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

 

         1 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBDCY8S_.LOG

 

         1 STALE

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LOG

 

         2 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

         2 STALE

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBDCZFO_.LOG

 

         2 STALE

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7RBDCZX9_.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7RBDD21Y_.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO003B.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBDD0Y8_.LOG

 

 

已选择9行。

 

2.2          联机重做日志文件成员受损的情况

如果当前日志文件组的所有副本都被损坏,那么实例就会立即终止;如果在日志切换时,当前生产的日志文件组的所有副本都被损坏,那么实例就会立即终止;如果任然存在日志文件组的一个有效成员,那么实例将保持打开状态,同时用户也不会感觉到任何问题,不过将出现存在问题的指示。

V$logfile视图会将受损或丢失的成员的状态标识为invalid

后台进程将报告这个问题:ora-00316, ora-00312, ora-00313

2.3          重建受损的联机重做日志文件成员

方法:

A 删除受损的联机重做日志文件成员并添加一个替换的成员

。清除受损的成员

。从磁盘中删除物理文件

。再添加一个新的成员

sys@ORCL> alter database drop logfile member

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG';

 

数据库已更改。

 

sys@ORCL> host del

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

sys@ORCL> alter database add logfile member

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG' to group 2;

 

数据库已更改。

sys@ORCL> select group#, status, member from v$logfile order by group#;

 

    GROUP# STATUS

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

MEMBER

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

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

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBDCY8S_.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LO

G

 

         2 INVALID

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBDCZFO_.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7RBDCZX9_.LO

G

 

         3

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7RBDD21Y_.LO

G

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO003B.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBDD0Y8_.LOG

 

 

已选择9行。

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> alter system switch logfile;

 

系统已更改。

 

sys@ORCL> select group#, status, member from v$logfile order by group#;

 

    GROUP# STATUS

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

MEMBER

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

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

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBDCY8S_.LOG

 

         1

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LO

G

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO002B.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBDCZFO_.LOG

 

         2

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7RBDCZX9_.LO

G

 

         3

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7RBDD21Y_.LO

G

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO003B.LOG

 

         3

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBDD0Y8_.LOG

 

 

已选择9行。

 

B 删除相应的联机重做日志文件组

。使用‘clear logfile’命令

sys@ORCL> alter database clear logfile group 2;

 

数据库已更改。

Oracle不允许清除需要被归档的日志文件组、当前的文件组或活动的文件组。如果磁盘损坏,也不允许使用‘clear logfile’命令恢复。

3           恢复受损的索引表空间

索引数据时必须受到保护的实际数据。

索引上的所有动作都会生成撤销和重做,通过使用nologging可以关闭重做的生成。

根据基表可以重建索引数据。

3.1          索引表空间

专门为索引创建段创建的表空间。

索引组织表是索引,但不能被置入索引表空间。

可以使用以下语句查询索引表空间是否只有索引:

sys@ORCL> select owner, segment_name,segment_type from dba_segments where tablespace_name='INDX' and segment_type<>'INDEX';

3.2          索引表空间受损的情况

一般会出现ora-00376 and ora-01110问题。

使用v$datafile and v$recovry_file视图,可以进一步查看错误。

sys@ORCL> select name, status from v$datafile where file#=7;

sys@ORCL> select online_status, error from v$recover_file where file#=7;

将受损的文件脱机:

sys@ORCL> alter tablespace INDX offline immediate;

只有在启用archivelogmode时才会允许使用offline immediate命令。

3.3          恢复索引表空间

方法:

A archivelogmode中可以使用还原和恢复来修复受损文件

B 简单的删除表空间,然后重建表空间并重新生成索引,这是一种非常耗时的操作。具体步骤如下:

将受损的表空间脱机

确定受损表空间中的索引

删除受损表空间并删除其数据文件

创建一个新的表空间

在新的表空间内生成所有索引

1 创建索引表空间

sys@ORCL> create tablespace indx datafile 'e:\oracle\indx01.dbf' size 10m;

 

表空间已创建。

1        创建一个表,在索引表空间中创建索引

sys@ORCL> create table indtest (c1 number);

 

表已创建。

 

sys@ORCL> create index ind1 on indtest(c1) tablespace indx;

 

索引已创建。

2        仿真数据文件受损的情况

sys@ORCL> alter database datafile 'e:\oracle\indx01.dbf' offline drop;

 

数据库已更改。

3        证明新建的所有不可用

sys@ORCL> insert into indtest values(1);

insert into indtest values(1)

            *

1 行出现错误:

ORA-00376: 此时无法读取文件 9

ORA-01110: 数据文件 9: 'E:\ORACLE\INDX01.DBF'

4        删除新建的索引表空间

sys@ORCL> drop tablespace indx including contents and datafiles;

 

表空间已删除。

5        证明新表可用

sys@ORCL> insert into indtest values(1);

 

已创建 1 行。

6        重建索引表空间与索引

sys@ORCL> create tablespace indx datafile 'e:\oracle\indx01.dbf' size 10m;

 

表空间已创建。

 

sys@ORCL> create index ind1 on indtest(c1) tablespace indx;

 

索引已创建。

7        删除新建的表空间和表

sys@ORCL> drop tablespace indx including contents and datafiles;

 

表空间已删除。

 

sys@ORCL> drop table indtest;

 

表已删除。

 

4           恢复受损的只读表空间

为什么可以从只读表空间内删除对象?因为drop命令只更新数据字典,但是不更新对象本身,而数据字典不能位于只读表空间中。

4.1          备份只读表空间

只读表空间只需备份一次。

4.2          恢复只读表空间

只需要还原受损数据文件的备份。

5           恢复受损的口令文件

使用一下命令重建口令文件

Orapwd file= password= entries=

If REMOTE_LOGIN_PASSWORDFILE parameter is set by SHARED or EXCLUSIVE, the password file will be dismissed.

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

转载于:http://blog.itpub.net/9537053/viewspace-723260/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值