Monday, 24 February 2025

Schema_Stats_Job

 oracleao@gorastdprm01(gpromp02_cdb6335): cat stats.sql

set timing on

spool stats_new.log

select name from v$database;

select name from v$pdbs;

set echo on

set time on

exec dbms_stats.GATHER_SCHEMA_STATS(ownname => 'VOSPCQ_TEST_R70', estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO', degree => 4);

SPOOL off

exit


PDB:


nohup sqlplus a406771/Volvo1234@GIMPST02 @stats1.sql &




Non-CDB:



nohup sqlplus "/ as sysdba" @stats_new.sql &




Table stats:

exec dbms_stats.GATHER_SCHEMA_STATS(ownname => 'PROMPT01', estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO', degree => 4);


exec dbms_stats.gather_table_stats (ownname => 'PROMPT01', tabname => 'PMT_DOCUMENTS', estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size auto’, cascade => true, degree => 4);



CPU Top Sql's

 




clear breaks

Set lines 240 feed 0 verify off num 15

column parses format 9999999999

column sql_id format a14

column execs format 9999999999

column PLAN_HASH_VALUE format 9999999999 heading plan_hash

prompt

prompt

Select * from (

select  sql_id, plan_hash_value,CPU_TIME,DELTA_CPU_TIME DCPU_TIME,

PARSE_CALLS parses,DELTA_PARSE_CALLS Dparses,EXECUTIONS execs,DELTA_EXECUTION_COUNT dexecs, BUFFER_GETS, DELTA_BUFFER_GETS DBGETS,DISK_READS, DELTA_DISK_READS DDREADS,

ROWS_PROCESSED ROWSPR,DELTA_ROWS_PROCESSED DROWSPR

from v$sqlstats where LAST_ACTIVE_TIME >(sysdate -      180/1440)  order by DELTA_CPU_TIME desc ) where rownum < 25;

undef minutes_sinse

undef orderby

undef orderbydesc


========================

sysdate - 8/24


===================



Select 

   ss.username,

   se.SID,

   VALUE/100 cpu_usage_seconds

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 

   ss.status='ACTIVE'

and 

   ss.username is not null

order by VALUE desc;  


=============================================

ttitle "TOP CPU SESSIONS:"

set lines 150

set pages 50

select rownum as rank, a.*

from (

    SELECT v.sid,sess.osuser,sess.username,program, v.value / (100 * 60) CPUMins

    FROM v$statname s , v$sesstat v, v$session sess

   WHERE s.name = 'CPU used by this session'

     and sess.sid = v.sid

     and v.statistic#=s.statistic#

     and v.value>0

   ORDER BY v.value DESC) a

where rownum < &1;


=====================================================

col USERNAME for a15

col osuser for a10

col machine for a15

col EVENT for a30

select sid, serial#, username, osuser,machine, sql_id, PREV_SQL_ID,event, status, last_call_et,to_char(logon_time,'yyyy-mm-dd hh24:mi:ss') logon_time from v$session where sid in

(SELECT v.sid

    FROM v$statname s , v$sesstat v, v$session sess

   WHERE s.name = 'CPU used by this session'

     and sess.sid = v.sid

     and v.statistic#=s.statistic#

     and v.value>0

   ORDER BY v.value DESC

where rownum < &1);


==============================================

col name format a70

select statistic#,name from v$statname where upper(name) like '%CPU%';


STATISTIC# NAME

---------- ----------------------------------------------------------------------

         0 OS CPU Qt wait time

        10 recursive cpu usage

        16 CPU used when call started

        17 CPU used by this session

        61 IPC CPU used by this session

        64 global enqueue CPU used by this session

       229 gc CPU used by this session

       248 cell physical IO bytes sent directly to DB node to balance CPU

       581 parse time cpu

============================================================


alter session set nls_date_format='Dd-MON-YY HH24:MI:SS';

set lines 250

set pages 2000

col name format a26

col username format a15

col program format a40

col SESS_CPU_SECS wra format 999,999,999.99

col LAST_CPU_SECS wra format 999,999,999.99

col logon_secs  wra format 999,999,999

col Percent  wra format 999.99


select sess_cpu.sid, NVL(sess_cpu.username, 'Oracle Process') username, sess_cpu.status, sess_cpu.logon_time,  round((sysdate - sess_cpu.logon_time)*1440*60) logon_SECS, sess_cpu.value/100 SESS_CPU_SECS, (sess_cpu.value - call_cpu.value)/100 LAST_CPU_SECS, round ((sess_cpu.value/100)/round((sysdate - sess_cpu.logon_time)*1440*60)*100,2) Percent, sess_cpu.sql_id          

from

(select se.sql_id,ss.statistic#,se.sid, se.username, se.status, se.program, se.logon_time, sn.name, ss.value from v$session se, v$sesstat ss,

v$statname sn

where se.sid=ss.sid

and sn.statistic#=ss.statistic#

and sn.name in ('CPU used by this session') ) sess_cpu,

(select ss.statistic#,se.sid, ss.value, value/100 seconds from v$session se, v$sesstat ss, v$statname sn

where se.sid=ss.sid

and sn.statistic#=ss.statistic#

and sn.name in ('CPU used when call started') ) call_cpu

where sess_cpu.sid=call_cpu.sid

order by SESS_CPU_SECS ;

Oracle ACL Scripts

BEGIN

DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (

acl => 'utl_mail.xml',

description => 'Enables mail to be sent',

principal => 'ABC_PROD',

is_grant => TRUE,

privilege => 'connect'

);

COMMIT;

END;

/


BEGIN

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (

acl => 'utl_mail.xml',

host => 'mailgot.it.volvo.com',

lower_port => 25);

commit;

END;

/



Begin

DBMS_NETWORK_ACL_ADMIN.add_privilege (

acl => 'utl_mail.xml',

principal => 'ABC_PROD',

is_grant => TRUE,

privilege => 'connect');

end;

/


---------------------------------------------------------------------------------------



Prod :


HOST                                     LOWER_PORT UPPER_PORT ACL

---------------------------------------- ---------- ---------- --------------------------------------------------

*                                                              NETWORK_ACL_85F175090E3FD358E0535EB670994281

localhost                                                      /sys/acls/oracle-sysman-ocm-Resolve-Access.xml



SQL> alter session set container=gddvvp02;


Session altered.


SQL> SET LINESIZE 150


COLUMN acl FORMAT A50

COLUMN principal FORMAT A20

COLUMN privilege FORMAT A10


SELECT acl,

       principal,

       privilege,

       is_grant,

       TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,

       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date

FROM   dba_network_acl_privileges

ORDER BY acl, principal, privilege;SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6    7    8


ACL                                                PRINCIPAL            PRIVILEGE  IS_GR START_DATE  END_DATE

-------------------------------------------------- -------------------- ---------- ----- ----------- -----------

/sys/acls/oracle-sysman-ocm-Resolve-Access.xml     ORACLE_OCM           resolve    true

NETWORK_ACL_85F175090E3FD358E0535EB670994281       GSMADMIN_INTERNAL    resolve    true

NETWORK_ACL_85F175090E3FD358E0535EB670994281       PUBLIC               connect    true

NETWORK_ACL_85F175090E3FD358E0535EB670994281       PUBLIC               resolve    true





oracle@localhost: sqlplus / as sysdba


SQL*Plus: Release 18.0.0.0.0 - Production on Wed Apr 1 08:30:42 2020

Version 18.8.0.0.0


Copyright (c) 1982, 2018, Oracle.  All rights reserved.



Connected to:

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

Version 18.8.0.0.0


SQL> alter session set container=ABCPDB;


Session altered.


SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql


Package created.



Synonym created.


SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb


Package created.



Package body created.



Grant succeeded.



Package body created.


No errors.

SQL> GRANT EXECUTE ON UTL_TCP TO MANGO;

GRANT EXECUTE ON UTL_SMTP TO MANGO;

GRANT EXECUTE ON UTL_MAIL TO MANGO;

Grant succeeded.


SQL>

Grant succeeded.


SQL>


Grant succeeded.


SQL>

SQL> GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO dbvowner;

GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO dbvowner

                                              *

ERROR at line 1:

ORA-01917: user or role 'DBVOWNER' does not exist



SQL> GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO MANGO;


Grant succeeded.


SQL> SET LINESIZE 150

SQL>

SQL> COLUMN acl FORMAT A50

COLUMN principal FORMAT A20

SQL> SQL> COLUMN privilege FORMAT A10


SELECT acl,

SQL> SQL>   2         principal,

       privilege,

       is_grant,

  3    4    5         TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,

       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date

FROM   dba_network_acl_privileges

  6    7    8  ORDER BY acl, principal, privilege;


ACL                                                PRINCIPAL            PRIVILEGE  IS_GR START_DATE  END_DATE

-------------------------------------------------- -------------------- ---------- ----- ----------- -----------

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       APEX_190200          connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       APEX_190200          http       true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       DVINTRA              connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       DVINTRA              http       true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       DVLUREN              connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       DVLUREN              http       true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       DVWEB                connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       DVWEB                http       true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       EASIER               connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       EASIER               http       true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       GGSYS                resolve    true


ACL                                                PRINCIPAL            PRIVILEGE  IS_GR START_DATE  END_DATE

-------------------------------------------------- -------------------- ---------- ----- ----------- -----------

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       GSMADMIN_INTERNAL    resolve    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       SALJSTOD             connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       SALJSTOD             http       true


14 rows selected.




SQL>  Begin

DBMS_NETWORK_ACL_ADMIN.add_privilege (

acl => 'NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1',

principal => 'PUBLIC',

is_grant => TRUE,

privilege => 'connect');

end;

/  2    3    4    5    6    7    8


PL/SQL procedure successfully completed.


SQL>  Begin

DBMS_NETWORK_ACL_ADMIN.add_privilege (

acl => 'NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1',

principal => 'PUBLIC',

is_grant => TRUE,

privilege => 'resolve');

end;

/  2    3    4    5    6    7    8


PL/SQL procedure successfully completed.


SQL> BEGIN

  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(

     acl          => '/sys/acls/oracle-sysman-ocm-Resolve-Access.xml',

     description  => 'localhost',

     principal    => 'ORACLE_OCM',

     is_grant     => TRUE,

     privilege    => 'resolve');

END;

  2    3    4    5    6    7    8    9

 10  /


PL/SQL procedure successfully completed.


SQL>


BEGIN

   DBMS_NETWORK_ACL_ADMIN.DROP_ACL(

      acl => '/sys/acls/oracle-sysman-ocm-Resolve-Access.xml');

END;



GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO PUBLIC;

GRANT EXECUTE ON UTL_TCP TO PUBLIC;

GRANT EXECUTE ON UTL_SMTP TO PUBLIC;

GRANT EXECUTE ON UTL_MAIL TO PUBLIC;

GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO PUBLIC;  



GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO DVWEB;

GRANT EXECUTE ON UTL_TCP TO DVWEB;

GRANT EXECUTE ON UTL_SMTP TO DVWEB;

GRANT EXECUTE ON UTL_MAIL TO DVWEB;

GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO DVWEB;  


-------------------------------------------------------------------------------------


set linesize 200 pages 9999

col host for a30

col acl for a50

col acl_owner for a15


 SELECT host, lower_port, upper_port, acl,

     DECODE(

         DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, 'TANGO', 'connect'),

            1, 'GRANTED', 0, 'DENIED', null) privilege

     FROM dba_network_acls

    WHERE host IN

      (SELECT * FROM

         TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS('www.us.oracle.com')))

   ORDER BY DBMS_NETWORK_ACL_UTLITITY.DOMAIN_LEVEL(host) desc, lower_port,

                                               upper_port;



