ERP Associates, Inc.

Solutions for People and their Software

PeopleSoft Corner Blog

Ideas, Tips and Techniques for PeopleSoft Enterprise

PeopleSoft License Codes

Posted by: in PeopleSoft

Tagged in: Untagged 

Get a license code to unlock the full versions of PeopleSoft Enterprise or Enterprise One Applications for a limited time.

Oracle eDelivery

Posted by: in PeopleSoft

Tagged in: Untagged 

Download PeopleSoft Enterprise and Enterprise One Applications

Download PeopleSoft Applications for Free

Posted by: in News

Tagged in: Untagged 

This may be old news to most of you, but it came as a very pleasant surprise to me. You can download the current version of any PeopleSoft Enterprise and Enterprise One product for free for 30 days from Oracle’s web site.

You just have to agree to the license terms, the export restrictions, and be willing to spend quality time downloading and unzipping the files.

If you’re current on support, you can download and install the products without having to wait for Customer Care to send you CD’s. In fact, this service replaces eDelivery service that PeopleSoft customers used to pay a premium for.

Here are the links you’ll need:
http://edelivery.oracle.com - eDelivery site where you can download the current versions
http://LicenseCodes.oracle.com - Get a license code to unlock the full application

If you use eDelivery to download and install new programs, you'll need to update your installation options table and uncheck the applications that you haven't licensed. Here's the quote from the PeopleTools 8.47 Installation and Upgrade Guide:

If you obtain your software using E-Delivery, you must carry out an additional step after completing the installation process, creating the database, installing the Application Server, and installing the Pure Internet Architecture. Sign into the PeopleSoft system and navigate to the Installation table on the Products tab. The location of this table will vary depending upon the application you installed. In the Installation table, uncheck the products for which you have not purchased support.

Note. PeopleSoft does not support CDs that you burn at your own site from E-Delivery files.


30 days isn’t very long to install and evaluate a software application as complicated as PeopleSoft, so if you’d like some assistance getting it up and running as quickly as possible, give me a call. I can also walk you through some of the major business processes in each application, or put you in touch with an application specialist who can take you through a more in-depth tour.

Feel free to give me a call at 918-409-4529, or send an e-mail to brent.martin@erpassociates.com.

Extra Hot

Posted by: in Blogs

Tagged in: Untagged 

Chili Joe has a very nice PeopleSoft blog. Lots of good technical stuff. Check it out.

My PeopleSoft Disaster Recovery Adventure

Posted by: in PeopleSoft

Tagged in: Untagged 

It was a sunny and cool mid-afternoon Tuesday late in the fall. Everyone in the office was back from lunch, and I was looking at another relatively uneventful week of production support. The financials folks were closing the sub-ledgers, and the HRMS were getting ready for year end bonuses. The spreadsheet that I had been tweaking all afternoon went unsaved as I was returning to my cubicle with a Payday candy bar and an ice water.

Then the lights went out. And there was that eerie stillness as the air conditioning stopped and PC’s CPU fans fell silent. Employees paused and looked up from blank screens. After a long five seconds, everything jumped back to life.

It took about five minutes, but word spread quickly as to the cause. We could see it all too clearly from the 12th floor window. A large water main under the street had busted near the adjacent building, sending thousands of gallons of water up through the concrete, over the curb, and pouring into the ventilation shafts for the downtown power generators.

There was this one guy on the street hopelessly trying to divert the flow of water around one ventilation shaft with a large piece of plywood. But he was only one person and a large whirlpool had formed where the other ventilation shaft had been 30 feet up the street.

It was rumored that the city took two hours to get the water turned off. But I wasn’t there to see it because they had sent everyone home. Fifteen minutes after the power outage, the life safety guy came across the emergency intercom telling everyone that we would have to evacuate the building because it might loose power. We were obviously running on backup generators at that time.

Before I went home for the day, I did one last check of the PeopleSoft systems. Our UNIX database and application servers couldn’t see the application disks. That sounded bad.

7 days earlier

The PeopleSoft security administrator had turned in her two week notice and her boss delegated her duties and assignments. As the lone consultant, I was assigned to review the disaster recovery documentation that she had prepared and to send it to the Disaster Recovery team. We planned to test the complete disaster recovery plan two months later.

The scope of the document was simply to instruct a user who knew little about PeopleSoft how to start it back up in the unlikely event we ever had to bring it up in the disaster recovery center. It had the following bullet points:
1) Start the application server and the web server using a custom start up script.
2) Start the UNIX process scheduler server using the start-up script
3) Start the NT process scheduler using psadmin
4) Perform some “sanity checks”

This assumed the infrastructure had been restored and the database had been restored and was ready to go.

Given those assumptions, I was adding some practical instructions as to how to reconfigure the app servers given that IP addresses would likely change and thinking about infrastructure dependencies like networking, IP Aliases, etc. But I had no idea how timely this assignment would be, or how incomplete the document ultimately was.

Day 0
When the water rushed down the ventilation shaft of the power company’s power generators (knocking out power to the entire downtown area), it then flowed to the adjoining rooms. One of these rooms was known affectionately to the IT staff as “Data Center 1”, or DC1. Even though my client had built a brand-new state of the art data center in their own building, much of the IT infrastructure had remained here. The SAN storage array that drove most of the critical applications resided here. The water filled this data center up to a depth of about three feet. Servers lived or died depending on how high they were mounted in the rack.

Data Center Two (DC2) was built directly under Data Center One so the water dumped in through the ceiling. Here the server survival odds were more random. Some servers received quite a soaking while others remained relatively dry.

Within hours a team was assembled an on a plane to the disaster recovery site in Pennsylvania.

The Disaster Recovery Architecture
Several months earlier, an IT initiative took place where the enterprise applications that were critical to the ongoing business operations were identified. At that time it was determined that PeopleSoft FSCM was a first level priority, and PeopleSoft HRMS was a third-level priority. The logic was that HRMS’s critical functions (like benefits and payroll) were already outsourced. Financials was considered critical because it was needed to invoice customers and collect money.

Here is a simplified diagram of the PeopleSoft pre-disaster architecture:

Pre-disaster PeopleSoft architecture

Clients connected to one of two UNIX web servers through a load balancer. The application servers also ran on the web servers. One of the App/Web server boxes had the PeopleSoft application installed on SAN disk storage and the report repository directory was also installed on SAN disk storage.

The database server was a UNIX server running Oracle. The database files along with the UNIX process scheduler used SAN Disk storage.

The SAN had the capacity to replicate any changes made to any files in a real-time fashion to the disaster recovery facility. This was enabled for the PeopleSoft UNIX servers.

The Windows Cluster was used to provide an NT process scheduler as well as a file server for the production environment. The application used SAN disk storage, but it was on a different frame and wasn’t replicated to the disaster recovery environment.

My client had allocated servers in the disaster recovery environment that would be used for the PeopleSoft Financials application and other critical applications. However, there was no redundancy built in to the servers at the disaster recovery facility. Here's a quick sketch of the PeopleSoft architecture at the disaster recovery facility:
Post Disaster PeopleSoft Architecture

Ironically, the online portion of the HRMS system kept right on running. Since HRMS wasn’t on the disaster recovery SAN, it didn’t have any components in an old data center. The new data center was un-touched, so it didn’t miss a beat. The NT process scheduler and file server did go for a swim, but at the time I wasn’t worried. We could live without them for a few days.

Day 1
The first 24 hours were spent establishing the infrastructure at the disaster recovery facility, and starting the mission-critical applications. PeopleSoft Financials was deemed critical, but it was at a lower priority than other applications. As a result, the PeopleSoft Financials servers and components didn’t start coming on-line until 48 hours after the flood.

An “IT Command Center” was established later in the day to field all of the calls, prioritize them, and route them to the appropriate infrastructure project manager. They also tracked the issues and reported progress.

In the flooded data centers, crews were busy pumping out water and trying to salvage what they could. “Wet” servers were moved into a staging area to be cleaned and testing. Miraculously, the SAN that so many applications depended on stayed relatively dry, and a first priority was to move it out of the data center before the harsh conditions damaged it further.

Day 2
Since the PeopleSoft Financials system was still down, we got together with the business community to plan out how we were going to restart the application. The disaster happened during the end of month close, so we needed to get the system up and running as quickly as possible. It was critical that everything start cleanly without corrupting any data since the database backup functionality hadn’t yet been established in the DR facility.

We decided on the following plan:
1) When the database starts, an admin person would log on (via SQL Plus) and see what date and time the database was current through. We thought we could get an idea by looking at the most recent entries in the process monitor or integration broker tables, since these tables are updated very frequently. This information would be used by the business community to identify transactions that needed to be re-keyed.
2) The PeopleSoft administrator would then put all Jobsets (jobs scheduled through the master process scheduler) on hold by running a SQL script. We weren’t as worried about putting user defined recurrences on hold since end users weren’t be running processes under their own ID anyway.
3) All user accounts would be locked out except a small subset needed to test the application. Once again this was accomplished with a SQL script.
4) The administrator would then start the web server and application server and allow the subset of users a chance to do sanity checks on the application. If it checked out, we would enable the accounts of users who were directly responsible for completing the Financials closing activities. If the application continued to perform well, we’d turn it on for the entire user base.

