Saturday, July 31, 2021

FRM-92101 error when attempting to launch Forms

 

FRM-92101 error when attempting to launch Forms


When attempting to launch forms in self service, the following error occurs:

ERROR
FRM-92101: There was a failure in the Forms Server during startup.This could happen due to invalid configuration.
Please look into the web-server log file for details.





Cause and Solution: Missing below mentioned RPM. Please install the RPM and retest the issue.

openmotif21-2.1.30-8.i386.rpm

# rpm -ivh openmotif21-2.1.30-8.i386.rpm
warning: openmotif21-2.1.30-8.i386.rpm: Header V3 DSA/SHA1 Signature, key ID 73307de6: NOKEY
Preparing...                ########################################### [100%]
   1:openmotif21            ########################################### [100%]
[root@ebsapps RPMs]# 


Verified -

Successfull launch of Forms



[root@vvvvvv chitrap]# rpm -Uvh openmotif21-2.1.30-11.el7.i686.rpm
error: Failed dependencies:
        libXp.so.6 is needed by openmotif21-2.1.30-11.el7.i686

Installed:
  libXp.i686 0:1.0.2-2.1.el7

Complete!
[root@vvvvvv  chitrap]# rpm -Uvh openmotif21-2.1.30-11.el7.i686.rpm




Monday, July 26, 2021

Common Users & SYSDBA with #Oracle 12c Multitenancy

 

Common Users & SYSDBA with #Oracle 12c Multitenancy


Nice Explanation by - uhesse (URL)



In 12c multitenant database introduces the new This article shows simple use cases why DBAs may want to create common users – in contrast to the common users that are created automatically, like SYS, SYSTEM, MDSYS etc.

A typical requirement is to have a superuser other than SYS, but with the same power. Like the common user C##_SYS 

Or suppose we have many pluggable databases (PDBs) and different superusers responsible for different PDBs like C##_ADMIN1 and C##_ADMIN2:

Let’s implement it as above. Initially, my demo environment looks like this:

 

SQL> select name,open_mode,con_id from v$pdbs;

NAME                           OPEN_MODE      CON_ID
------------------------------ ---------- ----------
PDB$SEED                       READ ONLY           2
PDB1                           READ WRITE          3
PDB2                           READ WRITE          4
PDB3                           READ WRITE          5

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM     CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS                            TRUE  TRUE  FALSE FALSE FALSE FALSE          0
SYSDG                          FALSE FALSE FALSE FALSE TRUE  FALSE          1
SYSBACKUP                      FALSE FALSE FALSE TRUE  FALSE FALSE          1
SYSKM                          FALSE FALSE FALSE FALSE FALSE TRUE           1

At first, I create C##_SYS and grant SYSDBA as a common privilege to that new user:

SQL> create user c##_sys identified by oracle container=all;

User created.

SQL> grant sysdba to c##_sys container=all;

Grant succeeded.

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM     CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS                            TRUE  TRUE  FALSE FALSE FALSE FALSE          0
SYSDG                          FALSE FALSE FALSE FALSE TRUE  FALSE          1
SYSBACKUP                      FALSE FALSE FALSE TRUE  FALSE FALSE          1
SYSKM                          FALSE FALSE FALSE FALSE FALSE TRUE           1
C##_SYS                        TRUE  FALSE FALSE FALSE FALSE FALSE          0

C##_SYS can now do anything to any PDB:

SQL> connect c##_sys/oracle@edd2r6p0/pdb1 as sysdba
Connected.
SQL> shutdown immediate
Pluggable Database closed.
SQL> connect / as sysdba
Connected.
SQL> select name,open_mode,con_id from v$pdbs;

NAME                           OPEN_MODE      CON_ID
------------------------------ ---------- ----------
PDB$SEED                       READ ONLY           2
PDB1                           MOUNTED             3
PDB2                           READ WRITE          4
PDB3                           READ WRITE          5

SQL> connect c##_sys/oracle@edd2r6p0/pdb1 as sysdba
Connected.
SQL> startup
Pluggable Database opened.
SQL> connect / as sysdba
Connected.
SQL> select name,open_mode,con_id from v$pdbs;

NAME                           OPEN_MODE      CON_ID
------------------------------ ---------- ----------
PDB$SEED                       READ ONLY           2
PDB1                           READ WRITE          3
PDB2                           READ WRITE          4
PDB3                           READ WRITE          5