========================================

SELECT * from dba_network_acls;



=========================================

COLUMN acl FORMAT a50

COLUMN principal FORMAT A30

col PRIVILEGE for a15


SELECT acl,

       principal,

       privilege,

       is_grant,

       TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,

       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date

FROM   dba_network_acl_privileges;


========================================


SELECT acl,

       host,

       DECODE(

         DBMS_NETWORK_ACL_ADMIN.check_privilege_aclid(aclid, 'TANGO', 'connect'),

         1, 'GRANTED', 0, 'DENIED', NULL) privilege 

FROM   dba_network_acls;



========================================

Open ACL


BEGIN

  DBMS_NETWORK_ACL_ADMIN.create_acl (

    acl          => 'open_acl_file.xml', 

    description  => 'A test of the ACL functionality',

    principal    => 'TEST',

    is_grant     => TRUE, 

    privilege    => 'connect',

    start_date   => SYSTIMESTAMP,

    end_date     => NULL);


  DBMS_NETWORK_ACL_ADMIN.assign_acl (

    acl         => 'open_acl_file.xml',

    host        => '*', 

    lower_port  => 1,

    upper_port  => 9999); 


  COMMIT;

END;

/


==================================================

Assign ACL


BEGIN

  DBMS_NETWORK_ACL_ADMIN.add_privilege ( 

    acl         => 'NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1', 

    principal   => 'TANGO',

    is_grant    => FALSE, 

    privilege   => 'resolve', 

    position    => NULL, 

    start_date  => SYSTIMESTAMP,

    end_date    => NULL);


  COMMIT;

END;

/


connect   

http      

http-proxy

resolve   

smtp      


=================================================

Check Privilege


SELECT DECODE(

         DBMS_NETWORK_ACL_ADMIN.check_privilege('NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1', 'TANGO', 'connect'),

         1, 'GRANTED', 0, 'DENIED', NULL) privilege 

FROM dual;



===================================================



BEGIN

  -- Create the new ACL, naming it "netacl.xml", with a description.

  -- Also, provide one starter privilege, granting user FOO

  -- the privilege to connect.

  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('netacl.xml', 

      'Allow usage to the UTL network packages', 'FOO', TRUE, 'connect');

  -- Now grant privilege to resolve DNS names for FOO,

  -- and then grant connect and resolve to user BAR

  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1' ,'TANGO', TRUE, 'resolve');

  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1' ,'TANGO', TRUE, 'connect');

  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1' ,'BAR', TRUE, 'resolve');

  -- Specify which hosts this ACL applies to,

  -- for simplicity, we're saying all (*)

  -- You might want to specify certain hosts to lock this down.

  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('netacl.xml','*');

END;

/



DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE('NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1' ,'TANGO', TRUE, 'connect');



===============================================================


https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/d_networkacl_adm.htm


Prod :


HOST                                     LOWER_PORT UPPER_PORT ACL

---------------------------------------- ---------- ---------- --------------------------------------------------

*                                                              NETWORK_ACL_85F175090E3FD358E0535EB670994281

localhost                                                      /sys/acls/oracle-sysman-ocm-Resolve-Access.xml




QA 


SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql

SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb


GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO dbvowner;

GRANT EXECUTE ON UTL_TCP TO TANGO;

GRANT EXECUTE ON UTL_SMTP TO TANGO;

GRANT EXECUTE ON UTL_MAIL TO TANGO;

GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO TANGO;    



BEGIN

  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(

     acl          => '/sys/acls/oracle-sysman-ocm-Resolve-Access.xml',

     description  => 'localhost',

     principal    => 'ORACLE_OCM',

     is_grant     => TRUE,

     privilege    => 'resolve');

END;


NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       PUBLIC               connect    true

NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1       PUBLIC               resolve    true



SQL>  Begin

DBMS_NETWORK_ACL_ADMIN.add_privilege (

acl => 'NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1',

principal => 'PUBLIC',

is_grant => TRUE,

privilege => 'connect');

end;

/  2    3    4    5    6    7    8


PL/SQL procedure successfully completed.


SQL>  Begin

DBMS_NETWORK_ACL_ADMIN.add_privilege (

acl => 'NETWORK_ACL_96A9E1DDBF6B8B54E0535CB6709913C1',

principal => 'PUBLIC',

is_grant => TRUE,

privilege => 'resolve');

end;

/  2    3    4    5    6    7    8


PL/SQL procedure successfully completed.



================================================================


begin


  DBMS_NETWORK_ACL_ADMIN.delete_privilege ( 

    acl         => 'networkacl.xml', 

    principal   => 'PUBLIC',

    is_grant    => TRUE, 

    privilege   => 'connect');


  

  DBMS_NETWORK_ACL_ADMIN.drop_acl ( 

    acl         => 'networkacl.xml'

    );


dbms_network_acl_admin.create_acl(acl => 'networkacl.xml',

description => 'Allow Network Connectivity',

principal => 'PUBLIC',

is_grant => TRUE,

privilege => 'connect',

start_date => SYSTIMESTAMP,

end_date => NULL);

  

dbms_network_acl_admin.assign_acl(acl => 'networkacl.xml',

host => 'wv4101-vfsindiacms-qa.srv.volvo.com',

lower_port => NULL,

upper_port => NULL);

commit;

end;


 commit;

end;

Daily Checklist 2025

 Database Name:

--------------

Select name,open_mode from v$database;



Database Startup Time:

----------------------

Select to_char (startup_time, 'HH24:MI DD-MON-YY') "StartupTime" from v$instance;




DB NAME, INSTANCE, OPEN MODE AND LOG MODE Details:

--------------------------------------------------

colu name format a20

colu StartTime format a30

colu SysDateTime format a30

set linesize 150

select to_char(startup_time,'DD-MM-YYYY HH24:MI:SS') StartTime, to_char(sysdate,'DD-MM-YYYY HH24:MI:SS') SysDateTime, name,instance_name,log_mode, open_mode from dual, v$database, v$instance;



Database Size Information:

--------------------------

SELECT 'Physical Size (GB):' ||TO_CHAR(SUM(BYTES)/1024/1024/1024,9999999.99) FROM DBA_DATA_FILES union

SELECT 'Actual Size (GB) :' || TO_CHAR(SUM(BYTES)/1024/1024/1024,9999999.99)  FROM DBA_SEGMENTS union

SELECT 'SGA Size (GB):' || TO_CHAR(SUM(VALUE)/1024/1024/1024,9999999.99)  FROM V$SGA;