Guess what? Nothing is ever as easy as you think. Here are some of the “little” bugs that extended the process.

I received word that the PeopleSoft servers were accessible (although the database was still down) in the mid-afternoon, so I tried to log on to the database server first. My password wasn’t accepted and the SA had to reset it.

Once I was logged on, the mirrored mount points seemed to be there and I was able to execute “psadmin”. Several home directories and users were missing and the SA had to bring them back from a tape backup. Once the users were re-established, we had to reset all of the passwords to their prior values.

On the web/application server, I was able to log on once the SA had reset my password. Unfortunately none of the home directories existed (they were on local storage and weren’t replicated to the DR site). The SA had to bring them back from a tape backup.

Finally we received word that the database was back on-line.

First, I ran SQL to check out the process monitor tables, and determined that the database was current to at least five minutes of the outage. The users later verified that we didn’t loose any transactions. I don’t know how much mirroring to your DR site costs, but I suspect it was worth every penny!

Next, I ran an SQL script to lock out users and disable all of the Jobsets. So far so good.
update psoprdefn set acctlock = 1
where oprid not in (‘ASMITH’,’BWHITE’,’CSTORY’,’DSWAN’, ‘BATCH’, ‘VP1’, ‘PTWEBSERVER’)
/
update PS_SCHDLDEFN set schedulestatus = 0
/


I ran another script to update the distribution node URL to go directly to the web server instead of going through the load balancer. There was no load balancer at the disaster recovery site.

We had been running performance monitor, but our performance monitor database was MIA. So I commented out the EnablePPMAgent setting from the application server and process scheduler configuration.

Then I tried to start up the application server. It errored out with “Missing or invalid version of SQL library libpsora”. Turns out the Oracle Home directory was missing. It took some time to bring this back from tape. I guess it should have been mirrored or pre-installed on the server.

Finally the application server and web server started. While users were doing their “Sanity Checks”, I started the UNIX process scheduler.

I had to tweak the REN server configuration to remove the second app server that we no longer had.

We decided to leave jobsets inactive and manually run whatever had to be run immediately. Since so many of our jobsets imported files from systems that were no longer available, this seemed like a prudent approach until we had the time to analyze all of the jobs.

Day 3

Things started getting a little unstable as work to bring the remaining applications up caused changes in about every corner of the technical infrastructure. For example, the Oracle database listener went down for no obvious reason, and many servers that resided in the undamaged data center were unpingable from the disaster recovery site.

The crontab file on our batch server had disappeared. We schedule our outbound and inbound file processing via Cron, so this was a problem. Fortunately this was easy to correct once we saw what the problem was.

We unlocked all of the user accounts to allow full access to the application. PeopleSoft performed well running at the disaster recovery site as a result of its server-centric architecture. Most users didn’t notice a performance impact. Other applications that required more data processing on the client didn’t fare as well since the network bandwidth was now very limited.

The Windows process scheduler server was never identified as one to be moved to the disaster recovery site. Fortunately only the server’s storage resided in the flooded data center – the server itself stayed dry in the undamaged one. So alternate storage was identified and we were able to restore the application directories relatively quickly. The only catch was that we lost all changes since the most recent backup which amounted to a few files that we were able to re-create.

Unfortunately, performance on the windows process scheduler was much slower since the database now resided across the country. We could live with this since most of the heavy processing would be done on the UNIX database server.

Getting the windows cluster network name working again took several days due to an error that stated “You were not connected because a duplicate name exists on the network” every time a user tried to connect. Resolving the error wasn’t a priority for the SA’s because of the number of boxes that were still down. We had to tell users how to re-map their drives if they needed things like app designer or the PeopleSoft ODBC driver. Also, we had to change file locations at Setup Financials/Supply Chain > Common Definitions > File Locations and Images > File Locations to change the cluster name to the server name so app engines and SQR’s that used this information would work.

Journal posting wasn’t working, and it didn’t take long to determine why – the COBOL environment wasn’t working. It seemed to be a problem with the COBOL license manager which didn’t like the fact that it found itself on a new server. We had to completely reinstall COBOL to get it working again.

Toward the afternoon we felt like we knew what jobs could run, but we didn’t want them to play “catch up” and run once for each missed run-time since we went down. So I set the next start date/time up the required number of days by running update scripts for each job in this format:
update ps_schdldefninfo set nextstartdttm = nextstartdttm + 3 where SCHEDULENAME = ‘ARUPDATE’;