Notice that there is a subtle difference in granting SYSDBA of the container database (CDB) as local or common privilege:

SQL> revoke sysdba from c##_sys container=all;

Revoke succeeded.

SQL> grant sysdba to c##_sys;

Grant succeeded.

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM     CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS                            TRUE  TRUE  FALSE FALSE FALSE FALSE          0
SYSDG                          FALSE FALSE FALSE FALSE TRUE  FALSE          1
SYSBACKUP                      FALSE FALSE FALSE TRUE  FALSE FALSE          1
SYSKM                          FALSE FALSE FALSE FALSE FALSE TRUE           1
C##_SYS                        TRUE  FALSE FALSE FALSE FALSE FALSE          1

SQL> connect c##_sys/oracle@edd2r6p0/pdb1 as sysdba
ERROR:
ORA-01031: insufficient privileges


Warning: You are no longer connected to ORACLE.

C##_SYS has SYSDBA of the CDB “only”, therefore the error. Although:

SQL> connect c##_sys/oracle as sysdba
Connected.
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=pdb1;

Session altered.

SQL> shutdown immediate
Pluggable Database closed.
SQL> show con_name

CON_NAME
------------------------------
PDB1
SQL> startup
Pluggable Database opened.
SQL> connect c##_sys/oracle as sysdba
Connected.
SQL> select name,open_mode,con_id from v$pdbs;

NAME                           OPEN_MODE      CON_ID
------------------------------ ---------- ----------
PDB$SEED                       READ ONLY           2
PDB1                           READ WRITE          3
PDB2                           READ WRITE          4
PDB3                           READ WRITE          5

However, the proper way is probably granting it as a common privilege:

SQL> revoke sysdba from c##_sys;

Revoke succeeded.

SQL> grant sysdba to c##_sys container=all;

Grant succeeded.

Now to the implementation of C##_ADMIN1 and C##_ADMIN2. The point is here, that SYSDBA can be granted as a local privilege for certain PDBs only, to the effect that different superusers can be responsible for different groups of PDBs:

SQL> create user c##_admin1 identified by oracle container=all;

User created.

SQL> alter session set container=pdb1;

Session altered.

SQL> grant sysdba to c##_admin1 container=current;

Grant succeeded.

SQL> connect / as sysdba
Connected.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM     CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS                            TRUE  TRUE  FALSE FALSE FALSE FALSE          0
SYSDG                          FALSE FALSE FALSE FALSE TRUE  FALSE          1
SYSBACKUP                      FALSE FALSE FALSE TRUE  FALSE FALSE          1
SYSKM                          FALSE FALSE FALSE FALSE FALSE TRUE           1
C##_SYS                        TRUE  FALSE FALSE FALSE FALSE FALSE          0
C##_ADMIN1                     TRUE  FALSE FALSE FALSE FALSE FALSE          3

6 rows selected.

For now, C##_ADMIN1 can only connect to PDB1:

SQL> connect c##_admin1/oracle@edd2r6p0/pdb1 as sysdba
Connected.
SQL> select count(*) from session_privs;

  COUNT(*)
----------
       233

SQL> connect c##_admin1/oracle@edd2r6p0/pdb2 as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.

The completed implementation of the picture above:

SQL> connect / as sysdba
Connected.
SQL> alter session set container=pdb2;

Session altered.

SQL> grant sysdba to c##_admin1 container=current;

Grant succeeded.

SQL> connect / as sysdba
Connected.
SQL> create user c##_admin2 identified by oracle;

User created.

SQL> alter session set container=pdb3;

Session altered.

SQL> grant sysdba to c##_admin2 container=current;

Grant succeeded.

SQL> connect / as sysdba
Connected.
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM     CON_ID
------------------------------ ----- ----- ----- ----- ----- ----- ----------
SYS                            TRUE  TRUE  FALSE FALSE FALSE FALSE          0
SYSDG                          FALSE FALSE FALSE FALSE TRUE  FALSE          1
SYSBACKUP                      FALSE FALSE FALSE TRUE  FALSE FALSE          1
SYSKM                          FALSE FALSE FALSE FALSE FALSE TRUE           1
C##_SYS                        TRUE  FALSE FALSE FALSE FALSE FALSE          0
C##_ADMIN1                     TRUE  FALSE FALSE FALSE FALSE FALSE          3
C##_ADMIN1                     TRUE  FALSE FALSE FALSE FALSE FALSE          4
C##_ADMIN2                     TRUE  FALSE FALSE FALSE FALSE FALSE          5

