第二章. 数据库恢复案例测试环境
2.1 数据库环境
以下的所有案例都是通过测试经过,环境为:
OS:Windows 2000 Server
DB:Oracle 816
DBNAME:TEST
数据文件:
SQL> select file#,status,enabled,name from v$datafile;
FILE# STATUS ENABLED NAME
---------- ------- ---------- --------------------------------------------------------------------------------
1 SYSTEM READ WRITE D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF
2 ONLINE READ WRITE D:\ORACLE\ORADATA\TEST\RBS01.DBF
3 ONLINE READ WRITE D:\ORACLE\ORADATA\TEST\USERS01.DBF
4 ONLINE READ WRITE D:\ORACLE\ORADATA\TEST\TEMP01.DBF
5 ONLINE READ WRITE D:\ORACLE\ORADATA\TEST\TOOLS01.DBF
6 ONLINE READ WRITE D:\ORACLE\ORADATA\TEST\INDX01.DBF
控制文件:
SQL> select * from v$controlfile;
STATUS NAME
------- --------------------------------------------------------------------------------
D:\ORACLE\ORADATA\TEST\CONTROL01.CTL
D:\ORACLE\ORADATA\TEST\CONTROL02.CTL
D:\ORACLE\ORADATA\TEST\CONTROL03.CTL
联机日志:
SQL> select * from v$logfile;
GROUP# STATUS MEMBER
---------- ------- --------------------------------------------------------------------------------
1 STALE D:\ORACLE\ORADATA\TEST\REDO01.LOG
2 D:\ORACLE\ORADATA\TEST\REDO02.LOG
3 STALE D:\ORACLE\ORADATA\TEST\REDO03.LOG
2.2 数据库备份脚本
冷备份脚本
rem script:coldbak.sql
rem creater:chenjiping
rem date:5.8.2003
rem desc:offline full backup database
--connect database
connect internal/password;
--shutdown database
shutdown immediate;
--Copy Data file
!xcopy d:\oracle\oradata\test\*.dbf d:\database/H/R;
--Copy Control file
!xcopy d:\oracle\oradata\test\*.ctl d:\database/H/R;
--Copy Log file
!xcopy d:\oracle\oradata\test\*.log d:\database/H/R;
--startup database
startup;
说明:
1、以上脚本在数据库关闭状态下备份数据库所有的数据文件,联机日志,控制文件(在一个目录下),如果成功备份,所有文件是一致的。
2、没有备份参数文件,参数文件可以另外备份,没有必要每次都备份,只需要在改变设置后备份一次。
3、如果以上命令没有成功依次执行,那么备份将是无效的,如连接数据库不成功,那么肯定关闭数据库也不成功,那么备份则无效
4、冷备份建议下人工干预下执行。
数据库OS热全备份脚本
rem script:hotbak.sql
rem creater:chenjiping
rem date:5.8.2003
rem desc:backup all database datafile in archive
--connect database
connect internal/password;
--archive
alter system archive log current;
--start
alter tablespace system begin backup;
!xcopy d:\oracle\oradata\test\system01.dbf d:\databak/H/R;
alter tablespace system end backup;
alter tablespace rbs begin backup;
!xcopy d:\oracle\oradata\test\rbs01.dbf d:\databak/H/R;
alter tablespace rbs end backup;
alter tablespace users begin backup;
!xcopy d:\oracle\oradata\test\users01.dbf d:\databak/H/R;
alter tablespace users end backup;
alter tablespace tools begin backup;
!xcopy d:\oracle\oradata\test\tools01.dbf d:\databak/H/R;
alter tablespace tools end backup;
alter tablespace indx begin backup;
!xcopy d:\oracle\oradata\test\indx01.dbf d:\databak/H/R;
alter tablespace indx end backup;
--end
--bak control file
--binary
alter database backup controlfile to 'd:\databak\controlbinbak.000';
--ascii
alter database backup controlfile to trace;
alter system archive log current;
说明:
1、热备份必须在数据库归档方式下才可以运行
2、以上脚本可以在数据库运行状态下备份数据库所有的数据文件(除了临时数据文件),没有必要备份联机日志。
3、归档日志至少需要一次完整备份之后的所有日志。
4、如果以上命令没有成功依次执行,那么备份也是无效的,如连接数据库不成功,那么备份则无效
RMAN备份只讲叙有恢复目录的情况,如果没有恢复目录,情形大致相似。以下是RMAN的热备份全备份的脚本:
# script:bakup.rcv
# creater:chenjiping
# date:5.8.2003
# desc:backup all database datafile in archive with rman
# connect database
connect rcvcat rman/rman@back;
connect target internal/virpure;
# start backup database
run{
allocate channel c1 type disk;
backup full tag 'dbfull' format 'd:\backup\full%u_%s_%p' database
include current controlfile;
sql 'alter system archive log current';
release channel c1;
}
# end
说明:
1、 数据库必须运行在归档模式下
2、 RMAN将自动备份数据文件,运行可靠
3、 归档日志另外备份处理,但至少需要保存一次备份来的日志