发行说明


|13.3 如何使用暂挂的 I/O 来进行数据库恢复

| | | | |

|下面关于 db2inidb 实用程序的信息优先于《版本 7.2 新增内容》一书中的信息。

|db2inidb 是 DB2 附带交付的工具,可执行崩溃恢复或者使数据库处于前滚暂挂状态。

|暂挂 I/O 支持持续的系统可用性,方法是完全实现联机分割镜像处理,即分割镜像而不关闭数据库。如果您不能对大型数据库进行脱机或联机备份,可通过使用暂挂的 I/O 和分割镜像映象来从镜像映象中执行备份或系统复制。

|暂挂 I/O 避免了在采用数据库的分割镜像映象时执行磁盘写操作。除了联机备份和复原之外,所有数据库操作在数据库暂挂期间都应正常工作。但是,如果必须将缓冲池或日志缓冲区中的脏页清仓至日志中,则某些操作可能需要等待恢复 |I/O 写操作。一旦数据库 I/O 恢复,这些操作就应恢复正常。数据库 I/O 从它最初暂挂的同一连接恢复是很重要的。否则,如果它们需要将缓冲池中的脏页清仓至磁盘,后续连接尝试可能会挂起。一旦恢复数据库 |I/O,就会完成这些连接。如果连接尝试被挂起,并且不能从用来暂挂它的连接中恢复 |I/O,则将需要使用 RESTART 命令的 WRITE RESUME 选项来执行崩溃恢复。

|在分区数据库环境中,不需要同时对所有分区暂挂 |I/O 写操作。可以暂挂一个或多个分区的子集,以便创建分割镜像以执行脱机备份。如果子集中包括目录节点,则它必须是要暂挂的最后一个分区。

|对数据库创建镜像主要涉及到复制数据库目录和本地数据库目录的整个内容。本地数据库目录 sqldbdir 与主数据库目录位于文件结构的同一层。另外,如果日志目录和表空间容器不在数据库目录中,则还必须复制它们。因为分割镜像数据库独立于这些目录路径,所以这些目录复制至的路径必须与主系统的那些路径完全相同。这意味着实例也必须是相同的。由于存在这种相关性,因此,不可能在主数据库所在的同一系统上创建镜像数据库,除非使用 |db2inidb 工具的新选项"重定位"。

|“重定位”选项的目的在于使用指定的配置文件在给定系统上重定位数据库。这可能涉及到更改内部数据库目录、容器目录、日志目录、实例名和数据库名。假定数据库目录、容器目录和日志目录已成功镜像至主数据库所在系统上的不同目录路径,可将 |db2inidb 工具与“重定位”选项配合使用来更新镜像数据库的内部路径。可以下文中找到带有此选项的使用方案。

|根据镜像存储设备的方式,使用 db2inidb 的方式也将发生变化。以下用法假定整个数据库在存储器系统中是一致镜像的。

