首页 > 技术文章 > rman备份

BrokenEaves 2021-04-25 23:39 原文

rman备份

1.开启存档模式

SQL> archive log list;  查看当前数据库的存档模式
SQL> alter system set log_archive_start=true scope=spfile;  修改系统的日志方式为存档模式
SQL> shutdown immediate;    关闭数据库,因为不能在open状态下进行操作;
SQL> startup mount;     启动mount实例,不启动数据库
SQL> alter database archivelog;     更改数据库为存档模式
SQL> archive log list;
SQL> alter database open;

  

2.关闭存档模式

SQL> archive log list;
SQL> select status from v$instance;
open
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database noarchivelog;       数据库非存档模式
​
SQL> archive log list;
SQL> select status from v$instance;
SQL> alter database open;
SQL> select status from v$instance;

  

3.创建恢复目录

SQL> create tablespace yy 
datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\yy.dbf' 
size 20m 
autoextend on next 5m 
maxsize unlimited;
​
//quota unlimited on yy        //yy配额不受限制
SQL> create user rman identified by rman default tablespace yy quota unlimited on yy;
​
//recovery_catalog_owner恢复目录所有者
SQL> grant connect,resource,recovery_catalog_owner to rman;
​
​
C:\Users\Administrator> rman catalog rman/rman
RMAN> create catalog tablespace yy;     创建恢复目录
RMAN> quit
C:\Users\Administrator> echo %ORACLE_SID%

  

登录目标数据库、连接到恢复目录数据库

C:\Users\Administrator> rman catalog rman/rman target /
恢复管理器: Release 11.2.0.3.0 - Production on 星期五 4月 23 08:53:33 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
已连接到目标数据库: ORCL (DBID=1597925059)
连接到恢复目录数据库

  

向恢复目录注册ORCL,此时可以使用rman的恢复目录对目标数据库进行备份和恢复操作。

RMAN> register database;        向恢复目录注册数据库ORCL
注册在恢复目录中的数据库
正在启动全部恢复目录的 resync
完成全部 resync

  

4.通道的分配

  • rman进行备份和恢复时,必须进行通道的分配,一个通道是rman和目标数据库的一个连接,通道制定了某种类型的设备用于备份和恢复,rman可以使用的通道设备包括磁盘与磁带两种。

  • 修改前的参数

    show all 显示已经配置过的有默认值的参数,其中包括通道参数

    RMAN> show all;
    ​
    db_unique_name 为 ORCL 的数据库的 RMAN 配置参数为:
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
    CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFORCL.ORA'; #
     default
    

      

  • 自动通道配置

    RMAN> configure device type disk parallelism 5;
    ​
    新的 RMAN 配置参数:
    CONFIGURE DEVICE TYPE DISK PARALLELISM 5 BACKUP TYPE TO BACKUPSET;
    已成功存储新的 RMAN 配置参数
    正在启动全部恢复目录的 resync
    完成全部 resync
    ​
    RMAN> configure default device type to disk;
    ​
    新的 RMAN 配置参数:
    CONFIGURE DEFAULT DEVICE TYPE TO DISK;
    已成功存储新的 RMAN 配置参数
    正在启动全部恢复目录的 resync
    完成全部 resync
    

      

  • 手动通道配置

    RMAN> run
    2> {
    3> allocate channel ch1 device type disk;
    4> allocate channel ch2 device type disk;
    5> allocate channel ch3 device type disk;
    6>}
    

      

5.备份与恢复的概念与操作

  • 备份集与备份片

  • 一个备份集由若干个备份片组成。每个备份片是一个单独输出文件,一个备份片的大小是有限制的,他的大小不能大于文件系统所支持的文件长度的最大值。

  • 配置备份集文件的格式:

    • 使用backup命令进行备份时,需要明确备份文件的存储路径及文件名称的格式。其路径和格式可以使用FORMAT参数进行统一设置。FORMAT格式由两部分组成:即存储路径和文件名称格式;

    • 如果没有使用FORMAT指定存储路径和文件名称格式,则默认情况下BACKUP所产生的备份集将存储在快闪恢复区中,RMAN自动使用%U来确定文件名称不会被重复。

  • format命令格式:

    FORMAT命令格式如下:
    FORMAT '格式字符串'
    其中格式字符串的文件名称部分可以使用替换变量,例如FORMAT '/BACKUP/YY/%U'.
    常用的替换变量如下:
    %c : 备份片的拷贝数
    %d:数据库名称
    %D : 位于该月中的第几天(DD)
    %M : 位于该年中第几月(MM)
    %F : 一个基于DBID的唯一名称,它的形式为C-DBID-YYYYMMDD-QQ。其中DBID为数据库的DBID,YYYYMMDD为日志,QQ是一个1-256的序列
    %n:数据库名称,向右填补到最大8个字符
    %u:一个8个字符的名称,它是根据备份集个数与创建时间信息生成的。
    %p:该备份集中的备份片号,从1开始到创建的文件数。
    %U:系统生成的一个唯一文件名,对于备份片来说,它的含义相当于%u_%p_%c。
    %s:备份集的号
    %t:备份集时间戳
    %T:年月日格式(YYYYMMDD)
    原文链接:https://blog.csdn.net/weixin_41078837/article/details/80609077

