The 2009 conference is past, but the agenda is still available on the UKOUG webiste, and if you are a UKOUG member or attended the conference, you can download the presentations.I will be gave two new presentations that are on my website.
The Go-Faster Blog is mostly about performance measurement and optimisation.
It now also contains the posts from the PeopleSoft DBA Blog.
The 2009 conference is past, but the agenda is still available on the UKOUG webiste, and if you are a UKOUG member or attended the conference, you can download the presentations.AE_APPLID TEMPTBLINSTANCES ------------ ---------------- TL_PUB_TM1 5 TL_PUB_TM_AE 5
SELECT a.recname, a.ae_applid, b.ae_applid FROM psaeappltemptbl a FULL OUTER JOIN psaeappltemptbl b ON a.recname = b.recname AND b.ae_applid = 'TL_PUB_TM_AE' WHERE a.ae_applid = 'TL_PUB_TM1' ORDER BY 1 / RECNAME AE_APPLID AE_APPLID --------------- ------------ ------------ TL_PROF_LIST TL_PUB_TM1 TL_PROF_WRK TL_PUB_TM1 WRK_PROJ1_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ2_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ3_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ4_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ5_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ6_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ7_TAO TL_PUB_TM1 TL_PUB_TM_AE WRK_PROJ_TAO TL_PUB_TM1 TL_PUB_TM_AE
CREATE OR REPLACE VIEW gfc_aetemptbl_hier AS SELECT sup.ae_applid sup_applid, supa.temptblinstances sup_instances , sub.ae_applid sub_applid, suba.temptblinstances sub_instances , (SELECT COUNT(*) FROM psaeappltemptbl supc, psaeappltemptbl subc WHERE supc.ae_applid = sup.ae_applid AND subc.ae_applid = sub.ae_applid AND subc.recname = supc.recname) num_records FROM (SELECT DISTINCT ae_applid FROM psaeappltemptbl) sup , (SELECT DISTINCT ae_applid FROM psaeappltemptbl) sub , psaeappldefn supa , psaeappldefn suba WHERE sup.ae_applid != sub.ae_applid AND supa.ae_applid = sup.ae_applid AND suba.ae_applid = sub.ae_applid AND EXISTS( /*a temporary record in common*/ SELECT 'x' FROM psaeappltemptbl sup1 , psaeappltemptbl sub1 WHERE sub1.ae_applid = sub.ae_applid AND sup1.ae_applid = sup.ae_applid AND sup1.recname = sub1.recname AND ROWNUM = 1) /*there is no record in the subset that is not in the superset*/ AND NOT EXISTS( SELECT 'x' FROM psaeappltemptbl sub2 WHERE sub2.ae_applid = sub.ae_applid AND NOT EXISTS( SELECT 'x' FROM psaeappltemptbl sup2 WHERE sup2.ae_applid = sup.ae_applid AND sub2.recname = sup2.recname AND ROWNUM = 1) AND ROWNUM = 1) /*there is a record in the subset that is not in the subset - so there is a difference*/ AND EXISTS( SELECT 'x' FROM psaeappltemptbl sup2 WHERE sup2.ae_applid = sup.ae_applid AND NOT EXISTS( SELECT 'x' FROM psaeappltemptbl sub2 WHERE sub2.ae_applid = sub.ae_applid AND sup2.recname = sub2.recname AND ROWNUM = 1) AND ROWNUM = 1) ORDER BY 1,2;
SUP_APPLID SUP_INSTANCES SUB_APPLID SUB_INSTANCES NUM_RECORDS ------------ ------------- ------------ ------------- ----------- … TL_PUB_TM1 5 TL_PUB_TM_AE 5 8 TL_PUB_TM1 5 TL_PY_PUB_TM 5 5 TL_PUB_TM_AE 5 TL_PY_PUB_TM 5 5 …
CREATE OR REPLACE VIEW gfc_aetemptbl_eq AS SELECT sup.ae_applid sup_applid, supa.temptblinstances sup_instances , sub.ae_applid sub_applid, suba.temptblinstances sub_instances , (SELECT COUNT(*) FROM psaeappltemptbl supc, psaeappltemptbl subc WHERE supc.ae_applid = sup.ae_applid AND subc.ae_applid = sub.ae_applid AND subc.recname = supc.recname) num_records FROM (SELECT DISTINCT ae_applid FROM psaeappltemptbl) sup , (SELECT DISTINCT ae_applid FROM psaeappltemptbl) sub , psaeappldefn supa , psaeappldefn suba WHERE sup.ae_applid < ae_applid =" sup.ae_applid" ae_applid =" sub.ae_applid" ae_applid =" sub.ae_applid" ae_applid =" sup.ae_applid" recname =" sub1.recname" rownum =" 1)" ae_applid =" sub.ae_applid" ae_applid =" sup.ae_applid" recname =" sup2.recname" rownum =" 1)" rownum =" 1)" ae_applid =" sup.ae_applid" ae_applid =" sub.ae_applid" recname =" sub2.recname" rownum =" 1)" rownum =" 1)">
SUP_APPLID SUP_INSTANCES SUB_APPLID SUB_INSTANCES NUM_RECORDS ------------ ------------- ------------ ------------- ----------- … ELEC_TSCRPT 20 E_TSCRPT_BAT 20 2 ELEC_TSCRPT 20 E_TSCRPT_LIB 20 2 E_TSCRPT_BAT 20 E_TSCRPT_LIB 20 2 …
DECLARE l_any BOOLEAN; l_projectname VARCHAR2(30 CHAR) := 'GFC_TTI'; l_version_aem INTEGER; l_version_pjm INTEGER; PROCEDURE projitem(objecttype INTEGER ,objectid1 INTEGER ,objectvalue1 VARCHAR2) IS BEGIN INSERT INTO psprojectitem (projectname ,objecttype ,objectid1 ,objectvalue1 ,objectid2 ,objectvalue2 ,objectid3 ,objectvalue3 ,objectid4 ,objectvalue4 ,nodetype ,sourcestatus ,targetstatus ,upgradeaction ,takeaction ,copydone) VALUES (l_projectname,objecttype ,objectid1, objectvalue1, 0, ' ' , 0, ' ', 0, ' ' ,0,0,0,0,1,0); EXCEPTION WHEN dup_val_on_index THEN NULL; END; BEGIN UPDATE psversion SET version = version+1 WHERE objecttypename IN('SYS','AEM','PJM'); UPDATE pslock SET version = version+1 WHERE objecttypename IN('SYS','AEM','PJM'); SELECT version INTO l_version_aem FROM psversion WHERE objecttypename = 'AEM'; SELECT version INTO l_version_pjm FROM psversion WHERE objecttypename = 'PJM'; l_any := TRUE; WHILE l_any LOOP l_any := FALSE; FOR i IN( SELECT * FROM gfc_aetemptbl_hier a WHERE a.sub_instances > 0 AND NOT EXISTS( SELECT 'x' FROM gfc_aetemptbl_hier b WHERE b.sup_applid = a.sub_applid AND b.sub_instances > 0 AND ROWNUM = 1) ORDER BY 1 ) LOOP UPDATE psaeappldefn x SET temptblinstances = GREATEST(x.temptblinstances ,i.sub_instances,i.sup_instances) , version = l_version_aem , lastupddttm = SYSDATE WHERE ae_applid = i.sup_applid; projitem(33,66,i.sup_applid); UPDATE psaeappldefn x SET temptblinstances = 0 , version = l_version_aem , lastupddttm = SYSDATE WHERE ae_applid = i.sub_applid; projitem(33,66,i.sub_applid); l_any := TRUE; END LOOP; END LOOP; l_any := TRUE; WHILE l_any LOOP l_any := FALSE; FOR i IN( SELECT * FROM gfc_aetemptbl_eq a WHERE a.sub_instances > 0 AND NOT EXISTS( SELECT 'x' FROM gfc_aetemptbl_eq b WHERE b.sup_applid = a.sub_applid AND b.sub_instances > 0 AND ROWNUM = 1) ORDER BY 1 ) LOOP UPDATE psaeappldefn x SET temptblinstances = GREATEST(x.temptblinstances ,i.sub_instances,i.sup_instances) , version = l_version_aem , lastupddttm = SYSDATE WHERE ae_applid = i.sup_applid; projitem(33,66,i.sub_applid); UPDATE psaeappldefn x SET temptblinstances = 0 , version = l_version_aem , lastupddttm = SYSDATE WHERE ae_applid = i.sub_applid; projitem(33,66,i.sub_applid); l_any := TRUE; END LOOP; END LOOP; END; INSERT INTO psprojectitem (projectname ,objecttype ,objectid1 ,objectvalue1 ,objectid2 ,objectvalue2 ,objectid3 ,objectvalue3 ,objectid4 ,objectvalue4 ,nodetype ,sourcestatus ,targetstatus ,upgradeaction ,takeaction ,copydone) SELECT DISTINCT l_projectname,0 , 1, recname, 0, ' ' , 0, ' ', 0, ' ' , 0,0,0,0,1,0 FROM psaeappltemptbl t , psprojectitem i WHERE i.projectname = l_projectname AND i.objecttype = 33 AND i.objectid1 = 66 AND i.objectvalue1 = t.ae_applid AND NOT EXISTS( SELECT 'x' FROM psprojectitem i1 WHERE i1.projectname = l_projectname AND i1.objecttype = 0 AND i1.objectid1 = 1 AND i1.objectvalue1 = t.recname ); BEGIN INSERT INTO psprojectdefn (projectname,version,projectdescr,tgtservername,tgtdbname ,tgtoprid,tgtopracct,comprelease,srccompreldttm,tgtcompreldttm ,compreldttm,keeptgt,tgtorientation,comparetype,commitlimit ,reportfilter,maintproj,lastupddttm,lastupdoprid,releaselabel ,releasedttm,objectownerid,descrlong) VALUES (l_projectname,l_version_pjm,'Temporary Table Instances',' ',' ' ,' ',' ',' ',NULL,NULL ,NULL,31,0,1,50 ,16232832,0,SYSDATE,'PS',' ' ,NULL,' ','Application Engine programs, and related Temporary Records, ' ||'whose number of temporary table instances have been changed'); EXCEPTION WHEN dup_val_on_index THEN UPDATE psprojectdefn SET version = (SELECT version FROM psversion WHERE objecttypename = 'PJM') , lastupddttm = SYSDATE WHERE projectname = l_projectname; END; END;
CREATE OR REPLACE TRIGGER sysadm.gfc_deletetemptablestats
AFTER INSERT ON sysadm.ps_aetemptblmgr
FOR EACH ROW
WHEN (new.curtempinstance > 0)
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
l_table_name VARCHAR2(30) := '';
l_last_analyzed DATE := '';
l_stattype_locked VARCHAR2(5) := '';
table_doesnt_exist EXCEPTION;
PRAGMA EXCEPTION_INIT(table_doesnt_exist,-20001);
BEGIN
SELECT r.table_name, t.last_analyzed
INTO l_table_name, l_last_analyzed
FROM (
SELECT r.recname
, DECODE(r.sqltablename,' ','PS_'||r.recname,r.sqltablename)||:new.curtempinstance table_name
FROM psrecdefn r
) r
LEFT OUTER JOIN user_tables t
ON t.table_name = r.table_name
AND t.temporary = 'N'
WHERE r.recname = :new.recname;
SELECT s.stattype_locked
INTO l_stattype_locked
FROM user_tab_statistics s
WHERE s.table_name = l_table_name
AND s.object_type = 'TABLE';
IF l_last_analyzed IS NOT NULL THEN --only delete statistics if they exist
dbms_stats.delete_table_stats(ownname=>'SYSADM',tabname=>l_table_name,force=>TRUE);
END IF;
IF l_stattype_locked IS NULL THEN --stats need to be locked, 21,11,2009
dbms_stats.lock_table_stats(ownname=>user,tabname=>l_table_name);
END IF;
EXCEPTION
WHEN no_data_found THEN NULL;
WHEN table_doesnt_exist THEN NULL;
END;
/
show errorss
INSERT INTO ps_aetemptblmgr (PROCESS_INSTANCE, RECNAME, CURTEMPINSTANCE, OPRID, RUN_CNTL_ID, AE_APPLID ,RUN_DTTM, AE_DISABLE_RESTART, AE_DEDICATED, AE_TRUNCATED) VALUES (0,'TL_EXCEPT_WRK',24,'PS','Wibble','TL_TIMEADMIN',sysdate,' ', 1,0) / execute dbms_stats.gather_table_stats(ownname=>'SYSADM',tabname=>'PS_TL_EXCEPT_WRK24',force=>TRUE); column table_name format a18 SELECT table_name, num_rows, last_analyzed FROM user_tables where table_name = 'PS_TL_EXCEPT_WRK24' / TABLE_NAME NUM_ROWS LAST_ANALYZED ------------------ ---------- ------------------- PS_TL_EXCEPT_WRK24 0 14:36:12 06/04/2009
DELETE FROM ps_aetemptblmgr WHERE process_instance = 0 and curtempinstance = 24 and recname = 'TL_EXCEPT_WRK' / SELECT table_name, num_rows, last_analyzed FROM user_tables where table_name = 'PS_TL_EXCEPT_WRK24' / TABLE_NAME NUM_ROWS LAST_ANALYZED ------------------ ---------- ------------------- PS_TL_EXCEPT_WRK24
CREATE TABLE [TBNAME] ([TBCOLLIST]) TABLESPACE [TBSPCNAME] STORAGE (INITIAL **INIT** NEXT **NEXT** MAXEXTENTS **MAXEXT** PCTINCREASE **PCT**) PCTFREE **PCTFREE** PCTUSED **PCTUSED**;
GRANT SELECT ON [TBNAME] TO psreadall;
DROP TABLE PS_PERSON
/
CREATE TABLE PS_PERSON (EMPLID VARCHAR2(11) NOT NULL,
BIRTHDATE DATE,
BIRTHPLACE VARCHAR2(30) NOT NULL,
BIRTHCOUNTRY VARCHAR2(3) NOT NULL,
BIRTHSTATE VARCHAR2(6) NOT NULL,
DT_OF_DEATH DATE,
LAST_CHILD_UPDDTM DATE) TABLESPACE HRLARGE STORAGE (INITIAL 40000
NEXT 100000 MAXEXTENTS UNLIMITED PCTINCREASE 0) PCTFREE 10 PCTUSED 80
/
GRANT SELECT ON PS_PERSON TO PSREADALL
/
CREATE TABLE PSYPERSON (EMPLID VARCHAR2(11) NOT NULL,
BIRTHDATE DATE,
BIRTHPLACE VARCHAR2(30) NOT NULL,
BIRTHCOUNTRY VARCHAR2(3) NOT NULL,
BIRTHSTATE VARCHAR2(6) NOT NULL,
DT_OF_DEATH DATE,
LAST_CHILD_UPDDTM DATE) TABLESPACE HRLARGE STORAGE (INITIAL 40000
NEXT 100000 MAXEXTENTS UNLIMITED PCTINCREASE 0) PCTFREE 10 PCTUSED 80
/
INSERT INTO PSYPERSON (
EMPLID,
BIRTHDATE,
BIRTHPLACE,
BIRTHCOUNTRY,
BIRTHSTATE,
DT_OF_DEATH,
LAST_CHILD_UPDDTM)
SELECT
EMPLID,
BIRTHDATE,
BIRTHPLACE,
BIRTHCOUNTRY,
BIRTHSTATE,
DT_OF_DEATH,
LAST_CHILD_UPDDTM
FROM PS_PERSON
/
DROP TABLE PS_PERSON
/
RENAME PSYPERSON TO PS_PERSON
/