Kevin Kempf's Blog

October 30, 2009

RIP Classic Metalink

Filed under: Uncategorized — kkempf @ 8:24 am

ts

Just in time for Halloween!  Received a spam from Oracle today, I guess we all better start liking a buggy flash support interface…

Classic MetaLink Retires November 6, 2009: Important My Oracle Support Upgrade Details

ATTENTION: Oracle Database, Fusion Middleware, E-Business Suite, and BEA Customers and Partners

Oracle Global Customer Support is pleased to announce that My Oracle Support—Oracle’s next-generation support platform—will be upgraded beginning the weekend of November 6-8, 2009, to become the single online support platform for all Oracle products. At that time, Classic MetaLink will retire.

October 28, 2009

That’s so 1980’s….

Filed under: Oracleisms — kkempf @ 9:44 am
1980s-fashion

Nice bytes!

On a lighter note, when I cranked up my 11.2 RDBMS today, it looked like this:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> startup
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2220200 bytes
Variable Size             578817880 bytes
Database Buffers          482344960 bytes
Redo Buffers                5554176 bytes

Seriously, does anyone allocate an Oracle database’s memory settings in bytes anymore?  What I really love is when the buffer cache is so large it uses scientific notation to display memory allocation.  Time to step into the 21st century, I’d say, and show these startup allocations in MB or GB…

October 23, 2009

New Patch Set Updates (PSU’s) Available

Filed under: 10g, 11g, Oracle, Security — kkempf @ 9:52 am

Tuesday when Oracle released its (delayed due to Open World) Fall 2009 Critical Patch Update, it also released an update to Patch Set Updates (PSU’s).  This information is obtained from Document ID 854428.1, dated 20 Oct 2009.

As mentioned earlier, I’m a big fan of the PSU concept and am pleased to see that it has been expanded with this Critical Patch Update.  The arrival of RDBMS 11.1 PSU’s, clusterware, as well as EM is great news for me, as it makes life simpler.  I figure I’m already going to have to apply the CPU, might as well get the benefits of the PSU and a version change (internally) to prove it.

I’ve already installed 10.2.0.4.1 on 4 production and 8 development/test/training 10g databases without incident, and plan to get moving on testing this release.  I’d really like it if Oracle would actually show a PSU’d database as 10.2.0.4.1, as it would be a visual queue that the PSU had been applied to the database, but at least on the internal company Wiki I can just tag the RDBMS version as such and not have to separately track CPU’s anymore.

After a little digging, I found that Oracle has mad some “oddball” platforms “By request only”, while most mainstream platforms (Linux, Solaris, HP-UX, AIX) are available as PSU’s.  Again, curiously, Windows has been classified “Not applicable” as an OS since “Windows fixes are released in periodic bundle patches which contain all the CPU and PSU content”.  Whatever that means.

RDBMS PSU’s available (patch number in parenthesis):

  • 11.1.0.7.1 (8833297)
  • 11.1.0.7.1 for CRS (Cluster Services) (8287931)
  • 10.2.0.4.2 (8833280)
  • 10.2.0.4.2 for CRS (Cluster Services) (8705958)

Oracle Enterprise Manager Grid Control (patch number in parenthesis):

  • 10.2.0.5.1 for OMS (8864918)

edit:  I ran the PSU against my Enterprise Manager OMS (10.2.0.5.1) and ouch it broke it.  Badly.  The application was 2 parts; opatch apply and an RDBMS script.  The opatch piece was fine.  The RDBMS script ended with many errors, and EM wouldn’t start.  I rolled back the RDBMS script per the readme… and EM wouldn’t start.  For the record, I am running RDBMS 11.2 (uncertified for EM) and not the 10.2 version..

edit 2: I ran the PSU against my regression test ERP database (11.1.0.7) and it applied (seemingly) without incident.

edit 3: At this point, I’ve run this PSU successfully against the following environments:

  • Enterprise Manager OMS (10.2.0.5)  8874205
    • I installed without the RDBMS script
    • You must install the Linux x86 version even if you’re running x86-64, as the default 64-bit install of EM runs 32-bit binaries.  Go figure.
    • Not sure what the problem with this patch was the first time I tried it
  • Discoverer 10g (AS 10.1.2.3) 8874205
  • RDBMS 10.2.0.4 (15 instances) 8833280
  • RDBMS 11.1.0.7 (1 instance) 8833297

