원문 : http://blog.naver.com/dozuq/14972088


 


 

-- 세션 조회

SELECT

A.SID

    ,A.SERIAL# 

FROM

V$SESSION A

    ,V$LOCK B

    ,DBA_OBJECTS C 

WHERE

A.SID=B.SID

AND B.ID1=C.OBJECT_ID

AND B.TYPE = 'TM'

AND C.OBJECT_NAME = '[테이블명]'

 



 

-- 세션 제거...

ALTER SYSTEM KILL SESSION '[SID][SERIAL]';

ALTER SYSTEM KILL SESSION '416, 46371';

 

 

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


출처 : http://blog.naver.com/bsc3425/10141921934



============== 락 상태 확인  =====

SELECT CC.SID, CC.SERIAL#, BB.OWNER,BB.OBJECT_NAME,CC.MACHINE,CC.PROGRAM,CC.TERMINAL

  FROM V$LOCKED_OBJECT AA,

       ALL_OBJECTS     BB,

       V$SESSION       CC

 WHERE BB.OBJECT_ID = AA.OBJECT_ID

   AND CC.SID       = AA.SESSION_ID

============== 락걸린테이블 확인 확인========
SELECT OBJECT_ID,SESSION_ID FROM V$LOCKED_OBJECT
/
============== 테이블 확인 ==============
SELECT * FROM ALL_OBJECTS WHERE OBJECT_ID = OBJECT_ID
/
============== 세션확인 ================
SELECT * FROM V$SESSION WHERE SID = 278;
   SID,SERIAL#
/
============== 세션죽이기 =============
ALTER SYSTEM KILL SESSION '132,58458';  ------SID,SERIAL#

 

SELECT sid, count(sid) cursor
FROM V$OPEN_CURSOR
GROUP BY sid
ORDER BY cursor DESC

 

SELECT 'ALTER SYSTEM KILL SESSION '''||SID||','||SERIAL#||''';'
  FROM V$SESSION
-- WHERE SID = 11
WHERE SID IN (145,130,63,144,134,110,131);

[출처] 오라클 락 해제|작성자 정서


'DB > Oracle' 카테고리의 다른 글

오라클 테이블 락 확인/해제(링크)  (0) 2014.03.28
Oracle 8.0.5 이전. 서비스에 관해..  (0) 2011.12.21
Oracle] 제약조건 삭제 및 추가  (0) 2011.12.14
Posted by 야동우
,

Explain 정보보는법

DB/MySQL 2014. 7. 11. 17:09

출처] http://blog.naver.com/kdi85/30104830102



Explain 정보보는법

1. 인덱스가 적절히 사용되고 있는지 검토
2. 나열된 순서는 MYSQL이 쿼리처리에 사용하는 순서대로 출력

 

 

EXPLAIN 의 각 행 설명
1. id : SELECT 번호, 쿼리내의 SELECT 의 구분번호, 실행순서

 

2. select_type : SELECT 의 타입
- SIMPLE: 단순 SELECT (UNION 이나 서브쿼리를 사용하지 않음)
- PRIMARY: 가장 외곽의 SELECT
- UNION: UNION 에서의 두번째 혹은 나중에 따라오는 SELECT
- DEPENDENT UNION: UNION 에서의 두번째 혹은 나중에 따라오는 SELECT, 외곽쿼리에 의존적
- UNION RESULT: UNION 의 결과물
- SUBQUERY: 서브쿼리의 첫번째 SELECT
- DEPENDENT SUBQUERY: 서브쿼리의 첫번째 SELECT, 외곽쿼리에 의존적
- DRIVED: SELECT 로 추출된 테이블 (FROM 절 내부의 서브쿼리)

 

3. table : table명

 

