Wednesday, May 25, 2016

Troubleshooting Distributed Transaction

Multiple locations experiencing issue connecting to  because of pending transactions:

Step 1)
SQL> select local_tran_id, global_tran_id, state,mixed, host, commit# from dba_2pc_pending;
LOCAL_TRAN_ID           GLOBAL_TRAN_ID                                             STATE     MIX              HOST                     COMMIT#
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2500.16.262202         1145324612.AD0A41E9A41CB544A01235C40376167A00000000         prepared     no        ADM\DAA3        192752694778

step 2)
Find which transactions in "prepared" state and also in "forced rollback" state.
-- For "Prepared" state transaction:
-- Rollback the transactions using rollback force:

SQL> rollback force '<local_tran_id>';
SQL> ROLLBACK FORCE '2500.16.262202';

step 3)
Check again for state, it should be forced rollback.

SQL> select local_tran_id, global_tran_id, state,mixed, host, commit# from dba_2pc_pending where local_tran_id='2500.16.262202';
 LOCAL_TRAN_ID           GLOBAL_TRAN_ID                                                 STATE            MIX              HOST                     COMMIT#
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2500.16.262202            1145324612.AD0A41E9A41CB544A01235C40376167A00000000         forced rollback     no        ADM\ADMROCW3        192752694778

step 4) 
For transactions in "forced rollback" state: (Need confirmation)
 
SQL> alter session set "_smu_debug_mode" = 4;
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('<local_tran_id>');
SQL> commit;


Purging Pending Rows from the Data Dictionary

Before RECO recovers an in-doubt transaction, the transaction appears in DBA_2PC_PENDING.STATE as COLLECTING, COMMITTED,  or PREPARED. If you force an in-doubt transaction using COMMIT FORCE or ROLLBACK FORCE, then the states FORCED COMMIT or FORCED ROLLBACK may appear.

Automatic recovery normally deletes entries in these states. The only exception is when recovery discovers a forced transaction that is in a state inconsistent with other sites in the transaction. In this case, the entry can be left in the table and the MIXED column in DBA_2PC_PENDING has a value of YES. These entries can be cleaned up with the DBMS_TRANSACTION.PURGE_MIXED procedure.

If automatic recovery is not possible because a remote database has been permanently lost, then recovery cannot identify the re-created database because it receives a new database ID when it is re-created. In this case, you must use the PURGE_LOST_DB_ENTRY procedure in the DBMS_TRANSACTION package to clean up the entries. The entries do not hold up database resources, so there is no urgency in cleaning them up.

Manually Overriding In-Doubt Transactions

Use the COMMIT or ROLLBACK statement with the FORCE option and a text string that indicates either the local or global transaction ID of the in-doubt transaction to commit.

Note:

In all examples, the transaction is committed or rolled back on the local node, and the local pending transaction table records a value of forced commit or forced termination for the STATE column of this transaction's row.

This section contains the following topics:

1.       Manually Committing an In-Doubt Transaction
2.       Manually Rolling Back an In-Doubt Transaction

1.       Manually Committing an In-Doubt Transaction
Before attempting to commit the transaction, ensure that you have the proper privileges. Note the following requirements:

If the transaction was committed by...
 Then you must have this privilege...

You
 FORCE TRANSACTION

Another user
 FORCE ANY TRANSACTION

Committing Using Only the Transaction ID
The following SQL statement commits an in-doubt transaction:

COMMIT FORCE 'transaction_id';

The variable transaction_id is the identifier of the transaction as specified in either the LOCAL_TRAN_ID or GLOBAL_TRAN_ID columns of the DBA_2PC_PENDING data dictionary view.
For example, assume that you query DBA_2PC_PENDING and determine that LOCAL_TRAN_ID for a distributed transaction is 1:45.13.
You then issue the following SQL statement to force the commit of this in-doubt transaction:

COMMIT FORCE '1.45.13';

Committing Using an SCN

Optionally, you can specify the SCN for the transaction when forcing a transaction to commit. This feature allows you to commit an in-doubt transaction with the SCN assigned when it was committed at other nodes.

Consequently, you maintain the synchronized commit time of the distributed transaction even if there is a failure. Specify an SCN only when you can determine the SCN of the same transaction already committed at another node.

For example, assume you want to manually commit a transaction with the following global transaction ID:

SALES.ABCM.COM.55d1c563.1.93.29

First, query the DBA_2PC_PENDING view of a remote database also involved with the transaction in question.
 Note the SCN used for the commit of the transaction at that node. Specify the SCN when committing the transaction at the local node. For example, if the SCN is 829381993, issue:

COMMIT FORCE 'SALES.ABCM.COM.55d1c563.1.93.29', 829381993;


2.       Manually Rolling Back an In-Doubt Transaction

Before attempting to roll back the in-doubt distributed transaction, ensure that you have the proper privileges.
 Note the following requirements:

If the transaction was committed by...
 Then you must have this privilege...

You
 FORCE TRANSACTION

Another user
FORCE ANY TRANSACTION

The following SQL statement rolls back an in-doubt transaction:

ROLLBACK FORCE 'transaction_id';

The variable transaction_id is the identifier of the transaction as specified in either the LOCAL_TRAN_ID
 or GLOBAL_TRAN_ID columns of the DBA_2PC_PENDING data dictionary view.

For example, to roll back the in-doubt transaction with the local transaction ID of 2.9.4, use the following statement:

ROLLBACK FORCE '2.9.4';

Note:
You cannot roll back an in-doubt transaction to a savepoint.


Below are the tables to find the pending transactions:

select * DBA_2PC_PENDING;
select * from DBA_2PC_NEIGHBORS;
select * from sys.pending_trans$;
select * from SYS.PENDING_SESSIONS$;

select * from SYS.PENDING_SUB_SESSIONS$;

Troubleshooting Blocking Session

1. To check what sessions are currently accessing the highly used table HU_TABLE owned by USER1 on ALL NODES

SET LINESIZE 200
SET PAGES 999
COL OBJECT FOR A30
COL PROGRAM FOR A10
COL MACHINE FOR A20
COL LOGON_TIME FOR A20
COL USERNAME FOR A10
COL OSUSER FOR A20

SELECT A.OBJECT,A.TYPE,A.SID,TO_CHAR(B.LOGON_TIME, 'DD-MON-YYYY HH24:MI:SS') "LOGON_TIME",B.USERNAME,B.OSUSER,B.PROGRAM,B.MACHINE
FROM V$ACCESS A
JOIN V$SESSION B ON (A.SID = B.SID)
AND A.OBJECT='HU_TABLE'
AND A.TYPE='TABLE';

2. To check if there are any blocking sessions on HU_TABLE on ALL NODES

SET LINESIZE 200
SET PAGES 999
COL OBJECT FOR A30
COL PROGRAM FOR A10
COL MACHINE FOR A20
COL LOGON_TIME FOR A20
COL USERNAME FOR A10
COL OSUSER FOR A20

SELECT S.SID,SQL_HASH_VALUE,S.USERNAME,S.MACHINE,S.EVENT,TO_CHAR(S.LOGON_TIME, 'DD-MON-YYYY HH24:MI:SS') "LOGON_TIME",S.MODULE,BLOCKING_INSTANCE "B_INST",BLOCKING_SESSION "B_SID" FROM V$ACCESS A, V$SESSION S WHERE A.SID=S.SID AND S.STATUS='ACTIVE' AND OBJECT='HU_TABLE' AND OWNER='USER1' AND BLOCKING_SESSION IS NOT NULL AND USERNAME IS NOT NULL;


3. To Check Blocking Sessions on ALL NODES

SET LINESIZE 200 PAGES 999
COL SID FOR 9999
COL USERNAME FOR A8
COL MACHINE FOR A23
COL EVENT FOR A50
COL MODULE FOR A40
COL B_SID FOR 9999
COL B_INST FOR 9
COL LOGON_TIME FOR A20

SELECT SID,SQL_HASH_VALUE,USERNAME,MACHINE,EVENT,TO_CHAR(LOGON_TIME, 'DD-MON-YYYY HH24:MI:SS') "LOGON_TIME",MODULE,BLOCKING_INSTANCE "B_INST",BLOCKING_SESSION "B_SID" FROM V$SESSION WHERE STATUS='ACTIVE' AND BLOCKING_SESSION IS NOT NULL AND USERNAME IS NOT NULL;


4. If any of the above query (2 and 3) shows blocking sessions then we need to find out the detials of the blocking sessions
Please not that B_Inst depcits which node is blocking. Example: if the value of B_Inst = 3 then please run the below query on node3

