Oracle Notes

This is my Notes as an Oracle DBA over several years

Last updated on 3rd June 2010

current release number : SELECT * FROM PRODUCT_COMPONENT_VERSION;

Password fifle:
--------------
ORAPWD FILENAME="<feilename>" PASSWORD="<password>" ENTRIES="<Maximum number of users>"
follow name format: orapw$ORACLE_SID
when you grant sysdba or sysoptr privilage to a user automatically his entry will be added to
the password file.for enabling the remote login you have to set the initial parameter REMOTE_LOGIN_ PASSWORDFILE
to EXCLUSIVE or sHARED

define _editor=vi

create user jobin identified by jobin123 default tablespace USERS temporary tablespace TEMP
grant connect,resource,dba to jobin;

or you can give only selected privilages like:
grant create session to jobin;
grant create table to jobin;

you can allocate quota on a tablespace for the user like:
alter user jobin quota unlimited on USERS;
or
alter user jobin quota 100M on USERS;

dba can view the allocated quotas:
select * from dba_ts_quotas;

--alter the password
alter user jobin identified by xxxxxx;

--directory information
select DIRECTORY_NAME,OWNER,DIRECTORY_PATH from dba_directories;

Setting up a oracle database.
-----------------------------
1)Deside on SID

>setenv ORACLE_SID <sid>             //windows
or
>export ORACLE_SID=<sid>            //*ix

this sid should match the DB_NAME initialization parameter.

Create a initialization parameter file
--------------------------------------
store this file in the default location, otherwise at the time of starting up the database, you may have to specify
the PFILE= parameter

in unix platforms the filename will be init$ORACLE_SID.ora (ex. initdemodb.ora) and the default location will be $ORACLE_HOME/dbs

Connect to Instance
-------------------
Start SQL*Plus and connect to your Oracle instance AS SYSDBA.

$ SQLPLUS /nolog
CONNECT SYS/password AS SYSDBA

OS AUTHENTIFICATION
-------------------
create user "OPS$AMERICAS\JOBIN_AUGUSTINE" IDENTIFIED BY EXTERNAL;
grant connect to "OPS$AMERICAS\JOBIN_AUGUSTINE";

Startup the database without mounting the database
--------------------------------------------------
>STARTUP NOMOUNT

Installing Oracle Clusterware
------------------------------
important : A single Oracle Inventory group is requied for all installations of Oracle software on the system.
if this is not exisiting, that means you are fist time installing oracle software.

to check whether you have inventory (installed oracle software) in your system.
$>more /etc/oraInst.loc //this file contains the inventory location and inventory group
OSDBA group (typically, dba)
$>/usr/sbin/groupadd dba
OSOPER group (typically, oper) //this group is optional.
$>/usr/sbin/groupadd oper
unprivilaged user (typically, nobody) this "nobody" user owns the external jobs executables after installation
Oracle Invenentory group (typically, oinstall) //this group owns the oracle inventory
$>/usr/sbin/groupadd oinstall

Oracle Software owner user (typically, oracle) //this user owns all the oracle software, must have Oracle Inventory group as primary group  and OSDBA and OSOPER groups as secondary groups.
$>id oracle    //to check whether oracle user is already present
$>/usr/sbin/useradd -u 200 -g oinstall -G dba[,oper] oracle //-u specifies the user id for the user, if you did not specify this, system will generate one for you but you should be noteing it.
//-g specifies the primary group
//-G specifies the secondary group(s)
$>passwd oracle
if user is created with wrong settings, you can modify like:
$>/usr/sbin/usermod -g oinstall -G dba[,oper] oracle
$>id nobody  //verify that nobody is existing
$>/usr/sbin/useradd nobody

Need to have user setup in other nodes also in the same way. even the IDs should match.
$>id oracle //find out the details of oracle user say, uid=440(oracle) gid=200(oinstall) groups=201(dba),2002(oper)
$>/usr/sbin/groupadd -g 200 oinstall
$>/usr/sbin/groupadd -g 201 dba
$>/usr/sbin/groupadd -g 202 oper
$>/usr/sbin/useradd -u 440 -g oinstall -G dba[,oper] oracle
$>passwd oracle





Create Database
----------------
Issue the create database statement.
since it is difficult to remember all the parameters of the create statment, it is better to copy form some standard files.
this statment specifies the following things:
1. Database name
2. the SYS and SYSTEM user passwords.
3. There control file locations.
4. Log files (Redo logs)
5. Default temporary table space.
6. Default undo tablespace.
7. and other limits as paramenters. (these are restricted by operating system. so you may not be able to reach the theoretical maximum
as you specified in the parameter file)

Creating additional table space
-------------------------------
You need to create additional table space for users.

fist connect as sysdba
>CONNECT SYS/password AS SYSDBA

then issue the create tablespace command
>CREATE TABLESPACE users LOGGING
     DATAFILE '/vobs/oracle/oradata/mynewdb/users01.dbf'
     SIZE 25M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED
     EXTENT MANAGEMENT LOCAL

\Run the scripts to Build Data Dictionary views
----------------------------------------------
CONNECT SYS/password AS SYSDBA
@/vobs/oracle/rdbms/admin/catalog.sql
@/vobs/oracle/rdbms/admin/catproc.sql
EXIT
Create server parameter file (recommended)
------------------------------------------
server parameter file is used for dynamic means of maintaining initialization parameter.

> CONN SYS/PASSWORD AS SYSDBA

> CREATE SPFILE='/vobs/oracle/dbs/spfilemynewdb.ora' FROM
       PFILE='/vobs/oracle/admin/mynewdb/scripts/init.ora';

>SHUTDOWN

Next time you start up, using the server parameter file

Using automatic undo management
-------------------------------
oracle recomends to use undo tablespace instead of rollback segment.

Automatic Shared Memory Management-10g onwards
----------------------------------
Enabling:- specify the SGA_TARGET (cannot excced SGA_MAX_SIZE) and set inividual values to 0
>alter system set sga_target = 500M scope=both;
>alter system set shared_pool_size = 0 scope=both;
>alter system set large_pool_size = 0 scope=both
>alter system set java_pool_size = 0 scope=both
>alter system set db_cache_size = 0  scope=both

minimum size of that pool can be specified by values for the pool instead of 0.
alter system set large_pool_size = 16M;

On most OS (with rare exception) , Oracle will allocate memory from OS equal to the SGA_MAX_SIZE at startup.
SGA_TARGET is how much you want to assign to automatic memory management.
The difference between SGA_TARGET and SGA_MAX_SIZE will be reported as Free SGA Memory Available from

New background process Memory manager (MMAN) does the job.

select * from v$sgainfo;




Tablespace.. Block information
------------------------------

-- space usage (per tablespace)
---------------------------------------------------------------------------
set pages 200
col tablespace format a30
col total_sp format 999.9999
col free_sp format 999.9999
col used_sp format 999.9999
col max_sp format 999.9999
SELECT  total.tablespace_name tablespace,
        total.total_sp  total_sp,
        free.free_sp free_sp,
        (total.total_sp - free.free_sp) used_sp,
    total.max_sp
FROM 
(
SELECT  tablespace_name,
        sum(bytes/1024/1024/1024) total_sp,
    sum(MAXBYTES/1024/1024/1024) max_sp
FROM    dba_data_files
GROUP BY tablespace_name ) total,
(
SELECT  tablespace_name,
        sum(bytes/1024/1024/1024) free_sp
FROM    dba_free_space
GROUP BY tablespace_name ) free
WHERE  free.tablespace_name = total.tablespace_name
/

try this also:-
set lines 200
set pages 2000
col tablespace_name format a15 head Tablespace
col file_name format a60 head DataFileName
col cursize form 999.99 heading "CurrSize|GB"
col maxsize form 999.99 heading "MaxSize|GB"
col Autoextensible form a4 heading Auto
break on tablespace_name
compute sum label Total of cursize maxsize on tablespace_name
select     tablespace_name,
    FILE_ID,file_name,
    bytes/1024/1024/1024 cursize,
    maxbytes/1024/1024/1024 maxsize,
    autoextensible
from     dba_data_files
where     tablespace_name in (select distinct tablespace_name from dba_data_files)
order by tablespace_name
/



--Total Database size
SELECT  sum(total.total_sp)  total_sp,
        sum(free.free_sp) free_sp,
        sum(total.total_sp - free.free_sp) used_sp
FROM 
(
SELECT  tablespace_name,
        sum(bytes/1024/1024/1024) total_sp
FROM    dba_data_files
GROUP BY tablespace_name ) total,
(
SELECT  tablespace_name,
        sum(bytes/1024/1024/1024) free_sp
FROM    dba_free_space
GROUP BY tablespace_name ) free
WHERE  free.tablespace_name = total.tablespace_name
/

select df.file_id,df.file_name,df.bytes/1024/1024,df.autoextensible,fs.free_space from dba_data_files df,
    (select file_id,sum(bytes)/1024/1024 free_space from dba_free_space group by file_id having sum(bytes)/1024/1024 >1000) fs
   where df.file_id=fs.file_id;

--growth of database
select to_char(creation_time, 'RRRR Month') "Month", sum(bytes)/1024/1024/1024 "Growth in GB"
  from sys.v_$datafile
  where creation_time > SYSDATE-365
  group by to_char(creation_time, 'RRRR Month')
  order by (to_date(to_char(creation_time, 'RRRR Month'),'RRRR Month'))

col file_name format a60
SELECT FILE_NAME,FILE_ID,BYTES/1024/1024 MB,AUTOEXTENSIBLE AS AUTO FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'TRANS_DATA01';

--segments consuming space in a tablespace
select segment_name,segment_type,sum(bytes)/1024/1024/1024 from dba_segments where TABLESPACE_NAME = 'PRODDTAT'
group by segment_name,segment_type
order by 3 desc

TEMP USAGE
------------
select TABLESPACE_NAME,FILE_ID, BYTES_USED/1024/1024 MB_USED, BYTES_FREE/1024/1024 MB_FREE from V$TEMP_SPACE_HEADER;

SELECT s.sid "SID",s.username "User",s.program "Program", u.tablespace "Tablespace",
u.contents "Contents", u.extents "Extents", u.blocks*8/1024 "Used Space in MB", q.sql_text "SQL TEXT",
a.object "Object", k.bytes/1024/1024 "Temp File Size"
FROM v$session s, v$sort_usage u, v$access a, dba_temp_files k, v$sql q
WHERE s.saddr=u.session_addr
and s.sql_address=q.address
and s.sid=a.sid and u.tablespace=k.tablespace_name;

select tablespace_name,extent_size,total_extents,total_blocks,max_size,max_blocks from v$sort_segment;
SELECT tablespace_name, file_id, block_id, BYTES / 1024 / 1024, owner  FROM v$temp_extent_map;
or
SELECT tablespace_name, file_id,count(*) from v$temp_extent_map group by tablespace_name,file_id;

alter database tempfile 3 resize 5G;
alter database tempfile 3 autoextend on;
Resize datafile.
----------------
alter database datafile 7 resize 100M   //here 7 is the file_id


--REM Size per datafile size (there are os level limitation like 32GB for a single file)
----------------------------------------------------------------------------------
col tablespace_name format a10 head Tablespace
col file_name format a20 head DataFileName
col cursize form 999.99 heading "CurrSize|GB"
col maxsize form 999.99 heading "MaxSize|GB"
col Autoextensible form a4 heading Auto
break on tablespace_name
compute sum label Total of cursize maxsize on tablespace_name
select     tablespace_name,
    file_name,
    bytes/1024/1024/1024 cursize,
    maxbytes/1024/1024/1024 maxsize,
    autoextensible
from     dba_data_files
where     tablespace_name = '&NM'
/

clear columns
clear breaks


Automatic Segment Space Management(ASSM)-10g onwards
----------------------------------
you can shrink segments.

find out the candiate for shrink using the query.

--reclaimable space in objects

Set linesize 120
col owner for a15
col table_name for a24
col tablespace_name for a20
select t.owner,t.table_name, s.tablespace_name,
round(s.bytes/1024/1024) actual_MB,
round((t.num_rows+1) * t.avg_row_len/1024/1024) optimal_MB,
round(s.bytes/1024/1024) -
round((t.num_rows+1) * t.avg_row_len/1024/1024) CLAIMABLE_MB
from dba_tables t, dba_segments s
where t.owner = s.owner
and t.table_name = s.segment_name
and round(s.bytes/1024/1024) - round((t.num_rows+1) * t.avg_row_len/1024/1024) > 200
order by 1,3,5 desc


SQL> set serveroutput on
SQL> declare
            v_unformatted_blocks number;
            v_unformatted_bytes number;
            v_fs1_blocks number;
            v_fs1_bytes number;
            v_fs2_blocks number;
            v_fs2_bytes number;
            v_fs3_blocks number;
            v_fs3_bytes number;
           v_fs4_blocks number;
           v_fs4_bytes number;
           v_full_blocks number;
           v_full_bytes number;