SELECT name,a.size_IN_GB,SYSDATE from V$DATABASE vd, (Select sum(bytes)/1024/1024/1024 size_IN_GB from dba_segments WHERE tablespace_name not like '%UNDO%') a;



Database Sysdate:

-----------------

Select to_char(sysdate,'HH24:MI DD-MON-YY') "Date" from v$instance;



ASM Candidate Disk Status:

--------------------------

set linesize 400

col path for a35

select name,group_number,disk_number,header_status,mode_status,state,os_Mb/1024,total_mb/1024,free_mb/1024,path from v$asm_disk;


select name,total_mb/1024,free_mb/1024 from v$asm_diskgroup;


To Check Fregmented space:

==========================


col owner for a15

col table_name for a30

col TOTAL_SIZE for a25

col ACTUAL_SIZE for a20

col FRAGMENTED_SPACE for a25

select owner,table_name,avg_row_len,round(((blocks*16/1024)),2)||'MB' "TOTAL_SIZE",

round((num_rows*avg_row_len/1024/1024),2)||'Mb' "ACTUAL_SIZE",

round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2) ||'MB' "FRAGMENTED_SPACE",

(round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2)/round(((blocks*16/1024)),2))*100 "percentage"

from dba_tables WHERE owner in ('PDMUSER_OOTB','PDMUSER','WBMSTAGING_MIG', 'WBMSTAGING')  and AVG_ROW_LEN > 0 and NUM_ROWS > 0 order by 2, 6;


Invalid Objects:

----------------

SELECT COUNT(1) FROM DBA_OBJECTS WHERE STATUS='INVALID';

SELECT COUNT(*) FROM DBA_OBJECTS WHERE STATUS='INVALID';


set linesize 400 pages 1000

col owner for a25

col object_name for a30

SELECT OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS FROM DBA_OBJECTS WHERE STATUS='INVALID';



Invalid Indexes:

----------------

set linesize 400 pages 1000

set owner for a25

col table_name for a30

col index_name for a35

Select owner,table_name,index_name,status from dba_indexes where status='INVALID';



Running Jobs:

-------------

Select * from dba_jobs_running;

Select /*+ rule */ * from dba_jobs_running;(9i Version)



Broken Jobs:

------------

Select count(*), broken, schema_USER, FAILURES from user_jobs where broken = 'Y' and LAST_DATE <= SYSDATE - 1/24 group by broken, schema_USER, FAILURES;

Select count(*), broken, schema_USER, FAILURES from user_jobs where broken = 'N' and LAST_DATE <= SYSDATE - 1/24 group by broken, schema_USER, FAILURES;


Non Oracle Users or Application Users:

--------------------------------------

set linesize 400

col username for a40

col ORACLE_MAINTAINED for a25

select USERNAME,ORACLE_MAINTAINED from dba_users where ORACLE_MAINTAINED='N' order by 1;




Allocated, Free and Used space in each of the datafiles:

--------------------------------------------------------

SELECT SUBSTR (df.NAME, 1, 40) file_name, df.bytes / 1024 / 1024 allocated_mb,

((df.bytes / 1024 / 1024) - NVL (SUM (dfs.bytes) / 1024 / 1024, 0))

used_mb,

NVL (SUM (dfs.bytes) / 1024 / 1024, 0) free_space_mb

FROM v$datafile df, dba_free_space dfs

WHERE df.file# = dfs.file_id(+)

GROUP BY dfs.file_id, df.NAME, df.file#, df.bytes

ORDER BY file_name;


Kill Inactive sessions:

-----------------------


SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;' FROM v$session where username='DCSUSR' and status='INACTIVE';





Tablespace Status:

-----------------



set feedback off 

set pagesize 70; 

set linesize 2000 

set head on 

COLUMN Tablespace format a25 heading 'Tablespace Name' 

COLUMN autoextensible format a11 heading 'AutoExtend' 

COLUMN files_in_tablespace format 999 heading 'Files' 

COLUMN total_tablespace_space format 99999999 heading 'TotalSpace' 

COLUMN total_used_space format 99999999 heading 'UsedSpace' 

COLUMN total_tablespace_free_space format 99999999 heading 'FreeSpace' 

COLUMN total_used_pct format 9999 heading '%Used' 

COLUMN total_free_pct format 9999 heading '%Free' 

COLUMN max_size_of_tablespace format 99999999 heading 'ExtendUpto' 

COLUM total_auto_used_pct format 999.99 heading 'Max%Used' 

COLUMN total_auto_free_pct format 999.99 heading 'Max%Free' 

WITH tbs_auto AS 

 (SELECT DISTINCT tablespace_name, autoextensible 

 FROM dba_data_files 

 WHERE autoextensible = 'YES'), 

 files AS 

 (SELECT tablespace_name, COUNT (*) tbs_files, 

 SUM (BYTES/1024/1024) total_tbs_bytes 

 FROM dba_data_files 

 GROUP BY tablespace_name), 

 fragments AS 

 (SELECT tablespace_name, COUNT (*) tbs_fragments, 

 SUM (BYTES)/1024/1024 total_tbs_free_bytes, 

 MAX (BYTES)/1024/1024 max_free_chunk_bytes 

 FROM dba_free_space 

 GROUP BY tablespace_name), 

 AUTOEXTEND AS 

 (SELECT tablespace_name, SUM (size_to_grow) total_growth_tbs 

 FROM (SELECT tablespace_name, SUM (maxbytes)/1024/1024 size_to_grow 

 FROM dba_data_files 

 WHERE autoextensible = 'YES' 

 GROUP BY tablespace_name 

 UNION 

 SELECT tablespace_name, SUM (BYTES)/1024/1024 size_to_grow 

 FROM dba_data_files 

 WHERE autoextensible = 'NO' 

 GROUP BY tablespace_name) 

 GROUP BY tablespace_name) 

SELECT c.instance_name,a.tablespace_name Tablespace, 

 CASE tbs_auto.autoextensible 

 WHEN 'YES' 

 THEN 'YES' 

 ELSE 'NO' 

 END AS autoextensible, 

 files.tbs_files files_in_tablespace, 

 files.total_tbs_bytes total_tablespace_space, 

 (files.total_tbs_bytes - fragments.total_tbs_free_bytes 

 ) total_used_space, 

 fragments.total_tbs_free_bytes total_tablespace_free_space, 

 round(( ( (files.total_tbs_bytes - fragments.total_tbs_free_bytes) 

 / files.total_tbs_bytes 

 ) 

 * 100 

 )) total_used_pct, 

 round(((fragments.total_tbs_free_bytes / files.total_tbs_bytes) * 100 

 )) total_free_pct 

 FROM dba_tablespaces a,v$instance c , files, fragments, AUTOEXTEND, tbs_auto 

WHERE a.tablespace_name = files.tablespace_name 

 AND a.tablespace_name = fragments.tablespace_name 

 AND a.tablespace_name = AUTOEXTEND.tablespace_name 

 AND a.tablespace_name = tbs_auto.tablespace_name(+) 

order by total_free_pct;




column PCT_FREE format 999.99

select round(undo_alloc.allocMB,2) allocMB, round(undo_free.freeMB,2) free,  round(undo_free.active,2) active,

round(undo_free.expired,2) expired,round(undo_free.unexpired,2) unexpired,

         ltrim( round(( (undo_free.freeMB + undo_free.expired)/undo_alloc.allocMB) * 100,2))  as PCT_FREE

        from

        (

        select tablespace_name, sum(bytes)/(1024*1024) as freeMB,

        (select sum(bytes)/(1024*1024) from dba_undo_extents where status = 'ACTIVE' ) as active,

        (select sum(bytes)/(1024*1024) from dba_undo_extents where status = 'EXPIRED' ) as expired,

        (select sum(bytes)/(1024*1024) from dba_undo_extents where status = 'UNEXPIRED' ) as unexpired

       from dba_free_space

        where tablespace_name = 'UNDO'

        group by tablespace_name

        ) undo_free,

        (

        select t.name, sum(d.bytes)/(1024*1024) as  allocMB

        from v$tablespace t, v$datafile d

        where t.name = 'UNDO'

        and t.ts# = d.ts#

        group by t.name

        ) undo_alloc

        where undo_free.tablespace_name (+) = undo_alloc.name;


Tablespace Wise Growth on Daily basis:  

======================================


SELECT TO_DATE(TO_CHAR (snpshot.begin_interval_time,’DD-MM-YYYY’),’DD-MM-YYYY’) daywise

, dhts.tsname tablespacename

, max(round((dhtsu.tablespace_size* dtblspc.block_size )/(1024*1024*1024),2) ) maximum_allocsize_GB

, max(round((dhtsu.tablespace_usedsize* dtblspc.block_size )/(1024*1024*1024),2)) maximum_usedsize_GB

FROM DBA_HIST_TBSPC_SPACE_USAGE dhtsu

, DBA_HIST_TABLESPACE_STAT dhts

, DBA_HIST_SNAPSHOT snpshot

, DBA_TABLESPACES dtblspc

WHERE dhtsu.tablespace_id= dhts.ts#