8 rows selected.

Friday, July 16, 2021

Database Slowness Check

 Slowness and Report  to check whats happening in the database 


@dbreport_check.sql


set serveroutput on
declare
cursor c1 is select version
from v$instance;
cursor c2 is
    select
          host_name
       ,  instance_name
       ,  to_char(sysdate, 'HH24:MI:SS DD-MON-YY') currtime
       ,  to_char(startup_time, 'HH24:MI:SS DD-MON-YY') starttime
     from v$instance;
cursor c4 is
select * from (SELECT count(*) cnt, substr(event,1,50) event
FROM v$session_wait
WHERE wait_time = 0
AND event NOT IN ('smon timer','pipe get','wakeup time manager','pmon timer','rdbms ipc message',
'SQL*Net message from client')
GROUP BY event
ORDER BY 1 DESC) where rownum <6;
cursor c5 is
select round(sum(value)/1048576) as sgasize from v$sga;
cursor c6 is select round(sum(bytes)/1048576) as dbsize
from v$datafile;
cursor c7 is select 'top physical i/o process' category, sid,
       username, total_user_io amt_used,
       round(100 * total_user_io/total_io,2) pct_used
from (select b.sid sid, nvl(b.username, p.name) username,
             sum(value) total_user_io
      from v$statname c, v$sesstat a,
           v$session b, v$bgprocess p
      where a.statistic# = c.statistic#
      and p.paddr (+) = b.paddr
      and b.sid = a.sid
      and c.name in ('physical reads', 'physical writes',
                     'physical reads direct',
                     'physical reads direct (lob)',
                     'physical writes direct',
                     'physical writes direct (lob)')
      and b.username not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
      group by b.sid, nvl(b.username, p.name)
      order by 3 desc),
     (select sum(value) total_io
      from v$statname c, v$sesstat a
      where a.statistic# = c.statistic#
      and c.name in ('physical reads', 'physical writes',
                       'physical reads direct',
                       'physical reads direct (lob)',
                       'physical writes direct',
                       'physical writes direct (lob)'))
where rownum < 2
union all
select 'top logical i/o process', sid, username,
       total_user_io amt_used,
       round(100 * total_user_io/total_io,2) pct_used
from (select b.sid sid, nvl(b.username, p.name) username,
             sum(value) total_user_io
      from v$statname c, v$sesstat a,
           v$session b, v$bgprocess p
      where a.statistic# = c.statistic#
      and p.paddr (+) = b.paddr
      and b.sid = a.sid
      and c.name in ('consistent gets', 'db block gets')
      and b.username not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
      group by b.sid, nvl(b.username, p.name)
      order by 3 desc),
     (select sum(value) total_io
      from v$statname c, v$sesstat a,
           v$session b, v$bgprocess p
      where a.statistic# = c.statistic#
      and p.paddr (+) = b.paddr
 and b.sid = a.sid
      and c.name in ('consistent gets', 'db block gets'))
where rownum < 2
union all
select 'top memory process', sid,
       username, total_user_mem,
       round(100 * total_user_mem/total_mem,2)
from (select b.sid sid, nvl(b.username, p.name) username,
             sum(value) total_user_mem
      from v$statname c, v$sesstat a,
           v$session b, v$bgprocess p
      where a.statistic# = c.statistic#
      and p.paddr (+) = b.paddr
      and b.sid = a.sid
      and c.name in ('session pga memory', 'session uga memory')
      and b.username not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
      group by b.sid, nvl(b.username, p.name)
      order by 3 desc),
     (select sum(value) total_mem
      from v$statname c, v$sesstat a
      where a.statistic# = c.statistic#
      and c.name in ('session pga memory', 'session uga memory'))
where rownum < 2
union all
select 'top cpu process', sid, username,
       total_user_cpu,
       round(100 * total_user_cpu/greatest(total_cpu,1),2)
