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> }
相关链接: