r12.2——adop cycle 详解

prepare:

prepare阶段要做的东西是根据上下文环境决定的,比如你是在这个系统上第一次运行prepare;再比如你是上次的apply 阶段失败后abort了,在运行的;再比如你是在cutover之后运行的。。。

Important:在运行prepare阶段之前,你必须保证满足如下条件(mgP77):
如下空间必须满足:
• SYSTEM tablespace has a minimum of 25 GB of free space
• APPS_TS_SEED tablespace has a minimum of 5 GB of free space

可以通过如下脚本检查可用空间大小:$AD_TOP/sql/ADZDSHOWTS.sql 

prepare通用步骤:

1、检查环境变量是否被设置为run 版本的文件系统的APPL_TOP下。

2、检查是否需要运行cleanup步骤,如果在上次补丁cycle中cutover阶段结束后,未能成功调用cleanup,这次就要重新调用此步骤。

3、检查数据库是否已经做好了online patch的准备:

            ——检查FILE_EDITION环境变量的值设置为run,如果未设置为run,会报错。

            ——检查数据库的空间是否足够

            ——检查数据库用户是否edition-enabled(至少一个用户,plsql api将返回true)

             ——检查patch service是否被创建,如果检查没有patch service,将会建议你创建patch service。

           ——检查logon trigger是否存在,如果logon trgger丢失了或者patch service未被创建,adop会自动创建,fix这个错误,如果不能自动fix,adop退出。

4、检查file system,用TXK脚本:$AD_TOP/patch/115/bin/txkADOPPreparePhaseSanityCheck.pl——此脚本检查文件系统空间(会检查是否超过25g等等),数据库连接等等。

5、生成一个最重要表空间的信息报告,此报告的位置在$APPL_TOP/admin/$TWO_TASK/out

6、检查:“Online Patching In Progress”(ADZDPATCH) 并发程序  是否存在,这个程序可以阻止一些特定的预定义的并发程序的启动(这些特定的预定义的程序在patch cycle中是必需的)这个ADZDPATCH会在prepare到cutover所有过程中都运行,我现在的理解这个ADZDPATCH是用来保证patch进程,和正在运行产品数据一致性的一个程序,它能阻止一些可能引起数据不一致的进程的启动。

7、调用TXL脚本:$AD_TOP/patch/115/bin/txkADOPPreparePhaseSynchronize.pl 同步已经安装到run filesysgem中appltop下的补丁。(这个脚本里有检查空间,要求系统有75g空闲空间,我看了,如果没这么大空间就改了它)

8、检查数据库内是否存在这个补丁的版本,如果不存在,创建一个。

9、再次调用TXK脚本:$AD_TOP/patch/115/bin/txkADOPPreparePhaseSanityCheck.pl,确认数据库和patch文件系统的连接是正常的。如果检查失败,adop将会退出。

在prepare过程中,run file system APPL_TOP将会被同步到patch file system APPL_TOP下,有两种方式(1、只同步APPL_TOP目录;2、clone run file system to patch file system ,这种方法中首先把patch的文件系统:APPL_TOP,COMMON_TOP ,10.1.2 Oracle Home, FMW_Home重新命名,然后把run的file system拷贝过来,在运行adop phase = fs_clone)

如果在prepare阶段运行了adop phase= abort ,那也就是会说,你现在的patch file system是打了一半的补丁,所以,你也得运行adop phase=fs_clone ,然后才能再运行prepare,如果你不运行fs_clone ,那下次运行prepare的时候也会自动运行fs_clone,这就是为啥如果你adop上次abort了,直接在prepare会等待很长时间,因为adop在fs_clone。

apply

在apply阶段,你可以打任何多个补丁,然后一块运行cunover,这样就省去了来回切换的时间。

apply阶段,有个参数叫: analytics 

$ adop phase=apply analytics=yes

如果使用了这个参数,以下脚本会被调用:

• ADZDCMPED.sql - This script is used to display the differences between the run and patch editions, including new and changed objects. The output file location is: 
/u01/R122_EBS/fs_ne/EBSapps/log/adop/<adop_sessionID>/<apply_directory>/<context_name>/adzdcmped.out.