from (select b.sid sid, nvl(b.username, p.name) username,
             sum(value) total_user_cpu
      from v$statname c, v$sesstat a,
           v$session b, v$bgprocess p
      where a.statistic# = c.statistic#
      and p.paddr (+) = b.paddr
      and b.sid = a.sid
      and c.name = 'CPU used by this session'
      and b.username not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
      group by b.sid, nvl(b.username, p.name)
      order by 3 desc),
     (select sum(value) total_cpu
      from v$statname c, v$sesstat a,
           v$session b, v$bgprocess p
      where a.statistic# = c.statistic#
      and p.paddr (+) = b.paddr
      and b.sid = a.sid
      and c.name = 'CPU used by this session')
where rownum < 2;


cursor c8 is select username, sum(VALUE/100) cpu_usage_sec
from v$session ss, v$sesstat se, v$statname sn
where se.statistic# = sn.statistic#
and name like '%CPU used by this session%'
and se.sid = ss.sid
and username is not null
and username not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
group by username
order by 2 desc;
begin
dbms_output.put_line ('Database Version');
dbms_output.put_line ('-----------------');
for rec in c1
loop
dbms_output.put_line(rec.version);
end loop;
dbms_output.put_line( chr(13) );
dbms_output.put_line('Hostname');
dbms_output.put_line ('----------');
for rec in c2
loop
     dbms_output.put_line(rec.host_name);
end loop;
dbms_output.put_line( chr(13) );
dbms_output.put_line('SGA Size (MB)');
dbms_output.put_line ('-------------');
for rec in c5
loop
     dbms_output.put_line(rec.sgasize);
end loop;
dbms_output.put_line( chr(13) );
dbms_output.put_line('Database Size (MB)');
dbms_output.put_line ('-----------------');
for rec in c6
loop
     dbms_output.put_line(rec.dbsize);
end loop;
dbms_output.put_line( chr(13) );
dbms_output.put_line('Instance start-up time');
dbms_output.put_line ('-----------------------');
for rec in c2 loop
 dbms_output.put_line( rec.starttime );
  end loop;
dbms_output.put_line( chr(13) );
  for b in
    (select total, active, inactive, system, killed
    from
       (select count(*) total from v$session)
     , (select count(*) system from v$session where username is null)
     , (select count(*) active from v$session where status = 'ACTIVE' and username is not null)
 , (select count(*) inactive from v$session where status = 'INACTIVE')
     , (select count(*) killed from v$session where status = 'KILLED')) loop
dbms_output.put_line('Active Sessions');
dbms_output.put_line ('---------------');
dbms_output.put_line(b.total || ' sessions: ' || b.inactive || ' inactive,' || b.active || ' active, ' || b.system || ' system, ' || b.killed || ' killed ');
  end loop;
  dbms_output.put_line( chr(13) );
 dbms_output.put_line( 'Sessions Waiting' );
  dbms_output.put_line( chr(13) );
dbms_output.put_line('Count      Event Name');
dbms_output.put_line('-----      -----------------------------------------------------');
for rec in c4
loop
dbms_output.put_line(rec.cnt||'          '||rec.event);
end loop;
dbms_output.put_line( chr(13) );
dbms_output.put_line('-----      -----------------------------------------------------');
dbms_output.put_line('TOP Physical i/o, logical i/o, memory and CPU processes');
dbms_output.put_line ('---------------');
for rec in c7
loop
dbms_output.put_line (rec.category||': SID '||rec.sid||' User : '||rec.username||': Amount used : '||rec.amt_used||': Percent used: '||rec.pct_used);
end loop;

dbms_output.put_line('------------------------------------------------------------------');

dbms_output.put_line('TOP CPU users by usage');
dbms_output.put_line ('---------------');
for rec in c8
loop

dbms_output.put_line (rec.username||'--'||rec.cpu_usage_sec);
dbms_output.put_line ('---------------');
end loop;

end;

OUTPUT 



Database Version
-----------------
19.0.0.0.0

Hostname
----------
TESTSERVER

SGA Size (MB)
-------------
37376

Database Size (MB)
-----------------
1627220

Instance start-up time
-----------------------
07:56:44 15-JUN-21

Active Sessions
---------------
90 sessions: 2 inactive,2 active, 86 system, 0 killed

Sessions Waiting

