--20 rman学习
recovery manager
优点:
1,跳过未使用的数据库:当备份一个rman备份集合时,rman不会备份从未被写入的数据库。
而传统的备份方法无法知道已经使用了哪些数据库。
2,备份压缩
rman使用一种oracle特有的二进制压缩模式来节省备份设备上的控件。尽管传统的备份方法也可以使用操作系统的压缩技术,
但rman使用的压缩算法是定制的,能够最大程度地压缩数据块中一些典型的数据。
3,执行增量备份
4,块级别的恢复
只需要还原或修复标识为损坏的少量数据块,在rman修复损坏的数据库时,表空间的其他部分以及表空间的对象仍然可以联机使用。
rman组件
rman是一个以客户端方式运行的备份与恢复工具。
最简单的rman可以只包括2个组件:rman命令执行器和目标数据库。在比较
复杂的rman中会涉及更多的组件。在rman中常用的组件如下:
1,rman命令执行器(RMAN Executable)
2,目标数据库 (Target Database)
3,rman恢复目录 rman recover catalog
4,rman资料档案库 rman repository
5,恢复目录数据库 recover catalog database
--20.1 创建恢复目录
一个恢复目录可以为多个目标数据库进行恢复服务
1 conn sys/sys as sysdba;
2 archive log list;
3 设置成归档模式
shutdown ;
startup mount;
alter database archivelog;
alter database open;
archive log list;
4 创建表空间
create tablespace recovery_tbs
datafile 'd:/app/rman/recovery_tbs.dbf' size 10m
autoextend on next 5m
extent management local; --管理方式设置为本地管理
5 创建用户
create user rman_admin identified by admin_123
default tablespace recovery_tbs;
grant create session, connect, resource, recovery_catalog_owner to rman_admin;
6 创建恢复目录
进入rman模式,连接到恢复目录数据库
connect catalog rman_admin/admin_123;
创建恢复目录
create catalog;
--20.2 连接目标数据库
连接到目标数据库是指建立rman和目标数据库之间的连接。在rman中,可以在无恢复目录和有恢复目录2种情况下连接到目标数据库。
1无恢复目录
使用rman target语句
使用rman nocatalog语句
使用rman target ... nocatalog语句
2有恢复目录
使用rman target ... catalog
3取消目标数据库的注册
使用unregister命令
使用存储过程
连接目标数据库
c:/> rman target/
c:/> rman nocatalog
c:/> rman target sys/admin nocatalog (使用目标数据库控制文件替代恢复目录)
--在有目录下连接目标数据库
rman target sys/admin catalog rman_admin/admin_123
注册
register database;
--进行目录同步,以此记录归档日志
resync catalog;
exit 退出
--取消注册
C:/>sqlplus /nolog
SQL> connect rman_admin/admin_123
SQL> select * from db where db_id=1235126166;
SQL> exec dbms_rcvcat.unregisterdatabase(1,1235126166);
--20.3 rman命令
@ 在@后面指定的路径名各处运行rman脚本。如果没有指定路径,则设置路径为调用rman所用的目录。
startup 启动目标数据库。相当于sqlplus中的startup命令
run 运行"{"和"}"之间的一组rman语句,在执行该组语句时,允许重写默认的人满参数
.......
c:/> rman target sys/admin catalog rman_admin/admin_123
rman> register database;
rman> show all;(查看各种参数配置)
--20.4 rman配置
rman> configure retention policy to recovery window of 7 days;
表示,rman会将会维护足够多的镜像副本、增量备份以及归档日志,以保证我们将数据库还原恢复到
最后7天之内的任何一个时间点上。
rman> CONFIGURE DEFAULT DEVICE TYPE TO SBT(or disk磁盘通道); 将通道设置成磁带通道
rman> configure device type sbt parallelism 2;分配2个通道给sbt
rman> CONFIGURE CONTROLFILE AUTOBACKUP on; 自动备份
--查询已经修改的记录
select * from v$rman_configuration;
--与rman相关的数据字典视图
rc_* rman恢复目录视图,包含所有目标数据库的恢复信息
v$rman_status
v$rman_output
v$session_longops
v$database_block_corruption
v$flash_recovery_area_usage
v$recovery_file_dest
v$rman_configuration
--20.5 rman操作目标数据库
使用rman连接到数据库后,可以在rman中使用数据库操作命令启动数据库和关闭目标数据库。
数据库启动分为3个阶段:启动数据库实例、加载数据库文件、和打开数据库
在使用startup命令启动数据库时,可以使用一些选项设置数据库的启动状态。
数据库的关闭也分为3个阶段:关闭数据库、卸载数据库和关闭数据库实例。
关闭数据库时使用shutdown命令,该命令也可以带有一些选项。
1 启动数据库
startup: 数据库以正常方式启动数据库实例,加载数据文件,并且打开数据库。
startup force:启动数据库时,使用force选项,表示以强制方式打开数据库。
start nomount:表示只启动数据库实例,不加载数据库文件,也不打开数据库。
start mount:表示启动数据库实例,而且加载数据库文件,但是不打开数据库,
主要在切换数据库运行模式或者进行恢复时使用。
2 数据库关闭
shutdown normal:正常的关闭方式,数据库需要等待所有客户端从oracle正正常退出,然后才可以关闭。
shutdown immediate:立即关闭数据,系统将连接到服务器的所有未提交的事务全部回退,并中断连接,然后关闭数据库。
shutdown abort:异常关闭数据库,使用这种方式,系统立即将数据库关闭,对连接到服务器的客户事务不做任何处理。
shutdown transactional:计划关闭数据库,任何新的连接和事务都是不运行的,在已经执行的所有事务完成后,数据库将
和shutdown immediate同样的方式关闭数据库。
操作步骤:
1,sqlplus /nolog
2,connect sys/sys as sysdba;
3,archive log list
4,shutdown
5,startup mount
6,alter database noarchivelog
7,alter database flashback off
8,alter database noarchivelog
9,alter database open
10,archive log list
--20.6 backup命令实现备份
在进行rman备份时,可以使用backup命令,该命令的语法如下:
backup [full|incremental level[=]n](backup_type option);
其中,full表示全备份;incremental表示增量备份;level是增量备份的级别,取值为0-4,
0级增量备份相当于完全备份。
level[=]n中的等号(=)可有可无,例如level=0或者level 0都正确。
backup_type
是备份对象,backup命令可以备份的对象包括以下几种:
database 表示备份全部数据库,包括所有数据文件和控制文件。
tablespace 表示备份表空间,可以备份一个或者多个指定的表空间。
datafile 表示备份数据文件。
archivelog[all] 表示备份归档日志文件。
current controlfile 表示备份控制文件。
datafilecopy[tag] 表示使用copy命令备份的数据文件。
controlfilecopy 表示使用copy命令备份的控制文件。
backupset[all] 表示使用backup命令备份的所有文件。
option
option为可选项,主要参数如下:
tag 指定一个标记。
format 表示文件存储格式化。
字符串 说明
%c 表示备份段的多个copy的序号
%D 以DD格式显示日期
%Y 以YYYY格式显示年度
%n 8位长度的数据库名称,不足部分使用‘X’在后面填充。如ora11g自动形成为ora11gXXX
%s 备份集号,此数据时控制文件中随备份集增加的一个计数器,从1开始
%T 指定年、月、日,格式为YYYYMMDD
%U 指定一个便于使用的、由%u_%p_%c构成的、确保不会重复的备份文件名称,rman默认使用%u格式
%d 指定数据库名
%m 以MM格式显示月份
%F 结合数据库标识DBID、日、月、年以及序列,构成唯一的自动产生的字符串名字
%p 文件备份序号,在备份集中的备份文件片编码,从1开始每次增加1
%t 指定备份集的时间戳,是一个4字节值的秒数值。%t与%s结合构成唯一的备份集名称
%u 指定备份集编码,以及备份集创建的时间构成的8个字符的文件名称
%% 指定字符创%,如%%Y为%Y
include current controlfile 表示备份控制文件。
filesperset 表示每个备份集所包含的文件。
channel 指定备份通道。
delete[all]input 备份结束后删除归档日志。
maxsetsize 指定备份集的最大尺寸。
skip[offline|readonly|inaccessible]可以选择的备份条件。
--20.7 rman数据库恢复
使用rman恢复数据库时候,一般情况下需要进行修复和恢复2个过程。
1 修股数据库
指物理上文件的复制。rman将启动一个服务器进程,使用磁盘中的备份集护着镜像副本,修股
数据文件。控制文件以及归档重做日志文件。
执行修复数据库时候,需要使用restore命令。
2 恢复数据库
恢复数据库主要是指数据文件的介质恢复,即为修复后的数据文件应用联机
或者归档重做日志,从而将修股的数据库文件更新到当前时刻或者指定时刻
下的状态。
执行恢复数据库时,需要自信recover命令
数据库非归档恢复
如果数据库是在非归档模式下运西瓜,并且最近说进行的完全数据库备份有效,这可以在故障发生时进行数据库的非归档恢复。
通过rman执行恢复时,值需要自信restore命令,将数据库问及爱你修复到正确的位置,然后就可以打开数据库,也就是说,
在noarchivelog模式下的数据库,不需要执行recover命令,因为这个会导致恢复所有的数据库文件,即时只有一个数据库文件不
可用。
操作:
1 以dba登录sqlplus,,确定数据库为非归档模式。
2 运行rman,连接到数据库
3 备份整个数据库
4 为了演示介质故障,使用shutdown命令关闭数据库,通过操作系统移动或者删除users01..dbf数据文件。
5 startup启动数据库。这时,oracle无法找到数据库文件users01.dbf,会出现错误
6 当rman使用控制文件保存恢复信息时,必须使目标数据库处于mount状态才能访问控制文件。
关闭数据库后,使用startup mount命令启动数据库,然后打开数据库。语句如下:
rman> startup mount;
sql> alter database datafile
'd:/app/administrator/oradata/orcl/USER01.dbf' offline drop;
sql> alter database open;
7 执行restore命令,让rman确定最新的有效备份集,然后将文件复制到正确的位置上,如下:
rman> run{ restore database;}
数据库归档模式恢复
1 确认数据库处于archivelog模式下
2 启动rman,连接到目标数据库
3 备份整个数据库
4 模拟介质故障。关闭目标数据库,通过操作系统移动或者删除表空间users对应的数据文件user01.dbf。
5 执行下面的命令恢复数据库,语句如下:
rman> run{
allocate channel ch1 type disk;
restore database;
sql "alter database mount";
recover database;
sql "alter database open resetlogs";
release channel ch1;
}
6 恢复数据库后,使用alter database open 命令打开数据库。
--20.8 增量备份
所谓增量备份就是将那些与前一次备份相比发生变化的数据块复制到备份集中。进行增量备份时,
rman会读取整个数据文件,通过rman可以为单独的数据文件,表空间,或者整个数据库进行增量备份。
在rman中建立的整理备份可以具有不同的级别,每个级别都有一个小于0的整数来标识,也就是在
在backup命令中使用level关键字指定的,例如level=0标识备份级别为0,level=1就是标识备份级别
为1
增量备份2种实现方式
1 差异备份 关键字为differential 默认 将备份上一次进行的同级或者低级备份以来所有变化的数据块
2 累计备份 关键字为cumulative 不默认 将备份上次低级备份以来所有的数据块
差异增量备份
使用增量备份,执行0级增量备份,也就是实现完全数据库备份,如下:
连接到恢复目录数据库
c:/> rman target sys/sys catalog rman_admin/admin_123
进行0级备份
rman> run{
allocate channel ch1 type disk;
backup incremental level 0 as compressed backupset database;
release channel ch1;}
在备份语句中没有指定备份文件的保存路径,默认情况下,保存在
app/administrator/flash_recovery_area/orcl目录下。
在这个0级备份完成后的任何时刻,可以执行增量为1级的差异备份:
rman> backup incremental level 1
as compressed backupset database;
累计增量备份
如果仅在backup命令中指定incremental选项,默认创建的备份为差异增量备份。如果想要建立累计增量备份,还需要
在backup命令中指定cumulative选项,如下:
rman> backup incremental level 1 cumulative as compressed backupset database;
采用累计备份还是差异备份,在一定程度上取决于cpu周期的时间,磁盘的可用空间,以及执行的数据库活动数量。
使用累计备份意味着备份文件会变得日益庞大,并花费更长的时间,但是恢复操作比较简单。使用差异备份只记录从
上次备份以来的变化,但是执行恢复可能花费更长的时间。
在具有大量插入和更新操作的数据库环境中,累积增量备份可能更容易管理。对于变化很少的数据环境,更适合于差异
增量备份。
--20.9 镜像复制
和表空间备份、完全备份、镜像备份
rman可以使用copy命令创建数据文件的准确副本,即镜像副本(Image Copies)。通过copy命令可以复制数据文件、归档重做
日志文件和控制文件。copy命令的基本语法如下:
COPY [full|incremental level[=]0] input_file to location_name;
其中,input_name表示被备份的文件:location_name表示复制后的文件。
镜像副本可以作为一个完全备份,也可以是增量本分策略中的0级增量备份。如果没有指定备份类型,则默认为full。
命令操作:
1 rman> report schema; 列出需要备份的文件名
2 rman> copy datafile 7 to 'd:/app/backup/bigspace.dbf', datafile 8 to 'd:/app/backup/blockspace.dbf', datafile 9 to 'd:/app/backup/undo01.dbf';
--20.10 rman备份
完全备份
完全备份是指对数据库中使用过的所有数据块进行备份,当然,没有使用过的数据块是不做备份的。在
进行完全备份时,rman将数据文件中所有的非空白数据库都复制到备份集中。
在rman中,可以对数据文件进行完全备份或者增量备份,但是对控制文件和日志文件只能进行完全备份。
在一个完全数据库备份中,将所有的数据库文件,复制到闪回恢复区。
【实例】通过backup full语句,对数据库执行完全备份。使用tag参数和format参数,指定备份文件位置
以及备份文件的名称格式。如下:
rman> run{
allocate channel ch1 type disk;
backup full
tag full_db_backup format "d:/app/backup/db_t%t_s%s_p%p"(database);
release channel ch1;
}
【例子】在rman中执行list命令,查看建立的备份集与备份段信息,如下:
rman> list backup of database;
备份表空间
在数据库中创建一个表空间后,或者在对表空间执行修改操作后,立即对这个表空间进行备份,
可以在出现介质失效时缩短恢复表空间所花费的时间。使用backup命令备份users表空间,使用tag参数,
指定一个标记信息;使用format参数,指定备份文件的保持位置以及备份文件的名称格式,语句如下:
rman> run{allocate channel ch1 type disk;
backup tag tbs_users_read_only format "d:/app/backup/tbs_users_t%t_s%s" (tablespace testspace);
release channel ch1;
}
rman> list backup of tablespace 'TESTSPACE';