This post should be useful for Apps DBAs who are planning to upgrade their customer’s E-Business Suite environments from 11i to R12. As we all know, a long time passed since such projects have started and since then, the Upgrade exercise has improved a lot, mostly because of new patches and tools that Oracle has provided to avoid certain errors and bugs during the Upgrade driver. One of such tools is a Pre-install patches report for R12.1 upgrade which contains a list of essential patches that you must apply in pre-install mode before upgrading. If you haven’t met this report before, do visit a following MoS note – Oracle E-Business Suite Pre-install Patches Report [Video] [ID 1448102.1] and watch the video as well. It is worth to mention that the report is being constantly updated (approximately once a month) based on Oracle and the customers experience and new patches are being added (if any). As it is stated in the topic – I am going to cover the easy way of downloading the patches listed in the report (please let me know if you have a better way of doing the same).
I came to know this report during another Upgrade project I was working on. If you take a look into the MoS note I’ve mentioned, you would find a strong recommendation from Oracle to apply most of the patches. Furthermore, in the current version of the report, there are 199 patches all together. Quite a big amount isn’t it? While the html report contains patch URL’s and gives us the ability to click on each patch number to download it manually, I would be quite annoying task to go through them one-by-one in order to the get patches in right place. We also know that well-known os tools like wget or curl which serves us to download files directly on server from remote URL’s. In fact, it is also possible to get a wget script from Oracle as well when pressing the “Download” button for any patch using “Wget Options” link (if someone haven’t noticed it yet).
What I was thinking about – is how it is possible to get all those patches on server instantly with no manual work or what would be the fastest way of doing this? I have also found the thread on Oracle forums https://forums.oracle.com/forums/thread.jspa?threadID=2452243&tstart=0 where someone had asked: “… is there any better way to download multiple patches in a single operation?”. So I decided to share my way of doing this task.
What you will need:
1) wget installed on your server
2) firewall opened to access updates.oracle.com from you server or exporting you own proxy host if you have the direct access restricted
export http_proxy=http://proxy.host:port export https_proxy=https://proxy.host:port
3) working MoS credentials 🙂
Get the patch report archive from note [ID 1448102.1] using any preferred way of copying the file on your server and unzip it.
[applmgr@test EBS_PREINST]$ unzip EBS_R12.1_Preinstall_2013_Jan_17.zip Archive: EBS_R12.1_Preinstall_2013_Jan_17.zip creating: EBS_12.1_Preinstall/ inflating: EBS_12.1_Preinstall/EBS.html inflating: EBS_12.1_Preinstall/ATG.html inflating: EBS_12.1_Preinstall/PJ.html inflating: EBS_12.1_Preinstall/FIN.html inflating: EBS_12.1_Preinstall/PRC.html inflating: EBS_12.1_Preinstall/BIS.html inflating: EBS_12.1_Preinstall/SCM.html inflating: EBS_12.1_Preinstall/HRMS.html inflating: EBS_12.1_Preinstall/FSA.html inflating: EBS_12.1_Preinstall/CRM.html inflating: EBS_12.1_Preinstall/SUMMARY_EBS.html inflating: EBS_12.1_Preinstall/SUMMARY_ATG.html inflating: EBS_12.1_Preinstall/SUMMARY_PJ.html inflating: EBS_12.1_Preinstall/SUMMARY_FIN.html inflating: EBS_12.1_Preinstall/SUMMARY_PRC.html inflating: EBS_12.1_Preinstall/SUMMARY_BIS.html inflating: EBS_12.1_Preinstall/SUMMARY_SCM.html inflating: EBS_12.1_Preinstall/SUMMARY_HRMS.html inflating: EBS_12.1_Preinstall/SUMMARY_FSA.html inflating: EBS_12.1_Preinstall/SUMMARY_CRM.html inflating: EBS_12.1_Preinstall/env-host-query.js inflating: EBS_12.1_Preinstall/isd.css inflating: EBS_12.1_Preinstall/sorttable_tsfix.js inflating: EBS_12.1_Preinstall/blaf-en-ie.css inflating: EBS_12.1_Preinstall/index.html inflating: EBS_12.1_Preinstall/2.html
Notice the EBS.html file which contains all patch numbers that are available in current report. Let’s filter those numbers out, translate them into real patch archive filenames and place them in separate file using standard Linux command line tools:
cd EBS_12.1_Preinstall grep patch_number= EBS.html | awk {'print $5'} | cut -f 2 -d "'" | cut -f 1 -d "'" | sed 's/:/_/g' | awk {'print "p" $1 "_R12_GENERIC.zip"'} > patchlist.lst
You should end up with a list of 199 patches similar to this:
[applmgr@test EBS_12.1_Preinstall]$ head -10 patchlist.lst p11653739_R12.AP.B_R12_GENERIC.zip p11857072_R12.JAI.B_R12_GENERIC.zip p12533427_R12.XLE.B_R12_GENERIC.zip p12369104_R12.JAI.B_R12_GENERIC.zip p12347791_R12.PJC.B_R12_GENERIC.zip p11829821_R12.XLA.B_R12_GENERIC.zip p11785680_R12.ZX.B_R12_GENERIC.zip p10041471_R12.AR.B_R12_GENERIC.zip p10198811_R12.XLA.B_R12_GENERIC.zip p10395967_R12.ZX.B_R12_GENERIC.zip [applmgr@test EBS_12.1_Preinstall]$ cat patchlist.lst | wc -l 199
All the patches in report are GENERIC (suits for all platforms), so we are good to go with such way of translating patch numbers to patch archive names, however there are six exception patches which are available for other platforms as well and also have NLS translations (which in fact should be ignored as per Oracle recommendation, see the same note 1448102.1). So basically, we would need to define the correct platform in file name for these exceptions. In my example, I will use patches for Linux platform. Please note that the example is shown in the lastest patch report version that is available (Jan 11). If you would be using same approach in future versions, don’t forget to check the change log and see if there are some new patches that had been added that might apply for the same exception condition. So let’s switch patch names from GENERIC to LINUX for these 6 exceptions and write them down in new file:
[applmgr@fitest EBS_12.1_Preinstall]$ sed s/p13545598_R12.PO.B_R12_GENERIC.zip/p13545598_R12.PO.B_R12_LINUX.zip/g patchlist.lst | \ sed s/p13799611_R12.PO.B_R12_GENERIC.zip/p13799611_R12.PO.B_R12_LINUX.zip/g | \ sed s/p13931180_R12.PO.B_R12_GENERIC.zip/p13931180_R12.PO.B_R12_LINUX.zip/g | \ sed s/p9080712_R12.AP.B_R12_GENERIC.zip/p9080712_R12.AP.B_R12_LINUX.zip/g | \ sed s/p9154829_R12.AP.B_R12_GENERIC.zip/p9154829_R12.AP.B_R12_LINUX.zip/g | \ sed s/p12682715_R12.AP.B_R12_GENERIC.zip/p12682715_R12.AP.B_R12_LINUX.zip/g > patchlist_last.lst
Now you should end up with full and correct patch list and you are ready to download them. The remaining part is to pass them to a correct wget command. Export your MoS username and password:
export HTTP_USER=<your MoS username> export HTTP_PASSWORD=<your MoS password>
Now pass them to a wget command together with the patchlist that we’ve just created:
export HTTP_USER=andrejs.karpovs@***.com export HTTP_PASSWORD=*** while read i ; do wget --http-user=$HTTP_USER --http-password=$HTTP_PASSWORD --no-check-certificate --output-document=$i "https://updates.oracle.com/Orion/Download/download_patch/$i" ; done < patchlist_last.lst
You should be seeing output similar to this (output is shortened and some parts extracted due to high amount of data):
--2013-02-14 11:22:49-- https://updates.oracle.com/Orion/Download/download_patch/p11653739_R12.AP.B_R12_GENERIC.zip Resolving updates.oracle.com... 141.146.44.51 Connecting to updates.oracle.com|141.146.44.51|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://login.oracle.com/pls/orasso/orasso.wwsso_app_admin.ls_login? ... 2013-02-14 11:23:01 (9.91 MB/s) - “p11857072_R12.JAI.B_R12_GENERIC.zip” saved [10011/10011] ... Saving to: “p12533427_R12.XLE.B_R12_GENERIC.zip” 100%[================================================================================>] 28,586 128K/s in 0.2s 2013-02-14 11:23:08 (128 KB/s) - “p12533427_R12.XLE.B_R12_GENERIC.zip” saved [28586/28586] ...
Standby and have some coffee for about 10 minutes or less/more depending on your download speed. The wget command should go in a cycle one-by-one and download all 199 patches in one turn.
I have tested the approach multiple times without any issues, do let me know if you face one. In my opinion, this is a quite efficient way of reaching the end result and get all the patches to your server. The same approach might be adopted for other patching needs as well (not only patches from Pre-Install report) but that requires some more analysis and investigation.
Happy downloading and Happy Valentines Day! 🙂