Wednesday, April 25, 2012

JVM Tuning (Garbage Collection) in Oracle Apps 11i

Important thing missing from all these notes (for some one like me who is new to Java) is basics of Garbage Collection, Generation and how to read GC output.
In this post I’ll start with basics of JVM GC (Garbage Collection) and then in next post apply this theory for real time performance issues w.r.t. JVM (11i Java Virtual Machine) .
Garbage - Java object is considered garbage when it can no longer be reached from any pointer in the running program.
Generations – Memory in JVM is managed in terms of generation i.e. Young generation and tenured generation. Memory pool holding object of different ages like young, tenured. If a particular generation fills up, garbage collection occurs.
A. Young generation – Objects are initially allocated in Young generation (most of objects die here). When Young generation fills up, it causes Minor Garbage Collection. Any objects survived after Minor GC (Garbage Collection) are moved to Tenured Generation.  Minor Garbage collection is quick as compared to Full/Major GC.
B. Tenured generation – Surviving objects (from young generation) after minor garbage collection are moved to area called tenured generation, When tenured generation fills up it causes major collection (aka Full GC or Full Garbage Collection). Major collection is slow as it involves all live objects.
Garbage Collection (GC) – is program which clears garbage(dead java objects). Garbage Collection work on fundamental principle that majority of java objects die young (quickly after arriving in JVM). There are two kind of Garbage Collection Minor Garbage Collection and Major Garbage Collection (aka Full GC)
Example of Minor GC -  3824.164: [GC 196725K->141181K(209864K), 0.3295949 secs]
Example of Minor GC -  3841.051: [Full GC 150466K->87061K(217032K), 3.2626248 secs]
Pauses: is the time when application becomes unresponsive because garbage collection is occurring.
.
Understanding JVM parameter for 11i
Sizing the generation is very important in tuning JVM GC. Before jumping to Sizing generation (Young and Tenured) lets look at default 11i JVM parameters
In context file($APPL_TOP/ admin/ $CONTEXT_NAME.xml) default entry for JVM is like
<jvm_options oa_var=”s_jvm_options” osd=”Solaris”>-verbose:gc -Xmx512M -Xms128M -XX:MaxPermSize=128M -XX:NewRatio=2-XX:+PrintGCTimeStamps -XX:+UseTLAB </jvm_options>
1. Above line represents JVM (OACoreGroup) size in 11i
2. -Xms128M, means start with 128MB heap size
3. -Xmx512M, means grow JVM heap size upto max size of 512 MB
4. -XX:NewRatio=2 is to control young generation i.e. ratio between young and tenured generation is 1:2 (i.e. if size of young generation is 50 MB then size of tenured generation should be approx. 100MB)
5. -XX:MaxPermSize=128M limit the permanent generation to 128M (permanent generation is part/area in tenured generation)
6. -XX:+UseTLAB represents to use thread-local object allocation
7. There are two more parameters (11i JVM uses default values) -XX:MinHeapFreeRatio=<minimum> & -XX:MaxHeapFreeRatio=<maximum> with default value of 40 & 70 resp. (for Solaris)
If percentage of free space in generation falls below 40%, size of generation will expand and if percentage of free space exceeds 70%, the size of generation will shrunk.
.
Various type of Garbage CollectorFrom JDK 1.4.2 there are total 4 type of collectors (prior to 1.4.2 it was just one collector i.e. default collector)
1. Default Collector: JDK prior to 1.4.2 uses default collector. If you don’t specify any parameter with JVM default is default collector.
2. ThroughPut Collector : This collector uses parallel version of young generation collector but Tenrured generation is collected in normal way. To set throughput collector use -XX:+UseParallelGC  so change
<jvm_options oa_var=”s_jvm_options” osd=”Solaris”>-verbose:gc -Xmx512M -Xms128M -XX:MaxPermSize=128M -XX:NewRatio=2 -XX:+PrintGCTimeStamps -XX:+UseTLAB </jvm_options>
to
<jvm_options oa_var=”s_jvm_options” osd=”Solaris”>-verbose:gc -Xmx512M -Xms128M -XX:MaxPermSize=128M -XX:NewRatio=2 -XX:+PrintGCTimeStamps -XX:+UseTLAB -XX:+UseParallelGC</jvm_options>
3. Concurrent Low Pause Collector : Concurrent Collector is used to collect tenured generation collection concurrently with execution of application. Parallel version of collector is used for young generation. To set Concurrent Low Pause Collector use -XX:+UseConcMarkSweepGC
like
<jvm_options oa_var=”s_jvm_options” osd=”Solaris”>-verbose:gc -Xmx512M -Xms128M -XX:MaxPermSize=128M -XX:NewRatio=2 -XX:+PrintGCTimeStamps -XX:+UseTLAB -XX:+UseConcMarkSweepGC</jvm_options>
4. Incremental low pause collector : This collector collects just portion of tenured generation at each minor garbage collection. To use Incremental low pause collector use
-Xincgc
If you are on JDK 1.4.2 with multi CPU try setting Concurrent Low Pause Collectoras Garbage Collector.
Thumb rule for Grabage Collection/ JVM tuning w.r.t. 11i1.Stay on latest JVM/JDK version where ever possible (latest certified with 11i is JRE 6, you should be at-least 1.4.2 and higher)
2. For OACoreGroup consider no more than 100 active users per JVM
3. There should NOT be more than 1 active JVM per CPU
4. Try to reduce GC (Garbage Collection) frequency (specially Major/Full GC). Play with various JVM parameters like (-Xmx, -Xms, -XX:MaxPermSize, -XX:NewRatio, -XX:+UseParallelGC/ -XX:+UseConcMarkSweepGC)
5. If you are on JDK 1.4.2 with multiple CPU middle tier, use Concurrent Low Pause Garbage Collector  by setting -XX:+UseConcMarkSweepGC with JVM
6. If you are using Oracle Configurator, assign dedicated JVM for configurator requests
7. Try setting JVM max size NOTgreater than 1 GB, (use multiple JVM’s of 512MB or 1024 MB), this is to reduce GC time (more heap size means more time in GC)
8. Minor GC should be occurring at interval long enough to allow many objects to die young (i.e. lot of objects should die between two minor GC).
9. Throughput (which is time NOT spent on GC) is inversely proportion to amount of memory. Higher the memory for JVM, more time for GC meaning low throughput.
10. Unless you have problems with pauses (time when application becomes unresponsive because garbage collection is occurring), try granting as much memory as possible to VM (128 to 512 is good start and fine tune as per load testing results)
.
How to find JDK version used by Apache/Jserv (JVM) in 11i ?
In context file search for parameter like s_jdktop
<JDK_TOP oa_var=”s_jdktop”>/oracle/apps/11i/vis11icomn/util/java/1.4/j2sdk1.4.2_04</JDK_TOP>
Where is JVM log location in 11i ?
$IAS_ORACLE_HOME/ Apache/ Jserv/ logs/ jvm/ OACoreGroup.0.stdout  (GC output)
$IAS_ORACLE_HOME/ Apache/ Jserv/ logs/ jvm/ OACoreGroup.0.stderr  (JVM Error)
.
How to read GC (JVM stdout) file ?
Example of JVM out file to understand Garbage Collection in 11i
3824.164: [GC 196725K->141181K(209864K), 0.3295949 secs]
3840.734: [GC 207741K->150466K(217032K), 0.3168890 secs]
3841.051: [Full GC 150466K->87061K(217032K), 3.2626248 secs]
3854.717: [GC 155413K->97857K(215568K), 0.2732267 secs]
3874.714: [GC 166209K->109946K(215568K), 0.3498301 secs]

