ITPub博客

首页 > 数据库 > Oracle > 转贴:缩短向Oracle 11i迁移过程中的停机时间:对打补丁进行改进(本人受益非浅)

转贴:缩短向Oracle 11i迁移过程中的停机时间:对打补丁进行改进(本人受益非浅)

原创 Oracle 作者:yichao0614 时间:2007-08-28 15:26:47 0 删除 编辑

这篇技巧性文章摘自论文《缩短向Oracle 11i迁移过程中的停机时间》,是由“国际Oracle用户组”(IOUG)提供的。点击这里成为“国际Oracle用户组”的一员,从而获得成千上万的由Oracle用户写的技巧性文章和科技文献。

[@more@]

这篇技巧性文章摘自论文《缩短向Oracle 11i迁移过程中的停机时间》,是由“国际Oracle用户组”(IOUG)提供的。点击这里成为“国际Oracle用户组”的一员,从而获得成千上万的由Oracle用户写的技巧性文章和科技文献。

对打补丁进行改进

寄希望于一个新升级的应用程序系统能成功地运行而不打任何补丁的想法是很天真的,而且通常系统需要打很多补丁。事实上,总是需要打补丁的,维护包数据库驱动器(例如11.5.8)总是需要打上。而且这个补丁通常需要预先具备的补丁,即使要完成你的最基本升级就需要打很多补丁包。如果你想升级你所使用的模块至最新版本的话,可能需要打上几GB大小的补丁包。因此,加速打补丁是减少升级停机时间技术中很关键的一环。再一次,这里我们使用类似整体升级过程中所使用的方法,首先我们试着使必须执行的任务的数量和开销最小化,然后在试着加速那些剩余的必须执行的任务。

对补丁进行合并

正如标题所表明的那样,Oracle应用程序工具集向我们提供了一种将几个不同补丁包合并到一个文件中的方法。这就使我们可以省去很多时间,从而减少补丁包的任务复制开销。对补丁包进行合并使得打补丁的过程非常容易,允许我们仅使用少量的大的补丁捆,而不是几十个独立的补丁包。同时,对合并起来的补丁捆只要载入一次“包修订缓冲”,而不是对所有的补丁都分别载入一次,再一次,这会节省很多时间。(“包修订缓冲”问题在AD.G中讨论)。

补丁包合并过程很简单,步骤如下:
1. 为源补丁包创建路径。
2. 在创建的路径下直接解压缩源补丁包
3. 阅读readme文件,核对是否需要额外的先决条件、问题等。
4. 在源补丁包的父目录上运行AD合并补丁包程序(admrgpch)。
命令格式:admrgpch source_dir target_dir [ -merged_name ]
5. 检查admrgpch日志文件。
6. 使用合并好的补丁捆。

注意程序admrgpch为c、d和g驱动器都创建了各自的文件。AD合并补丁程序能完成以下工作:
* 能合并使用不同源字符集的补丁包
* 消除冗余任务
* 检查依赖性从而仅包含最高修复版本
* 能将特定于平台的补丁和独立于平台的补丁合并在一起
* 假如你试图合并不兼容的补丁包时,程序会提示你
* 可以合并同一补丁包的不同“本地语言支持”版本
* 还可以对已经合并过的补丁捆进行合并
* 将README文件同一放在readme路径下
* 在合并过后的补丁捆中保留原始的bug数

AD合并补丁程序不能完成以下工作:
* 合并不同版本的应用程序服务器的补丁包
* 合并不同平台下的补丁包
* 合并不同并行模式的补丁包
* 将c、d和g驱动器下的补丁包合并在一起(将未来的版本中可以实现)

根据各自的特色,我们可以把在升级中所使用的补丁包分为以下四类:
* 10.7/11.0预升级补丁包
* 11i 同一升级补丁包(CUP)
* 11i 维护补丁包
* Family Packs / Mini-Packs / One-offs

自然地,所有这四种类型的补丁包都应该被合并到不同的补丁集中,因为它们是在不同环境中被使用的。即使有可能将11i的维护补丁包和更新的Family Packs 或 Mini-Packs合并,那也可能不被支持,而且每人能保证进行这种合并的结果。