5.1备份与恢复命令

  • backup命令用于备份数据库文件,可以将多个文件、表空间、整个数据库已备份集形式备份到磁盘或磁带上,在RUN命令外使用BACKUP命令,会自动使用自动通道。在RUN命令内使用BACKUP命令,如果定义了手动通道,则优先使用手动定义通道。

  • 使用RMAN备份的数据库也只能使用RMAN提供的恢复命令进行恢复。RMAN的恢复目录中存储了目标数据库的备份信息。RMAN根据恢复目录中的存储信息,自动将数据库同步到某一个数据一致的状态。

  • RMAN恢复数据库时用到两个命令,即RESTORE和RECOVER。RESTORE命令将备份数据恢复到指定的目录,RECOVER命令对数据库进行同步恢复。

  • RESTORE命令:由于备份集中的备份片是以专有的RMAN格式存储的,需要使用RESTORE命令进行重建。重建的结果是自动产生目标数据库的物理文件结构。

  • RECOVER命令:负责把归档日志文件用于重建的数据文件,来完成数据库的同步恢复。在执行RECOVER命令时,RMAN需要读取归档日志。如果没有归档日志,或者数据库运行在非归档模式下,则恢复过程会报错。

5.2归档模式下备份与恢复

查看快闪恢复区参数 SQL> show parameter db_recovery_file_dest;

  • plus archivelog 备份时包含归档日志文件

  • delete input 备份完后,删除archive log文件

c:\Users\Administrator> rman catalog rman/rman target /
RMAN> backup database;		//不指定备份位置,默认备份到快闪恢复区
...
通道 ORA_DISK_2: 已完成段 1 于 23-4月 -21
段句柄=C:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ORCL\BACKUPSET\2021_04_23\O1_MF_NNNDF_TAG20210423T113111_J84HW1
92_.BKP 标记=TAG20210423T113111 注释=NONE
通道 ORA_DISK_2: 备份集已完成, 经过时间:00:00:36
完成 backup 于 23-4月 -21
备份时包含归档日志文件
RMAN> backup database plus archivelog delete input;

  

5.3自动分配通道备份

自动分配通道,通过format指定具体的路径和格式
若没有文件自行创建
RMAN> configure device type disk parallelism 5;
RMAN> configure default device type to disk;
RMAN> backup database FORMAT 'C:\APP\ADMINISTRATOR\ORADATA\backup\rmanbak\%U'

  

归档日志误删解决办法
    • change archivelog all crosscheck;

    • 检查rman资料库中归档日志的状态的

5.4手动分配通道备份

RMAN> run
2> {
3> allocate channel ch1 device type disk;
4> backup database format 'c:\temp\backup\2021_4_23\%U;
5> release channel ch1;
6> }

  

5.5恢复数据库

模拟数据丢失

//mount状态
SQL> shutdown immediate
删除C:\app\Administrator\oradata\orcl\SYSTEM01.DBF
SQL> startup
数据库无法启动
SQL> select status from v$instance;
MOUNTED

c:\Users\Administrator> rman target rman/rman
RMAN> restore database;			重建数据库的物理文件
RMAN> recover database;			同步恢复
RMAN> alter database open resetlogs;		//打开数据库

C:\app\Administrator\oradata\orcl\SYSTEM01.DBF文件已经被恢复
  • resetlogs仅在不完全数据库恢复后有效

6.备份和恢复表空间

6.1备份

c:\> rman catalog rman/oravle target /

  

备份users表空间

RMAN> backup tablespace users;

  

备份多个表空间

  • 用filesperset控制备份集的尺寸 当指定filesperset参数时,rman比较filesperset与自动计算出来的值(对每个已分配通道的文件数目)并取其中较小的那个值来保证所有的通道被使用。

RMAN> backup filesperset=3 tablespace users,system,sysaux;

  

在RUN命令中备份表空间

