Database에서 Partitionining 이용시에 장점..


1. Query performance 가 특정 상황에서는 아주 향상될 수 있다. 특히, 대부분의 많이 접근되는 행이  하나나 몇개의 파티셔션에 집중되어 있다면 그렇다. Paritioning 자체가 인덱스 사이즈를 줄이는 것이 가능하고, 때로는 많이 사용하는 부분을 메모리에 모두 올리는 것이 가능할 수 있기 때문이다.


2. 하나의 파티션에 큰 부분을 접근하는 쿼리나 업데이트에서, 성능 개선이 가능하다. 인덱스를 타거나 랜덤하게 전체의 테이블에 퍼져있는 데이터를 읽는 대신에 하나의 파티션에서 순차적인 스캔이 가능하기 때문이다.


3. 대량의 데이터를 올리거나 삭제하는 것이 파티션을 통째로 다룸으로서(파티션을 새로 생성 또는 통째로 삭제함으로써) 가능하다. 물론 요구사항이 파티션 디자인 시에 계획되었을 대다.


4. 잘 사용되지 않는 데이터는 더 저렴하고 상대적으로 느린 저장소에 따로 저장하는 것이 가능하다.


대부분은 테이블 크기가 클 때 장점이 극대화됨...


PostgreSQL의 Partitioning

inheritance를 통해서 지원됨, 하나의 비어있는 parent table에 각각의 Partition이 child가 되는 형태임

Range Partitioning : column이나 여러개의 column 에서 오버랩 없이 나누어짐. 날짜로 나누거나, 식별자의 range로 나누게 됨

List Partitioning : 키 값의 list를 작성하고, 이 키 값의 리스트에 따라 나누어짐


PostgreSQL에서 Partitioning 방법

tutorial 72page pdf 146쪽


Partitioning 이후에 Query Optimization

"consraint exclusion"을 이용


set constraint_exclusion=ON;

select count(*) from measurement where logdate>=DATE'2008-01-01';


이런식으로~ constraint_exclusion이라는게 ON되어 있을 때 planner가 필요없는 partition을 제외하려고 노력한다.

요걸 어떻게 하는지 보려면 쿼리 플랜을 보는 키워드인 explain을 써보면 된다,

set constraint_exclusion=off;

explain select count(*) from measurement where logdate>=DATE'2008-01-01';






'COMPUTER > DATABASE' 카테고리의 다른 글

PostgreSQL Tips  (0) 2015.10.26
PostgreSQL 컬럼수 제한  (0) 2015.10.26
postgreSQL 유용한 쿼리  (0) 2015.10.20
altibase db connection 예제  (0) 2014.09.17
sql 여러행 비교 - 서브쿼리가 여러개의 행을 리턴할 때  (0) 2013.10.10

DROP TABLE IF EXISTS를 이용하면 테이블이 존재하지 않을 때만 테이블 삭제를 시도하는 것이 가능하다. 그러나 standard SQL은 아니다. 



컬럼에 default value를 가지게 할 수도 있음 - 데이터가 insert되는 시점에 값이 들어감...timestamp같은 경우에 유용하게 사용가능

CREATE TABLE products (

product_no integer,

name text,

price numeric DEFAULT 9.99

);




integer type에 다음 값으로 채워넣기

CREATE TABLE products (

product_no integer DEFAULT nextval(’products_product_no_seq’),

...

);


nextval이라는 함수가 따로 있음



제약조건 걸기(check constraints)

CREATE TABLE products (

product_no integer,

name text,

price numeric CHECK (price > 0)

);


제약 조건에 이름 붙여서 걸기

CREATE TABLE products (

product_no integer,

name text,

price numeric CONSTRAINT positive_price CHECK (price > 0)

);


컬럼과의 관계로 제약조건 걸기

CREATE TABLE products (

product_no integer,

name text,

price numeric CHECK (price > 0),

discounted_price numeric CHECK (discounted_price > 0),

CHECK (price > discounted_price)

);


여러개의 제약 조건 걸기

CREATE TABLE products (

product_no integer,

name text,

price numeric CHECK (price > 0),

discounted_price numeric,

CHECK (discounted_price > 0 AND price > discounted_price)

);

It’s a matter



외래키 있는 데이터 삭제시 2가지 대응 옵션