Adpatch性能调优

当打补丁时,启动adpatch会话、回到启动问题和验证密码等工作可能会花费大量的时间。当需要打很多补丁时这种情况尤为突出,以至对补丁包进行合并几乎变得不可能或者不可用。因此,Oracle提供了一些加速打补丁速度的机制,通过允许对启动问题保存默认的答案。同时,对成百上千模式的密码检查也能被关闭,假如我们确信应用程序服务器中定义的这些密码和数据库中保存的密码一致。

为adpatch程序创建默认文件

为了存储adpatch程序的启动问题,我们需要创建一个默认文件。最简单的方式是运行带有defaultsfile选项的adpatch程序。默认文件是一个简单的文本文件,以后可以编辑它或者把它拷贝到其他节点或Oracle安装,如果需要的话。这个文件必须放在$APPL_TOP/admin/路径下,因此,创建响应文件的正确语法如下:

adpatch defaultsfile=/admin//

因此,Unix平台下的一个例子如下:

adpatch defaultsfile=$APPL_TOP/admin/$TWO_TASK/def.txt

Windows平台的例子如下:

adpatch defaultsfile=%APPL_TOP%/admin/%LOCAL%/def.txt

请注意,在Windows平台下Oracle使用LOCAL环境变量来指定默认的数据库位置,在unix平台下使用变量TWO_TASK(在VMS平台是使用ORA_DFLT_HOSTSTR)。

Autopatch程序将按照正常方式启动,除了所有问题的答案都存储在指定的默认文件中。程序一直运行到出现提示信息“请输入你的Oracle应用程序服务器补丁包的卸载路径”为止,然后输入“abort”以推出adpatch程序。退出adpatch后,你应该验证默认文件是否在正确的位置被创建,同时检查该文件的内容可能很有用。如果需要,你可以创建任意数量的默认文件,通过运行adpatch程序时在命令行指定不同的文件名即可。

从现在开始,当你使用默认文件选项(该文件指向新创建文件的位置)运行adpatch程序时,会根据默认文件的内容自动提供启动问题的答案。(请注意:创建默认文件后立即运行adpatch程序,所有启动问题已经被回答了,因为我们使用“abort”终止了adpatch程序)。

以非交互方式运行adpatch

尽管到目前为止启动问题可以被自动回答,但是最重要的询问补丁驱动器位置的问题仍然需要回答。可以通过使用adpatch命令行参数解决该问题,使得默认文件不依赖于我们使用的补丁的驱动器。而且,如果我们设置命令行参数interactive=no的话,在打补丁的过程中不会再提出进一步的问题,假如一切都配置正确的话。下面引入一些其他命令行选项,以便打补丁更具弹性。

adpatch defaultsfile=
workers= logfile=
patchtop= driver=
interactive=no

假如非交互方式的打补丁过程失败的话,通过在命令行添加restart=y选项更正了问题了后,我们可以继续打补丁过程。其他的命令行选项必须保持不变,举例来说,你不能从不同于第一次运行打补丁程序指定的位置来继续执行打补丁过程。

跳过模式密码验证

每次运行adpatch程序时,都会执行一次模式密码检查以核对数据库中的模式密码是否与应用程序中定义的模式密码相匹配。这自然要消耗额外的时间,并且如果你不能确定这些模式密码是否在数据库级上被手动更改过的话,这是必须的。但是,至少在一次协作升级工作中,我们相当确信密码不会改变,因此我们在第一执行过后就可以跳过密码检查这步。方法是向adpatch程序传递一个novalidate选项。

adpatch defaultsfile=
workers= logfile=
patchtop= driver=
interactive=no options=novalidate

一个以最小开销非交互方式执行打补丁程序的简单脚本如下:

adpatch defaultsfile=$APPL_TOP/admin/$TWO_TASK/def.txt
workers=4 logfile='echo $1 | cut -d. -f1`.log
patchtop=`pwd` driver=$1 interactive=no options=novalidate