RMAN> run
2> {
3> allocate channel ch1 device type disk;
4> backup format 'c:\temp\backup\2021042315\%U' (tablespace users,system,sysaux);
5> release channel ch1;
6> }

  

6.2恢复

如果只丢失了特定的表空间的数据文件,那么可以选择只恢复这个表空间,而不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline

模拟删除users表空间
C:\app\Administrator\oradata\orcl\USERS01.DBF

恢复被删除的表空间
RMAN> run
2> {
3> sql 'alter tablespace users offline immediate';		将表空间脱机
4> restore tablespace users;
5> recover tablespace users;
6> sql 'alter tablespace users online';			将表空间联机
}

RMAN> alter database open;
或

C:\app\Administrator\oradata\orcl\USERS01.DBF
RMAN> restore tablespace users;
RMAN> recover tablespace users;
RMAN> alter database open;

  

6.3备份数据文件2

备份数据文件2(sysaux01.dbf)

SQL> col file_name for a55;
SQL> col status for a10;
SQL> select file_id,file_name,status from dba_data_files;

   FILE_ID FILE_NAME                                               STATUS
---------- ------------------------------------------------------- --
         4 C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF           AVAILABLE
         3 C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF         AVAILABLE
         2 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF          AVAILABLE
         1 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF          AVAILABLE
         5 C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF         AVAILABLE
         6 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYNCHROMOBILE.DBF     AVAILABLE
         7 C:\TEMP\YY.DBF                                          AVAILABLE

c:\> rman target rman/rman
RMAN> backup datafile 2;

  

 

7.查看系统中的数据文件

SQL> col file_name for a55;
SQL> col status for a10;
SQL> select file_id,file_name,status from dba_data_files;

   FILE_ID FILE_NAME                                               STATUS
---------- ------------------------------------------------------- --
         4 C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF           AVAILABLE
         3 C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF         AVAILABLE
         2 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF          AVAILABLE
         1 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF          AVAILABLE
         5 C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF         AVAILABLE
         6 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYNCHROMOBILE.DBF     AVAILABLE
         7 C:\TEMP\YY.DBF                                          AVAILABLE
         
         
SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- ----------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 ONLINE
         7 ONLINE

  

 

对数据文件或表空间做恢复的时候数据文件和表空间一定要处于offline状态, 数据文件丢失了,但数据库实例还可以用,

//SQL> backup datafile 2;	上一节已做备份2:sysaux01.dbf
SQL> select file_id,file_name,status from dba_data_files;
SQL> select file#,status from v$datafile;
删除C:\app\Administrator\oradata\orcl\SYSAUX01.dbf

RMAN> sql 'alter database datafile 2 offline';	此时状态为recover
RMAN> restore datafile 2;
RMAN> recover datafile 2;
RMAN> sql 'alter database datafile 2 online';

 

8.rman备份脚本

8.1

RMAN> show all;
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type disk to 'c:\backup\%F';

  

rman备份命令文件

back.txt

RUN {
allocate channel ch1 type disk;
backup database format 'c:\backup\db_%U' plus archivelog delete all input format 'c:\backup2\arch_%U';
release channel ch1;
}

  

back.bat

rman target sys/root123 cmdfile 'c:\back.txt' log 'c:\backup2\backup_%date:~0,4%%DATE:~5,2%%DATE:~8,2%".log'

  

执行back.bat

8.2

备份整个数据库

run{
    allocate channel c1 type disk format 'c:\temp\oracle\rmanbackup\full_%d_%T_%s';
    backup database include current controlfile;
    release channel c1;
}

  

备份单个表空间

run{
    allocate channel c1 type disk format 'c:\temp\oracle\rmanbackup\tab_users_%d_%T_%s';
    backup tablespace users;
    release channel c1;
}

  

备份多个数据文件

select file_id,file_name from dba_data_files;
run{
    allocate channel c3 type disk format 'c:\temp\oracle\rmanbackup\datafile_%d_%T_%s';
    backup datafile 4,5;
    release channel c3;
}

 

部分内容来自:https://blog.csdn.net/weixin_41078837/article/details/80609077

9.archivelog