4. type : 조인타입, 우수한 순서대로… 뒤로갈수록 나쁜 조인형태
1) system : 테이블에 단 하나의 행만 존재(시스템 테이블). const join 의 특수한 경우 (거의 메모리에 상주)
2) const : 많아야 하나의 매치되는 행만 존재할 때, PRIMARY KEY 나 UNIQUE index 를 상수와 비교할 때, 각 컬럼값은 나머지 연산에서 상수로 간주, 처음 한번만 읽어들이면 되므로 매우 빠름
3) eq_ref : 조인수행을 위해 각 테이블에서 하나씩의 행만이 읽히는 경우, 조인연산에  PRIMARY KEY 나 UNIQUE index 인덱스가 사용되는 경우, 인덱스된 컬럼이 = 연산에 사용되는 경우
4) ref : 이전 테이블과의 조인에 사용될 매치되는 인덱스의 모든행이 이 테이블에서 읽혀질 때, leftmost prefix 키만을 사용하거나 사용된 키가 PRIMARY KEY 나 UNIQUE 가 아닐때
(즉 키값으로 단일행을 추출할수 없을때)
사용된 키가 적은수의 행과 매치되면 이것은 적절한 조인 타입.
ref 는 인덱스된 컬럼과 = 연산에서 사용됨
5) ref_or_null : ref 와 같지만 NULL 값을 포함하는 행에대한 검색이 수반될 때. 서브쿼리 처리에서 대개 사용됨
6) index_merge : 인덱스 병합 최적화가 적용되는 조인 타입. 이 경우, key 컬럼은 사용된 인덱스의 리스트를 나타내며 key_len 컬럼은 사용된 인덱스중 가장 긴 key 명을 나타냄
7) unique_subquery : 몇몇 IN 서브쿼리 처리에서 ref 타입대신 사용됨. unique_subquery 는 성능향상을 위해 서브쿼리를 단순 index 검색 함수로 대체함.
8) index_subquery : unique_subquery 와 마찬가지로 IN 서브쿼리를 대체. 단, 서브쿼리에서 non-unique 인덱스가 사용될때 동작 함
9) range : 인덱스를 사용하여 주어진 범위 내의 행들만 추출
key 컬럼: 사용된 인덱스 / key_len: 사용된 가장 긴 key 부분 / ref 컬럼: 이 타입의 조인에서 NULL
키 컬럼이 상수와 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN 또는 IN 연산에 사용될때 적용됨
10) index : 인덱스가 스캔된다는걸 제외하면 ALL 과 같음. 일반적으로 인덱스 파일이 데이타파일보다 작기 때문에 ALL 보다는 빠름. MySQL 은 쿼리에서 단일 인덱스의 일부분인 컬럼을 사용할때 이 조인타입을 적용함
11) ALL
이전 테이블과의 조인을 위해 풀스캔. (조인에 쓰인) 첫번째 테이블이 고정이 아니라면 비효율적. 대부분의 경우에 아주 느린 성능
정리:
system - const - eq_ref - ref - ref_or_null - index_mergy - unique_subquery -  ndex_subquery - range - index - ALL

 

5. possible_keys : MySQL 이 해당 테이블의 검색에 사용할수 있는 인덱스들. possible_keys 에 나타난 인덱스들이 결과에 나타난 테이블 순서에서 실제 사용할 수 없을수도 있음

 

6. key :  MySQL 이 실제 사용한 key(index)

 

7. key_len : MySQL 이 사용한 인덱스의 길이, key 컬럼값이 NULL 이면 이값도 NULL
key_len 값으로 MySQL 이 실제 복수컬럼 키중 얼마나 많은 부분을 사용할 것인지 알 수 있음

 

8. ref : 행을 추출하는데 키와 함께 사용된 컬럼이나 상수값

 

9. rows : 쿼리 수행에서 MySQL 이 예상하는 검색해야할 행수

 

10. Extra : MySQL 이 쿼리를 해석한 추가적인 정보를 나타냄
1) Distinct: MySQL 이 매치되는 첫행을 찾는 즉시 검색을 중단한다는 의미
2) Not exists: MySQL 이 LEFT JOIN 을 수행함에 매치되는 한 행을 찾으면 더이상 매치되는 행을 검색x
3) range checked for each record (index map: #): MySQL 이 사용할 좋은 인덱스가 없음 의미
4) Using filesort: MySQL 이 정렬을 위해 추가적인 과정을 필요로 함
5) Using index: 컬럼정보가 실제 테이블이 아닌 인덱스트리에서 추출, 쿼리에서 단일 인덱스된 컬럼들만을 사용하는 경우
6) Using temporary: MySQL 이 결과의 재사용을 위해 임시테이블을 사용, 쿼리 내에 GROUP BY 와 ORDER BY 절이 각기 다른 컬럼을 사용할때 발생
7) Using where: WHERE 절이 다음 조인에 사용될 행이나 클라이언트에게 돌려질 행을 제한하는 경우 테이블의 모든 행을 검사할 의도가 아니면 ALL 이나 index 라면 쿼리사용이 잘못된 것임
Using sort_union(…) , Using union(…) , Using intersect(…)
Using index for group-by: Using index 와 접근방식이 같으며, 추가적인 디스크 접근 없이 GROUP BY 나 DICTINCT 쿼리에 사용된 모든 컬럼에 대한 인덱스를 찾았음을 의미

 


