DB 37

다른 유저의 private DB LINK 관리 (생성, 변경 등)

DB 마이그레이션 작업시 계정 암호를 몰라 private DB LINK를 생성하기 어려울 때가 있다.(DB LINK의 암호는 암호화값 그대로 dump 라도 뜰 수 있지만...) 이럴 때 아래와 같이 proxy 권한을 부여하여 작업이 가능하다.(물론 권한만 있다면 db link 뿐만 아니라 다른 object 도 작업 가능하다.) SQL> ALTER USER user_b GRANT CONNECT THROUGH user_a; ID: user_a[user_b] 로 접속시 user_a 암호를 입력하여 user_b 로 접속할수 있다. (proxy) SQL> CONN user_a[user_b] 권한 해제 시,SQL> ALTER USER user_b REVOKE CONNECT THROUGH user_a;

DB 2018.10.24

Oracle Logon History (session 조사)

DB 유관 시스템 파악을 위해 netstat 이나, 서버보안 솔루션, tcp 모니터링 등 여러 방법이 있을수 있는데,DB 자체적으로 로그인 트리거를 걸어 username 까지 확인하기 위한 방법입니다. -- 테이블 생성CREATE TABLE logon_history( USERNAME VARCHAR2(30 BYTE), HOST VARCHAR2(64 BYTE), IP VARCHAR2(40 BYTE), LOGIN_DT DATE); -- LOGON TRIGGER 생성CREATE OR REPLACE TRIGGER logon_history_trigger AFTER LOGON ON DATABASEDECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN INSERT INTO logon_histor..

DB 2017.10.31

Oracle DB 암호 만료(expired) 관련

-- 정책 확인select * from dba_profiles; -- 기본값을 unlimited 로 변경alter profile default limit failed_login_attempts unlimited;alter profile default limit password_life_time unlimited;alter profile default limit password_grace_time unlimited;alter profile default limit password_lock_time unlimited; -- 만약 계정이 expire 됐는데 암호를 모르고 다른 암호로 변경하기 어려운 경우, 동일 암호로 변경하여 open 상태로 만드는 스크립트 생성하여 실행SELECT 'ALTER USER '|..

DB 2017.07.12

loadjava oracle

java 함수를 oracle 에서 실행하고 싶을때 자주 필요하지는 않지만 유용한 기능(매번 까먹는...) -- 패키지 생성CREATE OR REPLACE PACKAGE 패키지명 ASFUNCTION 함수명(변수명 타입) RETURN 리턴타입AS LANGUAGE JAVANAME 'JAVA패키지.메서드(java.lang.String) return java.lang.String';END 패키지명; -- loadjava 명령loadjava -user 아이디/암호@서비스명 -schema 스키마명 -resolve -verbose 클래스.class -- 사용SELECT 스키마명.패키지명.함수명(val) FROM DUAL; [예시]CREATE OR REPLACE PACKAGE MyCrypto ASFUNCTION encr..

DB 2017.04.27

Oracle alert, Listener trace log 등을 SQL문으로 보기

-- 11gR2 이상select * from v$diag_alert_extwhere originating_timestamp > sysdate - 2order by indx desc -- 11gR2 이상 RAC 환경-- gv$ view 만 있는 것이 아니라 gv$ 함수도 있다. (undocumented 이므로 사용에 주의)select inst_id, originating_timestamp, message_textfrom TABLE(gv$(cursor(select inst_id, originating_timestamp, message_textfrom v$diag_alert_ext where originating_timestamp > (sysdate - 1)and message_text like '%ORA-%..

DB 2016.04.08

Oracle DDL 이력 관리 (DDL Trigger)

여기저기 정보 조합, 수정하여 현 시스템에 최종 적용한 것입니다.trigger 관련 에러 발생해도 DDL 문 실행은 되도록, 에러 무시 exception 처리하였습니다.혹시 모를 DDL 오류 발생시 alter trigger ddl_history_trigger disable; 처리하여 에러 수정 가능합니다. 또한 DBA role이 있어도 pl/sql 문 내부에서 실행시 개별 privilege 필요하므로,사전에 trigger 를 만드는 계정에 v_$session 에 대한 권한 부여해야 합니다. -- v_$session 조회권한 부여 (sys 권한)SQL> grant select on sys.v_$session to 트리거계정명 -- 이력을 저장할 테이블CREATE TABLE DDL_HISTORY( EXEC_..

DB 2016.03.25

Oracle default temp table 제거, 용량 축소

default temp tablespace 의 경우, online중에 datafile 삭제하거나 shrink 처리가 잘 안되어 아예 교체하는 식으로 처리할 수 있다. -- 1. temp 사용중인 세션 확인 후, 종료 처리select tu.tablespace, tu.username,s.sid, s.serial#,s.sql_id, s.prev_sql_id,s.status, s.osuser, s.process, s.machine, s.port,s.prev_exec_start, s.logon_time,s.last_call_et, -- 최종 호출후 대기시간 (초)'ALTER SYSTEM KILL SESSION ''' || s.sid || ',' || s.serial# || ''' IMMEDIATE;' SQL_TE..

DB 2016.03.24