26 October 2015

Basic checks

Hello friends,

Below are the few commands and scripts used for doing some basic checks, when user complains about the slowness/no connectivity/unable to connect to the database. Please note, these are just few of the aspects which you can look into to check the performance/issues in the database. There can be few/many aspects which you need to look into to check/resolve the issues.
*********************************************************************************
Check DB up time, to see whether there was a database bounce recently without your knowledge:

col host_name for a20
select host_name,
       instance_name,
       to_char(startup_time, 'dd-mm-yyyy hh24:mi:ss') startup_time,
       floor(sysdate-startup_time) days
from   sys.v_$instance;

*********************************************************************************
Check the listener status

lsnrctl status LISTENER_NAME

*********************************************************************************
Check if the mount points are full

df -h

*********************************************************************************
Check the alert log for errors:

SQL> show parameter background_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /oracle/admin/cpowerp2/bdump

open the log and search for errors

*********************************************************************************
To kill a session:

alter system kill session '88,20708' immediate;
*********************************************************************************
The Linux top command is an interactive utility that displays a character-based screen of all processes running on the current system. The screen updates itself every few seconds, and you can sort the screen contents by characteristics like CPU Usage or Memory Use.

top

It will show information like tasks, memory, cpu and swap. Press 'ctrl+c' to quit window.

Press (Shift+O) to Sort field via field letter, for example press 'a' letter to sort process with PID (Process ID). Press 'ctrl+c' to quit exit the window.

Use top command with 'u' option will display specific User process details.

top -u oracle

Press 'z' option in running top command will display running process in color which may help you to identified running process easily.

Press 'c' option in running top command, it will display absolute path of running process.

By default screen refresh interval is 3.0 seconds, same can be change pressing 'd' option in running top command and change it as desired.

You can kill a process after finding PID of process by pressing 'k' option in running top command without exiting from top window.

Press (Shift+P) to sort processes as per CPU utilization.

You can use 'r' option to change the priority of the process.

Press (Shift+W) to save the running top command results under /root/.toprc.

Press 'h' option to obtain the top command help.

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

To check which mode, role, the database is at present.

select name,open_mode, database_role from v$database;

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

Check Tablespace details

select a.tablespace_name,a.allocated, b.freespace,round(b.freespace/a.allocated*100) "% free" from
(select tablespace_name ,sum(bytes)/1024/1024/1024 allocated from dba_data_files group by tablespace_name) a,
(select tablespace_name,sum(bytes)/1024/1024/1024 freespace from dba_free_space group by tablespace_name) b
where a.tablespace_name=b.tablespace_name order by 4;

*********************************************************************************
Check the archive location, if the archive destination is full(please note, the check is different when you have FRA as archive destination)

SQL> archive log list
Database log mode                   Archive Mode
Automatic archival                   Enabled
Archive destination                  /archive/oradata/cpowerp2/archive
Oldest online log sequence      346812
Next log sequence to archive   346814
Current log sequence               346814

exit the sqlplus environment, on the OS level, check using below command:

[oracle@GCPLINCIN1CPW01 ~]$ df -h /archive/oradata/cpowerp2/archive
Filesystem                                   Size    Used   Avail    Use%     Mounted on
/dev/mapper/emcvg4-archive      92G    42G    46G      48%       /archive

If your archive destination is full, the database will not allow connections to the database and the users will get the "ORA-00257: archiver error. Connect internal only, until freed" message.

clear the archive destination by taking archive log backups and switch logfile.

The "ALTER SYSTEM SWITCH LOGFILE" does not wait for the archiver process (ARCH) to complete writing the online redo log to the archivelog log filesystem:

It issues database checkpoint
It immediately starts writing to the next redo log
In the background, the "switch logfile" command tells the ARCH background process to copy the "old" redo log file to the redo log filesystem.

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

Check the datafile size and details.

col file_name for a25
set lines 200

select   substr (df.name, 1, 40) file_name, df.bytes / 1024 / 1024 "allocated size(mb)",
         ((df.bytes / 1024 / 1024) - nvl (sum (dfs.bytes) / 1024 / 1024, 0)) "used size (mb)",
         nvl (sum (dfs.bytes) / 1024 / 1024, 0) "free size(mb)"
    from v$datafile df, dba_free_space dfs
   where df.file# = dfs.file_id(+)
group by dfs.file_id, df.name, df.file#, df.bytes
order by file_name;

Check the datafiles of a particular tablespace

select sum(bytes)/1024/1024/1024,file_name from dba_data_files where tablespace_name='SYSAUX' group by file_name;

*********************************************************************************
To check the sql for a particular SID:

select sid,username,machine,program,logon_time from v$session where sid=496;

--------------------------------
to find the query depends on sid :
--------------------------------

select a.sql_text
from v$sqltext a,
v$session b
where a.address = b.sql_address
and a.hash_value = b.sql_hash_value
and b.sid = &1 --> from above sql
order by a.piece;

*********************************************************************************
To check the session counts and the username connected to the database:

select username,status,count(*) from v$session group by username,status;

*********************************************************************************
Long running queries:

select * from v$session_longops where time_remaining>0;

select sid, serial#, opname, target, sofar, totalwork, units,
to_char(start_time,'dd/mon/yyyy hh24:mi:ss') start_time,
to_char(last_update_time,'dd/mon/yyyy hh24:mi:ss') last_update_time,
time_remaining, elapsed_seconds, message, username
from v$session_longops
where time_remaining != 0;

select s.username,s.type,s.sid,s.serial#,s.last_call_et seconds_running,q.sql_text from v$session s
join v$sql q
on s.sql_id = q.sql_id
 where status='ACTIVE'
 and type <> 'BACKGROUND'
 and last_call_et> 60
order by sid,serial#;

*********************************************************************************
Check the lock:

select * from v$lock where block > 0;

select * from dba_2pc_pending;

select * from dba_blockers;

select * from v$resource_limit;

*********************************************************************************
select event,count(*) from v$session_event group by event;
*********************************************************************************
select local_tran_id,state from dba_2pc_pending where state='prepared';
*********************************************************************************
alter system flush buffer_cache;

alter system flush shared_pool;
*********************************************************************************

No comments:

Post a Comment