Count      Event Name
-----      -----------------------------------------------------
31          Space Manager: slave idle wait
4          class slave wait
2          LGWR worker group idle
2          DIAG idle wait
2          watchdog main loop

-----      -----------------------------------------------------
TOP Physical i/o, logical i/o, memory and CPU processes
---------------
top physical i/o process: SID 2278 User : APPS: Amount used : 38: Percent used:
0
top logical i/o process: SID 1991 User : APPS: Amount used : 39335: Percent
used: .13
top memory process: SID 2278 User : APPS: Amount used : 8156296: Percent used:
1.03
top cpu process: SID 1991 User : APPS: Amount used : 78: Percent used: 0
------------------------------------------------------------------
TOP CPU users by usage
---------------
APPS--1
---------------

PL/SQL procedure successfully completed.

Security- PROFILE CHECK in ORACLE DATABASE

 PROFILE CHECK in ORACLE DATABASE 

Useful script to check the Profile Settings in an Oracle Database .

@profile_check.sql

set linesize 132
set pagesize 999

col username for a23
col dba for a3
col status for a7
col default_tablespace for a20
col profile for a18
col pwd_verify format a20
col plt for a3
col fla for a3
col rum for a3
col pgt for a3
col pwd_lok for a7

with profile_detail as
(
select
dbp.profile,
dbp.resource_name,
decode(dbp.limit,'DEFAULT',def.limit,'NULL','','UNLIMITED','',dbp.limit) limit
from
dba_profiles dbp,
(
select
def.resource_name,
decode(def.limit,'NULL','','UNLIMITED','',def.limit) limit
from
dba_profiles def
where profile = 'DEFAULT'
) def
where 1=1
and dbp.resource_name = def.resource_name
order by 2,1
)
select
dbu.username,
decode(dba.grantee,null,'NO','YES') dba,
replace(
replace(
replace(
replace(dbu.account_status,'LOCKED','LOK'),
'EXPIRED','EXP'),
'(GRACE)','(GR)'),
' & ','&'
) status,
-- dbu.lock_date,
-- dbu.expiry_date,
-- dbu.default_tablespace,
dbu.profile,
pwd.limit "PWD_VERIFY",
plt.limit "PLT",
fla.limit "FLA",
rum.limit "RUM",
pgt.limit "PGT",
plk.limit "PWD_LOK"
from
dba_users dbu,
( select grantee from dba_role_privs where granted_role = 'DBA' ) dba,
profile_detail pwd,
profile_detail plt,
profile_detail fla,
profile_detail rum,
profile_detail pgt,
profile_detail plk
where 1=1
and pwd.profile=dbu.profile
and pwd.resource_name = 'PASSWORD_VERIFY_FUNCTION'
and plt.profile=dbu.profile
and plt.resource_name = 'PASSWORD_LIFE_TIME'
and fla.profile=dbu.profile
and fla.resource_name = 'FAILED_LOGIN_ATTEMPTS'
and rum.profile=dbu.profile
and rum.resource_name = 'PASSWORD_REUSE_MAX'
and pgt.profile=dbu.profile
and pgt.resource_name = 'PASSWORD_GRACE_TIME'
and plk.profile=dbu.profile
and plk.resource_name = 'PASSWORD_LOCK_TIME'
and dbu.username = dba.grantee(+)
order by 1
/

Thursday, July 15, 2021

How to find password of a User in Oracle Apps R12?

 How to find password of a User in Oracle Apps R12?

Decrypting User Password (ORACLE APPS R12)

In r12.2. Oracle seeded Procedure fnd_web_sec.get_guest_username_pwd which will help us to find out user password.

To achieve this you need to create a small package and run a query

--Package Specification


CREATE OR REPLACE PACKAGE get_pwd
AS
   FUNCTION decrypt (KEY IN VARCHAR2, VALUE IN VARCHAR2)
      RETURN VARCHAR2;
END get_pwd;
/


--Package Body



CREATE OR REPLACE PACKAGE BODY get_pwd
AS
   FUNCTION decrypt (KEY IN VARCHAR2, VALUE IN VARCHAR2)
      RETURN VARCHAR2
   AS
      LANGUAGE JAVA
      NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String';
END get_pwd;
/


--Query to execute