begin
    dbms_space.space_usage ('<SCHEMA_NAME>', '<SEGMENT_NAME>', '<SEGMENT TYPE like TABLE|INDEX|TABLE PARTITION>', v_unformatted_blocks,
    v_unformatted_bytes, v_fs1_blocks, v_fs1_bytes, v_fs2_blocks, v_fs2_bytes,
    v_fs3_blocks, v_fs3_bytes, v_fs4_blocks, v_fs4_bytes, v_full_blocks, v_full_bytes);
    dbms_output.put_line('Unformatted Blocks = '||v_unformatted_blocks);
    dbms_output.put_line('Blocks with 0-25% free space = '||v_fs1_blocks);
    dbms_output.put_line('Blocks with 25-50% free space = '||v_fs2_blocks);
    dbms_output.put_line('Blocks with 50-75% free space = '||v_fs3_blocks);
    dbms_output.put_line('Blocks with 75-100% free space  = '||v_fs4_blocks);
    dbms_output.put_line('Full Blocks = '||v_full_blocks);
end;
/


declare
    m_total_blocks        number;
    m_total_bytes        number;
    m_unused_blocks        number;
    m_unused_bytes        number;
    m_last_ext_file_id    number;
    m_last_ext_block_id    number;
    m_last_used_block    number;

begin

    dbms_space.unused_space(
        segment_owner    => 'REMAP',
        segment_name    => 'ORDER_DETAILS',
        segment_type    => 'table',
        total_blocks    => m_total_blocks,
        total_bytes    => m_total_bytes,
        unused_blocks    => m_unused_blocks,
        unused_bytes    => m_unused_bytes,
        last_used_extent_file_id    => m_last_ext_file_id,
        last_used_extent_block_id    => m_last_ext_block_id,
        last_used_block            => m_last_used_block,
        partition_name    => null
    );

    dbms_output.put_Line(
        'Allocated blocks: ' || m_total_blocks || ' ' ||
        'Used blocks: ' || (m_total_blocks - m_unused_blocks)
    );
    dbms_output.put_Line(
        'Allocated Bytes: ' || m_total_bytes || ' ' ||
        'Used Bytes: ' || (m_total_bytes - m_unused_bytes)
    );
end;
/

/* another verificaion checking whether BOOKING table in ARUP schema can be shrinked to 1300000 bytes or not*/
begin
   if (dbms_space.verify_shrink_candidate
         ('ARUP','BOOKINGS','TABLE',1300000)
   ) then
       :x := 'T';
   else
       :x := 'F';
   end if;
end;
/

shrinking tables after identifing the right candidate.

alter table <table_name> row movement;
in single step> alter table <table_name> shrink space;
in 2 steps > alter table <table_name> shrink space compact;
       > alter table <table_name> shrink space;

shrink datafile
----------------
set verify off
column file_name format a50 word_wrapped
column smallest format 999,990 heading "Smallest|Size|Poss."
column currsize format 999,990 heading "Current|Size"
column savings  format 999,990 heading "Poss.|Savings"
break on report
compute sum of savings on report

column value new_val blksize
select value from v$parameter where name = 'db_block_size'
/

select file_name,
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
       ceil( blocks*&&blksize/1024/1024) currsize,
       ceil( blocks*&&blksize/1024/1024) -
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
from dba_data_files a,
     ( select file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+)
/

column cmd format a100 word_wrapped

select BYTES/1024/1024,'alter database datafile '''||file_name||''' resize ' ||
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 )  || 'm;' cmd
from dba_data_files a,
     ( select file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+)
  and ceil( blocks*&&blksize/1024/1024) -
      ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
/





KILL SESSIONS
----------------
--new single query to get details
select c.inst_id,a.object_name,a.object_id,a.object_type,'ALTER SYSTEM KILL SESSION '''||c.sid||','||c.serial#||''';',
    c.username,c.osuser,c.Machine,c.program
from dba_objects a,gv$locked_object b,gv$session c
where  a.object_id=b.object_id and
b.session_id = c.sid;

--same as above but with colum formated
set lines 200
set pages 2000
col OBJECT_NAME for a30
col MACHINE for a30
col PROGRAM for a20
col OSUSER for a20
select a.object_name,a.object_id,a.object_type,c.sid,c.username,c.osuser,c.Machine,c.program
from dba_objects a,gv$locked_object b,gv$session c
where  a.object_id=b.object_id and
b.session_id = c.sid;

then kill the session

blocking sessions
-----------------
select s1.INST_ID ||'.'|| s1.username || '@' || s1.machine   || ' ( SID=' || s1.sid || ' )  is blocking '
      || s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status
      from gv$lock l1, gv$session s1, gv$lock l2, gv$session s2
      where s1.sid=l1.sid and s2.sid=l2.sid
      and l1.BLOCK=1 and l2.request > 0
      and l1.id1 = l2.id1
      and l2.id2 = l2.id2 ;

--finding out unused sessions (sessions which is not giving anything to database)

select nvl(username,'<Internal>') username,program,
osuser, sid||', '||serial# "SS", to_char(logon_time, 'mm/dd/yyyy hh24:mi:ss') "LOGON_TIME",
to_char(trunc(last_call_et/3600,0))||' '||' HRS '||
to_char(trunc((last_call_et - trunc(last_call_et/3600,0)*3600) / 60,0))|| ' MINS' "LAST_CALL"
from v$session;

--cas user pageserver
SELECT 'ALTER SYSTEM KILL SESSION'''||sid||','||serial#||''';' FROM V$SESSION WHERE USERNAME LIKE 'CAS_USR' and PROGRAM LIKE 'page%'

--kill process
SELECT s.INST_ID, 'kill -9 ' || p.spid  FROM gv$session s,gv$process p WHERE
p.addr = s.paddr and p.inst_id = s.inst_id and s.sid = 2024;

Finding out what are the databases running on the server
--------------------------------------------------------
ps -ef | grep pmon
this will give all process monitors running (one for each database).

Finding out a particular table/view/database object.
----------------------------------------------------
select * from all_objects where object_name like '%DBA%PRIV%'

Table Details
-------------
select CONSTRAINT_NAME from dba_constraints where CONSTRAINT_TYPE = 'P' AND table_name='SHIP_CODE_TRANSLATE';
select COLUMN_NAME from dba_cons_columns where CONSTRAINT_NAME = 'SYS_C008336';
select owner,table_name,constraint_name from dba_constraints where r_constraint_name = 'PK_BACKLOG';

select ca.owner,ca.table_name,ca.constraint_name
from dba_constraints ca,dba_cons_columns cb
where ca.r_constraint_name = cb.constraint_name
and ca.r_owner = cb.owner and ca.constraint_type = 'R'
and cb.owner = 'SHIP_USER' and cb.table_name = 'BACKLOG';

see all constraints that point to a table: parent and child
select a.owner,a.table_name,a.constraint_name,b.table_name from dba_constraints a,dba_constraints b
where a.R_CONSTRAINT_NAME=b.CONSTRAINT_NAME and
a.r_owner = 'CORP' and b.owner='CORP' and a.CONSTRAINT_TYPE = 'R' and b.CONSTRAINT_TYPE = 'P'
and b.table_name in ('xxxx')

DISABLE AND ENABLE CONSTRAINT WITHOUT VALIDATIG

alter table GLOBAL_HRDB.DELL_PERS_KEYS modify constraint SYS_C0049668 DISABLE;
alter table GLOBAL_HRDB.DELL_PERS_KEYS modify constraint SYS_C0049668 ENABLE NOVALIDATE;

finding out user roles/previlages
---------------------------------
SELECT * FROM DBA_ROLE_PRIVS ORDER BY GRANTEE

creating keys and indexes
-------------------------
ALTER TABLE <SCHEMA_NAME>.<TABLE_NAME>
ADD CONSTRAINT PK_SETTINGS_FC PRIMARY KEY (FC)
USING INDEX
    INITRAS 20
    TABLESPACE <TABLESPACENAME>;


index rebuild
-------------
ALTER INDEX <shema>.<index> REBUILD [PARTITION <partition>] [TABLESPACE <tablespace>];

ALTER INDEX cost_ix REBUILD PARTITION p2;
ALTER INDEX cost_ix REBUILD PARTITION p3 NOLOGGING;


disabling foreign key constaraints
----------------------
select all foreign key columns like

select constraint_name,status from dba_constraints
where table_name like '%DST'
and constraint_type='R'

form the alter table statment to disable the contraint
spool in to a file
and execute it.

in one step
-----------
set feedback off
set verify off
set echo off
prompt Finding constraints to disable...
set termout off
set pages 80
set heading off
set linesize 120
spool tmp_disable.sql
select 'spool igen_disable.log;' from dual;
select 'ALTER TABLE '||substr(c.table_name,1,35)||
    ' DISABLE CONSTRAINT '||constraint_name||' ;'
from user_constraints c, user_tables u
where c.table_name = u.table_name;
select 'exit;' from dual;
set termout on
prompt Disabling constraints now...
set termout off
@tmp_disable.sql;
exit


Execution plan of a query
--------------------------
>set autotrace on exp

Execution monitoring of a query progress.
----------------------------------------
set lines 200
set pages 2000
col sql_text for a120

select sql_id,sql_text,users_executing from v$sqlarea where users_executing > 0;
select sql_text,address,hash_value,child_number from v$sql where users_executing > 0;
select inst_id,sql_id,sql_text from gv$sqlarea where users_executing > 0;
select PLAN_HASH_VALUE from v$sql where sql_id='brhp13utj5nr4';
--findout full sql statement
select SQL_TEXT from v$sqltext where sql_id = 'apwvsgy9nh16t' ORDER BY PIECE;
or
set head off
set pages 0
set long 9999999
SELECT SQL_TEXT FROM DBA_HIST_SQLTEXT WHERE sql_id = 'apwvsgy9nh16t';

select EXECUTIONS from v$sqlarea where sql_id= 'dwtt8fpn8ydb5';S
select SID,username from gv$session where sql_id= 'crkb4bf9mv3f9';

SELECT s.INST_ID,s.SID,s.serial#,SQL_CHILD_NUMBER,p.spid,s.program FROM gv$session s,gv$process p WHERE
p.addr = s.paddr and p.inst_id = s.inst_id;

SELECT s.INST_ID,s.SID,s.serial#,SQL_CHILD_NUMBER,p.spid,s.program FROM gv$session s,gv$process p WHERE
p.addr = s.paddr and p.inst_id = s.inst_id and  SQL_ID='6bzp5y1nsr62j' and s.INST_ID=3
--OSUSER='ServicePayPlanner';

SELECT 'ALTER SYSTEM KILL SESSION '''||s.SID ||','||s.serial#||''';' FROM gv$session s,gv$process p WHERE
p.addr = s.paddr and p.inst_id = s.inst_id and  SQL_ID='d5fr9h7zf4s67' and s.INST_ID=3

SELECT SID,EVENT,TOTAL_WAITS,TIME_WAITED_MICRO FROM V$SESSION_EVENT WHERE SID in (SELECT SID FROM v$session WHERE SQL_ID='1b0p26k0dbfz7') order by 3;
SELECT SID,EVENT,TOTAL_WAITS,TIME_WAITED_MICRO FROM V$SESSION_EVENT WHERE SID in (SELECT SID FROM v$session WHERE USERNAME = 'GRIDDBA') order by 4;


SELECT B.WAIT_CLASS,SUM(TOTAL_WAITS),SUM(TIME_WAITED_MICRO) FROM V$SESSION_EVENT a,V$EVENT_NAME b WHERE a.EVENT_ID=b.EVENT_ID AND a.SID in
(SELECT SID FROM v$session WHERE SQL_ID='crkb4bf9mv3f9') GROUP BY B.WAIT_CLASS order by 3;

set lines 200
set pages 2000
SELECT B.WAIT_CLASS,SUM(TOTAL_WAITS),SUM(TIME_WAITED_MICRO) FROM V$SESSION_EVENT a,V$EVENT_NAME b WHERE a.EVENT_ID=b.EVENT_ID AND a.SID in
(SELECT SID FROM v$session WHERE USERNAME = 'GRIDDBA') GROUP BY B.WAIT_CLASS order by 3;



SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('a9m4d5v75a75u',0,'ALL'));

session monitoring:
select inst_id,count(*) from gv$session group by inst_id;

set lines 200
set pages 2000
col USERNAME for a25
col OSUSER for a25
col Machine for a30
col program for a30
select INST_ID,SID,USERNAME,OSUSER,Machine,program from gv$session where USERNAME is not null;
select OSUSER,count(*) from gv$session where program not like 'oracle%' group by OSUSER;

Queries executing by current sessions
------------------------------------
select sesion.sid, sesion.username,optimizer_mode,hash_value, address,cpu_time, elapsed_time, sql_text
  from  v$session sesion, v$sqlarea sqlarea
 where sesion.sql_hash_value = sqlarea.hash_value and sesion.sql_address = sqlarea.address
 and sqlarea.users_executing > 0
-- and sqlarea.sql_id = 'd5fr9h7zf4s67'
--   and sesion.username is not null
 order by sesion.USERNAME;
 

the above query may not fetch full sql_text because of the length problem for that use the
following query to fetch full text.

