Upload
ahmed-elshayeb
View
257
Download
0
Embed Size (px)
Citation preview
Procedure To Store Database Object Size And Number Of Rows In Custom Table1- Create Table To Store Database Object Size And Number Of Rows
CREATE TABLE APPS.CALC_TAB_SIZE_MONITOR( OWNER VARCHAR2(30 BYTE), SEGMENT_NAME VARCHAR2(100 BYTE), SEGMENT_TYPE VARCHAR2(25 BYTE), SIZE_MB NUMBER(15,2), TABLESPACE VARCHAR2(100 BYTE), AUDIT_DATE DATE, INCREASE_SIZE NUMBER(8,2), INCREASE_PCT NUMBER(4,2), NUM_ROW NUMBER(15,2), INCREASE_ROW NUMBER(38,2), INCREASE_ROW_PCT NUMBER(4,2));---------------------------------------------------------CREATE INDEX APPS.CALC_TAB_SIZE_MONITOR ON APPS.CALC_TAB_SIZE_MONITOR(OWNER, TABLESPACE, SEGMENT_TYPE);------------------------------------------------------------------CREATE OR REPLACE PUBLIC SYNONYM CALC_TAB_SIZE_MONITOR FOR APPS.CALC_TAB_SIZE_MONITOR;GRANT INDEX, SELECT ON APPS.CALC_TAB_SIZE_MONITOR TO EUL WITH GRANT OPTION;
--- 2- Create Procedure
CREATE OR REPLACE Procedure APPS.XX_Object_Monitor (errbuf Out Nocopy Varchar2, retcode Out Nocopy Number, V_owner Varchar2 Default Null, V_table_name Varchar2 Default Null, V_segment_type Varchar2 Default Null) Is V_Size_MB Number (15, 2); V_NUM_ROW Number (15, 2); V_Tablespace_name Varchar2 (30 Byte); V_INCREASE_SIZE Number (8, 2) := 0; V_INCREASE_PCT Number (4, 2) := 0; V_INCREASE_ROW Number (38, 2) := 0; V_INCREASE_ROW_PCT Number (4, 2) := 0;Begin For I In ( Select OWNER, TABLE_NAME From DBA_TABLES Where OWNER = NVL (V_owner, OWNER) And TABLE_NAME = NVL (V_table_name, table_name) and TABLESPACE_NAME is not null and IOT_NAME is null) Loop For V In ( Select owner, table_name,
segment_type, SUM (bytes) / 1024 / 1024 Size_MB, Tablespace_name, NUM_ROW From ( Select AA.segment_name table_name, AA.owner, AA.segment_type, AA.bytes, AA.Tablespace_name , to_number(extractvalue(xmltype(dbms_xmlgen.getxml ('select count(*) c from '||AA.segment_name)) ,'/ROWSET/ROW/C')) NUM_ROW From dba_segments AA Where 1=1 AND AA.owner=V_owner AND segment_type = 'TABLE'-- AND AA.segment_name!='SYS_IOT_OVER_448088'-- and to_number(extractvalue(xmltype(dbms_xmlgen.getxml ('select count(*) c from '||AA.segment_name)) ,'/ROWSET/ROW/C'))<>0 Union All Select i.table_name, i.owner, s.segment_type, s.bytes, s.Tablespace_name ,NULL NUM_ROW From dba_indexes i, dba_segments s Where I.owner=V_owner AND s.segment_name = i.index_name And s.owner = i.owner And s.segment_type = 'INDEX' Union All Select l.table_name, l.owner, s.segment_type, s.bytes, s.Tablespace_name ,NULL NUM_ROW From dba_lobs l, dba_segments s Where l.owner=V_owner AND s.segment_name = l.segment_name And s.owner = l.owner And s.segment_type = 'LOBSEGMENT' Union All Select l.table_name, l.owner, s.segment_type, s.bytes, s.Tablespace_name ,NULL NUM_ROW From dba_lobs l, dba_segments s Where l.owner=V_owner AND s.segment_name = l.index_name And s.owner = l.owner And s.segment_type = 'LOBINDEX')
Where OWNER = NVL (i.owner, OWNER) And TABLE_NAME = NVL (i.table_name, table_name) And segment_type = NVL (V_segment_type, segment_type) Group By table_name, owner, Tablespace_name, segment_type,NUM_ROW -- Having SUM (bytes) / 1024 / 1024 > 5 /* Ignore really small tables */ Order By SUM (bytes) Desc) Loop Begin Select SIZE_MB,NUM_ROW Into V_Size_MB,V_NUM_ROW From apps.CALC_TAB_SIZE_MONITOR aa Where AUDIT_DATE =(SELECT MAX(AUDIT_DATE) FROM apps.CALC_TAB_SIZE_MONITOR bb WHERE BB.OWNER=AA.OWNER AND BB.SEGMENT_NAME=AA.SEGMENT_NAME AND BB.SEGMENT_TYPE=AA.SEGMENT_TYPE) And SEGMENT_NAME = V.table_name And SEGMENT_TYPE = V.segment_type And Tablespace = V.Tablespace_name;
V_INCREASE_SIZE := V.Size_MB - V_Size_MB; V_INCREASE_PCT := V_INCREASE_SIZE / V_Size_MB; V_INCREASE_ROW := V.NUM_ROW - V_NUM_ROW; V_INCREASE_ROW_PCT := V_INCREASE_ROW /V_NUM_ROW; Exception When Others Then Null; End;
Insert Into apps.CALC_TAB_SIZE_MONITOR Values (V.owner, V.table_name, V.segment_type, V.Size_MB, V.Tablespace_name, SYSDATE, NVL (V_INCREASE_SIZE, 0), NVL (V_INCREASE_PCT, 0), V.NUM_ROW, NVL(V_INCREASE_ROW,0), NVL(V_INCREASE_ROW_PCT,0) ); End Loop;
Commit; End Loop;
errbuf := 'Complete'; retcode := 0;
End;
3- Creat Concurrent Program Executable To Run Procedure From EBS
XX_Object_Monitor
4- Create Paramter List Of Value
- Create Synonum For sys.user$
- Create XX DBA Table Owner LOV To List Object Owner
- Create XX DBA Object List To List Object Name
Table Name = dba_segments
Value = segment_name
where/Order by = owner=:$FLEX$.V_owner
Additional Columns = SEGMENT_TYPE "Type" (18) ,PARTITION_NAME "Partition Name" (15)
- Create XX Object Type List To List Object Type
- Enter Date To Independent LOV
Value DescrabtionINDEXLOBINDEXLOBSEGMENTTABLE
5- Create Concurrent Programs XX Object Monitor
- Set Parameters
Parameter Value SetV_owner XX DBA Table OwnerV_table_name XX DBA Object ListV_segment_type
Assignment Concurrent To Request Group
Request Group Name = System Administrator Reports
Application = Application Object Library
Test Concurrent
First View Table Date
Create Discoverer Reports To Monetor Table Size And Row Number History