• ADZDSHOWED.sql - This script is used to display the editions in the system. The output file location is: 
/u01/R122_EBS/fs_ne/EBSapps/log/adop/<adop_sessionID>/<apply_directory>/<context_name>adzdshowed.out.

• ADZDSHOWOBJS.sql - This script is used to display the summary of editioned objects per edition. The output file location is: 
/u01/R122_EBS/fs_ne/EBSapps/log/adop/<adop_sessionID>/<apply_directory>/<context_name>adzdshowobjs.out

• ADZDSHOWSM.sql - This script is used to display the status report for the seed data manager. The output file location is: /u01/R122_EBS/fs_ne/EBSapps/log/adop/<adop_sessionID>/<apply_directory>/<context_name>adzdshowsm.out

cutover

finalize:调用数据库内的Finalize API (你也可以把finalize作为一个单独的adop phase,这里是指你在apply之后直接运行cutover,cutover会自动调用finalize)

1、关闭并发管理器,等待所有并发程序跑完,并发管理器关闭才能执行这个cutover过程,在等待过程中,系统仍然对外可用。

2、关闭应用层服务。

3、数据库edition切换,用adzdpmgr.pl脚本完成patch database edition 到run database edition的切换。

4、应用层Services 切换,停止当前run APPL_TOP,然后启动当前patch APPL_TOP。file system 切换,完成patch file system 到run file systen 的切换,完成环境变量$FILE_EDITION值的切换,现在patch APPL_TOP成为新的run APPL_TOP。

5、禁止访问旧版本数据库(old database editions)

6、结束旧版本数据库session:结束任何连接到旧版本数据库的session。

7、启动新的应用层的服务。

JAR文件和cutover:

在一个adop cycle中,被用到的jar文件,开始被存放在:$APPL_TOP/admin/<SID>out 目录下,在cutover阶段被uploade到数据库内,所以,在cutover没结束之前,千万不要把out目录给删了。。

如果cutover完了后你不想启动应用程序,可以用如下参数:

$ adop phase=cutover  mtrestart=no

cleanup

此phase必须运行 run APPL_TOP,如下动作在cleanup阶段执行:

1、删除covered 对象。

2、删除索引。

3、删除 forward cross-edition 触发器。

4、清除seed data。

ADZDCLEANUPRP.sql - This script is used to display the display the cleanup
status. The output file location is:/u01/R122_EBS/fs_ne/EBSapps/log/adop/<adop_sessionID>/<cleanup_folder>/<context_name>/adzdcleanuprp.out.

在某此运行时,观察到数据库内会进行类似的操作:

delete from APPLSYS.JDR_ATTRIBUTES where zd_edition_name <> 'V_20131209_1455'

这是因为,相对于12.1.3版本的环境,数据库开启了新特性EBR,给相关的表添加了一列叫zd_edition_name,当开始打补丁的时候,就会给这个表的每一行,这一列都插入打补丁那一时刻的时间值,此时系统还对外提供服务,如果补丁对某一行有修改(修改patch edition),或者用户有此时对某一行有修改(修改run edition),修改后会改变这一列的时间戳,我猜测等补丁打完,执行clean up的过程的时候,会把用户的修改(当时的run edition)合并到当前的run edition中,然后删除当时run edition(现在是patch edition的记录)

abort

只要在cutover阶段之前, 若发生了某些错误,就可以执行:adop phase=abort, 需要输入apps的用户和密码。abort做如下动作:

1、检查环境变量是否是run APPL_TOP的。

2、检查是否有未完成的session,检查abort调用是否合法。

3、检查存在的补丁版本,如果存在,删除之。

4、检查并发程序状态,如果有必要取消之前提交的并发程序。

5、删除上次pending session插入到ad_adop_sessions 和 ad_adop_session_patches表里的行。

注意下面的重要点:

1、运行完abort后,必须必须运行一个full cleanup(命令:adop phase=cleanup cleanup_mode=full),这样就会删除上次未完成补丁插入到数据库表里的列。如果这些数据不删除,再下一个patch cycle中就会报错。

2、如果在多节点应用的环境下,你在一个节点运行了abort,你必须在其他节点上都再运行abort。

3、在多节点环境,并且用的是非共享的文件系统,必须用:adop phase=abort autoskip=yes ;而不能单单指定一个abort参数。

