ITPub博客

首页 > 应用开发 > IT综合 > 一些简单的恢复案例

一些简单的恢复案例

原创 IT综合 作者:outdo 时间:2007-01-09 17:10:48 0 删除 编辑
一些简单的恢复案例包括1,模拟系统文件丢失恢复2,无备份可用的数据文件恢复3,重定位恢复表空间4,日志文件组丢失进行的不完全恢复等...[@more@]

--如何配置数据库为自动归档
SQL> archive log start;
已处理的语句
SQL> alter database open
2 /

数据库已更改。

SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:oraclearchive
最早的概要日志序列 6
下一个存档日志序列 8
当前日志序列 8
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 禁用
存档终点 D:oraclearchive
最早的概要日志序列 6
下一个存档日志序列 8
当前日志序列 8
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 7 104857600 1 YES INACTIVE 112383 06-1月 -07
2 1 8 104857600 1 NO CURRENT 150637 06-1月 -07
3 1 6 104857600 1 YES INACTIVE 102077 06-1月 -07

SQL> show parameter log_archive_start

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_start boolean FALSE
SQL> alter system set log_archive_start=true scope=both;
alter system set log_archive_start=true scope=both
*
ERROR 位于第 1 行:
ORA-02095: 无法修改指定的初始化参数

SQL> alter system set log_archive_start=false scope=both;
alter system set log_archive_start=false scope=both
*
ERROR 位于第 1 行:
ORA-02095: 无法修改指定的初始化参数


SQL> alter system set log_archive_start=false scope=spfile;

系统已更改。


----模拟系统文件丢失恢复
SQL> create table systest tablespace system as select * from scott.d

表已创建。

SQL> select * from systest;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: 'D:ORACLEORADATALABSYSTEM01.DBF'


SQL> recover datafile 1;
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> select * from systest;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

----无备份可用的数据文件恢复(1,必须有在数据文件建立后所有的归档,2,必须有数据文件建立后的控制文件)
SQL> create tablespace test datafile 'D:ORACLEORADATALABTEST01.DBF' size 10m;

表空间已创建。


SQL> create table t_test tablespace test as select * from scott.emp where rownum<=5;

表已创建。

SQL> select * from t_test;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30

SQL> select file#,name from v$datafile;

FILE# NAME
---------- ----------------------------------------
1 D:ORACLEORADATALABSYSTEM01.DBF
2 D:ORACLEORADATALABUNDOTBS01.DBF
3 D:ORACLEORADATALABDRSYS01.DBF
4 D:ORACLEORADATALABEXAMPLE01.DBF
5 D:ORACLEORADATALABINDX01.DBF
6 D:ORACLEORADATALABTOOLS.ORA
7 D:ORACLEORADATALABUSERS01.DBF
8 D:ORACLEORADATALABXDB01.DBF
9 D:ORACLEORADATALABEDU_DATA.DBF
10 D:ORACLEORADATALABTEST01.DBF

已选择10行。


SQL> alter tablespace test offline immediate;

表空间已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter tablespace test online;
alter tablespace test online
*
ERROR 位于第 1 行:
ORA-01157: 无法标识/锁定数据文件 10 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 10: 'D:ORACLEORADATALABTEST01.DBF'


SQL> alter database create datafile 'D:ORACLEORADATALABTEST01.DBF' as 'D:ORACLEORADATALABTEST01.DBF'
2 /

数据库已更改。

SQL> recover datafile 10;
完成介质恢复。

SQL> alter tablespace test online;

表空间已更改。

SQL> select * from t_test;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30

-----

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01190: 控制文件或数据文件1来自于最后一个 RESETLOGS 之前
ORA-01110: 数据文件 1: 'D:ORACLEORADATALABSYSTEM01.DBF'


SQL> recover databse;
ORA-00905: 缺少关键字


SQL> recover databse using backup controlfile;
ORA-00905: 缺少关键字
----在数据库resetlogs后,以前做的备份是无用的。需要重新备份新的化身。

14:06:30 SQL> create table tt as select rownum rn from dict;

表已创建。

14:07:02 SQL> @cnt tt
原值 1: select count(*) cnt from &1
新值 1: select count(*) cnt from tt

CNT
----------
507

14:07:32 SQL> drop table tt;

表已丢弃。

14:07:36 SQL> insert into test select * from test;

已创建3行。

14:08:19 SQL> commit;

提交完成。

14:08:21 SQL> @TAb
14:08:32 SQL> select tname,tabtype from tab order by 1
14:08:32 2 ;

TNAME TABTYPE
------------------------------ -------
TEST TABLE

14:12:28 SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
14:12:38 SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
14:28:22 SQL> alter database rename file 'D:oracleoradatalabEDU_DATA.DBF' to 'E:ora_backlabEDU_DATA.DBF'
14:29:26 2 /

数据库已更改。
-----这里模拟重定位恢复表空间。

14:29:38 SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'D:ORACLEORADATALABSYSTEM01.DBF'


14:30:19 SQL> alter session set nls_date_format ='yyyy-mm-dd hh24:mi:ss';

会话已更改。
----模拟不完全恢复到TT丢弃的时间点。