October 21, 2009

Licensing Products in 11i: adlicmgr.sh vs. OAM license manager

Filed under: 11i, Utilities — kkempf @ 2:28 pm

We’re looking at implementing an 11i product which we purchased but never implemented, and as I began to look at the setup steps from an administrator standpoint, I became re-acquainted with an license manager.  As the cobwebs shook free, it began something like this…

adlicmgr.sh is the command line tool used in the olden days, which requires a X session and command prompt access to the applications server.  In order to avoid problems, you first export the classpath, change to the right directory, and then launch it:

$ export CLASSPATH=$AD_TOP/java/adlicmgr.zip:$CLASSPATH
$ cd $AD_TOP/bin
$ ./adlicmgr.sh

Oracle Applications License Manager (Java)

Oracle Applications License Manager (Java)

From here, you wander through a few screens and try to find the product you wish to license, or, alternatively, you can review what is already licensed.

License or Report

License or Report

Good luck finding your product!

Good luck finding your product!

I happened to be looking for iProcurement, and it was nowhere to be found on the list.  To make things worse, the list isn’t even sortable!

I gave up on this and went into the OAM version of license manager… what an improvement!  The URL for OAM is, as a reminder:

https or http://appserverhostname:port/servlets/weboam/oam/oamLogin

OAM Site Map

OAM Site Map

From here, you get to this screen; I used the Products link under License at this point…

Screenshot-Oracle Applications Manager - Mozilla Firefox

Screenshot-Oracle Applications Manager - Mozilla Firefox-1

From here, I landed at this screen which had a few options.

Despite my screen shot, the correct selection to simply add 1 product is License Component Application.

List of Components Available to License

List of Components Available to License

From here, it’s just follow the bouncing ball; select the component by checking it, hit next, next and you are told:

Success

Success

That’s all there was to it… if I was using the command line adlicmgr.sh program, I believe I’d still be looking for the product… or it could be that it’s just not as updated with the new product names and abbreviations as OAM is.

I should make one final disclaimer: Just because you’re able to license a product doesn’t mean you’re legally able to use it.  In other words, if you bought the 11i ERP for one product, there’s nothing to stop you from illegally licensing the whole suite.  Except an army of Oracle lawyers if they ever catch you in an audit…

October 19, 2009

Warning: Your application is making bad assumptions

Filed under: Uncategorized — kkempf @ 3:33 pm

Low-level logging is currently enabled.  Your application will not perform as well while low-level logging is on.

In IT, we often joke about keeping the users in the dark about outages and performance issues….

I recently had a problem where my cost manager would die about every 2 days, and as part of the resolution with Oracle I was told to enable logging via a few profile option values: FND: Log Enabled, FND: Log Module, FND: Log Level = Statement and FND: Log Filename for Middle Tier.  I believe that changing the level to Statement is what truly caused the issue I’m about to describe, though I’m not 100% sure.  Regardless, after changing these settings (by the way, the Log Module was set to WIP%, and therefore only affecting WIP), the login responsibilities screen looked like this:

... and it's going to rain today, too!

... and it's going to rain today, too!

This change immediately caused floods of calls into the help desk, with people concerned about what they needed to do to re-establish the old level of performance on their system.  Mind you, nobody could quantify any degradation, but with this warning automatically generated by the ERP, how could you not assume you were working overtime tonight?  Seriously, this is the worst idea ever.  Why would Oracle ever assume that performance would be impacted, and worse, why tell every single user who may or may not be affected that his or her performance was going to be degraded?

For the record, if you ever get this message, you can clear it by unsetting the profile option values mentioned and bouncing Apache.

Weekly 11i reports via email

Filed under: 11i — kkempf @ 12:34 pm

I recently covered in some detail how to customize Enterprise Manger Grid Control to keep tabs on critical 11i components.  This morning I received a report (in error, no less!) which is sent out weekly (if there is any data returned… this was the part in error!) to tell me if there is walltime abuse in the ERP.  I may be dating myself to my mainframe roots by using the word walltime, but essentially what the report tells me is this:  Did any concurrent requests run in the last week which took longer than 2 hours to complete?  The 2 hour limit, of course, can be altered; I arrived at that number after watching what a “normal” weekly snapshot of jobs looks like, and found that in general, if something runs more than 2 hours the user probably entered parameters incorrectly.  To be more specific, in most cases, this means the user ran a report “wide open” or without parameters, returning every row from some massive query and outputting about 4000 pages of report after business hours.  This in turn probably caused this printer to run out of paper… you get the picture.  Another possibility is that a user erroneously ran some update job which took so long that it blows up the undo tablespace and causes problems across the whole ERP.