I didn’t activate the jobs through the script, but I let the analyst do it on-line through the jobset pages. I would have let the analyst update the next start date/time too, but I don’t believe this field is accessible on-line.

Lessons Learned

I must say I learned a lot during this experience. Here are some of the lessons I took away:

• Don’t put off creating a disaster recovery plan
• Test the disaster recovery plan
• Include every server that your application is dependent on in the disaster recovery plan.
• Carefully review the infrastructure group’s disaster recovery plan for each one of your servers. Understand the priority and make sure it corresponds with the application’s needs.
• Even if you have real-time replication to the data center, don’t expect the application to be available immediately. Servers still have to be provisioned, networking must be set up, and other applications are probably in line before yours.
• Don’t forget about impacts to your batch job schedule. At least plan to meet with the people who know it well to talk through things before restarting the process schedulers.
• Even after your application is back up and running, expect new problems to show up as the entire infrastructure is being re-established in a new environment.
• Have a comprehensive system checkout script, and use it before you let users get into the system. Execute it daily for the first week.
• You may not have regular backups in the DR facility like you did back home. Manage the system accordingly.
• Don’t expect to have dev/test environments for the foreseeable future. Have an idea about how business can be conducted without one. For example, how comfortable do you feel about applying those tax updates without testing, especially given limited backup functionality?
• Consider the effort to migrate everything from the DR center back home, at least at a high level.


Cloning a PeopleSoft 8.4x Database

Posted by: in PeopleTools

Tagged in: Untagged 

Update: You may find a more current version of this article in the PS Corner Wiki.

One of the most common tasks of a PeopleSoft administrator or DBA is to clone a development or test database from a production database. I just wanted to take a minute to lay out the steps you'll want to consider when refreshing PeopleSoft databases that are running PeopleTools 8.4x.

I'm sure this list isn't complete for every installation and it can certainly be improved. Please let me know if you see something that I missed, or if you have a suggestion to improve the process.

For purposes of discussion, the source database will be production, and the target database will be the dev/test database that you're overlaying.

1) Export any security that you need to preserve from the target database to a flat file. Data Mover is a nice tool to use for this since you can qualify each table with a list of operator ID's to export. The tables you should consider exporting for specific users are PSOPRDEFN, PSOPRALIAS, PSROLEUSER, PSUSERATTR, PSUSEREMAIL, PSUSERPRSNLOPTN, PS_ROLEXLATOPR and PS_RTE_CNTL_RUSER.

2) Stop the target application environment, including application servers and process schedulers. Stopping the web server is optional since it doesn't connect directly to the database. Be sure to clear cache.

3) Overlay the target database with a recent backup of the Production database. The exact process will differ for your database platform, but your DBA should be able to do this with minimal direction.

4) After the database comes back on-line, set DBNAME in PSDBOWNER back to the target database name.

5) Set GUID to ' ' in the PSOPTIONS table. This will cause PeopleSoft to generate a new GUID so that change assistant can track it separately from the source database.

6) Delete the data from the reporting tables, process scheduler tables and application messaging tables since this data isn't relevant in the target database. Run prcsclr.dms, rptclr.dms and appmsgpurgeall.dms. In addition, I also delete from the report manager tables PSRF_RATTR_TBL; PSRF_RSCRTY_TBL; PSRF_RINFO_TBL; and delete from PSRF_FINFO_TBL where PSRF_PRNT_FLDR_ID <> 0;

7) If you have a script to reset everyone's e-mail address to a pre-defined value so that workflow messages from the Test environment don't get sent to real users, run it now. It should update the PSUSEREMAIL and PS_ROLEXLATOPR tables.

8) Log on to the target database with data mover and run the following command to set the SYSADM password and any other back to it's pre-refreshed value:
CHANGE_ACCESS_PASSWORD SYSADM1 MYSECRETPWD;

DBRefresh.DMS is an example data mover script that performs steps 5-8.

9) Import the security that you exported in step 1.

10) While you're in data mover, change the user passwords that are configured in your application server, process scheduler, and integration broker configurations back to the pre-refresh values:
update psoprdefn set OPERPSWD = 'devpswd', encrypted = 0 where oprid = ('PSAPPS');
encrypt_password PSAPPS;
update psoprdefn set OPERPSWD = 'devpswd', encrypted = 0 where oprid = ('PTWEBSERVER');
encrypt_password PTWEBSERVER;


11) Clear application server, web server and process scheduler cache if you haven't already done it. Start the target application environment.

12) Log on through the web front end.

13) Update the Report Node configuration and verify your Process Scheduler Servers are using the correct configuration. Make any Web Profile changes if needed.

14) Navigate to PeopleTools > Utilities > Options and update the database name and description.

