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

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

发布时间:2021-03-18 18:11:53 所属栏目:站长百科 来源:网络整理
导读:本文Oracle讲述了数据库备份和恢复配置的详解过程,可能的失败及其解决方法。 ? 失败类型 ? 遇到的失败或错误分为两大类:物理和逻辑。物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员)。 ?
操作 从缓存中刷新哪些缓存区 使表空间脱机 表空间中的所有块 使数据文件脱机 数据文件中的所有块 删除区间 区间中的所有块 截断表 表中的所有块 将表空间置于备份模式 表空间中的所有块 用RMAN备份数据文件 数据文件中的所有块

?

保护联机重做日志文件


?

Oracle数据库运行时至少需要两个联机重做日志文件组, 从而能够在两个组之间进行切换。考虑到性能因素,可能需要添加更多的联机重做日志文件组,但两组是必需的。每个组都由一个或多个成员组成,这些成员是物理文件。运行Oracle数据库只要求每个组有一个成员,但是为了安全起见,每个组至少都应当具有两个成员。

?

DBA不允许丢失当前联机日志文件组的所有备份。如果出现这种情况,就会丢失数据。在丢失当前联机日志文件组的素有成员时,不丢失数据的唯一方法是,配置一个无数据 损失的Data Guard环境,不过比较复杂。为什么说不丢失但钱联机日志文件组的所有成员直观重要呢?答案与实例恢复有关。实例崩溃后,SMON进程会使用当前联机日志文件组的内容进行前滚恢复,从而修复数据库中的任何损坏。如果当前联机日志文件组不可同,可能是由于未被多路复用,一个成员因介质受损而被破坏,那么SMON进程无法进行前滚恢复。如果SMON进程无法通过前滚修正数据库的损坏,那么不能打开数据库。

?

如果重做日志文件组的一个成员被损坏或丢失,那么数据库在存在备份成员的情况下,仍然会保持打开状态。这与控制文件不同,控制文件任何副本的损坏都会使数据库立即崩溃。同样,只要存在至少两个重做日志文件组,每个组都至少有一个有效的成员,那么在数据库打开时,也可以添加或移动重做日志文件组以及组中的成员。

?

在打开数据库时,无须停机,联机重做日志就可以重新配置,而数据库在非加载模式下或完全关闭时,才能执行控制文件中的操作。

?

V$LOG视图给每个组显示一行,V$LOGFILE视图给每个日志文件成员显示一行。

?

[email?protected] prod>select group#,sequence#,members,status from v$log;
GROUP# SEQUENCE# MEMBERS STATUS---------- ---------- ---------- ---------------- 1 10 1 CURRENT 2 8 1 INACTIVE 3 9 1 INACTIVE
[email?protected] prod>select group#,status,member from v$logfile;
GROUP# STATUS MEMBER---------- ------- ------------------------------ 3 /u01/oradata/prod/redo03.log 2 /u01/oradata/prod/redo02.log????????1????????/u01/oradata/prod/redo01.log
[email?protected]?prod>alter?system?switch?logfile;
System?altered.
[email?protected]?prod>select?group#,status?from?v$log;
GROUP# SEQUENCE# MEMBERS STATUS---------- ---------- ---------- ---------------- 1 10 1 ACTIVE 2 11 1 CURRENT????????3??????????9??????????1?INACTIVE[email?protected]?prod>

?

(编辑:核心网)

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

然而,如果DBWn进程在实例崩溃前将某些数据块写入磁盘,那么又将出现怎样的情况呢?John(或者另一个用户)可能频繁地重新查询与其相关的数据,而Joo对数据进行了未提交的更改,并且不再查看这些数据。因此,DBWn进程将确定在磁盘上优先写入Joo所做的变更,然后再写入John所做的变更。DBWn进程总是会在磁盘上先写入不活跃的数据块,然后再写入活跃的数据块。因此,此时数据文件中存储了JOO的未提交事务,但是丢失了John的已提交事务。这是最糟糕的损坏类型。不过经过仔细考虑可以发现:即使此时实例崩溃,前滚仍然能够解决这个问题。重做流中始终存在重新构建已提交变更所需的足够信息,其原因显而易见,因为提交操作在DBWn进程完成写入之前不会结束。不过,因为LGWR进程将所有数据块的所有变更都写至日志文件,因此日志文件中也将存在重新构建撤销段所需的足够信息,从而能够回滚Joo未提交的事务。

?

综上所述,因为LGWR进程总是先于DBWn进程进行写操作,并且在提交的同时进行实时的写操作,所以在重做流中始终存在足够的信息,从而能够重新构建任何已提交的未被写入数据文件的变更,回滚任何已被写入数据文件的未提交变更。只要没有受到物理损坏,重做与回滚这种实例恢复机制就能够使Oracle数据库绝对不被破坏。

?

执行SHUTDOWN ABORT命令会损坏数据库吗?答案是绝对不会!这个命令不可能损坏数据库。只要联机日志文件可用,实例恢复机制就总是可以恢复任何损坏的数据。

?

检查点和重做日志


?

检查点机制

?

检查点位置(崩溃后,重做流中的实例恢复起点)由DBWn自动前移。这个过程称为“增量检查点(incremental checkpointing)”。除此之外,还有“完整检查点(full checkpointing)”和“局部检查点(partial checkpointing)”。

?

增量检查点是正常数据库活动的一部分。DBWn进程决定缓存中是否有足够的、已更新的块,是否应把其中的几个写入磁盘。选择写入哪些变更的缓冲区的算法,是基于更改时多久以前进行的,以及如何激活缓冲区。

?

在一般情况下,只有缓冲区已更改,且是空闲的,才能写入该缓冲区。永远不要忘记,提交变更和把块写入磁盘之前没有相关性,DBWn只写入所需的最少块数。

?

如果将素有脏缓冲区都写入磁盘,就会出现完整检查点。在常规运行中,缓存中可能存在一百万个脏缓冲区,但对于增量检查点,DBWn只写入其中的数百条。而对于完整检查点,它将写入这些内容。为此,必须完成大量的工作:在执行检查点时,需要非常高的CPU使用率和磁盘使用率,用户会话的性能会随之降低。完整检查点会对业务产生负面影响。鉴于此,只有在两种情况下才执行完整检查点,第一种情况是有序关闭,第二种情况是DBA要求这么做。

?

当使用NORMAL、IMMEDIATE或TRANSACTIONAL选项关闭数据库时,都会执行检查点:在关闭和卸载数据库之前,DBWn会将所有的脏缓冲区刷新到磁盘中。这意味着,再次打开数据库时,不需要执行任何???复操作。在执行某些操作(如启用归档日志模式)前,始终希望(也有必要)执行干净关闭。使用以下命令,可以在任何时间发出完整检查点信号:

alter system check point;

?

对于某些操作而言,局部检查点是必须的,并会自动执行。局部检查点影响的缓冲区因操作而异:

?

热点阅读