Tuesday, November 23, 2010

ORA-01555 "Snapshot too old" - Detailed Explanation

Overview
~~~~~~~~

This article will discuss the circumstances under which a query can return the Oracle
error ORA-01555 "snapshot too old (rollback segment too small)". The article will then
proceed to discuss actions that can be taken to avoid the error and finally will provide
some simple PL/SQL scripts that illustrate the issues discussed.

Terminology
~~~~~~~~~~~

It is assumed that the reader is familiar with standard Oracle terminology such as
'rollback segment' and 'SCN'. If not, the reader should first read the Oracle Server
Concepts manual and related Oracle documentation.

In addition to this, two key concepts are briefly covered below which help in the
understanding of ORA-01555:
1. READ CONSISTENCY:
====================

This is documented in the Oracle Server Concepts manual and so will not be discussed
further. However, for the purposes of this article this should be read and understood if
not understood already.

Oracle Server has the ability to have multi-version read consistency which is invaluable
to you because it guarantees that you are seeing a consistent view of the data (no 'dirty
reads').


2. DELAYED BLOCK CLEANOUT:
==========================

This is best illustrated with an example: Consider a transaction that updates a million
row table. This obviously visits a large number of database blocks to make the change to
the data. When the user commits the transaction Oracle does NOT go back and revisit these
blocks to make the change permanent. It is left for the next transaction that visits any
block affected by the update to 'tidy up' the block (hence the term 'delayed block
cleanout').
Whenever Oracle changes a database block (index, table, cluster) it stores a pointer in
the header of the data block which identifies the rollback segment used to hold the
rollback information for the changes made by the transaction. (This is required if the
user later elects to not commit the changes and wishes to 'undo' the changes made.)

Upon commit, the database simply marks the relevant rollback segment header entry as
committed. Now, when one of the changed blocks is revisited Oracle examines the header of
the data block which indicates that it has been changed at some point. The database needs
to confirm whether the change has been committed or whether it is currently uncommitted.
To do this, Oracle determines the rollback segment used for the previous transaction
(from the block's header) and then determines whether the rollback header indicates
whether it has been committed or not.

If it is found that the block is committed then the header of the data block is updated
so that subsequent accesses to the block do not incur this processing.

This behaviour is illustrated in a very simplified way below. Here we walk through the
stages involved in updating a data block.

STAGE 1 - No changes made

Description: This is the starting point. At the top of the
data block we have an area used to link active
transactions to a rollback
segment (the 'tx' part), and the rollback segment
header has a table that stores information upon
all the latest transactions
that have used that rollback segment.

In our example, we have two active transaction
slots (01 and 02)
and the next free slot is slot 03. (Since we are
free to overwrite committed transactions.)

Data Block 500 Rollback Segment Header 5
+----+--------------+ +----------------------+---------+
| tx | None | | transaction entry 01 |ACTIVE |
+----+--------------+ | transaction entry 02 |ACTIVE |
| row 1 | | transaction entry 03 |COMMITTED|
| row 2 | | transaction entry 04 |COMMITTED|
| ... .. | | ... ... .. | ... |
| row n | | transaction entry nn |COMMITTED|
+-------------------+ +--------------------------------+

STAGE 2 - Row 2 is updated

Description: We have now updated row 2 of block 500. Note that
the data block header is updated to point to the
rollback segment 5, transaction
slot 3 (5.3) and that it is marked uncommitted
(Active).

Data Block 500 Rollback Segment Header 5
+----+--------------+ +----------------------+---------+
| tx |5.3uncommitted|-+ | transaction entry 01 |ACTIVE |
+----+--------------+ | | transaction entry 02 |ACTIVE |
| row 1 | +-->| transaction entry 03 |ACTIVE |
| row 2 *changed* | | transaction entry 04 |COMMITTED|
| ... .. | | ... ... .. | ... |
| row n | | transaction entry nn |COMMITTED|
+------------------+ +--------------------------------+

STAGE 3 - The user issues a commit

Description: Next the user hits commit. Note that all that
this does is it
updates the rollback segment header's
corresponding transaction
slot as committed. It does *nothing* to the data
block.

Data Block 500 Rollback Segment Header 5
+----+--------------+ +----------------------+---------+
| tx |5.3uncommitted|--+ | transaction entry 01 |ACTIVE |
+----+--------------+ | | transaction entry 02 |ACTIVE |
| row 1 | +--->| transaction entry 03 |COMMITTED|
| row 2 *changed* | | transaction entry 04 |COMMITTED|
| ... .. | | ... ... .. | ... |
| row n | | transaction entry nn |COMMITTED|
+------------------+ +--------------------------------+

STAGE 4 - Another user selects data block 500

Description: Some time later another user (or the same user)
revisits data block 500. We can see that there
is an uncommitted change in the
data block according to the data block's header.

Oracle then uses the data block header to look up
the corresponding rollback segment transaction
table slot, sees that it has been committed, and
changes data block 500 to reflect the
true state of the datablock. (i.e. it performs
delayed cleanout).

Data Block 500 Rollback Segment Header 5
+----+--------------+ +----------------------+---------+
| tx | None | | transaction entry 01 |ACTIVE |
+----+--------------+ | transaction entry 02 |ACTIVE |
| row 1 | | transaction entry 03 |COMMITTED|
| row 2 | | transaction entry 04 |COMMITTED|
| ... .. | | ... ... .. | ... |
| row n | | transaction entry nn |COMMITTED|
+------------------+ +--------------------------------+


ORA-01555 Explanation
~~~~~~~~~~~~~~~~~~~~~

There are two fundamental causes of the error ORA-01555 that are a result of Oracle
trying to attain a 'read consistent' image. These are :

o The rollback information itself is overwritten so that Oracle is unable to rollback
the (committed) transaction entries to attain a sufficiently old enough version of the
block.

o The transaction slot in the rollback segment's transaction table (stored in the
rollback segment's header) is overwritten, and Oracle cannot rollback the transaction
header sufficiently to derive the original rollback segment transaction slot.

Both of these situations are discussed below with the series of steps that cause the
ORA-01555. In the steps, reference is made to 'QENV'. 'QENV' is short for 'Query
Environment', which can be thought of as the environment that existed when a query is
first started and to which Oracle is trying to attain a read consistent image. Associated
with this environment is the SCN
(System Change Number) at that time and hence, QENV 50 is the query environment with SCN
50.

CASE 1 - ROLLBACK OVERWRITTEN

This breaks down into two cases: another session overwriting the rollback that the
current session requires or the case where the current session overwrites the rollback
information that it requires. The latter is discussed in this article because this is
usually the harder one to understand.

Steps:

1. Session 1 starts query at time T1 and QENV 50

2. Session 1 selects block B1 during this query

3. Session 1 updates the block at SCN 51

4. Session 1 does some other work that generates rollback information.

5. Session 1 commits the changes made in steps '3' and '4'.
(Now other transactions are free to overwrite this rollback information)

6. Session 1 revisits the same block B1 (perhaps for a different row).

Now, Oracle can see from the block's header that it has been changed and it is
later than the required QENV (which was 50). Therefore we need to get an image of the
block as of this QENV.

If an old enough version of the block can be found in the buffer cache then we
will use this, otherwise we need to rollback the current block to generate another
version of the block as at the required QENV.

It is under this condition that Oracle may not be able to get the required
rollback information because Session 1's changes have generated rollback information that
has overwritten it and returns the ORA-1555 error.

CASE 2 - ROLLBACK TRANSACTION SLOT OVERWRITTEN

1. Session 1 starts query at time T1 and QENV 50

2. Session 1 selects block B1 during this query

3. Session 1 updates the block at SCN 51

4. Session 1 commits the changes
(Now other transactions are free to overwrite this rollback information)

5. A session (Session 1, another session or a number of other sessions) then use the
same rollback segment for a series of committed transactions.

These transactions each consume a slot in the rollback segment transaction table
such that it eventually wraps around (the slots are written to in a circular fashion) and
overwrites all the slots. Note that Oracle is free to reuse these slots since all
transactions are committed.

6. Session 1's query then visits a block that has been changed since the initial QENV
was established. Oracle therefore needs to derive an image of the block as at that point
in time.

Next Oracle attempts to lookup the rollback segment header's transaction slot
pointed to by the top of the data block. It then realises that this has been overwritten
and attempts to rollback the changes made to the rollback segment header to get the
original transaction slot entry.

If it cannot rollback the rollback segment transaction table sufficiently it will
return ORA-1555 since Oracle can no longer derive the required version of the data block.


It is also possible to encounter a variant of the transaction slot being overwritten
when using block cleanout. This is briefly described below :

Session 1 starts a query at QENV 50. After this another process updates the blocks that
Session 1 will require. When Session 1 encounters these blocks it determines that the
blocks have changed and have not yet been cleaned out (via delayed block cleanout).
Session 1 must determine whether the rows in the block existed at QENV 50, were
subsequently changed,

In order to do this, Oracle must look at the relevant rollback segment transaction table
slot to determine the committed SCN. If this SCN is after the QENV then Oracle must try
to construct an older version of the block and if it is before then the block just needs
clean out to be good enough for the QENV.

If the transaction slot has been overwritten and the transaction table cannot be rolled
back to a sufficiently old enough version then Oracle cannot derive the block image and
will return ORA-1555.

(Note: Normally Oracle can use an algorithm for determining a block's SCN during block
cleanout even when the rollback segment slot has been overwritten. But in this case
Oracle cannot guarantee that the version of the block has not changed since the start of
the query).

Solutions
~~~~~~~~~

This section lists some of the solutions that can be used to avoid the ORA-01555 problems
discussed in this article. It addresses the cases where rollback segment information is
overwritten by the same session and when the rollback segment transaction table entry is
overwritten.

It is worth highlighting that if a single session experiences the ORA-01555 and it is not
one of the special cases listed at the end of this article, then the session must be
using an Oracle extension whereby fetches across commits are tolerated. This does not
follow the ANSI model and in the rare cases where
ORA-01555 is returned one of the solutions below must be used.

CASE 1 - ROLLBACK OVERWRITTEN

1. Increase size of rollback segment which will reduce the likelihood of overwriting
rollback information that is needed.

2. Reduce the number of commits (same reason as 1).

3. Run the processing against a range of data rather than the whole table. (Same
reason as 1).

4. Add additional rollback segments. This will allow the updates etc. to be spread
across more rollback segments thereby reducing the chances of overwriting required
rollback information.

5. If fetching across commits, the code can be changed so that this is not done.

6. Ensure that the outer select does not revisit the same block at different times
during the processing. This can be achieved by :

- Using a full table scan rather than an index lookup
- Introducing a dummy sort so that we retrieve all the data, sort it and then
sequentially visit these data blocks.

CASE 2 - ROLLBACK TRANSACTION SLOT OVERWRITTEN

1. Use any of the methods outlined above except for '6'. This will allow transactions
to spread their work across multiple rollback segments therefore reducing the likelihood
or rollback segment transaction table slots being consumed.

2. If it is suspected that the block cleanout variant is the cause, then force block
cleanout to occur prior to the transaction that returns the ORA-1555. This can be
achieved by issuing the following in SQL*Plus, SQL*DBA or Server Manager :

alter session set optimizer_goal = rule;
select count(*) from table_name;

If indexes are being accessed then the problem may be an index block and clean out
can be forced by ensuring that all the index is traversed. Eg, if the index is on a
numeric column with a minimum value of 25 then the following query will force cleanout of
the index :

select index_column from table_name where index_column > 24;

Examples
~~~~~~~~

Listed below are some PL/SQL examples that can be used to illustrate the ORA-1555 cases
given above. Before these PL/SQL examples will return this error the database must be
configured as follows :

o Use a small buffer cache (db_block_buffers).
REASON: You do not want the session executing the script to be able to find old
versions of the block in the buffer cache which can be used to satisfy a block visit
without requiring the rollback information.

o Use one rollback segment other than SYSTEM.

REASON: You need to ensure that the work being done is generating rollback
information that will overwrite the rollback information required.

o Ensure that the rollback segment is small.

REASON: See the reason for using one rollback segment.

ROLLBACK OVERWRITTEN

rem * 1555_a.sql -
rem * Example of getting ora-1555 "Snapshot too old" by
rem * session overwriting the rollback information required
rem * by the same session.

drop table bigemp;
create table bigemp (a number, b varchar2(30), done char(1));

drop table dummy1;
create table dummy1 (a varchar2(200));

rem * Populate the example tables.
begin
for i in 1..4000 loop
insert into bigemp values (mod(i,20), to_char(i), 'N');
if mod(i,100) = 0 then
insert into dummy1 values ('ssssssssssss');
commit;
end if;
end loop;
commit;
end;
/

rem * Ensure that table is 'cleaned out'.
select count(*) from bigemp;

declare
-- Must use a predicate so that we revisit a changed block at a different
-- time.

-- If another tx is updating the table then we may not need the predicate
cursor c1 is select rowid, bigemp.* from bigemp where a <>

begin
for c1rec in c1 loop

update dummy1 set a = 'aaaaaaaa';
update dummy1 set a = 'bbbbbbbb';
update dummy1 set a = 'cccccccc';
update bigemp set done='Y' where c1rec.rowid = rowid;
commit;
end loop;
end;
/

ROLLBACK TRANSACTION SLOT OVERWRITTEN

rem * 1555_b.sql - Example of getting ora-1555 "Snapshot too old" by
rem * overwriting the transaction slot in the rollback
rem * segment header. This just uses one session.

drop table bigemp;
create table bigemp (a number, b varchar2(30), done char(1));

rem * Populate demo table.
begin
for i in 1..200 loop
insert into bigemp values (mod(i,20), to_char(i), 'N');
if mod(i,100) = 0 then
commit;
end if;
end loop;
commit;
end;
/

drop table mydual;
create table mydual (a number);
insert into mydual values (1);
commit;

rem * Cleanout demo table.
select count(*) from bigemp;

declare

cursor c1 is select * from bigemp;

begin

-- The following update is required to illustrate the problem if block
-- cleanout has been done on 'bigemp'. If the cleanout (above) is commented
-- out then the update and commit statements can be commented and the
-- script will fail with ORA-1555 for the block cleanout variant.
update bigemp set b = 'aaaaa';
commit;

for c1rec in c1 loop
for i in 1..20 loop
update mydual set a=a;
commit;
end loop;
end loop;
end;
/

Special Cases
~~~~~~~~~~~~~

There are other special cases that may result in an ORA-01555. These are given below but
are rare and so not discussed in this article :

o Trusted Oracle can return this if configured in OS MAC mode. Decreasing
LOG_CHECKPOINT_INTERVAL on the secondary database may overcome the problem.

o If a query visits a data block that has been changed by using the Oracle discrete
transaction facility then it will return ORA-01555.

o It is feasible that a rollback segment created with the OPTIMAL clause maycause a
query to return ORA-01555 if it has shrunk during the life of the query causing rollback
segment information required to generate consistent read versions of blocks to be lost.

Summary
~~~~~~~

This article has discussed the reasons behind the error ORA-01555 "Snapshot too old", has
provided a list of possible methods to avoid the error when it is encountered, and has
provided simple PL/SQL scripts that illustrate the cases discussed.

Oracle Apps products(Module) acronyms Listing

I Tried to consolidate the Apps product acronyms, Please find the following.

Pseudo Products:

Products that are not part of the core applications, but supporting these core products.
A couple of good examples would be Workflow (OWF), and Oracle Application Manager (OAM).

Installed Products:

Installed products are all the modules that are licenced.

Shared Products:

Shared products can be considred as NOT Installed products since they are not installed but available to support some other module which requires them

ABM Activity Based Management R11i, R12 Obsolete R12
AD Applications DBA R11i, R12
ADS Applications Demonstration Services R11i, R12
ADS_DEV ADS Development R11i, R12
ADX Rapid Install n/a Psuedo Product
AGIS Advanced Global Intercompany System R12 Sub-product of FUN
AHL Complex Maintenance Repair and Overhaul R11i, R12
AHM Hosting Manager R11i, R12 Obsolete R12
AK Common Modules-AK R11i, R12
ALR Alert R11i, R12
AME Approvals Management R11i, R12
AMF Fulfillment Services R11i, R12 Obsolete R12
AML Leads Management n/a Psuedo Product
AMS Marketing R11i, R12
AMV Marketing Encyclopedia System R11i, R12
AMW Internal Controls Manager R11i, R12
AN Sales Analysis R11i, R12
AR Receivables R11i, R12
AS Sales Foundation R11i, R12
ASF Sales Online R11i, R12
ASG CRM Gateway for Mobile Devices R11i, R12
ASL Sales Offline R11i, R12
ASN Sales R11i, R12
ASO Order Capture R11i, R12
ASP Oracle Sales for Handhelds R11i, R12 Renamed from Field Sales/Palm Devices
AST TeleSales R11i, R12
ATG Applications Technology n/a Psuedo Product
AU Application Utilities R11i, R12
AX Global Accounting Engine R11i, R12 Obsolete R12
AZ Application Implementation R11i, R12
BEN Advanced Benefits R11i, R12
BIC Customer Intelligence R11i, R12 Obsolete R12
BIE eCommerce Intelligence R11i, R12
BIL Sales Intelligence R11i, R12
BIM Marketing Intelligence R11i, R12
BIN Communications Intelligence R11i, R12
BIS Applications BIS R11i, R12 AKA Business Intelligence
BIV Service Intelligence R11i, R12
BIX Interaction Center Intelligence R11i, R12
BIY Systems Intelligence R11i, R12
BLC Utility Billing R11i, R12
BNE Web Applications Desktop Integrator R11i, R12
BOM Bills of Material R11i, R12
BPA Bill Presentment Architecture n/a Psuedo Product
BSC Balanced Scorecard R11i, R12
CAC Common Application Calendar n/a Psuedo Product
CC Interaction Center n/a Psuedo Product
CCT Telephony Manager R11i, R12
CDR Oracle Clinical Data Repository R12 AKA Life Sciences Data Hub
CE Cash Management R11i, R12
CHV Supplier Scheduling R11i, R12
CLA APAC Consulting Localizations R12
CLE EMEA Consulting Localizations R12
CLJ Japan Consulting Localizations R12
CLL LAD Consulting Localizations R12
CLN Supply Chain Trading Connector for RosettaNet R11i, R12
CLR Culinary Application R11i, R12
CN Incentive Compensation R11i, R12
COM Communications n/a Psuedo Product
CPGC CPG - CDOA R11i, R12
CRP Capacity R11i, R12
CS Service R11i, R12
CSC Customer Care R11i, R12
CSD Depot Repair R11i, R12
CSE Asset Tracking R11i, R12 Renamed from Enterprise Install Base
CSF Field Service R11i, R12
CSI Install Base R11i, R12
CSK Knowledge Base n/a Psuedo Product
CSL Field Service/Laptop R11i, R12
CSM Field Service/Palm R11i, R12
CSN Call Center R12
CSP Spares Management R11i, R12
CSR Scheduler R11i, R12
CSS Support R11i, R12 Obsolete R12
CST Cost Management R11i, R12
CSZ Customer Support n/a Psuedo Product
CTB Clinical Transaction Base R11i, R12
CUA Capital Resource Logistics - Assets R11i, R12
CUC Revenue Accounting R11i, R12
CUE Billing Connect R11i, R12 Obsolete R12
CUF Capital Resource Logistics - Financials R11i, R12
CUG Citizen Interaction Center R11i, R12
CUI Network Logistics - Inventory R11i, R12
CUN Network Logistics - NATS R11i, R12 Obsolete R12
CUP Network Logistics - Purchasing R11i, R12
CUR Mass Market Receivables for Comms R11i, R12
CUS Network Logistics R11i, R12
CUSTOM Custom Development R11i, R12
CZ Configurator R11i, R12
DDD CADView-3D R11i, R12
DEM Demo Order Entry (AOL Class) R11i, R12
DEM01 Team 01 Order Entry Demo R12
DMF Discrete Manufacturing n/a Psuedo Product
DNA Development R11i, R12
DOM Document Managment and Collaboration R11i, R12
DPP Price Protection n/a Psuedo Product
DT DateTrack R11i, R12
DUMMY_GMO Obsolete Process Operations R12
EAA SEM Exchange R11i, R12 Obsolete R12
EAM Enterprise Asset Management R11i, R12
EC e-Commerce Gateway R11i, R12
ECX XML Gateway R11i, R12
EDR E-Records R11i, R12
EDW Enterprise Data Warehouse n/a Psuedo Product
EGO Advanced Product Catalog R11i, R12
EMS Environment Management System R11i, R12
ENG Engineering R11i, R12
ENI Product Development Intelligence R11i, R12
EVM Value Based Management R11i, R12
EWS Enterprise Warehouse Source n/a Psuedo Product
EXCHG Exchange n/a Psuedo Product
FEM Enterprise Performance Foundation R11i, R12 Renamed from Strategic Enterprise Management
FF FastFormula R11i, R12
FII Financial Intelligence R11i, R12
FIN Financials n/a Psuedo Product
FLM Flow Manufacturing R11i, R12
FND Application Object Library R11i, R12
FPA Project Portfolio Analysis R11i, R12 Renamed from Portfolio Analyzer
FPT Banking Center R11i, R12 Obsolete R12
FRM Report Manager R11i, R12
FTE Transportation Execution R11i, R12
FTP Transfer Pricing R11i, R12
FUN Financials Common Modules R12
FV Federal Financials R11i, R12
FWK Applications Framework n/a Psuedo Product
GCS Financial Consolidation Hub R11i, R12 Renamed from Global Consolidation System
GIS Global Intercompany System R11i
GHR US Federal Human Resources R11i, R12
GMA Process Manufacturing Systems R11i, R12
GMD Process Manufacturing Product Development R11i, R12
GME Process Manufacturing Process Execution R11i, R12
GMF Process Manufacturing Financials R11i, R12
GMI Process Manufacturing Inventory R11i, R12
GML Process Manufacturing Logistics R11i, R12
GMO Manufacturing Execution System for Process Manufacturing R12
GMP Process Manufacturing Process Planning R11i, R12
GMS Grants Accounting R11i, R12
GMW Process Manufacturing Portal R11i, R12
GNI Genealogy Intelligence R11i, R12
GR Process Manufacturing Regulatory Management R11i, R12
HC Healthcare n/a Psuedo Product
HCA Healthcare R11i, R12
HCC iHCConnect R11i, R12
HCN iHCIntegrate R11i, R12
HCP Healthcare Intelligence R11i, R12 Renamed from Healthcare Portal
HCT Healthcare Terminology Server R11i, R12
HR Human Resources n/a Psuedo Product
HRI Human Resources Intelligence R11i, R12
HXC Time and Labor Engine R11i, R12
HXT Time and Labor R11i, R12
HZ Trading Community n/a Psuedo Product
IA iAssets R11i, R12
IAM Digital Asset Management R11i, R12
IBA iMarketing R11i, R12 Obsolete R12
IBC Content Manager R11i, R12
IBE iStore R11i, R12
IBP Bill Presentment & Payment R11i, R12
IBT iAuction R11i, R12
IBU iSupport R11i, R12
IBW Oracle Web Analytics R12
IBY Payments R11i, R12 Renamed from iPayments
ICX Oracle iProcurement R11i, R12 Renamed from Self_Service Web Applications
IEB Interaction Blending R11i, R12
IEC Advanced Outbound Telephony R11i, R12
IEM Email Center R11i, R12
IEO Interaction Center Technology R11i, R12
IEP Predictive R11i, R12
IES Scripting R11i, R12
IET Call Center Connectors R11i, R12
IEU Universal Work Queue R11i, R12
IEV IVR Integrator R11i, R12
IEX Collections R11i, R12
IGC Contract Commitment R11i, R12
IGF Financial Aid R11i, R12
IGI Public Sector Financials International R11i, R12
IGP Personal Portfolio n/a Psuedo Product
IGR Student Recruiting n/a Psuedo Product
IGS Student System R11i, R12 Renamed from Student Systems
IGW Grants Proposal R11i, R12
IMC Customers Online R11i, R12
IMT iMeeting R11i, R12 Obsolete R12
INV Inventory R11i, R12
IPA Capital Resource Logistics - Projects R11i, R12
IPATCH Oracle.com iPatch n/a Psuedo Product
IPD Product Development R11i, R12 Obsolete R12
IPM Oracle Imaging Process Management R12
IRC iRecruitment R12
ISC Supply Chain Intelligence R11i, R12
ISX iSettlement R11i, R12
ITA Information Technology Audit R12
ITG Internet Procurement Enterprise Connector R11i, R12
ITM Item Master n/a Psuedo Product
IZU Diagnostics n/a Psuedo Product
JA Asia/Pacific Localizations R11i, R12
JAI Financials for India n/a Psuedo Product
JE European Localizations R11i, R12
JG Regional Localizations R11i, R12
JL Latin America Localizations R11i, R12
JMF Supply Chain Localizations R12
JTA CRM Applications Foundation n/a Psuedo Product
JTF CRM Foundation R11i, R12
JTH Interaction History n/a Psuedo Product
JTM Mobile Application Foundation R11i, R12
JTO One-to-one Fulfillment n/a Psuedo Product
JTS CRM Self Service Administration R11i, R12
JTT CRM Technology Foundation n/a Psuedo Product
JTU CRM Utilities n/a Psuedo Product
JTY Territories n/a Psuedo Product
LNS Loans R11i, R12
MAS Marketing and Sales n/a Psuedo Product
ME Controlled Availability Product R11i, R12 Obsolete R12
MFG Manufacturing R11i, R12
MIA Mobile Applications for Inventory Management R11i, R12
MIV Media Interactive R11i, R12
MKT Marketing n/a Psuedo Product
MQA Mobile Quality Applications R11i, R12
MRP Master Scheduling/MRP R11i, R12
MSC Advanced Supply Chain Planning R11i, R12
MSD Demand Planning R11i, R12
MSE Manufacturing Development Operations n/a Psuedo Product
MSO Constraint Based Optimization R11i, R12
MSR Inventory Optimization R11i, R12
MST Transportation Planning R11i, R12
MSX Supply Chain Exchange n/a Psuedo Product
MTH Manufacturing Development Operations n/a Psuedo Product
MWA Mobile Applications R11i, R12
OAM Oracle Applications Manager R11i, R12
OCM Credit Management n/a Psuedo Product
ODQ Data Query R11i, R12
OE Order Entry R11i, R12
OFA Assets R11i, R12 AKA FA
OIE iExpenses n/a Psuedo Product
OIR iReceivables n/a Psuedo Product
OIT Internet Time n/a Psuedo Product
OK Contracts Suite n/a Psuedo Product
OKB Contracts for Subscriptions R11i, R12 Obsolete R12
OKC Contracts Core R11i, R12
OKE Project Contracts R11i, R12
OKI Contracts Intelligence R11i, R12
OKL Lease Management R11i, R12
OKO Contracts for Sales R11i, R12 Obsolete R12
OKP Contracts for Procurement R11i, R12 Obsolete R12
OKR Contracts for Rights R11i, R12 Obsolete R12
OKS Service Contracts R11i, R12
OKT Royalty Management R11i, R12
OKX Contracts Integration R11i, R12
OM Order Management n/a Psuedo Product
ONT Order Management R11i, R12
OPI Operations Intelligence R11i, R12
OPM Process Manufacturing n/a Psuedo Product
OTA Learning Management R11i, R12
OUC University Curriculum R12
OWF Workflow n/a Psuedo Product
OZF Trade Management R11i, R12
OZP Trade Planning R11i, R12 Obsolete R12
OZS iClaims R11i, R12 Obsolete R12
PA Projects R11i, R12
PAY Payroll R11i, R12
PBR Budgeting and Planning R11i, R12
PER Human Resources R11i, R12
PFT Oracle Profitability Manager R11i, R12 Renamed from Performance Analyzer
PJ Projects n/a Psuedo Product
PJB Project Billing R11i, R12 Psuedo Product
PJC Project Costing R11i, R12 Psuedo Product
PJF Project Foundation R11i, R12 Psuedo Product
PJI Project Intelligence R11i, R12
PJL Project Collaboration R11i, R12 Psuedo Product
PJM Project Manufacturing R11i, R12
PJR Project Resource Management R11i, R12 Psuedo Product
PJT Project Management R11i, R12 Psuedo Product
PLM Product Lifecycle Management n/a Psuedo Product
PMI Process Manufacturing Intelligence R11i, R12
PN Property Manager R11i, R12
PO Purchasing R11i, R12
POA Purchasing Intelligence R11i, R12
POM Exchange R11i, R12
PON Sourcing R11i, R12
POS iSupplier Portal R11i, R12
POV Exchange Marketplace - Core n/a Psuedo Product
PQH Public Sector HR R11i, R12
PQP Public Sector Payroll R11i, R12
PRC Process Connect n/a Psuedo Product
PRGC Progress Custom R11i, R12
PRP Proposals R11i, R12
PSA Public Sector Financials R11i, R12
PSB Public Sector Budgeting R11i, R12
PSP Labor Distribution R11i, R12
PSR Public Sector Receivables R12
PTX Patch Tracking System R11i, R12
PV Partner Management R11i, R12
QA Quality R11i, R12
QOT Quoting R11i, R12
QP Advanced Pricing R11i, R12
QRM Risk Management R11i, R12
RCI Regulatory Compliance Intelligence n/a Psuedo Product
RCM Regulatory Capital Manager R11i, R12 Obsolete R12
RG Application Report Generator R11i, R12
RHX Advanced Planning Foundation R11i, R12 Obsolete R12
RLA Release Management Integration Kit R11i, R12 Obsolete R12
RLM Release Management R11i, R12
RMG Risk Manager R11i, R12
RRC Retail Core R12
RRS Site Management R12
SCM Supply Chain Management n/a Psuedo Product
SCP Advanced Planning n/a Psuedo Product
SEM Financials Services Applications n/a Psuedo Product
SHT Applications Shared Technology R11i, R12
SLS Sales Suite n/a Psuedo Product
SQLAP Payables R11i, R12 AKA AP
SQLGL General Ledger R11i, R12 AKA GL
SRV Service Suite n/a Psuedo Product
SSP HRMS (UK) R11i, R12
SYSADMIN System Administration R11i, R12
TXK Teckstack n/a Psuedo Product
UMX User Management n/a Psuedo Product
UNV Student System n/a Psuedo Product
VEA Automotive R11i, R12
VEH Automotive Integration Kit R11i, R12 Obsolete R12
WIP Work in Process R11i, R12
WMA Manufacturing Mobile Applications R11i, R12
WMS Warehouse Management R11i, R12
WPS Manufacturing Scheduling R11i, R12
WSH Shipping Execution R11i, R12
WSM Shop Floor Management R11i, R12
XBOL Business Online R11i, R12
XDO XML Publisher R11i, R12
XDP Provisioning R11i, R12
XLA Subledger Accounting R12
XLE Legal Entity Configurator R12
XNA Service Assurance for Communications R11i, R12
XNB Oracle Telecommunications Billing Integrator R11i, R12 Renamed from eBusiness Billing
XNC Sales for Communications R11i, R12 Obsolete R12
XNI Install Base Intelligence R11i, R12 Obsolete R12
XNM Marketing for Communications R11i, R12 Obsolete R12
XNP Number Portability R11i, R12
XNS Service for Communications R11i, R12 Obsolete R12
XNT TeleBusiness for Telecom/Utilities R11i, R12
XTR Treasury R11i, R12
XXV8 Virtuate R11i, R12
ZFA Financial Analyzer R11i, R12
ZPB Enterprise Planning and Budgeting R11i, R12
ZSA Sales Analyzer R11i, R12
ZX E-Business Tax R12