15) Change password rules as appropriate for a development environment.

16) Change your default local node if it should be named differently than the default local node from the source database. If it's not named differently, you may be at risk for a single sign-on vulnerability.

17) Reconfigure attachment servers (if used)

18) Reconfigure REN servers and clusters if the application server didn't configure it correctly at startup.

19) Make sure you copy all of the batch objects (SQR's, Crystal Reports, COBOL programs, etc.) from your source to your target environment to keep the environment in synch. Don't forget to do this on both UNIX and Windows servers.

20) Perform some sanity checks to make sure the environment is behaving itself before you let users back into it. At a minimum you should verify you can log on and run a report. Verify the report runs to completion, posts, and allows you to view the report without having to sign in a second time.

Sending E-mail Alerts From PeopleSoft Performance Monitor

Posted by: in PeopleTools

Tagged in: Untagged 

Overall I have found the PeopleSoft Performance Monitor is worth the trouble of setting up and configuring. It hasn't detracted from system stability or performance, and it does help identify system problems that wouldn't otherwise be apparent. One of my favorite performance monitor success stories was when we discovered that a user was using the system inappropriately and trying to blame the results on a system bug.

On the other hand, I am disappointed in the inability of the Performance Monitor (v 8.45) to notify someone when alarms are raised. As far as I can tell, the only way you can find out about alarms would be to stay logged on and refresh the alarm history page periodically -- hardly a solution after hours or over the weekend.

The ideal solution would be to create a database trigger that would send an e-mail message to the administrator's pager whenever an alarm is inserted into the database. That way the administrator would receive real-time notifications and could respond quickly, possibly before a problem becomes noticeable to the users. This post describes how to accomplish this goal.

Heres a list of functionality I wanted from my trigger:
1) Don't fire unless its an alarm
2) Don't fire if the alarm is related to a Jolt timeout. Most of the time these happen because users inefficient queries time out and I don't want to get paged over the weekend for this reason.
3) Send an e-mail message with relevant information to a user list.
4) Only send an e-mail for the Production domain. Dev/Test domains don't require the same level of support.
5) Only send one e-mail every 10 minutes. Performance Monitor can certainly create hundreds of alerts over a short period of time when things are going bad, so one notification every 10 minutes should be sufficient.

The first step was to figure out how to make a database trigger send an e-mail. Since we are using an Oracle database, I did a Google search for Oracle Database Triggers and E-mail and came up with several good sites. The approach I decided to take is well documented at http://www.dbasupport.com/oracle/ora9i/oracleemail.shtml

The first part of the trigger is as follows:

CREATE OR REPLACE TRIGGER AlarmNotification
AFTER INSERT ON PSPMEVENTHIST
for each row


This creates a trigger called AlarmNotification that fires after each insert on PSPMEVENTHIST, the primary table for PM Events.

The WHEN criteria is:
when (new.pm_filter_level in ('02', '03') and
new.pm_agentid in (47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,99,104,105,123,124,132,133,134,135)
and new.PM_METRIC_VALUE7 not like '%bea.jolt.JoltRemoteService(ICPanel)call(): Timeout%')

I got this by SQL Tracing my performance monitor session as I navigated to the Alarm History page and clicked refresh. My "PM_METRIC_VALUE7 not like xxx" statement filters out timeout alarms which meets requirement number 2 above.

The declaration portion of the trigger follows:
declare
  l_maicon utl_smtp.connection;
  alert_datetime date;
  CURSOR curs_get_event_descr
  IS
    SELECT PM_EVENT_DEFN_SET,PM_EVENT_DEFN_ID,DESCR60,PM_EVENT_LABEL,PM_ADDTNL_LABEL,
    PM_METRICID_1,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_1) METRICLABEL1,
    PM_METRICID_2,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_2) METRICLABEL2,
    PM_METRICID_3,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_3) METRICLABEL3,
    PM_METRICID_4,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_4) METRICLABEL4,
    PM_METRICID_5,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_5) METRICLABEL5,
    PM_METRICID_6,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_6) METRICLABEL6,
    PM_METRICID_7,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_7) METRICLABEL7,
    PM_FILTER_LEVEL,
    PM_SAMPLING_ENABLE,
    (select dbname from pspmsysdefn b, pspmagent c where c.pm_agentid = :new.PM_AGENTID and b.pm_systemid = c.pm_systemid) DBNAME
    FROM PSPMEVENTDEFN a
    WHERE PM_EVENT_DEFN_SET=:new.PM_EVENT_DEFN_SET AND PM_EVENT_DEFN_ID=:new.PM_EVENT_DEFN_ID;
  v_event_descr curs_get_event_descr%ROWTYPE;  


