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-01186、ora-01157、ora-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$log和v$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/