oracle 유용한 쿼리

  • Join UPDATE

  • UPDATE AA A
    SET A.TARGET = (
        SELECT B.TARGET   
          FROM BB B
         WHERE A.PK = B.PK
    ) WHERE EXISTS ( SELECT 1 FROM BB B WHERE A.PK = B.PK );
    


  • 쿼리 시간 보기

  • set timing on;
    set timing off;
    


  • PLAN 정보 보기

  • set autot on exp
    사용자 쿼리
    set autot off
    rollback;
    


  • 현재 연결된 세션

  • select count(*) from v$session;
    


  • 세션 정보

  • select status, sid from v$session;
    


  • 사용자명 별 연결 세션

  • select USERNAME, count(1) from v$session group by USERNAME;
    


  • 케릭터셋 보기

  • select * from v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET'
    


  • 메모리에 올라가 있는 쿼리 보기

  • select * from V$SQL_SHARED_MEMORY
    


  • 메모리에 올라가 있는 쿼리 지우기
    (CPU, DISK 사용량이 증가하므로, 야간에 작업할 것)

    ALTER SYSTEM FLUSH SHARED_POOL;
    


  • 연결된 커서 갯수 및 쿼리 출력

  •    SELECT a.cnt,
              a.user_name,
              b.sql_text,
              a.hash_value
         FROM ( SELECT COUNT (*) cnt,
                       user_name,
                       hash_value
                  FROM v$open_cursor
              GROUP BY user_name,
                       hash_value) a,
              v$sqlarea b
        WHERE a.hash_value = b.hash_value AND ROWNUM <= 100
     ORDER BY cnt DESC;
    


  • 특정 테이블의 외래키 출력

  •    SELECT A.TABLE_NAME table_name
            , A.CONSTRAINT_NAME key_name
            , B.TABLE_NAME referencing_table
            , B.CONSTRAINT_NAME foreign_key_name 
            , B.STATUS fk_status  
         FROM USER_CONSTRAINTS A
            , USER_CONSTRAINTS B  
        WHERE A.CONSTRAINT_NAME = B.R_CONSTRAINT_NAME 
          AND B.CONSTRAINT_TYPE = 'R'
          AND A.OWNER = '대문자 계정명'
          AND ( A.TABLE_NAME = '대문자 테이블명' OR B.TABLE_NAME = '대문자 테이블명' )
     ORDER BY 1, 2, 3, 4;
    


  • Oracle Admin계정으로 로긴

  • $ sqlplus "/as sysdba"
    


  • Oracle 종료
  • (Oracle 계정에서)

    $ lsnrctl stop 
    $ sqlplus "/as sysdba"
    
    SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ]
    

    NORMAL : 현재 사용자가 연결을 끊을때까지 대기 default 옵션
    TRANSACTIONAL : 접속된 사용자들이 새롭게 트랜잭션을 시작할 수 없습니다. 사용자의 트랜잭션이 끝나면 연결이 종료되면 모든 트랙잭션이 종료되면 데이터베이스가 즉시 종료 됩니다.
    IMMEDIATE : 현재 진행중인 SQL문이 완료되지 않으며 현재 사용자의 연결을 즉시 끝으며, 모든 트랜잭션을 롤백합니다.
    ABORT : 강제 종료라고 할수 있으며 다음번 데이터베이스 시작시 인스턴스 복구가 필요합니다.


  • Oracle 시작
  • (Oracle 계정에서)

    $ sqlplus "/as sysdba"
    
    STARTUP [NORMAL | NOMOUNT | MOUNT]
    exit
    
    $ lsnrctl start
    


  • Oracle 기본포트 1521 변경 방법
  • (Oracle 계정에서)

    $ lsnrctl stop
    $ sqlplus "/as sysdba"
    
    ALTER SYSTEM SET LOCAL_LISTENER = "(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522))";
    ALTER SYSTEM REGISTER;
    exit
    
    $ lsnrctl start
    



  • Pro-C 관련 유용한 사이트

  • http://hobak.emailkorea.net/hobak/
    http://www.lsbu.ac.uk/oracle/oracle7/api/doc/PC_22/
    http://www.lsbu.ac.uk/oracle/oracle9i/appdev.920/a97269/toc.htm


  • Pro-C 관련 글

  • shared_pool 메모리 사용량
    Sql 바인딩
    하드파싱 쿼리 잡는 방법
    $sqltext 에 대해서