l_maicon represents the smtp connection. Alert_datetime provides a variable to hold the last time an alert was e-mailed, and the cursor pulls descriptive text of the event. V_event_descr provides a place to dump the fields from the cursor.

The Begin portion of the trigger starts like this:

begin
 OPEN curs_get_event_descr;
 FETCH curs_get_event_descr INTO v_event_descr;
 CLOSE curs_get_event_descr;


Which simply fetches the cursor based on the event row.

Now that we have the cursor information, we need to make sure the alert is related to a production database, and we need to make sure we haven't sent an alert in the last 10 minutes.

if (v_event_descr.DBNAME = 'FPRD88')
 then
     select STATS_START into alert_datetime
     from PSOPTIONS;     

     if alert_datetime < :new.PM_MON_DTTM - .0034722
     then


Notice I'm reusing a date/time field from PSOPTIONS called STATS_START to keep track of the last time an e-mail was sent. It would probably be better to create a custom one-row table to hold this information, but it didn't look like the field was being used, PSOPTIONS is a convenient one-row table, and I was going for "quick and dirty". Use this at your own risk, though.

OK, the next portion is where we actually build the e-mail and send it using the utl_smtp package.

          l_maicon :=utl_smtp.open_connection('relay-smtp.acme.com',25);
          utl_smtp.helo(l_maicon,'hostname');
          utl_smtp.mail(l_maicon,'psoftadmin@acme.com');
          utl_smtp.rcpt(l_maicon,'psoftadmin@acme.com');
          utl_smtp.rcpt(l_maicon,'2305551212@mobile.mycingular.com');
          utl_smtp.data(l_maicon,'From: psoftadmin@acme.com' || utl_tcp.crlf||
                    'To: psoftadmin@acme.com;2305551212@mobile.mycingular.com' || utl_tcp.crlf ||
                    'Subject: Performance Monitor Alert - ' || v_event_descr.DBNAME || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL7 || ': ' || :new.PM_METRIC_VALUE7 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL2 || ': ' || :new.PM_METRIC_VALUE2 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL1 || ': ' || :new.PM_METRIC_VALUE1 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL3 || ': ' || :new.PM_METRIC_VALUE3 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL4 || ': ' || :new.PM_METRIC_VALUE4 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL5 || ': ' || :new.PM_METRIC_VALUE5 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL6 || ': ' || :new.PM_METRIC_VALUE6 || utl_tcp.crlf);
          utl_smtp.quit(l_maicon);


I won't go into detail about this code since there are so many other good examples on Oracle's web site or other resources on the internet.

Now that the e-mail is sent, we need to update PSOPTIONS.STATS_START to the date/time of the event that were e-mailing.

          update psoptions set stats_start = :new.PM_MON_DTTM;
     end if;
 end if;
end;
/

And thats pretty much it. Heres the full text of the trigger:

CREATE OR REPLACE TRIGGER AlarmNotification
BEFORE INSERT ON PSPMEVENTHIST
for each row
when (new.pm_filter_level in ('02', '03') and
    new.pm_agentid in (47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,99,104,105,123,124,132,133,134,135)
    and new.PM_METRIC_VALUE7 not like '%bea.jolt.JoltRemoteService(ICPanel)call(): Timeout%')
declare
  l_maicon utl_smtp.connection;
  alert_datetime date;
  CURSOR curs_get_event_descr
  IS
    SELECT PM_EVENT_DEFN_SET,PM_EVENT_DEFN_ID,DESCR60,PM_EVENT_LABEL,PM_ADDTNL_LABEL,
    PM_METRICID_1,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_1) METRICLABEL1,
    PM_METRICID_2,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_2) METRICLABEL2,
    PM_METRICID_3,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_3) METRICLABEL3,
    PM_METRICID_4,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_4) METRICLABEL4,
    PM_METRICID_5,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_5) METRICLABEL5,
    PM_METRICID_6,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_6) METRICLABEL6,
    PM_METRICID_7,
    (select PM_METRICLABEL from PSPMMETRICDEFN where PM_METRICID = a.PM_METRICID_7) METRICLABEL7,
    PM_FILTER_LEVEL,
    PM_SAMPLING_ENABLE,
    (select dbname from pspmsysdefn b, pspmagent c where c.pm_agentid = :new.PM_AGENTID and b.pm_systemid = c.pm_systemid) DBNAME
    FROM PSPMEVENTDEFN a
    WHERE PM_EVENT_DEFN_SET=:new.PM_EVENT_DEFN_SET AND PM_EVENT_DEFN_ID=:new.PM_EVENT_DEFN_ID;
  v_event_descr curs_get_event_descr%ROWTYPE
