1. EXTENSION 설치

CREATE EXTENSION file_fdw;

2. FOREIGN SERVER 생성

CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;

3. PG LOG FILE 테이블 생성

CREATE FOREIGN TABLE dba_pglog_201901 (
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text
) SERVER pglog
OPTIONS ( filename '/pg_log/pg_201901.csv', format 'csv' );

--PG LOG 경로 넣기

4. PG LOG 조회

select log_time, user_name, database_name, connection_from, command_tag, session_start_time, 

error_severity, sql_state_code,  message, detail, hint, application_name, internal_query,query, query_pos, location 
from dba_pglog_201901
where command_tag != 'idle'
and     database_name = 'TESTDB'
order by 1 desc

https://www.postgresql.org/docs/current/file-fdw.html

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

set linesize 200 
set pagesize 10000 
set feedback off 

COL STATUS      FOR A10 
COL PROGRAM     FOR A10 TRUNC 
COL MODULE      FOR A23 TRUNC 
COL ACTION      FOR A20 
COL EVENT       FOR A35 
COL CLIENT_INFO FOR A25 

COL OPERATION         FOR A15 
COL MBYTES_PROCESSED  FOR 999,999,999,999 
COL INPUT_MBYTES      FOR 999,999,999,999 
COL OUTPUT_MBYTES     FOR 999,999,999,999 


SELECT  '==[' || SYSDATE || ']===================================================' AS STARTTIME  
FROM    DUAL; 


COL TYPE  FOR A20 
COL ITEM  FOR A20 
COL UNITS FOR A10 
COL COMMENTS FOR A30 TRUNC 
COL NAME FOR A50 