select sesion.sid,sqltext.address,sesion.USERNAME,sql_text,sqltext.piece
  from v$sqltext sqltext, v$session sesion
 where sesion.sql_hash_value = sqltext.hash_value
   and sesion.sql_address    = sqltext.address
   and sesion.username is not null
 order by sesion.username,sesion.sid,sqltext.piece

Status of Session
-----------------
this query shows GETS,READS and CHANGES
if these values are changing the session is working (query is in progress)

select io.sid,s.USERNAME,io.block_gets,io.consistent_gets,io.physical_reads,io.block_changes,io.consistent_changes
from v$sess_io io, v$session s where s.sid = io.sid and s.USERNAME = 'SERVICE_EXPORT';

CPU utilization
---------------
SELECT
    s.sid                sid
  , s.serial#            serial_id
  , s.status             session_status
  , s.username           oracle_username
  , s.osuser             os_username
  , p.spid               os_pid
  , s.program            session_program
  , s.machine            session_machine
  , sstat.value          cpu_value
FROM
    v$process  p
  , v$session  s
  , v$sesstat  sstat
  , v$statname statname
WHERE
      p.addr              = s.paddr
  AND s.sid               = sstat.sid
  AND statname.statistic# = sstat.statistic#
  AND statname.name       = 'CPU used by this session'
ORDER BY cpu_value DESC



export and import databases.
----------------------------
export
>exp "'/ as sysdba'" file=metadata.dmp log=meta.log full=y CONSISTENT=Y statistics=none ROWS=N;
>exp "'/ as sysdba'" file=goal.dmp log=goal.log owner=('GOAL') CONSISTENT=Y statistics=none Feedback=10000 ROWS=N;
>exp "'/ as sysdba'" file=shp.dmp log=shpdt.log TABLES=('SHIPPING.CARRIER_MSG_TYPE','SHIPPING.COD_RATE','SHIPPING.USER_ACTION_CODE','SHIPPING.RS_LANGUAGE','SHIPPING.RS_LOCATION_COUNTRY','SHIPPING.RS_LOCATION_LANGUAGE') statistics=none Feedback=10000
--you can specify OWNER-- list of owner usernames
--better to specify Feedback=10000 for big tables

import
>imp system/password file=filename.dmp log=imp.dmp fromuser=xxx touser=xxx Feedback=10000 ignore=Y
>imp "'/ as sysdba'" file=remap.dmp log=remapimp.log fromuser=REMAP touser=REMAP Feedback=10000 ignore=Y
import only few tables
extract the dump
>gunzip -d 04Feb052130isistxd3.dmp.gz
you will get 04Feb052130isistxd3.dmp
>imp fordba@isistxd3 file=04Feb052130isistxd3.dmp log=imp.log tables=(fd_ctrdtls,fd_ctrothrdtls) fromuser=isis_usr touser=fordba
this will import all data into fordba.

datapump
expdp and impdp
---------------
expdp "'/ as sysdba'" DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=GHRDR_%U.dmp LOGFILE=GHRDR.log SCHEMAS=GHRDR_BI_PREP,GHRDR,GHRDR_PREP exclude=statistics PARALLEL=4
expdp "'/ as sysdba'" DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=TRANS_HRDB%U.dmp LOGFILE=TRANS_HRDB.log SCHEMAS=TRANS_HRDB exclude=statistics PARALLEL=4
expdp "'/ as sysdba'" DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=TRANS_HRDB%U.dmp LOGFILE=TRANS_HRDB.log FULL=Y "EXCLUDE=TABLESPACE,PROFILE,DIRECTORY,statistics,SCHEMA:\"IN ('ARCHIVE_USER','TRANS_HRDB','GLOBAL_HRDB','GLOBAL_INTERFACE_USER','TRANS_HRDD','PERF_DIRECT','GCM_DATA','GCM_APP','COMP','COMP_HIST','SYS','SYSTEM','SYSMAN','RMANUSER','RMAN','EXFSYS','WMSYS','DBSNMP')\"" PARALLEL=4

impdp
-----
impdp "'/ as sysdba'" SCHEMAS=TRANS_HRDB REMAP_SCHEMA=TRANS_HRDB:TRANS_HRDB_DA DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=TRANS_HRDB%U.dmp LOGFILE=import.log  PARALLEL=4
impdp "'/ as sysdba'" SCHEMAS=GHRDR_BI_PREP DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=GHRDR_%U.dmp LOGFILE=import_GHRDR_BI_PREP.log  PARALLEL=4
impdp "'/ as sysdba'" tables=DELL_PERS_KEYS,PERSON_KEYS DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=GHRDR_%U.dmp LOGFILE=import_GHRDR_BI_PREP.log  PARALLEL=4
impdp "'/ as sysdba'" DIRECTORY=DPDUMP_HRDB_DIR1 DUMPFILE=META.dmp SQLFILE=views.sql INCLUDE=TABLE,INDEX
impdp griddba/'grid1234$mega1'

monitor datapump progress
-------------------------
COL owner_name FORMAT a10;
COL job_name FORMAT a20
COL state FORMAT a12
COL operation LIKE owner_name
COL job_mode LIKE owner_name
SELECT owner_name, job_name, operation, job_mode, state, attached_sessions FROM dba_datapump_jobs;
--do above column width settings
COL SID FORMAT 99999
SELECT A.OWNER_NAME,A.JOB_NAME,A.SESSION_TYPE,B.SID,B.SEQ# FROM DBA_DATAPUMP_SESSIONS A,V$SESSION B WHERE A.SADDR = B.SADDR;

select username,opname,target_desc,sofar,totalwork,message from GV$SESSION_LONGOPS where sofar<>totalwork;
or
select opname,sofar,totalwork from GV$SESSION_LONGOPS;

include /exclude objects
set lines 200
set pages 2000
col object_path for a50
col comments for a100
SELECT object_path, comments FROM table_export_objects;

resetting / clearing up the master table for the job
>drop table sys.SYS_EXPORT_FULL_01 purge;
in simple step
SELECT 'DROP TABLE '||OWNER_NAME||'.'||JOB_NAME ||' PURGE;' FROM dba_datapump_jobs WHERE STATE='NOT RUNNING';
for more info
http://arjudba.blogspot.com/2009/05/how-to-cleanup-orphaned-datapump-jobs.html

export to .gz and then import from .gz
--------------------------------------
$mknod unit_mod.dmp p

$gzip  <unit_mod.dmp > unit_mod.dmp.gz &

$exp userid/password file=unit_mod.dmp log=unit_mod.log tables=unit_mod

If you want to import from the zip file follow bellow commands.


gunzip -c < unit_mod.gz > unit_mod.dmp &
imp username/password file=unit_mod.dmp log=impunit_mod.log fromuser=test touser=test

database link
--------------
select OWNER,DB_LINK from dba_db_links
/

create public database link ISISTXD3.WORLD
    connect to FORDBA identified by <password>
    using '<TNSENTRY>';
   
CREATE DATABASE LINK "DCLP.WORLD"
   CONNECT TO "SABA_REPORT_54" IDENTIFIED BY VALUES '050F8FA9BE8B3CB7B4D84D5EA67E7D2F4AC5D75CD07DCE041A'
   USING '(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = aussabaprddb1.us.dell.com)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SID = sabap)
  )
)'

update one table using data from another table.
---------------------------------------------
UPDATE ISIS_USR.ED_TIERDTLS SET INT_MSG_HDR_DTL_NO=(SELECT INT_MSG_HDR_DTL_NO FROM ISIS_USR.ED_WELLTYPEDTLS WHERE     ISIS_USR.ED_WELLTYPEDTLS.INT_WELL_TYPE_NO  = ISIS_USR.ED_TIERDTLS.INT_WELL_TYPE_NO)
WHERE ISIS_USR.ED_TIERDTLS.INT_WELL_TYPE_NO IN (SELECT INT_WELL_TYPE_NO FROM ISIS_USR.ED_WELLTYPEDTLS)


grant quota on tablespace
>alter user isis_usr quota unlimited on ts_isis_data;



rename the database;
-------------------
1. Shutdown database
2. Startup mount
(sid is set to old name)
3. $ nid target=/ dbname=<new database name>
4. Shutdown database
5. Change init.ora/spfile name, i.e.: initnewname.ora
6. Change db_name parameter in init.ora/spfile, i.e.: db_name='newname'
7. Change ORACLE_SID to point to new database name
create password file
>orapwd file='/opt/oracle/product/10.1.0/db_1/dbs/orapw.ora' password=isis
or/and
change the init file parameter to
remote_login_passwordfile=NONE

CREATE spfile FROM pfile='initorabase.ora'

8. Startup mount
9. Alter database open resetlogs
10. Take a backup

CREATE TEMPORARY TABLESPACE temp01 TEMPFILE '/oradata/mytemp_01.tmp' SIZE 20M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp01;   //from 9i onwards

Move files from one location to another
---------------------------------------
shutdown immeidate;
startup mount;
alter database backup controlfile to trace;
shutdown immediate;
--copy all file to new location
--edit init.ora to change the location of the controlfiles
startup mount pfile='.....';
alter database rename <old files> to <new file>;
(except temporary files)
alter database open;
ALTER TABLESPACE TEMP ADD TEMPFILE <new temp file> REUSE;
alter database tempfile <new temp file> online;
alter database tempfile <old temp file> offline;
alter database tempfile <old temp file> drop;

create spfile from pfile='/opt/oracle/admin/isistxsg/pfile/initisistxsg.ora'

Recompile all invalid objects
-----------------------------
Following cammand is for compile all invalid objects for specific schema.
execute DBMS_UTILITY.compile_schema ('SP_USR', FALSE);

For seeing all invalid objects
select 'alter ' || decode(object_type,'PACKAGE BODY','PACKAGE',object_type)|| ' ' || owner || '.'|| object_name || ' compile '  ||
decode(object_type,'PACKAGE BODY',' body;',';') 
from dba_objects
where object_type in ('FUNCTION','PACKAGE','PACKAGE BODY','PROCEDURE','TRIGGER','VIEW')
and status = 'INVALID'
and owner = 'SP_USR'
order by object_type , object_name;

There is also an Oracle supplied script that does this.
The script can be run from an SQL prompt as the user sys. It's found at ORACLE_HOME\rdbms\admin\utlrp.sql
making a database into archivelog mode
--------------------------------------
backup (create pfile from spfile also, because we are going to change parameter)
>ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/ora-home/app/oracle/product/10.1.0/Db_1/dbs/arch' SCOPE=BOTH;
>SHUTDOWN IMMEDIATE;
>STARTUP MOUNT;
>ALTER DATABASE ARCHIVELOG;
>ALTER DATABASE OPEN;

or

SQL> CONNECT sys AS SYSDBA
SQL> STARTUP MOUNT EXCLUSEVE;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ARCHIVE LOG START;
SQL> ALTER DATABASE OPEN;

or

add following lines into init.ora and restart the database;
log_archive_start         = TRUE
log_archive_dest_1        = 'LOCATION=/arch_dir_name'
log_archive_dest _state_1 = ENABLE
log_archive_format        = %d_%t_%s.arc



making database noarchive log mode.
-----------------------------------
startup mount;
alter database noarchivelog;
alter database open;

checking
>archive log list;
switch logfile
>alter system switch logfile;
manually archive filled redologs.
>ALTER SYSTEM ARCHIVE LOG ALL;

changing the archive log destination
------------------------------------
alter system set log_archive_dest_1='location=dgarc2 mandatory valid_for=(online_logfile,all_roles)'  scope=both sid='*';
location="+DATA_1", valid_for=(ONLINE_LOGFILE,ALL_ROLES)
location="+ARCH_1",  valid_for=(ALL_LOGFILES,ALL_ROLES)