1. Line 1,2 4 and 5 are example of Minor Collection
2. Line 3 (Full GC) is example of Major Collection
3. First entry in each line is time in seconds since JVM started, To find out time between two GC (Garbage Collection) just subtract second entry from first i.e. (3840.734 – 3824.164 = 16.57 seconds)
4. 196725K->141181K in first line indicates combined size of live objects before and after Garbage Collection (GC)
5. (209864K) in first line in parenthesis, represents object after minor collection that aren’t necessarily alive but can’t be reclaimed, either because they are directly alive, or because they are referenced from objects in tenured generation.
6. 0.3295949 secs in first line represents time taken to run minor collection.
7. Full GC in line three represents Full Garbage Collection or Major Collection

Tuesday, February 28, 2012

CUSTOM_TOP (JPL_TOP) Creation Steps in Oracle Apps (R12)

CUSTOM_TOP (JPL_TOP) Creation Steps in Oracle Apps (R12)
STEP 1:
This document gives the clear steps to create the JPL_TOP (CUSTOM_TOP) in R12 Oracle Application.  The following need to be created in R12 Oracle Application for JPL_TOP (CUSTOM_TOP).
SCHEMA NAME:       JPL
TOP NAME:                 JPL_TOP
Application:                  JPL Custom Application
Data Group:                 JPL Group
Request Group:             JPL Request Group
Menu:                            JPL_CUSTOM_MENU
Responsibility:               JPL Custom