정리 : 쿼리를 가능한 한 빠르게 하려면, Extra 값의 Using filesort 나 Using temporary 에 주의해야 함
EXPLAIN 의 출력내용중 rows 컬럼값들을 곱해봄으로써 얼마나 효과적인 join 을 실행하고 있는지 알 수 있다


'DB > MySQL' 카테고리의 다른 글

MySQL] date_format(), 날짜포맷 -> 형식변경  (0) 2014.03.05
MySQL 외부 접속 허용하기  (0) 2013.01.26
Posted by 야동우
,



출처] http://twinstarbox.tistory.com/20

'DB > Oracle' 카테고리의 다른 글

오라클 락 해제(펌)  (0) 2014.08.21
Oracle 8.0.5 이전. 서비스에 관해..  (0) 2011.12.21
Oracle] 제약조건 삭제 및 추가  (0) 2011.12.14
Posted by 야동우
,

출처: http://nkcnow.tistory.com/29




1. 정리


DATE_FORMAT(DATE, '형식문자')


(형식문자 종류)






2. 데이터 확인






'DB > MySQL' 카테고리의 다른 글

Explain 정보보는법  (0) 2014.07.11
MySQL 외부 접속 허용하기  (0) 2013.01.26
Posted by 야동우
,



아래 링크는 www.sqler 사이트의 tip과 강좌 링크입니다.









MSSQL과 Oracle 함수 비교 - 첫번째 10가지 함수





MSSQL과 Oracle 함수 비교 2탄 - 9가지 함수





MSSQL과 Oracle 함수 비교 3탄 - 9가지 함수(마지막)













Posted by 야동우
,



개념적으로 살펴보자면,


유저에게 선택된 데이터베이스에 접근할 수 있는 권한을 주면 되는 것.


(MySQL이 처음이라.. 아직 정확하게 어떤 권한인지 정확하게 몰라 모든 권한을 주겠다 -ㅅ-;; )



1. 권한주기 (외부에서 접근 가능토록..)


mysql> GRANT ALL on 데이터베이스명.* to '유저명'(@'외부IP') (IDENTIFIED by '유저암호');


파란글씨는 각자의 상황에 맞게 써넣으면 되고, 녹색괄호로 표시된 부분은 생략가능.



예제)

  1-1. 특정 외부IP에 접속 허용하기

mysql> GRANT ALL on mysql.* to 'root'@'192.168.0.5';        // 암호 없음.


  1-2. 특정 외부IP에 접속 허용하기

mysql> GRANT ALL on mysql.* to 'root'@'%';

또는

mysql> GRANT ALL on mysql.* to 'root';




2. 권한 뺏기 (외부에서 접근하지 못하도록..)


mysql> REVOKE ALL on 데이터베이스명.* from '유저명'(@'외부IP') (IDENTIFIED by '유저암호');


GRANT TO 와 똑같은데, REVOKE FROM 으로 변경되었다.



예제)

  1-1. 특정 외부IP에 접속 허용막기

mysql> REVOKE ALL on mysql.* from 'root'@'192.168.0.5';        // 암호 없음.


  1-2. 특정 외부IP에 접속 허용막기

mysql> REVOKE ALL on mysql.* from 'root'@'%';

또는

mysql> REVOKE ALL on mysql.* from 'root';






'DB > MySQL' 카테고리의 다른 글

Explain 정보보는법  (0) 2014.07.11
MySQL] date_format(), 날짜포맷 -> 형식변경  (0) 2014.03.05
Posted by 야동우
,



출처] http://blog.naver.com/royalwang?Redirect=Log&logNo=100148098982



