ORACLE数据库的备份恢复(1)

备份是数据的一个代表性副本。该副本会包含数据库的重要部分,如控制文件、重做日志和数据文件。
备份通过提供一种还原原始数据的方法保护数据不受应用程序错误的影响并防止数据的意外丢失。
备份分为物理备份和逻备份。物理备份是物理数据库文件的副本。“备份与恢复”通常指将复制的文件从一个位置转移到另一个位置,同时对这些文件执行各种操作。
相比而言,逻辑备份包含使用SQL 命令导出并存储在二进制文件中的数据。Oracle 在重做日志缓冲区中记录提交的和未提交的更改。
逻辑备份用于补充物理备份。还原物理备份意味着重建它并将其提供给Oracle 服务器。要恢复还原的备份,需要使用事务日志中的重做记录来更新数据。事务日志记录在执行备份之后对数据库所做的更改。
Oracle 在例程故障之后自动执行崩溃恢复和实例恢复。在出现介质故障的情况下,数据库管理员(DBA) 必须启动恢复操作。
恢复备份涉及两种不同的操作:通过应用重做数据将备份前滚至一个较近的时间;将在未提交的事务中所做的所有更改回滚至其原来状态。
一般而言,恢复指在还原、前滚和回滚备份中涉及的各种操作。备份与恢复指在防止数据库丢失数据和在丢失数据时重建数据库的过程中涉及的各种策略和操作。
备份是数据文件、表空间或某个时间点的数据库等的快照。如果对数据库进行了周期性备份,则在数据丢失时用户可以将存储的重做信息应用到他们最新的备份中,从而恢复数据库的当前状态。
Oracle 使用户能够还原一个较早的备份和仅应用某些重做数据,从而将数据库恢复到一个较早的时间点。这种恢复称为不完全介质恢复。如果备份是一致的,那么根本不需要用户应用任何重做数据。


++++++++++++++++++++++++++++++++++
归档设置

归档的作用
归档的作用是在出现故障时可以恢复数据
归档日志其实是重做日志的复本,通过ARCn归档进程复制重做日志文件而生成
归档只有在数据库被配置为“归档模式”时才会被启用

Oracle通过Redo来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。Redo对于Oracle数据库来说至关重要。
在数据库中,Redo的功能主要通过3个组件来实现:Redo Log Buffer、LGWR后台进程和Redo Log File(在归档模式下,Redo Log File最终会写出为归档日志文件)。

Redo Entries的内容被Oracle数据库进程从用户的内存空间复制到SGA中的Redo Log Buffer之中。
Redo Entries在内存中占用连续的顺序空间,由于Redo Log Buffer是循环使用的,Oracle通过一个后台进程LGWR不断地把Redo Log Buffer的内容写出到Redo Log File中。
当用户在Buffer Cache中修改数据时,Oracle并不会立即将修改数据写出到数据文件上,因为那样做效率会很低,
到目前为止,计算机系统中最繁忙的部分是磁盘的I/O操作,Oracle这样做的目的是为了减少IO的次数,当修改过的数据达到一定数量之后,可以进行高效地批量写出。

同Redo Log Buffer类似,Redo Log File也是循环使用的,Oracle允许使用最少两个日志组。缺省情况下,数据库创建时会建立3个日志组。
SQL> select group#,members,status from v$log;
当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch。Log Switch会触发一个检查点,促使DBWR进程将写满的日志文件保护的变更数据写回到数据库。
在检查点完成之前,日志文件是不能够被重用的。
在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。
如果此后数据库崩溃,那么恢复只需要从最后一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归档模式),
日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障。
如果数据库配置为NOARCHIVELOG 模式,则没有重做历史记录保存到归档日志文件
中,恢复操作将受到限制,并且可能会导致事务处理工作丢失。这是日志文件自动循环的结果,在该循环过程中,恢复操作所需的较旧的日志文件被覆盖,只有该事务历史记录的最新部分可用。
可以以将数据库配置为ARCHIVELOG 模式,以便重做信息的历史记录可以保留在归档文件中。归档重做日志文件可以用于介质恢复。
数据库最初可以在ARCHIVELOG 模式下创建,但缺省情况下配置为NOARCHIVELOG模式。

归档模式的设置与取消
将数据库设置为ARCHIVELOG 模式的含义:
出现介质故障时,可以防止数据库丢失数据。可以在数据库联机时对其进行备份。由于介质故障导致表空间(非SYSTEM)脱机时,数据库的其余部分仍可用,因为表空间(非SYSTEM)可以在数据库打开时恢复。
介质恢复选项:
无论数据库处于联机或脱机状态,您都可以还原损坏文件的备份副本,并使用归档日志文件将数据文件更新为当前的版本。
可以将数据库恢复至特定的时间点。可以将数据库恢复至指定归档日志文件的末尾。可以将数据库恢复至特定的系统更改号(SCN)。