SELECT usr.user_name, get_pwd.decrypt ((SELECT (SELECT get_pwd.decrypt (fnd_web_sec.get_guest_username_pwd, usertable.encrypted_foundation_password ) FROM DUAL) AS apps_password FROM fnd_user usertable WHERE usertable.user_name = (SELECT SUBSTR (fnd_web_sec.get_guest_username_pwd, 1, INSTR (fnd_web_sec.get_guest_username_pwd, '/' ) - 1 ) FROM DUAL)), usr.encrypted_user_password ) PASSWORD FROM fnd_user usr WHERE usr.user_name = ':USER_NAME';

Error Notifications Received From IGS_PE_WF_GEN Workflows

 Error Notifications Received From IGS_PE_WF_GEN Workflow

We are frequently receiving error notifications like the ones mentioned below:

1. An Error occurred in the following Workflow.

Item Type = IGSPE002
Item Key = oracle.apps.ar.hz.PartySite.update29282
User Key =

Error Name = -6550
Error Message = ORA-06550: line 1, column 7:
PLS-00201: identifier 'IGS_PE_WF_GEN.ADDRESS_UPDATE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Error Stack =
Wf_Engine_Util.Function_Call(igs_pe_wf_gen.address_update, IGSPE002, oracle.apps.ar.hz.PartySite.update29282, 167520, RUN)

Activity Id = 167520
Activity Label = ADDR_UPDATE:ADDR_UPDATE_FUN
Result Code = #EXCEPTION
Notification Id =
Assigned User =

2. Wf_Engine_Util.Function_Call(igs_pe_wf_gen.address_create, IGSPE002, oracle.apps.ar.hz.PartySite.create22168, 167512, RUN)
ORA-06550: line 1, column 7:
PLS-00201: identifier 'IGS_PE_WF_GEN.ADDRESS_CREATE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Not using the IGS module so what is causing the errors?

CAUSE 

The IGS product (Oracle Student System) was deprecated and not included in APPS R12.

SOLUTION

Please disable the IGS Workflows.

To disable this Workflow:


Navigation: Workflow Administrator Web Applications > Business Events >

  1. query the Event named oracle.apps.ar.hz.PartySite.create
  2. click on the Update pencil icon and change the Status to Disabled
  3. click Apply, then Yes
  4. query the Event named oracle.apps.ar.hz.PartySite.create
  5. click on the Subscription icon
  6. for the Function named "WF_RULE.Default_Rule" click to pencil icon
  7. select Disabled from the List of Values
  8. click Apply button, then Yes
  9. Repeat these steps for the Event named "oracle.apps.ar.hz.PartySite.update"

To clean up the workflows:

1. To clean them up, the Workflows for them should be canceled.
2. When the Purge Obsolete Workflow Runtime Data request is run, it will purge the records once they are eligible to be purged.

For information on deleting the WF errors please read Doc ID 804622.1 - How to Purge WFERROR (System: Error) Workflow Items?


Architectural changes in Seed Data Tables with AD/TXK Delta 8

 Architectural changes in Seed Data Tables with AD/TXK Delta 8


What are the architectural changes in Seed Data Tables introduced with 

AD/TXK Delta 8


1) Starting with AD & TXK Delta 8, a new feature "Enhanced Seed Data Management" is introduced that greatly increases the speed and efficiency with which seed data is synchronized as part of an online patching cycle.

2) This is the Dual Row Set Seed Data Synchronization model.

3) With this change, the ZD_EDITION_NAME column for the Seed Data Tables will replaced by "SET1" or "SET2"

4) No additional storage is required, and seed data tables are upgraded on demand to the new architecture.

5) How are the SET1 & SET 2 created:

a) When a Seed Data Table is prepared during the apply phase of adop, SET1 is created and "V_YYYYMMDD_HHMM" is replaced.

b) When the same Seed Table is prepared in the next apply phase, SET2 is created.

6) Once you see SET1 & SET2 for Seed Tables, it indicates that the table is now fully migrated to dual row set model and only the delta (difference in rows) between SET1 & SET2 are synchronized in subsequent prepares of the table.

7) Useful query to identify the same:


select zd_edition_name, count(1) from <owner_name>.table_name group by zd_edition_name;


8) Once the table is converted to the Dual Row Set mode, a new column is seen "ZD_SYNC". This column indicates if the seed data sync was done successfully.


Doc id - 2283796.1