RAMN概述
恢复管理器,可以跨越不同的操作系统进行数据库的备份与恢复
RMAN的优势:
Rman操作简单 自动化功能强
Rman可以忽略备份后未发生改变的block
使用rman可以轻松的创建备份或stabdby数据库
自动执行并行的备份和还原操作
可以不实际执行的情况下检查文件是否被正确的备份或还原
第一种连接方式
[oracle@sq ~]$ rman
RMAN> connect target /
第二种连接方式
[oracle@sq ~]$ rman target /
======================================
立即关闭数据库
SQL> shutdown immediate;
启动实例并加载数据库,但不打开
SQL> startup mount
更改数据库为归档模式
SQL> alter database archivelog;
打开数据库
SQL> alter database open;
启用自动归档
SQL> alter system archive log start;
查看归档状态
SQL> archive log list;
全库恢复要在mount状态
表恢复可以在open状态
=========================================
[oracle@sq admin]$ rman target /
RMAN> list backup; (查看备份列表)
(备份表空间)
RMAN> backup tablespace users;
RMAN> sql "alter system flush buffer_cache";(rman用sql,清空缓存)
[oracle@sq orcl]$ rm -rf users01.dbf(删除数据文件)
SQL> startup force
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
(报错4号文件 没有找到)
SQL> !
[oracle@sq ~]$ rman target /
RMAN> restore datafile 4;(恢复文件)
RMAN> sql "alter database datafile 4 online";(数据文件在线)
SQL> startup force(正常运行)
RAMAN为什么能找到恢复的路径,因为RAMN在备份数据文件的同时也备份了控制文件,通过控制文件的路径来恢复数据文件。一定要记住当数据文件有更新要重新备份。
备份位置
[oracle@sq123 dbs]$ cd /oracle/app/flash_recovery_area/TEST/backupset/
(Rman自动备份控制文件和参数文件
如果不配置,备份普通表空间的时候就不自动备份控制文件和参数文件)
=======================================
全库备份
1.
RMAN> backup database;
RMAN> list backup;
2.
[oracle@sq123 ~]$ cd /oracle/app/oradata/TEST/
[oracle@sq123 TEST]$ rm -rf *
3.SQL> startup force (找不到控制文件)
4.[oracle@sq123 TEST]$ cd /oracle/app/flash_recovery_area/TEST/backupset/2012_03_12/
(找到o1_mf_ncsnf_TAG20120312T004722_7osowxyj_.bkp)
5.恢复控制文件
Rman自动备份控制文件和参数文件
RMAN> restore controlfile from '/oracle/app/flash_recovery_area/TEST/backupset/2012_03_12/o1_mf_ncsnf_TAG20120312T004722_7osowxyj_.bkp';
RMAN> alter database mount;(数据库可以mount)
6.[oracle@sq123 TEST]$ ls (控制文件恢复回来了)
7.恢复数据文件
RMAN> restore database;
[oracle@sq123 TEST]$ ls(数据文件恢复回来了)
8.RMAN> alter database open resetlogs;(报错)
RMAN> recover database;(报错)
RMAN> alter database open resetlogs; (可以打开数据库)
(restore 是还原,文件级的恢复。就是物理文件还原
recover 是恢复,数据级的恢复。逻辑上恢复)
SQL> startup force(已经能够重启 恢复成功)
[oracle@sq123 TEST]$ ls (日志文件也有了)
============================================================
多通道全库备份(提高效率)
run{
allocate channel c1 type disk format '/home/oracle/backup1/%u';
allocate channel c2 type disk format '/home/oracle/backup2/%u';
sql 'alter system archive log current';
backup database plus archivelog delete all input;
sql 'alter system archive log current';
}
((
%c copy ID
%p backup piece ID
%s backup set ID
%e log sequence
%h log thread ID
%d database name
%n database name(x填充到8个字符)
%I DBID
%f file ID
%F DBID, day, month, year, and sequencer的复合
%N tablespace name
%t timestamp
%M mh mm格式
%Y year yyyy格式
))
=============================================================
RMAN 增量备份
1。
RMAN> backup incremental level 0 database format='/home/oracle/db_bak/%u';
(level=0 0级别为全库备份 %u生成唯一一个文件名)
(增量备份第一备份要为全库备份)
2.1SQL> create table c1 as select * from dba_objects;
(产生4w多行记录 占用的块较多)
(一级增量备份)
(增量备份级别:
1.differential 差异备份 认同同级备份.
2.cumulative 累积增量备份 不认同同级备份 优点:恢复时不需要读取过多的备份集)
2.2 差异备份
RMAN> backup INCREMENTAL LEVEL 1 DATABASE format='/home/oracle/db_bak/%u';
3.1
SQL> create table c2 (id int);
SQL> insert into c2 values(123);
SQL> commit;
(产生的数据较少)
3.2 累积增量备份
RMAN> backup INCREMENTAL LEVEL 1 CUMULATIVE DATABASE format='/home/oracle/db_bak/%u';
3.3
验证
比较两次产生的备份片, 3.2步骤 备份片大于 3.1步骤地大小
---------------------------------------------------------------
脚本备份
[oracle@sq123 ~]$ vi fullbackup.sh
#!/bin/bash
source ~/.bash_profile
$ORACLE_HOME/bin/rman target / <<EOF
run {
allocate channel C1 type disk FORMAT '/home/oracle/db_bak/%u';
allocate channel C2 type disk FORMAT '/home/oracle/db_bak/%u';
backup incremental level=0 database format='/home/oracle/db_bak/%u';
}
exit;
EOF
[oracle@sq123 ~]$ chmod 777 fullbackup.sh
[oracle@sq123 ~]$ ./fullbackup.sh 执行
-----------------------------------------------------
RMAN> list backup;
RMAN> delete backupset 1; 删除一个
RMAN> delete backup;
YES
(如果备份集中原数据文件被删除 delete检测时出错
需要先执行RMAN> CROSSCHECK backup; 检测备份)
检查备份文件是否有效
RMAN> validate backupset 1;
删除陈旧的备份(超出冗余保留时间)
delete obsolete;
报告陈旧的备份文件
report obsolete;
报告需要备份的文件
report need backup;
--------------------------------------------------------
rman catalog
采用RMAN方式进行备份,默认是采用NOCATALOG方式的。在这种情况下,LIST出来的备份信息写到了CONTROL FILE里,如果控制文件损坏,如果只能启动到NOMOUNT状态,那么备份信息就不可用。ORACLE建议我们采用CATALOG 方式,将控制文件的LIST信息同步到CATALOG DB中,这样当控制文件有问题时,我们也可以借用于CATALOG DB。
目录数据库:8.18
目标数据库:8.111
环境准备:
两端开启归档模式
两端开启监听
两端传输
DB111 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.111)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TEST)
)
)
DB18 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.18)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TEST)
)
)
1.在目录数据库中创建恢复目录所用表空间
SQL> create tablespace rmants datafile '/home/oracle/rmants.dbf' size 100m;
2.在目录数据库中创建RMAN 用户并授权
SQL> create user rman identified by rman default tablespace rmants quota unlimited on rmants;
SQL> grant recovery_catalog_owner to rman;
SQL> grant resource to rman;
SQL> grant connect to rman;
3.在目录数据库中创建恢复目录
[oracle@oracle18 ~]$ rman catalog rman/rman
RMAN> create catalog tablespace rmants;
4.注册目标数据库到恢复目录
[oracle@oracle18 ~]$ rman target sys/123456@db111
RMAN> connect catalog rman/rman@db18
RMAN> register database;
5.下面就可以使用RMAN了
备份些东西
删除目标库控制文件
修复控制文件
[oracle@oracle18 ~]$ rman target sys/123456@db111
RMAN> connect catalog rman/rman@db18
RMAN> list backup;
还能看到备份信息
===========================================================
set controlfile autobackup format for device type disk to '/home/oracle/cf_%F';
RMAN> restore controlfile from autobackup; (前提控制文件有效状态)
查看dbid
select dbid from v$database
本文转自陈继松 51CTO博客,原文链接:http://blog.51cto.com/chenjisong/1737392,如需转载请自行联系原作者