ibmMQ-第七章

来源:互联网 发布:窥孔优化 课程设计 编辑:程序博客网 时间:2024/04/29 21:47
第七章 WebSphere MQ 恢复和重新启动目标1.了解WebSphere MQ的数据日志。2.学习在出现失败故障后,怎样恢复消息和WebSphere MQ对象。7.1 WebSphere MQ的数据日志消息传递系统确保输入到系统的消息被发送到它们的目的地。这意味着它必须提供跟踪系统中消息和恢复消息的方法(如果系统发生故障)。 WebSphere MQ 通过记录队列管理器(处理消息的接收、传输和传递)的活动日志来确保消息不丢失。并提供了三种恢复方式: 1.重启恢复。 2.崩溃恢复。 3.媒体恢复。 在所有情况下,恢复是把队列管理恢复到它停止时的状态,(除了回滚所有执行中的事务)队列管理器停止时未提交的任何消息将被删除。恢复所有永久消息;非持久性消息将被丢失。WebSphere MQ 把所有由队列管理器控制的数据的重要更改都记录到日志中。 这包括创建和删除对象(除了通道)、永久消息更新、事务状态、更改对象属性以及通道活动。 7.1.1日志的概念WebSphere MQ 日志包含两个组件: 1.一个或多个日志文件 2.日志控制文件 可以在队列管理器的配置文件中配置日志文件的大小和个数。在 WebSphere MQ Windows 版中,三个文件都缺省为 1 MB。在 WebSphere MQ UNIX 系统版中,三个文件都缺省为 4  MB。 创建队列管理器时,您可以指定主日志文件数和从日志文件数以及日志文件的大小。如果不指定数,则使用缺省值。 在 WebSphere MQ Windows 版中,如果未更改日志路径,则日志文件将存放在 C:\Program Files\IBM\WebSphere MQ\log\<QMgrName>目录下;在 WebSphere MQ UNIX 系统版中,如果未更改日志路径,则日志文件将存放在/var/mqm/log/QmName目录下。WebSphere MQ 在创建队列管理器时会自动创建所有的主日志文件,如果主日志用完了,则会动态地创建次日志文件。当WebSphere MQ不需要从日志空间时,也会动态地删除它们。 7.1.2日志控制文件日志控制文件包含监控日志文件使用状况的信息,如它们的大小和位置、下一个可用日志文件的名称等等。 注: 确保队列管理器启动时创建的日志足够大,使它能够满足应用程序处理的需要。7.1.3日志类型在 WebSphere MQ中,系统所需的日志文件数取决于日志文件大小以及接收到的消息数和消息长度。日志记录的形式有两种:循环日志和线性日志。循环日志记录如果您的WebSphere MQ系统恢复使用“重启恢复”就可以满足要求,则可使用循环日志,当系统停止时,正在处理的事务通过日志进行回滚操作。 循环日志是把所有重启数据都记录在日志文件环中。首先使用第一个日志文件,然后下一个,依次类推,直到所有文件都满为止。然后它回到环中的第一个文件又重新开始。只要产品在使用中,就会一直循环下去,并且具有永远不会用完日志文件的优点。 线性日志记录如果您的WebSphere MQ系统恢复需要使用“重启恢复”和“媒体恢复” (通过重播日志内容重新创建已丢失或已损坏的数据)才能满足要求,则使用线性日志。 线性日志记录在连续文件中保留日志数据。它不重用空间。由于磁盘空间是有限的,您可能需要考虑归档方式,来管理日志的磁盘空间,必要时重用或扩展现有的空间。 使用线性日志,则日志文件数可能非常大,这取决于您的消息流和您的队列管理器寿命。但是,有许多文件是活动的。活动文件包含重新启动队列管理器所需的日志信息。活动日志文件数通常与配置文件中定义的主日志文件数相同。 WebSphere MQ 检查点是一组日志记录,包含重新启动队列管理器成功的信息。重新启动队列管理器不需要的以前的任何记录信息,称为非活动的。 您必须确定何时不再需要非活动的日志文件。则可以压缩或者删除它们。7.1.4计算日志的大小确定队列管理器应该使用循环还是线性日志后,您需要估计队列管理器需要的日志大小。日志大小是由以下日志配置参数确定的: LogFilePages 每个主和次日志文件的大小是以4K为单位。LogPrimaryFiles 预分配的主日志文件数 LogSecondaryFiles 主日志用完后,可创建的次日志文件数。下表显示了队列管理器各种操作所消耗的日志数据量。大多数队列管理器操作只需要最少量的日志空间。 但是,当永久消息放入队列时,所有消息数据必须写入日志,以便它能够恢复此消息。通常,日志大小取决于队列管理器需要处理的永久消息的数量和大小。 表 日志开销大小(参考值)操作 大小 放入永久消息 750 字节 + 消息长度 如果是大消息,则分隔成 15700 字节的段,每个段都会有 300 字节的开销。 取消息 260 字节 同步点,提交 750 字节 同步点,回滚 1000 字节 + 12 字节创建对象 1500 字节 删除对象 300 字节 修改属性 1024 字节 记录媒体镜象 800 字节 + 镜象 镜象分隔成 260 000 字节的段,每个段有 300 字节开销。 检查点 750 字节 + 200 字节(每个活动的工作单元) 注: 1.每次启动队列管理器时,您可以修改主和从日志文件数。 2.日志文件大小只能在创建队列管理器前确定,以后不能修改。 3.主日志文件的数量和日志文件大小决定了队列管理器创建时预分配的日志空间,这些空间应该是由少量的大文件组成,而不是由大量的小文件组成的。 4.主日志文件和次日志文件的总数不能超过63个文件,这是针对循环日志而言, 线性日志则不受限制。5.当使用循环日志记录时,队列管理器重用主日志空间。主日志文件已满时,队列管理器将分配一个次日志文件(最多到限定值)。 7.2 使用数据日志进行恢复下列几种情况可能会损坏您的数据:•数据对象被损坏 •系统掉电 •通信故障 但WebSphere MQ可以帮助您恢复被破坏的数据。本节将描述如何使用日志进行数据恢复。 7.2.1从掉电或通信故障中恢复WebSphere MQ 可以从通信故障和掉电中进行恢复。另外,它有时还可以从其它类型的问题中进行恢复,例如,文件被意外删除。 在通信故障情况下,消息一直保留在队列中直到被接收应用程序取出。如果消息正在传输中,则消息将一直被保留在传输队列中直到被成功传输。要从通信故障中恢复,通常您可以重新启动使用失败的链接的通道。 如果您掉电了,则重新启动队列管理器时,WebSphere MQ 把队列恢复到失败时的已提交的状态。确保不丢失持久消息。但非持久性消息被丢弃;当WebSphere MQ 停止时会丢弃它们。 7.2.2恢复受损对象有些情况可以使 WebSphere MQ 对象成为不可用的,例如,由于无意中的损坏。您不得不恢复整个系统或部分系统。恢复操作与发现损坏的时间、日志是否支持媒体恢复和被损坏的对象有关。 7.2.2.3媒体恢复媒体恢复是从线性日志中的记录信息重新创建对象。例如,如果无意中删除了一个对象文件,则媒体恢复可以重新创建它。用于对象媒体恢复的日志信息被叫做媒体映象。媒体映象可以通过使用rcdmqimg 命令手工记录或自动记录。 媒体映象中包含对象映象的日志记录序列。 重新创建对象所必需的第一个日志记录叫作媒体恢复记录;它是对象的最后一个媒体映象的开始。每个对象的媒体恢复记录是检查点期间记录的信息之一。 从媒体映象重新创建对象时,有必要重播任何描述自采用最后一个映象以来对对象执行更新的日志记录。 例如,考虑在持久消息放入到队列前,采用具有队列对象映象的本地队列。为了重新创建最新的对象映象,有必要重播记录消息放入队列的日志条目,并重播该映象本身。 创建对象时,已编写的日志记录包含完全重新创建此对象所需的足够的信息。这些记录组成对象的第一个媒体映象。接着,每次关机时,队列管理器记录媒体映象自动执行如下操作: •所有进程对象和队列的映象不是本地的。 •空的本地队列的映象 还可以使用 rcdmqimg 命令手工记录媒体映象,在rcdmqimg(记录媒体映象)中对它进行了描述。此命令编写 WebSphere MQ 对象的媒体映象。一旦这样做了,仅保持媒体映象的日志和此时后创建的所有日志需要重新创建受损的对象。这样做的好处取决于某些因素,如可用的空闲存储器量和创建日志文件时的速度。 7.2.2.4恢复媒体映象如果发现某些对象被损坏,则 WebSphere MQ 自动从它们的媒体映象中进行恢复。特别地,这适用于正常队列管理器启动期间所找到的受损对象。如果队列管理器最后一次关机时有任何未完成的事务,则也会自动恢复任何受影响的队列,以便完成启动操作。 您必须使用 rcrmqobj 命令手工恢复其它对象,它会重播日志中的记录以重新创建 WebSphere MQ 对象。从日志中找到的最新映象中重新创建此对象,并带有保存此映象和发出重新创建命令期间所有可用的日志事件。如果 WebSphere MQ 对象受损,则仅可执行的有效操作是使用此方法删除或重新创建它。 不能用此方法恢复非持久性消息。 请参阅rcrmqobj(重新创建对象)以获得 rcrmqobj 命令的进一步详细信息。 包含媒体恢复记录的日志文件和所有后继的日志文件,在尝试对象的媒体恢复时必须在日志文件中可用。如果找不到必需的文件,发出操作程序消息 AMQ6767,并且媒体恢复操作失败。如果您不采用要重新创建的对象的常规媒体映象,则可能没有足够的磁盘空间来保持重新创建对象所必需的所有日志文件。 7.2.2.5启动期间恢复受损的对象如果队列管理器启动期间发现受损的对象,则所使用的操作取决于对象类型和队列管理器是否配置成支持媒体恢复。 如果队列管理器对象受损,则该队列管理器无法启动,除非它可以恢复该对象。如果队列管理器配置成使用线性日志,并支持媒体恢复,则 WebSphere MQ 自动尝试从其媒体映象中重新创建此队列管理器对象。如果所选的日志方法不支持媒体恢复,则可以恢复队列管理器的备份或删除该队列管理器。 如果队列管理器停止时任何事务都是活动的,则包含持久的、未提交的消息(在这些事务中放入或取出)的本地队列还需要成功启动该队列管理器。如果发现这些本地队列中的任何一个受损,并且队列管理器支持媒体支持,它自动尝试从其媒体映象中重新创建它们。如果无法恢复任何队列,则 WebSphere MQ 无法启动。 如果启动不支持媒体恢复的队列管理器的处理期间,发现任何包含未提交的消息的受损本地队列,则这些队列标记为受损对象,并且忽略它们上面的未提交的消息。这是因为不可能执行这样的队列管理器上的受损对象的媒体恢复,并且仅留下的操作是删除它们。发出 AMQ7472 消息报告任何损坏。 7.2.2.6在其它时间恢复受损的对象仅在启动期间对象的媒体恢复是自动的。在其它时间,检测到受损对象时,发出操作程序消息 AMQ7472,并且使用此对象的大多数操作失败。如果启动队列管理器后的任何时间该队列管理器对象受损,则该队列管理器执行抢先关机。队列管理器受损后您可以删除它,或者如果该队列管理器使用线性日志,则尝试使用 rcrmqobj 命令(请参阅rcrmqobj(重新创建对象)以获得进一步的详细信息)从其媒体映象中恢复它。 7.3保护 WebSphere MQ 日志文件WebSphere MQ 队列管理器运行时不要手工除去这些日志文件。如果用户无意删除了队列管理器需要重新启动的那些日志文件,则 WebSphere MQ 不发出任何出错消息,并且继续处理包含持久消息的数据。队列管理器正常关机,但是无法重新启动。则消息的媒体恢复就不可能了。 具有除去活动队列管理器使用的日志权限的用户也具有删除其它重要队列管理器资源(如队列文件、对象目录和 WebSphere MQ 可执行文件)的权限。因此,他们能够以针对 WebSphere MQ 无法保护其本身的途径损坏正在运行的或处于睡眠状态的队列管理器(可能是由于缺乏经验所致)。 所以授予超级用户或 mqm 权限时要谨慎。 7.4备份和恢复 WebSphere MQ您可能要定期备份您的队列管理器数据以保护由硬件故障导致的可能的破坏。但是,由于消息数据通常是短期的,您可以选择不进行备份。 7.4.1备份 WebSphere MQ要备份队列管理器的数据: 1.确保队列管理器不在运行。如果您尝试备份正在运行的队列管理器,备份可能会不一致,因为文件复制时正在进行更新。 如果可能,以正常方法停止您的队列管理器。尝试执行 endmqm -w(等待关机);仅当其失败时,使用 endmqm -i(立即关机)。 2.使用配置文件中的信息,查找队列管理器放置其数据和日志文件的目录。3.备份所有队列管理器的数据和日志文件目录,包括所有子目录。 确保没有丢失任何文件,特别是日志控制文件和配置文件。某些目录可以为空,但是以后恢复备份时全部需要,因此也要保存它们。 4.保留文件的权限。对于 WebSphere MQ UNIX 系统版,可以用 tar 命令完成。 7.4.2恢复 WebSphere MQ要恢复队列管理器的数据备份: 1.确保队列管理器不在运行。 2.查找队列管理器放置其数据和日志文件的目录。此信息保持在配置文件中。 3.清除您要放置备份数据的目录。 4.把备份的队列管理器数据和日志文件复制到正确的位置。 检查结果目录结构,确保您有所有必需的目录。 确保您有日志控制文件和日志文件。还请检查 WebSphere MQ 和队列管理器配置文件是是否一致,以便 WebSphere MQ 可以在正确的位置查看恢复的数据。 如果正确备份和恢复了数据,则将启动队列管理器。 注: 即使队列管理器数据和日志文件保持在不同的目录,但必须是在相同时间备份的。如果队列管理器数据和日志文件的备份时间不同,则队列管理器无效,并且可能会不启动。如果启动,您的数据很可能被损坏。 7.5恢复方案本节针对许多可能出现的问题并讲解如何进行恢复。 7.5.1磁盘故障您可能会遇到存放队列管理器数据或/和日志的磁盘出故障、数据被丢失或数据被破坏的情况。在所有情况下,首先检查任何受损的目录结构,若有必要,修复它。如果您丢失队列管理器数据,则队列管理器目录结构可能已受损。如果这样,重新启动该队列管理器前手工重新创建该目录树。 检查受损的结构后,您可以做许多事,这取决于您所使用的日志类型。 目录结构的主要受损处或日志的任何受损处在哪里,全部除去旧文件返回到 QMgrName 级别,包括配置文件、日志和队列管理器目录,恢复最近的备份并重新启动队列管理器。 对于具有媒体恢复的线性日志记录,确保该目录结构是完整的,并且重新启动该队列管理器。如果队列管理器不重新启动,则恢复备份。如果队列管理器重新启动,则使用 MQSC 命令(如 DISPLAY QUEUE)检查是否已损坏了任何其它对象。使用 rcrmqobj 命令恢复您找到的损坏。例如: rcrmqobj -m QMgrName -t all *其中 QMgrName 是要恢复的队列管理器。-t all * 表明要恢复任何类型的所有对象(除了通道外)。如果只有一个或两个对象报告受损了,则您可以在此处按名称和类型指定那些对象。 对于具有媒体恢复和未受损的日志的线性日志记录,您可以恢复队列管理器数据的备份,保留现有日志文件和未更改的日志控制文件。启动队列管理器会应用日志的更改,把队列管理器置回故障发生时的状态。 该方法基于两个因素: 1.您必须把检查点文件恢复为队列管理器数据部分。此文件包含一些信息,这些信息确定必须应用日志中的多少数据才能给出一致的队列管理器。 2.备份时,您必须具有启动队列管理器所必需的最旧的日志文件和此日志文件目录中所有的后继日志文件。 如果没有,则恢复队列管理器和日志的备份,它们是在同一时间备份的。 对于循环日志记录,从您具有的最近备份中恢复队列管理器。一旦您恢复了备份,重新启动队列管理器并如上所述检查受损的对象。但是,由于您没有媒体恢复,因此,必须找到重新创建受损对象的其它方法。 7.5.2受损的队列管理器对象如果正常操作期间报告了队列管理器对象受损,则该队列管理器执行抢先关机。根据您使用的日志记录类型,这些情况下有两种恢复方法: 仅对于线性日志记录,手工删除包含受损对象的文件,并重新启动该队列管理器。(您可以使用 dspmqfls 命令确定受损对象的真实的文件系统名。受损对象的媒体恢复是自动的。 对于循环或线性日志记录,恢复队列管理器数据和日志的最近备份,并重新启动此队列管理器。 7.5.3受损的单个对象如果正常操作期间报告单个对象受损: •对于线性记录日志,从其媒体映象中重新创建此对象。 •对于循环日志记录,不支持重新创建单个对象。 7.5.4自动媒体恢复故障如果带有线性日志的队列管理器启动所必需的本地队列受损了,并且自动媒体恢复失败,则恢复该队列管理器数据和日志的最近备份并重新启动该队列管理器。 7.6使用 dmpmqlog 命令转储日志使用 dmpmqlog 命令转储队列管理器日志的内容。缺省情况下,转储所有活动的日志记录,即,该命令从日志头开始转储(通常从最近完成的检查点开始)。通常仅当队列管理器不运行时才能转储日志。由于队列管理器在停止时会采用检查点,因此日志的活动部分通常包含少量的日志记录。然而,您可以设置以下选项之一使用 dmpmqlog 命令转储更多日志记录: •从日志基开始转储。这些日志基是日志文件中包含日志头的第一个日志记录。该情况中的其它转储数据量取决于日志头在日志文件中的位置。如果它靠近日志文件的开头,则仅转储小量的其它数据量。如果头在日志文件的结束部分,则转储更多重要的数据。 •指定转储的开始位置作为个别的日志记录。每个日志记录是由日志序列号(LSN)标识的。在循环日志记录情况中,开始的日志记录不能在日志基之前;此限制不适用于线性日志。您可能需要在运行命令之前恢复非活动的日志文件。必须指定一个有效的 LSN,从前一个 dmpmqlog 输出中获取它以作为开始位置。 例如,使用线性日志记录时,您可以从最近的 dmpmqlog 输出指定 nextlsn。nextlsn 在日志文件头中出现,并表明要编写的下一个日志记录的 LSN。使用它作为开始位置,对所有自最近一次转储日志以来所编写的所有日志记录进行格式化。 •仅对于线性日志,您可以说明 dmpmqlog 从任何给定日志文件范围开始格式化日志记录。在这种情况下,dmpmqlog 期望在与活动日志相同的目录中查找此日志文件和每个后继的日志文件。此选项不适用于循环日志,其中 dmpmqlog 无法访问日志基之前的日志记录。 dmpmqlog 命令的输出是日志文件头和一系列已格式化的日志记录。队列管理器使用几个日志记录记录对其数据的更改。 某些已格式化的信息仅用于内部使用。以下表包括最有用的日志记录: 日志文件头 每个日志有单个日志文件头,它总是由 dmpmqlog 命令格式化的第一项。它包含以下字段: logactive 主日志范围数。 loginactive 次日志范围数。logsize 每个范围有 4 KB 页面数。 baselsn 包含日志头的日志范围中的第一个 LSN。 nextlsn 要编写的下一个日志记录的 LSN。 headlsn 日志头部分的日志记录的 LSN。 tailsn LSN 标识日志的末尾位置。 hflag1 日志是 CIRCULAR 还是 LOG RETAIN(线性)。 HeadExtentID 包含日志头的日志范围。 日志记录头 日志中的每个日志记录有一个包含以下信息的固定头: LSN 日志序列号。 LogRecdType 日志记录的类型。 XTranid 与该日志记录相关联的事务标识(如果有的话)。 MQI 的 TranType 表明仅 WebSphere MQ 事务。XA 的 TranType 涉及其它资源管理器。同一个工作单元中所涉及的更新具有相同的 XTranid。 QueueName 与该日志记录相关联的队列(如果有的话)。 Qid 队列的唯一内部标识。 PrevLSN 同一个事务中的前一个日志记录的 LSN(如果有的话)。 启动队列管理器 队列管理器已启动的日志。 StartDate 队列管理器已启动的日志。 StartTime 队列管理器已启动的时间。 停止队列管理器 队列管理器已停止的日志。 StopDate 队列管理器停止日志。 StopTime 队列管理器停止时间。 ForceFlag 使用的关机类型。 启动检查点 这表示队列管理器检查点的启动。 结束检查点 这表示队列管理器检查点的结束。 ChkPtLSN 启动此检查点的日志记录的 LSN。 放入消息 持久消息放入队列的日志。如果消息放到同步点下,则日志记录头包含非空的 XTranid。其余记录包含: SpcIndex 队列上的消息标识。它可用于与相应的 MQGET(用于从队列中取出此消息)相匹配。在这种情况下,可以发现后继的 Get Message 日志记录包含相同的 QueueName 和 SpcIndex。在此点上,可以为到该队列的后继放入消息重用 SpcIndex 标识。 Data 包含在十六进制转储中的日志记录的数据是各种内部数据,后跟消息描述符(eyecatcher MD)和消息数据本身。 放入部分 对于单个日志记录来说太大的持久消息记录为单个放入消息记录,后跟多个放入部分日志记录。 Data 在前一个日志记录关闭处继续消息数据。 取出消息 仅记录取出的持久消息。如果在同步点下取出消息,则日志记录头包含非空的 XTranid。其余记录包含: SpcIndex 标识从队列中检索的消息。包含相同的 QueueName 和 SpcIndex 的最近的放入消息日志记录标识已检索的消息。 QPriority 已从队列中检索的消息的优先级。 启动事务 表明新事务的启动。MQI 的 TranType 表明仅 WebSphere MQ 事务。XA 的 TranType 表明涉及其它资源管理器的事务类型。由该事务所做的所有更新将具有相同的 XTranid。 准备事务 表明队列管理器已准备好提交与指定的 XTranid 相关联的更新。此日志记录作为涉及其它资源管理器的两阶段提交部分而编写。 提交事务 表明队列管理器已由事务提交了所有更新。 回滚事务 这表示队列管理器的目的是回滚事务。 结束事务 这表示已回滚的事务结束。 事务表 此记录是在同步期间编写的。它记录已进行持久更新的每个事务的状态。对于每个事务,记录以下信息: XTranid 事务标识。 FirstLSN 与该事务相关联的第一个日志记录的 LSN。 LastLSN 与该事务相关联的最后一个日志记录的 LSN。 事务参与者 此日志记录由队列管理器的 XA 事务管理器组件编写。它记录参与事务的外部资源管理器。对于每个参与者,记录以下信息: RMName 资源管理器名。 RMID 资源管理器标识。它还记录到后继的已准备的事务日志记录中,该日志记录记录了资源管理器所参与的全局事务。 SwitchFile 此资源管理器的切换装入文件。 XAOpenString 此资源管理器的 XA 打开字符串。 XACloseString 此资源管理器的 XA 关闭字符串。 已准备的事务 此日志记录由队列管理器的 XA 事务管理器组件编写。它表明已成功准备好指定的全局事务。将说明每个参与资源管理器的事务进行提交。日志记录中记录每个已准备的资源管理器的 RMID。如果队列管理器本身参与到事务中,则将显示带有 O 的 RMID 的参与者条目。 事务忘记 此日志记录由队列管理器的 XA 事务管理器组件编写。当提交决定已发送到每个参与者时,它跟在已准备的事务日志记录后面。 清除队列 它记录已清除队列上的所有消息这一事实,例如,使用 MQSC 命令 CLEAR QUEUE。 队列属性 它记录队列属性的初始化或更改。 创建对象 它记录 WebSphere MQ 对象的创建。 ObjName 已创建的对象的名称。 UserId 执行此创建的用户标识。 删除对象 它记录 WebSphere MQ 对象的删除。 ObjName 已删除的对象的名称。 7.7本章小结记录数据日志是队列管理器的一个重要部分。数据日志是顺序地记录在日志文件中,队列管理器的配置文件中说明了日志参数,缺省的日志参数则是在WebSphere MQ配置文件中说明的。数据日志参数包括主日志和从日志数、日志类型和日志目录的路径。确保有足够的日志空间,否则如果磁盘空间不足,将导致对队列管理器的操作失败。主日志文件是在队列管理器创建时分配的,并且随后它的个数保持不变。从日志仅在主日志用完以后才开始分配。7.8本章练习1.下列那些队列管理器有记录数据日志的功能?(1)WebSphere MQ for MVS/ESA(2)WebSphere MQ for OS/2 Warp(3)WebSphere MQ for HP-UX(4)WebSphere MQ for AS/400(5)WebSphere MQ for AIX答案:(1)(2)(3)(4)(5)2,在AIX平台上,WebSphere MQ支持的两种类型是:(1)journaling(2)linear(3)circular(4)checkpointing答案:(2)(3)