📄 备份与恢复测试.txt
字号:
=================================================================================
= 备份与恢复测试 =
=================================================================================
[1] 控制文件损坏(rman和常规恢复)
[1.1] 有老的备份数据备份和控制文件trace
[测试1] --使用trace恢复 shutdown abort
[测试2] --使用trace恢复 正常shutdown
[测试3] --使用控制文件备份来恢复
[测试4] 我们现在模拟备份控制文件,同时备份部分数据文件先于备份
控制文件的数据文件
[测试5]我们现在模拟控制文件损坏,将备份控制文件前,先备份所有数据文件
[测试5.1]我们现在模拟控制文件损坏,有控制文件备份,先于控制文件备份的所有数据文件备份
使用在线日志进行完全恢复
[测试6]那我们看看,有老的数据文件备份,备份控制文件后插
入的数据在shutdown abort后能不能恢复
[测试7]那我们看看,有老的数据文件备份,备份控制文件后插
入的数据在正常shutdown 后能不能恢复
[测试8]那我们看看,有老的数据文件备份,插
入的数据在正常shutdown 后用create controlfile noresetlogs
方法来恢复控制文件,能不能恢复
[1.2] 有RMAN的autobackup,catalog异常
[方法1]
[方法2] --使用带resetlogs的创建控制文件trace
[方法3] 使用noresetlog的trace来恢复
[方法4] 那我们对数据库的数据文件控制文件和
在线日志文件都做备份会需要恢复吗?
[测试5] 我们模拟在线日志损坏,使用备份控制文件,有数据文件的备份的恢复
[1.3] 有RMAN的备份,catalog正常
[1.4] 控制文件损坏,有trace,非活动在
线日志损坏
[方法1] 使用clear group or
[方法2] 使用trace resetlogs
[测试3] 数据文件损坏,控制文件损坏,有trace ,
使用resetlogs,非在线日志损坏
[测试4] 数据文件损坏,控制文件损坏,有trace ,
使用noresetlogs,非在线日志损坏 ,shutdown abort
[1.5] 有trace,活动在线日志损坏
[1.5.1] 有trace,活动在线日志损坏,正常shutdown或是当前的数据文件
[1.5.2] 有trace,活动在线日志损坏,shutdown abort 或是非当前的数据文件
,当前在线日志文件损坏
[测试1] shutdown abort,备份控制文件或者resetlog的trace,
没有数据文件备份,采用强制打开数据库的方法
[测试2] shutdown abort,resetlog的trace,
有数据文件备份,当前在线日志损坏,控制文件损坏,有trace
[测试3] shutdown abort,控制文件损坏,备份控制文件,
当前在线日志损坏,有数据文件备份
[1.5.3] 控制文件损坏,如果trace不是最新的数据库结构,如少了个数据文件
[1.5.4] 控制文件损坏,如果trace不是最新的数据库结构,如少了个只读数据文件
[1.6] 使用备份的控制文件进行恢复
[1.7] 数据文件损坏,且没有备份,没有备份控制文件,
且其他数据文件备份中都是在该数据文件创建后
的备份
[测试1](resetlogs前创建的数据文件),数据文件丢失,没有备份,控制文件损坏,有备份控制文件,但备份控制文件后于该文件重建日期
使用resetlogs打开数据库,所以没有数据文件自创建以来所有的日志,
因为前面的日志被截取了,(所以resetlog后必须要有备份,
除非是resetlogs后创建的数据文件,可以通过create datafile来恢复)
当然如果有resetlogs后的控制文件及相关的数据,也可以完全恢复,参见1.12
[测试2] 控制文件正常,数据文件丢失,数据文件丢失没有备份,
也就说丢失的数据文件创建在该控制文件中的,该控制文件也没有被trace刷新,那控制文件就包含了该数据文件自创建以来的所有信息
[测试3] 控制文件没有丢失,数据文件丢失,数据文件丢失没有备份
[测试4] 控制文件丢失,数据文件丢失,没有备份,有trace,那我们看看为什么trace会造成控制文件的头中数据文件创建的信息被修改
无法实现create datafile功能
[测试5]控制文件没有创建数据文件的起始信息,使用不同trace的方法
[测试6] 数据文件损坏,且没有备份,控制文件使用备份控制文件,且控制文件是在该数据文件创建后的控制文件
[1.8] 数据文件损坏,且没有备份,控制文件使用备份控制文件,且控制文件是在该数据文件创建前的控制文件
参见1.7的测试1
[1.9] 数据文件损坏,且没有备份,控制文件使用备份控制文件,且控制文件是在该数据文件创建后的控制文件
[1.10] 数据文件损坏,且没有备份,没有备份控制文件,且其他数据文件备份中都是在该数据文件创建后的备份
[1.11] 损坏单个控制文件
将好的控制文件覆盖损坏的控制文件
[1.12] 当前控制文件做为备份控制文件恢复,在当前在线日志中有业务数据时的恢复 (通常没有太大意义,只是想做一下resetlogs)
[1.13] 在resetlogs前的RMAN备份如何应用到resetlogs后的
[测试1] 那我们在看看resetlogs前的数据文件控制文件和在线日志都做了备份,
然后resetlogs后的控制文件在线日志都做备份的情况下,是不是能越过resetlogs
[2]. 非归档模式下的恢复(rman和常规恢复)
[测试1] 数据库在非归档模式,数据库打开
[测试2] 数据库在非归档模式,数据库MOUNT,备份整个数据库
[测试3] 数据库在非归档模式,数据库MOUNT,备份表空间
[测试4] 数据库在非归档模式,数据库MOUNT,备份的表空间是常规OFFLINE的
[测试5] 数据库在非归档模式,数据库MOUNT,shutdown abort,备份的表空间
[测试6] 数据库在非归档模式,数据库MOUNT,数据文件丢失,有表空间备份
[测试7] 数据库在归档模式,控制文件损坏,控制文件有备份,使用RMAN恢复
[测试8] 数据库在非归档模式,数据文件损坏,使用RMAN恢复
[测试9] 数据库在非归档模式,数据文件损坏,使用RMAN恢复,
该文件的日志全部还保留在非当前在线日志和当前在线日志中
[测试10] 数据库在非归档模式,数据文件损坏,使用RMAN恢复,
该文件的日志部分由于日志轮转被覆盖了
[3] redo log file损坏(rman和常规恢复)
[测试1] 修改日志组大小及增加日志组成员
[测试2] 非当前非活动的在线日志损坏或当前在线日志损坏,切没有备份数据文件,使用强制打开的方式
在线日志损坏
CLEAR的不同方式
CLEAR LOGFILE
CLEAR LOGFILE UNARCHIVED
CLEAR LOGFILE UNARCHIVED
GROUP ? UNRECOVERABLE DATAFILE;
[测试3] 数据文件损坏,控制文件损坏,有trace ,
使用noresetlogs,非在线日志损坏 ,shutdown abort
[测试4] 在归档模式下没有设置自动归档下,数据库挂起
[测试5] 数据库在非归档模式下,设置了自动归档,当一个事务处理的重做量大于
所有在线日志的大小总和时
[测试6] 数据库在非归档模式下,设置了非自动归档,当一个事务处理的重做量大于
所有在线日志的大小总和时
[4].热备份期间的数据库崩墤(rman和常规恢复)
[5] resetlogs 恢复测试
[6] rman Recovering Datablocks 恢复测试
[7].rman Restoring Datafile Copies to a New Host
[8].表空间的恢复(rman和常规恢复)
[8.1] 非正常关机的情况下,用rman恢复单个数据文件
[8.2] 非正常关机情况下,非RMAN方式用备份的数据文件进行恢复
[8.3] 非正常关机情况下,恢复单独表空间
[8.4] 丢失数据文件,用rman从备份中还原数据文件并恢复tablespace
[8.5] 重建controlfile文件时,丢失所有在线日志,语句少写了表空间的datafile
[8.6] 用rman从备份中恢复system表空间
[9].回滚段恢复
[9.1].正常shutdown,回滚数据文件丢失,
有备份,回滚段恢复
[9.2].shutdown abort(或者使用了别的老的数据文件),
回滚数据文件丢失,有备份,回滚段恢复 ,
数据库没有活动事务
[9.3].shutdown abort(或者使用了别的老的数据文件),
回滚数据文件丢失,有备份,回滚段恢复 ,
数据库有活动事务
[9.4].shutdown abort(或者使用了别的老的数据文件),
回滚数据文件丢失,没有备份,回滚段恢复 ,
数据库有活动事务
[9.5].shutdown abort(或者使用了别的老的数据文件),
回滚数据文件丢失,没有备份,但控制文件有创建
该回撤段数据文件的所有历史日志,回滚段恢复 ,
数据库有活动事务
[9.6].数据库打开时回撤表空间文件
损坏,没有备份
[10]. 数据库基于时间点的不完全恢复
[10.1] 所有数据文件基于时间点的不完全恢复测试
[10.2] 单独表空间数据文件基于时间点的恢复测试
[10.3] 分区表空间数据文件基于时间点的恢复测试
[10.3_1] 分区表空间数据文件基于时间点的恢复测试: 基于时间的不完全恢复
[10.3_2] 分区表空间数据文件基于时间点的恢复测试: 数据文件损坏的恢复
######################################################################################################
# [1] 控制文件损坏(rman和常规恢复) #
######################################################################################################
准备工作
~~~~~~~~
备份
~~~~
C:\Documents and Settings\lifeng.fang>rman nocatalog target "sys/sunsdl"
恢复管理器: 版本9.2.0.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
连接到目标数据库: PDF (DBID=3171861129) --新的ID2334768642
正在使用目标数据库控制文件替代恢复目录
RMAN> configure controlfile autobackup on;
新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
已成功存储新的 RMAN 配置参数
RMAN> configure controlfile autobackup format for device type disk to 'c:\temp\%
F';
新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:\temp\%F';
已成功存储新的 RMAN 配置参数
RMAN>
RMAN> backup database;
启动 backup 于 25-2月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=12 devtype=DISK
分配的通道: ORA_DISK_2
通道 ORA_DISK_2: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00002 name=C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF
输入数据文件 fno=00003 name=C:\ORACLE\ORADATA\PDF\INDX01.DBF
输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\PDF\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 25-2月 -05
通道 ORA_DISK_2: 正在启动 full 数据文件备份集
通道 ORA_DISK_2: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF
输入数据文件 fno=00004 name=C:\ORACLE\ORADATA\PDF\TOOLS01.DBF
通道 ORA_DISK_2: 正在启动段 1 于 25-2月 -05
通道 ORA_DISK_1: 已完成段 1 于 25-2月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\07GDKT8C_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:56
通道 ORA_DISK_2: 已完成段 1 于 25-2月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\08GDKT8C_1_1 comment=NONE
通道 ORA_DISK_2: 备份集已完成, 经过时间:00:00:57
完成 backup 于 25-2月 -05
启动 Control File and SPFILE Autobackup 于 25-2月 -05
段 handle=C:\TEMP\C-3171861129-20050225-00 comment=NONE
完成 Control File and SPFILE Autobackup 于 25-2月 -05
RMAN>
~~~~~~~~~~~
常规备份
~~~~~~~~~~~
备份数据文件cp C:\ORACLE\ORADATA\PDF\* C:\ORACLE\ORADATA\bak
备份控制文件
###################################################
# [1.1] 有老的备份数据备份和控制文件trace
###################################################
SQL> alter session set tracefile_identifier=fanglf
2 ;
会话已更改。
SQL> alter database backup controlfile to trace;
数据库已更改。
SQL> alter database backup controlfile to 'c:\temp\controlfile.bak';
数据库已更改。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们也可以使用RMAN来拷贝备份控制文件
RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';
启动 copy 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 devtype=DISK
通道 ORA_DISK_1: 已复制当前的控制文件
输出文件名=C:\CF.CPY
完成 copy 于 03-3月 -05
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> col name format a50
SQL> select * from v$controlfile;
STATUS NAME
------- --------------------------------------------------
C:\ORACLE\ORADATA\PDF\CONTROL01.CTL
C:\ORACLE\ORADATA\PDF\CONTROL02.CTL
C:\ORACLE\ORADATA\PDF\CONTROL03.CTL <<-此时仍然可以使用
~~~~~~~~~~~~~~~~
模拟控制文件损坏
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用ULTRAEDIT编辑CONTROL01.CTL部分数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> select * from v$controlfile;
STATUS NAME
------- ------------------------------------------------
C:\ORACLE\ORADATA\PDF\CONTROL01.CTL
C:\ORACLE\ORADATA\PDF\CONTROL02.CTL
C:\ORACLE\ORADATA\PDF\CONTROL03.CTL
SQL>
SQL> create table test (a int,v varchar(200));
使用ULTRAEDIT编辑清空CONTROL01.CTL大部分数据
SQL> select * from v$controlfile; <<-出现异常
select * from v$controlfile
*
ERROR 位于第 1 行:
ORA-12571: TNS: 包写入程序失败
~~~~~~~~~~~~~~~~
在alert中显示
~~~~~~~~~~~~~~~~
Fri Feb 25 11:51:56 2005
Errors in file c:\oracle\admin\pdf\bdump\pdf_ckpt_2556.trc:
ORA-00227: corrupt block detected in controlfile: (block 1, # blocks 1)
ORA-00202: controlfile: 'C:\ORACLE\ORADATA\PDF\CONTROL01.CTL'
CKPT: terminating instance due to error 227
Fri Feb 25 11:51:58 2005
Errors in file c:\oracle\admin\pdf\bdump\pdf_pmon_3084.trc:
ORA-00227: corrupt block detected in controlfile: (block , # blocks )
Instance terminated by CKPT, pid = 2556
~~~~~~~~~~~~~~~~
在trace文件中显示
~~~~~~~~~~~~~~~~
Corrupt block relative dba: 0x00000001 (file 0, block 1)
Completely zero block found during control file header read
*** 2005-02-25 11:51:55.000
ksedmp: internal or fatal error
ORA-00202: controlfile: 'C:\ORACLE\ORADATA\PDF\CONTROL01.CTL'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这里我模拟把3个控制文件都破坏
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
启动数据库时提示
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00205: ?????????????????????
恢复实例
###################################################
# [测试1] --使用trace恢复 shutdown abort
###################################################
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "PDF" NORESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 5
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG' SIZE 100M,
10 GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG' SIZE 100M,
11 GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',
15 'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',
16 'C:\ORACLE\ORADATA\PDF\INDX01.DBF',
17 'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',
18 'C:\ORACLE\ORADATA\PDF\USERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;
控制文件已创建
SQL> alter database open;
alter database open
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -