Showing posts with label Sql. Show all posts
Showing posts with label Sql. Show all posts

Monday, 4 September 2017

SQL Server - Scripts


This page contains sql scripts to find the MS SQL server metadata. Check INFORMATION_SCHEMA and SYS objects which has metadata catalogs that are available in SQL Server.
  • Check foreign key relationship between tables.
SELECT
   OBJECT_NAME(f.parent_object_id) TableName,
   COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName,
   f.name,
   OBJECT_NAME(f.referenced_object_id) Reference_Table,
    COL_NAME(fc.referenced_object_id,fc.referenced_column_id) RefColName
FROM
   sys.foreign_keys AS f
INNER JOIN
   sys.foreign_key_columns AS fc
      ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN
   sys.tables t
      ON t.OBJECT_ID = fc.referenced_object_id
WHERE
   OBJECT_NAME (f.referenced_object_id) in  ('TABLE_NAME')
  • Check table size
  • SELECT 
        t.NAME AS TableName,
        s.Name AS SchemaName,
        p.rows AS RowCounts,
        SUM(a.total_pages) * 8 AS TotalSpaceKB, 
        CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
        SUM(a.used_pages) * 8 AS UsedSpaceKB, 
        CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 
        (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
        CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
    FROM 
        sys.tables t
    INNER JOIN      
        sys.indexes i ON t.OBJECT_ID = i.object_id
    INNER JOIN 
        sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
    INNER JOIN 
        sys.allocation_units a ON p.partition_id = a.container_id
    LEFT OUTER JOIN 
        sys.schemas s ON t.schema_id = s.schema_id
    WHERE 
        t.NAME NOT LIKE 'dt%' 
        AND t.is_ms_shipped = 0
        AND i.OBJECT_ID > 255 
    GROUP BY 
        t.Name, s.Name, p.Rows
    ORDER BY 
        t.Name
    

    References:

    Tuesday, 15 April 2014

    Check locked Objects in Oracle database


    LOCKED DATABASE OBJECTS

    SELECT l.session_id || ',' || v.serial# sid_serial,       
           l.ORACLE_USERNAME ora_user,       
           o.object_name,       
           o.object_type,       
           DECODE(l.locked_mode,              
                  0,
                  'None',              
                  1,
                  'Null',              
                  2,
                  'Row-S (SS)',              
                  3,
                  'Row-X (SX)',              
                  4,
                  'Share',              
                  5,
                  'S/Row-X (SSX)',              
                  6,
                  'Exclusive',              
                  TO_CHAR(l.locked_mode)              
                  ) lock_mode,       
           o.status,       
           to_char(o.last_ddl_time, 'dd.mm.yy') last_ddl
      FROM dba_objects o, gv$locked_object l, v$session v
     WHERE o.object_id = l.object_id      
       and l.SESSION_ID = v.sid;
    


    select a.sid, a.serial#, OBJECT_NAME , a.*
      from v$session a, v$locked_object b, dba_objects c
     where b.object_id = c.object_id
       and a.sid = b.session_id;
     
    ALTER SYSTEM KILL SESSION 'sid,serial#';
    
    


    SELECT T.*, sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.BIND_DATA
      FROM (select c.owner,
                   c.object_name,
                   c.object_type,
                   b.sid,
                   b.serial#,
                   b.status,
                   a.ORACLE_USERNAME,
                   b.osuser,
                   b.machine,
                   DECODE(a.locked_mode,
                          0,
                          'None',
                          1,
                          'Null',
                          2,
                          'Row-S (SS)',
                          3,
                          'Row-X (SX)',
                          4,
                          'Share',
                          5,
                          'S/Row-X (SSX)',
                          6,
                          'Exclusive',
                          TO_CHAR(a.locked_mode)) alock_mode,
                   b.STATUS SESSION_STATUS,
                   b.LOGON_TIME,
                   b.SQL_HASH_VALUE
              from v$locked_object a, v$session b, dba_objects c
             where b.sid = a.session_id
               and a.object_id = c.object_id) T
      left join v$sqlarea sa
        ON sa.HASH_VALUE = t.SQL_HASH_VALUE;
     
    


    select a.sid, a.serial#, OBJECT_NAME, a.LOGON_TIME
      from v$session a, v$locked_object b, dba_objects c
     where b.object_id = c.object_id
       and a.sid = b.session_id;
        
        
    SELECT SID, SQL_ID, USERNAME, BLOCKING_SESSION
      FROM v$session
     WHERE BLOCKING_SESSION IS NOT NULL;
      
      
     SELECT l1.sid || ' is blocking ' || l2.sid blocking_sessions
      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 l1.id2 = l2.id2;
        
    
    select * from v$lock where type='TX' and request>0;
    select * from v$lock where type='TX' and lmode>0;
    
    


    Reference:

    Monday, 11 March 2013

    LAG & LEAD Analytic function in Oracle




    The LAG and LEAD  and  other analytic functions are available in Oracle to  give access to multiple rows within a table, without the need for a self-join. These function will be very handy.
    For example: 
    To get previous record column value
    To calculate difference between column value. 



    http://oracle-base.com/articles/misc/lag-lead-analytic-functions.php

    http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions070.htm

    http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions074.htm#i83834

    http://oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions.php


    Tuesday, 5 March 2013

    Using sql count/sum in a case statement in Oracle


    Note :
    For COUNT : need to use null  value you like to ignore
    For SUM  : need to use null /zero value you like to ignore




    select count(case
                   when retrieve_time is null then
                    null
                   else
                    1
                 END) as retrieved
      from TABLE_A
     where CREATED_TIME > gmt_sysdate - 30;


    select sum(case
                 when retrieve_time is null then
                  0
                 else
                  1
               END) as retrieved
      from TABLE_A
     where CREATED_TIME > gmt_sysdate - 30;

     select sum(case
                   when retrieve_time is null then
                    null
                   else
                    1
                 END) as retrieved
      from TABLE_A
     where CREATED_TIME > gmt_sysdate - 30;



    select to_char(CREATED_TIME, 'YYYY/MM/DD'),
           count(case
                   when retrieve_time is null then
                    null
                   else
                    1
                 END) as retrieved
      from TABLE_A
     where CREATED_TIME > gmt_sysdate - 30
     group by to_char(CREATED_TIME, 'YYYY/MM/DD');

    Tuesday, 10 November 2009

    Example for bind variable usage in SqlPlus

    Example sql code
    *Declare DATE variable as bind variable in SQL Plus*
     
     
    set linesize 132;
    set timing on;
    set linesize 255;
    set pagesize 5000;
    set echo on;
    set heading on;
    set serveroutput on;
     
     
    variable type varchar2(100);
    execute :type := 'S';
     
    variable startdate varchar2(21);
    execute :startdate := '01/10/2013_00:00:00';
     
    variable enddate varchar2(21);
    execute :enddate := '01/10/2013_01:00:00';
     
    variable testid number;
    execute :testid := 6154;
     
    set autotrace on exp stat;
    set autotrace traceonly exp stat;
     
    select count(*) as y0_
      from TEST_TABLE this_
     where this_.TEST_ID = :testid
       and this_.TYPE = :inctype
       and this_.C_TIME_LOCAL >= to_date(:startdate,'dd/mm/yyyy_hh24:mi:ss');
       and this_.C_TIME_LOCAL <= to_date(:enddate,'dd/mm/yyyy_hh24:mi:ss');
    
    



    
    -- Check Execution Plan details
    select sql_id, child_number, s.*
      from gv$sql s
     WHERE upper(SQL_FULLTEXT) like '%SUMMARY%'
     order by last_active_time desc;
     
    SELECT * FROM TABLE(dbms_xplan.display_cursor('b250w5cxy46va', 0,'ADVANCED'));
    SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR('fywm6bbj5s1zn'));
    SELECT * FROM TABLE(dbms_xplan.display_cursor('287h80pjaugst'));
    SELECT * FROM TABLE(dbms_xplan.display_cursor('dqkapjswv169p', 0));
    SELECT * FROM TABLE(dbms_xplan.display_cursor('6z5c8yaf3m1gt', 0,'ADVANCED'));
     
    set autotrace on exp stat;
    set autotrace traceonly exp stat;
     
    EXPLAIN PLAN FOR SQL_STATEMET;
    @?/RDBMS/ADMIN/UTLXPLS
    select * from table(dbms_xplan.display);
     
     
     select sql_id, child_number, s.*
      from gv$sql s
     WHERE upper(SQL_FULLTEXT) like '%V_INCIDENT_SIGHTING_SUMMARY%'
     order by last_active_time desc;
    select sql_text, v.sql_id, name, value_string, datatype_string
      from v$sql_bind_capture vbc
      join v$sql v
     using (hash_value)
     where v.sql_id in ('frmxr4w3tb9wv', 'dqkapjswv169p', '61g3km3x621wt');
    SELECT sql_id, name, value_string, datatype_string
      from v$sql_bind_capture
     where sql_id in ('frmxr4w3tb9wv', 'dqkapjswv169p');
    SELECT * FROM v$sql_bind_capture WHERE sql_id = 'frmxr4w3tb9wv';
    SELECT * FROM v$sql_bind_capture WHERE sql_id = '61g3km3x621wt';
     
    SELECT *
      FROM v$sql_bind_capture
     WHERE sql_id in ('dqkapjswv169p', 'frmxr4w3tb9wv', '61g3km3x621wt');
    
    

    Tuesday, 15 September 2009

    How to Execute SQL Scripts using sh file ?


    sqlplus $DBUSERNAME/$DBPASSWORD@$DBNAME @/home/test/query/test.sql

    Friday, 3 October 2008

    Oracle Sql scripts

    User , Role Privileges

    select * from dba_tab_privs;
    select * from dba_role_privs WHERE granted_ROLE= 'SHARED_USER';
    select * from dba_sys_privs;
     
    select * from all_tab_privs;
    select * from all_role_privs;
    select * from all_sys_privs;
     
    select * from user_tab_privs;
    select * from user_role_privs;
    select * from user_sys_privs;
     
    select * from role_tab_privs;
    select * from role_role_privs;
    select * from role_sys_privs;
     
     
    select * from role_tab_privs where role = 'SHARED_USER';
    select * from role_role_privs  where role = 'SHARED_USER';
    select * from role_sys_privs  where role =  'SHARED_USER'
     
    select count(*) from dba_users;
    select * from user_role_privs;
    select * from dba_roles where role = 'ADMIN'
    
    

    Stats Details

    
    
    -To verify stats
     
    select * from user_tab_statistics;
    select * from user_tab_col_statistics;
    
    
    

    Force Index to use

    
    To use a full scan or a range scan.
    http://www.dba-oracle.com/t_v_sql_hint.htm
     
     
     
     
    SELECT /*+ FULL(m)         */ b FROM mytable m WHERE b=10; -- full table scan
    SELECT /*+ INDEX_RS_ASC(m) */ b FROM mytable m WHERE b=10; -- index range scan
    SELECT /*+ INDEX_FFS(m)    */ b FROM mytable m WHERE b=10; -- index fast full scan
    
    
    

    Get the Explain plan for sql query
    select sql_id, child_number , s.*  
    from gv$sql s 
    WHERE upper(SQL_FULLTEXT) like '%TABLE_NAME%' 
    order by last_active_time desc;
    
    SELECT * 
    FROM TABLE(dbms_xplan.display_cursor('frmxr4w3tb9wv', 0));
    
    


    Check time consuming SQL queries in Oracle
    SELECT * FROM
    (SELECT
        sql_fulltext,
        sql_id,
        child_number,
        disk_reads,
        executions,
        first_load_time,
        last_load_time
    FROM    v$sql
    ORDER BY elapsed_time DESC)
    WHERE ROWNUM < 20
     
     
     
    SELECT Disk_Reads DiskReads, Executions, SQL_ID, SQL_Text SQLText,
       SQL_FullText SQLFullText
    FROM
    (
       SELECT Disk_Reads, Executions, SQL_ID, LTRIM(SQL_Text) SQL_Text,
          SQL_FullText, Operation, Options,
          Row_Number() OVER
             (Partition By sql_text ORDER BY Disk_Reads * Executions DESC)
             KeepHighSQL
       FROM
       (
           SELECT Avg(Disk_Reads) OVER (Partition By sql_text) Disk_Reads,
              Max(Executions) OVER (Partition By sql_text) Executions,
              t.SQL_ID, sql_text, sql_fulltext, p.operation,p.options
           FROM v$sql t, v$sql_plan p
           WHERE t.hash_value=p.hash_value AND p.operation='TABLE ACCESS'
           AND p.options='FULL' AND p.object_owner NOT IN ('SYS','SYSTEM')
           AND t.Executions > 1
       )
       ORDER BY DISK_READS * EXECUTIONS DESC
    )
    WHERE KeepHighSQL = 1
    AND rownum <=5;
     
     
    SELECT username,
           buffer_gets,
           disk_reads,
           executions,
           buffer_get_per_exec,
           parse_calls,
           sorts,
           rows_processed,
           hit_ratio,
           module,
           sql_text
           -- elapsed_time, cpu_time, user_io_wait_time, ,
      FROM (SELECT sql_text,
                   b.username,
                   a.disk_reads,
                   a.buffer_gets,
                   trunc(a.buffer_gets / a.executions) buffer_get_per_exec,
                   a.parse_calls,
                   a.sorts,
                   a.executions,
                   a.rows_processed,
                   100 - ROUND (100 * a.disk_reads / a.buffer_gets, 2) hit_ratio,
                   module
                   -- cpu_time, elapsed_time, user_io_wait_time
              FROM v$sqlarea a, dba_users b
             WHERE a.parsing_user_id = b.user_id
               AND b.username NOT IN ('SYS', 'SYSTEM', 'RMAN','SYSMAN')
               AND a.buffer_gets > 10000
             ORDER BY buffer_get_per_exec DESC)
     WHERE ROWNUM <= 20
    
    

    Dynamic Oracle Views
    SELECT * FROM V$FIXED_VIEW_DEFINITION;
    SELECT * FROM V$FIXED_TABLE;
    SELECT NAME, TYPE FROM V$FIXED_TABLE WHERE NAME LIKE 'V$%';
    

    LOCKED DATABASE OBJECTS
    
    SELECT l.session_id || ',' || v.serial# sid_serial,      
           l.ORACLE_USERNAME ora_user,      
           o.object_name,      
           o.object_type,      
           DECODE(l.locked_mode,             
                  0,
                  'None',             
                  1,
                  'Null',             
                  2,
                  'Row-S (SS)',             
                  3,
                  'Row-X (SX)',             
                  4,
                  'Share',             
                  5,
                  'S/Row-X (SSX)',             
                  6,
                  'Exclusive',             
                  TO_CHAR(l.locked_mode)             
                  ) lock_mode,      
           o.status,      
           to_char(o.last_ddl_time, 'dd.mm.yy') last_ddl
      FROM dba_objects o, gv$locked_object l, v$session v
     WHERE o.object_id = l.object_id     
       and l.SESSION_ID = v.sid;
    
    
    select a.sid, a.serial#, OBJECT_NAME , a.*
      from v$session a, v$locked_object b, dba_objects c
     where b.object_id = c.object_id
       and a.sid = b.session_id;
     
     
    ALTER SYSTEM KILL SESSION 'sid,serial#';
     
     
    --Dynamic spool name
    column filename new_val filename
    select 'alarm_query_'||  sys_context('userenv','db_name') || '_' || to_char(sysdate, 'yyyymmdd' ) filename from dual;
    spool '&filename'
      
    set heading OFF;
    --set serveroutput on;
    select 'User : ' || user from dual;
    select 'Database : ' || ora_database_name from dual;
    
    
    



    SQL