加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle数据库备份和恢复配置详解

发布时间:2021-03-18 18:11:53 所属栏目:站长百科 来源:网络整理
导读:本文Oracle讲述了数据库备份和恢复配置的详解过程,可能的失败及其解决方法。 ? 失败类型 ? 遇到的失败或错误分为两大类:物理和逻辑。物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员)。 ?
副标题[/!--empirenews.page--]

本文Oracle讲述了数据库备份和恢复配置的详解过程,可能的失败及其解决方法。

?

失败类型


?

遇到的失败或错误分为两大类:物理和逻辑。物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员)。

?

按从轻到重、易恢复到难恢复排列:

?

  • 语句失败:用户的SELECT或DML语句因权限、语法或资源限制而失败。

  • 用户错误:用户误删了一个表或表中的行。

  • 用户进程失败:与数据库的连接因为客户端断开或未预料的停机而失败。

  • 网络失败:客户机和服务器(数据库)之间的网络连接因为网络硬件或协议错误而失败。

  • 实例失败:数据库实例因为bug、操作系统错误、内存崩溃甚或服务器的功率损失而崩溃。

  • 媒介失败:磁盘驱动物理错误或控制器硬件失败。

?

Oracle备份和恢复方法


?

1. 恢复管理器(Recovery Manager,RMAN)是用于在表级别(12c新增)、数据文件、表空间和数据库级别上备份、还原和恢复数据库对象的主要工具。除了备份和恢复之外,RMAN还有许多用途,包括把数据库克隆或复制到另一个位置。RMAN的一个主要组件是备份和恢复对象的一个特定位置,称为快速恢复区(Fast Recovery Area,FRA)。这个区在理想情况下是ASM中的一个磁盘组,但也可以位于操作系统的文件系统上。无论位置在哪里,它都是所有备份和恢复对象的集中存储位置。FRA根据大小和恢复目标来管理,这是指根据恢复窗口或需要保留的备份数。使用FRA是可选的,但这是最佳实践方式。

?

2. Oracle安全备份(Oracle Secure Backup,OSB)与RMAN一起提取RMAN备份,把它们复制到磁带设备或运存储中,以防止数据中心的灾难性故障而导致的数据丢失。OSB还提供了OS级别上的RMAN扩展,来备份Linux服务器和任何附加的存储,例如网络附加存储(NAS)设备。

?

3. Oracle Data Guard是Oracle的一个可用性(HA)很高的解决方案,用于确保接近实时(因为主数据库失败)的可用性,或防止数据库崩溃。从主数据库的副本中实例化一个独立数据库(可以创建好几个独立数据库),从数据库中接收重做数据,来更新其数据文件。因此,独立数据库就与主数据库保持同步。独立数据库还可以临时用作数据库的只读副本,以用于生成报表,因此释放主数据库上的资源,在联机事务处理(OLTP)环境中有更短的响应时间。另一种独立数据库称为逻辑独立数据库。它不是持续不断地把重做数据应用于主数据库的物理副本,而是把重做操作转换为等价的DML SQL。因此,独立数据库在逻辑上等价于独立数据库,但几乎肯定没有与主数据库相同的物理结构。逻辑独立数据库并不是容错环境的一部分,而是一个优化为数据仓储的独立数据库,其中包含了与主数据库相同的数据。

?

实例恢复和数据库不可能崩溃


?

实例失败的原因有电力故障、重启服务器、发出SHUTDOWN ABORT命令,或导致实例后台进程终止、破坏System Global Area(SGA)的任何事情——所有这些都没有尝试把缓存中变更的缓存数据刷新到数据文件中,或者混滚任何正在进行的事务。

?

大体上,实例恢复只不过是使用联机日志文件的内容,将数据库缓冲区缓存重新构建至崩溃之前的状态。这个重构过程将重演在崩溃时未被写至磁盘的数据块的相关重做日志中提取出的所有变更。完成上述操作后,就能够打开数据库。此时,数据库仍然受到损坏,但是由于用户看到的实例已被修复,因此允许用户进行连接。实例恢复的这个阶段称为前滚,该阶段将恢复所有变更(也就是针对已提交和未提交事务的数据块变更与撤销块变更)。每条重做记录都具有重新构造一个变更所需的最少信息:数据块的地址以及新值。在前滚期间,会读取每条重做记录,相应的数据块从数据文件载入数据块缓冲区缓存,并且应用相应的变更,随后,数据块会被写回磁盘。

?

向前回滚结束后,崩溃看上去似乎从未发生过。不过此时数据库中还存在未提交的事务,这些事务必须被回滚,Oracle将在实例恢复的回滚阶段自动完成未提交事务的回滚操作。然而,上述操作则发生在数据库已被打开且使用之后。如果用户在连接时遇到某些需要回滚但是尚未回滚的数据,那么不存在任何问题。由于前滚阶段会填充保护未提交事务的撤销段,因此服务器能够以正常的方式回滚变更,从而实现度一致性。

?

实例恢复时自动的、不可避免的,那么如何才能调用实例恢复呢?答案是使用STARTUP命令。在实例启动时,加载控制文件之后,打开数据库之前,SMON进程会查看所有数据文件和连接重做日志文件的文件头。此时,如果已经出现了实例失败,由于文件头没有全部同步,因此SMON进程会发现实例失败,从而进入实例恢复例程,而数据库只能在前滚阶段结束之后才能被真正地打开。

?

如果执行了STARTUP命令,那么绝对不会丢失任何数据。在发生任何崩溃之后,都应当执行STARTUP命令并查看崩溃的程度。这个命令可以解决所有问题。

?

重做日志流中始终存在足够的信息,因此不仅能够重新构造发生崩溃前进行的所有操作,而且能够重新构造回滚崩溃时正在进行的事务所需的撤销信息。分析下面的场景:

?

用户John启动了一个事务。John使用某些新值更新某个表的一行,其服务器进程则将旧值复制至一个撤销段。但是完成这些更新之前,服务器进程会将变更写入日志缓冲区。用户Joo也启动了一个事务。两个用户都未提交事务,也没有在磁盘上写下任何数据。如果此时实例崩溃,那么不存在(甚至重做日志中也不存在)与任一个事务相关的记录。因此,两个事务都不会被恢复,但这并不是一个问题。因为都未被提交,所以不应当恢复这两个事务(未提交的工作绝不会被保存)。

?

随后,用户John提交了自己的事务。这个提交操作会触发LGWR进程将日志缓冲区中的内容刷新到联机重做日志文件,也就是说,此时重做日志文件内存在joh和Joo的事务对表和撤销段的更改以及针对John的事务的提交记录。只有在LGWR进程结束后,“commit complete(提交完成)”消息才会被返回给John的用户进程。但是,数据文件中仍然不会写入任何数据。如果此时实例失败,那么前滚阶段会重新构造这两个事务,不过处理完所有重做后仍然不会得到针对Joo的更新操作的提交记录,这将通知SMON进程回滚Joo所做的变更,同时保留John所做的变更。

?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读