AND dhtsu.snap_id = snpshot.snap_id

AND dhts.tsname = dtblspc.tablespace_name

AND dhts.tsname NOT IN (‘SYSAUX’,’SYSTEM’)

GROUP BY TO_DATE(TO_CHAR (snpshot.begin_interval_time,’DD-MM-YYYY’),’DD-MM-YYYY’)

, dhts.tsname

ORDER BY dhts.tsname

, daywise;



Daily Object’s Growth with respect to Tablespace in last X days:

================================================================


SELECT * FROM

(SELECT ds.tablespace_name

, ds.segment_name

, TO_DATE(TO_CHAR (snpshot.end_interval_time,’DD-MM-YYYY’),’DD-MM-YYYY’) daywise

, SUM(dhss.space_used_delta) / 1024 / 1024 “Space used (MB)”

, AVG(ds.bytes) / 1024 / 1024 “Total Object Size (MB)”

, ROUND(SUM(dhss.space_used_delta) / SUM(ds.bytes) * 100, 2) “Percent of Total Disk Usage”

FROM dba_hist_snapshot snpshot

, dba_hist_seg_stat dhss

, dba_objects dobj

, dba_segments ds

WHERE begin_interval_time > TRUNC(SYSDATE) – &pastdays

AND snpshot.snap_id = dhss.snap_id

AND dobj.object_id = dhss.obj#

AND dobj.owner = ds.owner

AND dobj.object_name = ds.segment_name

AND ds.segment_name = ‘TEST_TAB1′

GROUP BY ds.tablespace_name,ds.segment_name,TO_DATE(TO_CHAR (snpshot.end_interval_time,’DD-MM-YYYY’),’DD-MM-YYYY’)

ORDER BY ds.tablespace_name,ds.segment_name,TO_DATE(TO_CHAR (snpshot.end_interval_time,’DD-MM-YYYY’),’DD-MM-YYYY’));


Object’s Growth in Last X days:

===============================


SELECT ds.tablespace_name

, ds.segment_name "object name"

, dobj.object_type

, ROUND(SUM(dhss.space_used_delta) / 1024 / 1024 / 1024,2) "Growth (GB)"

FROM dba_hist_snapshot snpshot

, dba_hist_seg_stat dhss

, dba_objects dobj

, dba_segments ds

WHERE begin_interval_time > TRUNC(SYSDATE-5)

AND snpshot.snap_id = dhss.snap_id

AND dobj.object_id = dhss.obj#

AND dobj.owner = ds.owner

AND dobj.object_name = ds.segment_name

GROUP BY ds.tablespace_name,ds.segment_name,dobj.object_type

ORDER BY 3 ASC;


Space Related Views:

====================


There are few important views provided by Oracle which helps us track the growth.  These can be listed as:


DBA_SEGMENTS

DBA_TABLESPACES

DBA_HIST_SEG_STAT

DBA_HIST_TABLESPACE_STAT

DBA_HIST_TBSPC_SPACE_USAGE

DBA_HIST_SNAPSHOT

DBMS_SPACE


Tablespace Queryr-2:

===================


SET PAGESIZE 50000

SET LINESIZE 400

COLUMN NAME FORMAT A35

COLUMN DATAFILES FORMAT A50

COLUMN TABLESPACE FORMAT A25

COLUMN OWNER FORMAT A15

Prompt TOTAL AND USED SPACE

SELECT Total.name "Tablespace Name",

                nvl(Free_space, 0) Free_space,

                nvl(total_space-Free_space, 0) Used_space,

                total_space

  FROM

    (select tablespace_name, sum(bytes/1024/1024) Free_Space

              from sys.dba_free_space

             group by tablespace_name

              ) Free,

        (select b.name,    sum(bytes/1024/1024) TOTAL_SPACE

              from sys.v_$datafile a, sys.v_$tablespace B

             where a.ts# = b.ts#

             group by b.name

       ) Total

  WHERE Free.Tablespace_name(+) = Total.name

  ORDER BY Total.name;



set pages 1000

set linesize 132

column pct_used format 999.9 heading " Used (%)"

column ts_name format a41 heading "Name"

column Mbytes format 999999999 heading "Size (MB)"

column used format 999999999 heading "Used"

column free format 999999999 heading "Free"

column free format 999999999 heading "PER_FREE"




select nvl(b.tablespace_name,nvl(a.tablespace_name,'UNKNOWN')) ts_name

, mbytes_alloc mbytes

, mbytes_alloc-nvl(mbytes_free,0) used

, nvl(mbytes_free,0) free

, round(nvl(mbytes_free,0)/(mbytes_alloc)*100,2) Per_free

, ((mbytes_alloc-nvl(mbytes_free,0))/mbytes_alloc)*100 pct_used

from (select sum(bytes)/1024/1024 Mbytes_free

, max(bytes)/1024/1024 largest

, tablespace_name

from dba_free_space

group by tablespace_name) a

, (select sum(bytes)/1024/1024 Mbytes_alloc

, tablespace_name

from dba_data_files

group by tablespace_name) b

where a.tablespace_name (+) = b.tablespace_name

order by 5

/





RMAN full, Incremental and Archivelog backup Details:

-----------------------------------------------------

Set linesize 400

set pages 4000

col output_bytes_display form a15

col input_bytes_display form a15

col STATUS form a25

col time_taken_display form a10

col INPUT_BYTES_PER_SEC_DISPLAY form a15

col OUTPUT_BYTES_PER_SEC_DISPLAY form a17

col input_rate_per_sec form a20

col output_rate_per_sec form a20

select session_key,

input_type,

status,

to_char(start_time,'yyyy-mm-dd hh24:mi') start_time,

to_char(end_time,'yyyy-mm-dd hh24:mi') end_time,

input_bytes_display,

output_bytes_display,

--INPUT_BYTES_PER_SEC_DISPLAY as input_rate_per_sec,

OUTPUT_BYTES_PER_SEC_DISPLAY as output_rate_per_sec,

time_taken_display

from v$rman_backup_job_details

order by session_key asc;



Database Hit Ratio:

-------------------

SELECT 1- (P3.value - P4.value - P5.value) / (P1.value + P2.value) "HIT RATIO"

     FROM   v$sysstat P1, v$sysstat P2, v$sysstat P3, v$sysstat P4, V$sysstat P5

     WHERE  P1.name = 'db block gets'

     AND    P2.name = 'consistent gets'

     AND    P3.name = 'physical reads'

     AND    P4.name = 'physical reads direct'

     AND    P5.name = 'physical reads direct (lob)';



Blocking sessions:

------------------

select blocking_session,sid,serial#,wait_class,seconds_in_wait from gv$session where blocking_session is not NULL order by blocking_session;

SQL> select * from dba_blockers;


no rows selected


SQL> select * from v$session_blockers;


Session Details :

-----------------


col username for a15

col program for a15


select USERNAME,PROGRAM,SID,SESSION_SERIAL#,ELAPSED_TIME/1000000 "elapsed time sec", sql_id from v$sql_monitor where status='EXECUTING';



select sid,username,status,schemaname,osuser,process,machine,program,sql_id,prev_sql_id,module from v$session where sid='591';



select sid,username,status,schemaname,osuser,process,machine,program,sql_id,prev_sql_id,module from v$session where schemaname not in('SYS','DBSNMP')


Row Level Blocking:

-------------------