tables with row count
---------------------
select 'SELECT '''||TABLE_NAME||''',COUNT(*) FROM '||OWNER||'.'||TABLE_NAME||' HAVING COUNT(*) > 1 ;' from dba_tables where OWNER='ISIS_USR';

SET HEADING OFF
SPOOL C:\TEMP.TXT
--EXEUCTE THE RESULT FROM THE ABOVE RESULT
SPOOL OFF

starting problem
ORA-01102: cannot mount database in EXCLUSIVE mode
       
there are some oracle process running.
>ps -eaf | grep oracle
kill off of them
>make sure that ORACLE_SID is correct

now startup

--Active session history.

select a.sid,cnt,a.username,a.status,a.machine,a.machine,a.PROGRAM,a.osuser
from v$session a,(select session_id,count(*) cnt from v$active_session_history group by session_id) b
where a.sid  = b.session_id
order by cnt desc

SELECT DISTINCT B.USERNAME,C.SQL_TEXT FROM
V$ACTIVE_SESSION_HISTORY A LEFT JOIN DBA_USERS B ON A.USER_ID= B.USER_ID
LEFT JOIN V$SQLAREA C ON A.SQL_ID = C.SQL_ID
WHERE A.USER_ID >25

select * from v$sgastat where name like 'ASH buffers';

select min(sample_time), max(sample_time) from v$active_session_history;

TOP SQL:- follwoing query returns the most active sql in the last minute.

select sql_id, count(*),round(count(*)/sum(count(*)) over (), 2)pctload
from v$active_session_history
where sample_time > sysdate -1/24/60 and session_type <> 'BACKGROUND'
group by sql_id
order by count(*) desc;

TOP IO SQL
select ash.sql_id,USERNAME, count(*)
from v$active_session_history ash, v$event_name evt,
DBA_USERS USR
where ash.sample_time between to_date('12-MAY-2010 23:00:00','DD-Mon-YYYY HH24:MI:SS') AND to_date('13-MAY-2010 01:00:00','DD-Mon-YYYY HH24:MI:SS')
--sysdate - 1/24/60
AND ash.USER_ID = USR.USER_ID
and ash.session_state = 'WAITING' and
ash.event_id = evt.event_id and evt.wait_class = 'User I/O'
group by sql_id,USERNAME order by count(*) desc;


TOP SESSION / USER:
SELECT B.USERNAME,A.CNT FROM
(select USER_ID, COUNT(*) AS CNT from v$active_session_history where sample_time > sysdate -1/24/60 and session_type <> 'BACKGROUND' GROUP BY USER_ID) A,
DBA_USERS B
WHERE  A.USER_ID=B.USER_ID
ORDER BY CNT;

BAD SQL: THIS QUERY NEED TO BE REWRITTEN;
select e.event, e.total_waits -nvl(b.total_waits,0) total_waits,e.time_waited -nvl(b.time_waited,0) time_waited
from v$active_session_history b, v$active_session_history e, stats$snapshot sn
Where snap_time >sysdate - 1/24/60 And e.event not like '%timer' And e.event not like '%message%'
And e.event not like '%slave wait%' And e.snap_id =sn.snap_id And b.snap_id = e.snap_id-1
And b.event = e.event And e.total_timeouts > 100 And (e.total_waits -b.total_waits > 100
or e.time_waited -b.time_waited > 100);

BAD SQL: query need to be rewritten.
select sess_id,username,program,wait_event,sess_time,
round(100*(sess_time/total_time),2) pct_time_waited
from
(select a.session_idsess_id,
decode(session_type,'background',session_type,c.username) username,
a.program program,
b.name wait_event,
sum(a.time_waited)sess_time
from sys.v_$active_session_history a,
sys.v_$event_name b,
sys.dba_users c
where a.event# = b.event# and
a.user_id = c.user_id and
sample_time > '21-NOV-04 12:00:00 AM' and
sample_time < '21-NOV-04 05:00:00 AM' and
b.wait_class = 'User I/O'
group by a.session_id,
decode(session_type,'background',session_type,c.username),
a.program,
b.name),
(select sum(a.time_waited) total_time

OMF
---
control files : set parameter : DB_CREATE_ONLINE_LOG_DEST_n
redo logs : set parameter : DB_CREAT_ONLINE_LOG_DEST_n
    ex: if you specify
        DB_CREATE_ONLINE_LOG_DEST_1 = c:\Oracle\Oradata\TSH1
        DB_CREATE_ONLINE_LOG_DEST_2 = d:\Oracle\Oradata\TSH1
    2 memeber files will be created in these location if you issue
        ALTER DATABASE ADD LOGFILE
    remove redolog group
        ALTER DATABASE DROP LOGFILE GROUP 3
Table spaces:
    CREATE TABLESPACE tsh_data;
    CREATE TABLESPACE COMP_DATA DATAFILE SIZE 150M;
    ALTER TABLESPACE tsh_data ADD DATAFILE;

DROP TABLESPACE GHRDR_INDEX01 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE GHRDR_BI_INDEX01 INCLUDING CONTENTS AND DATAFILES;

purge recyclebin
>purge dba_recyclebin;

select object_name, original_name, type, can_undrop as "UND", can_purge as "PUR", droptime  from recyclebin;


statistics collection of a table
>exec DBMS_STATS.gather_schema_stats(ownname => 'SHIPPING', cascade => TRUE, estimate_percent => dbms_stats.auto_sample_size);

for histogram generation
>exec dbms_stats.gather_schema_stats( ownname => 'SCOTT', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'for all columns size auto', degree => DBMS_STATS.DEFAULT_DEGREE);
to specify auto as above the table must have monitoring enabled using "alter table <table_name> monitoring"


>exec DBMS_STATS.delete_schema_stats('SYS');
>exec DBMS_STATS.gather_schema_stats('SYS');
exec dbms_stats.gather_table_stats(ownname => 'SHIPPING', tabname => 'SALES_ORDER',cascade => TRUE, estimate_percent => dbms_stats.auto_sample_size);
--from koo
exec dbms_stats.gather_table_stats(ownname => 'ERLOAD', tabname => 'ODCNTAMT', estimate_percent=> DBMS_STATS.AUTO_SAMPLE_SIZE, block_sample => FALSE, degree => 4, method_opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO', granularity => 'ALL', cascade => TRUE);
--full database stats
exec dbms_stats.gather_database_stats;
EXEC DBMS_STATS.gather_database_stats(estimate_percent => 100,cascade => TRUE);


>ANALYZE TABLE <TABLE_NAME> COMPUTE STATISTICS;
ANALYZE TABLE ERLOAD.ODCNTAMT COMPUTE STATISTICS;
ANALYZE TABLE ERLOAD.ORDDTL COMPUTE STATISTICS;
--to see when is the last analysed
SELECT TABLE_NAME,TO_CHAR(LAST_ANALYZED,'DD-MON-YYYY HH24:MI:SS') from dba_tables where owner='TRANS_HRDB'
--to see the startup time of the instance
SELECT INST_ID,TO_CHAR(STARTUP_TIME,'DD-MON-YYYY HH24:MI:SS') FROM Gv$instance;
--to see the progress of analysis
SELECT OPNAME,SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS WHERE TOTALWORK != 0 AND SOFAR <> TOTALWORK;




Database startup in restrited session
-------------------------------------
start sqlplus without loggin in to any database : >sqlplus /nolog
startup without mounting database > startup nomount
startup to mount state without opening database > startup mount
startup with restricted access (only dba) > STARTUP RESTRICT;
removet the restriction for users >ALTER SYSTEM DISABLE RESTRICTED SESSION

size estimation / space estimation
----------------------------------
>SELECT * FROM table(dbms_spae.OBJECT_GROWTH_TREND ('ARUP','BOOKINGS','TABLE'));



Moving table to another TABLESPACE
----------------------------------
SQL>alter table ISIS_USR.YP_REMAPCTRLOG move tablespace ts_ISIS_DATA;

Enterprise Manger console and agent
-----------------------------------
set the SID
>emctl status dbconsole|agent
>emctl start dbcolsole|agent
>emctl stop dbconsole|agent

reconfiguring
>emca -r

Patching windows
----------------
during the patching process keep on checking tlist kill any instance. of following
petrol agent, omagent,oracle,sqlplus

>taskmgr (task manager)

make sure that you have the required perl
if not just copy the perl related files to a directory (no need of install)
let perl be there in the following directory.
E:\oracle9207cpupatch\perl\5.6.1\bin\MSWin32-x86\perl.exe (check the perl installation and version)
cd E:\oracle9207cpupatch\5064365 (the extracted patchs)
D:\oracle\ora92\OPatch\opatch.pl (perl script for patching)


set oracle_home=D:\ORACLE\ORA92
E:\oracle9207cpupatch\perl\5.6.1\bin\MSWin32-x86\perl.exe D:\oracle\ora92\OPatch\opatch.pl version
(make sure that the opatch version is 55)

shutdown database and other sevices.
1) shutdown the database.
2) shutdown the listener.
2) stop DTC.


d1ct10naryport
set oracle_home=D:\ORACLE\ORA92
E:\oracle9207cpupatch\perl\5.6.1\bin\MSWin32-x86\perl.exe D:\oracle\ora92\OPatch\opatch.pl lsinventory
set oracle_home=D:\ORACLE\ORA92
E:\oracle9207cpupatch\perl\5.6.1\bin\MSWin32-x86\perl.exe D:\oracle\ora92\OPatch\opatch.pl apply

execute the catcpu.sql in $ORACLE_HOME\cpu

DR out of sync
---------------------
--got from phani, execute in primary
select max(archived.sequence#) primary,
   max(applied.sequence#) standby,
   archived.thread# thread
   from v$archived_log archived, v$archived_log applied
  where archived.thread#=applied.thread#
  and archived.archived='YES' and applied.applied='YES'
  group by archived.thread#;



select abs(source.seq-dest.seq) numseq
from
  (select max(a.sequence#) seq
       from v$archived_log a, v$instance b
  where a.standby_dest = 'NO'
     and a.thread# = b.thread#) source,
  (select max(a.sequence#) seq
         from v$archived_log a, v$instance b
      where a.applied = 'YES'
      and a.standby_dest = 'YES'
      and a.thread# = b.thread#) dest
/

Select * from v$archive_gap;
select thread#,max(sequence#) from v$loghist group by thread#;
standby> select archived_thread#,archived_seq#,applied_thread#,applied_seq# from v$archive_dest_status;
//findout applying node
>select instance_name,host_name from gv$managed_standby a,gv$instance b
where a.inst_id = b.inst_id and a.process like 'MRP%' ;     

>select THREAD#,max(SEQUENCE#) from v$archived_log where applied = 'YES' group by thread#;
>select process,status,sequence# from v$managed_standby; --last archive log
>select message from v$dataguard_status;
>select MESSAGE from v$dataguard_status where FACILITY = 'Log Apply Services';

select group#,THREAD#,members, a,archived,status from v$log;
ALTER DATABASE ADD LOGFILE SIZE 512M;
or
ALTER DATABASE ADD LOGFILE THREAD 3 SIZE 50M;
or
ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 5 SIZE 512M;
alter system switch logfile;
alter database drop logfile group 16;
--other queries
select database_role,open_mode from v$database;  //findout database role


ASM Disks
---------
SELECT NAME,STATE,TOTAL_MB,FREE_MB,FREE_MB/TOTAL_MB*100 AS PCT_FREE FROM v$asm_diskgroup;

col name format a10
col path format a50
set lines 200
select a.name,a.group_number,b.path,b.TOTAL_MB
from v$asm_diskgroup a, v$asm_disk b
where a.group_number=b.group_number;

col name format a15
select group_number, name, TOTAL_MB, FREE_MB from V$asm_disk_stat;


asm operation
set lines 200
select * from v$asm_operation;

OR

SET LINESIZE  145
SET PAGESIZE  9999
SET VERIFY    off
 
COLUMN disk_group_name        FORMAT a20           HEAD 'Disk Group Name'
COLUMN disk_file_path         FORMAT a30           HEAD 'Path'
COLUMN disk_file_name         FORMAT a20           HEAD 'File Name'
COLUMN disk_file_fail_group   FORMAT a20           HEAD 'Fail Group'
COLUMN total_mb               FORMAT 999,999,999   HEAD 'File Size (MB)'
COLUMN used_mb                FORMAT 999,999,999   HEAD 'Used Size (MB)'
COLUMN pct_used               FORMAT 999.99        HEAD 'Pct. Used'
 
break on report on disk_group_name skip 1
 
compute sum label ""              of total_mb used_mb on disk_group_name
compute sum label "Grand Total: " of total_mb used_mb on report
 
SELECT
    NVL(a.name, '[CANDIDATE]')                       disk_group_name
  , b.path                                           disk_file_path
  , b.name                                           disk_file_name
  , b.failgroup                                      disk_file_fail_group
  , b.total_mb                                       total_mb
  , (b.total_mb - b.free_mb)                         used_mb
  , ROUND((1- (b.free_mb / b.total_mb))*100, 2)      pct_used
FROM
    v$asm_diskgroup a RIGHT OUTER JOIN v$asm_disk b USING (group_number)
ORDER BY
    a.name
/

--disk io
col path format a50
select PATH,READ_ERRS,WRITE_ERRS,BYTES_READ/1024/1024 AS READ_MB,BYTES_WRITTEN/1024/1024 AS WRITTEN_MB ,BYTES_READ/READ_TIME/1024/10.24 AS READ_MB_PER_SEC,BYTES_WRITTEN/WRITE_TIME/1024/10.24 AS WRITE_MB_PER_SEC from V$asm_disk;

--drop diskgroup
DROP DISKGROUP DATA_1 INCLUDING CONTENTS;

======Display asm disk usage======================

SET LINESIZE  145
SET PAGESIZE  9999
SET VERIFY    off
COLUMN group_name             FORMAT a20           HEAD 'Disk Group|Name'
COLUMN sector_size            FORMAT 99,999        HEAD 'Sector|Size'
COLUMN block_size             FORMAT 99,999        HEAD 'Block|Size'
COLUMN allocation_unit_size   FORMAT 999,999,999   HEAD 'Allocation|Unit Size'
COLUMN state                  FORMAT a11           HEAD 'State'
COLUMN type                   FORMAT a6            HEAD 'Type'
COLUMN total_mb               FORMAT 999,999,999   HEAD 'Total Size (MB)'
COLUMN used_mb                FORMAT 999,999,999   HEAD 'Used Size (MB)'
COLUMN pct_used               FORMAT 999.99        HEAD 'Pct. Used'
 
break on report on disk_group_name skip 1
 
compute sum label "Grand Total: " of total_mb used_mb on report
 
SELECT
    name                                     group_name
  , sector_size                              sector_size
  , block_size                               block_size
  , allocation_unit_size                     allocation_unit_size
  , state                                    state
  , type                                     type
  , total_mb                                 total_mb
    , (total_mb - free_mb)                     used_mb
    ,free_mb                               free_mb
  , ROUND((1- (free_mb / total_mb))*100, 2)  pct_used
FROM
    v$asm_diskgroup
ORDER BY
    name
/
==========================================================


you can get file size info from Database.
select file_name,bytes/1024/1024/1024 from dba_data_files

unable to connect ASM instance. (maximum number of session/process exceeded)
stop the database.
connect to asm using sqlplus.
>alter system set process=60 scope=spfile;
shutdown and startup.
to mount a diskgroup
>ALTER DISKGROUP dgroup_01 MOUNT;

RMAN recovery catelog verification
----------------------------------
connect to rman catlog using sqlpus : sqlplus rman/namr@rman9i.world

select c.db_key, c.dbinc_key, c.db_name, c.file#, max(c.completion_time) latest_completion_time, backup_type
        from rc_backup_datafile c,
             rc_database a,
             rc_database_incarnation b,
             rc_datafile d
             where a.db_key = b.db_key
      and a.dbinc_key = b.dbinc_key
      and b.current_incarnation = 'YES'
      and c.db_key = a.db_key
      and c.dbinc_key = a.dbinc_key
      and d.db_key = a.db_key
      and d.dbinc_key = a.dbinc_key
      and d.file#     = c.file#
      and (d.drop_time is null or (d.drop_time = d.creation_time))
      and (d.creation_time < c.completion_time)
      and c.db_name = upper('&NM')
          group by c.db_key, c.dbinc_key, c.db_name, c.file#, backup_type
order by 5;


select max(sequence#) from rc_archived_log where db_name='ESCP';
SELECT MAX(SEQUENCE#) FROM RC_BACKUP_ARCHIVELOG_DETAILS WHERE DB_NAME = 'ESCP'; (ONLY ON 10G catelog)
list backup of archivelog all; (all 9i and 10g)
LIST BACKUP OF ARCHIVELOG FROM TIME 'sysdate-2'; (last 2 days archive log backups)

connect to target database and execute:-
select sequence#,deleted ,backup_count,completion_time from v$archived_log;

archive logs that can be deleted from priamary because that are backed up atleaset onces
---------------------------------------------------------------------------------------
select *
from v$archived_log
where archived='YES' and deleted='NO' and backup_count > 0 order by first_change# desc

or

--this query given by srikanth
select
--   'change archivelog '''||substr(name,1,100)||''' delete;'
'DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = ' || max(SEQUENCE#) ||' thread '||a.thread#||' backed up 1 times to devie type SBT ;'
from
   v$archived_log a
where
   archived='YES' and
   deleted='NO' and
   backup_count > 0 and
   standby_dest = 'NO' and
   exists (
      select
         sequence#
      from
         v$backup_redolog b
      where
         b.sequence# = a.sequence# and
         b.first_change# = a.first_change#) and
   a.first_change# <=
     (select
         max(first_change#)
      from
         v$archived_log c
      where
         c.standby_dest = 'YES' and
         c.applied = 'YES')
group by a.thread#
;


RMAN Process running.
--------------------
select
  p.spid "SPID_THREAD"
, substr(s.sid,1,4) "SID"
, s.serial# "SERIAL#"
, substr(NVL(S.USERNAME, 'SYS'),1,10) "USERNAME"
, substr(s.status,1,3) "STATUS"
, substr(s.osuser,1,7) "OSUSER"
, substr(s.program,1,15) "PROGRAM"
, substr(S.TYPE,1,6)
, T.VALUE "CPU"
, to_char(logon_time,'dd-mon-yy hh24:mi:ss')
from sys.v_$process p
, sys.v_$bgprocess b
, sys.v_$session s
, V$SESSTAT T,
  V$STATNAME N
where N.NAME = 'CPU used by this session'
and s.paddr = p.addr
and b.paddr(+) = p.addr
AND T.STATISTIC# = N.STATISTIC#
AND S.SID = T.SID
and S.USERNAME IS NOT NULL
--and S.USERNAME <> 'SYS'
and s.program like 'RMAN%'
order by logon_time desc

--to check job from a session is in progress or not.
SELECT SEQ#,STATE,EVENT,WAIT_TIME,SECONDS_IN_WAIT FROM V$SESSION_WAIT WHERE SID = 48
here:
1) WAIT_TIME = Length of most recent wait in centiseconds
  (if STATE = ‘WAITED KNOWN TIME’
2) SECONDS_IN_WAIT = How long current wait has been so far
   (if STATE = ‘WAITING’)


RMAN progress
-------------
SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
       ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
  AND OPNAME NOT LIKE '%aggregate%'
  AND TOTALWORK != 0
  AND SOFAR <> TOTALWORK;
 

RMAN commands:-
BACKUP ARCHIVELOG ALL not backed up 1 times;  #or 2 times.
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'TRUNC(SYSDATE-1)';
delete archivelog all backed up 1 times to device type sbt;  //delete all archive logs that are already backedup to tape  
DELETE ARCHIVELOG UNTIL SEQUENCE 1640 THREAD 3;


Media Manager Waits:
SELECT p.SPID, EVENT, SECONDS_IN_WAIT AS SEC_WAIT,
       sw.STATE, CLIENT_INFO
FROM V$SESSION_WAIT sw, V$SESSION s, V$PROCESS p
WHERE sw.EVENT LIKE 'sbt%'
       AND s.SID=sw.SID
       AND s.PADDR=p.ADDR
;

--channel and process information
COLUMN CLIENT_INFO FORMAT a60
COLUMN SID FORMAT 9999
COLUMN SPID FORMAT 99999
SELECT s.SID, p.SPID, s.CLIENT_INFO
FROM V$PROCESS p, V$SESSION s
WHERE p.ADDR = s.PADDR
AND CLIENT_INFO LIKE 'rman%'
/

--media manager events (found no rows returned)
COLUMN EVENT FORMAT a10
COLUMN SECONDS_IN_WAIT FORMAT 999
COLUMN STATE FORMAT a20
COLUMN CLIENT_INFO FORMAT a30

SELECT p.SPID, sw.EVENT, sw.SECONDS_IN_WAIT AS SEC_WAIT,
sw.STATE, CLIENT_INFO
FROM V$SESSION_WAIT sw, V$SESSION s, V$PROCESS p
WHERE sw.EVENT LIKE 's%bt%'
AND s.SID=sw.SID
AND s.PADDR=p.ADDR
;

--arhive logs bakedup.
select THREAD#,MAX(SEQUENCE#) FROM  V$BACKUP_REDOLOG GROUP BY THREAD#;

backup Archivelogs
------------------
rman target rman/newrman@escp.world catalog  rman/namr@rman9i.world --for escp

run {
allocate channel t1 type 'SBT_TAPE'
parms 'ENV=(NSR_DATA_VOLUME_POOL=fulldb,NSR_CLIENT=e3odscl1,NSR_SERVER=limbue101)';
allocate channel t2 type 'SBT_TAPE'
parms 'ENV=(NSR_DATA_VOLUME_POOL=fulldb,NSR_CLIENT=e3odscl1,NSR_SERVER=limbue101)';
backup
     filesperset 4
     format 'escp_al_t%t_s%s_p%p'
     (archivelog until time 'SYSDATE -1' thread 1 delete input);
}

use DELETE ALL INPUT in case you have many archive log destinations and want to delete the file from all destinations.
syntax:-
BACKUP/RESTORE ARCHIVELOG [FROM TIME 'SYSDATE-30'] [UNTIL TIME 'SYSDATE-7']
BACKUP/RESTORE ARCHIVELOG SCN BETWEEN 94097 AND 106245 [THREAD 1];
or
... SEQUENCE BETWEEN integer1 AND integer2 
... FROM SEQUENCE integer1 UNTIL SEQUENCE integer2

testing the tape server by saving a small file.
>save -b fulldb -s ausbups310 C:\temp\test.txt

sample restore script for archive log restore:
run {
set command id to 'archlog_backup';
allocate channel t1 type 'SBT_TAPE'
parms 'ENV=(NSR_SERVER=ausbups370,NSR_DATA_VOLUME_POOL=arclog,NSR_COMPRESSION=FALSE)';
allocate channel t2 type 'SBT_TAPE'
parms 'ENV=(NSR_SERVER=ausbups370,NSR_DATA_VOLUME_POOL=arclog,NSR_COMPRESSION=FALSE)';
allocate channel t3 type 'SBT_TAPE'
parms 'ENV=(NSR_SERVER=ausbups370,NSR_DATA_VOLUME_POOL=arclog,NSR_COMPRESSION=FALSE)';
restore archivelog  from sequence 52383  until sequence 52393 thread 2;
}

select max(SEQUENCE#) from V$BACKUP_REDOLOG; //maximum sequence number already in backup

CRS in RAC Env.
---------------
start CRS:- run /etc/init.d/init.crs with root privilage.
start the crs-demon
$sudo /opt/Dell/Oracle/run_oracle_root /etc/init.d/init.crs start
sudo /misc/images/linux/OracleScripts/run_oracle_root /etc/init.d/init.cssd stop
or
sudo /misc/software/linux/OracleScripts/run_oracle_root /etc/init.d/init.cssd stop
single instance with ASM also requires this to stop the cssd.

start all CRS resource
./bin/crs_start -all

unregister listner from CRS
./bin/crs_stat  (findout the names)
./bin/crs_unregister ora.e1dlfccdb02.LISTENER_E1DLFCCDB02.lsnr

stop CRS:-

stop all clusterware stack:-
need to execute as root
>crsctl stop crs
>#<CRS_HOME>/bin/oprocd stop

make sure that nothing is running from clusterware
>ps -ef |egrep "crsd.bin|ocssd.bin|evmd.bin|oprocd"

set the diagwait for clusterware, this lets the clusterware to write traces in case of node eviction / reboot
>crsctl set css diagwait 13 -force




cluster name:- ./cemutlo -n     ($ORA_CRS_HOME/bin)
findout the voting disk

>crsctl query css votedisk

cssd (Oracle Cluster Synchronization Services) Non-RAC Installation
-----------------------------------------------------------------
Metalink note : 314173.1
sudo /opt/Dell/Oracle/run_oracle_root /u01/app/oracle/product/10.1.0/db_1/bin/localconfig reset $ORACLE_HOME
sudo /u01/app/oracle/product/10.1.0/db_1/bin/localconfig delete

you need to start cssd before creating ASM.
/bin/su -l oracle -c exec /u01/app/oracle/product/10.1.0/db_1/bin/ocssd

User Profiles
-------------
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; (Make sure that the parameter is set to true)

1.Creation of profile

1.1) you can create a composite limit
ALTER RESOURCE COST
CPU_PER_SESSION 10
LOGICAL_READS_PER_SESSION 2
PRIVATE_SGA 6
CONNECT_TIME 1;

You can assign this composite limit to each profile
ALTER PROFILE <PROFILE NAME> LIMIT
COMPOSITE_LIMIT 500;

1.2) You can create a profile directly

create profile TEST limit
password_life_time unlimited
password_grace_time unlimited
password_reuse_time unlimited
password_reuse_max unlimited
failed_login_attempts unlimited
password_lock_time unlimited
password_verify_function NULL;


CREATE PROFILE TEST LIMIT
SESSIONS_PER_USER 2
CPU_PER_SESSION 10000
CPU_PER_CALL 20
CONNECT_TIME 240
IDLE_TIME 20
LOGICAL_READS_PER_SESSION 50000
LOGICAL_READS_PER_CALL 400
PRIVATE_SGA 1024;

CREATE PROFILE TEMP LIMIT PASSWORD_VERIFY_FUNCTION NULL;

2.Assigning the profile to a user.
2.1)at the user creation time
CREATE USER <USERNAME> IDENTIFIED BY <PASSWORD>
DEFAULT TABLESPACE <DEFAULT TABLESPACE>
TEMPORARY TABLESPACE <TEMP TABLESPACE>
QUOTA 5M ON ...
PROFILE <PROFILE NAME>

2.2) Assign the profile to an existing user
ALTER USER <USERNAME> PROFILE <PROFILENAME>

copying schema
--------------
SELECT 'CREATE USER '||USERNAME||' IDENTIFIED BY VALUES '''||PASSWORD||
''' DEFAULT TABLESPACE ' ||DEFAULT_TABLESPACE ||' PROFILE '|| PROFILE
FROM DBA_USERS WHERE USERNAME IN ('HRIM');

or

copy privilages

SELECT DBMS_METADATA.GET_GRANTED_DDL(’ROLE_GRANT’, USERNAME) || ‘/’ DDL
FROM DBA_USERS where exists (select ‘x’ from dba_role_privs drp where
drp.grantee = dba_users.username)
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL(’SYSTEM_GRANT’, USERNAME) || ‘/’ DDL
FROM DBA_USERS where exists (select ‘x’ from dba_role_privs drp where
drp.grantee = dba_users.username)
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL(’OBJECT_GRANT’, USERNAME) || ‘/’ DDL
FROM DBA_USERS where exists (select ‘x’ from dba_tab_privs dtp where
dtp.grantee = dba_users.username);

--if requied tablespace need to be created. and export/import

GETTING SOURCE FROM DATABASE
----------------------------
SELECT OWNER,TRIGGER_NAME,TABLE_NAME FROM DBA_TRIGGERS WHERE TABLE_NAME LIKE 'M%_B%';
set linesize 1000
set pagesize 0
spool PCK_FCONLY_MERGE_HEADER.sql
SELECT TEXT FROM DBA_SOURCE WHERE NAME='PCK_FCONLY_MERGE' AND TYPE ='PACKAGE' ORDER BY LINE;
spool off
spool PCK_FCONLY_MERGE_BODY.sql
SELECT TEXT FROM DBA_SOURCE WHERE NAME='PCK_FCONLY_MERGE' AND TYPE ='PACKAGE BODY' ORDER BY LINE;
spool off

Getting time on a particular timezone
SQL> select current_timestamp at time zone 'GMT' from dual;


CHANGING TIMEZONE ON RAC ENV.
----------------------------
set the below settings in .profile or .bash_profile
export TZ=Europe/London    
or    
export TZ=Eire

srvctl getenv database -d ehfdm
srvctl setenv database -d ehfdm -t TZ=Eire
srvctl stop nodeapps -n aushfdmdb1
srvctl stop nodeapps -n aushfdmdb2
srvctl start nodeapps -n aushfdmdb1
srvctl start nodeapps -n aushfdmdb2
srvctl getenv database -d ehfdm
srvctl start instance -d racdb -i racdb1, racdb3

SRVCTL ADD DATABASE -d <db_unique_name> -o <$ORACLE_HOME> -s MOUNT //add database to configuration with start option as mount
SRVCTL MODIFY DATABASE -d <db_unique_name> -o <$ORACLE_HOME> -s MOUNT //modify the configured database to start option as mount
srvctl modify asm -n aushrdprddb01 -i +ASM1 -o /u01/app/oracle/product/11.1.0/asm_1   //move asm to another oracle home

srvctl setenv instance -d hrdbp -i hrdbp1 -t "TNS_ADMIN=/u01/app/oracle/product/11.1.0/db_1/network/admin/"

relocate the service to another node:
srvctl relocate service -d lmsp -s lmspapp -i lmsp2 -t lmsp1
srvctl relocate service -d lmsp -s lmsprpt -i lmsp1 -t lmsp2

--export configuraiton
srvconfig -exp out.txt

example
-------
srvctl add database –d v10g –o $ORACLE_HOME –s $ORACLE_HOME/dbs/v10g_spfile        #adding new database to srvctl
srvctl add instance –d v10g –I v10g1 –n aultlinux1                                   #adding instances to srvctl
srvctl add instance –d v10g –I v10g2 –n aultlinux2
srvctl add instance –d v10g –I v10g3 –n aultlinux3
srvctl add instance –d v10g –I v10g4 –n aultlinux4
srvctl add service –d v10g –s CRM –r V10g1,v10g2 –a v10g3,v10g4                        #adding services to specific nodes
srvctl add service –d v10g –s AR –r v10g3,v10g4 –a v10g1,v10g2                        #adding

granting access to v$ views:-
grant select_catalog_role to xxx;

SRVCTL usages
-------------
List all configured databases
$ srvctl config database

configuration of a database (nodes, instances and home)
$srvctl config database -d SHFCCDEV

Configuration of nodeapps
$srvctl config nodeapps -n linux1 -a -g -s -l

Status of all instances and services
$ srvctl status database -d SHFCCDEV

Status of node applications on a particular node
$srvctl status nodeapps -n linux1

ASM status on a node
$srvctl status asm -n linux1


ASMCMD
------
DISK GROUP INFORMATION
ASMCMD>lsdg
CONNECTED INSTANCE INFORMATION
ASMCMD> lsct

serching for a file in asm
ASMCMD>find . -t BACKUPSET.*

display current directory in the command prompt
$>asmcmd -p






"connected to idle instance"
-----------------------------
if you see database is running and not able to connect to that. chances re there for multiple homes.
ps -eaf | grep oralce
my list some of the home info
othewise seach in .bash_profile

dropping datafiles
>startup mount
>alter database drop datafile 23 offline drop
>alter database open



EXPLAN PLAN
------------
first execute:
explain plan for
<select statment>

then execute:
set head off
set pages 0
set lines 200
set long 9999999
@?/rdbms/admin/utlxpls.sql


SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

catcpu.sql failing (ORA-04021: timeout occurred while waiting to loc)
--------------------------------------------------------------------
1.shutdown immediate
2. startup migrate
3. @catcpu.sql
4. shutdown immediate
5. startup

clean files older than 30 days
------------------------------
find . -ctime +30 -exec rm {} \;

tablespace quota
>grant unlimited tablespace to remap;

AWR
---

select snap_interval, retention from dba_hist_wr_control;

SNAP_INTERVAL       RETENTION
------------------- -------------------
+00000 01:00:00.0   +00007 00:00:00.0

this says snapshot interval is 1hr and RETENTION time is 7 days.

for snapshot intervals of 20 minutes and a retention period of two days--you would issue the following. The parameters are specified in minutes.
begin
dbms_workload_repository.modify_snapshot_settings (interval => 20,retention => 2*24*60);
end;

begin
dbms_workload_repository.modify_snapshot_settings (interval => 60,retention => 7*24*60);
end;


All information AWR collects can be viewed from DBA_HIST_% views
>select view_name from dba_views where view_name like 'DBA_HIST%';
DBA_HIST_METRIC_NAME gives the different Metrics of AWR. each metric is identified by a METRIC_ID.
name of the metric is METRIC_NAME.
for example you can get the cpu utilization info with following query

select begin_time, intsize, num_interval, minval, maxval, average, standard_deviation
from dba_hist_sysmetric_summary where metric_id = 2075 order by BEGIN_TIME;

/* findout the snap ids you want */
SELECT SNAP_ID,BEGIN_INTERVAL_TIME,END_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT where BEGIN_INTERVAL_TIME BETWEEN '11-MAY-10 11.00.20.000 PM' AND '12-MAY-10 02.00.59.000 AM' order by BEGIN_INTERVAL_TIME;  --where snap_id = 17139

select begin_time, intsize, num_interval, minval, maxval, average, standard_deviation
from dba_hist_sysmetric_summary where metric_id = 2075 order by BEGIN_TIME;

/*findout all the users logged in to the database over the time*/
SELECT DISTINCT USERNAME FROM dba_hist_active_sess_history A,DBA_USERS B WHERE A.USER_ID=B.USER_ID;

SELECT * FROM DBA_ADVISOR_TASKS ORDER BY CREATED
SELECT * FROM DBA_ADVISOR_TASKS WHERE DESCRIPTION LIKE '%17115%'

/* get the findings */
SELECT * FROM DBA_ADVISOR_FINDINGS WHERE TASK_NAME = 'ADDM:1159647078_1_17116' AND TYPE='PROBLEM'

unused indexes..
SELECT OWNER,INDEX_NAME FROM DBA_INDEXES WHERE OWNER IN ('TRANS_HRDB')
MINUS
SELECT OBJECT_OWNER,OBJECT_NAME FROM dba_hist_sql_plan WHERE OBJECT_TYPE='INDEX';

Top Session / Top user over a period of snaps.
SELECT B.USERNAME,A.CNT FROM
(select USER_ID,COUNT(*) AS CNT from DBA_HIST_ACTIVE_SESS_HISTORY where SNAP_ID between 5336 and 5339 GROUP BY USER_ID) A,
DBA_USERS B
WHERE  A.USER_ID=B.USER_ID
ORDER BY CNT;


awr report
-----------
set linesize 500
set pagesize 0
set termout on;
set echo off
spool c:\awrrpt.htm;
SELECT output FROM  TABLE(dbms_workload_repository.awr_report_html(991527143,1,9230,9231));
spool off

or
just execute awrrpt.sql avaiable at ORACLE_HOME/rdbms/admin/
@$ORACLE_HOME/rdbms/admin/awrrpt.sql

or run the scritp in a non intractive mode
define  inst_num     = 1;
define  num_days     = 3;
define  inst_name    = 'sabat';
define  db_name      = 'SABAT';
define  dbid         = 991527143;
define  begin_snap   = 9367;
define  end_snap     = 9368;
define  report_type  = 'html';
define  report_name  = c:\awr_report.html
@C:\awrrpt\awrrpti.sql


Multiple Oracle Homes
---------------------
export ORACLE_HOME=/spwuat2/u01/app/oracle/product/9.2.0
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

otherwise you won't be able to connect to instance. "Connected to an idle instance".
if you did not set ORA_NLS33, you may get "error while loading create database character set".


DB Verify
----------
dbv userid=sys/password file=+DATA_1/essfd/datafile/users.264.626461727
here if you are login to server and expecting os authentification, the password can be anything. just put "sys/anything"

if archive logs destination
---------------------------
see $ORACLE_HOME/<SID>/bdump/alertlog

installation time settings like NLS_CHARACTERSET.
------------------------------------------------
select * from sys.database_properties;
select * from sys.props$;

sga details
-----------
select component, current_size from v$sga_dynamic_components
select * from V$SGA_TARGET_ADVICE order by sga_size_factor;


opatch
------
checking the progress
----------------------
/db/db01/home/oracle/product/10.1.0/.patch_storage/5901876/
tail -f Apply_5901876_07-15-2007_03-29-00.log

catcpu hanging.
---------------
set the job_queue_process=0 and bouce the db.
worst case
>alter database close.


rename standby datafile
-----------------------
>startup nomount
>alter database mount standby database
>alter database rename 'oldname' to 'newname'

Cache fusion
------------
SELECT FILE#,BLOCK#,CLASS#,STATUS,XNC FROM GV$CACHE_TRANSFER WHERE NAME ='ORDHXTRA';
GV$segment_statistics;
select * from
(select statistic_name, object_name, owner, value, inst_id from
gv$segment_statistics where object_name = 'DELL_EMP_LISTER_WORK'
order by value desc)
where rownum < 20;

--monitor inter connect (TESTED)
select b1.inst_id, b2.value "RECEIVED",b1.value "RECEIVE TIME",((b1.value / b2.value) * 10) "AVG RECEIVE TIME (ms)"
from gv$sysstat b1, gv$sysstat b2
where b1.name = 'gc current block receive time' and b2.name = 'gc current blocks received'
and b1.inst_id = b2.inst_id ORDER BY 1;


--monitor inter node service time
SELECT  a.inst_id "Instance",   (a.value+b.value+c.value)/d.value "Current Blk Service Time"
FROM  GV$SYSSTAT A,  GV$SYSSTAT B,  GV$SYSSTAT C,  GV$SYSSTAT D
WHERE  A.name = 'gc current block pin time' AND  B.name = 'gc current block flush time' AND
  C.name = 'gc current block send time' AND  D.name = 'gc current blocks served' AND
  B.inst_id=A.inst_id AND  C.inst_id=A.inst_id AND  D.inst_id=A.inst_id
ORDER BY  a.inst_id;

alter system flush buffer_cache;
ALTER SYSTEM FLUSH SHARED_POOL;

--Analysing one particular session give SID
select n.name, s.value
from v$statname n , v$sesstat s
where s.sid = &sid and n.statistic# = s.statistic#
order by n.class, n.name
/


get the mastering informaiton
>select object_id,current_master, previous_master ,remaster_cnt from V$GCSPFMASTER_INFO where object_id = 144615

remaster if required: login to the node where you need to remaster the object.
$>oradebug setmypid
$>oradebug lkdebug -m pkey 144615



Windows instance creation
------------------------
oradim -NEW -SID myclone -STARTMODE auto


Transpotable tablespace
----------------------
findout the destination platforms supported by your source platform and endian format.
>SELECT PLATFORM_NAME,ENDIAN_FORMAT FROM v$transportable_platform

please the tablespace in read only.
SQL> alter tablespace USERS read only;

export the metadata about the trasportable tablespace.
exp sys transport_tablespace=y tablespaces=users file=tts.dmp log=exp_tts.log statistics=none

if endian formats are different then convert datafiles of the tablespace.
RMAN> CONVERT TABLESPACE USERS TO PLATFORM 'Linux 64-bit for AMD' FORMAT ='C:/transport_linux/%U';

ftp the files (both exp dmp and datafiles of tablespaces,if requied the converted ones) to other machine.

import the metadata
imp sys TRANSPORT_TABLESPACE=Y datafiles=<filelocations> file=tts.dmp log=imp_tts.log

set the tablespace in read-write
>alter tablespace users read write;

BLOCK CORRUPTON
---------------
select file#,block# from v$database_block_corruption; #what are the corrupted blocks

SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents
WHERE file_id = 57 and 568454 between block_id AND block_id+blocks-1;

MANUAL RECOVERY of standby database
---------------
1. by default recovery files will check for archive logs in LOG_ARCHIVE_DEST_n
2. startup nomount
3. ALTER DATABASE MOUNT STANDBY DATABASE;
4. RECOVER STANDBY DATABASE  or RECOVER FROM '/logs' STANDBY DATABASE

Creating Directory in Oracle
----------------------------
1. CREATE DIRECTORY <DIRECTORY_NAME> TO 'C:\bkup';
2. GRANT READ,WRITE ON DIRECTORY <DIRECTORY_NAME> TO <USER>

Object Dependancy
-----------------
column c1 heading "object|level"         format a16
column c2 heading "object|name"          format a40
column c3 heading "referencing|object"   format a40

select
   lpad (' ', 2 * (level - 1)) || to_char (level, '999') as c1,
   owner || '.' || name || ' (' || type || ')' as c2,
   referenced_owner || '.' || referenced_name || ' (' || referenced_type || ')' as c3
from
   dba_dependencies
start with
   owner = 'GLOBAL_HRDB'
and
   name = 'DELL_PERS_REMOTE_V'
connect by prior
   referenced_owner = owner
and prior
   referenced_name = name
and prior
   referenced_type = type
/


unregister database from a catelog database
-------------------------------------------
unregister database <database_name>

hang analyse
------------
sqlplus "/ as sysdba"
oradebug setmypid
oradebug unlimit;
oradebug -G all dump systemstate 266
oradebug -G all hanganalyze 2


TEPS TO GENERATE A HANGANALYZE TRACE FILE: Metalink note: 175006.1
========================================
Use the following set of commands to generate HANGANALYZE trace files.


1- Using SQL*Plus connect as "INTERNAL" (Oracle8i) or "/ AS SYSDBA" (Oracle9i)
2- Execute the following commands:
   SQL> oradebug hanganalyze 3
   ... Wait at least 2 minutes to give time to identify process state changes.
   SQL> oradebug hanganalyze 3
3- Open a separate SQL session and immediately generate a system state dump.
   SQL> alter session set events 'immediate trace name SYSTEMSTATE level 10';



Note: Starting with Oracle 9.2 HANGANALYZE can generate HANGANALYZE cluster wide.
Using this feature you can generate session dependencies to all the sessions
connected to all the instances of the RAC cluster. Use the following set of commands
to generate a RAC cluster wide HANGANALYZE:

1- Using SQL*Plus connect as "/ AS SYSDBA"
2- Execute the following commands:
   SQL> oradebug setmypid
   SQL> oradebug setinst all
   SQL> oradebug -g def hanganalyze 3
   ... Wait at least 2 minutes to give time to identify process state changes.
   SQL> oradebug -g def hanganalyze 3

or find out pid from v$process
SQL> ORADEBUG SETORAPID 77
SQL> oradebug unlimit;
SQL> oradebug dump systemstate 266


Moving datafile from one diskgroup to other diskgroup in DR
-----------------------------------------------------------
--Connect to DR server, and cancell recovery
SQL> recover managed standby database cancel;

--Find datafile_id, file ID,file_name  from v$datafiles, which needs to move to other diskgroup

select file#,name from v$datafile where file#=173;
 
ID              FileName
--        --------
173         +DSKGRP1/modsp_dr/datafile/dao_dar_data4m.560.638957467

--Logout from sqlplus connect to RMAN prompt without connecting any catalog

$RMAN target /
RMAN>

--Copy file from DSKGRP1 to DSKGRP2

RMAN>copy datafile '+DSKGRP1/modsp_dr/datafile/dao_dar_data4m.560.638957467' to '+DSKGRP2';


--create subdirectory modsp_dr under +DSKGRP2 folder thru asmcmd if modsp_dr is not exists

--Run Newname command

RMAN>run {
set newname for datafile '+DSKGRP1/modsp_dr/datafile/dao_dar_data4m.560.638957467' to '+DSKGRP2/modsp_dr/datafile/DAO_DAR_DATA4M.256.639101811';
switch datafile 173;
}

--Logout for RMAN prompt then connect TO ASMCMD and query for datafile in two diskgroups. you can see files in two location

ASMCMD>

---Drop old file from first diskgroup to gain space in first diskgroup
---Connect to ASM instance
$ export ORACLE_SID=+ASM
$ASM>dba
$sql>ALTER DISKGROUP DSKGRP1 drop file '+DSKGRP1/modsp_dr/datafile/dao_dar_data4m.560.638957467';

--recover in parellel
recover standby database parellel 12;
recover managed standby database parellel 12;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

--cancel the recovvery
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;

--restore archivelog on standby side
CONNECT TAGET /

run{
allocate channel c1 device type disk format '/dbscratch/%U';
backup force archivelog from logseq = 8 until logseq=708 thread=3;
release channel c1;
}

cd /dbscratch
scp * oracle@aushrddrdb01.us.dell.com:/dbscratch
CATALOG BACKUPPIECE '/dbscratch/h3j4r34r_1_1';            OR
catalog start with '/exp/';
RESTORE ARCHIVELOG from logseq = 8 until logseq=708 thread=3;

recover standby database parellel 12;

--legato NMO version
rpm -qa | grep lgto

nsrwatch <backupserver>

push backup to tape
-----------
run {
allocate channel t1 type 'SBT_TAPE'
parms 'ENV=(NSR_SERVER=ausbups360,NSR_DATA_VOLUME_POOL=arclog)';
backup archivelog from sequence 116791 until sequence 116791 thread 3;
}

>select 'Alter system kill session '''||sid||','||serial# ||''';' from v$session where osuser = 'svcgrid';