STEP 2:
Make the directory structure for your JPL_TOP (CUSTOM_TOP) custom application files.

i)                   Login as user applmgr in linux,
ii)                Write a shell script program with following lines for directory creation,
[applmgr@jpl shell_script]$ vi jpl_top_creation.sh
cd $APPL_TOP
mkdir jpl
mkdir jpl/12.0.0
mkdir jpl/12.0.0/admin
mkdir jpl/12.0.0/admin/sql
mkdir jpl/12.0.0/admin/odf
mkdir jpl/12.0.0/sql
mkdir jpl/12.0.0/bin
mkdir jpl/12.0.0/reports
mkdir jpl/12.0.0/reports/US
mkdir jpl/12.0.0/forms
mkdir jpl/12.0.0/forms/US
mkdir jpl/12.0.0/lib
mkdir jpl/12.0.0/out
mkdir jpl/12.0.0/log


Run the Shell script program as following,
[applmgr@jpl shell_script]$ jpl_top_creation.sh
Now the directory structure was created by the above shell script program.
Screenshot:
STEP 3:
Put the Entry for JPL_TOP (CUSTOM_TOP) in $CONTEXT_FILE as following,
[applmgr@jpl appl]$ echo $CONTEXT_FILE
/u01/oracle/VIS/inst/apps/VIS_jpl/appl/admin/VIS_jpl.xml
[applmgr@jpl appl]$ vi $CONTEXT_FILE

Put the Entry as following  and Save the $CONTEXT_FILE,
<AU_TOP oa_var="s_autop" oa_type="PROD_TOP" oa_enabled="FALSE">/u01/oracle/VIS/apps/apps_st/appl/au/12.0.0</AU_TOP>
<JPL_TOP oa_var="s_jpltop" oa_type="PROD_TOP" oa_enabled="FALSE">/u01/oracle/VIS/apps/apps_st/appl/jpl/12.0.0</JPL_TOP>
Screenshot:
STEP4:
Stop all middle tier services in R12 Oracle Application.
[applmgr@jpl appl]$ cd $ADMIN_SCRIPTS_HOME
[applmgr@jpl scripts]$ adstpall.sh  apps/apps
Database and Listener should be in up status, then Run the Autoconfig as following,
[applmgr@jpl appl]$ cd $ADMIN_SCRIPTS_HOME
[applmgr@jpl scripts]$ adautocfg.sh  apps/apps