begin
 OPEN curs_get_event_descr;
 FETCH curs_get_event_descr INTO v_event_descr;
 CLOSE curs_get_event_descr;

 if (v_event_descr.DBNAME = 'FPRD88')
 then
     select STATS_START into alert_datetime
     from PSOPTIONS;     

     if alert_datetime < :new.PM_MON_DTTM - .0034722
     then
          l_maicon :=utl_smtp.open_connection('relay-smtp.acme.com',25);
          utl_smtp.helo(l_maicon,'hostname');
          utl_smtp.mail(l_maicon,'psoftadmin@acme.com');
          utl_smtp.rcpt(l_maicon,'psoftadmin@acme.com');
          utl_smtp.rcpt(l_maicon,'2305551212@mobile.mycingular.com');
          utl_smtp.data(l_maicon,'From: psoftadmin@acme.com' || utl_tcp.crlf||
                    'To: psoftadmin@acme.com;2305551212@mobile.mycingular.com' || utl_tcp.crlf ||
                    'Subject: Performance Monitor Alert - ' || v_event_descr.DBNAME || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL7 || ': ' || :new.PM_METRIC_VALUE7 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL2 || ': ' || :new.PM_METRIC_VALUE2 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL1 || ': ' || :new.PM_METRIC_VALUE1 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL3 || ': ' || :new.PM_METRIC_VALUE3 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL4 || ': ' || :new.PM_METRIC_VALUE4 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL5 || ': ' || :new.PM_METRIC_VALUE5 || utl_tcp.crlf ||
                    v_event_descr.METRICLABEL6 || ': ' || :new.PM_METRIC_VALUE6 || utl_tcp.crlf);
          utl_smtp.quit(l_maicon);
          update psoptions set stats_start = :new.PM_MON_DTTM;
     end if;
 end if;
end;
/


Convert PeopleSoft Components to Web Services with SOAPTOCI

Posted by: in PeopleTools

Tagged in: Untagged 

One of my favorite sessions this year at Oracle OpenWorld was the Oracle University Mini Lesson – PeopleSoft Enterprise and Web Services, session S783.

They went through the history and capabilities of web services, but I was primarily interested in the capabilities of PeopleTools 8.4x. My biggest take-away was the WSDL capabilities of Component Interface.

SOAPTOCI is a standards-compliant SOAP wrapper for Component Interface.

The promise of Component Interface has always been that you can programmatically enter data into PeopleSoft and it would execute all of the validations and business logic in real-time, including workflow transactions. The biggest disadvantage has been that even minor PeopleTools upgrades force you to upgrade your API libraries. SOAPTOCI addresses this concern, and makes Component Interface accessible to web service orchestration tools like the BPEL Process Manager.

In PeopleTools 8.4x, SOAPTOCI is actually pretty well documented in PeopleBooks. Check out your PeopleSoft Component Interfaces PeopleBook under the “Using WSDL Binding for Component Interface”.

I won’t go into the setup of SOAPTOCI, so check out the instructions in PeopleBooks. It will take you through setting up the SOAPTOCI synchronous transaction on the node of your choice.

Once you do get the SOAPTOCI message set up, you’re ready to start executing Component Interfaces. Let's get started.


Upgrade Your Skills Today for Tomorrow's Fusion World

Posted by: in Oracle Fusion

Tagged in: Untagged 

So what does a PeopleSoft techie need to know to survive and thrive in the coming years as the applications evolve to the Fusion architecture? Here are my best guesses:

XML
Since just about everything communicates via XML, it would be a good idea to understand some basic XML concepts, like how XML is structured, how you can transform it with XSLT files, etc.

JDeveloper
JDeveloper is Oracle’s standards-based integrated development environment. It’s a great Java editor/debugger, and it includes plug-ins for doing advanced programming like creating web pages, talking to the database, creating BPEL process flows, etc.

Java
Java is the common programming language that will be used across the architecture. ‘Nuff said.

Web Services
If you know what an EIP is, you have a good idea what a web service is. Any application message or even component interface can be implemented as a web service. Start thinking in terms of web services, and design new applications and interfaces as web services. You’ll be way ahead of the game.

BPEL Process Manager
BPEL Process manager is part of JDeveloper. It’s part workflow designer, part web service orchestrater. In a nutshell, it allows you to design interfaces and business processes by combining web services and manual interactions along with decision criteria.
• Part of JDeveloper
• Workflow Designer
• Allows web services and human interactions to be combined into a logical process flow

XML Publisher
Not sure if this one has been released yet, it’s clear that XML Publisher will be part of the core reporting toolset for the Fusion application and a great feature in future PeopleTools releases.