parellel query
----------------
SELECT   qcsid,
         sid,
         NVL(server_group,0) server_group,
         server_set,
         degree,
         req_degree
FROM     SYS.V_$PX_SESSION
ORDER BY qcsid,
         NVL(server_group,0),
         server_set;

DBMS_FILE_TRANSFER
-------------------
Here we are using pull approch.
That means connecting from destination machine and pull the file over the db link.

Here are the steps:
1. Create a dblink to source database.
create  public database link emp_prd
connect to system  identified by constellati0n_
using 'emp_prd';

2. Create the directory in database and give privilage to dblink user
create directory  sourcedir as '+ARCH_1/emp/ARCHIVELOG/backup';
grant read, write on  directory  sourcedir to system;

3. Create the Destination directiory.
create directory destdir as '+ARCH_1/EMPTEST/restore';
grant read, write on  directory  destdir to system;

4.Pull the data over dblike using DBMS_FILE_TRANSFER
BEGIN
  DBMS_FILE_TRANSFER.GET_FILE(source_directory_object =>
  'sourcedir', source_file_name => 'emp_l7jc9qkb_1_1',
  source_database => 'emp_prd', destination_directory_object =>
  'destdir', destination_file_name => 'emp_l7jc9qkb_1_1');
END;
/


test by copying files in same machine, 10.2 onwards this way you can move files to ASM.
BEGIN
  DBMS_FILE_TRANSFER.COPY_FILE(
   source_directory_object      => 'DPDUMP_HRDB_DIR1',
   source_file_name             => 'TRANS_HRDB04.dmp',
   destination_directory_object => 'DPDUMP_HRDB_DIR1',
   destination_file_name        => 'TRANS_HRDB04_1.dmp');