Screenshot:
Once this autoconfig completed successfully we need to check whether environment variable set correctly for $JPL_TOP.  Open the new terminal and check the $JPL_TOP (CUSTOM_TOP) as following,
[oracle@jpl ~]$ su - applmgr
Password:
[applmgr@jpl ~]$ echo $JPL_TOP
/u01/oracle/VIS/apps/apps_st/appl/jpl/12.0.0
After this, Start all middle tier services by executing following,
[applmgr@jpl appl]$ cd $ADMIN_SCRIPTS_HOME
[applmgr@jpl scripts]$ adstrtal.sh  apps/apps
STEP5:
Create Tablespace for JPL_TOP  through sqlplus as sys user  by following,
SQL> create tablespace JPL datafile '/u01/oracle/VIS/db/apps_st/data/JPL01.dbf' size 500M;
Tablespace created.
STEP6:
Create new Database user for JPL_TOP through sqlplus as sys user by following,
SQL> create user JPL identified by jpl default tablespace JPL temporary tablespace temp1 quota unlimited on JPL;
User created.
Grant the following privileges to JPL user,
SQL> grant connect, resource to JPL;
Grant succeeded.
Connect the JPL user and check the User as following,
SQL> connect jpl/jpl
Connected.
STEP7:
Oracle database user need to be registered in Oracle Application, do the following for Oracle database user Registration,
Naviate to Security-->Oracle-->Register
Database User Name = JPL
Password = JPL
Privilege = Enabled
Install Group = 0
Description = JPL Custom Application User

Screenshot:
STEP8:
Oracle Schema need to be registered in Oracle Application, do the following for Schema Registration,
Login to Applications with System Administrator responsibility
Navigate to Application-->Register
Application = JPL Custom Application
Short Name = JPL
Basepath = JPL_TOP
Description = JPL Custom Application








Screenshot:
STEP9:
Add Application to a Data Group as following,

Navigate to Security-->Oracle-->DataGroup

Data Group = JPL Group
Description = JPL Custom Data Group
Click on "Copy Applications from" and pick Standard data Group, then add the following entry.
Application = JPL Custom Application
Oracle ID = APPS
Description = JPL Custom Application





Screenshot:
STEP10:
Create custom request group.
This will act as a placeholder for any custom reports we wish to make available for the Custom Responsibility.
Navigate to Security-->responsbility-->Request

Group = JPL Request Group
Application = JPL Custom
Code = JPL
Description = JPL Custom Requests

We will not define any requests to add to the group at this stage, but you can add some now if required.

Screenshot:
STEP11:
Create custom menu.
This will act as a placeholder for any menu items we wish to make available for the Custom Responsibility. We will create two menus, one for Core Applications and one for Self Service.
Navigate to Application-->Menu

Menu = JPL_CUSTOM_MENU
User Menu Name = JPL Custom Application
Menu Type =
Description = JPL Custom Application Menu

Seq = 10
Prompt = Submit Concurrent
Submenu = Concurrent
Function =
Description = Submit Concurrent


Seq = 20
Prompt = Concurrent
Submenu = Concurrent Menu - Application Developer GUI
Function =
Description = Concurrent

Screenshot:

**********************************************************Menu = JPL_CUSTOM_MENU_SSWA
User Menu Name = JPL Custom Application SSWA
Menu Type =
Description = JPL Custom Application Menu for SSWA
Seq = 10
Prompt = Oracle Application Manager
Submenu =  OAM Workflow Manager
Function =
Description =
Screenshot:

STEP12:
Create new responsibility. One for Core Applications and One for Self Service (SSWA)
Navigate to Security-->Responsibility-->Define

Responsibility Name = JPL Custom
Application = JPL Custom
Responsibility Key = JPLCUSTOM
Description = JPL Custom Responsibility
Available From = Oracle Applications
Data Group Name = JPL Group
Data Group Application = JPL Custom
Menu = JPL Custom Application
Request Group Name = JPL Request Group



Screenshot:

Responsibility Name = JPL Custom SSWA
Application = JPL Custom
Responsibility Key = JPLCUSTOMSSWA
Description = JPL Custom Responsibility SSWA
Available From = Oracle Self Service Web Applications
Data Group Name = JPL Group
Data Group Application = JPL Custom
Menu = JPL Custom Application SSWA
Request Group Name = JPL Request Group