按照上面所述写的脚本可以保存在$AD_TOP/bin/adp目录下(在Windows平台下是文件为adp.bat)。如果你进入你的补丁路径并使用补丁驱动器文件名作为唯一参数来运行脚本adp的话,补丁会自动被打好,如果不出现任何问题的话。请注意:对三个驱动器(c、d、g)都需要执行这个命令行。为了在脚本中更好地使用,对补丁驱动器位置必须给出全路径名。下面是一个脚本样例,它能处理全路径名。这个脚本仅需要一个参数,即c、d、g驱动器的全路径名。

adpatch defaultsfile=$APPL_TOP/admin/$TWO_TASK/def.txt
workers=4 logfile=`basename $1 | cut -d. -f1`.log
patchtop=`dirname $1` driver=`basename $1` interactive=no options=novalidate

Adadmin响应文件

打补丁完成后,readme文件和说明书中通常会要求使用adadmin程序来执行一些维护工作。Adadmin程序也支持使用默认文件的特色,因此同样允许我们加快它的执行速度。针对每个我们想以非交互模式执行的不同的操作,我们都可以为其创建一个单独的默认文件,或者对一系列操作创建一个默认文件。创建默认文件的语法如下:

adadmin defaultsfile=$APPL_TOP/admin/$TWO_TASK/admin.txt

当运行adadmin程序时,在它的提示符处输入并运行所有你需要的任务,adadmin会将所有命令都保存在指定的默认文件中。当默认文件被创建好以后,默认文件中的维护任务就可以以非交互方式来运行,使用interactive=no参数。

adadmin defaultsfile=$APPL_TOP/admin/$TWO_TASK/admin.txt
logfile=admin.log workers=4 interactive=no

请注意:在执行维护任务过程中,如果发生了任何错误,则非交互方式执行的adadmin程序将被终止,然后必须以交互方式来运行adadmin程序以响应它的提示。而且,下面这些不是经常性执行的维护任务不能以非交互方式执行:

* 转变成多报表币种
* 创建应用程序环境文件
* 转变字符集
* 转变成多机构
* 拷贝文件至目的地(从AD.H开始可以以非交互方式完成)

当使用多个补丁包时,将上述readme文件提到的所有维护任务推迟到所有补丁包都成功打好后进行是合理的。没必要在打完补丁后就立即执行这些维护任务,但这些维护任务在使用新系统前是必须被执行的。

找到补丁包即它们依赖的补丁包

尽管在系统停机时间搜索和下载补丁包并不能称得上是一件大任务,但是在最近的Oracle应用程序服务器版本中有一些小特色使得补丁维护更容易。

补丁包的依赖性检查

从AD.G开始,当使用c驱动器的补丁包时,autopatch程序能够验证该补丁包所依赖的所有补丁包是否已经全部安装。对d或g驱动器而言,不进行任何检查。这仅对最近的补丁包有效,这些补丁包都有一个包含其原数据的后缀为.ldt的文件。当adpatch程序判断出一些依赖补丁包没有按照时,它会把它们列出来并中断自己。这个自动补丁包检查特色也在驱动器文件中包含“兼容性特色先决条件”行,因此可以防止这些补丁包被老版本的autopatch程序使用。同样,如果adpatch程序判断出正在被申请的补丁包已经在过去被申请过的话,它会询问你是否想再申请使用它。为了应用任何带有先决依赖包检查的补丁包,你必须对adadmin中的每个APPL_TOP在“维持应用程序文件”下运行“维持快照信息”。这个操作收集adpatch程序用来执行先决依赖包检查的是所使用的当前文件、文件版本和“臭虫”修复信息。

补丁包顾问功能

从Oracle 11.5.9开始,在Oracle应用程序管理器中带有一个补丁包顾问功能。“补丁包顾问”将根据从Oracle下载的信息、系统上已经安装的特定产品信息和其他可自定义的标准来推荐补丁包。“补丁包顾问”也能通过分析某个特定的补丁包来识别这个补丁包和某个给定系统上已经安装的补丁包之间的差别。这两个特色都很有用,但是它们仍然没有能把我们从阅读readme文件中解脱出来,因为这两个特色机制都是刚刚才出现的还很不成熟。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8368297/viewspace-966478/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-03-06

  • 博文量
    7
  • 访问量
    14545