导航

2.3 备份与恢复配置

Posted on 2008-09-04 12:22  毅无涯  阅读(332)  评论(0编辑  收藏  举报

为了防止控制文件出现介质失败,应该多元化控制文件;为了提高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;

未选定行