SET LINESIZE 200 PAGES 999
COL SID FOR 9999
COL USERNAME FOR A8
COL MACHINE FOR A23
COL EVENT FOR A50
COL MODULE FOR A40
COL B_SID FOR 9999
COL B_INST FOR 9
COL LOGON_TIME FOR A20

SELECT SID,SERIAL#,SQL_HASH_VALUE,USERNAME,MACHINE,EVENT,TO_CHAR(LOGON_TIME, 'DD-MON-YYYY HH24:MI:SS') "LOGON_TIME",MODULE,BLOCKING_INSTANCE "B_INST",BLOCKING_SESSION "B_SID" FROM V$SESSION WHERE SID='&SID';

5. Fetch the SQL of session for the SID returned (Enter the SQL_HASH_VALUE)

SET LONG 9999
SELECT A.SID,B.SQL_TEXT FROM V$SESSION A, V$SQLTEXT B WHERE A.SQL_HASH_VALUE = B.HASH_VALUE AND A.SQL_HASH_VALUE='';

6. Kill sessions as per instructed by Application Team ( Sid and Serial# from Query no. 4)

ALTER SYSTEM KILL SESSION '&SID','&serial#' IMMEDIATE;


7. Verify Killed Sessions ( How much time they will take once they have been marked killed)


SELECT A.SID, A.USERNAME, B.XIDUSN, B.USED_UREC, B.USED_UBLK FROM V$SESSION A, V$TRANSACTION B WHERE A.SADDR = B.SES_ADDR AND A.STATUS ='KILLED';

RMAN

Get size of failed backup per database for 1 month

SET LINESIZE 1000
SET PAGESIZE 1000
SELECT DB_NAME,SUM(OUTPUT_BYTES/1024/1024) SIZE_IN_MB  FROM  RC_BACKUP_SET_DETAILS A WHERE (SESSION_KEY IN (SELECT B.SESSION_KEY FROM RC_RMAN_BACKUP_JOB_DETAILS B WHERE STATUS = 'FAILED' AND B.START_TIME > (SYSDATE - 30) AND B.INPUT_TYPE='DB FULL')) GROUP BY A.DB_NAME;

Get size of failed backup per database per backupset for 1 month

SET LINESIZE 1000
SET PAGESIZE 1000
SELECT DB_NAME,BS_KEY,SUM(OUTPUT_BYTES/1024/1024) SIZE_IN_MB FROM  RC_BACKUP_SET_DETAILS A WHERE (SESSION_KEY IN (SELECT B.SESSION_KEY FROM RC_RMAN_BACKUP_JOB_DETAILS B WHERE STATUS = 'FAILED' AND B.START_TIME > (SYSDATE - 30) AND B.INPUT_TYPE='DB FULL')) GROUP BY A.DB_NAME,A.BS_KEY;

Get total size of failed backups per database

SET LINESIZE 1000
SET PAGESIZE 1000
SELECT DB_NAME,SUM(OUTPUT_BYTES/1024/1024) SIZE_IN_MB  FROM  RC_BACKUP_SET_DETAILS A WHERE (SESSION_KEY IN (SELECT B.SESSION_KEY FROM RC_RMAN_BACKUP_JOB_DETAILS B WHERE STATUS = 'FAILED' AND B.INPUT_TYPE='DB FULL')) GROUP BY A.DB_NAME;

Get total size of failed backup 

SET LINESIZE 1000
SET PAGESIZE 1000
SELECT SUM(OUTPUT_BYTES/1024/1024) SIZE_IN_MB  FROM  RC_BACKUP_SET_DETAILS A WHERE (SESSION_KEY IN (SELECT B.SESSION_KEY FROM RC_RMAN_BACKUP_JOB_DETAILS B WHERE STATUS = 'FAILED' AND B.INPUT_TYPE='DB FULL'));

SET PAGESIZE 1000
SET LINESIZE 120
COLUMN RECID FORMAT 99999
COL HANDLE FORMAT A50
COL COMMENTS FORMAT A50
WITH REC AS (SELECT RECID FROM RC_BACKUP_SET_DETAILS WHERE SESSION_KEY IN (SELECT B.SESSION_KEY FROM RC_RMAN_BACKUP_JOB_DETAILS B WHERE STATUS = 'FAILED' AND B.START_TIME > (SYSDATE - 30) AND B.INPUT_TYPE='DB FULL')) SELECT RECID,HANDLE,COMMENTS FROM RC_BACKUP_PIECE_DETAILS WHERE RECID IN (SELECT RECID FROM REC)


Admin

Session Long ops

SET LINESIZE 130
SET PAGESIZE 1000

COLUMN SID FORMAT 999
COLUMN SERIAL# FORMAT 9999999
COLUMN MACHINE FORMAT A25
COLUMN PROGRESS_PCT FORMAT 99999999.00
COLUMN ELAPSED FORMAT A10
COLUMN REMAINING FORMAT A10
COLUMN STIME FORMAT A10
COLUMN SQL_HASH_VALUE FORMAT 9999999999

SELECT S.SID,
       S.SERIAL#,
       S.MACHINE,
            SL.OPNAME,
            TO_CHAR(SL.START_TIME,'DD-MON-YY HH24:MI:SS') STIME,
            SL.USERNAME,
            SL.SQL_HASH_VALUE,
       TRUNC(SL.ELAPSED_SECONDS/60) || ':' || MOD(SL.ELAPSED_SECONDS,60) ELAPSED,
       TRUNC(SL.TIME_REMAINING/60) || ':' || MOD(SL.TIME_REMAINING,60) REMAINING,
       ROUND(SL.SOFAR/SL.TOTALWORK*100, 2) PROGRESS_PCT
FROM   V$SESSION S,
       V$SESSION_LONGOPS SL
WHERE  S.SID     = SL.SID
AND    S.SERIAL# = SL.SERIAL#
AND       SL.TOTALWORK <> 0
AND    SL.SOFAR/SL.TOTALWORK < 1;


Expired UNDO

SELECT SUM(BYTES)/1024/1024 ,TABLESPACE_NAME,STATUS FROM DBA_UNDO_EXTENTS GROUP BY TABLESPACE_NAME,STATUS;

IMPORT MONITORING

SELECT SUBSTR(SQL_TEXT,INSTR(SQL_TEXT,'INTO "'),30) TABLE_NAME,
ROWS_PROCESSED,
ROUND((SYSDATE - TO_DATE(FIRST_LOAD_TIME,'YYYY-MM-DD HH24:MI:SS'))*24*60,1) MINUTES,
TRUNC(ROWS_PROCESSED/((SYSDATE-TO_DATE(FIRST_LOAD_TIME,'YYYY-MM-DD HH24:MI:SS'))*24*60)) ROWS_PER_MINUTE
FROM SYS.V_$SQLAREA
WHERE SQL_TEXT LIKE 'INSERT %INTO "%'
AND  COMMAND_TYPE = 2 AND   OPEN_VERSIONS > 0;

DDL Locks

COL USERNAME FOR A12
COL OBJECT_LOCKED FOR A40
COL MACHINE/PID FOR A30
COL PROGRAM FOR A30
SET LINESIZE 132
SET VERIFY OFF
SELECT S.USERNAME, S.SID, S.PROGRAM, D.OWNER || '.' || D.NAME OBJECT_LOCKED, DECODE(S.PROCESS, NULL, S.MACHINE, S.MACHINE || ' PID: ' || TO_CHAR(S.PROCESS)) "MACHINE/PID"
FROM V$SESSION S, DBA_DDL_LOCKS D WHERE S.SID = D.SESSION_ID AND D.TYPE LIKE '%/Function/%' AND D.OWNER = 'USER1' AND D.NAME = 'OVERRIDE';

Sort Usage

SELECT SUM( U.BLOCKS * BLK.BLOCK_SIZE)/1024/1024 "MB. IN SORT SEGMENTS" , (HWM.MAX * BLK.BLOCK_SIZE)/1024/1024 "MB. HIGH WATER MARK" FROM V$SORT_USAGE U, (SELECT BLOCK_SIZE FROM DBA_TABLESPACES WHERE CONTENTS = 'TEMPORARY') BLK , (SELECT SEGBLK#+BLOCKS MAX FROM V$SORT_USAGE WHERE SEGBLK# = (SELECT MAX(SEGBLK#) FROM V$SORT_USAGE) ) HWM GROUP BY HWM.MAX * BLK.BLOCK_SIZE/1024/1024;

Find out session details

ps -e -o pcpu,pid,user,args | sort

SELECT A.USERNAME,A.OSUSER,A.PROGRAM,SPID,SID,A.SERIAL# FROM V$SESSION A, V$PROCESS B WHERE A.PADDR=B.ADDR AND SPID=

ACCEPT SID PROMPT 'SID: '
ACCEPT SERIAL PROMPT 'SERIAL#: '
SELECT B.USERNAME,A.SQL_TEXT FROM V$SQL A, V$SESSION B WHERE B.SQL_ADDRESS=A.ADDRESS AND B.SQL_HASH_VALUE=A.HASH_VALUE AND B.SID=&SID AND B.SERIAL#='&SERIAL'

Rollback Segment Usage By User

SELECT R.NAME "RBS", S.SID, S.SERIAL#, S.USERNAME "USER", T.STATUS,T.CR_GET, T.PHY_IO, T.USED_UBLK, T.NOUNDO ,SUBSTR(S.PROGRAM, 1, 18) "COMMAND" FROM   SYS.V_$SESSION S, SYS.V_$TRANSACTION T, SYS.V_$ROLLNAME R WHERE  T.ADDR = S.TADDR AND  T.XIDUSN = R.USN ORDER  BY 1

BLOCKING SESSION

SELECT L1.SID, ' IS BLOCKING ', L2.SID FROM V$LOCK L1, V$LOCK L2 WHERE L1.BLOCK =1 AND L2.REQUEST > 0 AND L1.ID1=L2.ID1 AND L1.ID2=L2.ID2

SELECT S1.USERNAME || '@' || S1.MACHINE || ' ( SID=' || S1.SID || ' )  IS BLOCKING ' || S2.USERNAME || '@' || S2.MACHINE || ' ( SID=' || S2.SID || ' ) ' AS BLOCKING_STATUS
FROM V$LOCK L1, V$SESSION S1, V$LOCK L2, V$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 ;

SELECT SID,SERIAL#,USERNAME,STATUS FROM V$SESSION WHERE SID IN (131,184,141);

RMAN BACKUP SIZE

SELECT CTIME "DATE", DECODE(BACKUP_TYPE, 'L', 'ARCHIVE LOG', 'D', 'FULL', 'I', 'INCREMENTAL') BACKUP_TYPE,
 BSIZE "SIZE MB" FROM (SELECT TRUNC(BP.COMPLETION_TIME) CTIME,BACKUP_TYPE,ROUND(SUM(BP.BYTES/1024/1024),2) BSIZE
 FROM V$BACKUP_SET BS, V$BACKUP_PIECE BP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT  = BP.SET_COUNT
  AND BP.STATUS = 'A' GROUP BY TRUNC(BP.COMPLETION_TIME), BACKUP_TYPE) ORDER BY 1, 2;

SELECT CTIME "DATE", DECODE(BACKUP_TYPE, 'L', 'ARCHIVE LOG', 'D', 'FULL', 'I', 'INCREMENTAL') BACKUP_TYPE,
 BSIZE "SIZE MB" FROM (SELECT TRUNC(BP.COMPLETION_TIME) CTIME,BS.BACKUP_TYPE,ROUND(SUM(BP.BYTES/1024/1024),2) BSIZE
FROM RC_BACKUP_SET BS, RC_BACKUP_PIECE BP WHERE BP.DB_ID='2399412135' AND BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT  = BP.SET_COUNT
 AND BP.STATUS = 'A' GROUP BY TRUNC(BP.COMPLETION_TIME), BS.BACKUP_TYPE) ORDER BY 1, 2

SELECT CTIME "DATE", DECODE(BACKUP_TYPE, 'L', 'ARCHIVE LOG', 'D', 'FULL', 'I', 'INCREMENTAL') BACKUP_TYPE,
 BSIZE "SIZE MB" FROM (SELECT COUNT(*),TRUNC(BP.COMPLETION_TIME) CTIME,BS.BACKUP_TYPE,ROUND(SUM(BP.BYTES/1024/1024),2) BSIZE
FROM RC_BACKUP_SET BS, RC_BACKUP_PIECE BP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT  = BP.SET_COUNT
 AND BP.STATUS = 'A' GROUP BY TRUNC(BP.COMPLETION_TIME), BS.BACKUP_TYPE)ORDER BY 1, 2;

SELECT COUNT(*), TRUNC(BP.COMPLETION_TIME) CTIME,BACKUP_TYPE,ROUND(SUM(BP.BYTES/1024/1024),2) BSIZE
 FROM V$BACKUP_SET BS, V$BACKUP_PIECE BP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT  = BP.SET_COUNT
  AND BP.STATUS = 'A' GROUP BY TRUNC(BP.COMPLETION_TIME), BACKUP_TYPE

SELECT COUNT(*),TRUNC(BP.COMPLETION_TIME) CTIME,BS.BACKUP_TYPE,ROUND(SUM(BP.BYTES/1024/1024),2) BSIZE
FROM RC_BACKUP_SET BS, RC_BACKUP_PIECE BP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT  = BP.SET_COUNT

 AND BP.STATUS = 'A' GROUP BY TRUNC(BP.COMPLETION_TIME), BS.BACKUP_TYPE ORDER BY CTIME;

Tuesday, May 24, 2016

Space Management

Space In Temp Tablespace

SELECT A.TABLESPACE_NAME TABLESPACE, D.MB_TOTAL,SUM(A.USED_BLOCKS * D.BLOCK_SIZE) / 1024 / 1024 MB_USED, D.MB_TOTAL - SUM (A.USED_BLOCKS * D.BLOCK_SIZE) / 1024 / 1024 MB_FREE FROM V$SORT_SEGMENT A, (SELECT B.NAME, C.BLOCK_SIZE, SUM (C.BYTES) / 1024 / 1024 MB_TOTAL FROM V$TABLESPACE B, V$TEMPFILE C WHERE B.TS#= C.TS# GROUP BY B.NAME, C.BLOCK_SIZE) D WHERE A.TABLESPACE_NAME = D.NAME GROUP BY A.TABLESPACE_NAME, D.MB_TOTAL;

Tablespace Free Space

COLUMN "TABLESPACE" FORMAT A13
COLUMN "USED MB"    FORMAT 99,999,999
COLUMN "FREE MB"    FORMAT 99,999,999
COLUMN "TOTAL MB"   FORMAT 99,999,999

SELECT F.TABLESPACE_NAME,
A.BYTES/1024/1024 " TOTAL MB" ,
ROUND(U.BYTES/1024/1024) "USED MB",
ROUND(F.BYTES/1024/1024) "FREE MB",
ROUND((100 * (F.BYTES/1024/1024))/(A.BYTES/1024/1024)) "PCT. FREE"
FROM SM$TS_AVAIL A,SM$TS_USED U, SM$TS_FREE F
WHERE A.TABLESPACE_NAME=U.TABLESPACE_NAME
AND U.TABLESPACE_NAME=F.TABLESPACE_NAME
AND A.TABLESPACE_NAME=F.TABLESPACE_NAME;

SELECT TABLESPACE_NAME,BYTES/1024/1024 "MB" FROM SM$TS_FREE;

SELECT TABLESPACE_NAME,BYTES/1024/1024 "MB" FROM SM$TS_USED;


SELECT TABLESPACE_NAME,BYTES/1024/1024 "MB" FROM SM$TS_AVAIL;


COLUMN "TABLESPACE" FORMAT A13
COLUMN "USED MB"    FORMAT 99,999,999
COLUMN "FREE MB"    FORMAT 99,999,999
COLUMN "TOTAL MB"   FORMAT 99,999,999
SELECT
   FS.TABLESPACE_NAME                          "TABLESPACE",
   (DF.TOTALSPACE - FS.FREESPACE)              "USED MB",
   FS.FREESPACE                                "FREE MB",
   DF.TOTALSPACE                               "TOTAL MB",
   ROUND(100 * (FS.FREESPACE / DF.TOTALSPACE)) "PCT. FREE"
FROM
   (SELECT
      TABLESPACE_NAME,
      ROUND(SUM(BYTES) / 1048576) TOTALSPACE
   FROM
      DBA_DATA_FILES
   GROUP BY
      TABLESPACE_NAME
   ) DF,
   (SELECT
      TABLESPACE_NAME,
      ROUND(SUM(BYTES) / 1048576) FREESPACE
   FROM
      DBA_FREE_SPACE
   GROUP BY
      TABLESPACE_NAME
   ) FS
WHERE
   DF.TABLESPACE_NAME = FS.TABLESPACE_NAME(+);

Add Datafile

ALTER tablespace USERS add DATAFILE '/testdb1/tables/users01_04.dbf' size 10240M;

Resize Datafile

ALTER database DATAFILE '/u03/oradata/DWHP1/rental03.dbf' resize 40000M;

Add Datafile in ASM

ALTER TABLESPACE DATA1 add datafile '+DATA_R1' size 10G

Resize Datafile In ASM

ALTER DATABASE DATAFILE '+DATA_R1/testdb1/datafile/system.370.745406019' RESIZE 2000M;

Add a autoextendable Datafile

ALTER TABLESPACE DATA1 add datafile '+DATA_R1' size 10G AUTOEXTEND on maxsize 32767M;

Resize autoextendable Datafile

ALTER DATABASE DATAFILE '+DATA_R1/testdb1/datafile/system.370.745406019'  autoextend on maxsize 32767M;

Check Size Of All Tablespace Based On Max Size

SET LINESIZE 140
SET PAGESIZE 100
COL FILE_NAME FOR A60
SELECT TABLESPACE_NAME,SUM(BYTES/1024/1024) "SIZEMB", SUM(MAXBYTES/1024/1024) "MAXMB", ROUND((100 * (SUM(MAXBYTES)-SUM(BYTES)))/NULLIF(SUM(MAXBYTES),0)) "PCT. FREE" FROM DBA_DATA_FILES  GROUP BY TABLESPACE_NAME;

Check Size Of All Datafiles Based On Max Size

SET LINESIZE 140
SET PAGESIZE 100
COL FILE_NAME FOR A60
SELECT TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZEMB", MAXBYTES/1024/1024 "MAXMB", AUTOEXTENSIBLE FROM DBA_DATA_FILES;

Check When Datafile Is Added To Tablespace

COLUMN YEAR FORMAT A5
COLUMN MONTH FORMAT A5
COLUMN NAME  FORMAT A55
SELECT TO_CHAR(CREATION_TIME,'RRRR') YEAR, TO_CHAR(CREATION_TIME,'MM') MONTH,NAME, ROUND(SUM(BYTES)/1024/1024/1024) SIZE_GBS FROM  V$DATAFILE GROUP BY  NAME, TO_CHAR(CREATION_TIME,'RRRR'), TO_CHAR(CREATION_TIME,'MM') ORDER BY 1,2;

Check size of database
SET LINESIZE  100
SET PAGESIZE  9999
SET VERIFY    off
SELECT DATAFILESIZE.DATA_SIZE + TEMPFILESIZE.TEMP_SIZE + REDOLOGSIZE.REDO_SIZE
       "Total_size in MB"
FROM   (SELECT SUM(BYTES) / 1024 / 1024 DATA_SIZE
        FROM   DBA_DATA_FILES) DATAFILESIZE,
       (SELECT NVL(SUM(BYTES) / 1024 / 1024, 0) TEMP_SIZE
        FROM   DBA_TEMP_FILES) TEMPFILESIZE,
       (SELECT SUM(BYTES) / 1024 / 1024 REDO_SIZE
        FROM   SYS.V_$LOG) REDOLOGSIZE;


User Management

Privileges assigned to a role
select * from dba_sys_privs where grantee='DBAROLE1'

Privileges And Roles Assigned To User
Select a.grantee User_name, a.granted_role role, b.privilege from DBA_ROLE_PRIVS a, DBA_SYS_PRIVS b where a.granted_role=b.grantee and a.grantee = 'USER1';

To Know User Status
select username,ACCOUNT_STATUS from dba_users where username in ('USER1','USER2');

To drop user
DROP  USER  USER1 CASCADE;

select object_name from dba_objects where owner='USER1';

Get DDL,Roles,Privileges For User
select dbms_metadata.get_ddl('USER','USER1') ddl from dual;
select dbms_metadata.get_granted_ddl('ROLE_GRANT','USER1') ddl from dual;
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','USER1') ddl from dual;
select dbms_metadata.get_granted_ddl('OBJECT_GRANT','USER1') ddl from dual;

Get Privileges granted to role
select GRANTEE,GRANTED_ROLE from dba_role_privs where GRANTEE ='USER1';

Get previliges granted to user
select PRIVILEGE from dba_sys_privs where GRANTEE='USER1';

Change Password For User
alter user USER1 identified by USER1_prod account unlock;