Oracle备份恢复(一)

Oracle备份恢复(一)

  • 备份恢复的两个重要术语(**MTBF和MTTR**)
    • 一、MTBF(Mean Time Between Failures)即平均故障间隔(时间/次)
    • 二、MTTR(Mean Time To Recover)(小时/次)平均修理时间
  • 备份恢复DBA需要做什么?
  • 备份恢复DBA需要做那些考虑?
    • 技术考虑
    • 技术要求
    • 从灾难恢复考虑
    • Oracle的物理结构
    • oracle的检查点
    • DBA备份
      • 1.基于表空间的热备
      • 2. 基于数据库的热备
      • 3. 控制文件的热备
      • 4. 参数文件的热备
      • 5. 临时表空间的数据文件、日志文件不需要备份
    • 热备脚本

备份恢复的两个重要术语(MTBF和MTTR)

一、MTBF(Mean Time Between Failures)即平均故障间隔(时间/次)

计算公式为:MTBF(时间/次)=总运行时间/总故障次数

MTBF表示的是某设备故障发生期间的时间平均值

例:某设备的使用情形如下,MTBF是多少?

100小时运行-3小时修理-120小时运行-2小时修理-140小时运行-4小时修理

MTBF=(100+120+140)/3=120(时间/次)

实际应用中将此公式稍微变换一下,就可有效地用来评价工装的状态了。

“ 用MTBF=产量/修理次数”,简单理解就是MTBF表示的是修一次工装可做多少个产品,从公式上可以看出MTBF越大则表示工装的状态越好。

有了反映工装状态的指标,就可以为我们的行动提供依据了。我们每周就可以挑出MTBF小于一定标准的工装进行检修,使总体MTBF保持一个缴高的水平。

二、MTTR(Mean Time To Recover)(小时/次)平均修理时间

计算公式为:MTTR(时间/次)=总修复时间/故障次数

例:某设备的使用经过如下,MTTR是多少?

100小时运行-3小时修理-120小时运行-2小时修理-140小时运行-4小时修理

MTTR=(3+2+4)/3=3(小时/次)

备份恢复DBA需要做什么?

为了缩短MTTR、延长MTBFDBA平时可以做的事情:
◎ 在网络层需要做冗余,比如双线路、双交换机、双网卡、双负载均衡器等
◎ 应用服务器做冗余
◎ 硬件物理级做冗余,如RAID1,RAID5等,10G后推出了ASM,自动存储管理
◎ 逻辑级冗余
⊕ 控制文件镜像,将文件存放到不同磁盘控制器下的不同磁盘上当某个镜像控制文件损坏时,对于控制文件读和写都会挂起数据库。
⊕ 日志文件镜像,将文件存放到不同磁盘控制器下的不同磁盘上,日志文件镜像中某一个日志文件成员介质损坏,不影响数据库正常运行,但会报错误信息到告警日志。其实镜像还对读的性能有好处,但是对写的性能会有坏处
⊕ 数据文件
对于数据文件介质故障,读的时候会在告警日志报一个操作系统错误,在写的时候要分如下情况:
◆ 如果是写SYSTEM文件或者包含活动回滚段的数据文件失败,实例将被关闭
◆ 如果写其它文件失败,要分是否归档模式
o 归档模式下:读的时候只是抛错,写的时候发现文件写错误,会自动将该文件设置成OFFLINE
o 非归档模式下:DBWR写失败,实例会DOWN,因为不能直接把文件OFFLINE
⊕ 10G的回收站支持FLASHBACK DROP
⊙ 测试备份
DBA 可以通过制定计划定期测试备份的有效性,来确保他们的策略可以缩短MTTR 并延长MTBF。有效的恢复取决于有效的备份

备份恢复DBA需要做那些考虑?

技术考虑

⊙ 资源:硬件、软件、人力和时间
⊙ 操作系统文件的物理镜像
⊙ 数据库中各对象的逻辑镜像
⊙ 数据库配置
⊙ 事务处理量,这将影响需要备份的频率

