2.3 备份与恢复配置

本文介绍了Oracle数据库管理员如何通过多元化控制文件和重做日志、配置恢复参数等手段提高数据库的稳定性和恢复效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了防止控制文件出现介质失败,应该多元化控制文件;为了提高DB 安全运行时间(MTBF),应该多元化重做日志;为了降低例程恢复时间,需要合理地配置初始化参数。

2.3.1 多元化控制文件

控制文件不仅记载了DB的物理结构及状态,还记载了与备份和恢复相关的动态信息。如果DB 只包含一个控制文件,并且控制文件出现介质失败,那么会导致数据库无法装载,此时DBA 必须要重新建立控制文件或者恢复控制文件。ORACLE 建议每个DB 至少包含两个或两个以上控制文件,并且部署到不同的磁盘上。在多元化控制文件之后,它们互为镜像,内容保持一致。此时如果某个控制文件出现介质失败,那么此时DB也无法装载,但DBA 只要从初始化参数 control_files 中去掉损坏的控制文件即可。

 

示例:为示例数据库增加一个控制文件

(1)确定已存在的控制文件。

SQL>  conn / as sysdba
已连接。
SQL> select  * from v$controlfile;

STATUS  NAME                           IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ------------------------------ --- ---------- --------------
        D:/DEMO/CONTROL01.CTL          NO       16384            430

 

(2)修改初始化参数control_files。

SQL> ALTER SYSTEM SET CONTROL_FILES =
  2  "D:/DEMO/CONTROL01.CTL", "C:/DEMO/CONTROL02.CTL"
  3  SCOPE=SPFILE;

系统已更改。

 

(3)关闭数据库并复制控制文件。

SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host copy D:/DEMO/CONTROL01.CTL C:/DEMO/CONTROL02.CTL

 

(4)启动数据库

SQL> STARTUP
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              71304548 bytes
Database Buffers           92274688 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。


SQL> SELECT * FROM V$CONTROLFILE;

STATUS  NAME                           IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ------------------------------ --- ---------- --------------
        D:/DEMO/CONTROL01.CTL          NO       16384            430
        C:/DEMO/CONTROL02.CTL          NO       16384            430

 

2.3.2 多元化重做日志

重做日志用于记录数据库变化。

在ORACLE 中至少要包含两个或两个以上的日志组。当建立日志组时至少要指定一个日志成员。

如果日志组只有一个日志成员,并且该成员出现损坏,那么当LGWR 切换到该日志组时,ORACLE DB 会停止运行。当该组有多个日志成员时,LGWR 将事务变化写入到没有损坏的日志成员。

 

示例:增加日志成员

(1)确定原有成员的位置

SQL> conn / as sysdba
已连接。
SQL> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER                         IS_RECOVERY_DEST_FILE
------- ------- ------- ------------------------------ -------------------------
      3         ONLINE  D:/DEMO/REDO03.LOG             NO
      2         ONLINE  D:/DEMO/REDO02.LOG             NO
      1         ONLINE  D:/DEMO/REDO01.LOG             NO

 

(2)增加日志成员

SQL> alter database add logfile member
  2  'C:/DEMO/REDO01_2.LOG' TO GROUP 1,
  3  'C:/DEMO/REDO02_2.LOG' TO GROUP 2,
  4  'C:/DEMO/REDO03_2.LOG' TO GROUP 3;

数据库已更改。

SQL> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER                         IS_RECOVERY_DEST_FILE
------- ------- ------- ------------------------------ -------------------------
      3         ONLINE  D:/DEMO/REDO03.LOG             NO
      2         ONLINE  D:/DEMO/REDO02.LOG             NO
      1         ONLINE  D:/DEMO/REDO01.LOG             NO
      1 INVALID ONLINE  C:/DEMO/REDO01_2.LOG           NO
      2 INVALID ONLINE  C:/DEMO/REDO02_2.LOG           NO
      3 INVALID ONLINE  C:/DEMO/REDO03_2.LOG           NO

已选择6行。

 

2.3.3 配置例程恢复参数

例程恢复是指当出现例程失败时由后台进程SMON 自动同步数据文件、控制文件和重做日是志并打开DB的过程。主要有以下几种情况:

  • 电源断电导致ORACLE SERVER 不可用。
  • 硬件故障导致ORACLE SERVER 不可用,例如CPU失败、内存损坏。
  • 某个必需的后台进程(DBWR、LGWR、PMON、SMON、CKPT)出现失败。

例程恢复时间由需要应用的脏缓冲区块个数确定,脏缓冲区块个数的最大值由检查点来确定,而以下初始化参数可以用于控制检查点:

  • fast_start_mttr_target:用于指定例程恢复的最大时间(单位:秒)。
  • log_checkpoint_timeout:用于指定发出检查点的时间间隔(单位:秒)。
  • log_checkpoint_inteval:用于指定发出检查点的重做日志块间隔(单位:OS块)。

初始化参数log_checkpoint_timeout 和 log_checkpoint_inteval 是为了与早期版本兼容而保留,建议使用fast_start_mttr_target 控制例程恢复时间。

示例:将例程恢复时间控制在10分钟之内

SQL> alter system set fast_start_mttr_target=600 ;

系统已更改。

通过查询动态性能视V$INSTANCE_RECOVERY,可以监视例程恢复的动态信息。

SQL> select actual_redo_blks, target_redo_blks, estimated_mttr from v$instance_recovery;
ACTUAL_REDO_BLKS TARGET_REDO_BLKS ESTIMATED_MTTR
---------------- ---------------- --------------
              24              140             11

ACTUAL_REDO_BLKS : 用于标识当前情况下例程恢复实际需要应用的重做块个数

TARGET_REDO_BLKS : 用于标识当前情况下例程恢复最多需要应用的重做块个数

ESTIMATED_MTTR : 用于标识例程恢复的预计时间。

 

因为例程恢复时间主要由REDO 时间和UNDO 时间确定,所以为了降低例程恢复的实际时间,应该调整REDO 和 UNDO 的时间。

1,调整REDO时间

为了降低例程恢复的REDO时间,可以启动多个SLAVE 进程。通过配置初始化参数recovery_parallelism,可以指定SLAVE 进程个数(该参数是静态的,修改后要重新启动例程)。

SQL> conn / as sysdba
已连接。
SQL>  Alter System Set Recovery_parallelism=3 Scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              79693156 bytes
Database Buffers           83886080 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。

 

2,调整UNDO时间

为了降低例程恢复的UNDO时间,可以启动多个SLAVE进程,参数fast_start_parallel_rollback 可以控制SLAVE进程的个数。如果设置为FALSE,则不会启动SLAVE进程;如果设置为LOW,则SLAVE进程个数为2倍的CPU个数;如果设置为HIGH,则SLAVE进程个数为4倍的CPU个数。

SQL> alter system set fast_start_parallel_rollback=low;

系统已更改。

当执行例程恢复时,通过查询动态性能视图v$fast_start_servers可以用于监视UNDO 操作的进程信息。

SQL> select pid, state, undoblocksdone from v$fast_start_servers;

未选定行

当执行例程恢复时,通过查询动态性能视图v$fast_start_transactions 可以用于监视事务恢复的信息。

SQL> select * from v$fast_start_transactions;

未选定行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值