CREATE TABLE order_items (

product_no integer REFERENCES products ON DELETE RESTRICT, 삭제 시도 시 에러남, 딸린 데이터들 다 삭제하고 나서야 이 데이터 삭제가 가능함.

order_id integer REFERENCES orders ON DELETE CASCADE, 삭제 시도시 붙어있는 데이터들 다 같이 삭제..

quantity integer,

PRIMARY KEY (product_no, order_id)

);



스키마와 권한


스키마 search path 보기

show search_path

결과중 가장 첫번째에 있는 것이 current schema라고 볼 수 있음

set serch_path to myschema, public; 이런 식으로 serch path 설정이 가능함


schema사용을 위해서는 기본적으로 Usage 권한이 부여되어야 한다.

public schema에는 기본적으로 모든 사용자에게 create과 usage건한이 부여됨. 

->맘에 안들면 revoke하면 됨.(revoke create on schema public from public)


pg_catalog schema

system tables, built-in data types, functions, operator를 포함한 스키마


상속

상속시의 부모 테이블의 check constraints와 not-null constraints는 상속되지만, 다른 constraints(unique, primary key, foreign key)는 상속되지 않음




컬럼수에 제한이 있는데, 타입에 따라 다르나 250개에서 1600개 사이이다.

출처: PostgreSQL 투토리얼 50페이지

postgreSQL버전 확인

select version();


오늘 날짜보기

select current_date;


그룹별 랭크먹이기

SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary DESC) FROM empsalary;



SELECT salary, sum(salary) OVER () FROM empsalary; salary


 | sum --------+------- 5200 | 47100 5000 | 47100 1. There are options to define the window frame in other ways, but this tutorial does not cover them. See Section 4.2.8 for details. 18 Chapter 3. Advanced Features 3500 | 47100 4800 | 47100 3900 | 47100 4200 | 47100 4500 | 47100 4800 | 47100 6000 | 47100 5200 | 47100 (10 rows) Above, since there is no ORDER BY in the OVER clause, the window frame is the same as the partition, which for lack of PARTITION BY is the whole table; in other words each sum is taken over the whole table and so we get the same result for each output row. But if we add an ORDER BY clause, we get very different results: 



SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary; salary | sum --------+------- 3500 | 3500 3900 | 7400 4200 | 11600 4500 | 16100 4800 | 25700 4800 | 25700 5000 | 30700 5200 | 41100 5200 | 41100 6000 | 47100 (10 rows) 


'COMPUTER > DATABASE' 카테고리의 다른 글

PostgreSQL Tips  (0) 2015.10.26
PostgreSQL 컬럼수 제한  (0) 2015.10.26
altibase db connection 예제  (0) 2014.09.17
sql 여러행 비교 - 서브쿼리가 여러개의 행을 리턴할 때  (0) 2013.10.10
sql plus 몇가지 팁  (0) 2013.10.08



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;