PROMPT 
PROMPT V$DATAFILE_HEADER 
PROMPT ******************************************************************** 
SELECT  
        FILE# 
      , NAME 
      , STATUS 
      , RECOVER 
      , FUZZY 
      , TO_CHAR(CHECKPOINT_CHANGE#,'999999999999999') AS CHECKPOINT_CHANGE# 
      , CHECKPOINT_TIME  
FROM    V$DATAFILE_HEADER; 

PROMPT 
PROMPT V$RECOVERY_PROGRESS 
PROMPT ******************************************************************** 

SELECT  
        START_TIME 
      , TYPE 
      , ITEM 
      , UNITS 
      , SOFAR 
      , TOTAL 
      , TIMESTAMP 
      , COMMENTS 
FROM    V$RECOVERY_PROGRESS 
ORDER BY START_TIME; 


PROMPT 
PROMPT V$RECOVER_FILE
PROMPT ******************************************************************** 

SELECT  
        FILE# 
      , ONLINE_STATUS 
      , ERROR 
      , TO_CHAR(CHANGE#,'999999999999999') AS CHANGE# 
      , TO_CHAR(TIME, 'YYYY-MM-DD HH24:MI:SS') AS TIME  
FROM    V$RECOVER_FILE; 

 

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle Index Reorg 대상 추출 스크립트



select /* ordered */

        u.name "Owner",

        o.name "Index",

        op.subname "Partition",

        decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,o.subname,'') "SubPartition",

        (1-floor(decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt)

        -decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.rowcnt ,ip.obj#,ip.rowcnt ,i.rowcnt )

        *(sum(h.avgcln)+10)

        /((p.value-66-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.initrans,ip.obj#,ip.initrans,i.initrans)*24)

        *(1-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.pctfree$,ip.obj#,ip.pctfree$,i.pctfree$)/100))

        )/decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt)) "Density",

        floor(decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt)

        -decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.rowcnt ,ip.obj#,ip.rowcnt ,i.rowcnt )

        *(sum(h.avgcln) + 10)

        /((p.value-66-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.initrans,ip.obj#,ip.initrans,i.initrans)*24)

        *(1-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.pctfree$,ip.obj#,ip.pctfree$,i.pctfree$)/100))) "Extra.Block",

        max(o.mtime) "Last.DDL.Time",

        max(decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.analyzetime,ip.obj#,ip.analyzetime,i.analyzetime)) "Last.Analyzed",

        max(decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,'n/a',ip.obj#,decode(bitand(ip.flags,1024),0,'NO',1024,'YES','n/a')

        ,decode(bitand(i.flags,32),0,'NO',32,'YES','n/a'))) "Compress"

from    sys.ind$ i,

        sys.icol$ ic,

        ( select obj#,part#,bo#,ts#,rowcnt,leafcnt,initrans,pctfree$,analyzetime,flags from sys.indpart$

        union all

        select obj#,part#,bo#,defts#,rowcnt,leafcnt,definitrans,defpctfree,analyzetime,flags from sys.indcompart$

        ) ip,

        sys.indsubpart$ isp,

        ( select ts#,blocksize value from sys.ts$

        ) p,

        sys.hist_head$ h,

        sys.obj$ o,

        sys.user$ u,

        sys.obj$ op

where i.obj# = ip.bo#(+)

and ip.obj# = isp.pobj#(+)

and decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt) > 1

and i.type# in (1) /* exclude special types */

and i.pctthres$ is null /* exclude IOT secondary indexes */

and decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.ts#,ip.obj#,ip.ts#,i.ts#) = p.ts#

and ic.obj# = i.obj#

and h.obj# = i.bo#

and h.intcol# = ic.intcol#

and o.obj# = nvl(isp.obj#,nvl(ip.obj#,i.obj#))

and o.owner# != 0

and u.user# = o.owner#

and op.obj# = nvl(ip.obj#,i.obj#)

group by

        u.name,

        o.name,

        op.subname,

        decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,o.subname,''),

        decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.rowcnt ,ip.obj#,ip.rowcnt ,i.rowcnt ),

        decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt),

        decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.initrans,ip.obj#,ip.initrans,i.initrans),

        decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.pctfree$,ip.obj#,ip.pctfree$,i.pctfree$),

        p.value

having

        (1-floor(decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt)

        -decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.rowcnt ,ip.obj#,ip.rowcnt ,i.rowcnt )

        *(sum(h.avgcln)+10)

        /((p.value-66-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.initrans,ip.obj#,ip.initrans,i.initrans)*24)

        *(1-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.pctfree$,ip.obj#,ip.pctfree$,i.pctfree$)/100))

        )/decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt)

        ) <= 0.75

        and

        floor(decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.leafcnt,ip.obj#,ip.leafcnt,i.leafcnt)

        -decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.rowcnt,ip.obj#,ip.rowcnt,i.rowcnt)

        *(sum(h.avgcln) + 10)

        /((p.value-66-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.initrans,ip.obj#,ip.initrans,i.initrans)*24)

        *(1-decode(nvl(isp.obj#,nvl(ip.obj#,i.obj#)),isp.obj#,isp.pctfree$,ip.obj#,ip.pctfree$,i.pctfree$)/100))

        ) > 1000

order by 6 desc,5

;


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle Alter log Viewer 조회 스크립트



Oracle 11g 부터는 물리적 경로에 있는 alert log를 아래와 같은 절차를 통하여 SQL문으로 확인해 볼수 있다.


SET SERVEROUTPUT ON

SPOOL ALERT.LOG

 

DECLARE

   V_PERCENT    NUMBER := .05;

   V_BDUMP      VARCHAR2 (1000);

   V_NAME       VARCHAR2 (20);

   V_FILE       VARCHAR2 (20);

   V_LINE       VARCHAR2 (8000);

   V_HANDLE     UTL_FILE.FILE_TYPE;

   V_DIR_STMT   VARCHAR2 (100);

   V_SIZE       INTEGER;

   V_BSIZE      INTEGER;

   V_EXISTS     BOOLEAN;

BEGIN

   SELECT VALUE

     INTO V_BDUMP

     FROM V$PARAMETER

    WHERE NAME = 'background_dump_dest';

 

   DBMS_OUTPUT.PUT_LINE (

      '**************************** INFO *************************');

   DBMS_OUTPUT.PUT_LINE ('BDUMP: ' || V_BDUMP);

 

   SELECT VALUE

     INTO V_NAME

     FROM V$PARAMETER

    WHERE NAME = 'instance_name';

 

   DBMS_OUTPUT.PUT_LINE ('DB NAME: ' || V_NAME);

 

   V_FILE := 'alert_' || V_NAME || '.log';

   DBMS_OUTPUT.PUT_LINE ('FILENAME: ' || V_FILE);

 

   V_DIR_STMT := 'CREATE DIRECTORY ALERT AS ''' || V_BDUMP || '''';

   DBMS_OUTPUT.PUT_LINE ('COMMAND: ' || V_DIR_STMT);

 

   EXECUTE IMMEDIATE V_DIR_STMT;

 

   V_HANDLE := UTL_FILE.FOPEN ('ALERT', V_FILE, 'r');

 

   UTL_FILE.FGETATTR ('ALERT',

                      V_FILE,

                      V_EXISTS,

                      V_SIZE,

                      V_BSIZE);

   DBMS_OUTPUT.PUT_LINE ('ALERT SIZE: ' || V_SIZE / 1024 / 1024 || ' MB');

 

   UTL_FILE.FSEEK (V_HANDLE, NULL, V_SIZE * (1 - V_PERCENT));

   DBMS_OUTPUT.PUT_LINE (

      'FETCHED ALERT SIZE: ' || V_SIZE * (V_PERCENT / 1024 / 1024) || ' MB');

   DBMS_OUTPUT.PUT_LINE (

      '********************************************************');

 

   LOOP

      BEGIN

         UTL_FILE.GET_LINE (V_HANDLE, V_LINE);

         DBMS_OUTPUT.PUT_LINE (V_LINE);

      EXCEPTION

         WHEN NO_DATA_FOUND

         THEN

            EXIT;

      END;

   END LOOP;

 

   UTL_FILE.FCLOSE (V_HANDLE);

 

   EXECUTE IMMEDIATE 'DROP DIRECTORY ALERT';

END;

/

 

SPOOL OFF;

 

SELECT ORIGINATING_TIMESTAMP,

         MODULE_ID,

         PROCESS_ID,

         MESSAGE_TEXT

    FROM X$DBGALERTEXT

ORDER BY ORIGINATING_TIMESTAMP DESC;


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL 데이터베이스 조회 스크립트


SELECT d.datname as "Name",

pg_catalog.pg_get_userbyid(d.datdba) as "Owner",

pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",

d.datcollate as "Collate",

d.datctype as "Ctype",

pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges",

CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')

            THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))

            ELSE 'No Access'

END as "Size",

t.spcname as "Tablespace",

pg_catalog.shobj_description(d.oid, 'pg_database') as "Description"

FROM pg_catalog.pg_database d

JOIN pg_catalog.pg_tablespace t on d.dattablespace = t.oid

ORDER BY 1;


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle 미사용 테이블 조회 스크립트


SELECT  

        A.SEGMENT_NAME

      , A.SEGMENT_TYPE

      , NVL(B.SUM_VALUE,0)

FROM    (

             SELECT SEGMENT_NAME,

             SEGMENT_TYPE

             FROM DBA_SEGMENTS

             WHERE OWNER = 'TEST'

             AND SEGMENT_TYPE ='TABLE'

        ) A

      , (

             SELECT 

                    OBJECT_NAME

                  , OBJECT_TYPE

                  , SUM(VALUE) sum_value

             FROM   V$SEGMENT_STATISTICS

             WHERE  OWNER = 'TEST'

             AND    OBJECT_TYPE='TABLE'

             AND    (STATISTIC_NAME LIKE '%read%' OR STATISTIC_NAME LIKE '%write%' )

             GROUP BY OBJECT_NAME, OBJECT_TYPE

        ) B

WHERE   A.SEGMENT_NAME = B.OBJECT_NAME(+)

AND     A.SEGMENT_TYPE = B.OBJECT_TYPE(+)

ORDER BY A.SEGMENT_TYPE , A.SEGMENT_NAME;



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle Time Model 조회 스크립트


/* Formatted on 2015-02-17 오후 12:40:23 (QP5 v5.163.1008.3004) */

  SELECT DECODE (G1,

                 1, 'SUB AVG',

                 SUBSTR (SNAP_TIME, 1, INSTR (SNAP_TIME, '-') - 1))

            SNAP_TIME,

         SNAP_TIME SNAP_TIME_RANGE,

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DB time', VALUE)),

                  'FM999,999,999,999,999.9')

            "DB time/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DB CPU', VALUE)),

                  'FM999,999,999,999,999.9')

            "DB CPU/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'background cpu time', VALUE)),

                  'FM999,999,999,999,999.9')

            "Background CPU Time/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'background elapsed time', VALUE)),

                  'FM999,999,999,999,999.9')

            "Background Elap. Time/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'SQL execute elapsed time', VALUE)),

                  'FM999,999,999,999,999.9')

            "SQL Exec Elap. Time/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse time elapsed', VALUE)),

                  'FM999,999,999,999,999.9')

            "Parse Time Elapsed/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'hard parse elapsed time', VALUE)),

                  'FM999,999,999,999,999.9')

            "Hard Parse Elap. Time/SEC",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'hard parse (bind mismatch) elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "H Parse B Miss Elap. Time/SEC",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'hard parse (sharing criteria) elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "H Parse S Crit Elap. Time/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'failed parse elapsed time', VALUE)),

                  'FM999,999,999,999,999.9')

            "Failed Parse Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'repeated bind elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "Repeated Bind Elap. Time/SEC",

         TO_CHAR (

            SUM (

               DECODE (

                  STAT_NAME,

                  'failed parse (out of shared memory) elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "F Parse O Mem Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'PL/SQL execution elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "PL/SQL Exec Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'PL/SQL compilation elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "PL/SQL Compile Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'inbound PL/SQL rpc elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "Inbound PL/SQL Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'sequence load elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "Sequence Load Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'Java execution elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "Java Exec Elap. Time/SEC",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'RMAN cpu time (backup/restore)', VALUE)),

            'FM999,999,999,999,999.9')

            "RMAN CPU Time/SEC",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'connection management call elapsed time', VALUE)),

            'FM999,999,999,999,999.9')

            "Conn Mngt Call Elap. Time/SEC",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DB CPU', VALUE_DIFF)),

                  'FM999,999,999,999,999,999,999')

            "DB CPU DIFF",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'DB time', VALUE_DIFF)),

                  'FM999,999,999,999,999,999,999')

            "DB time DIFF",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'background cpu time', VALUE_DIFF)),

                  'FM999,999,999,999,999,999,999')

            "Background CPU Time DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'background elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Background Elap. Time DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'SQL execute elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "SQL Exec Elap. Time DIFF",

         TO_CHAR (SUM (DECODE (STAT_NAME, 'parse time elapsed', VALUE_DIFF)),

                  'FM999,999,999,999,999,999,999')

            "Parse Time Elapsed DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'hard parse elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Hard Parse Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'hard parse (bind mismatch) elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "H Parse B Miss Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (

                  STAT_NAME,

                  'hard parse (sharing criteria) elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "H Parse S Crit Elap. Time DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'failed parse elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Failed Parse Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (

                  STAT_NAME,

                  'failed parse (out of shared memory) elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "F Parse O Mem Elap. Time DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'repeated bind elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Repeated Bind Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME, 'PL/SQL execution elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "PL/SQL Exec Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'PL/SQL compilation elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "PL/SQL Compile Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'inbound PL/SQL rpc elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Inbound PL/SQL Elap. Time DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'sequence load elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Sequence Load Elap. Time DIFF",

         TO_CHAR (

            SUM (DECODE (STAT_NAME, 'Java execution elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Java Exec Elap. Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME, 'RMAN cpu time (backup/restore)', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "RMAN CPU Time DIFF",

         TO_CHAR (

            SUM (

               DECODE (STAT_NAME,

                       'connection management call elapsed time', VALUE_DIFF)),

            'FM999,999,999,999,999,999,999')

            "Conn Mngt Call Elap. Time DIFF"

    FROM (  SELECT STAT_NAME,

                   START_TIME || '-' || END_TIME SNAP_TIME,

                   ROUND (AVG (NVL (VALUE, 0)), 1) VALUE,

                   ROUND (AVG (NVL (VALUE_DIFF, 0)), 1) VALUE_DIFF,

                   GROUPING (START_TIME || '-' || END_TIME) G1,

                   GROUPING (STAT_NAME) G2

              FROM (SELECT STAT_NAME,

                           TO_CHAR (SNAP_TIME_C1, 'MM.DD HH24:MI') START_TIME,

                           TO_CHAR (SNAP_TIME_C2, 'MM.DD HH24:MI') END_TIME,

                           DECODE (

                              SNAP_TIME_C2,

                              NULL, 0,

                              ROUND (

                                 (CASE

                                     WHEN VALUE_2 < VALUE_1 THEN 0

                                     ELSE VALUE_2 - VALUE_1

                                  END)

                                 / (EXTRACT (

                                       DAY FROM SNAP_TIME_C2 - SNAP_TIME_C1)

                                    * 86400

                                    + EXTRACT (

                                         HOUR FROM SNAP_TIME_C2 - SNAP_TIME_C1)

                                      * 3600

                                    + EXTRACT (

                                         MINUTE FROM SNAP_TIME_C2 - SNAP_TIME_C1)

                                      * 60

                                    + EXTRACT (

                                         SECOND FROM SNAP_TIME_C2 - SNAP_TIME_C1)),

                                 1))

                              VALUE,

                           (CASE

                               WHEN VALUE_2 < VALUE_1 THEN 0

                               ELSE VALUE_2 - VALUE_1

                            END)

                              VALUE_DIFF,

                           ROW_NUMBER ()

                           OVER (PARTITION BY INSTANCE_NUMBER, STAT_NAME

                                 ORDER BY SNAP_ID)

                              RNUM,

                           SNAP_ID,

                           INSTANCE_NUMBER

                      FROM (  SELECT SNAP.END_INTERVAL_TIME SNAP_TIME_C1,

                                     LEAD (

                                        SNAP.END_INTERVAL_TIME)

                                     OVER (

                                        PARTITION BY DBI.INSTANCE_NUMBER, STAT_NAME

                                        ORDER BY SNAP.SNAP_ID)

                                        SNAP_TIME_C2,

                                     STAT.STAT_NAME,

                                     STAT.VALUE VALUE_1,

                                     LEAD (

                                        STAT.VALUE)

                                     OVER (

                                        PARTITION BY DBI.INSTANCE_NUMBER, STAT_NAME

                                        ORDER BY SNAP.SNAP_ID)

                                        VALUE_2,

                                     SNAP.SNAP_ID,

                                     DBI.INSTANCE_NUMBER

                                FROM (SELECT DI.DBID,

                                             DI.INSTANCE_NUMBER,

                                             DI.STARTUP_TIME

                                        FROM DBA_HIST_DATABASE_INSTANCE DI

                                       WHERE     DI.DBID = (select dbid from v$database) --변경 

                                             AND DI.INSTANCE_NUMBER = (select  INSTANCE_NUMBER from v$instance)  --변경

                                             AND ROWNUM <= 1) DBI,

                                     DBA_HIST_SNAPSHOT SNAP,

                                     DBA_HIST_SYS_TIME_MODEL STAT

                               WHERE     DBI.DBID = SNAP.DBID

                                     AND DBI.INSTANCE_NUMBER = SNAP.INSTANCE_NUMBER

                                     AND SNAP.SNAP_ID >= :3

                                     AND SNAP.SNAP_ID <= :4

                                     AND SNAP.DBID = STAT.DBID

                                     AND SNAP.INSTANCE_NUMBER =

                                            STAT.INSTANCE_NUMBER

                                     AND SNAP.SNAP_ID = STAT.SNAP_ID

                            ORDER BY SNAP.SNAP_ID)

                     WHERE SNAP_TIME_C2 <> SNAP_TIME_C1)

             WHERE START_TIME IS NOT NULL AND END_TIME IS NOT NULL

          GROUP BY ROLLUP (STAT_NAME, START_TIME || '-' || END_TIME))

   WHERE NOT (G1 = 1 AND G2 = 1)

GROUP BY DECODE (G1,

                 1, 'SUB AVG',

                 SUBSTR (SNAP_TIME, 1, INSTR (SNAP_TIME, '-') - 1)),

         SNAP_TIME

ORDER BY SNAP_TIME


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle High Temp tablespace 사용률 조회 스크립트



SELECT   sl.sid,

           sl.serial#,

           SYSDATE,

           TO_CHAR (sl.start_time, 'DD-MON-YYYY:HH24:MI:SS') start_time,

           ROUND ( (sl.elapsed_seconds / 60), 2) min_elapsed,

           ROUND ( (sl.time_remaining / 60), 2) min_remaining,

           sl.opname,

           sl.MESSAGE

    FROM   v$session_longops sl, v$session s

   WHERE   s.sid = sl.sid AND s.serial# = sl.serial# AND sl.opname like 'Sort%' 

ORDER BY   sl.start_time DESC, sl.time_remaining ASC;


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;



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,