14:30:35 SQL> recover database until time '2007-01-07 14:07:36';
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 6 没有从完备的旧备份中恢复
ORA-01110: 数据文件 6: 'D:ORACLEORADATALABTOOLS.ORA'
-----这里的错误是因为没还原(restore)新化身下该数据文件的备份。也就是说不同化身下的备份不可通用。

14:31:38 SQL> recover database until time '2007-01-07 14:07:36';
完成介质恢复。

14:33:33 SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


14:33:36 SQL> alter database open resetlogs;

数据库已更改。

14:33:55 SQL> @outdo
14:34:10 SQL> conn outdo/dxy@lab
已连接。
14:34:11 SQL> @Tab
14:34:13 SQL> select tname,tabtype from tab order by 1
14:34:13 2 ;

TNAME TABTYPE
------------------------------ -------
TEST TABLE
TT TABLE

14:34:13 SQL> @cnt tt
14:34:20 SQL> set echo off
原值 1: select count(*) cnt from &1
新值 1: select count(*) cnt from tt

CNT
----------
507

----恢复成功。并要重新做数据备份。

---模拟在线日志文件组丢失进行的不完全恢复
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'D:ORACLEORADATALABREDO01.LOG'
----人为的将当前的日志组redo01删除。模拟错误。

SQL> alter database open
2 ;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'D:ORACLEORADATALABSYSTEM01.DBF'


SQL> recover database until cancel;
ORA-00279: 更改 782392 (在 01/07/2007 14:33:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEADMINLABARCHIVEARC00001.001
ORA-00280: 更改 782392 对于线程 1 是按序列 # 1 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
--ENTER
ORA-00279: 更改 796702 (在 01/07/2007 19:26:49 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEADMINLABARCHIVEARC00002.001
ORA-00280: 更改 796702 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'D:ORACLEADMINLABARCHIVEARC00001.001'


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 6 没有从完备的旧备份中恢复
ORA-01110: 数据文件 6: 'D:ORACLEORADATALABTOOLS.ORA'


ORA-01112: 未启动介质恢复
----忘了复原tools.ora数据文件。重新复原。


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: 文件 6 没有从完备的旧备份中恢复
ORA-01110: 数据文件 6: 'D:ORACLEORADATALABTOOLS.ORA'


SQL> recover database until cancel;
ORA-00279: 更改 782392 (在 01/07/2007 14:33:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEADMINLABARCHIVEARC00001.001
ORA-00280: 更改 782392 对于线程 1 是按序列 # 1 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 796702 (在 01/07/2007 19:26:49 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEADMINLABARCHIVEARC00002.001
ORA-00280: 更改 796702 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'D:ORACLEADMINLABARCHIVEARC00001.001'


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;

数据库已更改。

SQL> @outdo
SQL> conn outdo/dxy@lab
已连接。
SQL> @Tab
SQL> select tname,tabtype from tab order by 1
2 ;

TNAME TABTYPE
------------------------------ -------
T3 TABLE
TEST TABLE
TT TABLE

SQL> @cnt t3
SQL> set echo off
原值 1: select count(*) cnt from &1
新值 1: select count(*) cnt from t3

CNT
----------
22335
----数据恢复到了796702这一刻。

--模拟在未归档的情况下,如果重做日志组尚未覆盖的话。也可以用这中不完全恢复来恢复某不小心drop,truncate掉的数据。
SQL> select * from t3;

RN
----------
22331
22332
22333
22334
22335

SQL> @sys
SQL> conn /@lab as sysdba
已连接。
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 0 104857600 1 YES UNUSED 0
2 1 0 104857600 1 YES UNUSED 0
3 1 1 104857600 1 NO CURRENT 796703 07-1月 -07

SQL> alter system switch logfile;

系统已更改。

SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 2 104857600 1 NO CURRENT 838343 07-1月 -07
2 1 0 104857600 1 YES UNUSED 0
3 1 1 104857600 1 NO ACTIVE 796703 07-1月 -07

SQL> truncate table outdo.t3;

表已截掉。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'D:ORACLEORADATALABREDO01.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> recover database until cancel;
ORA-00279: 更改 838009 (在 01/07/2007 19:56:39 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEADMINLABARCHIVEARC00001.001
ORA-00280: 更改 838009 对于线程 1 是按序列 # 1 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
D:oracleoradatalabREDO03.LOG
ORA-00279: 更改 838343 (在 01/07/2007 20:13:56 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEADMINLABARCHIVEARC00002.001
ORA-00280: 更改 838343 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'D:oracleoradatalabREDO03.LOG'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00308: 无法打开存档日志 'D:ORACLEADMINLABARCHIVEARC00002.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

SQL> @outdo
SQL> conn outdo/dxy@lab
已连接。
SQL> @tab
SQL> select tname,tabtype from tab order by 1
2 ;

TNAME TABTYPE
------------------------------ -------
T3 TABLE
TEST TABLE
TT TABLE

SQL> select * from t3;

RN
----------
22331
22332
22333
22334
22335

----from outdo

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

请登录后发表评论 登录
全部评论

注册时间:2009-03-10

  • 博文量
    30
  • 访问量
    775683