Oracle备份与恢复
数据库备份与恢复是数据库管理员必须掌握的。没有任何系统能免遭硬盘物理损坏、粗心用户的错误操作、或一些可能会威胁到存储数据的潜在灾难的侵袭。为了能够最大限度地恢复数据库数据,保证数据库的安全运行,应该选择最合理的备份方法来防止各种故障所导致的用户数据丢失,本次主要介绍三种备份恢复技术,即RMAN技术、数据泵技术及闪回技术。
- 备份与恢复概述
- 需要备份的原因
现实工作中有很多情况都可能造成数据丢失,造成数据丢失的主要因素如下。
- 介质故障:磁盘损坏、磁头碰撞,瞬时强磁场干扰
- 用户的错误操作
- 服务器的彻底崩溃
- 计算机病毒
- 不可预料的因素:自然灾害、电源故障、盗窃
上面是一些可能的故障原因,根据原因可以将oracle中的故障分为以下4种类型。
- 语句故障
语句故障时在执行sql语句过程中发生的逻辑故障。例如:向表中插入违反约束的无效数据,或者表空间没有空间了导致无法插入数据等。这时,应用人员或者DBA根据情况进行相应处理及可。
- 用户进程故障
当用户程序出错而无法访问oracle数据库时,就会发生用户进程故障,原因是异常断开连接或终止进程,如果网络不通,客户端计算机以外重新启动,这些故障会导致用户进程与服务器的连接意外终止。
用户进程故障只会导致当前用户无法正常操作数据库,但不会影响其他用户进程。当用户进程出现故障时,进程监控程序(PMON)会自动执行进程恢复。PMON是oracle的后台进程,用于检测与用户进程失去连接的服务器进程。PMON会通过回滚事务来处理故障,还将释放进程当前占用的资源。
- 实例故障
当oracle的数据库实例由于硬件故障或软件问题而无法继续运行时,就会发生实例故障。硬件问题包括意外断电,而软件问题可能是服务器操作系统崩溃。
当重新启动数据库时,如果发现实例故障,oracle会自动完成实例恢复。实例恢复将数据库恢复到与故障之前的事务一致的状态,oracle会自动回滚未提交的数据。
- 介质故障
介质故障是当一个数据库文件、文件的部分或磁盘不能读或不能写时出现的故障。例如:硬盘磁头损坏会导致而数据库文件完全损坏。要修复由于介质故障引起的数据库文件损坏,需要使用介质恢复。
- 备份与恢复的定义及分类
- 备份的定义及分类
备份就是把数据库复制到转储设备的过程。其中转储设备是指用于放置数据库副本的磁带或磁盘。从不同的角度分类如下:
- 从物理与逻辑角度分类
从物理与逻辑角度分,备份可以分为物理备份和逻辑备份。
- 物理备份:
对数据库操作系统的物理文件(如数据文件、控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者对正以归档日志方式运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。
- 逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP、数据泵EXPDP、数据库闪回技术及第三方工具,都可以进行数据库的逻辑备份。
- 从数据库的备份策略角度分类
- 完全备份:
每次对数据进行完整的备份。当发生数据丢失的灾难情况时,完全备份无须依赖其他信息,即可实现100%数据恢复,其恢复时间最短且操作最方便。
- 增量备份:
只有那些在上次完全备份或者增量备份后被修改的文件才会备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖之前的备份记录,出问题的风险较大。
- 差异备份:
备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据库时间较短,因此只需要两份数据(最后一次完全备份和最后一次差异备份),缺点是每次备份需要的时间较长。
- 恢复的定义及分类
恢复就是发生故障后,利用已备份的数据或控制文件,重新建立一个完整的数据库。恢复分为以下两种类型。
- 实例恢复:当oracle实例出现失败后,oracle自动进行的恢复。
- 介质恢复:当存放数据库的介质出现故障时所做的恢复。介质恢复又分为完全恢复和不完全恢复。
完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份,并用全部的重做日志做到的。
不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选型重设联机重做日志。
- 使用RMAN工具
RMAN(recovery manager)是oracle的一个重要工具,用于备份和恢复数据库文件、归档日志和控制文件。也可以用来执行完全或不完全的数据库恢复。RMAN有3种不同的用户接口:命令行方式,GUI方式(集成在OEM中的备份管理器)、api方式(用于集成到第三方的备份软件中)。它具有如下优点:
- 支持在线热备份
- 支持多级增量备份
- 支持并行备份、恢复
- 减少所需要的备份量
- 备份、恢复使用简单
RMAN有丰富的特性集。随着oracle新版本的发布,RMAN特性也不断增强,使得RMAN几乎在任何情况下都可以备份和恢复数据库。其中很多的新特性都是针对日常工作中所遇到的问题和困难开发的。
- RMAN组件
- target database(目标数据库)
目标数据库就是需要RMAN对其进行备份与恢复的数据库。RMAN可以备份数据文件、控制文件、归档日志文件、spfile。
- server session(服务器会话)
RMAN启动数据库上的oracle服务器进程,并建立一个与目标数据库的会话。由目标数据库上的服务器进程进行备份、还原、恢复的实际操作。
3)RMAN repository(RMAN资料库)
RMAN使用过程中会用到的控制信息,是一些关于备份、归档日志及RMAN活动的元数据。
4)recovery catalog(恢复目录)
恢复目录是建立在RMAN恢复目录数据库上的一种schema对象,用于保存RMAN资料库数据。
恢复目录是一个可选的组件。RMAN会将资料库数据记录在目标数据库的控制文件中,但这样不够安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。所以建议在单独的一个数据中建立恢复目录另外保存一份资料库数据。
对于
对于大部分中等环境的企业环境,将RMAN备份信息存储在恢复目录数据库中,而不是存储在目标数据库的控制文件中,这样能够发挥RMAN工具的全部功能,此外,RMAN的很多高级功能也只有在创建了恢复目录的环境下才被支持。
MML(媒体管理库)
MML(media management layer)是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理,如果你要想直接通过RMAN备份到磁带上,就必须配置媒体管理层,媒体管理层的工具和RMAN共同完成备份与恢复。
快闪恢复区
快闪恢复区是oracle数据库用于保存所有与恢复相关的文件的默认磁盘位置。这些相关文件包括归档日志、RMAN备份、控制文件自动备份、复用的控制文件和重做日志副本及闪回日志文件。
辅助数据库
在正常使用时,RMAN会与目标数据库一起使用,如果创建了恢复目录数据库,那么也会与恢复目录数据库一起使用。在某些情况下,希望创建辅助数据库,辅助数据库是使用RMAN从目标数据库的备份中创建新的数据库。辅助数据库能被创建作为备用数
创建恢复目录
据库使用。在产品数据库发生灾难时,能够在不丢失任何数据及停机时间最短的情况下切换至备用数据库。
恢复目录存在于RMAN的目录数据库中,类似于标准的数据库目录,主要包含如下几个部分的信息:
- 备份和恢复信息,可以是多个目标数据库
- RMAN脚本,可以存储供重复使用
- 关于数据文件和日志文件的本分信息
- 关于目标数据库的表空间和数据文件的信息
创建恢复目录
- 创建恢复目录数据库
create tablespace cc datafile '/opt/oracle/oradata/cc.ora'
size 20M autoextend on next 5m maxsize unlimited
- 在恢复目录数据库中创建RMAN 用户并授权
create user ydw identified by oracle default tablespace cc
temporary tablespace temp
grant connect,resource to ydw
grant recovery_catalog_owner to ydw
在恢复目录数据库中创建恢复目录
- 注册目标数据库到恢复目录
登录目标数据库,如果要对目标数据库进行注册,可以按照以下操作。
至此,完成了目标数据库在恢复目录中的注册操作,此时就可以使用RMAN的恢复目录对目标数据库进行备份和恢复操作。
- 通道分配
使用RMAN进行备份和恢复操作时,必须进行通道的分配,一个通道是RMAN和目标数据库之间的一个连接,通道指定了某种类型的设备用于备份和恢复,RMAN可以使用的通道设备包括磁盘与磁带两种。
- 自动通道配置
使用CONFIGURE命令配置自动通道。
- 手动通道配置
在RUN块中使用ALLOCATE CHANNEL手动分配通道。
例如:指定3个磁盘通道,分别是ch1、ch2和ch3。
显示通道配置参数
- 备份与恢复的相关概念与操作
- 备份集与备份片
备份集:备份集是第一次备份的集合,它包含本次备份的所有备份片,以oracle专有的格式保存,是一个逻辑数据的集合。
备份片:一个备份集由若干个备份片组成,每个备份片是一个单独的输出文件,一个备份片的大小是有限制的,它的大小不能大于文件系统所支持的文件长度的最大值。
- 配置备份集文件的格式
使用BACKUP命令进行备份时,需要明确备份文件的存储路径及文件名称格式。其路径和格式可以使用FORMAT参数进行统一设置。FORMAT格式由两部分组合,即存储路径和文件名称。
如果没有使用FORMAT指定存储路径和文件名称格式,则默认情况下BACKUP所产生的备份集将存储在快闪恢复区中,RMAN自动使用%U来确保文件名称不会重复。
FORMAT命令格式如下:
FORMAT ‘格式字符串’
其中格式字符串的文件名称部分可以使用替换变量,例如:FORMAT ‘/backup/rmanback/%U’
常用的替换变量如下:
%c:备份片的拷贝数
%d:数据库名称
%D:位于该月中的第几天(DD)
%M:位于该年中的第几月(MM)
%F:一个基于DBID的唯一的名称,它的形式为C-||||||-YYYYMMDD-QQ。其中||||||为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列。
%n:数据库名称,向右填补到最大8个字符
%u:一个8个字符的名称,它是根据备份集个数与创建时间信息成成的。
%p:该备份集的备份片号,从1开始到创建的文件数
%U:系统生成的一个唯一文件名,对于备份片来说,它的含义相当于%u_%p_%c。
%s:备份集的号
%t:备份集时间戳
%T:年月日格式(YYYYMMDD)
- 备份与恢复命令
- BACKUP命令用于备份数据库文件,可以将多个文件、表空间,整个数据库以备份集形式备份到磁盘或磁带上。在RUN命令外使用BACKUP命令,会自动使用自动通道;在RUN命令内使用BACKUP命令,如果定义了手动通道,则优先使用手动定义通道。
- 使用RMAN备份的数据库也只能使用RMAN提供的恢复命令进行恢复。RMAN的恢复目录中存储了目标数据库的备份信息。RMAN根据恢复目录中存储的信息,自动将数据库同步恢复到某一个数据一致的状态。
RMAN恢复数据库时用到两个命令,即RESTORE和RECOVER。RESOTRE命令将备份数据恢复到指定的目录,RECOVER命令对数据库实施同步恢复。
- RESOTRE命令:由于备份集中的备份片是以专有的RMAN格式存储的,需要使用RESTORE命令进行重建,重建的结果是自动产生目标数据库的物理文件结构。
- RECOVER命令:负责把归档日志文件用于重建的数据文件,来完成数据库的同步恢复。在执行RECOVER命令时,RMAN需要读取归档日志,如果没有归档日志,或者数据库运行在非归档模式下,则恢复过程会报错。
案例:在归档方式下备份与恢复
要用RMAN进行联机备份操作。数据库就必须位于归档模式。恢复目录必须打开,目标数据库进程必须启动,数据库已经加载或者打开。
- 备份和恢复整个数据库
查看当前数据模式为非归档模式(注意每个命令后面一个空格)
或select name,log_mode from v$database;
修改模式为归档模式
备份和恢复整个数据库,自动分配通道,FORMAT默认使用%U,备份集存储在数据库快闪恢复区内,备份文件包括数据文件,控制文件,重做日志文件和参数文件。
查看快闪恢复区,发现备份成功了
如果还要包含归档日志文件,则要加上plus archivelog关键字,delete input的意思是在备份完成后,删除archivelog文件。
通过自动分配通道,通过FORMAT制定具体的路径和格式
首先建立备份目录:
设置目录权限并备份
也可以手动分配通道,备份数据库
恢复整个数据库(数据库要在mount状态下执行)
删除system01.dbf
再次开启数据库实例
此时数据库无法启动了,因为删除了system01.dbf
使用sys连接RMAN
重建数据库物理文件。
同步恢复。
打开数据库
system01.dbf表空间已经被恢复了
- 备份和恢复表空间
表空间users备份:
备份多个表空间
在RUN命令中备份表空间
如果只丢失了特定的表空间的数据文件,那么可以选择只恢复这个表空间,而不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline
模拟删除表空间
恢复表空间
查看表空间文件已经恢复了
- 数据文件的备份与恢复
查看数据文件
备份数据文件users01.dbf(备份和恢复的时候可以指定文件号,也可以指定文件名)
查看数据文件
删除数据文件user01.dbf
对数据文件或表空间做恢复的时候数据文件和表空间一定要处于offline状态, 数据文件丢失了,但数据库实例还可以用,
此时数据文件4的状态为recover
恢复数据文件
将数据文件datafile 2处于online状态
查看数据文件的状态,已经变成online状态了
或者使用run命令恢复,命令如下:
先删除user01.dbf
开始恢复:
查看文件已经恢复。
补充自动备份:
1)生成脚本文件,如backup.rcv
假定文件内容如下:
$>cat backup.rcv
connect target sys/password rcvcat rman/rman@localname;
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input;
release channel c1;
release channel c2;
release channel c3;
}
2)生成执行文件
在windows上生成backup_archive.bat,内容包括
rman cmdfile = backup.rcv
在unix下生成 backup_archive.sh,内容包括
/oracle/ramn/rman cmdfile = backup.rcv
3)加入调度
在windows中用任务计划向导即可,或使用at命令。
在unix中,在目标机器上编写一个文件,用以启动自动备份进程。假定文件名为ORACLE,文件将放在/var/spool/cron/crontabs目录下
$>cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23点对数据库备份
0 12,18 * * * backup_archive.sh
#表示每天12点,18点备份
Crontab文件的每一行由六个域(minutes,hours,day of month,month,day of week,command)组成,域之间用空格或Tab分隔开来
二、使用数据泵技术实现逻辑备份
逻辑备份是创建数据库对象的逻辑副本,并存入一个二进制转储文件的过程。从本质上说,逻辑备份与恢复实际就是对数据库实施数据的导入和导出。
导出:
导出即数据库的逻辑备份,实质是读取一个数据库集并将这个数据集写入一个文件(扩展名通常是dmp),这些记录的导出与物理位置无关。
导入:
导入及数据库的逻辑恢复,实质是读取被导出的二进制转储文件并将其恢复到数据库。
- 使用数据泵技术导入/导出
数据泵(data pump)是一种在数据库之间或在数据库与操作系统之前高速传输的技术。数据泵工具运行在服务器上,数据库管理员需要指定数据库目录来保存转储的数据。
基于命令行的数据泵导出步骤如下
连接oracle数据库
创建一个操作目录
在linux系统中也需要创建/opt/backup目录,
使用root用户: mkdir /opt/backup
chown -R oracle /opt/backup
- 授予用户操作dump_dir目录的权限
查询目录是否建立好
创建测试用户yyy并授权
- 导出scott用户下的表
使用expdp命令导入数据(可以按照表导出,按照用户模式导出,按照表空间导出和全库导出),使用impdp命令导入数据(可以按照表导入,按照用户模式导入,按照表空间导入和全库导入)。
删除emp表
导入emp表
查看emp表已经还原
将导出的scott用户下的dept和emp表导入yyy用户下、
使用yyy用户登录查看表
- 导出scott用户模式
导入scott用户模式
将scott中所有的对象导入yyy中
查看yyy用户的表,发现多了很多
- 导出表空间
导出yyy表空间(提前创建一个yyy表空间)
在表空间yyy创建一个表ccc
导出表空间
- 入表空间
导入之前删除表空间,相关的表也会删除
导入表空间之前,需要创建一个yyy表空间
导入表空间
查看表已经恢复回来了
导出整个数据
- 导入整个数据库