Reporting 

为了帮助诊断错误,或者以更简单的方式获得系统的信息,可以运行Online Patching Diagnostic Reports工具:

$AD_TOP/bin/adopreports.sh

运行方法:$ adopreports apps apps

从当前的run fs同步到patch fs有两种方法:

1、使用prepare过程自动同步;

2、使用fs_clone过程同步。

这两种方法是不一样的,第一种方法,只是用来同步补丁信息,但是客户化的开发,并不会被同步过去,比如你开发一些form,放到了run fs下,当你运行prepare过程时,并不会把这些开发同步过去,除非你修改一个同步的驱动文件:$APPL_TOP_NE/ad/custom/adop_sync.drv,来客户化的定义到底要同步哪些文件。

而第二种方法,就可以完全的,把当前系统所有文件复制到patch fs上面。

时间: 2024-11-02 18:49:18

r12.2——adop cycle 详解的相关文章

Python函数式编程指南(三):迭代器详解

  这篇文章主要介绍了Python函数式编程指南(三):迭代器详解,本文讲解了迭代器(Iterator)概述.使用迭代器.生成器表达式(Generator expression)和列表解析(List Comprehension)等内容,需要的朋友可以参考下 3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是访问集合内元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束. 迭代器不能回退,只能往前进行迭代.这并不是什么很大的缺点,因为人们几乎不需要在

Python itertools模块详解

  篇文章主要介绍了Python itertools模块详解,本文基本是基于文档的翻译和补充,相当于翻译了,需要的朋友可以参考下 这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/itertools/ 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总体,整体了解 无限迭代器 代码如下: 迭代器 参数 结果 例

【区块链】量子链命令行qtum-cli全命令详解

量子链命令行qtum-cli全命令详解 == Blockchain == callcontract "address" "data" ( address ) 调用智能合约 getaccountinfo "address" 获取账户信息 getbestblockhash 获取最长链的hash getblock "blockhash" ( verbose ) 获取块的信息 getblockchaininfo 获取区块的信息 { &

jQuery自定义动画函数实例详解(附demo源码)_jquery

本文实例讲述了jQuery自定义动画函数完整实现技巧.分享给大家供大家参考,具体如下: 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-zdy-dh-move-style-demo/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.d

【ANDROID游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2ME的游戏类库与ANDROID游戏开发!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/361.html 由于写书的缘故,博文更新缓慢,大家体谅,今天针对群内常提出动画实现的问题来进行一个详细讲述: 此章节适合没有做过游戏开发的同学学习! 做过Android软件的童鞋们,在学习游戏开发的时候,思维总是被固定在了Android系统组件上!比如动画实现总想着利用BitmapDrawable.Animatio

PHP垃圾回收机制详解

PHP的基本GC概念 PHP语言同其他语言一样,具有垃圾回收机制.那么今天我们要为大家讲解的内容就是关于PHP垃圾回收机制的相关问题.希望对大家有所帮助. PHP strtotime应用经验之谈PHP memory_get_usage()管理内存PHP unset全局变量运用问题详解PHP unset()函数销毁变量教你快速实现PHP全站权限验证一.PHP 垃圾回收机制(Garbage Collector 简称GC) 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存

AngularJs Scope详解及示例代码_AngularJS

一.什么是Scope? scope(http://code.angularjs.org/1.0.2/docs/api/ng.$rootScope.Scope)是一个指向应用model的object.它也是expression(http://www.cnblogs.com/lcllao/archive/2012/09/16/2687162.html)的执行上下文.scope被放置于一个类似应用的DOM结构的层次结构中.scope可以监测(watch,$watch)expression和传播事件.

详解vue.js组件化开发实践_javascript技巧

前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然成为了第一个问题.鉴于目前web前端mvvm框架以及组件化开发方式的流行,决定技术栈采用:vue + es6 + 组件化. 这里首先简单说下web前端组件化开发方式的历程: 最早的组件化结构,代码结构可能如下: - lib/components/calendar |- calendar.css |-

Android编程中的四大基本组件与生命周期详解_Android

本文实例讲述了Android编程中的四大基本组件与生命周期.分享给大家供大家参考,具体如下: Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应. Activity之间通过Intent进行通信.在Intent 的描述结构中,有两个最