Oracle Database Vault

Oracle Database Vault는 다음과 같은 기능을 통해 오늘날 기업이 공통적으로 당면한 컴플라이언스 요구 사항을 해결하고 내부자 위협으로 인한 리스크를 경감할 수 있게 합니다:

  • 강력한 권한을 가진 사용자(예: DBA)라 하더라도 애플리케이션 데이터에 접근할 수 없도록 통제
  • 역할 분리(separation of duty) 지원
  • 누가, 언제, 어디서, 어떻게 애플리케이션, 데이터베이스, 데이터에 접근할 수 있는지에 대한 컨트롤 구현

PCI(Payment Card Industry), 사베인즈-옥슬리 (SOX), EU 개인정보보호법, HIPAA(Privacy Directive and the Healthcare Insurance Portability and Accountability Act) 등 내부자의 기밀 정보 접근, 조작, 유출로 인한 사기, 신분 도용, 재무 정보 조작, 금융 손실 등의 피해를 방지하기 위한 내부 컨트롤의 강화를 요구하는 새로운 법안들이 연이어 제정되고 있습니다.

고객은 기존의 애플리케이션 코드를 전혀 수정하지 않고도 Oracle Database Vault Realms, Command Rules, Factors, Separation of Duty 등을 애플리케이션 환경에 추가할 수 있습니다. Oracle Database Vault는 최근 PeopleSoft 애플리케이션에 인증을 마쳤으며, Oracle E-business Suite, Siebel 애플리케이션에 대한 인증 작업이 현재 진행 중입니다. Oracle Database Vault는 Oracle Database 10g Release 2와 Oracle Database 9i Release 2를 지원합니다.


### Lock 확인 쿼리
SELECT do.object_name, do.owner, do.object_type,do.owner, vo.xidusn, vo.session_id,
vo.locked_mode
FROM v$locked_object vo , dba_objects do
WHERE vo.object_id = do.object_id ;

####  어떤 object에 어떤 lock이 걸렸는지 확인
SELECT  T1.object_name, DECODE(locked_mode, 2, 'ROW SHARE', 3, 'ROW EXCLUSIVE',  4, 'SHARE', 5, 'SHARE ROW EXCLUSIVE', 6, 'EXCLUSIVE', 'UNKNOWN') lock_mode
FROM  dba_objects T1, v$locked_object T2
WHERE T1.object_id = T2.object_id;

#### session 확인
select * from v$session where status = 'ACTIVE'

#### cursor 확인
v$open_cursor

#### 테이블의 lock 확인
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
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 IN ('<테이블이름>');

/*******************************************************************************
* LOCK 관련
*******************************************************************************/

--V$LOCK 을 사용한 잠금 경합 모니터링
SELECT s.username, s.sid, s.serial#, s.logon_time,
  DECODE(l.type, 'TM', 'TABLE LOCK',
         'TX', 'ROW LOCK',
      NULL) "LOCK LEVEL",
  o.owner, o.object_name, o.object_type
FROM v$session s, v$lock l, dba_objects o
WHERE s.sid = l.sid
AND o.object_id = l.id1
AND s.username IS NOT NULL   

--락이 걸린 세션 자세히 알아보기
select a.sid, a.serial#,a.username,a.process,b.object_name,
decode(c.lmode,2,'RS',3,'RX',4,'S',5,'SRX',8,'X','NO') "TABLE LOCK",
decode (a.command,2,'INSERT',3,'SELECT',6,'UPDATE',7,'DELETE',12,'DROP TABLE',26,'LOCK TABLE','UNknown') "SQL",
decode(a.lockwait, NULL,'NO wait','Wait') "STATUS"
from v$session a,dba_objects b, v$lock c
where a.sid=c.sid and b.object_id=c.id1
and c.type='TM'

--락이 걸린 세션 간단히 알아보기
select a.sid, a.serial#, b.type, c.object_name, a.program, a.lockwait,
      a.logon_time, a.process, a.osuser, a.terminal
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';

select a.sid, a.serial#, a.username, a.process, b.object_name
from v$session a , dba_objects b, v$lock c
where a.sid=c.sid and b.object_id = c.id1
and c.type = 'TM'

--락이 걸린 세션을 찾아 내어 세션을 죽이려고 해도 죽지 않는 경우
--아래 쿼리문으로 OS단의 PROCESS ID를 찾아내어 OS에서 죽인다
--kill -9 프로세스아이디
select substr(s.username,1,11) "ORACLE USER", p.pid "PROCESS ID",
s.sid "SESSION ID", s.serial#, osuser "OS USER",
p.spid "PROC SPID",s.process "SESS SPID", s.lockwait "LOCK WAIT"
from v$process p, v$session s, v$access a
where a.sid=s.sid and
p.addr=s.paddr and
s.username != 'SYS'

