Oracle rman工具使用(真的细)
- 一、Oracle rman工具简介
- 二、使用rman备份
-
- 2.1、rman
-
- 2.1.1、功能
- 2.1.2、rman特点
- 2.1.3、RMAN 架构
- 2.1.4、使用
- 2.1.5、RMAN 默认配置
-
- 2.1.5.1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
- 2.1.5.2、CONFIGURE BACKUP OPTIMIZATION OFF; # default
- 2.1.5.3、CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
- 2.1.5.4、CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
- 2.1.5.5、CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
- 2.1.5.6、CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
- 2.1.5.7、CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
- 2.1.5.8、CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
- 2.1.5.9、CONFIGURE MAXSETSIZE TO UNLIMITED; # default
- 2.1.5.10、CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
- 2.1.5.11、CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
- 2.1.5.12、CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
- 2.1.5.13、CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
- 2.1.5.14、CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\ORACLE_DATABASE\11.2.0\DBHOME_1\DATABASE\SNCFTZQ.ORA'; # default
- 2.1.5.15、RMAN 配置参数重置为默认值
- 2.1.5.16、旧的RMAN 配置参数:
- 2.1.6、备份类型
- 2.1.7、rman体系结构
- 2.1.8、RMAN备份相关的动态性能表
- 2.1.9、RMAN 备份前确认
- 2.2、配置数据库到归档模式
- 2.3、使用RMAN进行数据库备份
- 2.4、使用RMAN进行归档备份
- 2.5、使用RMAN进行数据文件备份
- 2.6、使用RMAN进行增量备份
- 三、使用rman恢复
- 四、熟悉rman的主要命令
-
- 4.1、list
- 4.2、report
-
- 4.2.1、报告目标数据库的物理结构、数据文件:report schema;
- 4.2.2、报告最近3天没有被备份的数据文件:report need backup days=3;
- 4.2.3、在USERS表空间上3天未备份的数据文件:report need backup days 3 tablespace users;
- 4.2.4、报告恢复数据文件需要的增量备份个数超过3次的数据文件:report need backup incremental 3;
- 4.2.5、报告备份文件低于2份的所有数据文件:report need backup redundancy 2 database;
- 4.2.6、报告文件报表的恢复需要超过6天的归档日志的数据文件:report need backup recovery window of 6 days;
- 4.2.7、报告数据库所有不可恢复的数据文件:report unrecoverable;
- 4.2.8、报告备份次数超过2次的陈旧备份:report obsolete redundancy 2;
- 4.2.9、报告多余的备份:report obsolete;
- 4.3、crosscheck
-
- 4.3.1、核对所有备份集:crosscheck backup;
- 4.3.2、核对所有数据文件的备份集:crosscheck backup of database
- 4.3.3、核对特定表空间的备份集:crosscheck backup of tablespace users;
- 4.3.4、核对特定数据文件的备份集:crosscheck backup of datafile 4;
- 4.3.5、核对控制文件的备份集:crosscheck backup of controlfile;
- 4.3.6、核对SPFILE的备份集:crosscheck backup of spfile;
- 4.3.7、核对归档日志的备份集:crosscheck backup of archivelog sequence 3;
- 4.3.8、核对所有映像副本:crosscheck copy;
- 4.3.9、核对所有数据文件的映像副本:crosscheck copy of database;
- 4.3.10、核对特定表空间的映像副本:crosscheck copy of tablespace users;
- 4.3.11、核对特定数据文件的映像副本:crosscheck copy of datafile 6;
- 4.3.12、核对归档日志的映像副本:crosscheck copy of archivelog sequence 4;
- 4.3.13、核对控制文件的映像副本:crosscheck copy of controlfile;
- 4.4、configure
-
- show all
- 4.4.1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
- 4.4.2、CONFIGURE BACKUP OPTIMIZATION OFF;
- 4.4.3、CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
- 4.4.4、CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
- 4.4.5、CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';
- 4.4.6、CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
- 4.4.7、CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
- 4.4.8、CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
- 4.4.9、CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:/oracle_database/backup/rman/snapcf_test.f';
- 4.4.10、CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:/oracle_database/backup/rman/%U_%D_%T';
- 4.5、delete
- 4.6、RESTORE命令:
- 五、如何配置catalog以及使用
- 六、如何通过RMAN复制数据库
- 七、如何通过rman检查坏块
- 八、了解TTS(Transportable TableSpace)
- 九、了解RMAN Data Recovery Advisor(DRA)
- 十、11g、12c中RMAN的新特性
- 十一、编写RMAN备份的常用脚本
- 十二、12 参考文档
一、Oracle rman工具简介
- Oracle RMAN(Recovery Manager)是Oracle数据库备份和恢复的官方工具,它提供的备份和恢复功能非常强大和可靠。RMAN可以备份整个数据库或特定表空间、数据文件、控制文件和归档日志,同时还可以进行增量备份和增量恢复。
- RMAN还提供了诸如备份验证、备份优化、备份复制、备份集管理、恢复操作、自动备份、自动恢复等高级功能。它使用的备份和恢复格式是Oracle通用的备份集(Backup Set),这使得备份和恢复非常灵活和高效。
- RMAN使用命令行界面(CLI)和图形用户界面(GUI)进行操作。通过CLI,用户可以通过输入各种命令来备份和恢复Oracle数据库。通过GUI,用户可以使用图形界面来执行备份和恢复操作,并通过图形化的操作界面进行配置和管理。
- 总之,Oracle RMAN是Oracle数据库备份和恢复的必备工具,它提供了非常可靠和高效的备份和恢复功能,可以为数据库管理员提供很大的便利和帮助。
二、使用rman备份
2.1、rman
2.1.1、功能
- Recovery Manager,是备份和恢复数据库的管理工具
- 由 server process 进行备份和恢复
- rman 备份的文件种类
①datafile(database、tablespace、datafile)
②controlfile、spfile
③archivelog - 在归档模式下支持非一致性备份(热备)
非归档方式的 RMAN 只能冷备,并在 mount 下做。
非归档方式的 RMAN 恢复只能还原最后一次备份。
2.1.2、rman特点
- 不备份数据文件中未分配的块,以及未使用的块。节省时间空间。
- 不备份临时表空间
- 可以实现增量备份
- 支持多通道并行工作
- 可以备份 ASM 文件
2.1.3、RMAN 架构
- 可连接三类数据库:target database(备份的目标库) ,duplicate database(复制数据库), catalog database(目录数据库)。
- 存储设备:disk 、tape (sbt 磁带机)存放备份文件的设备
- channel :目标库和存储设备之间备份恢复通道(服务进程)默认最少启动一个 channel, 可同时启动多个 channel 并发操作。
- server process:用于备份和恢复的进程
- rman 的元数据:记录备份的信息(放在目标库的 controlfile 里)
- catalog database :集中管理、存放备份的元数据 metadata,还可以存储备份脚本
- MML:media manage layer 介质管理层:用于管理磁带机的库文件或驱动
2.1.4、使用
2.1.4.1、连接数据库
2.1.4.1.1、连接本地数据库
rman target /
2.1.4.1.2、连接远程数据库
rman target sys/密码@IP地址或主机名/数据库实例名称
2.1.4.2、基本指令
2.1.4.2.1、执行 SQL 语句
RMAN> SQL 'ALTER SYSTEM SWITCH LOGFILE';
2.1.4.2.2、显示 RMAN 默认配置
RMAN> SHOW ALL;
执行结果:
RMAN> SHOW ALL;
db_unique_name 为 TZQ 的数据库的 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 'D:\ORACLE_DATABASE\11.2.0\DBHOME_1\DATABASE\SNCFTZQ.ORA'; # default
RMAN>
执行情况截图:
2.1.5、RMAN 默认配置
解读上面的默认配置信息:
2.1.5.1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
- 保留策略:用来决定哪些备份是有效的,而哪些备份是淘汰的。决定了备份是否为 obsolete(过时),RMAN 还原备份时不会选择 obsolete 的备份。
reduadancy 冗余度
2.1.5.2、CONFIGURE BACKUP OPTIMIZATION OFF; # default
- 备份优化:如果优化设置打开, 针对归档日志,只读或脱机表空间的数据文件,因为这些文件是不会变 化的,备份集运行一个优化算法。全库备份时跳过重复的备份文件。
开启备份优化:
CONFIGURE BACKUP OPTIMIZATION on;
将 users 表空间设置为只读,SQL命令行下执行:
alter tablespace users read only;
查一下表空间情况:
select tablespace_name,status from dba_tablespaces;
我们发现,USERS表空间变为READ ONLY了。
单独备份时依然正常执行,不做优化。
rman命令行下执行下面命令:
backup tablespace users format 'D:/oracle_database/oradata/tzq/users_%d_%T_%U.bak';
下面截图是执行情况:
查看本地磁盘:
发现文件已经创建了。
2.1.5.3、CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
- 设备类型有两种,可以是磁盘(DISK),或者磁带(STB),默认为磁盘。
2.1.5.4、CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
- 设置控制文件自动备份
- off:
- 默认情况下,在备份 system 表空间时,会备份控制文件和 spfile 。
- 但是备份 users 表空间时不备控制文件和 spfile
- on:
- ①在做任何文件的备份时,会自动备份控制文件和 spfile
- ②数据库的物理结构发生变化时,也自动备份 controlfile(延迟创建)
- off:
2.1.5.5、CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default
- 给出控制文件自动备份的路径和命名方式,缺省是‘%F’,控制文件自动备份将放入 db_recovery_file_dest 目录下,也可以指定到其他地方
如 :
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/rman/%F';
联系:
第四行和第五行的环境变量是有关系。当第四行开启 AUTOBACKUP ON 后,控制文件备份将 放入第五行指定的目的地,这样 RMAN 在恢复控制文件备份时能自动找到控制文件备份。即 和 restore controlfile from autobackup 命令配套。
2.1.5.6、CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
2.1.5.7、CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
- 多重备份集 多路复用
2.1.5.8、CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
- 归档备份 多路复用
2.1.5.9、CONFIGURE MAXSETSIZE TO UNLIMITED; # default
- 该配置限制通道上备份集的最大尺寸,单位支持 Bytes 、KB、MB、GB,默认值是 unlimited, 可以在备份语句中设置
2.1.5.10、CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
2.1.5.11、CONFIGURE ENCRYPTION ALGORITHM ‘AES128’; # default
2.1.5.12、CONFIGURE COMPRESSION ALGORITHM ‘BASIC’ AS OF RELEASE ‘DEFAULT’ OPTIMIZE FOR LOAD TRUE ; # default
- 压缩只能是针对 backup set; 不要将 RMAN 的压缩和外部压缩实用程序混合在一起做
2.1.5.13、CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
- 对于归档文件,可以根据保留策略,在备份脚本中指定删除归档文件的语句。
2.1.5.14、CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘D:\ORACLE_DATABASE\11.2.0\DBHOME_1\DATABASE\SNCFTZQ.ORA’; # default
- 目标库控制文件与 catalog 目录库做全同步或者备份当前控制文件时的时候,需要建立一个 controlfile 的快照,这个参数指定快照存放位置。
2.1.5.15、RMAN 配置参数重置为默认值
RMAN> configure retention policy clear;
2.1.5.16、旧的RMAN 配置参数:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
2.1.6、备份类型
2.1.6.1、镜像复制
- 首先大家需要明了这个概念,rman 中的镜像复制实质与通过操作系统copy 命令备份相同,甚至连命令的格式都相似,只不过直接应用操作系统的copy 命令复制数据文件时,只是文件拷贝,而rman 的copy 则能够在复制的同时,验证数据的有效性。
2.1.6.2、备份集
- 备份集(BACKUPSET)表示进行一次备份所产生的所有备份片集合,是一个逻辑上的概念。备份片(BACKUPPIECE)表示一个由 RMAN 产生备份的文件.用 OS 工具可以实实在在的看到。一个备份集由一个或多个备份片组成。(与表空间、数据文件关系类似)
一个数据文件可以跨备份片存在,而不能跨备份集存在。
2.1.7、rman体系结构
- RMAN要进行备份的数据库叫做目标数据库。
- RMAN是一个客户端程序,需要建立到目标数据库的客户端连接,并在目标数据库上创建对应的服务器进程以及session,RMAN输入的各个命令,从客户端传递到服务器,由服务器进程负责执行(Rman命令解释程序,转换为数据库上的远程调用RPC)。Rman由两部分组成:RMAN可执行程序和脚本文件recover.bsp。
其中RMAN可执行程序只是一个命令接口,提供接口解释命令返回结果。
其中recover.bsp是库文件,调用目标数据库相应的程序包,完成实质性工作。 - Rman信息库(元数据)来源及位置
备份过程中,RMAN读取目标数据库的控制文件,从而获得目标数据库里包含哪些数据文件、归档日志文件、以及各个检查点SCN,指导RMAN完成备份和恢复的具体操作;RMAN获得了需要备份的文件列表以后,在将数据备份到备份介质上时,需要建立到这些备份介质的通道(channel)。一旦建立通道。数据就会从该通道备份到指定的备份介质上,每次备份恢复,我们都可以创建多个通道以加快速度。
通道的类型就决定了要将数据库备份到哪种介质上,两种通道类型:磁盘通道(硬盘和FRA)和磁带通道。 - RMAN信息库(rman repository),RMAN备份过程中产生的元数据,包括备份文件的名称、路径、完成备份的时间、检查点SCN等数据。
rman信息库可以存放在两个位置:目标数据库的控制文件和恢复目录(recovery catalog)。
2.1.8、RMAN备份相关的动态性能表
2.1.8.1、v$archived_log
- 包含所有归档重做日志文件的创建情况,备份情况以及其他信息。
2.1.8.2、v$backup_corruption
- 这个视图显示了RMAN 在哪些备份集中发现了损坏的数据坏。在你使用BACKUP VALIDATE 命令对备份集进行检查时如果发现了损坏的数据块,RMAN 将在这个视图中写入记录。
2.1.8.3、v$copy_corruption
- 本视图显示了哪些镜像复制备份文件已经被损坏。
2.1.8.4、v$backup_datafile
- 本视图通常用来获取每个数据文件中非空白数据块的数量,从而帮助你创建出大小基本相等的备份集。另外,在视图中也包含了数据文件中损坏的数据块的信息。
2.1.8.5、v$backup_redolog
- 本视图显示在现有的备份集中有哪些归档重做日志文件。
2.1.8.6、v$backup_set
- 本视图显示了已经创建的备份集的信息。
2.1.8.7、v$backup_piece
- 本视图显示了已经创建的备份片段的信息
2.1.9、RMAN 备份前确认
打开或关闭 (冷热)
完整或部分 (全库、表空间、数据文件)
完整或增量
到磁盘还是磁带上
副本或备份集
2.2、配置数据库到归档模式
2.2.1、查看归档状态
SQL窗口执行下面的命令:
archive log list
查询结果截图如下:
2.2.2、关闭数据库,启动到amount状态
SQL窗口执行下面的命令:
shutdown immediate
startup mount
2.2.3、修改归档位置,开启数据库再查看
SQL窗口下执行:
alter system set log_archive_dest_1='location=D:/oracle_database/archive';
alter database archivelog;
alter database open;
archive log list
2.2.4、验证归档
SQL窗口下执行:
alter system switch logfile;
2.3、使用RMAN进行数据库备份
2.3.1、修改备份保留时间
SQL窗口下执行:
show parameter keep_time
alter system set control_file_record_keep_time=30;
show parameter keep_time
2.3.2、修改 RMAN 备份路径和控制文件
rman窗口下执行:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:/oracle_database/backup/rman/%F';
configure channel device type disk format 'D:/oracle_database/backup/rman/%U_%D_%T';
configure snapshot controlfile name to 'D:/oracle_database/backup/rman/snapcf_test.f';
show all;
2.3.3、数据库全备
rman窗口下执行:
backup database format 'D:/oracle_database/backup/rman/db_%d_%T_%U.bak';
2.3.4、报错处理
2.3.4.1、报错案例一:RMAN-06031
RMAN> backup database format 'D:/oracle_database/backup/rman/db_%d_%T_%U.bak';
Starting backup at 07-SEP-2023 03:03:13
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 09/07/2023 03:03:13
RMAN-20021: database not set
RMAN-06031: could not translate database keyword
错误分析及解决方案:2个会话,我在另外一个会话将数据库由mount改为open,但是本回话的rman没有收到数据库打开的通知。退出rman然后再进即可。
2.3.4.2、报错案例二:ORA-19502
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 09/07/2023 03:19:28
ORA-19502: write error on file "D:/oracle_database/backup/rman/db_TEST1_20230907_0c25o5dp_1_1.bak", block number 135552 (block size=8192)
ORA-27072: File I/O error
Linux-x86_64 Error: 28: No space left on device
Additional information: 4
Additional information: 135552
Additional information: -1
错误分析及解决方案:磁盘空间不足。删除过期备份或者增加空间。
2.4、使用RMAN进行归档备份
2.4.1、查看归档日志的位置
SQL窗口下执行下面命令:
show parameter log_archive_dest_1;
2.4.2、备份归档日志
rman窗口下执行:
backup as compressed backupset archivelog all delete input format 'D:/oracle_database/archive/archivelog_%d_%I_%s_%p_%T';
delete input 参数:在备份完成后,删除归档日志。
查看归档日志详情
list backup of archivelog all;
2.5、使用RMAN进行数据文件备份
- 备份数据文件,可单个数据文件备份,即镜像备份,如backup as copy datafile 1 也可以将多个数据文件作为备份集进行备份: datafile 1,2,3,4
列出构成数据库的数据文件
RMAN> report schema;
backup datafile 4 format 'D:/oracle_database/backup/rman/users_%d_%T_%U.bak';
report obsolete;
再次备份后,去显示过时备份(根据保留策略,不需要)
删除过时备份
delete obsolete;
delete backupset 2;
list backup;
2.6、使用RMAN进行增量备份
- 所谓增量备份,顾名思义即是每次备份仅操作那些发生了"变化"的数据块。RMAN 中增量备份有两种:Differential 方式和Cumulative 方式。级别0-4.
- 1、差异备份 Differential ( DEFUALT )
备份上级及同级以来所有变化的数据块 - 2、累积增量备份 Cumulative
备份上级以来所有变化的数据块
- 1、差异备份 Differential ( DEFUALT )
2.6.1、0 级备份和全库备份的区别
- 全库备份不能作为 1 级备份的基础
- 全库备份会对 unused 数据库做备份
- 0级备份
backup incremental level 0 database;
- 1 级差异增量
backup incremental level 1 database;
- 1 级累计增量
backup incremental level 1 cumulative database;
- 0级备份
2.6.2 做0级增量备份
rman窗口下执行:
backup incremental level=0 database format 'D:/oracle_database/backup/rman/db_%d_%T_%U.bak';
如果从来没有做过增量备份那么无论level写几做的还是0级增量备份。
模拟有业务,在表中增加数据:
进入scott schema下执行下面插入数据:
报错,修改USERS表空间为读写权限:
alter tablespace users read write;
select tablespace_name,status from dba_tablespaces;
scott下执行:
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7999, 'TZQ', 'PRESIDENT', NULL, to_date('31-05-1984', 'dd-mm-yyyy'), 18000.00, null, 10);
COMMIT;
SELECT * FROM emp;
还是用dba角色执行:
alter system switch logfile;
做一级增量备份。默认是差异增量备份(Oracle要对所有的数据块进 行检查看哪些块被修改了,检查的时间会有点长)。
rman下执行:
backup incremental level=1 database format 'D:/oracle_database/backup/rman/db_%d_%T_%U.bak';
三、使用rman恢复
- 可以在三个级别恢复,数据库,表空间,数据文件。
- (1) 在RMAN完全恢复中主要使用两个命令,restore 和 recover 。
- recover 恢复:
①归档模式:完全恢复和不完全恢复
②非归档模式:只能还原到最后一次备份状态(restore恢复)
- recover 恢复:
- (2) 执行 rman 备份脚本先对数据库做一个备份 (如果是 archived 模式可以做热备)
- (3) 实现完全恢复,需要自备份以来的归档日志和当前日志文件完整,保证日志的连续性。
在完全恢复中,通过使用完整的备份集和归档日志来还原和重做所有的数据修改操作,可以确保数据库在崩溃点之后的所有更改都被恢复,因此不会丢失数据。
在不完全恢复中,只使用部分备份集和归档日志来还原和重做特定时间点之前的数据修改操作,可能会导致在该时间点之后的数据修改丢失。因此,在不完全恢复中,存在数据丢失的风险。
- (1) 在RMAN完全恢复中主要使用两个命令,restore 和 recover 。
3.1、完全恢复
3.1.1、数据文件丢失,恢复
备份LOG2数据文件:
rman窗口下执行:
report schema;
backup datafile 7 format 'D:/oracle_database/backup/rman/log2_%d_%T_%U.bak';
进行0级备份
backup incremental level 0 datafile 7 format'D:/oracle_database/backup/rman/log2_%d_%T_%U.bak';
关闭数据库,再删除数据文件。
这里把 LOG2.DBF 重命名为 LOG2.DBF-bak
将数据库置于mount状态,RMAN连接上,还原和恢复数据文件,打开数据库
打开会报错,缺失数据文件。
重新进入rman:
还原数据文件:
restore datafile 'D:/oracle_database/oradata/tzq/LOG2.DBF';
恢复数据文件:
recover datafile 'D:/oracle_database/oradata/tzq/LOG2.DBF';
用rman开启数据库:
RMAN> alter database open;
3.1.2、模拟磁盘损坏,恢复数据文件
SQL窗口执行:
shutdown immediate;
startup mount;
删掉数据文件:LOG2.DBF,这里改为LOG2.DBF-bak2
打开数据库报错:
alter database open;
通过查看视图v$recover_file
和v$datafile
可以确定是哪个文件出了问 题。
select * from v$recover_file;
查看数据文件名字:
select file#,name from v$datafile;
还原数据文件,#把文件恢复到另一个目录
set newname for datafile 7 to 'D:/oracle_database/oradata/LOG2.DBF';
使用这个命令( switch datafile 7;
)会更新控制文件
run{
set newname for datafile 7 to 'D:/oracle_database/oradata/LOG2.DBF';
restore datafile 7;
switch datafile 7;
recover datafile 7;
alter database open;}
SQL窗口查询数据库实例状态:
select status from v$instance;
3.1.3、表空间恢复
在表空间LOG中创建测试表 TZQ_TEST_001 :
CREATE TABLE TZQ_TEST_001 (
ID NUMBER,
NAME VARCHAR2(100)
) TABLESPACE LOG;
INSERT INTO TZQ_TEST_001 SELECT 1,'tzq001' FROM dual;
COMMIT;
删除数据文件:
查询恢复文件信息:
select * from v$recover_file;
恢复表空间
RMAN窗口下执行:
run{
sql 'alter database datafile 7 offline';
restore tablespace "LOG";
recover tablespace "LOG";
sql 'alter database datafile 7 online';
alter database open;
}
run{
restore datafile 'D:\ORACLE_DATABASE\ORADATA\TZQ\USERS01.DBF';
recover datafile 'D:\ORACLE_DATABASE\ORADATA\TZQ\USERS01.DBF';
alter database open;
}
run{
restore datafile 'D:\ORACLE_DATABASE\ORADATA\TZQ\TZQ.DBF';
recover datafile 'D:\ORACLE_DATABASE\ORADATA\TZQ\TZQ.DBF';
alter database open;
}
3.1.4、全库恢复
sqlplus / as sysdba
shutdown immediate;
startup mount;
全库恢复脚本:
run{
restore database;
recover database;
alter database open;}
执行情况:
C:\Windows\System32>rman target /
恢复管理器: Release 11.2.0.4.0 - Production on 星期日 9月 17 23:41:58 2023
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: TZQ (DBID=1419139265, 未打开)
RMAN> run{restore database;recover database;alter database open;}
启动 restore 于 17-9月 -23
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=119 设备类型=DISK
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 D:\ORACLE_DATABASE\ORADATA\TZQ\SYSTEM01.DBF
通道 ORA_DISK_1: 将数据文件 00002 还原到 D:\ORACLE_DATABASE\ORADATA\TZQ\SYSAUX01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 D:\ORACLE_DATABASE\ORADATA\TZQ\UNDOTBS01.DBF
通道 ORA_DISK_1: 将数据文件 00004 还原到 D:\ORACLE_DATABASE\ORADATA\TZQ\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 D:\ORACLE_DATABASE\ORADATA\TZQ\LOG.DBF
通道 ORA_DISK_1: 将数据文件 00006 还原到 D:\ORACLE_DATABASE\ORADATA\TZQ\TZQ.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\ORACLE_DATABASE\BACKUP\RMAN\DB_TZQ_20230917_0826KI13_1_1.BAK
通道 ORA_DISK_1: 段句柄 = D:\ORACLE_DATABASE\BACKUP\RMAN\DB_TZQ_20230917_0826KI13_1_1.BAK 标记 = TAG20230917T214611
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:03
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00007 还原到 D:\ORACLE_DATABASE\ORADATA\LOG2.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\ORACLE_DATABASE\BACKUP\RMAN\LOG2_TZQ_20230917_0D26KK4S_1_1.BAK
通道 ORA_DISK_1: 段句柄 = D:\ORACLE_DATABASE\BACKUP\RMAN\LOG2_TZQ_20230917_0D26KK4S_1_1.BAK 标记 = TAG20230917T222220
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:07
完成 restore 于 17-9月 -23
启动 recover 于 17-9月 -23
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始还原增量数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
数据文件 00001 的还原目标: D:\ORACLE_DATABASE\ORADATA\TZQ\SYSTEM01.DBF
数据文件 00002 的还原目标: D:\ORACLE_DATABASE\ORADATA\TZQ\SYSAUX01.DBF
数据文件 00003 的还原目标: D:\ORACLE_DATABASE\ORADATA\TZQ\UNDOTBS01.DBF
数据文件 00004 的还原目标: D:\ORACLE_DATABASE\ORADATA\TZQ\USERS01.DBF
数据文件 00005 的还原目标: D:\ORACLE_DATABASE\ORADATA\TZQ\LOG.DBF
数据文件 00006 的还原目标: D:\ORACLE_DATABASE\ORADATA\TZQ\TZQ.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\ORACLE_DATABASE\BACKUP\RMAN\DB_TZQ_20230917_0A26KJ7J_1_1.BAK
通道 ORA_DISK_1: 段句柄 = D:\ORACLE_DATABASE\BACKUP\RMAN\DB_TZQ_20230917_0A26KJ7J_1_1.BAK 标记 = TAG20230917T220643
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
正在开始介质的恢复
介质恢复完成, 用时: 00:00:01
完成 recover 于 17-9月 -23
数据库已打开
RMAN>
3.2 不完全恢复
- 说明:考虑基于时间点和SCN的不完全恢复场景
3.2.1、基于时间点
- 场景:数据库在T0时间点做了全备,T1时间点由于误操作update了整张表,此时归档日志连续并完整,可以通过RMAN基于时间点不完全恢复,将数据库恢复到T1时间点(不包含T1)之前。
解决方法: 通过指定时间执行RMAN不完全恢复
T0时间点RMAN全备
RMAN窗口下执行:
backup as compressed backupset database format 'D:/oracle_database/backup/rman/db_%d_%T_%U.bak';
创建测试表:
CREATE TABLE TZQ_TEST_002 (
ID NUMBER,
NAME VARCHAR2(100)
) TABLESPACE LOG;
DECLARE
v_num NUMBER;
BEGIN
FOR v_num IN 1 .. 10000 LOOP
INSERT INTO TZQ_TEST_002 VALUES (v_num,'tzq'||v_num);
END LOOP;
COMMIT;
END;
/
SELECT * FROM TZQ_TEST_002 ORDER BY 1 DESC;
执行结果:
T1时间点误操作update并提交。
UPDATE TZQ_TEST_002 SET NAME = 'GOD';
COMMIT;
切换日志
alter system switch logfile;
通过RMAN执行不完全恢复,指点时间点到T1之前
restore database until time "to_date('2023-09-17 23:56:49','yyyy-mm-dd hh24:mi:ss')";
recover database until time "to_date('2023-09-17 23:56:49','yyyy‐mm‐dd hh24:mi:ss')";
alter database open resetlogs;
3.2.2、基于日志序列号
- 场景:数据库在T0时间点做了全备,T1时间点创建1张表,T2时间点创建1张表,之后数据文件介质 故障,归档日志文件并不连续,丢失T1、T2之间的日志。
解决方法: 可以通过日志序列号执行不完全恢复,将数据库恢复到T1时间点(包含T1时间点)。
创建测试表
CREATE TABLE t_seq(ID NUMBER);
INSERT INTO t_seq VALUES(1);
COMMIT;
SELECT * FROM t_seq;
切换日志
alter system switch logfile;
查看日志文件
当前归档日志序号是4,包含表t_seq的ddl,dml操作的redo信息。
T2时间点创建表t_seq2
多次切换日志
查看日志文件
其中5、6、7、8包含表t_seq2的ddl、dml redo记录。
模拟介质故障-数据文件丢失
模拟归档日志丢失-日志序号4的文件
数据库启动到mount状态
RMAN还原数据文件
RMAN> restore database;
恢复数据库(应用日志)
RMAN> recover database;
4号日志已丢失,只能恢复到序号3的日志,上述语句是恢复4(不包含4)之前所有的日志。
指定日志序列号再次恢复。
RMAN> recover database until sequence 4;
检验数据
t_seq2已丢失,已恢复到日志序号4之前(1-3),序号4以及之后的数据会丢数据。
3.2.3、基于SCN 恢复
- 场景:数据库在T0时间点做了全备,T1时间点创建1张表T1并插入3条数据,T2时间点误删除表T1。
解决方法: 通过logmnr分析表删除SCN,可用具体SCN执行不完全恢复表。
创建表
T1 SQL> create table tbs (id number);
insert into tbs values(1);
insert into tbs values(2);
insert into tbs values(3);
commit;
alter system switch logfile;
- 查询scn号
SELECT CURRENT_SCN FROM V$DATABASE;
删除表T1
drop table tbs purge;
alter system switch logfile;
select * from tbs;
RMAN恢复数据
SQL> shutdown immediate;
SQL> startup mount
RMAN> restore database until scn 3002178;
RMAN> recover database until scn 3002178;
验证数据
3.3、如何通过RMAN恢复drop、truncate、delete表的数据
3.3.1 drop
创建测试表
创建测试表a1并插入一些数据:
-- 创建表
CREATE TABLE a1 (
id NUMBER,
name VARCHAR2(50)
);
-- 插入数据
INSERT INTO a1 (id, name) VALUES (1, 'John');
INSERT INTO a1 (id, name) VALUES (2, 'Jane');
COMMIT;
使用RMAN备份数据库:
-- 启动RMAN
rman target /
-- 备份数据库
BACKUP DATABASE;
删除表 DROP TABLE a1;
查scn:
恢复到删除之前:
shutdown immediate;
startup mount;
rman恢复:
restore database until scn 4325688;
recover database until scn 4325688;
alter database open resetlogs;
四、熟悉rman的主要命令
- 【说明】
熟悉RMAN主要命令的使用,下面只列举了4个命令,其他命令自行完善
4.1、list
4.1.1、查看备份信息:list backup
查看备份基本都是LIST BACKUP OF 备份项名称[别名];
list backup
4.1.2、列出过期备份:list expired backup;
list expired backup;
4.1.3、列出所有数据文件的备份集:list backup of database;
list backup of database;
4.1.4、列出特定表空间的所有数据文件备份集:list backup of tablespace “LOG”;
list backup of tablespace "LOG";
4.1.5、列出控制文件备份集:list backup of controlfile;
list backup of controlfile;
4.1.6、列出归档日志备份集详细信息:list backup of archivelog all
list backup of archivelog all
4.1.7、按备份类型列出备份:list backup by file;
list backup by file;
按照数据文件备份,归档日志备份,控制文件备份,服务器参数文件备份 列出
其他命令:
list archivelog all; 列出归档日志备份集简要信息
list backup of spfile 列出SPFILE备份集;
list copy of datafile 5 列出数据文件映像副本;
list copy of controlfile 列出控制文件映像副本;
list copy of archivelog all 列出归档日志映像副本;
list incarnation of database 列出对应物/列出数据库副本;
B表示backup
F表示FULL
A表示archive log
0 1表示incremental backup
S说明备份状态(A AVAILABLE X EXPIRED )
4.2、report
用于生成备份和恢复目标的报告。
4.2.1、报告目标数据库的物理结构、数据文件:report schema;
report schema;
4.2.2、报告最近3天没有被备份的数据文件:report need backup days=3;
report need backup days=3;
4.2.3、在USERS表空间上3天未备份的数据文件:report need backup days 3 tablespace users;
RMAN> report need backup days 3 tablespace users; 在USERS表空间上3天未备份的数据文件;
4.2.4、报告恢复数据文件需要的增量备份个数超过3次的数据文件:report need backup incremental 3;
RMAN> report need backup incremental 3; 报告恢复数据文件需要的增量备份个数超过3次的数据文件;
4.2.5、报告备份文件低于2份的所有数据文件:report need backup redundancy 2 database;
- 报告备份文件低于2份的所有数据文件;
- RMAN> report need backup redundancy 2 database;
或者: - RMAN>report need backup redundancy=2;
- RMAN> report need backup redundancy 2 database;
4.2.6、报告文件报表的恢复需要超过6天的归档日志的数据文件:report need backup recovery window of 6 days;
RMAN> report need backup recovery window of 6 days; 报告文件报表的恢复需要超过6天的归档日志的数据文件;
4.2.7、报告数据库所有不可恢复的数据文件:report unrecoverable;
RMAN> report unrecoverable; 报告数据库所有不可恢复的数据文件;
4.2.8、报告备份次数超过2次的陈旧备份:report obsolete redundancy 2;
RMAN> report obsolete redundancy 2; 报告备份次数超过2次的陈旧备份;
4.2.9、报告多余的备份:report obsolete;
RMAN>report obsolete; 报告多余的备份;
4.3、crosscheck
- 用于检查备份集和备份文件的有效性。
4.3.1、核对所有备份集:crosscheck backup;
4.3.2、核对所有数据文件的备份集:crosscheck backup of database
crosscheck backup of database 核对所有数据文件的备份集;
4.3.3、核对特定表空间的备份集:crosscheck backup of tablespace users;
crosscheck backup of tablespace users 核对特定表空间的备份集;
4.3.4、核对特定数据文件的备份集:crosscheck backup of datafile 4;
crosscheck backup of datafile 4 核对特定数据文件的备份集;
4.3.5、核对控制文件的备份集:crosscheck backup of controlfile;
crosscheck backup of controlfile 核对控制文件的备份集;
4.3.6、核对SPFILE的备份集:crosscheck backup of spfile;
crosscheck backup of spfile 核对SPFILE的备份集;
4.3.7、核对归档日志的备份集:crosscheck backup of archivelog sequence 3;
crosscheck backup of archivelog sequence 3 核对归档日志的备份集
4.3.8、核对所有映像副本:crosscheck copy;
crosscheck copy 核对所有映像副本;
4.3.9、核对所有数据文件的映像副本:crosscheck copy of database;
crosscheck copy of database 核对所有数据文件的映像副本;
4.3.10、核对特定表空间的映像副本:crosscheck copy of tablespace users;
crosscheck copy of tablespace users 核对特定表空间的映像副本;
4.3.11、核对特定数据文件的映像副本:crosscheck copy of datafile 6;
crosscheck copy of datafile 6 核对特定数据文件的映像副本;
4.3.12、核对归档日志的映像副本:crosscheck copy of archivelog sequence 4;
crosscheck copy of archivelog sequence 4 核对归档日志的映像副本;
4.3.13、核对控制文件的映像副本:crosscheck copy of controlfile;
crosscheck copy of controlfile 核对控制文件的映像副本;
4.4、configure
- 用于配置RMAN的参数和选项
show all
show all
4.4.1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
是用来决定那些备份不再需要了,它一共有三种可选项,分别是:
i. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
ii. CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
iii. CONFIGURE RETENTION POLICY TO NONE;
第一种recover window是保持所有足够的备份,可以将数据库系统恢复到最近七天内的任意时刻。任何超过最近七天的数据库备份将被标记为obsolete。
第二种redundancy 是为了保持可以恢复的最新的5份数据库备份,任何超过最新5份的备份都将被标记为redundancy。它的默认值是1份。
第三种不需要保持策略,clear将恢复回默认的保持策略。
一般最安全的方法是采用第二种保持策略。
4.4.2、CONFIGURE BACKUP OPTIMIZATION OFF;
默认值为关闭,如果打开,rman将对备份的数据文件及归档等文件进行一种优化的算法。
4.4.3、CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
是指定所有I/O操作的设备类型是硬盘或者磁带,默认值是硬盘。
磁带的设置是CONFIGURE DEFAULT DEVICE TYPE TO SBT;
4.4.4、CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
强制数据库在备份文件或者执行改变数据库结构的命令之后将控制文件自动备份,默认值为关闭。这样可以避免控制文件和catalog丢失后,控制文件仍然可以恢复。
4.4.5、CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’;
是配置控制文件的备份路径和备份格式。
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘D:/oracle_database/backup/rman/%F’;
4.4.6、CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
是配置数据库设备类型的并行度。
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
4.4.7、CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
是配置数据库的每次备份的copy数量,oracle的每一次备份都可以有多份完全相同的拷贝。
4.4.8、CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
是设置数据库的归档日志的存放设备类型。
4.4.9、CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘D:/oracle_database/backup/rman/snapcf_test.f’;
是配置控制文件的快照文件的存放路径和文件名,这个快照文件是在备份期间产生的,用于控制文件的读一致性。
4.4.10、CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘D:/oracle_database/backup/rman/%U_%D_%T’;
是配置备份文件的备份路径和备份格式。
4.5、delete
4.5.1、删除陈旧备份
当使用 RMAN 执行备份操作时,RMAN 会根据备份冗余策略确定陈旧备份。
RMAN> delete obsolete;
4.5.2、其他删除
4.5.2.1、删除 EXPIRED 副本
RMAN> delete expired copy;
4.5.2.2、删除特定备份集
RMAN> delete backupset 19;
4.5.2.3、删除特定备份片
RMAN> delete backuppiece ‘d:\backup\DEMO_19.bak’;
4.5.2.4、删除所有备份集
RMAN> delete backup;
4.5.2.5、删除特定映像副本
RMAN> delete datafilecopy ‘d:\backup\DEMO_19.bak’;
4.5.2.6、删除所有映像副本
RMAN> delete copy;
4.5.2.7、在备份后删除输入对象
RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ‘‘d:\backup%u.bak’’ delete input;
4.5.2.8、删除 EXPIRED 备份
执行 crosscheck 命令核对备份集,如果备份集丢失或者损坏,那么会将该备份集标记为 EXPIRED 状态。为了删除相应的备份记录,可以执行 delete expired backup 命令。
RMAN> delete expired backup;
4.5.3、删除所有备份集(不提示)
RMAN下执行:
delete noprompt backup ;
或者
delete noprompt backupset;
4.6、RESTORE命令:
用于恢复备份集或备份文件。
4.6.1、数据库恢复
RMAN> restore/revover database ;
4.6.2、表空间恢复
RMAN> restore/revover tablespace xx ;
4.6.3、只读表空间的恢复
默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原操作时候还原 只读的数据文件。
要在完全恢复期间还原只读的数据文件,就必须在RESTORE命令中使用CHECK READONLY
参数:
RMAN> RESTORE DATABASE CHECK READONLY;
4.6.4、恢复 SPFILE/控制文件
使用自动备份恢复SPFILE/控制文件
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
RMAN> restore spfile/controlfile to ‘/xx/xx’ from autobackup ;
或
RMAN> restore controlfile from ‘/arch/ct_c-2347671489-20060630-00’;
联机状态:目标数据库MOUNT或OPEN
RMAN> restore controlfile to ‘d:\temp\control01.ctl’;
4.6.5、归档重做日志的还原
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
五、如何配置catalog以及使用
- RMAN备份有两种存放方法,一种是nocatalog(即存放在控制文件中),另一种是catalog。catalog是一个恢复目录,存放rman的备份信息。
- “catalog"是一个命令,用于将备份信息和恢复目录信息注册到一个特定的数据库中。这个数据库被称为"RMAN目录数据库"或"RMAN目录”。
- RMAN目录数据库是一个独立的数据库,用于存储备份和恢复的元数据信息。它记录了RMAN备份的详细信息,包括备份集、备份片、备份集的组成、备份的时间、备份的位置等。此外,RMAN目录还记录了数据库的结构信息,包括数据文件、控制文件、归档日志等。
- 通过将备份信息和恢复目录信息注册到RMAN目录数据库中,可以实现以下功能:
- 管理多个数据库的备份和恢复:RMAN目录数据库可以管理多个数据库的备份和恢复信息,提供一个集中的管理和查询界面。
- 跨数据库的备份和恢复:通过在RMAN目录数据库中注册备份信息,可以在不同的数据库之间共享备份集,实现跨数据库的备份和恢复。
- 跨时间点的恢复:RMAN目录数据库记录了备份的时间信息,可以根据需要选择不同时间点的备份进行恢复,以实现精确的恢复需求。
- 监控和报告:RMAN目录数据库可以提供备份和恢复的监控和报告功能,包括备份的成功与否、备份的大小、备份的时长等信息。
catalog配置的步骤:
- 建立一个单独的数据库(这里以prod为例)。我们要对orcl库进行备份。即orcl是目标数据库,prod是恢复目录数据库。
- 在prod库里建立表空间。
create tablespace rc_data datafile '/u01/app/oracle/oradata/prod/rc_data01.dbf' size 100m autoextend on next 10m maxsize unlimited;
- 创建一个用户,使用rc_data为默认表空间,授予它recovery_catalog_owner权限
create user rc_admin identified by rc_admin default tablespace rc_data;
grant connect,resource,recovery_catalog_owner to rc_admin;
- 在Rman中创建catalog
Rman catalog rc_admin/rc_admin@prod
create catalog tablespace rc_data;
- 注册
Rman target sys/oracle@orcl catalog rc_admin/rc_admin@prod
register database;
resync catalog;
- 取消catalog
Rman target sys/oracle@orcl catalog rc_admin/rc_admin@prod
unregister database;
5.1、手工建库(也可以dbca建库)
5.1.1、官档的建库脚本示例
CREATE DATABASE mynewdb USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password LOGFILE
GROUP 1 (
'/u01/logs/my/redo01a.log'
,'/u02/logs/my/redo01b.log'
) SIZE 100 M BLOCKSIZE 512 ,
GROUP 2 (
'/u01/logs/my/redo02a.log'
,'/u02/logs/my/redo02b.log'
) SIZE 100 M BLOCKSIZE 512 ,
GROUP 3 (
'/u01/logs/my/redo03a.log'
,'/u02/logs/my/redo03b.log'
) SIZE 100 M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
5.1.2、创建建库脚本
CREATE DATABASE mynewdb USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY oracle LOGFILE
GROUP 1 (
'/u01/redolog/redo01a.log'
,'/u01/redolog/redo01b.log'
) SIZE 100 M BLOCKSIZE 512 ,
GROUP 2 (
'/u01/redolog/redo02a.log'
,'/u01/redolog/redo02b.log'
) SIZE 100 M BLOCKSIZE 512 ,
GROUP 3 (
'/u01/redolog/redo03a.log'
,'/u01/redolog/redo03b.log'
) SIZE 100 M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET WE8MSWIN1252
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
5.1.3、执行脚本建库
5.1.3.1、声明ORACLE_SID变量
[oracle@localhost ~]$ export ORACLE_SID=catdb
5.1.3.2、编辑初始化参数文件
vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora
添加以下
DB_NAME=catdb
CONTROL_FILES=('/u01/app/oracle/oradata/mynewdb/control01.ctl','/u01/app/oracle/oradata/mynewdb/control02.ctl','/u01/app/oracle/oradata/mynewdb/c
ontrol03.ctl')
MEMORY_TARGET=1G
5.1.3.3、创建服务器参数文件并启动实例
创建服务器参数文件,以服务器参数文件启动数据库
SQL> create spfile from pfile;
SQL> startup nomount
5.1.3.4、运行建库脚本建库
SQL> @/home/oracle/create_db.sql
Database created.
5.1.3.5、然后执行以下脚本:
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
conn system/oracle
@?/sqlplus/admin/pupbld.sql
5.1.3.6、配置tnsnames.ora
CATDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = catdb) ) )
5.2、配置数据库
dbca或者手工建库之后,配置数据库EMREP
记得要配置监听之后才可以使目录库EMREP和目标库连接
5.2.1、创建表空间
SYS@EMREP>create tablespace rmantbs datafile '/u01/app/oracle/oradata/EMREP/rmantbs.dbf' size 50m autoextend on;
5.2.2、创建用户
SYS@EMREP>create user rman identified by rman default tablespace rmantbs;
SYS@EMREP>grant connect,resource,recovery_catalog_owner to rman;
5.2.3、创建CATALOG
rman catalog rman/rman@emrep
RMAN> CREATE CATALOG;
目标数据库注册到CATALOG在目标数据库执行
rman target / catalog rman/rman@emrep
REGISTER DATABASE;
查看 catalog 库中注册的目标库信息
5.3、创建脚本
首先连接到目标数据库和恢复目录。
5.3.1、创建脚本
RMAN> create global script rmanbak{
backup database format '/u01/backup/rman/db_%U.bak'
include current controlfile plus archivelog format '/u01/backup/rman/ar_%U.bak';
}
查看脚本名称
RMAN> list script names;
查看脚本内容
RMAN> print script rmanbak;
执行脚本
RMAN> run{
execute script rmanbak;
}
5.4、更新恢复目录
比如RMAN恢复目录版本是10g,那么11g版本的RMAN客户端需要升级更新本地包和模式。 如果你10gR1版本之前创建的恢复目录, 并且RECOVERY_CATALOG_OWNER角色不包含CREATE TYPE权
限,那么需要赋予CREATE TYPE的权限给恢复目录所有者。
SQL> GRANT CREATE TYPE TO rman;
5.5、升级catalog(两次确认,敲两次):
RMAN> upgrade catalog;
RMAN> upgrade catalog;
六、如何通过RMAN复制数据库
复制脚本
#!/bin/ksh
# script_name duplicate_Date.sh
#设置环境变量:指定Oracle数据库的安装目录。
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=test1
export PATH=$PATH:$ORACLE_HOME/bin
#启动RMAN命令行工具:
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman <<_eof
#链接目标和辅助数据库
connect target SYS/Enmo_oracle@jgjtestbak_test1
connect auxiliary SYS/Enmo_oracle@test1_jgjtestbak
#执行rman命令块
run {
#allocate channel:为备份和恢复操作分配通道,这里分别分配了4个磁盘通道和4个辅助数据库通道
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate auxiliary channel s1 type disk;
allocate auxiliary channel s2 type disk;
allocate auxiliary channel s3 type disk;
allocate auxiliary channel s4 type disk;
#执行数据库的复制操作,将目标数据库复制为备用数据库。
duplicate target database
#指定复制操作的类型为备用数据库。在复制过程中执行恢复操作。
for standby
dorecover
#从活动数据库进行复制。不检查文件名。
from active database
nofilenamecheck;
#在通道上执行SQL语句,这里分别执行了两个SQL语句,一个是在目标数据库通道上执行的,一个是在辅助数据库通道上执行的。
#sql channel c1 "alter system archive log current";
sql channel s1 "alter database recover managed standby database using current logfile
disconnect";
}
_eof
#如果RMAN命令执行失败或成功,则将信息写入到指定的文件中。
if [ $? ‐ne 0 ]; then
echo "failed" >
/u01/app/oracle/product/11.2.0.4/dbhome_1/duplicate_20211207164127.result
else
echo "succeed" >
/u01/app/oracle/product/11.2.0.4/dbhome_1/duplicate_20211207164127.result
fi
七、如何通过rman检查坏块
7.1、什么是坏块
- Oracle数据库出现坏块现象是指:在Oracle数据库的一个或多个数据块(一个数据块的容量在创建数据库时由db_block_size参数指定,缺省为8K)内出现内容混乱的现象。由于正常的数据块都有固定的合法内容格式,坏块的出现,导致数据库进程无法正常解析数据块的内容,进而使数据库进程报错乃至挂起,并级联导致整个数据库实例出现异常。
坏块分类
- 物理坏块:也可以称为介质坏块,指的是块格式本身是坏的,块内的数据没有任何意义。
- 逻辑坏块:指的是块内的数据在逻辑是存在问题。比如说索引块的索引值没有按从小到大排列。
物理坏块一般是由于内存问题、OS问题、IO子系统问题和硬件引起,逻辑坏块一般是是由于OracleBug等原因引起。
7.2\如何检查
validate #仅仅支持11G和更高版本,低版本用下面两个
backup …validate
restore …validate
验证控制文件和数据文件
RMAN> validate database;
验证控制文件
RMAN> validate current controlfile;
验证归档重做日志文件
RMAN> validate archivelog all;
检查和更新RMAN对于归档日志的备份状态
7.3、如何处理
来查坏块:
select * from v$database_block_corruption;
使用命令进行恢复,数据库可以在mount或者open状态下都可以:
RMAN> recover corruption list;
也可指定恢复,一般推荐前者,可以自动清理v$database_block_corruption视图:
RMAN> recover datafile 4 block 20;
八、了解TTS(Transportable TableSpace)
- 传输表空间技术始于Oracle9i,它的原理是将元数据和数据文件从一个数据库迁移到另一个数据库,而且不需要原库和目标库具有相同的块大小,相比较导入导出工具,传输表空间只会复制包含实际数据的数据库文件到目标数据库的指定位置,所以会节省很多时间,传输表空间也是数据库之间传输大数据的一种方法。理想情况下,Transportable Tablespace可以实现近似网络直传的速率特点。
- 传统的TTS有三个层面基础限制,分别为: 表空间内容、self contained。我们一次性导出的表空间(一个或者多个),不能在其他 表空间中存在依赖对象。比如,我们常常将一个数据表数据和索引分布在不同的表空间上,如果我们使用Transportable Tablespace,就要求必须将这些表空间一次性全部导出;
- 检查兼容
Source和Target DB的Character Set、National Character Set必须完全相同; 操作系统Source Target DB要求兼容。注意:在10g以上版本,这个限制已经取消; 作为先决条件,首选确定Source数据库的字符集信息。
SQL> select * from v$version;
九、了解RMAN Data Recovery Advisor(DRA)
- Data Recovery Advisor(DRA)是Oracle数据库的一个内置工具,用于发现和修复数据错误和损坏。它与Oracle的备份还原工具RMAN紧密结合使用。
- DRA可以自动检查数据库状态并收集数据,一旦发现错误,就会提供修复建议和相应的修复语句。它可以自动修复一些常见的问题,使修复过程更加简化和自动化。
- DRA可以在两种情况下工作。一种是在数据库启动时遇到障碍,比如启动过程报错。另一种是在数据库运行时遇到障碍,比如数据文件被意外删除。
- DRA提供了用户界面和命令行两种方式进行操作。在Oracle Enterprise Manager(OEM)中,我们可以通过点击修复链接来查看和解决问题。在命令行中,我们可以使用RMAN命令来处理修复操作。
十、11g、12c中RMAN的新特性
10.1、11g中RMAN的新特性
- 自定义archivelog删除策略
- 直接通过网络复制数据库
- 并行备份大文件
- RMAN Catalog管理性增强
10.2、12c中RMAN的新特性
10.2.1、新增用户
- Oracle 12c中引入了3个新的系统用户SYSBACKUP、SYSDG和SYSKM,其中,
- SYSKM可以执行与透明数据加密密钥(Transparent Data Encryption keystore)相关的操作。
- SYSDG可以在DGMGRL或命令行接口里执行与DG(Data Guard)相关的操作。
- SYSBACKUP特权用来在RMAN或SQL*Plus中执行备份和恢复命令。
10.2.2、可以直接在RMAN中执行SQL语句
- 在Oracle 12c中,可以在不需要SQL前缀的情况下在RMAN中执行任何SQL和PL/SQL命令。当然,原来的加SQL前缀的方式依然有效。
11g:
12c:
10.2.3、在RMAN中提供了表级别恢复(RECOVER TABLE)
- 在Oracle 12c中,在发生drop或truncate的情况下,可以从RMAN备份种将一个特定的表或分区恢复到某个时间点、SCN或归档序列号,并且可以有下面的选择:
- 使用REMAP选项将表恢复为一个新表或者分区中,也可以恢复到其他用户中。
- 只生成一个需要被恢复表的expdp格式的dump文件,选择后期再进行恢复。
Recover Table新特性是利用创建辅助临时实例加数据泵工具来实现的。
10.2.4、RMAN自动恢复到REDO终点的步骤简化
- 在Oracle 12.2之前,当需要恢复数据库到某个时间点的时候,需要确定SCN,或者日志序列号,或者一个时间点,以便尽可能多的应用归档日志,进而尽可能多的恢复数据。从12.2开始,RMAN新增参数“UNTIL AVALIABLE REDO”,语法如下:
RMAN> RECOVER DATABASE UNTIL AVALIABLE REDO;
- RMAN将会根据控制文件信息和归档日志、线日志、归档日志备份集的物理可用性,将数据库恢复到最后一个可用的归档日志。所以在进行恢复的时候,可以不需要指定SCN,或者时间或者日志序列号。需要注意的是,数据文件仍然需要在一致的情况下,数据库才能打开。
需要注意的是,这些新特性有如下的限制条件:- 不能针对恢复数据文件或者表空间使用这个命令。
- 不能针对恢复PDB使用这个命令。
- 只能针对全库恢复使用这个命令。
10.2.5、通过网络远程恢复数据库(Restore/Recover from Service)
- 在Oracle 12c中,可以在主数据库和备用数据库之间用一个服务名重新获得或恢复数据文件、控制文件、参数文件(SPFILE)、表空间或整个数据库。
- 当主数据库和备用数据库之间存在相当大的差异时,不再需要复杂的前滚流程来填补它们之间的差异。RMAN能够通过网络执行备用恢复以进行增量备份,并且可以将它们应用到物理备用数据库。
十一、编写RMAN备份的常用脚本
#!/bin/sh
source ~/.bash_profile
#获取当前日期和时间,赋值给backtime变量
backtime=`date +"20%y%m%d%H%M%S"`
#启动了RMAN工具,重定向log文件位置
rman target / log=/u01/backup/logs/full_backup_$backtime.log<<EOF
#定义RMAN的备份操作块:分配c1和c2通道>检查备份集和归档日志的有效性>切换归档日志>删除过期的备份集>删除过时的磁盘备份>备份数据库>备份当前的控制文件>切换日志>备份所有的归档日志>检查归档日志>再次删除过时的磁盘备份>释放通道
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
crosscheck backup;
crosscheck archivelog all;
sql 'alter system archive log current';
delete noprompt expired backup;
delete noprompt obsolete device type disk;
backup database format '/u01/backup/rman/db_%d_%T_%U';
backup current controlfile format ''/u01/backup/rman/cntrl_%s_%p_%s';
sql 'alter system archive log current';
backup archivelog all format '/u01/backup/rman/archlog_%d_%T_%U';
crosscheck archivelog all;
crosscheck backup;
delete noprompt obsolete device type disk;
release channel c1;
release channel c2;
}
#退出rman
exit;
#脚本的结束标志
EOF
十二、12 参考文档
- 以下列举了一些MOS的文章,可以在MOS上搜索RMAN关键字。该章学习期间,阅读或则模拟大量MOS文章中的内容和操作。
How To Check (Validate) If RMAN Backup(s) Are Good (文档 ID 338607.1)
Checklist for an RMAN Restore (文档 ID 1554636.1)
RMAN Restore Performance on non-ASM filesystems (文档 ID 1561238.1)
RMAN Restore Performance (文档 ID 740911.1)
How to Move/Restore DB to New Host and File System using RMAN (文档 ID 1338193.1)
How to transfer backups from ASM to filesystem when restoring to a new host (文档 ID 345134.1)
How to Recover From a DROP / TRUNCATE / DELETE TABLE with RMAN (文档 ID 223543.1)
How to Move/Restore DB to New Host and File System using RMAN (文档 ID 1338193.1)
How to recover a skipped tablespace after an incomplete recovery? (文档 ID 1561645.1)
How To Restore From An Old Backupset Using RMAN? (文档 ID 209214.1)