Screenshot:
STEP13:
Now you can add responsibility to user

Navigate to Security-->User-->Define









Screenshot:
Add JPL Custom responsibility to users as required.

STEP14:
Other considerations:
You are now ready to create your database Objects, custom Reports, Forms, Packages, etc.

Create the source code files in the JPL_TOP directory appropriate for the type of object. For example forms would be located in $JPL_TOP/forms/US or package source code in $JPL_TOP/admin/sql
For example,
Database Objects, such as tables, indexes and sequences should be created in the JPL schema, and then you need to

a) Grant all privilege from each custom data object to the APPS schema.
For example:
login as JPL user
grant all privileges on myTable to apps;
b) Create a synonym in APPS for each custom data object
For example:
login as APPS user
create synonym myTable for JPL.myTable;



**********************************************************************************************************************
Author
J. Lingesan
**********************************************************************************************************************

Steps to recover Applications context file if it is corrupted or deleted accidentally

The Applications context file can be retrieved by running the adclonectx.pl script.
To retrieve the Applications tier context file,

  • perl /clone/bin/adclonectx.pl retrieve
  • On being prompted for the context file to be retrieved, select the option of retrieving the
          Applications tier context file that has been lost and retrieve it to the default location specified
          by the script.
The above command can be used only when INST_TOP the is still intact. In case that has also been lost
accidentally, the Applications tier context file may be retrieved as follows:
  • Execute the following command on the Database tier: perl /appsutil/clone/bin/adclonectx.pl retrieve
  • On being prompted for the context file to be retrieved, select the option of retrieving the
          Applications tier context file that has been lost.
  • While confirming the location for the context file, set it to any existing directory with write permission.
  • Once the context file has been generated in the specified location, move it to the location specified
          for the context file in the context variable 's_contextfile'.
To retrieve the Database tier context file,
  • Execute the following command on the Database tier: perl /appsutil/clone/bin/adclonectx.pl retrieve
  • On being prompted for the context file to be retrieved, select the Database tier context file and
          retrieve it to the default location specified by the script.

Monday, May 30, 2011

Order Management Tables.

Order Management Tables. Entered
oe_order_headers_all 1 record created in header table
oe_order_lines_all Lines for particular records
oe_price_adjustments When discount gets applied
oe_order_price_attribs If line has price attributes then populated
oe_order_holds_all If any hold applied for order like credit check etc.
Booked
oe_order_headers_all Booked_flag=Y Order booked.
wsh_delivery_details Released_status Ready to release
Pick Released
wsh_delivery_details Released_status=Y Released to Warehouse (Line has been released to Inventory for processing)
wsh_picking_batches After batch is created for pick release.
mtl_reservations This is only soft reservations. No physical movement of stock
Full Transaction
mtl_material_transactions No records in mtl_material_transactions
mtl_txn_request_headers
mtl_txn_request_lines
wsh_delivery_details Released to warehouse.
wsh_new_deliveries if Auto-Create is Yes then data populated.
wsh_delivery_assignments deliveries get assigned
Pick Confirmed
wsh_delivery_details Released_status=Y Hard Reservations. Picked the stock. Physical movement of stock
Ship Confirmed
wsh_delivery_details Released_status=C Y To C:Shipped ;Delivery Note get printed Delivery assigned to trip stopquantity will be decreased from staged
mtl_material_transactions On the ship confirm form, check Ship all box
wsh_new_deliveries If Defer Interface is checked I.e its deferred then OM & inventory not updated. If Defer Interface is not checked.: Shipped
oe_order_lines_all Shipped_quantity get populated.
wsh_delivery_legs 1 leg is called as 1 trip.1 Pickup & drop up stop for each trip.
oe_order_headers_all If all the lines get shipped then only flag N
Autoinvoice
wsh_delivery_details Released_status=I Need to run workflow background process.
ra_interface_lines_all Data will be populated after wkfw process.
ra_customer_trx_all After running Autoinvoice Master Program for
ra_customer_trx_lines_all specific batch transaction tables get populated
Price Details
qp_list_headers_b To Get Item Price Details.
qp_list_lines
Items On Hand Qty
mtl_onhand_quantities TO check On Hand Qty Items.

