热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

RMAN中的不完整恢复及其应用场景

RMAN中的不完整恢复是指通过还原所有数据文件将整个数据库回退,然后执行不完全恢复的操作。不完整恢复的场景包括完整恢复不可行或故意要丢失数据。完整恢复需要备份后生成的所有归档日志和联机重做日志,而如果这些日志缺失或损坏,恢复将在该点停止。决定故意丢失数据是在用户错误发生后采取的行动,例如忘了where条件导致整个表受影响。对于已提交的事务来说,这样的更改是不可逆的。

rman中的不完整恢复:
不完整恢复表示会丢失数据。通过还原所有数据文件将整个数据库回退,然后执行不完全恢复。不是应用自备

份后生成的所有重做,而是故意在某个点停止应用重做,生成一个不是最新的数据库版本,
自该点后做的所有工作丢失,执行不完整恢复只有两个原因:完整恢复不可行或是故意要丢失数据。
    完整恢复将是不可能的,除非自备份后生成的所有归档日志以及联机重做日志可用。如果归档日志缺失或

是被破坏,那恢复将在该点停止,完整恢复不会因为缺失归档或联机日志文件而失败。
因为这两种文件类型都可以且应多路复用到不同设备,使得它们完全丢失是不可能的,但也是会发生的。如果

发生这种情况,则不完全恢复至缺失或损坏的重做数据发生的点是唯一选择。
(注:如果归档日志或当前联机重做日志文件组的所有副本都丢失,那么必须执行不完全恢复)。
   决定故意丢失数据是在用户错误发生后采取的行动。也许是因为用户提交了一个不适合业务需求的事务。
在使用update或delete语句时,忘了where条件,导致整个表受影响。而不是一行。如果提交了这一语句。
那么更改不可逆。对已提交的事务来说,是不可逆的。同样,对于一些DDL命令,更是不可逆的。
对于这些用户错误,可以还原整个数据库并将它恢复至错误发生前的点,从而生成没有错误的数据库版本,
同时也会丢失自那之后所做的所有工作。
(注1:有些闪回技术可帮助从用户错误中恢复过来,而不需要执行不完全恢复)
(注2:跳过坏事务的恢复而恢复所有其他工作是不可能的)
  不完整恢复的特例是控制文件的恢复。在理想情况下,所有恢复操作将使用当前控制文件来引导,但有时是
不可能的,并且必须还原控制文件的备份。可能的原因有两个:当前控制文件的所有副本已丢失,不能运行
create controlfile命令重新创建它,或者当前控制文件不能准确描述想要还原的数据库版本,通常因为像
删除表空间这样的更改在备份后已发生。
不完整恢复的4个步骤:
*加载数据库
*还原所有的数据文件
*恢复数据库至某个点
*用重置日志打开数据库
  与完整恢复形成对照的第一点是完整恢复可在数据库打开时进行,除非受损文件是关键的。不完整恢复只能

在加载加载模式下进行。
   其次,对于完整恢复来说,只还原受损的数据文件;不完整恢复操作还原所有数据文件。数据文件不必从

相同备份中还原,但它们必须都早于想恢复到的点。如果当前数据库的物理结构与被还原的版本的结构不同,
则不必还原控制文件以及数据文件。例如,如果表空间无意间被删除,当前控制文件将对此一无所知。
还原构成表空间的数据文件则没有帮助:当前控制文件将忽略它们,不在恢复中包括它们。在必要时才还原
控制文件;如果这样做的话,将很复杂。
   第三步将归档和联机日志的重做数据应用到所需的点。这与完整恢复不同,在完整恢复中是应用所有
重做使数据库保持最新;对于不完整恢复,是在最近时间前的任意一点停止恢复。
最后,用resetlogs打开数据库。这将重新初始化联机重做日志文件,创建数据库的一个新化身。
数据库的化身是带有新的重做线程(日志序列号从1开始)的数据库版本。这是与完整恢复的最后一个不同点。
在完整恢复后,数据库与问题发生前一样,但在不完整恢复后,它是个不同的化身。备份和归档日志是特定
于一个化身的,由一个化身生成的备份和归档日志必须与前一化身生成的备份和归档日志相分离。
(注:必须以sysdba身份连接进行不完整恢复。普通用户和sysoper用户都不行)
   加载数据库并还原所有数据文件和控制文件后,对于不完全恢复操作有三个选项:
*until time
*until SCN
*until sequence
until time选项将应用重做前滚数据文件至特定时间。精度为妙。该选项通常用于纠正用户错误。如果用户犯

了不可逆的错误,但知道犯错误的时间,那么基于时间恢复至错误发生之前是最好的选择。
    如果已知错误发生时的确切的系统变更号,那么可使用until scn选项。
如果归档日志文件或联机日志文件组缺失,则使用until sequence选项,它会将至日志切换前的所有工作恢复
到缺失的文件或组中。
(注:sql*plus和rman使用的不完全恢复的语法是不同的。sql*plus使用until cancel和until channel,而rman

使用until sequence和until scn,两者都是要until time)
在默认情况下,rman将还原最近的备份,并应用所有可用的重做。不完全恢复会修改者一行为:
必须从早于恢复点的备份进行还原,而恢复必须在那个时间停止。要确保还原和恢复使用相同的until time,

最佳时间是在一个run块中执行这两个命令。例如:

RMAN> run{
2> startup mount;
3> set until time="to_date('05-08-13 15:20','dd-mm-yy hh24:mi:ss')";
4> restore database;
5> recover database;
6> alter database open resetlogs;}

数据库已经启动

正在执行命令: SET until clause

启动 restore 于 05-8月 -13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=63 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00002 还原到 D:\ORACLEPX\TOOLS\ORACLE11G\ORADATA\ORC
L\SYSAUX01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 D:\ORACLEPX\TOOLS\ORACLE11G\ORADATA\ORC
L\UNDOTBS01.DBF
通道 ORA_DISK_1: 将数据文件 00004 还原到 D:\USERS.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 D:\ORACLEPX\TOOLS\ORACLE11G\ORADATA\ORC
L\EXAMPLE01.DBF

通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:35
完成 restore 于 05-8月 -13

启动 recover 于 05-8月 -13
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:08

完成 recover 于 05-8月 -13

数据库已打开
另一种语法是在每个命令中指定until值,如:
restore database until time='sysdate-7';
recover database until time='27-OCT-08';
第一个命令指示RMAN从至少有7天时间的备份还原数据库。第二个命令将执行不完整恢复至2008年10月27号的

开始。


推荐阅读
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了一个误删Oracle数据文件导致数据库无法打开的问题,并提供了解决方式。解决方式包括切换到mount状态、离线删除报错的数据文件等。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
mobiledu2502917073
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有