技术要求

⊙ 你有多少数据?
⊙ 你的计算机的能力及容量是否足以支持备份?
⊙ 数据是否易于重新创建?比如索引
⊙ 你是否可以将数据从纯数据文件重新加载到数据库?
⊙ 数据库配置是否能支持从不同类型故障中复原?

从灾难恢复考虑

⊙ 自然灾害
你的数据可能非常重要,以至于你必须确保甚至在系统完全瘫痪的情况下也能够复原
自然灾害和其它问题可能影响你的数据的可用性,因此在创建灾难恢复计划时应考F虑这些问题,在选择备份和恢复策略时,应考虑以下一些问题
⊙ 在发生以下严重灾难时,你的业务会受到什么样的影响
◎ 水灾、火灾、地震或飓风
◎ 存储硬件或软件故障
⊙ 备份是否存储在其它地方?如磁带,磁盘,CDROM,闪存等
⊙ 容灾考虑的是同楼、同区、同城、跨城、跨国
⊙ 容灾考虑网络带宽,或者其它灾备传输途径,比如人工快递

Oracle的物理结构

Oracle备份恢复(一)_第1张图片
Oracle 实例
Oracle的 进程结构,内存区域和后台进程合称为一个Oracle实例
◎ SGA
◎ 后台进程(即PMON、SMON、DBWn、LGWR 和CKPT)组成
◎LGWR
⊙ DBA 可以使用ALTER SYSTEM SWITCH LOGFILE 命令强制进行日志切换
⊙ ALTER SYSTEM ARCHIVE LOG ALL 会归档除了CURRENT组外的所有未归档的日志
⊙ ALTER SYSTEM ARCHIVE LOG CURRENT

数据文件
每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:
一个数据文件仅与一个数据库联系。
一旦建立,数据文件不能改变大小.
一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。
数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。

日志文件
每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。
日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。
日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。Oralce两种日志文件类型:
1、联机日志文件 这是Oracle用来循环记录数据库改变的操作系统文件
2、归档日志文件 这是指为避免联机日志文件重写时丢失重复数据而对联机日志文件所做的备份

控制文件
每一ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:
数据库名;
数据库数据文件和日志文件的名字和位置;
数据库建立日期。
为了安全起见,允许控制文件被镜象。
每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。

参数文件
参数文件记录了Oracle数据库的基本参数信息,主要包括数据库名、控制文件所在路径、进程等。与旧版本的初始化参数文件INITsid.ora不同,在Oracle10g及以上还可以使用二进进制服务器参数文件,并且该服务器参数文件在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,sid为所创建的数据库实例名。

oracle的检查点

⊙ 完全检查点
当关闭数据库shutdown normal、immediate 、transactional(异常关闭除外) 或通过ALTER SYSTEM CHECKPOINTA 命令手动启动检查点操作时,将执行称为完全检查点的过程在完全检查点操作中,DBWn 将数据库缓冲区高速缓存中的所有脏缓冲区数据写入数据文件,所以完全检查点,要写的数据最多## 如何改变文本的样式

⊙ 增量检查点
增量检查点(跟快速启动检查点相关)是持续活动的检查点,是一种心跳机制,每3秒检查一次。DBWn 定期从检查点队列写出缓冲区数据,从而不断推进内存中的增量检查点操作

⊙ 部分检查点
ALTER TABLESPACE BEGIN BACKUP 命令仅对缓冲区高速缓存中属于该表空间的脏缓冲区启动部分检查点操作
ALTER TABLESPACE tablespace OFFLINE NORMAL 命令也可用于启动部分检查点操作

⊙ 数据缓冲区
o redo buffer
o logfile
o undofile
o undo的脏缓存
一定要先写日志BUFFER,再修改脏数据块
先写LOGFILE,再写DATAFILE。
先LGWR,再DBWR,这个顺序不能错

DBA备份

1.基于表空间的热备

–查询表空间的名字和状态