Regardless, I thought I’d take a moment to walk through another tool I use to keep tabs on users.  In a nutshell, it’s a scheduled job (via EM) which simply emails me every week if there’s long running jobs:

Big brother report waiting in my Inbox Monday morning

Big brother report waiting in my Inbox Monday morning

I already mentioned that this is just PL/SQL running as an EM job, and I won’t go into setting up an EM job in this post (it’s pretty self-explanatory).

UTL_SMTP Setup

I’m a big fan of utl_smtp, but it’s too awkward to use. I’m a big fan of easy, so here are some procedures to simplify the syntax.  If you’re familiar with utl_smtp, prefer to go “old school”, or just don’t want to use procedures to do these tasks, you can skip this and hard code your utl_smtp calls the long way.  In my case, I just put all these procedures in a package and call it as needed from the actual report.

mail_compose

This procedure accepts 3 parameters as input

  1. address to: who is getting the email
  2. subject line: what is the email subject
  3. (optional) recipient name: name of email recipient

You must have c_domain defined as a constant which is your domain name.

procedure mail_compose
(
 p_address_to      varchar2
,p_subject_line    varchar2
,p_recipient_name  varchar2 default null
)
is
  c_domain   varchar2(20) := 'wordpress.com'
begin
 g_smtp_conn := utl_smtp.open_connection('smtp.' || c_domain)  -- c_domain is a constant, your domain name
 ;
 utl_smtp.helo(g_smtp_conn
              ,c_domain
              )
 ;
 utl_smtp.mail(g_smtp_conn,'<' || p_address_to || '>');
 utl_smtp.rcpt(g_smtp_conn,'<' || p_address_to || '>')
 ;
 utl_smtp.open_data(g_smtp_conn)
 ;
 utl_smtp.write_data(g_smtp_conn
                    ,'From: "Oracle (' || database_name || ')" '
                     || utl_tcp.crlf
                    )
 ;
 utl_smtp.write_data(g_smtp_conn
                    ,'To: "'
                    || nvl(p_recipient_name
                          ,p_address_to
                          )
                    || '" <'
                    || p_address_to
                    || '>'
                    || utl_tcp.crlf
                    )
 ;
 utl_smtp.write_data(g_smtp_conn
                    ,'Subject: (' || database_name || ')" '
                    || p_subject_line
                    || utl_tcp.crlf
                    )
 ;
end mail_compose
;

mail_text

You can call this as many times as you want, adding lines of text to the email you’re preparing… pretty straight forward

procedure mail_text
(
 p_text  varchar2
)
is
begin
 utl_smtp.write_data(g_smtp_conn,utl_tcp.crlf || p_text);
end mail_text
;

mail_send

This final procedure simply closes the composition and sends it on its way

procedure mail_send
is
begin
 utl_smtp.close_data(g_smtp_conn)
 ;
 utl_smtp.quit(g_smtp_conn)
 ;
 g_smtp_conn := null
 ;
end mail_send
;

database_name

I realized I had another function call in here, which simply returns the database name…

function database_name
 return varchar2
is
 cursor c_dn is
 select
 name
 from
 v$database
 ;
begin
 for c_dn_rec in c_dn
 loop
 return(c_dn_rec.name);
 end loop c_dn
 ;
 return(null)
 ;
end database_name
;

Finally, the walltime abuse report itself, with calls to the above code..

procedure weekly_walltime_abuse
is
cursor c0 is
 select
  fu.user_name
 ,fu.email_address
 from
 applsys.fnd_user fu
 where
 fu.user_name = g_long_run_notify1  -- global constant, which you can just as easily hard code to username
 or
 fu.user_name = g_long_run_notify2  -- global constant, which you can just as easily hard code to username
 ;