with w as (

select

chain_id,rownum n,level l

,lpad(' ',level,' ')||(select instance_name from gv$instance where inst_id=w.instance)||' '''||w.sid||','||w.sess_serial#||'@'||w.instance||'''' "session"

,lpad(' ',level,' ')||w.wait_event_text ||

   case

   when w.wait_event_text like 'enq: TM%' then

    ' mode '||decode(w.p1 ,1414332418,'Row-S' ,1414332419,'Row-X' ,1414332420,'Share' ,1414332421,'Share RX' ,1414332422,'eXclusive')

     ||( select ' on '||object_type||' "'||owner||'"."'||object_name||'" ' from all_objects where object_id=w.p2 )

   when w.wait_event_text like 'enq: TX%' then

    (

     select ' on '||object_type||' "'||owner||'"."'||object_name||'" on rowid '

     ||dbms_rowid.rowid_create(1,data_object_id,relative_fno,w.row_wait_block#,w.row_wait_row#)

     from all_objects ,dba_data_files where object_id=w.row_wait_obj# and w.row_wait_file#=file_id

    )

   end "wait event"

, w.in_wait_secs/60 "minutes"

, s.username , s.program,s.client_identifier

from v$wait_chains w join gv$session s on (s.sid=w.sid and s.serial#=w.sess_serial# and s.inst_id=w.instance)

connect by prior w.sid=w.blocker_sid and prior w.sess_serial#=w.blocker_sess_serial# and prior w.instance = w.blocker_instance

start with w.blocker_sid is null

)

select * from w where chain_id in (select chain_id from w group by chain_id having max("minutes") >= 1 and max(l)>1 )

order by n;



Long Session Details:

---------------------

set lines 200 pages 200

col sid for 9999

col serial# for 999999

col spid for 999999

col status for a10

col username for a10

col TIM for 9999.99

col module for a16

col program for a20

col osuser for a15

select s.sid,s.serial#,p.spid,s.status,s.username,s.last_call_et/60 tim,

s.module,s.program,s.sql_hash_value,s.osuser

from v$session s,v$process p

where s.type<>'BACKGROUND'

and s.paddr=p.addr

and s.last_call_et/60>10

and s.program  not like '%CJQ%'

and s.program  not like '%QMN%'

order by 4,6;


Patch Details:

--------------

set linesize 400

col ACTION_TIME for a30

col DESCRIPTION for a70

col BUNDLE_SERIES for a20

select patch_id,action,status,action_time,description from DBA_REGISTRY_SQLPATCH;


Tablespace Reshrink:

--------------------


col cmd for a100

set linesize 400

select bytes/1024/1024/1024 real_size, ceil( (nvl(hwm,1)*8192)/1024/1024/1024 ) shrinked_size,

 bytes/1024/1024/1024-ceil( (nvl(hwm,1)*8192)/1024/1024/1024 ) released_size,

 'alter database datafile '|| ''''||file_name||'''' || ' resize ' || ceil( (nvl(hwm,1)*8192)/1024/1024/1024 ) || 'G;' cmd from dba_data_files a,

( select file_id, max(block_id+blocks-1) hwm from dba_extents group by file_id ) b Where tablespace_name='PROMPT_INDEX' and

a.file_id = b.file_id(+)  and ceil(blocks*8192/1024/1024/1024)- ceil((nvl(hwm,1)* 8192)/1024/1024/1024 ) > 0;  




59395600


Database Last Analyse:

----------------------

select owner,table_name,last_analyzed FROM dba_tables ORDER BY LAST_ANALYZED

SELECT DISTINCT (TO_CHAR (last_analyzed, 'yyyy/mm/dd')) as last_analyzed FROM dba_tables ORDER BY LAST_ANALYZED;




RMAN Job Progress:

------------------

SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,

ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"

FROM V$SESSION_LONGOPS

WHERE OPNAME LIKE 'RMAN%'

AND OPNAME NOT LIKE '%aggregate%'

AND TOTALWORK != 0

AND SOFAR <> TOTALWORK; 




Directory Details:

------------------

set lines 400 pages 100

col OWNER for a10

col DIRECTORY_PATH for a60

col DIRECTORY_NAME for a25

select * from dba_directories;




Schema Objects:

---------------

col owner for a30

col OBJECT_TYPE for a30

select owner,object_type,count(object_type) from dba_objects where owner='&USERNAME' group by owner,object_type --order by Object_type asc;


col owner for a30

col OBJECT_TYPE for a30

select owner,object_type,count(object_type) from dba_objects where owner='USERNAME' group by owner,object_type --order by Object_type asc;



Schema Size Group By Segment:

-----------------------------

set linesize 150

set pagesize 5000

col owner for a15

col segment_name for a30

col segment_type for a20

col TABLESPACE_NAME for a30

select OWNER,sum(bytes)/1024/1024/1000 "SIZE_IN_GB" from dba_segments group by owner order by owner;



Realtime Monitoring:

--------------------

set lines 250

column event format a20 trunc

column osuser format a8 trunc

column logon_time format a19 trunc

column start_time format a17 trunc

column machine format a15 trunc

column sid format 99999

column cno format 999

column serial# format 99999 heading sno

column username format a10 trunc

column program format a20 trunc

column owner format a12 trunc

column object_name format a24 trunc

column LOCKED_MODE format 9999 heading lmde

column name for a15 trunc

select s.sid,s.serial#,s.program,s.username,s.osuser,s.machine,s.sql_id,s.sql_child_number cno,s.prev_sql_id,s.event,

to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss') logon_time, t.start_time, t.used_urec, t.PHY_IO, t.name

from v$session s,v$transaction t

where s.saddr=t.ses_addr

order by t.start_time;



set lines 250

column event format a20 trunc

column osuser format a8 trunc

column logon_time format a19 trunc

column start_time format a17 trunc

column machine format a15 trunc

column sid format 99999

column cno format 999

column serial# format 99999 heading sno

column username format a10 trunc

column program format a20 trunc

column owner format a12 trunc

column object_name format a24 trunc

column LOCKED_MODE format 9999 heading lmde

column name for a15 trunc

select s.sid,s.serial#,s.program,s.username,s.osuser,s.machine,s.sql_id,s.sql_child_number cno,s.prev_sql_id,s.event,

to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss') logon_time, t.start_time, t.used_urec, t.PHY_IO, t.name

from v$session s,v$transaction t

where s.saddr=t.ses_addr

order by t.start_time;



Archive Generation:

-------------------

set line 2000

SELECT to_date(first_time) DAY,

to_char(sum(decode(to_char(first_time,'HH24'),'00',1,0)),'999') "00",

to_char(sum(decode(to_char(first_time,'HH24'),'01',1,0)),'999') "01",

to_char(sum(decode(to_char(first_time,'HH24'),'02',1,0)),'999') "02",

to_char(sum(decode(to_char(first_time,'HH24'),'03',1,0)),'999') "03",

to_char(sum(decode(to_char(first_time,'HH24'),'04',1,0)),'999') "04",

to_char(sum(decode(to_char(first_time,'HH24'),'05',1,0)),'999') "05",

to_char(sum(decode(to_char(first_time,'HH24'),'06',1,0)),'999') "06",

to_char(sum(decode(to_char(first_time,'HH24'),'07',1,0)),'999') "07",

to_char(sum(decode(to_char(first_time,'HH24'),'08',1,0)),'999') "08",

to_char(sum(decode(to_char(first_time,'HH24'),'09',1,0)),'999') "09",

to_char(sum(decode(to_char(first_time,'HH24'),'10',1,0)),'999') "10",

to_char(sum(decode(to_char(first_time,'HH24'),'11',1,0)),'999') "11",

to_char(sum(decode(to_char(first_time,'HH24'),'12',1,0)),'999') "12",

to_char(sum(decode(to_char(first_time,'HH24'),'13',1,0)),'999') "13",

to_char(sum(decode(to_char(first_time,'HH24'),'14',1,0)),'999') "14",

to_char(sum(decode(to_char(first_time,'HH24'),'15',1,0)),'999') "15",

to_char(sum(decode(to_char(first_time,'HH24'),'16',1,0)),'999') "16",

to_char(sum(decode(to_char(first_time,'HH24'),'17',1,0)),'999') "17",

to_char(sum(decode(to_char(first_time,'HH24'),'18',1,0)),'999') "18",

to_char(sum(decode(to_char(first_time,'HH24'),'19',1,0)),'999') "19",

to_char(sum(decode(to_char(first_time,'HH24'),'20',1,0)),'999') "20",

to_char(sum(decode(to_char(first_time,'HH24'),'21',1,0)),'999') "21",

to_char(sum(decode(to_char(first_time,'HH24'),'22',1,0)),'999') "22",

to_char(sum(decode(to_char(first_time,'HH24'),'23',1,0)),'999') "23"

from

v$log_history

where to_date(first_time) > sysdate-10

GROUP by

to_char(first_time,'YYYY-MON-DD'), to_date(first_time)

order by to_date(first_time);


Temp Usage:

----------


SELECT   S.sid || ',' || S.serial# sid_serial, S.username, S.osuser, P.spid, S.module,

          P.program, SUM (T.blocks) * TBS.block_size / 1024 / 1024 mb_used, T.tablespace,

          COUNT(*) statements

 FROM     v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P

 WHERE    T.session_addr = S.saddr

 AND      S.paddr = P.addr

 AND      T.tablespace = TBS.tablespace_name

 GROUP BY S.sid, S.serial#, S.username, S.osuser, P.spid, S.module,

          P.program, TBS.block_size, T.tablespace

 ORDER BY sid_serial;


Archive Log History:

--------------------

Set linesize 400;

Select thread#, sequence#, first_change#,  to_char(first_time,'dd/mm/yyyy:hh:mi:ss') FirstTime,

next_change#, applied, to_char(completion_time,'dd/mm/yyyy:hh:mi:ss') CompTime from v$archived_log;

Select process, status, thread#, sequence#, block#, blocks from v$managed_standby;



Tracefile deletion:

-------------------

find /u01/app/oracle/product/12.1.0/dbhome_1/rdbms/audit/*.aud -type f -mtime +60 -exec rm {} \;

If we got error like "-bash: /usr/bin/find: Argument list too long" use below command to delete

find /u01/app/oracle/product/12.1.0/dbhome_1/rdbms/audit/ -type f -name '*.aud' -mtime +10 -exec ls -ltr {} \;

find /u01/app/oracle/product/12.1.0/dbhome_1/rdbms/audit/ -type f -name '*.aud' -mtime +90 -exec rm {} \;



Verify Rollback Segment:

------------------------

Status should be ONLINE, not OFFLINE or FULL….  For names and status of ALL rollback segment,

SELECT TABLESPACE_NAME, SEGMENT_NAME, STATUS FROM  DBA_ROLLBACK_SEGS;





Optimizer Statistics:

---------------------

SELECT DISTINCT (TO_CHAR (last_analyzed, 'yyyy/mm/dd')) as last_analyzed FROM dba_tables

Where TO_CHAR (last_analyzed, 'yyyy/mm/dd')>    '&date'   ORDER BY LAST_ANALYZED;

SELECT DISTINCT (TO_CHAR (last_analyzed, 'yyyy/mm/dd')) as last_analyzed FROM dba_tables

ORDER BY LAST_ANALYZED;




Database Growth:

----------------

col "Database Size" format a20

col "Free space" format a20

col "Used space" format a20

select round(sum(used.bytes) / 1024 / 1024 / 1024 ) || ' GB' "Database Size" ,

round(sum(used.bytes) / 1024 / 1024 / 1024 ) - round(free.p / 1024 / 1024 / 1024) || ' GB' "Used space" ,

round(free.p / 1024 / 1024 / 1024) || ' GB' "Free space" from (select bytes from v$datafile

union all select bytes from v$tempfile union all select bytes from v$log) used ,

(select sum(bytes) as p from dba_free_space) free group by free.p;




Locked Objects Identification And Resolution:

---------------------------------------------

STEP-1

Select  oracle_username, os_user_name,locked_mode,object_name,

Object_type from v$locked_object a, dba_objects b 

where a.object_id=b.object_id order by a.oracle_username;

STEP-2 (TO FIND THE SID OWNER OF LOCKED OBJECTS)

Select Sid, owner from v$access

where object='NAME OF THE OBJECT';

STEP-3(TO FIND THE SERIAL# AND STATUS)

Select username,sid,serial#,status from v$session where sid=   ;

STEP-4( TO KILL THE SESSION WHICH HAVE BEEN LOCKED THE SESSION)

Alter system kill session 'sid,serial#';


Fregmentation:

--------------

col TOTAL_SIZE for a25

col ACTUAL_SIZE for a25

col FRAGMENTED_SPACE for a25

col TABLE_NAME for a30

select table_name,avg_row_len,round(((blocks*16/1024)),2)||'MB' "TOTAL_SIZE",

round((num_rows*avg_row_len/1024/1024),2)||'Mb' "ACTUAL_SIZE",

round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2) ||'MB' "FRAGMENTED_SPACE",

(round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2)/round(((blocks*16/1024)),2))*100 "percentage"

from dba_tables WHERE owner='&towner'  and AVG_ROW_LEN > 0 and NUM_ROWS > 0;



Full Table Scan Finding:

------------------------

SELECT   sp.object_owner, sp.object_name,

         (SELECT sql_text

            FROM v$sqlarea sa

           WHERE sa.address = sp.address

             AND sa.hash_value = sp.hash_value) sqltext,

         (SELECT executions

            FROM v$sqlarea sa

           WHERE sa.address = sp.address

             AND sa.hash_value = sp.hash_value) no_of_full_scans,

         (SELECT    LPAD (NVL (TRIM (TO_CHAR (num_rows)), ' '),

                          15,

                          ' '

                         )

                 || ' | '

                 || LPAD (NVL (TRIM (TO_CHAR (blocks)), ' '), 15, ' ')

                 || ' | '

                 || BUFFER_POOL

            FROM dba_tables

           WHERE table_name = sp.object_name AND owner = sp.object_owner)

                                                           "rows|blocks|pool"

    FROM v$sql_plan sp

   WHERE operation = 'TABLE ACCESS'

     AND options = 'FULL'

     AND object_owner NOT IN ('SYS','SYSTEM')

ORDER BY 1, 2;




Temp query:

----------

SELECT SUM(total_blocks*8192/1024/1024) Occupied,

       SUM(used_blocks*8192/1024/1024)  Using,

       SUM(free_blocks*8192/1024/1024)  Free

  FROM gv$sort_segment

-- WHERE tablespace_name = upper('&temp_tablespace_name');



Temp Out Of Space:

------------------

SELECT   A.tablespace_name tablespace, D.mb_total,

         SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_used,

         D.mb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_free

FROM     v$sort_segment A,

         (

         SELECT   B.name, C.block_size, SUM (C.bytes) / 1024 / 1024 mb_total

         FROM     v$tablespace B, v$tempfile C

         WHERE    B.ts#= C.ts#

         GROUP BY B.name, C.block_size

         ) D

WHERE    A.tablespace_name = D.name

GROUP by A.tablespace_name, D.mb_total;


Select tablespace_name, sum(bytes_used), sum(bytes_free) from v$temp_space_header group by tablespace_name;




Temp utilization by session:

----------------------------

SELECT   S.sid || ',' || S.serial# sid_serial, S.username, S.osuser, P.spid, S.module,

         S.program, SUM (T.blocks) * TBS.block_size / 1024 / 1024 mb_used, T.tablespace,

         COUNT(*) sort_ops

FROM     v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P

WHERE    T.session_addr = S.saddr

AND      S.paddr = P.addr

AND      T.tablespace = TBS.tablespace_name

GROUP BY S.sid, S.serial#, S.username, S.osuser, P.spid, S.module,

         S.program, TBS.block_size, T.tablespace

ORDER BY sid_serial;


To See The Which Tables Need To Shrink/Re-org:

----------------------------------------------

select tablespace_name, segment_name,segment_type, partition_name,recommendations,c1 from

table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE'))

order by reclaimable_space desc;




Find PID from SID:

------------------

SELECT P.SPID, S.SID, S.SERIAL# FROM V$PROCESS P, V$SESSION S WHERE P.ADDR = S.PADDR AND S.SID = &sid;





Data guard:

-----------

show parameter db_name;

archive log list;

select max(sequence#),applied from v$archived_log group by applied;

select sequence#,applied from v$archived_log order by 1;

select count(*) from v$archived_log where applied='NO' order by 1;

select * from v$archive_gap;

select thread#,sequence#,applied from v$archived_log;

Select process, status, thread#, sequence#, block#  from v$managed_standby;

Select name,open_mode,database_role,protection_mode,current_scn from v$database;


set linesize 400;

set echo off;

archive log list;

Set linesize 400;

Select thread#, max(sequence#) as "last_applied_log" from v$log_history group by thread#;

Select status as Dest_1_Status, error from v$archive_dest where dest_id=1;

Select status as Dest_3_Status, error from v$archive_dest where dest_id=3;

Select process, status, thread#, sequence#, block#  from v$managed_standby;



Findout calling which procedure:

--------------------------------

select 'CALLED PLSQL', vs.username, d_o.object_name -- whatever info you need

  from dba_objects d_o

       inner join

       v$session vs

          on d_o.object_id = vs.plsql_entry_object_id

union all

select 'CURRENT PLSQL', vs.username, d_o.object_name

  from dba_objects d_o

       inner join

       v$session vs

          on d_o.object_id = vs.plsql_object_id;



To Find Blocking Session History:

---------------------------------

SELECT  distinct a.sql_id, a.blocking_session,a.blocking_session_serial#,

a.user_id,s.sql_text,a.module

FROM  V$ACTIVE_SESSION_HISTORY a, v$sql s

where a.sql_id=s.sql_id

and blocking_session is not null

and a.user_id <> 0 

and a.sample_time between to_date('24/04/2014 11:00', 'dd/mm/yyyy hh24:mi') 

and to_date('24/04/2014 23:50', 'dd/mm/yyyy hh24:mi');




Datafile Free Size:

-------------------

col FILE_NAME format a60

SELECT SUBSTR (df.file_name, 1, 60) file_name, df.bytes / 1024 / 1024 allocated_mb,

((df.bytes / 1024 / 1024) - NVL (SUM (dfs.bytes) / 1024 / 1024, 0))

used_mb,

NVL (SUM (dfs.bytes) / 1024 / 1024, 0) free_space_mb

FROM dba_data_files df, dba_free_space dfs

WHERE df.FILE_ID = dfs.file_id(+) and df.tablespace_name='&TABLESPACE_NAME'

GROUP BY dfs.file_id, df.file_NAME, df.file_id, df.bytes

UNION ALL

select file_name, bytes/1024/1024 "allocated_mb",user_bytes/1024/1024 "used_mb", ((bytes/1024/1024) -  (user_bytes/1024/1024)) "free_space_mb" from dba_temp_files; 




FRA:


Sometimes the Flash Recovery Area (FRA) is full and the Oracle DBA wants to know what is it̢۪s usage, size and the list of occupants (archives, RMAN backups pieces or image copies, flashback logs).


Check and confirm FRA location with below parameter 


SQL>Select name,open_mode,database_role from v$database;


NAME          OPEN_MODE    DATABASE_ROLE

------        ---------    -------------

ORADB1        READ WRITE   PRIMARY


SQL> Show parameter db_recovery_file_dest;


NAME                                 TYPE        VALUE

--------------------------           ----------- ------

db_recovery_file_dest                string      +FRA

db_recovery_file_dest_size           big integer 120G


Check FRA usage like Total, used and free space  with below select statement


SQL> Select space_limit/1024/1024/1024 TOTAL_GB,space_used/1024/1024/1024 USED_GB from v$recovery_file_dest;


TOTAL_GB    USED_GB

--------    -------

120         88.8515625


Check the fra usage in percentage with below select statement


SQL>col NAME for a15

Select x.*,round(100 * (x.SPACE_USED/x.SPACE_LIMIT), 3) fra_pct_used from v$recovery_file_dest x;


NAME     SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES   CON_ID     FRA_PCT_USED

-----    ----------- ---------- ----------------- ---------------   ---------- ----------

+FRA     1.2885E+11  9.5404E+10 9.5404E+10        285               0           74.043


Check  the list of occupants (archives, RMAN backups pieces or image copies, flashback logs).


Select * from v$recovery_area_usage;

FILE_TYPE               PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES     CON_ID

----------------------- ------------------ ------------------------- --------------- ----------

CONTROL FILE                             0                         0               0          0

REDO LOG                                 0                         0               0          0

ARCHIVED LOG                         73.53                     73.53             282          0

BACKUP PIECE                           .51                       .51               3          0

IMAGE COPY                               0                         0               0          0

FLASHBACK LOG                            0                         0               0          0

FOREIGN ARCHIVED LOG                     0                         0               0          0

AUXILIARY DATAFILE COPY                  0                         0               0          0


8 rows selected.


or 


SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;


FILE_TYPE               PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES     CON_ID

----------------------- ------------------ ------------------------- --------------- ----------

CONTROL FILE                             0                         0               0          0

REDO LOG                                 0                         0               0          0

ARCHIVED LOG                         73.53                     73.53             282          0

BACKUP PIECE                           .51                       .51               3          0

IMAGE COPY                               0                         0               0          0

FLASHBACK LOG                            0                         0               0          0

FOREIGN ARCHIVED LOG                     0                         0               0          0

AUXILIARY DATAFILE COPY                  0                         0               0          0


8 rows selected.


Check Size, usage, Reclaimable space used 


SQL>SELECT ROUND((A.SPACE_LIMIT / 1024 / 1024 / 1024), 2) AS FLASH_IN_GB, ROUND((A.SPACE_USED / 1024 / 1024 / 1024), 2) AS FLASH_USED_IN_GB,ROUND((A.SPACE_RECLAIMABLE/1024/1024/1024), 2) AS FLASH_RECLAIMABLE_GB,SUM(B.PERCENT_SPACE_USED)  AS PERCENT_OF_SPACE_USED

FROM  V$RECOVERY_FILE_DEST A,  V$FLASH_RECOVERY_AREA_USAGE B GROUP BY  SPACE_LIMIT,   SPACE_USED ,   SPACE_RECLAIMABLE ;


FLASH_IN_GB FLASH_USED_IN_GB FLASH_RECLAIMABLE_GB PERCENT_OF_SPACE_USED

----------- ---------------- -------------------- ---------------------

120         88.85            88.85                74.04


As per above output FRA usage 74.04%


We have three scenarios to fix FRA issue.


1. We can increase FRA space if we have sufficient free disk space :

Check FRA disk free space with below select statement

SQL> select NAME,TOTAL_MB/1024,FREE_MB/1024 from v$asm_diskgroup;

NAME                           TOTAL_MB/1024 FREE_MB/1024

------------------------------ ------------- ------------

DATA                                    1000   303.550781

FRA                                      200   109.339844

REDO                                      60   47.4726563

or

[grid@Ora11gOra11g ~]$ asmcmd

ASMCMD> lsdg

State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name

MOUNTED  EXTERN  N         512             512   4096  4194304   1024000   310836                0          310836              0             N  DATA/

MOUNTED  EXTERN  N         512             512   4096  4194304    204800   111964                0          111964              0             N  FRA/

MOUNTED  EXTERN  N         512             512   4096  4194304     61440    48612                0           48612              0             N  REDO/


As per above output we have free space approx 109GB, So we are good to increase FRA with below syntax


SQL> ALTER SYSTEM SET db_recovery_file_dest_size=140G scope=both;


System altered.



Now check FRA Usage after increasing.


SQL> Select space_limit/1024/1024/1024 TOTAL_GB,space_used/1024/1024/1024 USED_GB from v$recovery_file_dest;


TOTAL_GB    USED_GB

---------- ----------

140 88.8515625



SQL>  Select x.*,round(100 * (x.SPACE_USED/x.SPACE_LIMIT), 3) fra_pct_used from v$recovery_file_dest x;

NAME     SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES   CON_ID     FRA_PCT_USED

-----    ----------- ---------- ----------------- ---------------   ---------- ----------

+FRA     1.2885E+11  9.5404E+10 9.5404E+10        285               0           62.043


2. Change the FRA to a new location, new archives will be created to this new location:


SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/backup/archive' scope =both;


System Altered.


Now check FRA location after changing


NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      /backup/archive

db_recovery_file_dest_size           big integer 120G


3. Deleting Old archive logfiles to reclaim FRA space.


Check backup of database+archivelogs backup atleast for one week with below select statement, If all backups are successfull and valid backups then we can remove old archive logfiles to reclaim space.


set linesize 400

col output_bytes_display form a15

col input_bytes_display form a15

col STATUS form a25

col time_taken_display form a10

col INPUT_BYTES_PER_SEC_DISPLAY form a15

col OUTPUT_BYTES_PER_SEC_DISPLAY form a17

col input_rate_per_sec form a20

col output_rate_per_sec form a20

select session_key,

input_type,

status,

to_char(start_time,'yyyy-mm-dd hh24:mi') start_time,

to_char(end_time,'yyyy-mm-dd hh24:mi') end_time,

input_bytes_display,

output_bytes_display,

--INPUT_BYTES_PER_SEC_DISPLAY as input_rate_per_sec,

OUTPUT_BYTES_PER_SEC_DISPLAY as output_rate_per_sec,

time_taken_display

from v$rman_backup_job_details

order by session_key asc;


As per above output backup is successfull, Connect rman prompt and remove old archive log files


RMAN>delete noprompt archivelog until time 'sysdate-7' backed up 1 times to device type disk;


or 


Manually delete from ASM command prompt



Note:Not recomended approach since by deleting manually it won't release space we need to run (CROSSCHECK ARCHIVELOG ALL command from RMAN to release space)


ASMCMD> pwd

+FRA/ORADBA/ARCHIVELOG

ASMCMD> ls

2020_02_19/

2020_02_20/

2020_02_21/

2020_02_22/

2020_02_23/

2020_02_24/

2020_02_25/

2020_02_26/


ASMCMD>cd 2020_02_19/

ASMCMD>rm *.arc

ASMCMD> ..

ASMCMD> ls

2020_02_20/

2020_02_21/

2020_02_22/

2020_02_23/

2020_02_24/

2020_02_25/

2020_02_26/


After removing old archive logfile with retention of 7 days check current FRA usage.


SQL> Select space_limit/1024/1024/1024 TOTAL_GB,space_used/1024/1024/1024 USED_GB from v$recovery_file_dest;


TOTAL_GB    USED_GB

---------- ----------

120 73.8515625


Check the fra usage in percentage with below select statement


SQL>  Select x.*,round(100 * (x.SPACE_USED/x.SPACE_LIMIT), 3) fra_pct_used from v$recovery_file_dest x;


NAME     SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES   CON_ID     FRA_PCT_USED

-----    ----------- ---------- ----------------- ---------------   ---------- ----------

+FRA     1.2885E+11  9.5404E+10 9.5404E+10        285               0           62.043


Drop Disk :

SQL> select name,total_mb/1024,free_mb/1024 from v$asm_diskgroup;

NAME                           TOTAL_MB/1024 FREE_MB/1024

------------------------------ ------------- ------------

DATA                                    1300       58.125

FRA                                      400   393.566406

REDO                                      210   204.66796875


SQL> set linesize 400

col path for a35

select name,group_number,disk_number,header_status,mode_status,state,os_Mb/1024,total_mb/1024,free_mb/1024,path from v$asm_disk;


select name,total_mb/1024,free_mb/1024 from v$asm_diskgroup;SQL> SQL>

NAME                           GROUP_NUMBER DISK_NUMBER HEADER_STATU MODE_ST STATE    OS_MB/1024 TOTAL_MB/1024 FREE_MB/1024 PATH

------------------------------ ------------ ----------- ------------ ------- -------- ---------- ------------- ------------ -----------------------------------

REDO_0001                                 3           1 MEMBER       ONLINE  NORMAL          200           200   194.945313 /dev/oracleasm/asm11

DATA_0006                                 1           6 MEMBER       ONLINE  NORMAL          200           200   8.94921875 /dev/oracleasm/asm10

REDO_0000                                 3           0 MEMBER       ONLINE  NORMAL           10            10    9.7109375 /dev/oracleasm/asm09

DATA_0000                                 1           0 MEMBER       ONLINE  NORMAL          100           100   4.48046875 /dev/oracleasm/asm01

FRA_0001                                  2           1 MEMBER       ONLINE  NORMAL          200           200   196.773438 /dev/oracleasm/asm05

FRA_0000                                  2           0 MEMBER       ONLINE  NORMAL          200           200   196.792969 /dev/oracleasm/asm04

DATA_0004                                 1           4 MEMBER       ONLINE  NORMAL          200           200    8.9296875 /dev/oracleasm/asm07

DATA_0002                                 1           2 MEMBER       ONLINE  NORMAL          200           200   8.96484375 /dev/oracleasm/asm03

DATA_0001                                 1           1 MEMBER       ONLINE  NORMAL          200           200    8.9296875 /dev/oracleasm/asm02

DATA_0003                                 1           3 MEMBER       ONLINE  NORMAL          200           200   8.93359375 /dev/oracleasm/asm06

DATA_0005                                 1           5 MEMBER       ONLINE  NORMAL          200           200       8.9375 /dev/oracleasm/asm08


11 rows selected.


NAME                           TOTAL_MB/1024 FREE_MB/1024

------------------------------ ------------- ------------

DATA                                    1300       58.125

FRA                                      400   393.566406

REDO                                     210    204.65625


SQL> alter diskgroup REDO drop disk REDO_0001;


Diskgroup altered.



SQL> select name,total_mb/1024,free_mb/1024 from v$asm_diskgroup;

NAME                           TOTAL_MB/1024 FREE_MB/1024

------------------------------ ------------- ------------

DATA                                    1300       58.125

FRA                                      400   393.566406

REDO                                      10   4.66796875








Find max changes during high archive:

-------------------------------------

 SELECT to_char(begin_interval_time,'YYYY_MM_DD HH24:MI') snap_time, 

        dhsso.object_name, 

        sum(db_block_changes_delta) as maxchages 

  FROM dba_hist_seg_stat dhss, 

         dba_hist_seg_stat_obj dhsso, 

         dba_hist_snapshot dhs 

  WHERE dhs.snap_id = dhss.snap_id 

    AND dhs.instance_number = dhss.instance_number 

    AND dhss.obj# = dhsso.obj# 

     AND dhss.dataobj# = dhsso.dataobj# 

    AND begin_interval_time BETWEEN to_date('2020_03_20 09','YYYY_MM_DD HH24') 

                                           AND to_date('2020_03_20 12','YYYY_MM_DD HH24') 

  GROUP BY to_char(begin_interval_time,'YYYY_MM_DD HH24:MI'), 

           dhsso.object_name order by maxchages asc; 

   


UNDO History:

-------------

select   sql_text from dba_hist_sqltext where  sql_id in  (select distinct maxquerysqlid from  (select * from (select  snap_id, maxquerylen,  undoblks, maxquerysqlid,

to_char(begin_time,?yyyy/mm/dd hh24:mi?) begin,   to_char(end_time,?yyyy/mm/dd hh24:mi?) end from  dba_hist_undostat  order by  undoblks desc,   maxquerylen desc)

   where rownum<11

  )

);




RMAN FULL, INCRMENTAL AND ARCHIVELOG BACKUP

set linesize 400

col START_TIME for a20

col END_TIME for a20

col output_bytes_display form a15

col input_bytes_display form a15

col STATUS form a25

col time_taken_display form a10

col INPUT_BYTES_PER_SEC_DISPLAY form a15

col OUTPUT_BYTES_PER_SEC_DISPLAY form a17

col input_rate_per_sec form a20

col output_rate_per_sec form a20

select session_key,

input_type,

status,

to_char(start_time,'yyyy-mm-dd hh24:mi') start_time,

to_char(end_time,'yyyy-mm-dd hh24:mi') end_time,

input_bytes_display,

output_bytes_display,

--INPUT_BYTES_PER_SEC_DISPLAY as input_rate_per_sec,

OUTPUT_BYTES_PER_SEC_DISPLAY as output_rate_per_sec,

time_taken_display

from v$rman_backup_job_details

order by session_key asc;





SQL taking more PGA


********************


select SQL_ID,round(PGA_MB,1) PGA_MB,percent,rpad('*',percent*10/100,'*') star

from

(

select SQL_ID,sum(DELTA_PGA_MB) PGA_MB ,(ratio_to_report(sum(DELTA_PGA_MB)) over ())*100 percent,rank() over(order by sum(DELTA_PGA_MB) desc) rank

from

(

select SESSION_ID,SESSION_SERIAL#,sample_id,SQL_ID,SAMPLE_TIME,IS_SQLID_CURRENT,SQL_CHILD_NUMBER,PGA_ALLOCATED,

greatest(PGA_ALLOCATED - first_value(PGA_ALLOCATED) over (partition by SESSION_ID,SESSION_SERIAL# order by sample_time rows 1 preceding),0)/power(1024,2) "DELTA_PGA_MB"

from

dba_hist_active_sess_history

where

IS_SQLID_CURRENT='Y'

and sample_time between to_date('11-jul-2017 16:15','dd-mon-yyyy hh24:mi') and to_date('11-jul-2017 16:30','dd-mon-yyyy hh24:mi')

order by 1,2,3,4

)

group by sql_id

having sum(DELTA_PGA_MB) > 0

)

where rank < (11)

order by rank;



Sizing UNDO


***********

  SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",

       SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",

       (TO_NUMBER(e.value) * TO_NUMBER(f.value) *

       g.undo_block_per_sec) / (1024*1024) 

      "NEEDED UNDO SIZE [MByte]"

  FROM (

       SELECT SUM(a.bytes) undo_size

         FROM v$datafile a,

              v$tablespace b,

              dba_tablespaces c

        WHERE c.contents = 'UNDO'

          AND c.status = 'ONLINE'

          AND b.name = c.tablespace_name

          AND a.ts# = b.ts#

       ) d,

      v$parameter e,

       v$parameter f,

       (

       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))

         undo_block_per_sec

         FROM dba_hist_undostat

       ) g

WHERE e.name = 'undo_retention'

  AND f.name = 'db_block_size';




USEFUL Queries : proc to find number of record in each table


************************************************************


set serveroutput on


spool a.txt





declare


lv_sql varchar2(500);


lv_count number;


lv_owner varchar(30);


lv_tname varchar(30);


cursor  c1 is select owner,table_name from dba_tables where owner like 'ORADBA%';


begin


open c1;


loop 


fetch c1 into lv_owner,lv_tname;


exit when c1%notfound;


-- this query to get the number of record from each table


lv_sql:='select count(*) from ' || lv_owner || '.' || lv_tname;


execute immediate lv_sql INTO lv_count;


dbms_output.put_line ( lv_owner || ',' || lv_tname || ',' || lv_count);


end loop;


close c1;


end;


/





spool off





golden gate commands


--------------------





ps -ef|grep mgr.prm





ggsci





ggsci>info all





STOP EXTRACT group_name





START EXTRACT group_name





start and stop the golden gate process in cluster


*************************************************








D:\app\xag\bin>agctl start goldengate GGATE 





D:\app\xag\bin>agctl stop goldengate GGATE 





this is the command


and you have to check crsctl stat res -t


where 


xag.GGATE-vip.vip


      1        ONLINE  ONLINE       e75l0265                 STABLE 


this is running


gg will start only in the node this is running





to relocate the vip to node2 for gg


***********************************


agctl relocate goldengate GGATE --node e75l0067


run this from D:\app\xag\bin  folder





rman


****





run


{


allocate channel c1 device type disk;


allocate channel c2 device type disk;


sql 'alter system archive log current';


sql 'alter system archive log current';


sql 'alter system archive log current';


backup as compressed backupset full database format 'E:\RMANBACKUP\ORADBADB\%d_%U_%T_%s_%p_Full';


sql 'alter system archive log current';


sql 'alter system archive log current';


sql 'alter system archive log current';


backup format 'E:\RMANBACKUP\ORADBADB\%d_%U_%T_ARCH' archivelog all;


backup format 'E:\RMANBACKUP\ORADBADB\%d_%U_%T_CTL' current controlfile;


release channel c1;


release channel c2;


}





run


{


allocate channel device type sbt


backup plus archivelog


}





RMAN> crosscheck archivelog all;


RMAN> delete noprompt archivelog like '%' backed up 1 times to device type sbt_tape ;











Recovery catalog

****************

on recovery catalog database:

*****************************


CREATE USER ORALNX_ORADBAMAT IDENTIFIED BY rcatpass TEMPORARY TABLESPACE temp DEFAULT TABLESPACE RMAN_LINUX account unlock;

GRANT RECOVERY_CATALOG_OWNER TO ORALNX_ORADBAMAT;

GRANT UNLIMITED TABLESPACE to ORALNX_ORADBAMAT;

grant connect,resource to  ORALNX_ORADBAMAT;

exit


Rman>CONNECT CATALOG ORALNX_ORADBAMAT/rcatpass@rmandb

CREATE CATALOG;


on source database:

******************

RMAN> CONNECT catalog ORALNX_ORADBAMAT/rcatpass@rmandb

recovery catalog database Password: password

connected to recovery catalog database

RMAN> REGISTER DATABASE;

database registered in recovery catalog

starting full resync of recovery catalog

full resync complete 



https://heliosguneserol.com/2018/03/22/how-to-monitor-data-pump-job-impdp/