-- Alert Log에 기록 남기기
SYS.DBMS_SYSTEM.KSDWRT(2,l_message);
1-write to trace file (Trace 파일에만 Message 기록)
2-write to alert log (Alert Log 파일에만 Message 기록)
3-write to both (Trace / Alert Log 파일 모두에 Message 기록)
-- 활용예(로그인 실패 로그)
create or replace trigger logon_fail_write_alertlog
AFTER SERVERERROR on database
declare
l_message varchar2(2000); -- 메시지 내용 저장
BEGIN
-- ORA-1017 : invalid username/password; logon denied
IF(IS_SERVERERROR(1017)) THEN
SELECT 'ORA-01017 Failed login attempt to the "'|| sys_context('USERENV','AUTHENTICATED_IDENTITY') ||'" schema'||' using ' ||
sys_context('USERENV','AUTHENTICATION_TYPE') ||' Authentication'||' at '||to_char(logon_time,'YYYY/MM/DD HH24:MI:SS') ||
' from ' ||osuser||'@'||machine||' ['||nvl(sys_context('USERENV','IP_ADDRESS'),'Unknown IP')||']' ||' via the "' ||program||'" program.'
INTO l_message
FROM SYS.V_$SESSION
WHERE SID = TO_NUMBER(SUBSTR(DBMS_SESSION.UNIQUE_SESSION_ID,1,4),'XXXX') AND SERIAL# = TO_NUMBER(SUBSTR(DBMS_SESSION.UNIQUE_SESSION_ID,5,4),'XXXX');
--write to alert log
SYS.DBMS_SYSTEM.KSDWRT(2,l_message);
-- ORA-28000 : the account is locked
elsif (IS_SERVERERROR(28000)) THEN
select 'ORA-28000 the account is locked "'|| sys_context('USERENV','AUTHENTICATED_IDENTITY') ||'" Schema '||' using ' ||
sys_context('USERENV','AUTHENTICATION_TYPE') ||' Authentication'||' at '||to_char(logon_time,'YYYY/MM/DD HH24:MI:SS') ||
' from ' ||osuser||'@'||machine||' ['||nvl(sys_context('USERENV','IP_ADDRESS'),'Unknown IP')||']' ||' via the "' ||program||'" program.'
INTO l_message
FROM SYS.V_$SESSION
WHERE SID = TO_NUMBER(SUBSTR(DBMS_SESSION.UNIQUE_SESSION_ID,1,4),'XXXX') AND SERIAL# = TO_NUMBER(SUBSTR(DBMS_SESSION.UNIQUE_SESSION_ID,5,4),'XXXX');
--write to alert log
SYS.DBMS_SYSTEM.KSDWRT(2,l_message);
END IF;
END;
/'Oracle > Admin 이슈' 카테고리의 다른 글
| sqlplus password version (0) | 2023.11.06 |
|---|---|
| sqlplus 특수문자 패스워드 로그인 (0) | 2023.06.02 |
| ASM 내 파일 복사 / 삭제 하기 (0) | 2023.06.02 |
| Sequence reset procedure. (0) | 2023.04.24 |
| DB 구성 체크사항 (16) | 2023.04.19 |