* *丢失非系统非当前活动回滚段表空间中的一个数据文件 首先是做一次热备(因为上次已经做了不完全恢复resetlogs) Microsoft Windows 2000 [Version 5.00.2195] (C) 版权所有 1985-2000 Microsoft Corp. E:/>sqlplus internal SQL*Plus: Release 8.1.7.0.0 - Production on 星期一 10月 21 08:05:20 2002 (c) Copyright 2000 Oracle Corporation. All rights reserved. 连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 d:/BACKUPDB/archive 最早的概要信息日志序列 0 下一个存档日志序列 1 当前日志序列 1 SQL> @e:/backupdb/other/aa TO_CHAR(SYSDATE,'''YY --------------------- '2002-10-21 08:10:22' SQL> SQL> @e:/backupdb/other/backup_ts.sql SQL> --set termout off; SQL> set echo off head off feedback off pagesize 0; 21-10月-02 BEGINING ARCHIVE LOG NUMBER IS : 数据库日志模式 存档模式 自动存档 启用 存档终点 d:/BACKUPDB/archive 最早的概要信息日志序列 0 下一个存档日志序列 1 当前日志序列 1 Begin Backup Tablespace SYSTEM.'D:/BACKUPDB/SYSTEM01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace RBS.'D:/BACKUPDB/RBS01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace USERS.'D:/BACKUPDB/USERS01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace TEMP.'D:/BACKUPDB/TEMP01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace TOOLS.'D:/BACKUPDB/TOOLS01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace INDX.'D:/BACKUPDB/INDX01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup CONTROLFILE 'D:/BACKUPDB/CONTROL01.CTL' ... Successed End Backup The CONTROLFILE . Begin Backup CONTROLFILE To Trace ... Successed End Backup The CONTROLFILE . Before Switch Log, The Current Log is: 数据库日志模式 存档模式 自动存档 启用 存档终点 d:/BACKUPDB/archive 最早的概要信息日志序列 0 下一个存档日志序列 1 当前日志序列 1 Begin Backup Switch Current Log ... Successed End Switch Log . After Switch Log, The Ending Archive Log Number Is : 数据库日志模式 存档模式 自动存档 启用 存档终点 d:/BACKUPDB/archive 最早的概要信息日志序列 1 下一个存档日志序列 2 当前日志序列 2 21-10月-02 SQL> --set termout on; SQL> SQL> select to_char(sysdate,'''yyyy-mm-dd hh:mm:ss''') from dual; '2002-10-21 08:10:54' 已选择 1 行。 SQL> 数据准备工作1 从下面的情况看,因为改变了数据库的结构,所以,首先需要一个热备或者冷备才能进行恢复。如果已经备份,可以找回数据insert into test2 values(2);,因为2是几经commit;的,3是没有commit的,所以能找会到2。3则会丢失。 SQL> alter tablespace system add datafile 'D:/BACKUPDB/SYSTEM02.DBF' size 10M; 表空间已更改。 SQL> alter tablespace users add datafile 'D:/BACKUPDB/USERS02.DBF' size 10M; 表空间已更改。 SQL> SQL> create tablespace test datafile 'D:/BACKUPDB/test01.dbf' size 10M; 表空间已创建。 SQL> SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 d:/BACKUPDB/archive 最早的概要信息日志序列 1 下一个存档日志序列 2 当前日志序列 2 SQL> alter user lunar quota 10m on test; 用户已更改。 SQL> SQL> create table test2(a number) tablespace test; 表已创建。 SQL> insert into test2 values(1); 已创建 1 行。 SQL> commit; 提交完成。 SQL> alter system switch logfile; 系统已更改。 SQL> SQL> conn lunar/lunar Connected. SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- TEST1 TABLE TEST2 TABLE TESTBACKUP3 TABLE SQL> insert into test2 values(2); 1 row created. SQL> commit; Commit complete. SQL> insert into test2 values(3); 1 row created. 以上改动后需要作一次热备或者冷备,否则数据文件丢失后不能恢复(增加表空间,数据文件都要备份数据库) SQL> conn internal Connected. SQL> @e:/backupdb/other/aa SQL> select to_char(sysdate,'''yyyy-mm-dd hh:mm:ss''') from dual; '2002-10-21 08:10:05' 1 row selected. SQL> set termout off SQL> SQL> @e:/backupdb/other/backup_ts.sql SQL> --set termout off; SQL> set echo off head off feedback off pagesize 0; 21-OCT-02 BEGINING ARCHIVE LOG NUMBER IS : Database log mode Archive Mode Automatic archival Enabled Archive destination d:/BACKUPDB/archive Oldest online log sequence 3 Next log sequence to archive 5 Current log sequence 5 Begin Backup Tablespace SYSTEM.'D:/BACKUPDB/SYSTEM01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace RBS.'D:/BACKUPDB/RBS01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace USERS.'D:/BACKUPDB/USERS01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace TEMP.'D:/BACKUPDB/TEMP01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace TOOLS.'D:/BACKUPDB/TOOLS01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace INDX.'D:/BACKUPDB/INDX01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace SYSTEM.'D:/BACKUPDB/SYSTEM02.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace USERS.'D:/BACKUPDB/USERS02.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup Tablespace TEST.'D:/BACKUPDB/TEST01.DBF' ... 已复制 1 个文件。 Successed End Backup This File . Begin Backup CONTROLFILE 'D:/BACKUPDB/CONTROL01.CTL' ... Successed End Backup The CONTROLFILE . Begin Backup CONTROLFILE To Trace ... Successed End Backup The CONTROLFILE . Before Switch Log, The Current Log is: Database log mode Archive Mode Automatic archival Enabled Archive destination d:/BACKUPDB/archive Oldest online log sequence 3 Next log sequence to archive 5 Current log sequence 5 Begin Backup Switch Current Log ... Successed End Switch Log . After Switch Log, The Ending Archive Log Number Is : Database log mode Archive Mode Automatic archival Enabled Archive destination d:/BACKUPDB/archive Oldest online log sequence 4 Next log sequence to archive 6 Current log sequence 6 21-OCT-02 SQL> --set termout on; SQL> SQL> select to_char(sysdate,'''yyyy-mm-dd hh:mm:ss''') from dual; '2002-10-21 08:10:31' 1 row selected. SQL> 数据准备工作2 可以找回数据insert into test2 values(4);,因为4是几经commit;的,5是没有commit的,所以能找会到2。3则会丢失。 SQL> conn lunar/lunar Connected. SQL> insert into test2 values(4); 1 row created. SQL> commit; Commit complete. SQL> insert into test2 values(5); 1 row created. SQL> Shutdow abort,然后删除test01.dbf,模拟数据文件丢失 SQL> conn internal Connected. SQL> shutdown abort ORACLE instance shut down. SQL> 删除test01.dbf,把备份的数据文件test01.dbf拷贝过来 Mount数据库 SQL> startup mount; ORACLE instance started. Total System Global Area 25856028 bytes Fixed Size 75804 bytes Variable Size 8925184 bytes Database Buffers 16777216 bytes Redo Buffers 77824 bytes Database mounted. SQL> alter database open; alter database open * ERROR at line 1: ORA-01113: file 9 needs media recovery ORA-01110: data file 9: 'D:/BACKUPDB/TEST01.DBF' SQL> 在打开数据库的时候,提示'D:/BACKUPDB/TEST01.DBF'需要介质恢复,因为他和其他的文件时间点不一致。 恢复数据文件(把最近的热备的文件拷贝过来) SQL> recover datafile 'D:/BACKUPDB/TEST01.DBF'; Media recovery complete. 打开数据库 SQL> alter database open; Database altered. SQL> 验证恢复结果:完全恢复 SQL> conn lunar/lunar Connected. SQL> select * from test2; 1 2 3 4 5 5 rows selected. SQL> 说明: [$#376] 首先是做一次热备(因为上次已经做了不完全恢复resetlogs) [$#376] 以上改动后需要作一次热备或者冷备,否则数据文件丢失后不能恢复(增加表空间,数据文件都要备份数据库) 1. Shutdow abort,然后删除test01.dbf,模拟数据文件丢失 2. 删除test01.dbf,把备份的数据文件test01.dbf拷贝过来 3. Mount数据库 4. 恢复数据文件(把最近的热备的文件拷贝过来) 5. 打开数据库 |
http://www.cnoug.org/viewthread.php?tid=95&highlight=%2Blunar