Other things to track
There are several areas you should read about and keep up with because they’ll be changing your world to some extent sooner or later:

• Oracle Enterprise Manager for PeopleTools Administration
• Oracle Identity Management will be woven throughout all of the applications. It would be good to have an idea about how Oracle manages your identity and single signon.
• Oracle’s Analytic applications and approaches, like Data Hubs and reporting tools.
• Oracle Discoverer is an OLAP + Relational reporting tool that is easy enough to use for most end users. I believe this will be part of the application going forward.
• Business Objects Enterprise toolset will be bundled with PeopleTools and will be used extensively in PeopleSoft 9. Not sure if these tools will make it to the Fusion application.

If you're looking for a book to help outline some of the existing tools, good luck -- there aren't many out just yet. I purchased Oracle Application Server 10g Web Development at the conference this year. It covers JDeveloper, Application Server Portal and J2EE development. At the same time, it covers components like Oracle Forms which will be obsolete in Fusion. Although I haven't read it, Business Process Execution Language for Web Services sounds interesting -- it covers both Oracle BPEL Process Manager and Microsoft BizTalk Server.

Oracle OpenWorld 2005 - Oracle Fusion Architecture

Posted by: in Oracle Fusion

Tagged in: Untagged 

Fusion Middleware
Oracle Fusion Middleware the family of standards-based software products included in Oracle Application Server 10g: Application Development Tools and J2EE Application Server; Web Services infrastructure; Enterprise Service Buses and Integration; Business Process Management and Activity Monitoring; Business Intelligence Tools; Security and Identity management; Enterprise Portals and Mobile – as well as Data Hubs and Oracle Collaboration Suite.

For detailed information, see http://www.oracle.com/products/middleware/index.html.
Fusion Architecture “Stack”
The Fusion Architecture products can be thought of in terms of a stack of architectures that include Service Oriented architecture, Information architecture and Grid architecture.
• Service-Oriented Architecture
  o SOA facilitates the development of enterprise applications as modular business services that can be easily integrated and reused, creating a flexible and adaptable IT infrastructure.
  o This Services approach has been called “The foundation of the next evolution of Enterprise Applications.”
  o For more information, see http://www.oracle.com/technologies/soa/index.html.
• Information Architecture
  o Oracle seems very big on how information is architected. I’m not sure exactly what this covers beyond a solid data model and data definitions.
• Grid Architecture
  o The promise of Grid Architecture is the ability to add or remove capacity to an application by assigning or removing additional servers dynamically. Oracle’s 10g database supports this, along with Oracle’s application server.
Principles of Fusion Architecture
• Service Enabled for maximum flexibility in Applications
• Enable flexible, adaptable business processes.
• Deliver actionable business insight
• Consolidate and deliver quality information
• Enable employees to share information and collaborate
• Deliver better security and ownership experience

Components of Fusion Architecture
BPEL Process Manager
• Orchestrates business processes
• Supports standard BPEL capabilities natively
Business Activity Monitor
• Provides real-time business analytics
• Presents real-time Key Performance Indicators
• Integrated with BPEL Process Manager
Web Services Manager
• Provides security and control over who can access what web service, how they are accessed, and where they are reused
• Defines policies and enforces them at runtime
Grid Computing
• Allows spreading database processing across multiple servers
• Greatly improves performance
• Greatly improves scalability and availability
• Protects from planned and unplanned downtime
• Allows you to proactively manage SLA’s. New capacity can be added “on the fly” during peak times.
Middleware Suite
• Completely Standards Based
• “Hot Pluggable”, in that you can use Oracle’s component, or any other vendor’s component as long as it supports the standard
• Oracle still hadn’t decided if they would support non-Oracle databases, though.

Oracle Applications Strategy
Key Areas:
• Protect investments in JDE, PS, Oracle and exploit existing application functionality
• Integrate and Extend
  o Integrate existing applications with Fusion architecture
  o Extend Core functionality
  o Extend to other business partners and applications
• Evolve to a unified suite with the best of functionality through Fusion Architecture

How Fusion will impact PeopleSoft applications
• A Unitifed Interface Repository is being built as a single directory for all web services, business processes, business models, scheduled jobs, etc.
• BPEL can be used now to define cross-application business processes
• Applications can be integrated into a single portal
• User access can be managed centrally through Oracle Identity Management
• Business Activity Monitoring is being incorporated into the 8.9 PeopleSoft Supply Chain Module
• Data hubs can be used to consolidate information across all applications
• Soon PeopleSoft administration and monitoring can be done through Enterprise Service Manager



Back to Top