SQL> select file_id,tablespace_name,status from dba_data_files;

FILE_ID TABLESPACE_NAME STATUS


 4 USERS              AVAILABLE
 3 UNDOTBS1              AVAILABLE
 2 SYSAUX              AVAILABLE
 1 SYSTEM              AVAILABLE
 5 COSTCTL_TBS              AVAILABLE
 6 DEV_DATA              AVAILABLE
 7 PDMS_DATA              AVAILABLE

已选择7行。

–开始备份,将会

SQL> alter tablespace PDMS_DATA begin backup;

表空间已更改。
  --拷贝数据文件到指定的备份磁盘上

SQL> host cp /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf /u03/backup/hotbak
  --查看所有数据文件的备份状态

SQL> select * from v$backup;

 FILE# STATUS         CHANGE# TIME

 1 NOT ACTIVE               0
 2 NOT ACTIVE               0
 3 NOT ACTIVE               0
 4 NOT ACTIVE               0
 5 NOT ACTIVE               0
 6 NOT ACTIVE               0
     7 ACTIVE               12657642 15-12月-16

–将表空间重新设置为非备份状态

SQL> alter tablespace PDMS_DATA end backup;

表空间已更改。
  --查看备份状态

SQL> select * from v$backup;

 FILE# STATUS         CHANGE# TIME

 1 NOT ACTIVE               0
 2 NOT ACTIVE               0
 3 NOT ACTIVE               0
 4 NOT ACTIVE               0
 5 NOT ACTIVE               0
 6 NOT ACTIVE               0
     7 NOT ACTIVE           12657642 15-12月-16

已选择7行。

2. 基于数据库的热备

alter database begin backup;

  拷贝所有的datafile到备份目录

  alter database end backup;

3. 控制文件的热备

alter database backup controlfile to '' [reuse];          --控制文件的完整备份
alter database backup controlfile to trace as ''  --用于创建控制文件的语句,丢失了部分信息,可以直接查看

SQL> alter database backup controlfile to ‘/u03/backup/hotbak/control01.ctl’;

数据库已更改。

SQL> alter database backup controlfile to trace as ‘/u03/backup/hotbak/control02.ctl’;

数据库已更改。

4. 参数文件的热备

create pfile from spfile ;

  create pfile = '' from spfile;

SQL> create pfile = ‘/u03/backup/hotbak/initdbsrv1.ora’ from spfile;

文件已创建。

5. 临时表空间的数据文件、日志文件不需要备份

热备脚本

基于表空间的热备(推荐使用这种方式)
vim hotbak.sql

复制代码
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = ‘/u03/backup/hotbak’
define script = ‘/tmp/hotbak_tb.sql’
ho rm &script
ho rm &dir/*
spool &script
select ‘alter tablespace ‘|| tablespace_name ||’ begin backup ;’ ||
chr(10)||'ho cp ’ || file_name || ’ &dir ’ ||
chr(10)||'alter tablespace ‘|| tablespace_name || ’ end backup;’
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to ‘&dir/controlbak.ctl’;
create pfile = ‘&dir/initdbsrv1.ora’ from spfile;
复制代码
其中char(10)表示换行,红色部分需要自行修改

SQL> start hotbak.sql; --执行该脚本即可对数据库基于表空间进行热备

基于数据库(数据文件)的热备
vim hotbak.sql

复制代码
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = ‘/u03/backup/hotbak’
define script = ‘/tmp/hotbak_tb.sql’
ho rm &script
ho rm &dir/*
spool &script
select ‘alter tablespace ‘|| tablespace_name ||’ begin backup ;’ ||
chr(10)||'ho cp ’ || file_name || ’ &dir ’ ||
chr(10)||'alter tablespace ‘|| tablespace_name || ’ end backup;’
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to ‘&dir/controlbak.ctl’;
create pfile = ‘&dir/initdbsrv1.ora’ from spfile;

你可能感兴趣的:(Oracle,oracle,备份)