CREATE OR REPLACE PROCEDURE SEQUENCE_RESET(S_NAME IN VARCHAR2)

AS S_VALUE INTEGER;

BEGIN

execute immediate 'alter sequence ' || S_NAME || ' minvalue 0';

execute immediate 'select ' || S_NAME || '.nextval from dual' into S_VALUE ;

execute immediate 'alter sequence ' || S_NAME || 'increment by -'|| S_VALUE ;

execute immediate 'select ' || S_NAME || '.nextval from dual' into S_VALUE ;

execute immediate 'alter sequence ' || S_NAME || 'increment by 1';

END;



PL/SQL에서 Sequence를 생성하고 삭제하려고 했더니

DCL자체가 안 먹히는 듯.


그래서 위 게시물의 방법을 이용하여 실제로 프로젝트에 적용시켜 보기로 했다.


SEQUENCE_RESET 프로시져를 생성하여 패키지에서 호출해 쓰려고 하였으나, 알지 못하는 이유로 실패..

아래처럼 프로시져 내용을 통째로 옮겨넣고 진행하였다.


미리 seq_bgtmap 라는 시퀀스를 생성한 후에, 

아래처럼 해보자.


   Procedure sp_Copy_Bgtdtl(

             p_bgt_yy          in varchar2,

             p_inp_emp         in varchar2,

             CurQue_mB646      in out Que_mB646Cursor) IS

      temp_seq integer;

   Begin

     

      execute immediate 'alter sequence seq_bgtmap minvalue 0';

      execute immediate 'select seq_bgtmap.nextval from dual' into temp_seq;

      execute immediate 'alter sequence seq_bgtmap increment by -'||temp_seq;

      execute immediate 'select seq_bgtmap.nextval from dual' into temp_seq;

      execute immediate 'alter sequence seq_bgtmap increment by 1';


      insert into bgtmap(bgt_yy       , map_id       , prgm_id      , bugt_cd      ,

.

.

.

.



결과는 굿.


Posted by 야동우
,




보통 논리모델의 속성명을 comment로 보여지도록 작업하고자 할 때, 주로 보여주는 메세지인데,


Reset all attributes in model 옵션을 이용하여 한꺼번에 모든 모델에 대해서 적용할 경우, 


재수없으면 ESC키를 수천번 눌러야 하는 경우도 생긴다.(OK 연타는 꺼지지 않고 계속 이 메세지를 띄워준다.)


이 메시지가 뜨는 이유는 주로,  컬럼에 Comment가 달려있지 않아서인데 수백개의 테이블에 Comment가 하나도 달려 있지 않다면.. 그리고 이 메세지가 떴다면... -0- 생각만 해도 끔찍하다. 


이에 대한 대처방안이 몇가지가 있는데..


첫번째로, 데이터베이스 상에서 모든 컬럼에 Comment를 달아주는 방법으로 가장 이상적이지만, 한 번에 주석 다는게 어디 쉽나;;

무튼 모든 컬럼에 Comment가 달려 있으면 이 메세지는 안 봐도 된다. 



첫번째 방법이 싫고, 거의 모든 컬럼에 Comment가 달려있지만, 듬성듬성 누락된 경우.

Reset all attributes in model 메뉴를 사용하지 않고, 그 위에 All attributes of entity XXXX 옵션을 클릭하여 Entity 단위(테이블도 Entity의 일종)로 작업을 해 줄 수도 있다.



필자는 오늘 타 프로젝트의 ERD를 그리기 위해, 이 두가지 방법을 모두 사용하여 작업하였는데..


정리하자면, 막무가내로 Revers Engineer로 ERD를 뽑아내고 위의 작업을 하는 것보다.


오라클을 예로들어, DBMS에서 미리 아래 쿼리처럼 user_col_comments 데이터사전을 이용하여 


select *

from user_col_comments

where comments is null;


null값을 가진 컬럼과 테이블을 확인 한 후에, 


내가 Comment를 달아도 되는 상황이고, 컬럼에 대한 정보도 대충 안다면 Comment를 모두 달아 준 후에 ERD 작업을 하고, 

거진 다 Comment가 달려있고 몇몇개가 비어있을 경우, 위에서 말한 두번째 방법을 쓰면 될 것이다.


이보다 더한 상황이라면.. 그냥.. 힘내시길..


새벽 4시에 작성하는 글이라 두서가 없네, 시간나면 좀 정리해야겠다고 생각!!


Posted by 야동우
,


링크 : http://www.pplane.net/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%95%94%ED%98%B8%ED%99%94



오라클 지원 암호화 알고리즘 종류 -

 

해당 암호화는 dbms_obfuscation_toolkit툴킷을 설치를해야한다.

1) SYS 유저로 아래의 스크립트를 실행

   @$ORACLE_HOME/rdbms/admin/dbmsobtk.sql
   @$ORACLE_HOME/rdbms/admin/prvtobtk.plb
   