END;
/

or you can push the file from one side to another

BEGIN
  DBMS_FILE_TRANSFER.PUT_FILE(
   source_directory_object      => 'DPDUMP_HRDB_DIR1',
   source_file_name             => 'TRANS_HRDB01.dmp',
   destination_directory_object => 'DPDUMP_HRDB_DIR1',
   destination_file_name        => 'TRANS_HRDB01.dmp',
   destination_database         => 'HRDBS_LINK');
END;
/



Automated Memory Management
---------------------------
set following 2 parameters
workarea_size_policy = AUTO
pga_aggregate_target = 2G
you can get the details of memory usage like > select * from v$pgastat;

db file scattered read
----------------------
finding the session with high "db file scattered read"

SELECT sid, total_waits, time_waited FROM v$session_event
WHERE event='db file scattered read' and total_waits>0 ORDER BY 3,2;

hidden parameter values:
------------------------
SELECT a.ksppinm "Parameter",b.ksppstvl "Session Value",c.ksppstvl "Instance Value"
FROM sys.x$ksppi a,sys.x$ksppcv b,sys.x$ksppsv c
WHERE a.indx = b.indx AND a.indx = c.indx AND a.ksppinm LIKE '_allow_level_without_connect_by%';


migration to ASM
-----------------
make sure that the database is in archivelog mode.