//查看
RMAN>crosscheck archivelog all;        -----交叉检查归档日志信息。
RMAN>list expired archivelog all;         -----列出所有过期的归档日志信息。
RMAN>list archivelog all;                -----查看当前归档日志列表信息。
RMAN>list archivelog from time='sysdate-2';       -----查看至今两天的日志信息。
​
​
//备份archive
RMAN>backup archivelog all  format '/u03/rman/arch_log_%d_%T_%s_%p';           -------备所有归档。
RMAN>backup as compressed backupset  archivelog all  format '/u03/rman/arch_log_%d_%T_%s_%p';       -------采用压缩,备所有归档。
RMAN>backup archivelog from time 'sysdate-3';       -------备份3天以来的归档日志。
RMAN>backup archivelog from sequence 5;       -------从日志序列是5的开始备份。
RMAN>backup archivelog from sequence 5 until sequence 10;     -------备份日志序列从5到10的日志。
RMAN>backup archivelog all delete all input;       --------备份完所有的日志后,删除所有归档目录的日志。
​
​
RMAN>delete noprompt expired archivelog all;       --------删除过期的archivelog
​
RMAN>restore archivelog all;         --------还原所有的archivelog日志
RMAN>restore archivelog all preview;        --------不真实还原,只是预览操作
​
RMAN>delete  archivelog all;         --------删除所有的archivelog日志
​
​
RMAN>restore archivelog from logseq 11111 until logseq 11150;     -------还原某个段的archivelog日志
RMAN>restore archivelog from sequence 36 until sequence 50;
RMAN>restore archivelog low sequence 36 high sequence 50;
RMAN>restore archivelog time between "to_date('2012-04-22 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2012-04-26 16:20:00','yyyy-mm-dd hh24:mi:ss')" preview;
RMAN>restore archivelog time between "to_date('2012-04-22 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2012-04-26 16:20:00','yyyy-mm-dd hh24:mi:ss')" ;
​
指定archivelog的恢复目的地,如你想把archivelog恢复到一个临时目录时有用
RMAN>run {
set archivelog destination to 'c:\temp';
}
delete archivelog all completed before 'sysdata-7';     //删除七天之前的归档
delete archivelog from time 'sysdate-7';    //删除七天到现在的归档

  

9.1归档

查看归档

SQL> archive log list; 

  

查看存储位置

SQL> select * from v$flash_recovery_area_usage;
​
可以看到归档日志D:\app\Administrator\flash_recovery_area目录下在而且默认是不会定期清除的,时间长久了,该文件夹会占用很大的空间。不能直接在操作系统下手工直接删除的话,应该用ORACLE 的RMAN删除用RMAN 连接目标DB:
​
c:\> RMAN target sys/sysoracle123

 

9 .2清除归档日志

  • os层物理删除

    archivelog相关信息记录在controlfile当中,物理删除不会改变controlfile的设置。需以下操作

    物理删除archivelog
    rman target rman/rman
    RMAN> crosscheck archivelog all;
    RMAN> delete expired archivelog all;
    //delete noprompt archivelog until time 'sysdate-3';
    //删出7天之前的归档
    

      

  • 使用rman删除archivelog

    RMAN> delete archivelog all completed before 'sysdate-7';
    //删出7天之前的归档,但会留下一个里面最新的归档
    

      

  • 使用rman备份archivelog,后全部删除

    RMAN> format'c:\backup\arch_%T_%s_%U' archivelog all delete input;
    或
    RMAN> backup database plus archivelog;
    

      

     

10.增量备份

全备脚本

RMAN> run{
2> allocate channel c1 type disk;
3> backup full tag 'dbfull' format 'c:\temp\oracle\rmanbackup\full_%d_%T_%s' database include current controlf
ile;
4> sql'alter system archive log current';#在数据库进行全备份完成之后,需要执行该条命令将当前日志归档,备份归档日志时应该包括最后生成的归档
5> backup filesperset 3 format 'c:\temp\oracle\rmanbackup\arch_%d_%T_%s' archivelog all delete input;#备份归档可选,可以单独定期备份  
6> release channel c1;
7> }

 

0级增量备份

RMAN> run{
2> allocate channel c1 type disk;
3> backup incremental level 0 tag 'db0' format 'c:\temp\oracle\rmanbackup\db0_%d_%T_%s' database include current controlfile;
4> sql'alter system archive log current';
5> backup filesperset 3 format'c:\temp\oracle\rmanbackup\arch_%d_%T_%s' archivelog all delete input;
6> release channel c1;
7> }

  

1级增量备份

RMAN> run{
2> allocate channel c1 type disk;
​
3> backup incremental level 1 tag 'db1' format 'c:\temp\oracle\rmanbackup\db1_%d_%T_%s' database skip readonly
 include current controlfile;
 
4> backup filesperset 3 format 'c:\temp\oracle\rmanbackup\arch_%d_%T_%s' archivelog all delete input;
​
5> release channel c1;
6> }

  

 

 

相关链接:https://blog.csdn.net/weixin_41078837/article/details/80609077

推荐阅读