查看所当前连接的数据库,如下所示:
SQL> archive log list;
可以在数据库处于装载状态时使用ALTER DATABASE 命令更改ARCHIVELOG 模式。
SQL> ALTER DATABASE [ archivelog | noarchivelog ]
将数据库模式从NOARCHIVELOG 模式更改为ARCHIVELOG 模式后,您必须备份所
有数据库文件和控制文件。您上一次的备份不再有用,因为它是在数据库处于NOARCHIVELOG 模式下备份的。
将数据库置于ARCHIVELOG 模式之后进行的新备份,将由所有以后的归档重做日志文件应用。将数据库设置为ARCHIVELOG 模式并不启用归档程序(ARCn) 进程。
通常,我们是将数据库由非归档模式改为归档模式的,但是,在数据仓库或者特殊的应用情况下,我们需要将数据库由归档模式改为非归档模式。
SQL> shutdown normal;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list

SQL> shutdown transactional;
SQL> shutdown immediate;
在设置归档、非归档之前,需要将数据库shutdown,有三个选项normal、transactional、immediate。
其他关闭数据库的方式不能正常的设置归档模式。也可以使用OEM(Oracle Enterprise Manager)改变数据库的归档模式。

设置归档目的地
使用LOG_ARCHIVE_DEST_n 最多可指定归档目标,LOG_ARCHIVE_DEST_n 是动态参数,可以在系统级或会话级对其进行修改。通过添加后缀1 到10,最多可以指定十个目标。
这些目标可位于本地磁盘和远程备用数据库:
log_archive_dest_1 = "LOCATION=/archive1"
log_archive_dest_2 = "SERVICE=standby_db1"
目标可以是本地文件系统位置,由关键字LOCATION 定义。指定的位置必须是有效的,并且不能是一个NFS 装载的目录。
也可以是远程目标的Oracle Net 别名,由关键字SERVICE 指定。指定的服务名通过使用本地的tnsnames.ora 文件进行解析,以标识远程数据库。
Oracle9i 支持使用IPC 或TCP/IP 协议将归档日志文件发送到远程节点。只能为每个远程数据库指定一个归档目标。必须为至少一个目标指定LOCATION 参数。
使用LOG_ARCHIVE_FORMAT 可在文件名中包括日志序列号和线程号。

归档目的地的mandatory与Optional
使用LOG_ARCHIVE_DEST_n 参数时,可以将目标指定为强制(mandatory) 或可选
(optional),如下所示:
MANDATORY 表示必须成功完成归档到该目标的操作才可以覆盖联机重做日志文件。
OPTIONAL 表示即使联机重做日志文件尚未成功地归档到该目标,也可以重新使用。
这是缺省设置。
log_archive_dest_1="LOCATION=/archive/ MANDATORY REOPEN"
log_archive_dest_2="SERVICE=standby_db1 MANDATORY REOPEN=600"
log_archive_dest_3="LOCATION=/archive2/ OPTIONAL"

REOPEN 属性定义发生故障时是否必须重新尝试归档到目标。如果为关键字REOPEN
指定了值,如REOPEN=600,则若发生故障,在经过指定时间(以秒计)后,归档程序将尝试写入该目标。缺省值为300 秒。归档到目标的尝试次数没有限制。归档中的所有错误将在主站点的警报文件中报告。
如果未指定REOPEN,则可选目标上的错误将被记录并忽略。不再将重做日志发送到
这些目标。在归档成功之前,强制目标上的错误将导致无法重新使用联机重做日志。只要归档不成功,归档目标的状态就设置为ERROR。
可以使用联机重做日志文件之前需要成功归档的目标数量是根据以下设置决定的:定义为MANDATORY 的目标的数量,LOG_ARCHIVE_MIN_SUCCEED_DEST 参数的值。该参数用于为需要归档的本地目标数
指定一个下限值。如果该值小于强制本地目标的数量,则它对归档行为没有影响。如果该值大于强制本地目标的数量,则本地归档目标的数量必须至少等于该值,才可以重新使用联机重做日志文件。

将数据库设置为ARCHIVELOG 模式后,您必须决定是自动还是手动归档联机重做日志文件。这是创建归档重做日志文件以便用于恢复时的第二步。
在自动归档过程中,将启用ARCn 后台进程,该进程在重做日志文件填满后复制这些文件。在手动归档过程中,必须使用SQL*Plus 或Oracle Enterprise Manager 复制文件。