Payment Terms
ra_terms Payment terms

AutoMatic Numbering System
ar_system_parametes_all you can chk Automactic Numbering is enabled/disabled.
Customer Information
hz_parties Get Customer information include name,contacts,Address and Phone
hz_party_sites
hz_locations
hz_cust_accounts
hz_cust_account_sites_all
hz_cust_site_uses_all
ra_customers
Document Sequence
fnd_document_sequences Document Sequence Numbers
fnd_doc_sequence_categories
fnd_doc_sequence_assignments
Default rules for Price List
oe_def_attr_def_rules Price List Default Rules
oe_def_attr_condns
ak_object_attributes
End User Details
csi_t_party_details To capture End user Details

Sales Credit Sales Credit Information(How much credit can get)
oe_sales_credits

Attaching Documents
fnd_attached_documents Attched Documents and Text information
fnd_documents_tl
fnd_documents_short_text

Blanket Sales Order
oe_blanket_headers_all Blanket Sales Order Information.
oe_blanket_lines_all

Processing Constraints
oe_pc_assignments Sales order Shipment schedule Processing Constratins
oe_pc_exclusions
Sales Order Holds
oe_hold_definitions Order Hold and Managing Details.
oe_hold_authorizations
oe_hold_sources_all
oe_order_holds_all

Hold Relaese
oe_hold_releases_all Hold released Sales Order.

Credit Chk Details
oe_credit_check_rules To get the Credit Check Againt Customer.
Cancel Orders
oe_order_lines_all Cancel Order Details.

Thursday, April 14, 2011

Understanding data flow for “Standard Order”

Normally standard sales order can be split into nine sub steps , which jointly carried out by some module like INV,OM, Pricing, Shipping and AR. Lets take each sub steps with data flow conditions. These are based out of the flow which is available in 11.5.10.2.
1. Order Entry
This is first stage when Order in enter in system.When the order is entered it basically create a record in order headers and Order Lines table.
  • oe_order_headers_all (Here the flow_status_code as entered)
  • oe_order_lines_all (flow_status_code as entered) ( order number is generated)
    dataflow
2.Order Booking
This is next stage , when Order which is entered in step 1 is booked and Flow status changed from Entered to Booked.At this stage , these table get affected.
  • oe_order_headers_all (flow_status_code as booked ,booked_flag updated)
  • oe_order_lines_all (flow_status_code as awaiting shipping, booked_flag updated)
  • wsh_new_deliveries (status_code OP open)
  • wsh_delivery_details (released_status ‘R’ ready to release)
