IT/oracle
쿼리를 돌리다보면 현재 돌리고 있는 쿼리의 진행률이 보고 싶을 때가 있다. 이럴 때에는 아래 쿼리를 돌려보자. %로 진행률이 나오는 걸 볼 수 있다, 또한, 원치 않으면 주어진 문장으로 세션 킬도 바로 진행할 수 있다. SELECT A.SID , A.SERIAL# , B.USERNAME , B.TERMINAL , A.TARGET_DESC , A.SOFAR , A.TOTALWORK , (A.SOFAR / A.TOTALWORK) * 100 "Completed(%)" , C.SQL_TEXT , 'ALTER SYSTEM KILL SESSION' || '''' || A.SID || ',' || A.SERIAL# || ''';' FROM gv$session_lognops A , gv$session B , V$SQL..
oracle에 쌓인 db session을 조회하고 한방에 킬 할 수 있는 쿼리이다. 다중 킬을 할 일이 많아 해당 쿼리를 짜게 되었고, 조회하여 킬 할 쿼리를 복사하여 붙여넣고 'F5'만 누르면 된다. SELECT A.STATUS -- 상태 , A.USERNAME -- 접속 계정명 , A.SID -- SID , A.SERIAL# -- 시리얼번호 , 'ALTER SYSTEM KILL SESSION' || '''' || A.SID || ',' || A.SERIAL# || ''';' -- 킬 쿼리 , B.SQL_TEXT -- 실행중인 쿼리 내용 FROM V$SESSION A, V$SQLAREA B WHERE A.SQL_HASH_VALUE = B.HASH_VALUE AND A.SQL_ADDRESS = B.ADD..
원인 : kill 명령 후 트랜젝션 rollback 중이기 때문에 바로 kill 되지 않은 것 dml에 의해 lock 가 걸리고 해당 세션이 끊겼을때 rollback 중인 내용이 많을 때 발생 기다리면 해제되는 경우가 일반적이고 정상적인 Rollback 처리를 위해서는 기다리는 걸 권함 oracle db session이 많이 쌓여서, Alter system kill session 'SID,SERIAL'로 신나게 세션을 날리는 중 이었다. 그런데, 갑자기 ORA-31이라는 처음보는 오라클 에러가 뜬 것이다. 당황하여 구글링을 해보니 위와 같은 원인으로 해당 오류가 발생하였다. 얼마 지나지 않아 해당 오류는 자연스럽게 사라졌고, 새로운 지식을 얻게 되었다.
필자는 프로시저 호출 시 변수 갯수를 맞춰주지 않아서 해당 오류가 발생하였다. -- 프로시저 생성 CREATE OR REPLACE PROCEDURE TEST_PROC (AV_EX1 IN VARCHAR2, AV_EX2 IN VARCHAR2, AV_EX3 IN NUMBER, AV_EX4 OUT VARCHAR2) IN 매개변수 3개, OUT 매개변수가 1개라면, sql1.append("CALL TEST_PROC(?,?,?,?)"); 다음과 같이 4개의 변수를 받아야 하고, cStmtPss.setString(1, ""); cStmtPss.setString(2, ""); cStmtPss.setSInt(3, ""); cStmtPss.registerOutParameter(4, java.sql.Types.VARCHAR..
테이블 정의서를 쿼리로 한번에 뽑고 싶으시다면, 아래 쿼리를 사용하여 뽑아주시면 됩니다. SELECT A.TABLE_NAME AS TABLE_NAME , A.TAB_CMT AS "테이블설명" , A.COLUMN_NAME AS "컬럼명" , B.POS AS PK , A.COL_CMTAS "컬럼설명" , A.DATA_TYPE AS "데이터유형" , A.dataLength , A.NULLABLE AS "NULL여부" , A.COLUMN_ID AS "컬럼순서" , A.DATA_DEFAULT AS "기본값" FROM (SELECT S1.TABLE_NAME , S3.COMMENTS AS TAB_CMT , S1.COLUMN_NAME , S2.COMMENTS AS COL_CMT , S1.DATA_TYPE , CASE ..
oobiect 권한(DB 객체 접근) -- 특정 권한만 주기 GRANT SELECT ON [테이블명] TO [계정]; GRANT INSERT ON [테이블명] TO [계정]; GRANT DELETE ON [테이블명] TO [계정]; GRANT UPDATE ON [테이블명] TO [계정]; --SELECT, UPDATE, DELETE 모든 권한 주기 GRANT ALL ON [테이블명] T0 [계정]; -- 프로시져 실행 권한 주기 GRANT EXECUTE ON [프로시저명] TO [계정]; -- 테이블 권한 회수 REVOKE SELECT, UPDATE, INSERT, DELETE ON USER.TABLE_NM FROM USER1;
SQL 에디터에서의 에러문구 : 00942. 00000 - "table or view does not exist" 개발하다보면 종종 나타나는 에러 입니다. 원인 1. 테이블 및 뷰가 존재하지 않는 경우 - SELECT, INSERT, UPDATE, DELETE 쿼리 실행 시 발생합니다. - 해결방법 : 테이블 또는 뷰 명을 다시 확인(개발 당시 테이블 명을 잘못 기입하여 생성한 경우도 종종 발생) 원인 2. 테이블 권한이 없는 경우 - 해당 유저로 테이블에 SELECT, INSERT, UPDATE, DELETE 권한이 있는지 확인해봐야 합니다. - 해당 유저로 생성한 테이블이 아니라면 권한 확인 쿼리를 날려봐야 합니다. SELECT * FROM DBA_TAB_PRIVS WHERE OWNER = '테이블소..
-- 세션 확인 SELECT a.sid -- SID , a.serial# -- 시리얼번호 , a.status -- 상태정보 , a.process -- 프로세스정보 , a.username -- 유저 , a.osuser -- 접속자의 OS 사용자 정보 , b.sql_text -- sql , c.program -- 접속 프로그램 FROM v$session a , v$sqlarea b , v$process c WHERE a.sql_hash_value = b.hash_value AND a.sql_address = b.address AND a.paddr = c.addr AND a.status = 'ACTIVE -- 오라클 세션 킬 쿼리 'SID, 시리얼 번호' ALTER SYSTEM KILL SESSION '123..