指定多个归档进程
将LOG_ARCHIVE_START 设置为TRUE 后,Oracle 例程将按照LOG_ARCHIVE_MAX_PROCESSES 定义的数量启动多个归档进程。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

可以在例程启动的时候设置自动归档:
如果数据库处于ARCHIVELOG 模式,通过设置以下参数,可以在每次启动数据库例程时启动归档程序进程:
LOG_ARCHIVE_START = boolean
如果Boolean 为TRUE,将在例程启动时自动启动n 个ARCn 进程,其中n 是由LOG_ARCHIVE_MAX_PROCESSES 确定的值。
如果Boolean 为FALSE,将禁止在例程启动时启动ARCn。
设置初始化参数后,ARCn 进程将在例程启动时自动启动,而无需您手动启动自动归档。也可以在例程启动之后启用自动归档
可以选择使用带有TO 选项的ALTER SYSTEM ARCHIVE LOG START 命令指定归档目标。例如:
UNIX :SQL> ALTER SYSTEM ARCHIVE LOG START TO '/ORADATA/ARCHIVE1';
如果已启用ARCn 进程,则执行以下命令以停止ARCn 进程:
SQL> ALTER SYSTEM ARCHIVE LOG STOP;
停止ARCn 进程并不会将数据库设置为NOARCHIVELOG 模式。如果所有重做日志组都已使用但未归档,处于ARCHIVELOG 模式的数据库将会停止。

手动归档
如果数据库处于ARCHIVELOG 模式,且未启用自动归档,则必须手动归档联机重做日志文件。发出下面的命令进行手动归档:
ALTER SYSTEM ARCHIVE LOG CURRENT;

手动归档联机重做日志文件时,可以在ALTER SYSTEM ARCHIVE LOG 命令中使用以下选项:
选项            说明
THREAD            指定包含要归档的重做日志文件组的线程(用于Oracle Parallel Server)
SEQUENCE        归档由日志序列号标识的联机重做日志文件组
CHANGE            基于SCN 进行归档
GROUP            归档联机重做日志文件组
CURRENT            归档指定线程的当前重做日志文件组
LOGFILE            归档包含有由文件名标识的成员的重做日志文件组
NEXT            将尚未归档的最旧的联机重做日志文件组进行归档
ALL                对指定线程的已满但尚未归档的所有联机重做日志文件组进行归档
START            启用重做日志文件组的自动归档
TO                指定重做日志文件组归档的目标位置
STOP            禁用重做日志文件组的自动归档

控制归档到目标
归档目标的状态可以动态地进行更改。缺省情况下,归档目标是ENABLE 状态,表明
Oracle 服务器可以使用该目标。归档目标的状态可以通过设置相应的LOG_ARCHIVE_DEST_STATE_n 参数来进行修改。
例如,要在发生错误时暂时停止归档到强制位置,可以将该目标的状态设置为DEFER。
在参数文件中可能定义了一个目标,但它设置为DEFER。当另一目标出现错误或需要维护时,可以启用该目标。
如果一个目标的状态设置为DEFER,则不会执行归档到该目标的操作。如果该目标
的状态更改为ENABLE,则必须手动将所有缺失的日志归档到该目标。

指定归档文件格式
通过指定LOG_ARCHIVE_FORMAT = extension参数来指定归档的文件格式,其中,extension 应包括日志序列号变量%s 或%S。缺省值是根据操作系统而定的。如下:
UNIX:LOG_ARCHIVE_FORMAT=arch%s.arc
Windows NT:LOG_ARCHIVE_FORMAT = %%ORACLE_SID%%T%TS%S.ARC,其中,
%ORACLE_SID% 被转换为数据库SID
文件名选项:
%s 或%S:包括日志序列号,作为文件名的一部分。
%t 或%T:包括线程号,作为文件名的一部分。
使用%S 可通过在值的左侧用0 来填补空位使该值长度保持固定。

与归档相关的动态视图有以下几个:V$ARCHIVED_LOG、V$ARCHIVE_DEST、V$LOG_HISTORY、V$DATABASE、V$ARCHIVE_PROCESSES。
v$archived_log视图显示控制文件中的归档日志信息。
V$ARCHIVE_DEST视图对于当前例程,说明所有归档日志目标、当前值、模式和状态。
v$log_history包含控制文件中的日志文件信息。
V$DATABASE视图显示归档的当前状态。
V$ARCHIVE_PROCESSES提供有关例程的各种ARCH 进程的状态的信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值