--위 쿼리문의 결과가 있다면 락이 걸린 세션이 있다는것이므로 아래의 쿼리문으로 세션을 죽인다
ALTER SYSTEM KILL SESSION '11,39061'

/**************************************************************************************/

출처 : http://cocoroworld.com/blog/root/entry/오라클-락lock

/oracle>ps -ef |grep ora_ | sort
  oracle 3035324       1   2 09:17:01      -  1:56 ora_p000_SID 
  oracle 3162554       1   0   Aug 09      - 79:05 ora_mman_SID
  oracle 3235916       1   2 09:17:01      -  1:58 ora_p003_SID 
  oracle 3260664       1   0 09:17:01      -  0:55 ora_p007_SID 
  oracle 3322148       1   6 09:17:01      -  1:57 ora_p002_SID 
  oracle 3363190       1   1 09:17:01      -  1:55 ora_p001_SID 
  oracle 3523008       1   0 09:17:01      -  0:53 ora_p006_SID 
  oracle 3789048       1   0 09:17:01      -  0:56 ora_p005_SID 
  oracle 4227120 4100588   0 09:25:29  pts/5  0:00 grep ora_
  oracle 4345864       1   0   Aug 09      - 11:48 ora_arc0_SID 
  oracle 4370548       1   3   Sep 25      - 65:44 ora_j000_SID
  oracle 4382828       1   0 09:17:01      -  0:55 ora_p004_SID 
  oracle 4538568       1   0   Aug 09      -  0:06 ora_s000_SID 
  oracle 4575314       1 111   Aug 09      - 11929:31 ora_pmon_SID 
  oracle 4640950       1   0 09:10:51      -  0:00 ora_j003_SID 
  oracle 4657256       1   0   Aug 09      - 130:00 ora_mmnl_SID 
  oracle 4747466       1   0   Aug 09      - 41:08 ora_mmon_SID 
  oracle 4833430       1   0   Aug 09      - 12:44 ora_cjq0_SID 
  oracle 4862174       1   0   Aug 09      -  0:11 ora_reco_SID
  oracle 4890774       1   0   Aug 09      - 44:39 ora_smon_SID 
  oracle 4902992       1   0   Aug 09      - 45:36 ora_ckpt_SID 
  oracle 4931766       1   3   Aug 09      - 1322:01 ora_lgwr_SID 
  oracle 4939910       1   0   Aug 09      - 74:27 ora_dbw3_SID 
  oracle 4985182       1   0 09:05:51      -  0:01 ora_j002_SID 
  oracle 5050588       1   1   Aug 09      - 75:52 ora_dbw2_SIDA
  oracle 5083328       1   0   Aug 09      -  3:16 ora_psp0_SID 
  oracle 5157280       1   0   Aug 09      -  0:03 ora_d000_SID 
  oracle 5374404       1   0   Aug 09      - 13:39 ora_arc1_SID 
  oracle 5423472       1   0   Aug 09      - 78:26 ora_dbw0_SID 
  oracle 5431770       1   0   Aug 09      - 76:49 ora_dbw1_SID
오라클에 이런 게 있다는 걸 몰랐었다. 사실 모르는 게 많지만...
몇주째 고생하는 개발자에게 이걸 알려줬다면, 마이그레이션 작업이 훨씬 금방 끝났었을 텐데...
못도와준게 아쉽다. 그리고 역시 비싼 디비는 뭐가 다르긴 다르다.

파티션은 아직은 잘 모르지만, 키를 가지고 대용량의 테이블을 내부적으로 나눠서 빠른 처리를 하도록 돕는 기능이다. 개수가 많은 것보다는 개수가 적은 것이 쿼리가 훨씬 빠르기 때문이다.

참고 사이트
간략 설명
http://www.devarticles.com/c/a/Oracle/Partitioning-in-Oracle/1/

more..


조금 보기 좋은 설명
http://www.orafaq.com/node/55

잘 정리해 놓은 것
http://niflheim.tistory.com/tag/oracle%20partition

more..


샘플?
http://asktom.oracle.com/pls/asktom/f?p=100:11:1619565279119772::::P11_QUESTION_ID:4636779130376

오라클 도움말
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c12parti.htm

문법 설명(발췌)
http://www.ss64.com/ora/table_a_part.html

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

오라클 테이블 락 ( Table lock )  (0) 2010.10.04
오라클 백그라운드 프로세서  (0) 2010.09.28
계층형 쿼리 (CONNECT BY)  (0) 2010.07.14
오라클 클라이언트 가 토드에서 안될때. ㅋ  (0) 2010.06.29
update 방법들  (0) 2010.06.16

+ Recent posts