day15_oracle——RMAN

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



















posted @ 2016-03-21 21:31  暗夜小精灵~~  阅读(170)  评论(0编辑  收藏  举报