20
Procedure To Store Database Object Size And Number Of Rows In Custom Table 1- 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 ;

Procedure To Store Database Object Size And Number Of Rows In Custom Table

Embed Size (px)

Citation preview

Page 1: Procedure To Store Database Object Size And Number Of Rows In Custom Table

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,

Page 2: Procedure To Store Database Object Size And Number Of Rows In Custom Table

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')

Page 3: Procedure To Store Database Object Size And Number Of Rows In Custom Table

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;

Page 4: Procedure To Store Database Object Size And Number Of Rows In Custom Table

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$

Page 5: Procedure To Store Database Object Size And Number Of Rows In Custom Table
Page 6: Procedure To Store Database Object Size And Number Of Rows In Custom Table

- Create XX DBA Table Owner LOV To List Object Owner

- Create XX DBA Object List To List Object Name

Page 7: Procedure To Store Database Object Size And Number Of Rows In Custom Table

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)

Page 8: Procedure To Store Database Object Size And Number Of Rows In Custom Table

- Create XX Object Type List To List Object Type

- Enter Date To Independent LOV

Value DescrabtionINDEXLOBINDEXLOBSEGMENTTABLE

Page 9: Procedure To Store Database Object Size And Number Of Rows In Custom Table

5- Create Concurrent Programs XX Object Monitor

Page 10: Procedure To Store Database Object Size And Number Of Rows In Custom Table

- Set Parameters

Parameter Value SetV_owner XX DBA Table OwnerV_table_name XX DBA Object ListV_segment_type

Page 11: Procedure To Store Database Object Size And Number Of Rows In Custom Table
Page 12: Procedure To Store Database Object Size And Number Of Rows In Custom Table

Assignment Concurrent To Request Group

Request Group Name = System Administrator Reports

Application = Application Object Library

Page 13: Procedure To Store Database Object Size And Number Of Rows In Custom Table

Test Concurrent

First View Table Date

Page 14: Procedure To Store Database Object Size And Number Of Rows In Custom Table
Page 15: Procedure To Store Database Object Size And Number Of Rows In Custom Table
Page 16: Procedure To Store Database Object Size And Number Of Rows In Custom Table
Page 17: Procedure To Store Database Object Size And Number Of Rows In Custom Table
Page 18: Procedure To Store Database Object Size And Number Of Rows In Custom Table

Create Discoverer Reports To Monetor Table Size And Row Number History

Page 19: Procedure To Store Database Object Size And Number Of Rows In Custom Table