alter system set db_create_file_dest='+DATA_1' scope=both;
RMAN> backup device type disk incremental level 0 as copy tag 'ASM_Migration' database format '+DATA_AREA';
sql>select name from v$controlfile; //save the output as x,y,z
sql>alter system set control_files='+DATA_1/TEST/CONTFOLFILES/control01.ctl' scope=spfile;
shutdown immediate;
startup nomount;
rman>restore controlfile from 'x' //directly restore fromt the previous contolfile location
rman>alter database mount;
rman>switch database to copy;
rman>recover database;
alter database open;
alter database add logfile member '+DATA_1' to group 1;  //do this for all groups
//remember that after adding oracle will not sync the data with new member so we need to switch the log 3 times to make the new members useful.
select name from v$tempfile;
alter tablespace temp add tempfile size 10m;
alter tablespace temp drop tempfile 'oldtempfile'

sql turning
-----------
@sqltrpt.sql

changing current schema
-----------------------
ALTER SESSION SET CURRENT_SCHEMA=MAT2D;


PARTITION INFORMATION FOR A TABLE | INDEX
---------------------------------
SELECT TABLESPACE_NAME, PARTITION_NAME FROM DBA_TAB_PARTITIONS WHERE TABLE_NAME='DELL_PERS_NAMES' AND TABLE_OWNER='GLOBAL_HRDB'
ORDER BY TABLESPACE_NAME;

SELECT TABLESPACE_NAME, PARTITION_NAME FROM DBA_IND_PARTITIONS WHERE INDEX_NAME='DELL_PERS_NAMES_PART_TYPE' AND INDEX_OWNER='GLOBAL_HRDB';

SUBPARTITION INFORMATION FOR TABLE
--------------------------------
SELECT TABLESPACE_NAME, PARTITION_NAME, SUBPARTITION_NAME
FROM DBA_TAB_SUBPARTITIONS WHERE TABLE_NAME='POD_EURO'
ORDER BY TABLESPACE_NAME;

LOGIN ATTEMPTS
--------------
>show parameter audit_trail      //this should be "db"
>audit session whenever not successful;
or
>AUDIT SESSION BY PURU WHENEVER NOT SUCCESSFUL;
>select username,OS_USERNAME,userhost,returncode,to_char(timestamp,'DD-MON-YYYY HH24:MI:SS')
from dba_audit_session where timestamp>sysdate-10 and username='COMP';
>noaudit session;   //stops the audit

Monitoring column usage
-----------------------
select   r.name owner,o.name table ,c.name column, equality_preds,equijoin_preds,
   nonequijoin_preds, range_preds, like_preds,  null_preds,  timestamp
from
   sys.col_usage$ u,sys.obj$ o,sys.col$ c,sys.user$ r
where
   o.obj# = u.obj# and c.obj# = u.obj# and c.col# = u.intcol#
and o.owner# = r.user# and (u.equijoin_preds > 0 or u.nonequijoin_preds > 0);

EXECUTION PLAN FROM AWR
-----------------------

1) Locate the query in history views
select p.sql_id, s.sql_text
from dba_hist_sql_plan p,dba_hist_sqltext s
where p.sql_id = s.sql_id and p.OBJECT_NAME='ACTIVE_DIRECTORY_EVENTS'
order by   p.cost desc;

2) Get the execution plan from awr
SELECT * FROM TABLE(dbms_xplan.display_awr('821qu0bt4gy7k'));
//or more specificly : sql_id,plan_hash_value,db_id,extend of info
SELECT * FROM TABLE(dbms_xplan.display_awr('brhp13utj5nr4',4254782894,NULL,'ALL'));
   

or simply quering directly on the table
col ID format 9
col OPERATION for a50
col OPTIONS for a50
col OBJECT_NAME for a30
select id, operation, options, object_name, cost from dba_hist_sql_plan where sql_id = 'brhp13utj5nr4' and plan_hash_value = 4254782894;

ExECUTION PLAN FROM CURSOR CACHE
--------------------------------

1) execute the statement
2) get the execution plan of the last executed statement.
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('dwtt8fpn8ydb5'));

utlrp filed with end of communication chanel.
because view recompile is not performend:
cd $ORACLE_HOME/cpu/view_recompile
sqlplus / as sysdba
SQL> STARTUP UPGRADE
SQL> @view_recompile_jan2008cpu.sql

oracm
/root/start_oracm start

ocrcheck --check for ocr

cd $ORA_CRS_HOME/bin
ocrdump <filename>

ocrconfig -showbackup


