DBLOG
» WTF
Toggle navigation
DBLOG
主页
HCCDE
About Me
归档
标签
3、RMAN恢复-1
无
2025-07-18 16:27:19
50
0
0
admin
[TOC] #1、Oracle RAMN基础知识 ##1.1、RMAN作用与体系架构 ``` RMAN(Recovery Manager)是Oracle自带的备份恢复管理工具,用来备份恢复数据库的数据文件、归档日志、控制文件以及参数文件及整个数据库的备份恢复工具,同时也可以用来执行完全备份恢复、不完全备份恢复,通过计划任务实现自动的定时的最优化的备份恢复方案。 RMAN可以实现基于数据库级别、表空间级别、文件级别完全恢复和不完全恢复 RMAN由两部分组成,可执行文件和recover.bsg 文件,recover.bsg是一个库文件,可执行文件从recover.bsq文件中提取代码来创建在目标数据库上执行的pl/sql调用。 RMAN的主要作用 可以实现自动备份和恢复 方便有效的备份归档日志 自动检测新的数据文件 支持增量备份 最大限度的减少备份和恢复的错误 减少恢复时间 在热备中不会产生redo日志 自动检测损坏的数据块,并跳过 并行备份恢复 在线备份不影响业务的正常运转 ``` <img src="/api/file/getImage?fileId=65f326773c9b9909f2000032" width="500px" /> <br> ###1.1.1、RMAN的结构 ``` Rman工具 它是一服务器管理恢复工具(server managed recover 简写smr),主要是建立Oracle数据库的客户端连接,达到有效的访问并对数据库执行备份恢复操作,通过运行rman这个命令来启动rman工具,用于备份与恢复的接口。 服务进程 Rman 的服务进程是一个后台进程,用于与rman工具与数据库之间的通信,也用于rman 工具与磁盘,磁带等i/o 设置之间的通信,服务进程负责备份与恢复的所有工作,在如下两种情况将产生一个服务进程(当连接到目标数据库、分配一个新的通道) 通道 通道是服务进程与i/o 设备之间读写的途径,通道将对应一个服务进程,在分配通道时需要考虑创建的文件的大小、数据库文件最大的读速率、最大i/o设备的类型、i/o并发处理的能力、i/0 设备的打开文件数目等因素;通过类型可以是disk、tape. 目标数据库 就是rman 进行备份与恢复的数据库,rman可以备份数据文件、控制文件、归档日志、spfile(不能备份联机日志、pfile、密码文件) 恢复目录(catalog) 用来保存备份与恢复信息的一个数据库,不建议创建在目标数据库上,利用恢复目录可以同时管理多个目标数据库,存储更多的备份信息,可以存储备份脚本。如果不采用恢复目录,可以采用控制文件来代替恢复目录,在Oracle9i之后的版本因为控制文件具有自动备份的功能,利用控制文件很大程度上可以取代恢复目录。 媒体介质管理层 media management layer(mml)是第三方工具,用于管理对磁带的读写与文件的跟踪管理。如果你想直接通过rman 备份到磁带上,就必须配置介质管理层,介质管理层的工具(如:NBU备份软件)可以调用rman来进行备份与恢复。 备份、备份集、备份片 当发出backup命令的时候,rman将创建一个完成的备份,包含一个到多个备份集,备份集是一个逻辑结构,包含一组的物理文件,这些物理文件就是对应的备份片。备份片是最基本的物理结构,可以产生在磁盘或者磁带上,可以包含目标数据库的数据文件、控制文件、归档日志、spfile文件 备份集与备份片有如下规定 (1)一个数据文件不能跨越一个备份集,但是能跨多个越备份片。 (2)数据文件、控制文件能保存在同样的备份集上,但是不能与归档日志保存在同样的备份集上。 Rman资料库 Rman资料库(rman repository,rman对应的表)存储了目标数据库的元数据(metadata)和使用rman备份的备份集信息,例如备份集的位置,备份集内包括的备份片、备份集的状态等。Rman进行备份和恢复操作都要访问rman资料库。 ``` ##1.2、RMAN备份术语 ``` ``` ##1.3、RMAN备份策略类型 ``` 备份策略可包括: 整个数据库(整体) 部分数据库(部分) 备份类型可包括: 所选文件中的所有数据块(完全备份) 只限自上次备份以来更改过的信息(增量备份) 累积(自上次0级备份以来进行的更改) 差异(自上次增量备份以来进行的更改) 备份模式可以为: 脱机(一致备份或冷备份) 联机(非一致备份或热备份) 完全备份:包含所有已使用的数据文件块, 0 级增量备份:等同于标记为0级的完全备份。 1级累积增量备份:只包含自上次0级增量备份以来修改过的块 1级差异增量备份:只包含自上次增量备份以来修改过的块。 RMAN备份方式建议: 完全备份+用于恢复的每日归档日志 备份可存储为: 映像副本:操作系统格式的数据文件和日志文件副本 备份集:Oracle专有格式的二进制压缩文件 rman使用方式 命令行 rman target / CONFIGURE ... BACKUP DATABASE PLUS ARCHIVELOG; --备份所有数据文件、控制文件、归档文件、spfile 图形界面EM EMCC ``` ##1.4、RMAN内存缓冲技术 ``` RMAN的备份是基于数据块的备份,每个数据块从磁盘读入内存时都会发生内存到内存的写操作在这个操作期间会检查数据块的损坏。 RMAN基于备份算法规则来编译要备份的文件列表,RMAN会在内存中创建一些缓冲区,然后通过这些缓冲区将数据块写入到备份中。 内存缓冲区分为输入缓冲区和输出缓冲区: 输入缓冲区input buffer填充从备份文件中读取数据块 输出缓冲区outputbuffer则在执行内存对内存的写操作时填充需要备份的数据块,一旦输出缓冲区被填满,输出缓冲区的内容就会被写入到备份位置。 一旦所有文件已通过内存缓冲区过滤,就完成了备份片,同时RMAN会在目标数据库控制文件中写入备份片的完成时间和备份片的名称。 ``` ###1.4.1、RMAN的内存利用 ``` RAMN内存的利用与PGA的总体大小有关(有时与SGA有关) 在磁盘上备份会使用PGA内存空间作为备份缓冲如果操作系统没有配置本地异步1/o,则可以利用3的输入缓冲。 DBWR_IO_SLAVES参数使用I/O子进程来填充内存中 如果设置DBWR_IO_SLAVES参数为任意的非零值则RMAN会自动分配4个使用I/0子进程来协调输入缓冲区中数据块加载, show parameter slaves ``` ###1.4.2、查看RMAN备份输入缓冲区的信息: ``` $ rman target / RMAN> backup database; -- 查看缓冲区信息 SELECT set_count, device_type, TYPE, filename, buffer_size, buffer_count, open_time, close_time FROM v$backup_async_io ORDER BY set_count, TYPE, open_time, close_time; ``` ###1.4.3、RMAN在备份时会生成一个到目标数据库的客户端连接,并创建两个服务器进程 ``` 主要进程:生成对sys用户中的数据包调用,以执行备份和恢复操作,该进程会在备份和还原期间协调信道进程的工作。 次要进程(或影子进程):轮询RMAN中的所有长事务并在内部记录信息, ``` ###1.4.4、RMAN空块压缩 ``` RMAN访问数据块时可以选择空块压缩,删除从来没有使用过的数据块,并在执行内存对内存的写操作是丢弃这些数据块,因此我们只需要备份使用过的数据块。 ``` ###1.4.5、未使用的块压缩 ``` 未初始化的块不会备份,在10.2.0.3版本后,即使是使用过的块,如果是空块也不会被备份 ``` ###1.4.6、块级备份的性能 ``` RMAN备份期间不需要启动热备份模式,RMAN对数据块的访问允许RMAN与写“脏”缓冲区的DBWR进程协调,并且在将这个数据块读入内存以前它可以等待直至数据块达到一致。因此,数据块不会转储为重做,并且备份中的数据块总是一致的。 ``` #2、RMAN Catalog恢复目录管理 ##2.1、NoCatalog ``` nocatalog方式 就是用controlfile作为catalog每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息。因此,当使用rman nocatalog方式备份时,备份controlfile是非常重要的。 由于nocatalog时利用controlfile存放备份信息,建议将oracle参数文件中的controlfile_record_keep time值加大(缺省为7天)参数在$oracle_home/dbs/initsid.ora中,该参数controlfile_record_keep time设置备份信息保存时间到规定时间就自动清除以前的备份信息。 show parameter control alter system set control_file_record_keep_time=30 scope=both; 查看参数文件配置 SELECT name, value, issys_modifiable FROM v$parameter WHERE name = 'control_file_record_keep_time'; ``` ##2.2、Catalog介绍 ``` Catalog恢复目录存储与RMAN备份相关的元数据。从某种意义上说,恢复目录可以看作是保存RMAN备份和恢复所需的相关信息的副本。 在Oracle数据库中,我们可以在用户模式下创建恢复目录。这个恢复目录仅仅是一些数据包、表、索引和视图。RMAN中的`RESYNC CATALOG`命令会使得目标数据库控制文件中的内容刷新这些表中的数据。然而,与控制文件不同的是,恢复目录可以包含企业中所有数据库的信息,而控制文件只包含关于它自己的数据库的信息。 ``` ##2.3、Catalog恢复目录的配置过程 ``` 生产环境建议cataloq不要与自己备份的数据库放在一起,单独创建一个数据库用于cataloa备份所有的数据库 01. 创建catalog所需的表空间: CREATE TABLESPACE rman_tbs DATAFILE '/oradata/fgzcdb/rman.dbf' SIZE 100M; 02. 创建RMAN用户并授权: CREATE USER rman IDENTIFIED BY rman DEFAULT TABLESPACE rman_tbs QUOTA UNLIMITED ON rman_tbs; GRANT recovery_catalog_owner TO rman; 03. 创建恢复目录: rman catalog rman/rman RMAN> CREATE CATALOG TABLESPACE rman_tbs; 04.配置目标数据库的tnsnames.ora,添加以下内容: vi $ORCLE_HOME/network/admin/tnsnames.ora rman = (description = (address_list = (address = (protocol = tcp)(host = 192.168.2.82)(port = 1521)) ) (connect_data = (sid = R719CDB) ) ) 05.注册目标数据库 rman target / catalog /rman@rman RMAN> register database; 06.检查catalog恢复目录 RMAN> report schema; RMAN> list backup; SELECT TABLE_NAME FROM USER_TABLES; ``` ##2.4、Catalog恢复目录管理 ``` Catalog恢复目录管理 在恢复目录中添加RMAN备份如果已经在没有恢复目录的情况下执行了RMAN备份,并且希望在后面将这些备份添加到恢复目录,则可以使用CATALOG命令。可以将数据文件副本,备份集片,归档日志备份,甚至整个备份目录添加到目录中。 rman> CATALOG DATAFILECOPY '/backup/fgzcdb/system01.dbf'; rman> CATALOG ARCHIVELOG '/backup/fgzcdb/arch20.arc'; rman> CATALOG BACKUPPIECE '/backup/fgzcdb/backup031.bkp'; rman> CATALOG START WITH '/backup/fazcdb/'; --常用 rman> CATALOG RECOVERY AREA; 在早期的版本中,可以使用DBMS_BACKUP_RESTORE包读取备份片中的文件进行数据恢复。在Oracle 10g及其以后版本中,因为RMAN中有CATALOG WITH START命令,可以实现RMAN备份的加载,所以不需要使用DBMS_BACKUP_RESTORE包处理。 在Oracle 9i及其以前版本中,可能因为没有CATALOG库,控制文件中又没有了备份集信息,需要采用这种方法处理数据文件还原。然后根据实际情况,使用ALTER DATABASE REGISTER LOGFILE添加日志,进行恢复。 ``` ##2.5、对于一些Catalog的一些操作 ###2.5.1、数据库升级、迁移 ``` 升级数据库时,必须同时升级恢复目录,因为数据库版本、RMAN版本和恢复目录版本之间存在严格的规则。用恢复目录用户连接数据库,然后查询RCVER表,就可以看到恢复目录的版本: RMAN@fgzcdb> conn rman/rman; RMAN@fgzcdb> select version from rcver; 只要恢复目录的版本不低于数据库的版本,就能够执行各种操作。因此,如果在同一个恢复目录中存储多个数据库,只需要升级这个恢复目录中的一个数据库。 升级恢复目录很简单,只需要在RMAN里执行UPGRADE CATALOG命令即可。 随后,将升级恢复目录,RMAN会提示用户再次输入UPGRADE CATALOG命令。 rman target sys/oracle@fgzcdb catalog rman/rman@rman RMAN> upgrade catalog; --两次 ``` ###2.5.2、手工重置或删除数据库对应物(reset catalog) ``` 在打开数据库时,如果使用resetlogs参数,就会创建一个新对应物。如果这个操作是在RMAN 中进行,则会正确的更新恢复目录,但是,如果手工执行resetlogs命令(比如sqlplus),就必须在恢复目录中重置数据库对应物。 RMAN> list incarnation; reset database to incarnation 5; ``` ###2.5.3、恢复目录记录的删除 ``` 只有很少的记录会从恢复目录中被删除。如果不加以维护,状态为deleted的备份就会一直驻留在恢复目录中。 为了解决这个问题,Oracle提供了 `$ORACLE_HOME/rdbms/admin/prgmanc.sql` 脚本来删除恢复目录中状态为deleted的所有记录。 可以使用 `RC_DATABASE_INCARNATION` 视图来确定要删除的对应物,记录想要删除的每个对应物的 `DBINC_KEY` 值。然后在 SQL*Plus 中执行 `DELETE` SELECT * FROM RC_DATABASE_INCARNATION; delete from dbinc where dbinc_key=4 ``` ###2.5.4、手工再同步恢复目录 (RESYNC CATALOG) ``` 当 RMAN 使用恢复目录时,它会使用同步进程来确保恢复目录和目标数据库的控制文件一致。 通常情况下,Oracle 在 RMAN 操作(备份和恢复)后会自动再次同步数据库,这样就不必经常手动同步恢复目录。 在 RMAN 中执行以下命令来手动再同步恢复目录: RMAN> RESYNC CATALOG; ``` ###2.5.5、备份恢复目录 ``` 我们可以使用 RMAN 来备份数据库,同样也可以用 RMAN 来备份恢复目录。 如果要备份恢复目录数据库,可以采用 EXP 或 EXPDP 工具将 RMAN用户的表全部导出来。在恢复的时候,可以直接导入数据。 另外,还可以使用以下命令重新注册备份: CATALOG START WITH '/backup/fgzcdb/'; ``` ###2.5.6、在恢复目录中取消数据库注册 ``` 可以在 RMAN 中使用 unregister database 命令来取消数据库注册。例如: RMAN> unregister database; 如果已经删除数据库,并且希望从恢复目录中删除该数据库,则在大多数情况下只需要知道要取消注册的数据库名称。例如: RMAN> unregister database FGZCDB; 当恢复目录中有多个相同名称注册的数据库时,就需要知道需要取消注册的数据库的 DBID。可以在 RUN 代码块中运行 unregister database,同时使用 set dbid 命令。例如: RMAN> RUN { SET DBID 1233116620; unregister database FGZCDB noprompt; } ``` ###2.5.7、删除恢复目录 ``` 使用 DROP CATALOG 命令可以删除恢复目录模式,但这样做会使包含在模式中的所有信息都丢失。例如: RMAN> DROP CATALOG; 执行该命令后,再进入对应的 RMAN 用户,相关表将不再存在。例如: SYS@fqzcdb> conn rman/rman; connected. RMAN@fGzCdb> SELECT TABLE_NAME FROM USER_TABLES; ``` ##2.6、NoCatalog与Catalog恢复注意事项 ``` 当使用 `RMAN NOCATALOG` 恢复时,数据库必须处于“MOUNT”状态。而 Oracle 的启动要求是必须有控制文件。因此,在恢复数据文件之前,必须先恢复控制文件。使用 `RMAN CATALOG` 方式时,可以先启动到 NOMOUNT 状态,然后恢复控制文件;但是使用 `RMAN NOCATALOG` 时,必须先用文件方式恢复控制文件。以下对比了 `RMAN NOCATALOG` 和 `RMAN CATALOG` 恢复时的步骤,以建立正确的备份策略(以下恢复均在在线状态下进行备份): RMAN NOCATALOG 恢复步骤: 1. 建立 Oracle 运行环境(包括 init 或 sp 文件)。 2. 文件方式恢复 controlfile 到 init 文件指定的位置。 3. STARTUP MOUNT。 4. 使用 RMAN,恢复 datafile,recover database。 5. ALTER DATABASE OPEN RESETLOGS。 RMAN CATALOG 恢复步骤: 1. 建立 Oracle 运行环境(包括初始化参数文件或参数文件)。 2. 使用 RMAN, RESTORE DATAFILE 恢复数据文件。 3. 使用 ALTER DATABASE MOUNT 将数据库挂载。 4. 使用 RMAN, restore datafile,recover database恢复数据库。 5. 使用 ALTER DATABASE OPEN RESETLOGS 打开数据库。 ``` #3、RMAN工具登录与使用 ##3.1、rman help ``` TARGET:指定 RMAN 命令的目标数据库。 CATALOG:指定 RMAN 命令要使用的恢复目录。 AUXILIARY:指定 RMAN 命令要使用的辅助实例或数据库。 NOCATALOG:指示 RMAN 不使用恢复目录进行备份和恢复操作。 CMDFILE:指定包含 RMAN 命令的文件。 LOG:指定 RMAN 命令的日志文件。 TRACE:启用 RMAN 命令的跟踪信息。 APPEND:指示 RMAN 将日志追加到现有日志文件中。 DEBUG:启用 RMAN 命令的调试模式。 MSG:指定 RMAN 命令的消息级别。 NOSEND:指示 RMAN 不将备份数据发送到目标位置。 PIPE:指定在备份和恢复期间使用的管道。 SCRIPT:指定包含 RMAN 脚本的文件。 USING:指定 RMAN 命令中要使用的参数值。 TIMEOUT:指定 RMAN 命令的超时值。 CHECKSYNTAX:检查 RMAN 命令的语法是否正确。 ``` ##3.2、连接方法 ``` rman connect target sys/Lc_jcgx0@r719cdb or connect target / or rman target / #操作系统认证 ``` #4、RMAN常用使用 ##4.1、执行OS命令 ``` run {host "pwd";} ``` ##4.2、执行sql ``` 不会显示结果 sql 'select sysdate from dual'; 可以关闭数据库、启动、启动到mount状态 ``` ##4.3、脚本管理 ###4.3.1、操作系统脚本 ``` --保存为.rcv文件 vi backup.rcv CONNECT target /; CONNECT catalog rman/rman@rman; run{ backup spfile; } --调用 rman cmdfile=backup.rcv ``` ###4.3.1、rman内脚本 ####4.3.1.1、创建或替换脚本 ``` rman target / catalog rman/rman@rman create/replace script r719cdb_script comment 'r719cdb' { backup spfile; } ``` ####4.3.1.2、列出脚本 ``` list script names; sql select * from rc_stored_script_line; ``` ####4.3.1.3、查看脚本内容 ``` print script r719cdb_script; ``` ####4.3.1.4、运行脚本 ``` run { execute script r719cdb_script;} ``` ####4.3.1.5、删除脚本 ``` delete script r719cdb_script; ``` ##4.4、备份文件格式 ``` %a:Oracle数据库的activation ID即RESETLOG_ID。 %c:备份片段的复制数(从1开始编号,最大不超过256)。 %d:Oracle数据库名称。 %D:当前时间中的日,格式为DD。 %e:归档序号。 %f:绝对文件编号。 %F:基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD为日期,QQ是一个1~256的序列。 %h:归档日志线程号。 %I:Oracle数据库的DBID。 %M:当前时间中的月,格式为MM。 %N:表空间名称。 %n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8。比如数据库名JSSBOOK,则生成的名称则是JSSBOOKx。 %p:备份集中备份片段的编号,从1开始。 %s:备份集号。 %t:备份集时间戳。 %T:当前时间的年月日格式(YYYYMMDD)。 %u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称。 %U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示: 生成备份片段时,%U=%u_%p_%c; 生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u; 生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u; 生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。 %Y:当前时间中的年,格式为YYYY。 注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。 ``` ##4.5、RMAN相关视图 ``` 1. V$ARCHIVED_LOG:包含了所有归档重做日志文件的创建情况,备份情况以及其他信息。 2. V$BACKUP_CORRUPTION:显示了 RMAN 在哪些备份集中发现了损坏的数据块。当使用 `BACKUP VALIDATE` 命令对备份集进行检查时,如果发现了损坏的数据块,RMAN 将在这个视图中写入记录。 3. V$COPY_CORRUPTION:显示了哪些镜像复制备份文件已经被损坏。 4. V$BACKUP_DATAFILE:通常用来获取每个数据文件中非空白数据块的数量,从而帮助您创建大小基本相等的备份集。此外,在视图中也包含了数据文件中损坏的数据块的信息。 5. V$BACKUP_REDOLOG:显示了在现有的备份集中有哪些重做日志文件。 6. V$BACKUP_SET:显示了已经创建的备份集的信息。 7. V$BACKUP_PIECE:显示了已经创建的备份片段的信息。 ``` ###4.5.1、RMAN操作的状态信息 ``` SELECT sid, serial#, context, sofar, totalwork, round(sofar / totalwork * 100, 2) AS "% Complete" FROM v$session_longops WHERE opname LIKE 'RMAN:%' AND opname NOT LIKE 'RMAN:aggregate%' AND totalwork != 0; ``` ###4.5.2、显示正在进行RMAN剩余时间(估计时间) ``` SELECT s.sid, s.serial#, s.machine, sl.opname, sl.target, sl.message, s.program, sl.sql_hash_value, TRUNC(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds, 60) AS elapsed, TRUNC(sl.time_remaining/60) || ':' || MOD(sl.time_remaining, 60) AS remaining, ROUND(sl.sofar / sl.totalwork * 100, 2) AS "progress_pct" FROM v$session s, v$session_longops sl WHERE s.sid = sl.sid AND s.serial# = sl.serial# AND sl.totalwork > 0 AND sl.sofar <> sl.totalwork; ``` ###4.5.3、查看近7天备份情况 ``` select * from v$rman_status select * v$rman_backup_job_details 如果备份的时候没有日志,或者在乙方给客户巡检的时候。 ``` ###4.5.4、查看近7天备份详细情况 ``` SELECT s.status AS "备份状态", b.INPUT_TYPE AS "备份类型", TO_CHAR(b.START_TIME, 'yyyy-mm-dd hh24:mi:ss') AS "总的开始时间", TO_CHAR(b.END_TIME, 'yyyy-mm-dd hh24:mi:ss') AS "总的结束时间", TRUNC(b.ELAPSED_SECONDS / 60, 0) AS "耗时多少分钟", b.INPUT_BYTES_PER_SEC_DISPLAY AS "in_sec/s", b.OUTPUT_BYTES_PER_SEC_DISPLAY AS "out_sec/s", TRUNC((s.END_TIME - s.START_TIME) * 24 * 60, 0) AS "单个文件备份用时(分)", TO_CHAR(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') AS "开始备份时间", TO_CHAR(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') AS "结束备份时间", s.OPERATION AS "命令", TRUNC(s.INPUT_BYTES / 1024 / 1024, 2) AS "INPUT-M", TRUNC(s.OUTPUT_BYTES / 1024 / 1024, 2) AS "OUTPUT-M", s.OBJECT_TYPE AS "对象类型", s.MBYTES_PROCESSED AS "百分比", s.OUTPUT_DEVICE_TYPE AS "设备类型" FROM v$rman_status s JOIN v$rman_backup_job_details b ON s.COMMAND_ID = b.COMMAND_ID WHERE s.START_TIME < SYSDATE AND s.END_TIME > SYSDATE - 7 ORDER BY s.START_TIME DESC; ``` ###4.5.5、近7天,历史备份和实时备份详细状态 ``` SELECT s.status AS 备份状态, TRUNC((s.END_TIME - s.START_TIME) * 24 * 60, 0) AS "备份用时(分钟)", TO_CHAR(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') AS 开始备份时间, TO_CHAR(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') AS 结束备份时间, s.OPERATION AS 命令, TRUNC(s.INPUT_BYTES / 1024 / 1024, 2) AS "INPUT/M", TRUNC(s.OUTPUT_BYTES / 1024 / 1024, 2) AS "OUTPUT/M", s.OBJECT_TYPE AS "对象类型", s.MBYTES_PROCESSED AS 百分比, s.OUTPUT_DEVICE_TYPE AS "设备类型" FROM v$rman_status s WHERE TO_CHAR(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') < TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') AND TO_CHAR(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') > TO_CHAR(SYSDATE - 7, 'yyyy-mm-dd hh24:mi:ss') ORDER BY s.START_TIME DESC; ``` #5、RMAN常用命令使用 ##5.1、list命令 ``` list 回车根据提示往下写 ``` ###5.1.1、list incarnation; ``` 用于列出数据库的所有历史备份。在 Oracle 中,incarnation(数据库对应物)表示数据库的特定逻辑生存期。当需要进行还原时,可能会遇到需要使用上次执行 `RESETLOGS` 命令打开数据库前生成的一个备份来进行还原数据库的情况,或者需要还原到执行上一个 `RESETLOGS` 命令之前的时间点。通过 `LIST INCARNATION` 命令,可以查看这些备份的信息,以便进行正确的还原操作。 rman target / connect catalog rman/rman@rman list incarnation; ``` ###5.1.2、list backup summary; ``` --概述可用的备份 第二列的 b:表示备份 (backup)。 第三列中的 a 和 f:分别代表归档日志 (archivelog) 和全备份 (full backup)。 0, 1, 2:代表增量级别备份 (incremental level backup)。 第四列中的 a:代表备份可用 (available)。 x:代表备份已过期 (expired)。 这个命令可以派生出很多类似命令,例如 列出数据库备份的摘要信息。 LIST BACKUP OF DATABASE SUMMARY; 列出所有归档日志备份的摘要信息。 LIST BACKUP OF ARCHIVELOG ALL SUMMARY; 列出表空间 'USERS' 的备份摘要信息。 LIST BACKUP OF TABLESPACE 'USERS' SUMMARY; 列出数据文件 n,n,n 的备份摘要信息。 LIST BACKUP OF DATAFILE n,n,n SUMMARY; ``` ###5.1.3、list backup by file; ``` 列出已有备份集的详细信息。 ``` ###5.1.4、list expired backup; ``` 列出过期的备份文件 ``` ###5.1.5、list backup by file; ``` 列出所有备份的副本文件 LIST COPY; 列出数据库的备份副本文件。 LIST COPY OF DATABASE; ``` ###5.1.6、list copy; ``` 列出所有备份的副本文件: LIST COPY; 列出数据库的备份副本文件: LIST COPY OF DATABASE; 列出控制文件的备份副本文件: LIST COPY OF CONTROLFILE; 列出表空间 'USERS' 的备份副本文件: LIST COPY OF TABLESPACE 'USERS'; 列出数据文件 n,n,n 的备份副本文件: LIST COPY OF DATAFILE n,n,n; 列出所有归档日志的备份副本文件: LIST COPY OF ARCHIVELOG ALL; 列出从 SCN 10000 开始的归档日志的备份副本文件: LIST COPY OF ARCHIVELOG FROM SCN 10000; 列出直到序列号 12 的归档日志的备份副本文件: LIST COPY OF ARCHIVELOG UNTIL SEQUENCE 12; ``` ###5.1.6、list backup of spfile; ``` 服务器参数文件 ``` ###5.1.7、list backup of controlfile; ``` 列出控制文件 ``` ###5.1.8、list backup OF DATAFILE n,n,.. ``` 列出数据文件 ``` ###5.1.9、list backup of tablespace tablespace name; ``` 表空间对应的backup ``` ###5.1.10、关于列出归档; ``` 列出归档日志备份的不同选项: LIST BACKUP OF ARCHIVELOG {ALL, FROM, HIGH, LIKE, LOGSEQ, LOW, SCN, SEQUENCE, TIME, UNTIL} 列出所有归档日志的备份: LIST BACKUP OF ARCHIVELOG ALL; 列出直到昨天的时间点之前的归档日志备份: LIST BACKUP OF ARCHIVELOG UNTIL TIME 'SYSDATE-1'; 列出从序列号 10 开始的归档日志备份: LIST BACKUP OF ARCHIVELOG FROM SEQUENCE 10; 列出直到序列号 10 的归档日志备份: LIST BACKUP OF ARCHIVELOG UNTIL SEQUENCE 10; 列出从 SCN 10000 开始的归档日志备份: LIST BACKUP OF ARCHIVELOG FROM SCN 10000; 列出直到 SCN 200000 的归档日志备份: LIST BACKUP OF ARCHIVELOG UNTIL SCN 200000; 列出从 SCN 1000 开始的归档日志: LIST ARCHIVELOG FROM SCN 1000; 列出直到 SCN 2000 的归档日志: LIST ARCHIVELOG UNTIL SCN 2000; 列出从序列号 10 开始的归档日志: LIST ARCHIVELOG FROM SEQUENCE 10; 列出直到序列号 12 的归档日志: LIST ARCHIVELOG UNTIL SEQUENCE 12; ``` ##5.2、report常用命令 ``` 用于判断数据库当前可恢复状态、以及数据库已有备份的信息 ``` ###5.2.1、报告数据库模式: ``` REPORT SCHEMA; ``` ###5.2.2、报告已丢弃的备份集(配置了保留策略): ``` REPORT OBSOLETE; ``` ###5.2.3、报告当前数据库中不可恢复的数据文件: ``` (即没有这个数据文件的备份、或者该数据文件的备份已经过期) REPORT UNRECOVERABLE; ``` ###5.2.4、report need backup; ``` --报告需要备份的数据文件(根据条件不同) 最近三天没有备份的数据文件(如果出问题的话,这些数据文件将需要最近3天的归档日志才能恢复): REPORT NEED BACKUP DAYS=3; 需要多少个增量备份文件才能恢复的数据文件(如果出问题,这些数据文件将需要3个增量备份才能恢复): REPORT NEED BACKUP INCREMENTAL=3; 报告出冗余次数小于3的数据文件: REPORT NEED BACKUP REDUNDANCY=3; 例如数据文件中包含2个数据文件system01.dbf和users01.dbf 在3次或都3次以上备份中都包含system01.dbf这个数据文件,而users01.dbf则小于3次 那么,报告出来的数据文件就是users01.dbf 即,报告出数据库中冗余次数小于n的数据文件 报告出恢复需要2天归档日志的数据文件: REPORT NEED BACKUP RECOVERY WINDOW OF 2 DAYS; ``` ##5.3、backup常用命令 ``` ``` ###5.3.1、设置备份标记: ``` BACKUP DATABASE TAG='full bak1'; 注:每个标记必须唯一,相同的标记可以用于多个备份只还原最新的备份。 ``` ###5.3.2、设置备份集大小(一次备份的所有结果为一个备份集,要注意备份集大小) ``` BACKUP DATABASE MAXSETSIZE=100M TAG='datafile1'; 注:maxsetsize限定备份集的大小。所以必须大于数据库总数据文件的大小,否则会报错。 rman-06183: datafile or datafile copy larger than maxsetsize: file# 1 /data/oradata/system01.dbf ``` ###5.3.4、设置备份片大小(磁带或文件系统限制): ``` RUN { ALLOCATE CHANNEL c1 TYPE DISK MAXPIECE SIZE 100M FORMAT '/backup/full_%u_%t'; BACKUP DATABASE TAG='full'; RELEASE CHANNEL c1; } 可以在 `ALLOCATE` 子句中设定每个备份片的大小,以达到磁带或系统限制。 也可以在 `CONFIGURE` 中设置备份片大小: CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 100M; 要清除该设置可以使用: CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR; ``` ###5.3.5、检查数据库错误 ``` BACKUP VALIDATE DATABASE; 使用 RMAN 来扫描数据库的物理/逻辑错误,并不执行实际备份。 ``` ###5.3.6、跳过脱机、不可存取或只读文件备份 ``` BACKUP DATABASE SKIP READONLY; BACKUP DATABASE SKIP OFFLINE; BACKUP DATABASE SKIP INACCESSIBLE; BACKUP DATABASE SKIP READONLY SKIP OFFLINE SKIP INACCESSIBLE; ``` ###5.3.7、强制备份 ``` BACKUP DATABASE FORCE; ``` ###5.3.8、基于上次备份时间备份数据文件 ``` 1. 只备份添加的新数据文件: BACKUP DATABASE NOT BACKED UP; 2. 备份在限定时间周期内没有被备份的数据文件: BACKUP DATABASE NOT BACKED UP SINCE TIME='SYSDATE-2'; ``` ``` ###5.3.9、备份操作期间检查逻辑错误 ``` BACKUP CHECK LOGICAL DATABASE; BACKUP VALIDATE CHECK LOGICAL DATABASE; ``` ###5.3.10、生成备份副本 ``` BACKUP DATABASE COPIES=2; ``` ###5.3.10、备份控制文件和参数文件 ``` BACKUP DATABASE DEVICE TYPE DISK INCLUDE CURRENT CONTROLFILE; BACKUP SPFILE; 备份当前控制文件: BACKUP CURRENT CONTROLFILE; 创建控制文件的副本: BACKUP CONTROLFILECOPY '/backup/fgzcdb_backup.ctl'; 创建standby控制文件: ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/backup/fgzcdb_backup_st.ctl'; ``` ###5.3.11、数据库备份 ``` 要使用RMAN执行联机备份操作,数据库必须置于Archivelog 模式。如果不在归档模式,则尝试联机备份时RMAN就会生成一个错误。 CONFIGURE DEFAULT DEVICE TYPE TO DISK; CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/backup/fgzcdb_%u.bak'; BACKUP DATABASE PLUS ARCHIVELOG TAG='fqzcdb_full'; ``` ###5.3.12、表空间备份 ``` BACKUP TABLESPACE faedu; 备份表空间和归档的重做日志: BACKUP TABLESPACE fqedu PLUS ARCHIVELOG; 确保备份当前的控制文件: BACKUP TABLESPACE users INCLUDE CURRENT CONTROLFILE PLUS ARCHIVELOG; ``` ###5.3.13、数据文件备份 ``` RMAN 允许使用带有datafile 参数的backup 命令来备份数据文件,datafile 参数后面是要备份的文件名或数据文件号 查看数据文件号: select file id,filá name from dba_data_files; 备份数据文件 5: BACKUP DATAFILE 5; 备份数据文件 '/oradata/fgzcdb/fgedu01.dbf': BACKUP DATAFILE '/oradata/fgzcdb/fgedu01.dbf'; 备份数据文件 '/oradata/fgzcdb/fgedu01.dbf' 并备份归档的重做日志: BACKUP DATAFILE '/oradata/fgzcdb/fgedu01.dbf' PLUS ARCHIVELOG; ``` ###5.3.14、归档的重做日志备份 ``` 备份所有归档的重做日志: BACKUP ARCHIVELOG ALL; 备份最近7天内的归档重做日志: BACKUP ARCHIVELOG FROM TIME 'SYSDATE-7'; 备份7天前的归档重做日志: BACKUP ARCHIVELOG UNTIL TIME 'SYSDATE-7'; 备份指定序列号之后的归档重做日志: BACKUP ARCHIVELOG FROM SEQUENCE 20; 备份完成后,就可以使用RMAN的 Delete input 选项来删除这些归档重做日志。 备份完成后删除备份的归档重做日志: BACKUP ARCHIVELOG ALL DELETE INPUT; -- 备份默认目录下所有归档日志,并删除这个目录下所有归档日志 BACKUP ARCHIVELOG ALL DELETE ALL INPUT; -- 备份默认目录下所有归档日志,并删除所有备份目录下所有归档日志 BACKUP ARCHIVELOG FROM SEQUENCE 20 DELETE INPUT; -- 备份指定序列号之后的归档重做日志,并删除备份的归档重做日志 备份归档重做日志并保留在磁盘上一定天数: BACKUP ARCHIVELOG UNTIL TIME 'SYSDATE-1' DELETE ALL INPUT; ``` ###5.3.15、数据库,表空间和数据文件的映像副本 ``` backup 命令支持数据库映像副本的创建。RMAN可以通过backup as copy命令生成映像副本 创建数据库的映像副本: RMAN> BACKUP AS COPY DATABASE; 创建表空间的映像副本: RMAN> BACKUP AS COPY TABLESPACE fgedu; 创建数据文件的映像副本: RMAN> BACKUP AS COPY DATAFILE 5; RMAN> BACKUP AS COPY DATAFILE '/oracle/app/oradata/ORCL/fgedu0.DBF'; ``` ###5.3.16、RMAN的块跟踪 ``` 在 RMAN 中启用块更改跟踪功能可以显著提高备份性能。通过记录自上次备份以来发生更改的数据块,RMAN 可以仅备份这些更改,而不必扫描整个数据文件。 跟踪文件位置:在单实例环境中,跟踪文件通常放在本地文件系统上;在 RAC 环境中,跟踪文件需要放在共享存储上,以便所有节点都可以访问。 跟踪文件大小:跟踪文件的大小与数据库的大小以及启用的重做线程数量成正比。典型情况下,每个数据库块大约有 1/30000 的概率被跟踪,如果是 RAC 环境,需要乘以线程数。初始大小为 10M,每次增加 10M。如果数据库接近 300G,则文件不能小于 10M;如果接近 600G,则不能小于 20M。 性能影响:启用块更改跟踪功能会对数据库性能产生一定影响,因为需要额外的资源来记录块更改信息。 启用块更改跟踪功能 alter database enable block change tracking; 如果跟踪文件已经存在,可以使用reuse参数: Alter database enable block change tracking using file '/backup/block.file' reuse; 禁用块更改跟踪: alter database disable block change tracking; Oracle 会在块更改跟踪文件中存储足够的信息,从而允许最多8天的增量备份。 如果增量备份超过8天,则将不使用块跟踪更改跟踪文件,并且无法利用块跟踪文件的有点 检查块更改跟踪的状态和跟踪文件的文件名可以使用以下 SQL 查询: SELECT STATUS, FILENAME FROM V$BLOCK_CHANGE_TRACKING; 如果需要转移块更改跟踪文件,可以使用 `ALTER DATABASE RENAME FILE` 命令。 例如,如果要将块更改跟踪文件从 `/old/path/block_change_tracking_file.dbf` 移动到 `/new/path/block_change_tracking_file.dbf`,可以执行以下命令: ALTER DATABASE RENAME FILE '/old/path/block_change_tracking_file.dbf' TO '/new/path/block_change_tracking_file.dbf'; 在执行此操作之前,确保数据库处于已关闭状态 ``` ###5.3.17、差异备份与增量备份 ``` 基本备份 执行增量备份操作时,首先需要的是增量基本备份(incremental base backup),以后所有的增量备份都基于这个基本备份。 每次执行数据库备份操作时,都可以通过 `backup` 命令的 `incremental` 参数来为备份指定一个增量级别标识符。 基本备份的增量级别为0,并且必须有基本备份才能够执行其他类型的增量备份操作。如果没有生成基本备份就尝试执行增量备份操作,RMAN 会自动执行基本备份操作。示例: backup incremental level=0 database; 差异备份 是 RMAN 生成的增量备份的默认类型。对于差异备份来说,RMAN 会备份自上次同级或者低级差异增量备份以来所发生变化的数据块。执行差异备份操作的示例: backup incremental level=1 database; 累积备份 可以使备份集备份前面所有级别的备份以及此次要备份的所有发生变化的数据块。 累积备份是一个可选的备份方法,并要求在 `backup` 命令中使用 `cumulative` 关键字。 backup incremental level=2 cumulative database; 增量备份选项 允许在 Oracle 数据库中执行增量备份操作。可以执行表空间、数据文件以及数据库的增量备份。 控制文件、归档重做日志和备份集不支持增量备份。此外,在执行增量备份操作时可以同时备份归档的重做日志。 表空间增量备份: backup incremental level=0 tablespace users; 数据文件增量备份: backup incremental level=1 datafile 4; 数据库增量备份: backup incremental level=1 database plus archivelog; ``` ##5.4、configure常用命令 ###5.4.1、显示当前的配置信息 ``` show all; -- 配置备份文件的保留策略为保留1份备份(默认值) CONFIGURE RETENTION POLICY TO REDUNDANCY 1; -- 配置备份优化为关闭状态(默认值) 配置备份优化是否打开,如果表空间是只读状态,那么在做备份的时候只是第一次会备份,以后不备份 CONFIGURE BACKUP OPTIMIZATION OFF; -- 配置默认的备份设备类型为磁盘(默认值)磁带sbt CONFIGURE DEFAULT DEVICE TYPE TO DISK; -- 配置在备份时自动备份控制文件为开启状态(默认值) CONFIGURE CONTROLFILE AUTOBACKUP ON; -- 配置控制文件自动备份的路径和文件格式为'%F'(默认值) CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; -- 配置磁盘备份的并行度为1,备份类型为备份集(默认值) CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; -- 配置数据文件备份集的数量为1(默认值) CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; -- 配置归档日志备份集的数量为1(默认值) CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; -- 配置单个备份集的大小为不限制(默认值) CONFIGURE MAXSETSIZE TO UNLIMITED; -- 配置数据库备份加密为关闭状态(默认值) CONFIGURE ENCRYPTION FOR DATABASE OFF; -- 指定备份数据加密的算法为AES-128(默认值) CONFIGURE ENCRYPTION ALGORITHM 'AES128'; -- 配置压缩算法为BASIC,优化加载为真(默认值) CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE; -- 配置RMAN输出保留7天(默认值) CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; -- 配置归档日志删除策略为不删除(默认值) CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; -- 配置快照控制文件路径(默认值) CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/app/oracle/product/19c/db_1/dbs/snapcf_r719cdb.f'; 查询rman设置中非默认值 select name,value from v$rman_configuration; ``` ###5.4.2、保存策略 ``` -- 配置保留策略为恢复窗口为7天,可以将数据库系统恢复到最近七天内的任意时刻 configure retention policy to recovery window of 7 days; -- 配置保留策略为保留最新的5份数据库备份,任何超过最新5份的备份都将被标记为redundancy configure retention policy to redundancy 5; -- 清除保留策略,恢复默认的保留策略 configure retention policy clear; -- 配置保留策略为none,使备份保持策略失效 configure retention policy to none; 一般最安全的方法是采用第二种保持策略, ``` ###5.4.3、备份优化 backup optimization ``` -- 打开备份优化 configure backup optimization on; -- 关闭备份优化 configure backup optimization off; -- 清除备份优化配置,恢复默认设置 configure backup optimization clear; ``` ###5.4.4、默认设备 default device type ``` -- 指定默认设备类型为磁盘 configure default device type to disk; -- 指定默认设备类型为磁带 configure default device type to sbt; -- 清除默认设备类型配置,恢复默认设置 configure default device type clear; ``` ###5.4.5、控制文件 controlfile ``` -- 关闭控制文件自动备份 configure controlfile autobackup off; -- 打开控制文件自动备份 configure controlfile autobackup on; -- 配置控制文件自动备份的格式 configure controlfile autobackup format for device type disk to '/cfs01/backup/conf/conf %f'; -- 清除控制文件自动备份的格式配置 configure controlfile autobackup format for device type disk clear; -- 配置控制文件快照文件的存放路径和文件名 configure snapshot controlfile name to '/cfs01/backup/snapcf/scontrofile.snp'; -- 清除控制文件快照文件配置,恢复默认设置 configure snapshot controlfile name clear; ``` ###5.4.6、并行数(通道数) device type disk|stb pallelism n; ``` -- 配置设备类型为磁盘的并行度为2 configure device type disk parallelism 2; -- 清除设备类型为磁盘的并行度配置,恢复默认设置 configure device type disk clear; -- 配置设备类型为磁盘的通道格式 configure channel device type disk format 'e/:rmanback %u'; -- 配置设备类型为磁盘的通道最大片大小为100M configure channel device type disk maxpiecesize 100m; -- 配置设备类型为磁盘的通道速率为1200K configure channel device type disk rate 1200k; -- 配置通道1的设备类型为磁盘,格式为'e/:rmanback %u' configure channel 1 device type disk format 'e/:rmanback %u'; -- 配置通道2的设备类型为磁盘,格式为'e/:rmanback %u' configure channel 2 device type disk format 'e/:rmanback %u'; -- 配置通道1的设备类型为磁盘,最大片大小为100M configure channel 1 device type disk maxpiecesize 100m; ``` ###5.4.8、生成备份副本 datafilearchivelog backup copies ``` -- 配置数据文件备份拷贝数量为3份,设备类型为磁盘和磁带 configure datafile backup copies for device type disk to 3; configure datafile backup copies for device type stb to 3; -- 清除数据文件备份拷贝数量的设备类型为磁盘和磁带的配置 configure datafile backup copies for device type disk|stb clear; -- 配置备份设备类型为磁盘的数据库格式为三个不同路径 backup device type disk database format '/disk1/backup/%u', '/disk2/backup/%u', '/disk3/backup/%u'; ``` ###5.4.9、排除选项 exclude ``` -- 显示当前排除的内容 show exclude; -- 将指定表空间排除不备份到备份集中 configure exclude for tablespace USERS; -- 清除对指定表空间的排除配置 configure exclude for tablespace USERS clear; ``` ###5.4.9、备份集大小 maxsetsize ``` -- 显示当前备份集大小限制 show maxsetsize; -- 清除备份集大小限制 configure maxsetsize clear; -- 设置备份集大小限制为1GB configure maxsetsize to 1g; -- 设置备份集大小限制为1000MB configure maxsetsize to 1000m; -- 设置备份集大小限制为1000000KB configure maxsetsize to 1000000k; -- 设置备份集大小限制为无限制 configure maxsetsize to unlimited; ``` ##5.5、set ``` 在run 代码块外,我们可是执行下面的操作: 使用set命令可以定义只应用于当前RMAN会话的设置。Set命令的设置不是永久的,根据实际需求,可以采用两种方式来使用set 命令。 -- 命令在消息日志中显示 RMAN 命令。 SET ECHO ON; -- 命令指定一个数据库的数据库标识符(Database Identifier:DBID)。某些 SET 命令只能在 RUN 代码块的限定范围内使用,常见的有: SET DBID <dbid>; -- 命令用于执行表空间时间点恢复(TSPITR)或者数据库复制操作。该命令允许指定新的数据库数据文件名。将数据库移动到新的系统中并且文件系统名不同时,我们可以使用这个命令。使用 SET NEWNAME 命令时还需要使用 SWITCH 命令。 SET NEWNAME 命令; -- 使用该命令可以定义 RMAN 操作失败前允许的数据块错误的最大数目。 SET MAXCORRUPT FOR DATAFILE; -- 使用该命令可以修改存储归档的重做日志的 ARCHIVELOG DESTINATION 目标。 SET ARCHIVELOG DESTINATION; -- 使用该命令可以定义为备份集中的每个备份片应当创建的副本数。 SET BACKUP COPIES 命令; -- 使用该命令可以关联给定的服务器会话和给定的通道。 SET COMMAND ID; -- 使用该命令可以修改用于控制文件自动备份操作的默认格式。 SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE; 例如,要执行一个为每个备份片创建两个副本的备份操作,并且允许数据文件的最大错误数为10,脚本如下: RUN { SET MAXCORRUPT FOR DATAFILE 3 TO 10; SET BACKUP COPIES 2; BACKUP DATABASE; } ``` ##5.6、CROSSCHECK ``` -- 对数据文件 1 的备份进行交叉检查。 CROSSCHECK BACKUP OF DATAFILE 1; -- 对表空间 USERS 的备份进行交叉检查。 CROSSCHECK BACKUP OF TABLESPACE USERS; -- 对控制文件的备份进行交叉检查。 CROSSCHECK BACKUP OF CONTROLFILE; -- 对 SPFILE 的备份进行交叉检查。 CROSSCHECK BACKUP OF SPFILE; -- 对标签为 'TEST' 的备份进行交叉检查。 CROSSCHECK BACKUP TAG='TEST'; -- 对在 'sysdate-2' 之后完成的备份进行交叉检查。 CROSSCHECK BACKUP COMPLETED AFTER 'sysdate-2'; -- 对在 'sysdate-5' 和 'sysdate-2' 之间完成的备份进行交叉检查。 CROSSCHECK BACKUP COMPLETED BETWEEN 'sysdate-5' AND 'sysdate-2'; -- 对磁盘类型的备份进行交叉检查。 CROSSCHECK BACKUP DEVICE TYPE DISK; 我们可以基于一个号码或标准(包括时间,具体的或指定范围的SCN或日志序列号)来交叉效验归档的重做日志备份甚至还可以使用like参数与通配符来交叉效验特定的归档日志备份 -- 交叉检查归档日志备份,使用通配符检查特定的归档日志备份。 CROSSCHECK ARCHIVELOG LIKE 'ARC001.log'; -- 交叉检查指定路径的归档日志备份。 CROSSCHECK ARCHIVELOG 'D:/archivelog/arc023.log'; -- 交叉检查带有特定标识的归档日志备份。 CROSSCHECK ARCHIVELOG LIKE '%ARC00012.LOG'; -- 交叉检查从指定时间开始的归档日志备份。 CROSSCHECK ARCHIVELOG FROM TIME "TO DATE('2010-7-10','yyyy-mm-dd')"; -- 交叉检查直到指定时间的归档日志备份。 CROSSCHECK ARCHIVELOG UNTIL TIME "TO DATE('2010-7-10','yyyy-mm-dd')"; -- 交叉检查从序列号 12 开始的归档日志备份。 CROSSCHECK ARCHIVELOG FROM SEQUENCE 12; -- 交叉检查直到序列号 522 的归档日志备份。 CROSSCHECK ARCHIVELOG UNTIL SEQUENCE 522; 使用crosscheck copy命令还可以交叉效验副本。包括数据文件副本,控制文件副本,归档重做日志副本以及磁盘上的归档的重做日志如: -- 交叉检查数据文件副本。 CROSSCHECK COPY OF DATAFILE 5; -- 交叉检查指定路径的数据文件副本。 CROSSCHECK DATAFILECOPY '/oracle/app/oradata/BL/BL01.DBF'; ``` ##5.7、RMAN 备份的验证validate ``` list backup summary; validate backupset 139; validate backupset 139 check logical ``` ##5.8、change命令 ``` -- 将指定标签的数据库备份设置为不可用状态。 CHANGE BACKUP OF DATABASE TAG='TEST' UNAVAILABLE; -- 将所有带有指定字符的数据库备份设置为不可用状态。 CHANGE BACKUP OF DATABASE LIKE '%TES%' UNAVAILABLE; -- 将备份集号为 33 的备份设置为不可用状态。 CHANGE BACKUPSET 33 UNAVAILABLE; -- 将备份集号为 33 的备份设置为可用状态。 CHANGE BACKUPSET 33 AVAILABLE; -- 将指定归档重做日志备份设置为不可用状态。 CHANGE ARCHIVELOG 'd:/archivelog/arc0001.log' UNAVAILABLE; -- 将所有已备份次数达到 5 次的归档重做日志备份设置为不可用状态。 CHANGE ARCHIVELOG ALL BACKED UP 5 TIMES TO DEVICE TYPE DISK UNAVAILABLE; -- 将数据库备份设备类型为磁盘的备份设置为不可用状态。 CHANGE BACKUP OF DATABASE DEVICE TYPE DISK UNAVAILABLE; -- 删除备份集,并从控制文件和恢复目录中删除。 CHANGE BACKUP OF DATABASE TAG='TEST' DELETE; --删除备份集 change backupset 139 delete ``` ##5.9、delete ``` 备份集不是永远存在的。我们可以使用保存策略标记备份有效性和生存期的结束。 但是,备份策略的实施不会从RMAN目录中删除备份,而只是将这些备份标记为丢弃状态。 Delete 命令对备份和副本的影响很大。通过delete命令,可以删除基于保存标准被标记为丢弃的任何备份 还可以将恢复目录或控制文件中的备份从expired状态变为deleted状态。 --1删除的是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息,删除的只是RMAN资料库中的记录; delete expired --删除旧于备份保留策略定义的备份数据同时也更新RMAN资料库以及控制文件。 delete obsolete ``` ##5.10、restore命令 ``` 主要功能是从RMAN备份中还原文件,为恢复做准备。使用restore命令时 该命令会在没有认识提示的情况下重写已经存在的任何文件,除非使用setnewname命令 -- 使用 restore 命令时,如果没有指定 setnewname 命令,会在没有提示的情况下重写已经存在的任何文件。 -- 将数据库文件还原到指定位置,并使用新的文件名。 RESTORE DATABASE; -- 从自动备份中恢复控制文件。 RESTORE CONTROLFILE FROM AUTOBACKUP; -- 从自动备份中恢复控制文件到指定位置。 RESTORE CONTROLFILE TO '/backup/' FROM AUTOBACKUP; -- 从自动备份中恢复控制文件到默认位置。 RESTORE CONTROLFILE TO '/backup'; -- 从自动备份中恢复到指定时间点的控制文件。 RESTORE CONTROLFILE FROM AUTOBACKUP UNTIL TIME "to date('2010-6-27 13:25:00','yyyy-mm-dd hh24:mi:ss')"; -- 从自动备份中恢复控制文件,限制最大备份片数和最大天数。 RESTORE CONTROLFILE FROM AUTOBACKUP MAXSEQ 200 MAXDAYS 100; -- 将 SPFILE 恢复到指定的 PFILE。 RESTORE SPFILE TO PFILE '/backup/spfile.restore'; -- 从自动备份中恢复 SPFILE 到指定位置。 RESTORE SPFILE TO '/backup/spfile.restore' FROM AUTOBACKUP; -- 从自动备份中恢复 SPFILE。 RESTORE SPFILE FROM AUTOBACKUP; -- 从指定位置恢复 SPFILE。 RESTORE SPFILE FROM '/backup/c-1247395743-2010627-00'; -- 恢复指定的表空间。 RESTORE TABLESPACE tablespace_name; -- 恢复指定的数据文件。 RESTORE DATAFILE 5; -- 恢复指定路径的数据文件。 RESTORE DATAFILE '/oracle/app/oradata/ORCL/USERS01.DBF'; -- 将数据库还原到指定时间点。 RESTORE DATABASE UNTIL TIME "to date('2010-6-28 17:04:00','yyyy-mm-dd hh24:mi:ss')"; -- 将数据库还原到指定 SCN。 RESTORE DATABASE UNTIL SCN 1000; -- 将数据库还原到指定序列号。 RESTORE DATABASE UNTIL SEQUENCE 100 THREAD 1; -- 恢复所有归档日志。 RESTORE ARCHIVELOG ALL; -- 恢复指定日志段的归档日志。 RESTORE ARCHIVELOG FROM LOGSEQ=20 THREAD=1; -- 恢复从指定日志段到另一个日志段之间的归档日志。 RESTORE ARCHIVELOG FROM LOGSEQ=20 UNTIL LOGSEQ=30 THREAD=1; --还原目录下所有文件 RUN{ SET ARCHIVELOG DESTINATION TO "/archive", RESTORE ARCHIVELOG ALL; } -- 检查只读表空间的还原情况。 RESTORE DATABASE CHECK READONLY; -- 从数据文件副本还原指定的数据文件。 RESTORE (DATAFILE 5) FROM DATAFILECOPY; ``` ##5.11、recover命令 ``` -- 恢复整个数据库。如果在线重做日志存在,可以使用 RECOVER DATABASE NOREDO; RECOVER DATABASE; -- 恢复指定表空间。 RECOVER TABLESPACE tablespace_name; -- 恢复指定数据文件。 RECOVER DATAFILE 3; RECOVER DATAFILE '/oracle/app/oradata/ORCL/USERS01.DBF'; -- 设置恢复的时间点,然后恢复整个数据库。 SET UNTIL TIME "TO_DATE('2010-07-05 14:02:00','YYYY-MM-DD HH24:MI:SS')"; RESTORE DATABASE; RECOVER DATABASE; alter database open resetlogs; ``` ##5.12、blockrecover ``` -- 当出现数据块错误时,可以使用 blockrecover 命令恢复指定数据文件的指定数据块。 BLOCKRECOVER DATAFILE 5 BLOCK 88; -- 如果有必要,可以同时恢复多个数据文件的多个数据块。 BLOCKRECOVER DATAFILE 5 BLOCK 16,17,88,108; -- 查询 v$DATABASE_BLOCK_CORRUPTION 视图查看损坏数据块的详细信息。 SELECT * FROM V$DATABASE_BLOCK_CORRUPTION; -- 使用具有 CORRUPTION_LIST_RESTORE 参数的 blockrecover。 BLOCKRECOVER CORRUPTION LIST RESTORE UNTIL TIME 'SYSDATE-5'; ``` ##5.13、convert ``` -- 使用 convert tablespace 命令将指定表空间转换为目标平台的格式。 CONVERT TABLESPACE fgedu TO PLATFORM='AlX-Based Systems (64-bit)' DB_FILE_NAME_CONVERT='/oracle/app/oradata/BL','/oracle/bl'; -- 使用 convert datafile 命令将指定数据文件转换为目标平台的格式。 CONVERT DATAFILE '/oracle/app/oradata/BL/BL01.DBF' FROM PLATFORM='AlX-Based Systems (64-bit)' DB_FILE_NAME_CONVERT='/oracle/app/oradata/BL','/oracle/app/bl'; ``` #6、设计一个TB级数据库的RMAN自动备份策略 ``` 1T以下 用Oracle即可实现,备份保存在磁盘,5TB备份空间。(可选第三方备份软件,集中管理,BU,EMC,国产) 1)RMAN全备:每天一次,开归档模式-保留3-7天 2)逻辑全备份:每周/天 3)归档备份:每12小时 1-5T 用Oracle+结合第三方备份软件(集中管理,物理带库远线,虚拟带库/磁盘近线,磁盘25T1)RMAN全备:10快每天,10慢每周全备;开归档模式每天保留3天,每周备保留8-10天 2)归档备份:每天 3)逻辑全备份:一个月导一次结构就行了,每天导一些重要的表;如果5*8/5*24:周五晚上/周六上午~周一上班前,一个月导一次 5T以上 用Oracle+结合第三方备份软件(集中管理,物理带库远线-压缩,重复删除,虚拟带库/磁盘近线,磁盘20T/80~100T )1)RMAN全备:I0快每天,I0慢每周全备;开归档模式每天保留3天,每周备保留8-10天;一个月备份一次+每周增量 2)归档备份:每天 3)逻辑全备份:一个月导一次结构就行了,每天导一些重要的表; ``` ##6.1、备份用脚本 ``` mkdir /backup/full mkdir /backup/scripts mkdir /backup/arch mkdir /backup/log vi /backup/scripts/fgzcdb_rman_full_backup.sh ``` ``` #!/bin/bash # RMAN自动全备份脚本,备份fgzcdb数据库 # 日期:2022-01-20 # 设置环境变量 export ORACLE_SID=fgzcdb export ORACLE_HOME=/oracle/app/oracle/product/19c/db_1 export ORACLE_BASE=/oracle/app/oracle export NLS_LANG="AMERICAN_AMERICA.UTF8" # 生成备份时间戳 BACKTIME=`date +"20%y%m%d%H%M%S"` # 开始RMAN备份 rman target / msglog '/backup/log/fgzcdb_rman_full_backup_$BACKTIME.log' <<EOF run { # 设置备份策略 CONFIGURE RETENTION POLICY TO REDUNDANCY 2; # 分配备份通道 allocate channel d1 type disk; allocate channel d2 type disk; # 设置备份通道限制 setlimit channel d1 kbytes 204800000 maxopenfiles 32 rate 100m; setlimit channel d2 kbytes 204800000 maxopenfiles 32 rate 100m; # 切换日志并进行全备份 sql 'alter system archive log current'; backup incremental level 0 skip inaccessible tag itpux_fgzcdb_level0 filesperset 8 format '/backup/full/fgzcdb_full_%s_%p_%t' (database); # 释放备份通道 release channel d1; release channel d2; # 备份当前控制文件 allocate channel d3 type disk; backup format '/backup/full/ctl_%s_%p_%t' current controlfile; release channel d3; # 备份控制文件到指定目录 allocate channel d4 type disk; copy current controlfile to '/backup/full/control_fgzcdb.ctl'; release channel d4; # 备份归档日志 allocate channel d5 type disk; sql 'alter system archive log current'; backup archivelog all format '/backup/arch/arc_%t_%s'; release channel d5; } # 清理过期备份和归档日志 allocate channel for maintenance device type disk; run { crosscheck backup; report obsolete; delete noprompt expired backup; delete noprompt expired copy; delete noprompt obsolete device type disk; crosscheck archivelog all; delete noprompt archivelog until time "sysdate-10"; delete noprompt expired archivelog all; } exit EOF 或 run { allocate channel c1 type disk; allocate channel c2 type disk; crosscheck backup; backup incremental level 0 tag 'leve0' format '/backup/leve0%u_%s_%p' database include current controlfile; sql 'alter system archive log current'; backup format '/backup/arch_leve0_%u_%s_%p' archivelog all delete input; crosscheck archivelog all; delete noprompt expired backup; delete noprompt obsolete; delete noprompt backup of database completed before 'sysdate- 30'; release channel c1; release channel c2; } ``` ``` chmod u+x /backup/scripts/fgzcdb_rman_full.sh 0 2 * * 0 su- oracle-c /backup/scripts/fgzcdb_rman_full.sh 2>&1 >/dev/null ``` #7、Oracle RMAN备份恢复案例 ``` ``` ##7.1、RMAN恢复案例1-在非归档模式下全库备份恢复 ``` 备份分为一致性备份和不完全性备份,也就是我们所说的归档模式与非归档模式的备份 非归档备份可以是在非归档模式下创建,并且数据库必须处于mount状态下, 检查归档状态: archive log list 关闭归档,启动到mount shutdown immediate startup mount alter database noarchivelog; startup mount force; startup mount rman target / backup tag 'r719cdb_fullbak01' database format '/backup/full/r719cdb_fullbak01_%s_%p_%t' current controlfile format '/backup/full/r719cdb_ctl_%s_%p_%t'; 1、备份数据文件 2、备库控制文件 3、备库控制文件和spfile(如果是pfile启动,则不会备份spfile) 模拟故障 cd /oradata/R719CDB/ rm * 启动数据库(报错) shutdown abort startup 恢复控制文件 restore controlfile from autobackup; 启动到mount sql 'alter database mount'; 还原整个数据库 restore database; recover database; 打开数据库 alter database open resetlogs; ``` ##7.2、RMAN恢复案例2-在归档模式下丢失所有文件 ``` 一般来说,创建正式库的备份时,最好使用归档模式备份,并且不要仅仅依靠简单的命令来完成。更好的做法是编写脚本,结合备份、归档日志和重做日志,以确保数据可以恢复到最近一次更改的状态,从而最小化数据丢失的可能性 打开归档模式 shutdown immediate startup mount alter database archivelog; 备份 rman target / backup tag r719cdb_fullbak02 database format '/backup/full/fgzcdb_fullbak02_%s_%p_%t' current controlfile format '/backup/full/fgzcdb_ctl02_%s_%p_%t' plus archivelog format '/backup/full/fgzcdb_arch02_%s_%p_%t'; 故障模拟 删除数据库的所有文件,仅保留redo日志和archivelog文件 cd /oradata/R719CDB/ rm *.ctl rm *.dbf cd $ORACLE_HOME/dbs rm spfiler719cdb.ora shutdown abort startup rman target / startup force nomount; 恢复参数文件 restore spfile from '/archive/R719CDB/autobackup/2024_03_25/o1_mf_s_1164564975_m02mqhnt_.bkp'; sqlplus 强制启动到nomount状态 startup nomount force; 恢复控制文件(也可以使用备份片) restore controlfile from autobackup; 启动到mount状态 sql 'alter database mount'; 恢复数据库 restore database; recover database; 启动数据库 alter database open resetlogs; ``` ##7.3、RMAN恢复案例3-丢失单个数据文件如何恢复 ``` create tablespace fgedu001 datafile '/oradata/R719CDB/fgedu001.dbf' size 50m; create tablespace fgedu002 datafile '/oradata/R719CDB/fgedu002.dbf' size 50m; create user fgedu01 identified by fgedu01 default tablespace fgedu001; create user fgedu02 identified by fgedu02 default tablespace fgedu002; grant dba to fgedu01; grant dba to fgedu02; conn fgedu01/fgedu01; create table fgedu01 (id number(10), name varchar2(10)); insert into fgedu01 values(1,'fgedu01'); insert into fgedu01 values(2,'fgedu02'); insert into fgedu01 values(3,'fgedu03'); insert into fgedu01 values(4,'fgedu04'); insert into fgedu01 values(5,'fgedu05'); commit; create table fgedu02 as select * from fgedu01; select * from fgedu01; select * from fgedu02; conn / as sysdba; alter system switch logfile; alter system checkpoint; CONFIGURE CONTROLFILE AUTOBACKUP ON; backup tag r719cdbfull format '/backup/full/r719cdb_full_R719CDB_%s_%p_%t' (database); cd /oradata/R719CDB rm fgedu001.dbf shutdown abort startup ``` ###7.3.1、在线恢复 ``` alter database datafile '/oradata/R719CDB/fgedu001.dbf' offline; alter database open; restore datafile 7; recover datafile 7; alter database datafile '/oradata/R719CDB/fgedu001.dbf' online; alter database open; select * from fgedu01.fgedu01; ``` ###7.3.2、离线恢复 ``` restore datafile 7; recover datafile 7; alter database open; select * from fgedu01.fgedu01; ``` ##7.4、RMAN恢复案例4-丢失整个数据表空间如何恢复 ###7.4.1、离线恢复 ``` cd /oradata/R719CDB rm fgedu001.dbf shutdown abort startup restore tablespace fgedu001; recover tablespace fgedu001; ``` ###7.4.1、在线恢复 ``` cd /oradata/R719CDB rm fgedu001.dbf alter tablespace fgedu001 offline for recover; restore tablespace fgedu001; recover tablespace fgedu001; alter tablespace fgedu001 online; ``` ##7.5、RMAN恢复案例5-丢失SYSTEM表空间如何恢复 ``` cd /oradata/R719CDB rm syste* shutdown abort startup restore datafile 1; recover datafile 1; alter database open; ``` ##7.6、RMAN恢复案例6-丢失控制文件如何恢复 ``` 基于控制文件的复合多路径性,它的丢失分为两种 一种是其中某个控制文件的损坏或丢失,另外一种是所有控制文件均丢失。 基于第一种情况,只需把好的控制文件复制一份在损坏或丢失的那个控制文件路径下即可。 第二种情况下则需要通过备份信息来对控制文件进行恢复或手工重建控制文件 show parameter control; ``` ###7.6.1、某个控制文件的损坏或丢失 ``` cd /oradata/R719CDB rm control01.ctl shutdown abort startup cd /oradata/R719CDB cp control02.ctl control01.ctl alter database mount; alter database open; ``` ###7.6.2、所有控制文件均丢失 ``` cd /oradata/R719CDB rm control0* shutdown abort startup rman restore controlfile from autobackup; sqlplus recover database using BACKUP CONTROLFILE 报错 指定重做日志文件 alter database open; alter tablespace fgedu001 online; ``` ##7.7、RMAN恢复案例7-丢失参数文件如何恢复 ``` Oracle数据库的参数文件有两种一种是pfile(初始化参数文件) 还有一种是spfile(服务器初始化参数文件); 实际上spfile是pfile衍生过来的一新参数文件,应用9i以后的版本,在9i之前的版本都不支持,只支持pfile;而且pfile是不能通过oracle命令来进行备份的,只有spfile才支持备份。 通过RMAN的备份来实现参数文件的恢复,仅适用于9i以后 备份参数文件 backup tag fgedu7pfile format '/backup/full/fgedu7_pfile_fgzcdb_%s_%p_%t' (spfile); show parameter cd $ORACLE_HOME/dbs rm spfiler719cdb.ora shutdown abort startup 创建个参数文件 echo "db_name='r719cdb'" >> initr719cdb.ora startup nomount rman 使用备份片 restore spfile from '/archive/R719CDB/autobackup/2024_03_25/o1_mf_s_1164569627_m02r8vxq_.bkp' 如果找不到备份 修改 $ORACLE_HOME/dbs下模板init.ora shutdown immediate startup ``` ##7.8、RMAN恢复案例8-丢失重做日志文件如何恢复 ``` 重做日志文件记录了数据库的变更数据 一般重做日志文件的失败不会使数据库数据丢失,但是会影响数据库的恢复 重做日志分为两种状态当前联机重做日志、非当前的联机重做日志 ``` ###7.8.1、非当前redo(联机重做日志)文件丢失恢复 ``` 确定非当前文件 select * from v$log; cd $ORACLE_HOME/dbs rm redo02.log shutdown abort startup startup mount alter database clear logfile group 2; alter database open; ``` ###7.8.2、当前redo(联机重做日志)文件丢失恢复 ``` select * from v$log; cd $ORACLE_HOME/dbs rm redo01.log startup mount 确定是是当前重做日志 select * from v$log; alter database clear unarchived logfile group 1; alter database open; 如果上诉方法不行 ALTER SYSTEM SET "allow_resetlogs_corruption"=true SCOPE=SPFILE; ALTER DATABASE OPEN RESETLOGS; ALTER SYSTEM RESET "allow_resetlogs_corruption" SCOPE=SPFILE SID='*'; ``` ##7.9、RMAN恢复案例9-存储损坏数据丢失如何恢复 ``` /oradata/fgzcdb /oracle/oradata/fgzcdb 模拟掉盘 fuser -m -k -i /oradata fuser -m -k /oradata umount -f /oradata 恢复到 mkdir -p /oracle/app/oradata/R719CDB sqlplus startup show parameter control; alter system set control_files='/oracle/app/oradata/R719CDB/control01.ctl,/oracle/app/oradata/R719CDB/control02.ctl' scope=spfile; shutdown abort startup nomount; restore controlfile from autobackup; sql 'alter database mount'; list backup; run { set newname for datafile '/oradata/R719CDB/system01.dbf' to '/oracle/app/oradata/R719CDB/system01.dbf'; set newname for datafile '/oradata/R719CDB/sysaux01.dbf' to '/oracle/app/oradata/R719CDB/sysaux01.dbf'; set newname for datafile '/oradata/R719CDB/undotbs01.dbf' to '/oracle/app/oradata/R719CDB/undotbs01.dbf'; set newname for datafile '/oradata/R719CDB/users01.dbf' to '/oracle/app/oradata/R719CDB/users01.dbf'; set newname for datafile '/oradata/R719CDB/rman.dbf' to '/oracle/app/oradata/R719CDB/rman.dbf'; set newname for datafile '/oradata/R719CDB/fgedu01.dbf' to '/oracle/app/oradata/R719CDB/fgedu01.dbf'; set newname for datafile '/oradata/R719CDB/fgedu001.dbf' to '/oracle/app/oradata/R719CDB/fgedu001.dbf'; set newname for datafile '/oradata/R719CDB/fgedu002.dbf' to '/oracle/app/oradata/R719CDB/fgedu002.dbf'; restore database; switch datafile all; } recover database; alter database backup controlfile to trace as '/backup/ctl.txt'; cat /backup/ctl.txt shutdown immediate 执行重建命令-修改路径后的 STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "R719CDB" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/oracle/app/oradata/R719CDB/redo01.log' SIZE 200M BLOCKSIZE 512, GROUP 2 '/oracle/app/oradata/R719CDB/redo02.log' SIZE 200M BLOCKSIZE 512, GROUP 3 '/oracle/app/oradata/R719CDB/redo03.log' SIZE 200M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/oracle/app/oradata/R719CDB/system01.dbf', '/oracle/app/oradata/R719CDB/sysaux01.dbf', '/oracle/app/oradata/R719CDB/undotbs01.dbf', '/oracle/app/oradata/R719CDB/users01.dbf', '/oracle/app/oradata/R719CDB/rman.dbf', '/oracle/app/oradata/R719CDB/fgedu01.dbf', '/oracle/app/oradata/R719CDB/fgedu001.dbf', '/oracle/app/oradata/R719CDB/fgedu002.dbf' CHARACTER SET AL32UTF8 ; alter database mount; 路径已变 select * from v$logfile; alter database open resetlogs; alter system switch logfile; 添加临时表空间 ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/app/oradata/R719CDBtemp01.dbf' size 20M; ``` #8、RMAN的不完全恢复 ``` 不完全性恢复的类型主要分为以下四种 基于时间(time)恢复 基于取消(cancel)恢复 基于SCN(change)恢复 基于备份控制文件(unsing backup controlfile)的恢复 环境: mkdir /backup/full mkdir /backup/scripts mkdir /backup/arch mkdir /backup/log create tablespace fgedu001 datafile '/oradata/R719CDB/fgedu001.dbf' size 50m; create tablespace fgedu002 datafile '/oradata/R719CDB/fgedu002.dbf' size 50m; create user fgedu01 identified by fgedu01 default tablespace fgedu001; create user fgedu02 identified by fgedu02 default tablespace fgedu002; grant dba to fgedu01; grant dba to fgedu02; conn fgedu01/fgedu01 create table fgedu01 (id number(10),name varchar2(10)); insert into fgedu01 values(1,'fgedu01'); insert into fgedu01 values(2,'fgedu02'); insert into fgedu01 values(3,'fgedu03'); insert into fgedu01 values(4,'fgedu04'); insert into fgedu01 values(5,'fgedu05'); commit; conn /as sysdba; alter system switch logfile; alter system checkpoint; backup tag r719cdbfull format '/backup/full/r719cdb_full_fgzcdb_%s_%p_%t' (database); backup tag r719cdbctl format '/backup/full/r719cdb_ctl_fgzcdb_%s_%p_%t' (current controlfile); backup tag r719cdbpfile format '/backup/full/r719cdb_pfile_fgzcdb_%s_%p_%t' (spfile); ``` ##9.1、RMAN恢复案例10-基于时间点(time)的不完全恢复 ``` set time on; conn fgedu01/fgedu01 create table fgedu02 as select * from fgedu01; create table fgedu03 as select * from fgedu01; create table fgedu04 as select * from fgedu01; 13:24:00 drop table fgedu02 purge; drop table fgedu03 purge; drop table fgedu04 purge; 恢复: shutdown immediate startup mount rman restore database; recover database until time '2024-03-26 13:24:00 '; sql alter database open resetlogs; 验证: conn fgedu01/fgedu01 select table_name from user_tables; ``` ##9.2、RMAN恢复案例11-基于系统改变号(scn)的不完全恢复 ``` create table fgedu05 as select * from fgedu01; alter system switch logfile; alter system checkpoint; select current_scn from v$database; -- 1023065 drop table fgedu05 purge; select current_scn from v$database; --1023086 drop table fgedu02 purge; drop table fgedu03 purge; drop table fgedu04 purge; select current_scn from v$database; --1023162 恢复到1023065 删表之前 shutdown immediate startup mount rman run { allocate channel d1 type disk; set until scn 1023065 ; restore database; recover database; } alter database open resetlogs; 验证: select * from fgedu05; ``` ##9.3、RMAN恢复案例12-有归档的cancel不完全恢复 ``` 基于取消的恢复只适用于以下情况: 归档日志丢失导致完全恢复失败 丢失了数据文件和未归档的重做日志(联机重做日志); shutdown immediate 冷备 mdkir -p /backup/cobackup cd /oradata/R719CDB/ cp * /backup/cobackup startup conn fgedu01/fgedu01 insert into fgedu01 values(6,'fgedu06'); insert into fgedu01 values(7,'fgedu07'); commit; select * from fgedu01; alter system switch logfile; 模拟数据文件丢失,归档日志也丢失了,所以数据库只能做不一致性恢复 shutdown abort cd /oradata/R719CDB rm -f *.dbf startup select * from v$recover_file; cd /backup/cobackup cp *.dbf /oradata/R719CDB recover database until cancel; cancel alter database open resetlogs; ``` ##9.4、RMAN恢复案例13-基于无归档cancel不完全恢复 ``` 丰要适用于:基于Cancel的不完全恢复适用场景:Recover时,所需的某个归档日志损坏,或丰机断电,current状态的联机日志损坏 1)未归档的重做日志文件(当前的联机重做日志)。 2)归档和未归档的重做日志文件(当前的联机重做日志),都丢失。 创建测试表 创建fgedu06表,切换日志,再创建新的fgedu07表,主机断电,删除当前日志,模拟文件损坏。 conn fgedu01/fgedu01 create table fgedu06 as select * from fgedu01; alter system switch logfile; / / / create table fgedu07 as select * from fgedu01; -- 确定当权日志删除当前日志组文件,模拟在线事务丢失 select * from v$log; rm redo01.log -- 模拟服务器断电 shutdown abort; startup 由于是当前重组日志,无法清除 alter database clear logfile group 1; recover也不行 recover database until cancel; alter database open; 设置隐藏参数 ALTER SYSTEM SET "_allow_resetlogs_corruption"=true SCOPE=SPFILE; shutdown immediate startup ALTER DATABASE OPEN RESETLOGS; ALTER SYSTEM RESET "_allow_resetlogs_corruption" SCOPE=SPFILE SID='*'; shutdown immediate startup fgedu07丢失 ``` ##9.5、RMAN恢复案例14-基于备份控制文件不完全恢复 ``` 表空间被意外删除,所有控制文件被损坏,使用旧的控制文件进行恢复。 主要适用于:基于备份控制文件的恢复只要适用于以下情况: 表空间被意外删除; 所有控制文件全部损坏。 drop tablespace fgedu001 including contents; shutdown immediate cd /oradata/R719CDB rm *.dbf rm *.ctl cd /backup/cobackup/ cp *dbf /oradata/R719CDB cp *.ctl /oradata/R719CDB startup mount recover database using backup controlfile until cancel; alter database open resetlogs; ```
上一篇: 无
下一篇:
3、静默安装
0
赞
50 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网