cursor c1 is    -- this cursor is the "crux" of the report; it returns information about concurrent requests which ran > 2 hours
 select
  user_concurrent_program_name
 ,fcr.description
 ,fcr.argument_text
 ,fu.user_name
 ,fcr.actual_start_date
 ,fcr.actual_completion_date
 ,request_id
 ,decode(fcr.status_code
        ,'A','Waiting'
        ,'C','Normal'
        ,'D','Cancelled'
        ,'G','Warning'
        ,'H','On Hold'
        ,'I','Normal'
        ,'M','No Manager'
        ,'Q','Standby'
        ,'R','Normal'
        ,'T','Terminating'
        ,'W','Paused'
        ,'X','Terminated'
        ,'Z','Waiting'
        ,'E','Error'
        )    status
 from
   fnd_conc_requests_form_v fcr
  ,fnd_user fu
 where
  (sysdate - fcr.actual_start_date) < 7  -- within the last week
 and
  (fcr.actual_completion_date - fcr.actual_start_date) > .0833 -- 2 hours, 2/24ths of a day
 and
   fcr.requested_by = fu.user_id
 and
   user_concurrent_program_name != 'Gather Schema Statistics'
 order by
   fcr.actual_start_date
 ;
 v_violation_count number
 ; 

begin
 select    -- see how many violations there are
   count(*)
 into
   v_violation_count
 from
   fnd_conc_requests_form_v fcr
 where
   (sysdate - fcr.actual_start_date) < 7  -- within the last week
 and
   (fcr.actual_completion_date - fcr.actual_start_date) > .0833 -- 2 hours, 2/24ths of a day
 ; 

 if
   v_violation_count > 0  -- 1 or more jobs ran more than 2 hours
 then
   for c0_rec in c0 loop  -- send an email to everyone in the c0 designation cursor list
     mail_compose(c0_rec.email_address
                 ,'Excessive wall Time Report'
                 ,c0_rec.email_address
                 )
     ;
     mail_text('Request Name              Parameters                     User       Begin       End         Rqst ID Disposition');
     mail_text(null)
     ;
     for c1_rec in c1 loop      -- send a nicely formatted line
       mail_text(rpad(ltrim(nvl(c1_rec.description,c1_rec.user_concurrent_program_name),25),25,' ')
         || ' '
         || rpad(ltrim(c1_rec.argument_text,30),30,' ')
         || ' '
         || rpad(ltrim(c1_rec.user_name,10),10,' ')
         || ' '
         || rpad(to_char(c1_rec.actual_start_date,'MM/DD HH24:MI'),11,' ')
         || ' '
         || rpad(to_char(c1_rec.actual_completion_date,'MM/DD HH24:MI'),11,' ')
         || ' '
         || rpad(c1_rec.request_id,7,' ')
         || ' '
         || rpad(c1_rec.status,11,' ')
        )
        ;
   end loop c1
   ;
   mail_send
   ;
 end loop c0
 ;
 end if
 ;
end weekly_walltime_abuse
;

October 15, 2009

Flashy show of support

Filed under: Oracle, Support — kkempf @ 7:24 am
Screenshot-My Oracle Support - Mozilla Firefox

But don't type 841061.1 as your search criteria!

My Oracle Support (MOS) continues to make overtures about the end of classic Metalink, with no definitive date posted as of the last time I looked.   Losing the ftp site updates.oracle.com just adds insult to injury.   I would think that a company which trumpets Linux and slams Microsoft so much would recognize that not everyone wants to come to their support and download sites from a Microsoft Windows desktop using IE, but apparently I’m in the minority.  Not to mention I’m still waiting on them to address a flash bug from April 21, 2009 which prevents me from uploading attachments to an SR when using Firefox 3.5 under MOS (screenshot below).  Oracle’s response last April was “So this issue is already identified and will be fixed in the next version of My Oracle Support which should be implemented in a couple of months. Waiting for this new version, he workaround ( you already know it) is to use classice Metalink.”