2) 권한을 부여

   SQL>GRANT execute ON dbms_obfuscation_toolkit TO public;

 

해당 암호화 구문은 프로시저로 되있으므로 사용자정의 함수로 만들어 사용하면 유용하다.

 

 

DES(Data Encrypt standard)

 

dbms_obfuscation_toolkit.DESEncrypt('입력값','공개키값')

dbms_obfuscation_toolkit.DESDecrypt('입력값','공개키값')

 

DES3

 

dbms_obfuscation_toolkit.DES3Encrypt('입력값','공개키값')

dbms_obfuscation_toolkit.DES3Decrypt('입력값','공개키값')

 

MD5(message digest algorithm 5)

 

dbms_obfuscation_toolkit.MD5('입력값')

 

 

 

그밖에 AES(Advanced Encryption Standard) 있으나 오라클 10g 에서 DBMS_CRYPTO 툴킷을 사용해야 한다.

 

 

출처 - oracleclub(오라클클럽), http://download-west.oracle.com/docs/cd/B10501_01/index.htm (오라클9i설명서)






//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




But, 정작 사용하려고 할 때  

ORA-06553: PLS-307: too many declarations of 'DESENCRYPT' match this call


오류가 뜨는 경우가 있다. 그럴 경우 아래 링크로~


링크 : http://yadw.tistory.com/220


 

Posted by 야동우
,

원본입니다 : http://www.database.sarang.net/?aid=34497&criteria=oracle&id=34540&inc=read&keyword=&limit=20&page=32&subcrit=qna



DES 암호화/복화화를 위해 

암호화는 dbms_obfuscation_toolkit툴킷을 설치를해야한다.

1) SYS 유저로 아래의 스크립트를 실행

   @$ORACLE_HOME/rdbms/admin/dbmsobtk.sql
   @$ORACLE_HOME/rdbms/admin/prvtobtk.plb
   
2) 
권한을 부여

   SQL>GRANT execute ON dbms_obfuscation_toolkit TO public;  

을 실행하여 정상적으로 수행되었습니다.

그런데, 사용하려고 하면 아래와 같이 ORA-06553: PLS-307: too many declarations of 'DESENCRYPT' match this call이 발생하고 있습니다.

뭐가 잘못 됐는지...도움 부탁드립니다.감사합니다.

 

wmgapp1@[wmgapp:/home/wmgapp]sql_plus

SQL*Plus: Release 8.1.7.0.0 - Production on Mon Oct 6 14:00:06 2008

(c) Copyright 2000 Oracle Corporation.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning and Data Mining options

SQL> select svcmng_num,user_id,dbms_obfuscation_toolkit.DESEncrypt(user_id,'12345678') from mms_user_infos;
select svcmng_num,user_id,dbms_obfuscation_toolkit.DESEncrypt(user_id,'12345678') from mms_user_infos
                          *
ERROR at line 1:
ORA-06553: PLS-307: too many declarations of 'DESENCRYPT' match this call

이 글에 대한 댓글이 총 1건 있습니다.


@$ORACLE_HOME/rdbms/admin/dbmsobtk.sql

에 있는 raw 타입과 string 타입에 대해 function 이름이 같은 것으로 존재해서

충돌이 발생해서 ORA-06553: PLS-307: too many declarations of 'DESENCRYPT' match this call오류 메시지가 발생한것 같습니다.

raw 타입은 사용하지 않을것이어서 raw관련 함수/프로시저 부분을 삭제하고,

string관련 함수/프로시저만 두고 실행하니깐 정상적으로 수행이 되었습니다.

Posted by 야동우
,