public class Test {


public static void main(String[] args) {

try {

String driverClass = "Altibase.jdbc.driver.AltibaseDriver";

Class.forName(driverClass);

String dburl = "jdbc:Altibase://IP정보 입력:/database명 입력" ;

Connection conn = DriverManager.getConnection(dburl, "id입력", "비밀번호입력");

System.out.println("DB connector success");

 

}catch(SQLException ex){

System.out.println("SQLException:"+ex);

}catch(Exception ex){

System.out.println("DB connector Exception : "+ex);

}

}




driver 버전 잘 안맞을 경우에 communication link failure error 나니, 이럴 경우에는 드라이버 버전 잘 맞춰보는게 상책..ㅠㅠ



select * from employees where salary>ALL(select salary from employees where job_id='IT_PROG');select * from employees where salary>ANY(select salary from employees where job_id='IT_PROG');


subquery 절이 여러개의 행을 리턴 할 때 이 집합과 값을 비교

ALL: 모든 행에 동시에 적용되야 함 and 조건. 위의  query에서는 제일 큰 것보다 큰것

ANY : 행 중에 하나에만 적용되면 됨 or 조건. 위의 query에서는 리턴하는 행중에 아무거나 하나보다만 크면 리턴해 준다.

 

'COMPUTER > DATABASE' 카테고리의 다른 글

postgreSQL 유용한 쿼리  (0) 2015.10.20
altibase db connection 예제  (0) 2014.09.17
sql plus 몇가지 팁  (0) 2013.10.08
오라클 에러 - 암시적 커서  (0) 2013.10.07
알티베이스 관련 유용한 쿼리  (0) 2012.09.04

l 이전 명령어


/ 명령어 실행 



set serveroutput on --sql plus에서 dbms 아웃풋 보는 방법


Too_many_rows Exception


Select 문의 결과가 하나만 있고 이것이 하나의 변수에 할당되어야 하는 것이 암시적 커서의 기본조건이다.

따라서 PL/SQL에서 대충 여러개의 row를 하나의 변수 받으려고 하지 않았는지 확인해 보세요~



오류 보고:

ORA-01422: 실제 인출은 요구된 것보다 많은 수의 행을 추출합니다

ORA-06512:  6행

01422. 00000 -  "exact fetch returns more than requested number of rows"

*Cause:    The number specified in exact fetch is less than the rows returned.

*Action:   Rewrite the query or change number of rows requested

iSQL에서 내용을 보기좋게 
set linesize 200; 
set colsize 30 ; 

알티베이스에서 좀더 보기 쉽도록 포퍼먼스 뷰를 만든다.
출처 : 알티베이스 튜닝 교육

/**

--테이블크기 정보 조회 


TABLESPACE_NAME : 테이블스페이스명
TABLE_NAME      : 테이블명
ALLOC           : 테이블 ALLOC 크기(MB)
USED            : 테이블 사용량 크기(MB)

**/
CREATE OR REPLACE view  ADM_TBL_INFO AS   
SELECT A.NAME TABLESPACE_NAME,
            B.TABLE_NAME TABLE_NAME,
            TRUNC((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024,2) "ALLOC(MB)",
            TRUNC((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024,2) "USED(MB)"
       FROM V$TABLESPACES A,
            SYSTEM_.SYS_TABLES_ B,
            V$MEMTBL_INFO C
      WHERE A.ID = C.TABLESPACE_ID
        AND B.TABLE_OID = C.TABLE_OID
        AND B.USER_ID != 1 AND B.TABLE_TYPE = 'T'
      UNION ALL
     SELECT A.NAME TABLESPACE_NAME,
            B.TABLE_NAME,
            TRUNC(C.DISK_TOTAL_PAGE_CNT*8/1024,2) ALLOC,
            TRUNC(C.DISK_PAGE_CNT*8/1024,2) USED
       FROM V$TABLESPACES A,
            V$DISKTBL_INFO C,
            SYSTEM_.SYS_TABLES_ B
      WHERE C.TABLE_OID = B.TABLE_OID
        AND A.ID = C.TABLESPACE_ID
      ORDER BY 1,2;
/**

--테이블스페이스 정보 조회 


TBS_NAME      : 테이블스페이스명
MAXSIZE(MB)   : 테이블스페이스 최대크기
USEDSIZE(MB)  : 테이블스페이스 사용량
CURRSIZE(MB)  : 테이블스페이스 현재크기


**/
CREATE OR REPLACE view  ADM_TBS AS
SELECT RTRIM(NAME) AS TBS_NAME,
            MAXSIZE/1024/1024 AS 'MAXSIZE(MB)',
            USEDSIZE/1024/1024 AS 'USEDSIZE(MB)',
            CURRSIZE/1024/1024 AS 'CURRSIZE(MB)'
       FROM (
            SELECT B.SPACEID,
                   B.MAXSIZE,
                   A.USEDSIZE,
                   CURRSIZE
              FROM (
                   SELECT A.SPACE_ID,
                          NVL(sum(B.ALLOC), 0) ALLOCSIZE,
                          NVL(sum(B.USED), 0) USEDSIZE
                     FROM V$MEM_TABLESPACES A
                     LEFT JOIN
                          (
                          SELECT A.TABLESPACE_ID,
                                 B.TABLE_NAME,
                                 SUM(A.FIXED_ALLOC_MEM+A.VAR_ALLOC_MEM) ALLOC,
                                 SUM(A.FIXED_USED_MEM+A.VAR_USED_MEM) USED
                            FROM V$MEMTBL_INFO A,
                                 SYSTEM_.SYS_TABLES_ B
                           WHERE A.TABLE_OID=B.TABLE_OID
                           GROUP BY A.TABLESPACE_ID, B.TABLE_NAME
                          ) B
                       ON A.SPACE_ID=B.TABLESPACE_ID
                    WHERE A.SPACE_ID != 0
                    group by a.space_id
                   ) A,
                   (
                   SELECT 1 SPACEID,
                               MEM_MAX_DB_SIZE MAXSIZE,
                               MEM_ALLOC_PAGE_COUNT * 32 * 1024 ALLOCSIZE,
                               MEM_ALLOC_PAGE_COUNT * 32 * 1024 CURRSIZE
                          FROM V$DATABASE
                  ) B
                    UNION ALL
                    SELECT DF.SPACEID SPACEID,
                               df.MAXSIZE,
                               NVL(UF.USEDSIZE,'N/A') USEDSIZE,
                               df.CURRSIZE
                          FROM (
                                SELECT SPACEID, 
                                       SUM(MAXSIZE) * 8 * 1024 MAXSIZE,
                                       SUM(CURRSIZE) * 8 * 1024 CURRSIZE
                                  FROM X$DATAFILES
                                 GROUP BY SPACEID
                               ) DF,
                               (
                                SELECT ID SPACEID,
                                       to_char(ALLOCATED_PAGE_COUNT * 8 * 1024) as USEDSIZE
                                  FROM v$TABLESPACES 
                                 WHERE ID NOT IN
                                       (
                                       SELECT SPACE_ID
                                         FROM V$MEM_TABLESPACES
                                       )
                                ) UF
                   WHERE DF.SPACEID = UF.SPACEID
                 ) TBS_SZ
        LEFT OUTER JOIN
             V$TABLESPACES TBS_INFO
          ON TBS_SZ.SPACEID = TBS_INFO.ID
       ORDER BY TBS_SZ.SPACEID;
/**

--USER 별 모든 OBJECT


USER_NAME            : USER 명 
TABLE_NAME           : 
OBJECT_TYPE          : OBJECT 종류


**/
CREATE OR REPLACE view  ADM_OBJECT AS
SELECT  Y.USER_NAME,
        X.TABLE_NAME,
        DECODE(X.TABLE_TYPE, 'T', 'TABLE', 'V', 'VIEW', 'S', 'SEQUENCE') OBJECT_TYPE
  FROM  SYSTEM_.SYS_TABLES_ X INNER JOIN
        SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID
 WHERE  Y.USER_ID > 1
UNION ALL
SELECT  Y.USER_NAME,
        X.PROC_NAME ,
        'PSM'
  FROM  SYSTEM_.SYS_PROCEDURES_ X INNER JOIN
        SYSTEM_.SYS_USERS_ Y ON X.USER_ID = Y.USER_ID
 WHERE  Y.USER_ID > 1
UNION ALL
SELECT  NVL(B.USER_NAME,'PUBLIC') USER_NAME,
        A.OBJECT_OWNER_NAME||'.'||OBJECT_NAME,'SYNONYMS'
  FROM  SYSTEM_.SYS_SYNONYMS_ A
   LEFT OUTER JOIN SYSTEM_.SYS_USERS_ B
     ON A.SYNONYM_OWNER_ID = B.USER_ID
  WHERE OBJECT_OWNER_NAME NOT IN ('SYSTEM_')
  ORDER BY 1;
/**

--시노님 정보 조회

USER_NAME            : 유저이름(PUBLIC, 유저)
SYSNONYM_NAME        : 시노님이름
OBJ_NAME             : OBJECT 이름


**/
CREATE OR REPLACE view  ADM_SYNONYM AS
SELECT  NVL(B.USER_NAME,'PUBLIC') AS USER_NAME,
        SYNONYM_NAME,
        A.OBJECT_OWNER_NAME||'.'||OBJECT_NAME AS OBJ_NAME
  FROM  SYSTEM_.SYS_SYNONYMS_ A
   LEFT OUTER JOIN SYSTEM_.SYS_USERS_ B
     ON A.SYNONYM_OWNER_ID = B.USER_ID
  WHERE OBJECT_OWNER_NAME NOT IN ('SYSTEM_')
  ORDER BY 1;
/**

--리플리케이션 정보 조회 


REPLICATION_NAME : 리플리케이션 명 
XSN	         : Replication Sequence No 
REPGAP		 : Replication Gap 
REMOTE_REPL	 : Replication 대상 정보 
RECEIVER_STAT	 : Reciever 상태 


**/
CREATE OR REPLACE view  ADM_REPLICATION AS
SELECT 
    A.REPLICATION_NAME, 
    A.XSN, 
    NVL(TO_CHAR(E.REP_GAP), 'N/A') AS REPGAP, 
    D.HOST_IP || ' (' || D.PORT_NO || '):' || CASE2(TO_CHAR(B.PEER_PORT) = '', 'OFF', 'ON') AS REMOTE_REPL,   
    CASE2(TO_CHAR(C.PEER_PORT) = '', 'OFF', 'ON') AS RECEIVER_STAT 
FROM 
    ( SELECT    REP_NAME, 
		MAX(REP_GAP) AS REP_GAP 
      FROM 
		V$REPGAP 
      GROUP BY REP_NAME 
    ) E,
    SYSTEM_.SYS_REPL_HOSTS_ D , SYSTEM_.SYS_REPLICATIONS_ A
    LEFT OUTER JOIN V$REPSENDER B ON A.REPLICATION_NAME = B.REP_NAME 
    LEFT OUTER JOIN V$REPRECEIVER C ON A.REPLICATION_NAME = C.REP_NAME 
WHERE D.REPLICATION_NAME = A.REPLICATION_NAME  
AND A.REPLICATION_NAME = E.REP_NAME
ORDER BY A.REPLICATION_NAME;
/**

--시퀀스의 정보를 나타냄  

SEQ_NAME : SEQUENCE 명 
CURRENT_SEQ : 현재 SEQUENCE 번호 
START_SEQ   : SEQUENCE 시작 번호 
INCREMENT_SEQ : 증가 번호 
CACHE_SIZE : 캐시 
MAX_SEQ : 최대 값 
MIN_SEQ : 최소 값 
IS_CYCLE : 순환 여부 

**/
CREATE OR REPLACE view  ADM_SEQUENCE AS
SELECT C.USER_NAME||'.'||B.TABLE_NAME SEQ_NAME,
       A.CURRENT_SEQ,
       A.START_SEQ, 
       A.INCREMENT_SEQ,
       A.CACHE_SIZE, 
       A.MAX_SEQ, 
       A.MIN_SEQ, 
       A.IS_CYCLE
  FROM V$SEQ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C
 WHERE A.SEQ_OID = B.TABLE_OID 
   AND B.USER_ID = C.USER_ID 
   AND B.USER_ID != 1
 ORDER BY SEQ_NAME;    
 /**
--전체 뷰에 대한 정보를 조회 
	
VIEW_NAME : 뷰 명 
VIEW_ID   : View Object ID 
STATUS	  : View 의 상태 

**/
CREATE OR REPLACE view  ADM_VIEW AS
SELECT C.USER_NAME||'.'||B.TABLE_NAME VIEW_NAME,
       A.VIEW_ID,
       DECODE(A.STATUS,0,'VALID','INVALID') STATUS
  FROM SYSTEM_.SYS_VIEWS_ A, SYSTEM_.SYS_TABLES_ B,
       SYSTEM_.SYS_USERS_ C
 WHERE A.VIEW_ID = B.TABLE_ID AND A.USER_ID=C.USER_ID
 ORDER BY VIEW_NAME;
/**

--인덱스에 속한 전체 컬럼명을 출력 

TABLE_NAME : 테이블명 
INDEX_NAME : 인덱스명 
COLUMN_NAME : 컬럼명 
COLUMN_ORDER : 해당 컬럼 Ordering 된 순서 
**/
CREATE OR REPLACE view  ADM_COL_INDEX AS
SELECT D.USER_NAME||'.'||C.TABLE_NAME TABLE_NAME,
       B.INDEX_NAME, 
       E.COLUMN_NAME,
       DECODE(SORT_ORDER,'A','ASC','D','DESC') COLUMN_ORDER
  FROM SYSTEM_.SYS_INDEX_COLUMNS_ A, SYSTEM_.SYS_INDICES_ B,
       SYSTEM_.SYS_TABLES_ C, SYSTEM_.SYS_USERS_ D,
	   SYSTEM_.SYS_COLUMNS_ E
 WHERE A.INDEX_ID = B.INDEX_ID 
   AND A.TABLE_ID = C.TABLE_ID 
   AND A.USER_ID = D.USER_ID 
   AND A.COLUMN_ID = E.COLUMN_ID 
   AND D.USER_ID != 1
 ORDER BY TABLE_NAME, INDEX_NAME, INDEX_COL_ORDER;
/**

-- 모든 인덱스들의 대한 정보

INDEX_ID : Index ID 
TABLE_NAME : 해당 인덱스가 있는 테이블 명 
TBS : Index의 Tablespace 명 
UNIQUENESS : Unique Index 여부 
COLUMN_COUNT  : Column 갯수 

**/
CREATE OR REPLACE view  ADM_INDEX AS
SELECT A.INDEX_ID, 
       C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME,
       A.INDEX_NAME INDEX_NAME,
       NVL(D.NAME,'MEMORY') TBS,
       DECODE(IS_UNIQUE,'T','UNIQUE','NONUIQUE') UNIQUENESS,
       A.COLUMN_CNT COLUMN_COUNT 
  FROM SYSTEM_.SYS_INDICES_ A LEFT OUTER JOIN V$TABLESPACES D
       ON A.TBS_ID = D.ID, 
       SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C
 WHERE A.TABLE_ID = B.TABLE_ID
   AND A.USER_ID = C.USER_ID
   AND C.USER_ID != 1
 ORDER BY TABLE_NAME, INDEX_NAME ;
/**

-- Constraint 에 대한 조회 

TABLE_NAME : Contraint 가 설정된 테이블 명 
CONSTRAINT_NAME : Constraint 명 
CON_TYPE : Contraint 종류 
INDEX_NAME : 해당 Constraint 가 index 존재를 필요로 할 경우 해당 Index 명 
REFERENCE_TABLE : Constraint 가 FK 일 경우 참조하는 테이블 명 
REFERENCE_INDEX : Constraint 가 FK 일 경우 참조하는 인덱스 명 

**/
CREATE OR REPLACE view  ADM_CONSTRAINT AS     
SELECT C.USER_NAME||'.'||B.TABLE_NAME TABLE_NAME,
        A.CONSTRAINT_NAME,
	    DECODE(A.CONSTRAINT_TYPE,0,'FOREIGNKEY',
    		1,'NOTNULL',
	    	2,'UNIQUE',
    		3,'PRIMARYKEY',
		    4,'NULL',
		    5,'TIMESTAMP','UNKNOWN') CON_TYPE,
	    D.INDEX_NAME,
	    (SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ IT WHERE IT.TABLE_ID = A.REFERENCED_TABLE_ID) REFERENCE_TABLE,
	    (SELECT INDEX_NAME FROM SYSTEM_.SYS_INDICES_ II WHERE II.INDEX_ID = A.REFERENCED_INDEX_ID) REFERENCE_INDEX
   FROM SYSTEM_.SYS_CONSTRAINTS_ A LEFT OUTER JOIN SYSTEM_.SYS_INDICES_ D
        ON A.INDEX_ID = D.INDEX_ID ,
	    SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C
  WHERE A.TABLE_ID = B.TABLE_ID 
    AND A.USER_ID = C.USER_ID
  ORDER BY TABLE_NAME ,CON_TYPE;      
/**

-- 현재 Altibase 에 접속된 세션의 정보를 출력합니다. 

ID        :  Session ID 
CONN_INFO :  접속된 세션의 정보  
ACTIVE    :  Action 여부를 판단합니다. 
OPEN_STMT :  해당 세션이 연 모든 Statment 갯수 
CURRENT_STMT : 현재 수행 중인 Statement ID 
COMMIT_MODE  : Commit 모드 

**/
CREATE OR REPLACE view  ADM_SESSION AS
SELECT ID,
       REPLACE2(REPLACE2(COMM_NAME,'SOCKET-',NULL),'-SERVER',NULL) CONN_INFO,
       DECODE(ACTIVE_FLAG,1,'ACTIVE','INACTIVE') ACTIVE,
       OPENED_STMT_COUNT OPEN_STMT,
       CURRENT_STMT_ID CURRENT_STMT,
       CLIENT_PID,
       DECODE(AUTOCOMMIT_FLAG,0,'Non AutoCommit','AutoCommit') COMMIT_MODE
  FROM V$SESSION;  
/**

-- LOCK 정보 조회

SESSION_ID     : 세션 ID
TX_ID          : 트렌젝션 ID
TBL_INFO       : 테이블 정보
LOCK_ITEM_TYPE : LOCK 상태
STATE          : 쿼리 상태
QUERY          : 쿼리 내역
**/
CREATE OR REPLACE view  ADM_LOCK AS
SELECT  A.SESSION_ID AS SESSION_ID,
        A.TX_ID AS TX_ID,
        DECODE(LOCK_ITEM_TYPE,'TBS',B.NAME,'TBL',C.TABLE_NAME,DBF_ID) TBL_INFO ,
        LOCK_DESC AS LOCK_ITEM_TYPE,
        DECODE(A.STATE,0,'ALLOC',1,'PREPARED',2,'FETCH-READY',4,'FETCHING','UNKNOWN') AS STATE,
        RPAD(QUERY,120) AS QUERY
FROM    V$LOCK_STATEMENT A LEFT OUTER JOIN V$TABLESPACES B
        ON A.TBS_ID=B.ID
        LEFT OUTER JOIN SYSTEM_.SYS_TABLES_ C
        ON A.TABLE_OID=C.TABLE_OID
ORDER BY SESSION_ID;
/**

-- PROCEDURE 정보 조회 
USER_NAME   : 유저이름
PROC_NAME   : procedure 이름
OBJECT_TYPE : 타입(PROCEDURE,FUNCTION,TYPE_SET)
STATUS      : 상태


**/
CREATE OR REPLACE view  ADM_PROC AS
SELECT  B.USER_NAME, A.PROC_NAME, 
        DECODE(A.OBJECT_TYPE,0,'PROCEDURE',1,'FUNCTION','TYPE_SET') AS TYPE,
        DECODE(A.STATUS,0,'VALID','INVALID') AS STATUS
  FROM  SYSTEM_.SYS_PROCEDURES_ A, SYSTEM_.SYS_USERS_ B
 WHERE  A.USER_ID=B.USER_ID
       AND B.USER_NAME <> 'SYSTEM_'; 
  /**

-- TRIGGER 정보 조회 
USER_NAME      : 유저이름
TRIGGER_NAME   : 트리거 이름
TABLE_NAME     : 테이블 이름
ENABLE         : 상태
EVENT_TIME     : 이벤트 시간
EVENT_TYPE     : 이벤트 타입
GRANULARITY    : 이벤트 조건


**/
CREATE OR REPLACE view  ADM_TRIGGER AS
SELECT  B.USER_NAME, A.TRIGGER_NAME, C.TABLE_NAME, 
        DECODE(A.IS_ENABLE,0,'DISABLE','ENABLE') AS ENABLE,
        DECODE(A.EVENT_TIME,1,'BEFORE','AFTER') AS EVENT_TIME,
        DECODE(A.EVENT_TYPE,1,'INSERT',2,'DELETE',3,'UPDATE') AS EVENT_TYPE,
        DECODE(A.GRANULARITY,1,'FOR EACH ROW',2,'FOR EACH STATEMENT') AS GRANULARITY
  FROM  SYSTEM_.SYS_TRIGGERS_ A, SYSTEM_.SYS_USERS_ B,
        SYSTEM_.SYS_TABLES_ C
 WHERE  A.USER_ID=B.USER_ID
    AND C.TABLE_ID=A.TABLE_ID ;


http://newhyuki.egloos.com/1957158

알티베이스 메모리 사이즈 부분별로 보기 (v$memstat)
->
SELECT * FROM V$MEMSTAT ORDER By 4 DESC;

------------------------------------------------------------------------------------------------------------------

메모리 테이블 별 사이즈 보기.
->
SELECT 
        A.TABLE_OID TABLEOID,
        C.USER_NAME||'.'||B.TABLE_NAME TABLENAME,
        A.MEM_SLOT_SIZE SLOTSIZE,
        FIXED_ALLOC_MEM+VAR_ALLOC_MEM ALLOCBYTE,
        FIXED_USED_MEM+VAR_USED_MEM USEDBYTE,
        ROUND ((FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM)*100,2) EFFICIENCY
FROM
        V$MEMTBL_INFO A,
        SYSTEM_.SYS_TABLES_ B,
        SYSTEM_.SYS_USERS_ C
WHERE
        A.TABLE_OID = B.TABLE_OID AND
        B.USER_ID = C.USER_ID AND
        C.USER_ID != 1 AND
        B.TABLE_TYPE != 'V' AND
        B.TABLE_TYPE = 'T'
        ORDER BY TABLENAME;

출처 : http://www.mins01.com/20090118/board/board.php?type=read&b_id=tech&sh=&sw=&cat=DataBase&page=1&b_idx=585

+ Recent posts