数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle备份与恢复案例一


发布日期:2018年09月30日
 
Oracle备份与恢复案例一

理解什么是数据库恢复

当我们使用一个数据库时总希望数据库的内容是可靠的正确的但由于计算机系统的故障(硬件故障软件故障网络故障进程故障和系统故障)影响数据库系统的操作影响数据库中数据的正确性甚至破坏数据库使数据库中全部或部分数据丢失因此当发生上述故障后希望能重构这个完整的数据库该处理称为数据库恢复恢复过程大致可以分为复原(Restore)与恢复(Recover)过程

数据库恢复可以分为以下两类

实例故障的一致性恢复

当实例意外地(如掉电后台进程故障等)或预料地(发出SHUTDOUM ABORT语句)中止时出现实例故障此时需要实例恢复实例恢复将数据库恢复到故障之前的事务一致状态如果在在线后备发现实例故障则需介质恢复在其它情况Oracle在下次数据库起动时(对新实例装配和打开)自动地执行实例恢复如果需要从装配状态变为打开状态自动地激发实例恢复由下列处理

) 为了解恢复数据文件中没有记录的数据进行向前滚该数据记录在在线日志

包括对回滚段的内容恢复

) 回滚未提交的事务按步重新生成回滚段所指定的操作

) 释放在故障时正在处理事务所持有的资源

) 解决在故障时正经历一阶段提交的任何悬而未决的分布事务

介质故障或文件错误的不一致恢复

介质故障是当一个文件一个文件的部分或磁盘不能读或不能写时出现的故障文件错误一般指意外的错误导致文件被删除或意外事故导致文件的不一致这种状态下的数据库都是不一致的需要DBA手工来进行数据库的恢复这种恢复有两种形式决定于数据库运行的归档方式和备份方式

) 完全介质恢复可恢复全部丢失的修改一般情况下需要有数据库的备份且数据库运行在归档状态下并且有可用归档日志时才可能对于不同类型的错误有不同类型的完全恢复可使用其决定于毁坏文件和数据库的可用性

) 不完全介质恢复是在完全介质恢复不可能或不要求时进行的介质恢复重构受损的数据库使其恢复介质故障前或用户出错之前的一个事务一致性状态不完全介质恢复有不同类型的使用决定于需要不完全介质恢复的情况有下列类型基于撤消基于时间和基于修改的不完全恢复

基于撤消(CANCEL)恢复在某种情况不完全介质恢复必须被控制DBA可撤消在指定点的操作基于撤消的恢复地在一个或多个日志组(在线的或归档的)已被介质故障所破坏不能用于恢复过程时使用所以介质恢复必须控制以致在使用最近的未损的日志组于数据文件后中止恢复操作

基于时间(TIME)和基于修改(SCN)的恢复如果DBA希望恢复到过去的某个指定点是一种理想的不完全介质恢复一般发生在恢复到某个特定操作之前恢复到如意外删除某个数据表之前

第二章 数据库恢复案例测试环境

数据库环境

以下的所有案例都是通过测试经过环境为

OSWindows Server

DBOracle

DBNAMETEST

数据文件

SQL> select file#statusenabledname from v$datafile;

FILE# STATUSENABLEDNAME

SYSTEMREAD WRITE D:\Oracle\ORADATA\TEST\SYSTEMDBF

ONLINEREAD WRITE D:\Oracle\ORADATA\TEST\RBSDBF

ONLINEREAD WRITE D:\Oracle\ORADATA\TEST\USERSDBF

ONLINEREAD WRITE D:\Oracle\ORADATA\TEST\TEMPDBF

ONLINEREAD WRITE D:\Oracle\ORADATA\TEST\TOOLSDBF

ONLINEREAD WRITE D:\Oracle\ORADATA\TEST\INDXDBF

控制文件

SQL> select * from v$controlfile;

STATUSNAME

D:\Oracle\ORADATA\TEST\CONTROLCTL

D:\Oracle\ORADATA\TEST\CONTROLCTL

D:\Oracle\ORADATA\TEST\CONTROLCTL

联机日志

SQL> select * from v$logfile;

GROUP# STATUSMEMBER

STALED:\Oracle\ORADATA\TEST\REDOLOG

D:\Oracle\ORADATA\TEST\REDOLOG

STALED:\Oracle\ORADATA\TEST\REDOLOG

数据库备份脚本

冷备份脚本:

rem script:coldbaksql

rem creater:chenjiping

rem date:

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;

说明

以上脚本在数据库关闭状态下备份数据库所有的数据文件联机日志控制文件(在一个目

录下)如果成功备份所有文件是一致的;

没有备份参数文件参数文件可以另外备份没有必要每次都备份只需要在改变设置后备份一次;

如果以上命令没有成功依次执行那么备份将是无效的如连接数据库不成功那么肯定关闭数据库也不成功那么备份则无效;

冷备份建议下人工干预下执行

数据库OS热全备份脚本

rem script:hotbaksql

rem creater:chenjiping

rem date:

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\systemdbf d:\databak/H/R;

alter tablespace system end backup;

alter tablespace rbs begin backup;

!xcopy d:\Oracle\oradata\test\rbsdbf d:\databak/H/R;

alter tablespace rbs end backup;

alter tablespace users begin backup;

!xcopy d:\Oracle\oradata\test\usersdbf d:\databak/H/R;

alter tablespace users end backup;

alter tablespace tools begin backup;

!xcopy d:\Oracle\oradata\test\toolsdbf d:\databak/H/R;

alter tablespace tools end backup;

alter tablespace indx begin backup;

!xcopy d:\Oracle\oradata\test\indxdbf d:\databak/H/R;

alter tablespace indx end backup;

end

bak control file

binary

alter database backup controlfile to d:\databak\controlbinbak;

ascii

alter database backup controlfile to trace;

alter system archive log current;

说明

热备份必须在数据库归档方式下才可以运行

以上脚本可以在数据库运行状态下备份数据库所有的数据文件(除了临时数据文件)没有必要备份联机日志

归档日志至少需要一次完整备份之后的所有日志

如果以上命令没有成功依次执行那么备份也是无效的如连接数据库不成功那么备份则无效

RMAN备份只讲叙有恢复目录的情况如果没有恢复目录情形大致相似以下是RMAN的热备份全备份的脚本

# script:bakuprcv

# creater:chenjiping

# date:

# 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 c 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 c;

}

# end

上一篇:HierarchicalqueryOracle分级查询

下一篇:ORACLE的数据字典用途实例