Same time, Demand interface program runs in background And insert into inventory tables mtl_demand
3. Reservation
This step is required for doing reservations SCHEDULE ORDER PROGRAM runs in the background and quantities are reserved.Once this program get successfully get completed , the mtl_reservations table get updated.
4. Pick Release
Ideally pick release is the process which is defined in which the items on the sales order are taken out from inventory.
Normally pick release SRS program runs in background . Once the program get completed these are the table get affected:
  • oe_order_lines_all (flow_status_code ‘PICKED’ )
  • wsh_delivery_details (released_status ‘S’ ‘submitted for release’ )
  • mtl_txn_request_headers
  • mtl_txn_request_lines
    (move order tables.Here request is generated to move item from saleble to staging sub inventory)
  • Mtl_material_transactions_temp (link to above tables through move_order_header_id/line_id
5.Pick Confirm
Items are transferred from saleble to staging Subinventory.
  • mtl_material_transactions
  • mtl_transaction_accounts
  • wsh_delivery_details (released_status ‘Y’‘Released’ )
  • wsh_delivery_assignments
6.Ship Confirm
Here ship confirm interface program runs in background . Data removed from wsh_new_deliveries
  • oe_order_lines_all (flow_status_code ‘shipped’)
  • wsh_delivery_details (released_status ‘C’ ‘Shipped’)
  • mtl_transaction_interface
  • mtl_material_transactions(linked through Transaction source header id)
  • mtl_transaction_accounts
  • Data deleted from mtl_demand,mtl_reservations
  • Item deducted from mtl_onhand_quantities
7.Enter Invoice
This is also called Receivables interface, that mean information moved to accounting area for invoicing details.
  • Invoicing workflow activity transfers shipped item information to Oracle Receivables.
  • ra_interface_lines_all (interface table into which the data is transferred from order management)T
  • Then Autoinvoice program imports data from this
  • Table which get affected into this stage are recievables base table.
    • ra_customer_trx_all (cust_trx_id is primary key to link it to trx_lines table and trx_number is the invoice number)
    • ra_customer_trx_lines_all (line_attribute_1 and line_attribute_6 are linked to header_id (or order number) and line_id of the orders)
8.Complete Line
In this stage order line leval table get updated with Flow status and open flag.
  • oe_order_lines_all (flow_status_code ‘shipped’, open_flag “N”)
9.Close Order
This is last step of Order Processing . In this stage only oe_order_lines_all table get updated.
These are the table get affected in this step.
  • oe_order_lines_all (flow_status_code ‘closed’,open_flag “N”)
These are the typically data flow of a order to cash model for a standard order.

Tuesday, April 5, 2011

Welcome to R12 Account Payable

As we learnt during Release 12, the E-Business Suite has couple of new products like Subledger Accounting, E-Business Tax thus significant changes have been observed in Account Payable data module as some of functionality is shared by some other products. Thus it is important to understand what is new. I would like to briefly outline the details of some of new changes and underlying impact on the objects. More details can be found in R12 release documents published by Oracle a month ago.
Let’s have a dissection view of R12 payable, with some of its core objects
Supplier
We have seen in 11i
  • Suppliers defined in AP.
  • Supplier contacts replicated for each supplier site.
Where as in R12
  • Supplier becomes as TCA Party.
  • Suppliers Sites as TCA Party Site for each distinct address.
  • Contacts for each supplier/address , it means Single supplier address and contact can be leveraged by multiple sites, for each OU
    • A single change to an address can be seen instantly by all OUs
    • No longer need to manually 'push' updates across OUs.This can be best understood by the figure below.
SuppliersContact
Then the question is what will happen if any one can come from existing financial products. The Impact from upgrade can summarize as:
1. When we upgrade supplier tables replaced with backward compatible views.
2. One party site for each distinct supplier site address
Country and address line1 are required, this is because creation of suppliers in Party in TCA data model would requires Country and address information, but it also understood if there is no country or address line 1 specified for a supplier site in cases when upgrades takes place, Payables derives the country based on the most frequently used operating unit of the Supplier's historical transactions.
3. Employee as suppliers: address NOT migrated to party site in TCA remains in Oracle HR for data security reasons.
As we know in 11i employees are part of internal supplier's record in order for Oracle Payables to create payments for their expense reports. Employees defined in Oracle Human Resources and associated with an Oracle Payables supplier record have existing party information. During the upgrade, Oracle Payables updates the existing party information to have a party usage of supplier but it does not migrate the employee address to the party site in TCA, they remain in Oracle Human Resources for data security reasons.
4. Utilize TCA Party relationships for franchise or subsidiary and its parent company.
Invoice
Till 11i version, we have seen invoices:
  • Had only distributions line.
  • Allocation of freight and special charges are captured at the distribution level only
  • Tax and payment and Project accounting Payment was captured through global Descriptive Flexfields.
But in R12,
1. Invoice Lines as a new additional line accommodated in Invoice data model.
12RInvoice
Because of introduction of invoice line there is significant improvement of data flow with n other oracle modules like
  • Fixed Asset - Asset Tracking
  • Business Tax - Tax line
  • Payment - Payment
  • SubLedger Accounting - Accounting

2. Allocate freight and special charges are captured to the lines on the invoice
3. Invoice distributions created at the maximum level of detail similar to 11i.
4. Core functionality

The impact with Upgrade can be summarized as:
1. One invoice line for every distribution in 11i
2. Sub Ledger Accounting requires that Payables transform the invoice distributions to be stored at the maximum level of detail
3. Global Descriptive Flexfields migrated to named columns.
          That's means functional testing is more required while upgrade takes place.
Banks and Bank Details
Now a days corporate treasury role has been greatly enhanced thus picking up a global bank as partner for all banking need is demand of time in global working model. The recent couple of years have seen drastic increase in acquisition and merger of company thus global working as well as global instance get popularity in ERP areana, and this is one of reason of the reason bank data model has been significant changes from 11 to 11i and 11i to R12.
Internal Bank AccountsIn 11i we have seen internal Banks defined in AP and that is shared by AP/AR/CE, Payroll and Treasury and they are bank accounts often replicated in multiple OUs
Where as in R12,
  • Bank and Branch become part of TCA Parties.
  • Internal Bank Account in Cash Management which is owned by a Legal Entity. Here the Operating units have granted usage rights.
Suppliers Bank Accounts
In 11i
  • Banks/Branches defined in AP
  • Bank accounts often replicated in multiple OUs Before
R12
  • Suppliers, Banks and Branches are defined as Parties in TCA
  • Supplier (party's) payment information and all payment instruments (Bank Accounts, Credit Cards) moved into Oracle Payments.
The typical data model for bank can be summarized as:
R12BankDataModel
Impact of Upgrade
1. With Upgrade banks and branches migrated to TCA parties
2. Banks merged if the following attributes are all the same:

  • a. Bank Number
    b. Institution type
    c. Country
    d. Bank admin email
    e. Bank name alt
    f. Tax payer ID
    g. Tax reference number
    h. Description, Effective dates
3. Bank accounts, bank account uses are migrated into cash management.
4. Transactions are stamped with the bank account uses identifiers as part of the upgrade

 Integration with Oracle E-Business Tax
In 11i
  • Oracle standard functionality was based out of User which determines tax by assigning Tax Codes at line level of invoice and Tax rules was controlled at underline code.
  • There was global descriptive flex fields were captured for country-specific tax attributes.
  • More importanta most of the setup performed at OU level.
In R12
  • A new module eBusinessTax determines tax based on facts about each transaction, this is reason why Oracle has introduced additional line information at invoice level.
  • The module "ebusiness Tax" set and configure Tax rules which can be viewed
  • Tax attributes collected in fields on key entities
  • Configure tax rules once per regime and share with your legal entities
Impact of Upgrade
1. Payables Tax setup, Tax Code defaulting rules defined per OU are migrated to eBusiness Tax.
2. OUs migrated to tax content owner in R12
3. Tax information in tax codes are transformed to Regime-Rate flow.
4. E-Business Tax takes information from the AP invoice lines and creates summary and detail tax lines in the E-Business Tax repository.
Multi Org Access Control
MOAC is new enhancement to the Multiple Organizations feature of Oracle Applications.
This feature enables user to access data from one or many Operating Units while within a set given responsibility. Due to this change, all processing and some Reporting in Oracle Payables is available across Operating Units from a single Applications responsibility. Hence you can isolate your transaction data by Operating unit for security and local level compliance while still enabling shared Service centre processing.Data security is maintained using the Multiple Organizations Security Profile, defined in Oracle HRMS, which specifies a list of operating units and determines the data access privileges for a user.
Impact of UpgradeR12 Upgrade does not automatically create security profiles, thus is important if any one want to use Multiple Organizations Access Control, the first things is to define security profiles, then link them to respective responsibilities or users.