|在多节点环境中,db2inidb 工具一定要在每个分区上运行,才能从任何分区上使用分割镜像。通过使用 db2_all 命令,db2inidb 工具可以同时在所有分区上运行。 |

  1. |

    |创建克隆数据库

    |此处的目标是在另一系统上使用主数据库的克隆。下列过程描述如何克隆数据库:

    1. |输入以下命令以暂挂主数据库上的 I/O 写操作:
      |     db2 set write suspend for database
    2. |使用操作系统和磁盘子系统级别命令来从主数据库中分割镜像。一定要同时分割数据和日志。
    3. |输入以下命令以恢复主数据库上的 I/O 写操作:
      |     db2 set write resume for database

      |运行命令后, |主数据库应返回正常状态。

    4. |将主数据库的分割镜像安装至另一系统。
    5. |通过输入以下命令来在另一系统上启动数据库实例:
      |     db2start
    6. |输入以下命令来启动 DB2 崩溃恢复:
      |db2inidb database_name AS  SNAPSHOT
      
      |注意:
      此命令将除去暂挂写状态,并回滚由分割时正在发生的事务所作的更改。 |
      |

    |还可以使用此进程来执行脱机备份,但是如果在主数据库上复原,则不能使用此备份来进行前滚,原因是日志链将不匹配。

  2. |

    |将“分割镜像”用作备用数据库

    |因为镜像(备用)数据库会持续前滚日志,所以会经常从主系统访存主数据库创建的新日志。以下过程描述如何将分割镜像用作备用数据库:

    1. |在主数据库上暂挂 I/O 写操作:
      |	db2 set write suspend for database
    2. |使用操作系统和磁盘子系统级别命令来从主数据库中分割镜像。一定要只分割数据而不分割日志。
    3. |在主数据库上恢复 I/O 写操作以便它返回正常处理。
      |	db2 set write resume for database
    4. |将数据库的分割镜像安装至另一系统。
    5. |使用 db2start 命令来启动主数据库实例。
    6. |使镜像处于前滚暂挂状态,并前滚镜像:
      |	db2inidb database_name AS STANDBY

      |注意:
      此命令将除去暂挂写状态,并使镜像数据库处于前滚暂挂状态。 |
    7. |通过设置用户出口程序以从主系统检索日志文件来复制日志,以确保最新的日志可供此镜像数据库使用。
    8. |将数据库前滚至日志末尾。
    9. |返回至步骤 f,重复此进程直到主数据库关闭为止。
    10. |将数据库前滚至日志末尾,并使用 AND STOP 选项使数据库重新联机。现在就可以使用它。 |
  3. |

    |将分割镜像用作备份映象

    |下列过程描述如何将镜像数据库用作备份映象来覆盖复原主数据库:

    1. |使用 db2stop 命令来停止主数据库实例。
    2. |使用操作系统和磁盘子系统命令来将镜像数据复制回主数据库的顶部。不要复制回日志文件。主数据库上的日志必须用于前滚操作。
    3. |使用 db2start 命令来启动主数据库实例。
    4. |运行以下命令以使镜像数据库处于前滚暂挂状态,并除去暂挂写状态:
      |db2inidb database_name AS MIRROR
    5. |将数据库前滚至日志末尾,并使用 AND STOP 选项使数据库重新联机。现在就可以使用它。 |
  4. |

    |将镜像分割到主数据库所在的同一系统上

    |下列过程描述如何使用 db2inidb 工具的“重定位”选项将数据库镜像到主数据库所在的同一系统上。示例假定将在新实例中使用该数据库。

    1. |在当前系统上创建新实例。
    2. |在主数据库上暂挂 I/O 写操作:
      |	db2 set write suspend for database
    3. 使用操作系统和磁盘子系统级别命令来从主数据库中分割镜像。
      |注意:
      必须将数据库目录、本地数据库目录、容器目录和日志目录复制至新实例。如果容器目录或日志目录在数据库目录下,则只需要复制数据库目录和本地数据库目录。 |
    4. |恢复主数据库上的 I/O 写操作,以便使它返回正常处理:
      |	db2 set write resume for database
    5. |使用下列信息来创建配置文件:
      | DB_NAME=name,optional_new_name
      | DB_PATH=primary_db_dir_path,mirrored_db_dir_path
      | INSTANCE=primary_instance,mirror_instance
      | LOG_DIR=primary_db_log_dir,mirrored_db_log_dir
      | CONT_PATH=primary_db_container_#1_path,
      | mirrored_db_container_#1_path ...
      | CONT_PATH=primary_db_container_#n_path,
      | mirrored_db_container_#n_path
      | NODENUM=node_#

      |注意:
      仅当日志目录和容器目录在数据库目录外部时,才需要 |LOG_DIR 和 CONT_PATH 字段。所有其它字段都是必需的,但 NODENUM 除外,它将缺省为零(如果不指定的话)。 |
    6. |从新创建的实例启动数据库:
      |	db2start
    7. |重定位镜像数据库,除去暂挂状态,并使镜像处于前滚暂挂状态:
      |	db2inidb database_name as STANDBY relocate using config_file
    8. |通过设置用户出口程序以从主数据库检索日志文件来复制日志,以确保最新的日志可供此镜像数据库使用。
    9. |将数据库前滚至日志末尾。
    10. |返回至步骤 h,重复此进程直到主数据库关闭为止。
    11. |将数据库前滚至日志末尾,并使用 AND STOP 选项使数据库重新联机。现在就可以使用它。 |
    |


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]