Increase CSS Misscount in single instance ASM installations:729878.1
-----------------------------------------------------------
shutdown db and asm
$ORACLE_HOME/bin/localconfig delete    //remove the css configuration
open $ORACLE_HOME/bin/localconfig in an editor and look for line "$CLSCFG -local -o $CH -l "AMERICAN_AMERICA.WE8ISO8859P1"
modfy to "$CLSCFG -local -o $CH -l "AMERICAN_AMERICA.WE8ISO8859P1" -misscount 300"
Re-add CSS by running $ORACLE_HOME/bin/localconfig add.
start asm and db

add disk to asm diskgroup
-------------------------
ALTER DISKGROUP DATA_1 ADD DISK
'/oradata/axisp/db_lun23'  NAME DATA_1_0019,
'/oradata/axisp/db_lun20'  NAME DATA_1_0020,
'/oradata/axisp/db_lun21'  NAME DATA_1_0021,
'/oradata/axisp/db_lun22'  NAME DATA_1_0022;

ALTER DISKGROUP DATA_1 REBALANCE POWER 7;

DGMGRL usage
------------
dgmgrl> connect /
dgmgrl>show configuration

ASM DISKGROUP CREATION
----------------------
CREATE DISKGROUP DATA_1 EXTERNAL REDUNDANCY DISK
'/u02/oradata/asm/data_lun1',
'/u02/oradata/asm/data_lun2',
'/u02/oradata/asm/data_lun3',
'/u02/oradata/asm/data_lun4',
'/u02/oradata/asm/data_lun5',
'/u02/oradata/asm/data_lun6',
'/u02/oradata/asm/data_lun7',
'/u02/oradata/asm/data_lun8';

CREATE DISKGROUP ARCH_1 EXTERNAL REDUNDANCY DISK
'/u02/oradata/asm/arch_lun1',
'/u02/oradata/asm/arch_lun2',
'/u02/oradata/asm/arch_lun3';

but it won't be mounted in the other nodes, so issue following commands in other nodes

ALTER DISKGROUP DATA_1 MOUNT;
ALTER DISKGROUP ARCH_1 MOUNT;

but diskgroups won't do auto mount until you specify it in asm init file (init+ASM1.ora) like:
asm_diskgroups='DATA_1','ARCH_1'

ASM copy files to remote ASM (11g)
ASMCMD> cp -ifr +DATA_1/PONCP/DATAFILE/data01.264.698338435  sys@ausponcdrdb01.1521.+ASM1:+DATA_1/PONCP/DATAFILE/DATA01


DBCA automation
---------------
cd /misc/software/oracle/tools/dbca 
./dell_dbca_auto.sh -rac -noasm -db aussyncdrdb01,aussyncdrdb02 -dbname syncp.dr.amer.dell.com -noarchlog


nls_length_semantics
--------------------
alter system set nls_length_semantics=char;
alter system set nls_length_semantics=byte;

alter session set nls_length_semantics=char;
alter session set nls_length_semantics=byte;

select * from sys.database_properties where PROPERTY_NAME='NLS_LENGTH_SEMANTICS';

default client behavior can be altered by setting enviorment variable.
export NLS_LENGTH_SEMANTICS=char

col DATA_TYPE for a30
select TABLE_NAME,column_name,COLUMN_ID,DATA_TYPE,CHAR_USED from dba_tab_columns a where table_name = 'HRD_PHOTO_TEMP';

11g password and user account
-----------------------------
set head off
set pages 0
set long 9999999
SELECT DBMS_METADATA.GET_DDL('USER', 'TROUX_USER') from dual;

set heading off;
set echo off;
set lines 200;
Set pages 2000;
set long 90000;
set trimspool on
set trim on
col CMD format a300;
spool dblink.txt
select dbms_metadata.get_ddl('INDEX','XIE2REVIEW_DETAIL','PERFMAN_SCHEMA')||';' as CMD from dual;
select dbms_metadata.get_ddl('DB_LINK','DCLP.WORLD','TRANS_HRDB') as CMD from dual;
select dbms_metadata.GET_DDL('TABLE','AFF_CODES_GHRDR','GHRDR') as CMD from dual;
select dbms_metadata.GET_DDL('VIEW','HR_DIRECTORY_VIEW','SERVICE_HR') as CMD from dual;
select dbms_metadata.GET_DEPENDENT_DDL('CONSTRAINT','AFF_CODES_GHRDR','GHRDR') as CMD from dual;
select dbms_metadata.get_ddl('SYNONYM','HR_DIRECTORY','SERVICE_HR') as CMD  from dual;
spool off

--need to test
set verify off


10.2.0.3 to 10.2.0.4 db upgrade
--------------------------------
for CRS upgrade see the MyRAC doc

shutdown everything running from oracle home (DB,ASM, nodeapps/listner) and invoke the OUI
$cd /misc/software/oracle/10gDB/10.2.0.4_64/Patchset/Disk1
$./runInstaller
Make sure that you are selecting the oracle home for upgrade from the combo.
ones OUI session is completed. run root.sh with root privilage
sudo /misc/software/linux/OracleScripts/run_oracle_root /u01/app/oracle/product/10.2.0/db_1/root.sh
bring up the db instance in one node and set the cluster database to false
system set cluster_database=false scope=spfile;
shudown and startup in upgrade mode
startup upgrade
run the followings, if possible spool the outputs,
can use dbua but i hate it.
@?/rdbms/admin/utlu102i.sql  
@?/rdbms/admin/catupgrd.sql            
shutdown the instance and startup in normal
@?/rdbms/admin/utlrp.sql

finally make sure that you really upgraded the database :)

and don't forget to put the cluster_database=true back.

dba_jobs
---------
select job,log_user,last_date,last_sec,next_date,next_sec,interval,broken from DBA_JOBS;
select job, next_date, broken, interval, failures from dba_jobs order by next_date;

-Jobs currently running
select sid,JOB  from dba_jobs_running;
SELECT SID, TYPE, ID1, ID2   FROM V$LOCK   WHERE TYPE = 'JQ';   --lock kept by currently running job

--job locks
SELECT SID, TYPE, ID1, ID2   FROM V$LOCK   WHERE TYPE = 'JQ';


Removing the Job from job queue
-------------------------------
BEGIN
DBMS_JOB.REMOVE(14144);
END;
/

Job not running : Checklist For Job Issues (search with same words in the following page)
http://support.confio.com/blog/post/why-wont-my-oracle-jobs-run/13/

Relink oracle home
-------------------
cd $ORACLE_HOME/rdbms/lib
make -f  ins_rdbms.mk  ioracle

11g Sql Plan Managment SPM
---------------------------
OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=TRUE
OPTIMIZER_USE_SQL_PLAN_BASELINES = TRUE
OPTIMIZER_MODE = FIRST_ROWS | ALL_ROWS

SET LINESIZE 150
SET PAGESIZE 2000
SELECT PT.* FROM
    (SELECT DISTINCT sql_handle FROM dba_sql_plan_baselines
        --WHERE sql_text like '%SPM%'
        ) SPB,
        TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(SPB.sql_handle, NULL,'TYPICAL +NOTE')) PT;

redo file size
--------------
select GROUP#,THREAD#,BYTES/1024/1024,
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 7 SIZE 512M;

Library cache
--------------
select namespace, pins, pinhits, reloads, invalidations, pinhitratio * 100  hitratio from v$librarycache;
in summary:
select sum(pins) pins, sum(pinhits) pinhits, sum(reloads) reloads, sum(invalidations) invalidations, 100-(sum(pinhits)/sum(pins)) *100 reparsing from v$librarycache;

for RDA report please refer:
C:\Docs\Oracle\RDAWRAP_Playbook.docx

oswatch / ops readyness:
C:\Docs\Dell\OpReady.txt

DB Tend
--------
/misc/software/oracle/dba_scripts/dbtrends/DbTrends.zip

PCT_FREE : calculate requied pct free for tables.
---------
set heading off;
set pages 9999;
set feedback off;
spool pctused.lst;

define spare_rows = 2;
define blksz = 4096;
select
 'alter table '||owner||'.'||table_name||
 'pctused '||least(round(100-((&spare_rows*avg_row_len)/(&blksz/10))),95)||' '||
 'pctfree '||greatest(round((&spare_rows*avg_row_len)/(&blksz/10)),5)||';'
from dba_tables where table_name IN ('DELL_EMP_LISTER_WORK','DELL_EMP_LISTER','DELL_EMP_HIST_LISTER')
order by owner, table_name;

INI_TRANS
--------
col "Object" format a20
set numwidth 12
set lines 200
set pages 2000
 
select * from(
select DECODE(GROUPING(a.object_name), 1, 'All Objects', a.object_name) AS "Object",
   sum(case when a.statistic_name = 'ITL Waits' then a.value else null end) "ITL Waits",
   sum(case when a.statistic_name = 'buffer busy waits' then a.value else null end) "Buffer Busy Waits",
   sum(case when a.statistic_name = 'row lock waits' then a.value else null end) "Row Lock Waits",
   sum(case when a.statistic_name = 'physical reads' then a.value else null end) "Physical Reads",
   sum(case when a.statistic_name = 'logical reads' then a.value else null end) "Logical Reads"
from
   v$segment_statistics a
where
   a.owner like upper('TRANS_HRDB')
group by rollup(a.object_name)) b
where (b."ITL Waits">0 or b."Buffer Busy Waits">0);

--ganesh kumar script for seeing ITL waits
select * from
(select 'ALTER '||m.object_type||' '||m.owner||'.'||m.object_name||' INITRANS 15'||';' , m.statistic_name, m.value, rank() over (order by m.value desc) value_rank
from v$segment_statistics m
where owner not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP', 'OUTLN', 'WMSYS', 'PERFMON', 'EXFSYS', 'PERFMON')
and statistic_name = 'ITL waits' and value > 0)
where value_rank < 11;

SELECT EVENT,TOTAL_WAITS,TIME_WAITED_MICRO FROM v$system_event order by TIME_WAITED_MICRO;

row chaining
------------
select * from v$sysstat where name like 'table fetch cont%';
select a.SID,a.STATISTIC#,a.VALUE,b.name from v$sesstat a,v$statname b where a.statistic# = b.statistic#
and b.name like 'table fetch cont%' and a.sid=2053;

--find out the tables suffering with row chaining
select owner, table_name, chain_cnt, num_rows, (chain_cnt*100)/num_rows chain_ratio, avg_row_len, pct_free, last_analyzed
from dba_tables where owner not in ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP', 'OUTLN', 'WMSYS', 'EXFSYS', 'PERFMON') and chain_cnt > 0
order by chain_cnt desc;

--find out row length
first findout the filed size of each column

SELECT COLUMN_NAME FROM dba_tab_columns WHERE TABLE_NAME = 'DELL_EMP_LISTER_WORK' AND OWNER = 'TRANS_HRDB';

SELECT   max(vsize(PREV_LOCAL_JOBID)), max(PREV_LOCAL_JOBID) FROM TRANS_HRDB.DELL_EMP_LISTER_WORK;

select 3 + avg(nvl(dbms_lob.getlength(CASE_DATA),0)+1 +
               nvl(vsize(CASE_NUMBER   ),0)+1 +
               nvl(vsize(CASE_DATA_NAME),0)+1 +
               nvl(vsize(LASTMOD_TIME_T),0)+1
              ) "Total bytes per row"
from  arch_case_data where case_number = 301;

sql tuning task
----------------
DECLARE
  l_sql_tune_task_id  VARCHAR2(100);
BEGIN
  l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
                          begin_snap  => 42491,
                          end_snap    => 42492,
                          sql_id      => 'brhp13utj5nr4',
                          plan_hash_value => 1532844933,
                          scope       => DBMS_SQLTUNE.scope_comprehensive,
                          time_limit  => 3600,
                          task_name   => 'brhp13utj5nr4_AWR_tuning_task',
                          description => 'Tuning task for statement 1brhp13utj5nr4 in AWR.');
  DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END;
/

install oracle on ubuntu and other version linux
------------------------------------------------
./runInstaller -ignoresysprereqs

LOBS
---------
col COLUMN_NAME for a30
col OWNER for a15
col TABLE_NAME for a20
SELECT A.OWNER,A.TABLE_NAME,A.COLUMN_NAME,A.SEGMENT_NAME,A.INDEX_NAME,B.BYTES/1024/1024
FROM DBA_LOBS A JOIN DBA_SEGMENTS B ON A.SEGMENT_NAME = B.SEGMENT_NAME AND A.OWNER = B.OWNER AND A.OWNER = 'LOGISTICS' AND A.TABLE_NAME IN ('GPOSOURCEDATA','QB_MESSAGE_NAMED_STR');

alter table LOGISTICS.QB_MESSAGE_NAMED_STR modify lob (VALUE) (shrink space cascade);
alter table LOGISTICS.GPOSOURCEDATA modify lob (MESSAGE) (shrink space cascade);

Č
ċ
ď
Jobin Augustine,
Aug 24, 2011 1:40 AM
ċ
ď
Jobin Augustine,
Aug 24, 2011 1:39 AM