I’ve read that a major reason they need to revamp Metalink is that they’ve acquired many products and would like to have a unified support interface for the customer.  What I don’t understand is why they’re not taking advantage of this revamp to provide some truly meaningful improvements to the support interface.  One simple improvement I would love to see would be a subscription option to the information you care about the most.  For example, instead of hunting down Discoverer 10.1.2.3 cumulative patches and trying to guess when one comes out, why not have a checkbox next to the patch download which says “email me when this patch is superseded” or “Subscribe to updates to this product”?  Another example I’ve mentioned before is adding search logic to make a search on a Doc ID bring up the matching document as the first hit?  As an example, lets say you’re trying to find Doc ID 455058.1 “Discoverer 10g (10.1.2) Cumulative Patches: Information and Bug Listing” on MOS:  punch in 466058.1 as your search criteria, and see what happens.  The first hit is an alert document which references 466058.1, and the “relevance” bar is 2 of 8 (weak hit).  The second hit is the actual document I’m trying to find, and it’s relevance is also 2 of 8.  Personally I’d call a Doc ID match a relevance hit of 8 of 8, but that’s just me. 

Uploading an attachment to an SR under Firefox 3.5 with Flash and My Oracle Support

Uploading an attachment to an SR under Firefox 3.5 with Flash and My Oracle Support

October 14, 2009

Open World

Filed under: Oracle — kkempf @ 12:45 pm
This year we like Sun again!

This year we like Sun again!

Open World is this week, and I was watching the  marketing keynote session from Sunday where Scott McNealy was talking about how Oracle/Sun crushed IBM’s seventy something rack machine at some fraction of  the cost/power/size etc etc etc.  You can view these videos here, and I’d strongly urge you to do so.  I take all of these things with a grain of salt, but I do believe that these configurations probably do deliver outstanding performance.  But I really don’t “get” the appeal of the database machine (X) version 2.0 (Sun this year not HP) to the average IT shop.  I believe there’s a lot of marketing frenzy (from Oracle) about something some small fraction of their customer base would ever need, much less want.  In other words, who needs this much power and at this cost, outside of Fortune 500 companies?  For the $1.1 million list price of their full rack, I believe we could repurchase everything in our data center.  Probably twice.  Don’t get me wrong, I fully understand I’m not their target audience, but my point is… why are they targeting me?

If you have to ask how much it costs... you can't afford it

If you have to ask how much it costs... you can't afford it

Enough about that.  One final thought on all of this is Open World itself.  I’ve attended 3 times in 8 years, and after last year, I’m in no hurry to return.  My major gripes:

  • This thing is too big for itself now.  Oracle has so many products I found myself bouncing from building to building all over a 3 city-block area.  All this while dodging the other ~40,000 attendees.
  • I live on the East coast.  San Francisco is on the West coast.  It would be really nice if they rotated the location like in the past.  It may be convenient for Oracle to host the event in California, but it’s not convenient for me, especially in the modern (annoying) age of travel.  Perhaps I’m getting tired of SF after so many visits, as well.
  • $.  This thing costs a small fortune, after you figure in coast to coast airfare, 5 days in a $250/night hotel, meals in an expensive city, and the cost of attending the conference itself ($2500).
  • I had this creepy feeling like I was at Oracle cheerleading camp last year

I skipped it this year, and hope to give Collaborate a whirl this Spring.

Java: The Next Generation

Filed under: 11i, Oracle, Techstack — kkempf @ 7:57 am

The Next Generation

After a pretty uneventful migration from Jinitiator 1.1.8.19 to Native Sun Java 1.6.0_12, our help desk began to field intermittent calls about random crashes from within Oracle.  These calls were coming from all range of users, simplest (meaning they run nothing but Oracle on their PC) to complex (multiple Java applications simultaneously).  After a bit of fact checking, we narrowed it down to the Java desktop client.  A bit more research on Metalink found paydirt in Note 290807.1 where “Next-Generation” Java is mentioned many times.  After reading the note, it’s clear that this particular client option causes more problems & work arounds than Oracle is willing to manage, and (at least in our case) the simplest solution was just to uncheck the box and restart the browser as shown below.   We’ll probably push a policy with the key disabling this “feature” soon.   This may not be the sole cause of the 11i desktop crashes, but we are certain it’s a strong contributing factor.

Disabling the Next-Generation Java Plug-In

Disabling the Next-Generation Java Plug-In

October 7, 2009

RSS Feed for this blog

Filed under: Blog — kkempf @ 5:57 am

I had a question about the RSS address for this blog.    The address is automatic with WordPress:  https://kkempf.wordpress.com/wp-rss.php I confirmed it works in Outlook 2007.

Older Posts »

Create a free website or blog at WordPress.com.