지난번 소개드린 INBOUND_CONNECT_TIMEOUT은 DB에 접속하기까지 걸리는 시간에 대한 Timeout 설정방법이라면, 오늘 소개하는 내용은 DB에 이미 접속한 사용자에 대한 Timeout 설정하는 방법입니다.
INBOUND_CONNECT_TIMEOUT에 대한 내용이 궁금하시다면 아래 내용을 읽어보세요.
INBOUND_CONNECT_TIMEOUT 설정 :: 대끄블 (tistory.com)
INBOUND_CONNECT_TIMEOUT 설정
INBOUND_CONNECT_TIMEOUT 설정은 악의적인 연결 요청으로 데이터베이스 서버를 Flooding시키는 등의 상황을 방지하기 위해 도입되었습니다. 어떠한 이유든지 TIMEOUT 설정값 이내에 인증 프로세스를 마치
eorrmqmf.tistory.com
DB에는 다양한 목적을 가진 여러 사용자가 접속하여 DB를 사용하기때문에 DBA는 각 사용자에게 필요한 것이 무엇인지 파악하여 적절하게 DB를 관리하여야 합니다.
이러한 관리 방법중에 하나로 DB에 접속한 사용자에게 TIMEOUT을 설정하여 DB에 필요한만큼만 머물 수 있도록 한계를 설정하는 것입니다.
그럼 이제 해당 파라미터를 설정하는 방법을 설명 드리겠습니다.
Create Profile
[test:/home/oracle] sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 15:38:46 2022
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
SQL> CREATE PROFILE APP_USER1 LIMIT
2 PASSWORD_LOCK_TIME 1/24
3 PASSWORD_GRACE_TIME 7
4 CONNECT_TIME 4320
5 IDLE_TIME 60;
Profile created.
SQL> SELECT * FROM DBA_PROFILES
2 WHERE PROFILE='APP_USER1';
PROFILE RESOURCE_NAME RESOURCE LIMIT COM INH IMP
----------- -------------------------- -------- ---------- --- --- ---
APP_USER1 COMPOSITE_LIMIT KERNEL DEFAULT NO NO NO
APP_USER1 SESSIONS_PER_USER KERNEL DEFAULT NO NO NO
APP_USER1 CPU_PER_SESSION KERNEL DEFAULT NO NO NO
APP_USER1 CPU_PER_CALL KERNEL DEFAULT NO NO NO
APP_USER1 LOGICAL_READS_PER_SESSION KERNEL DEFAULT NO NO NO
APP_USER1 LOGICAL_READS_PER_CALL KERNEL DEFAULT NO NO NO
APP_USER1 IDLE_TIME KERNEL 60 NO NO NO
APP_USER1 CONNECT_TIME KERNEL 4320 NO NO NO
APP_USER1 PRIVATE_SGA KERNEL DEFAULT NO NO NO
APP_USER1 FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_LIFE_TIME PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_REUSE_TIME PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_REUSE_MAX PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_LOCK_TIME PASSWORD .0416 NO NO NO
APP_USER1 PASSWORD_GRACE_TIME PASSWORD 7 NO NO NO
APP_USER1 INACTIVE_ACCOUNT_TIME PASSWORD DEFAULT NO NO NO
17 rows selected.
Create User
SQL> CREATE USER APPUSER1
2 IDENTIFIED BY APPUSER1
3 PROFILE APP_USER1;
User created.
SQL> SELECT USERNAME, ACCOUNT_STATUS, CREATED, PROFILE
2 FROM DBA_USERS
3 WHERE USERNAME='APPUSER1';
USERNAME ACCOUNT_STATUS CREATED PROFILE
---------- ---------------- ------------ -----------
APPUSER1 OPEN 30-SEP-22 APP_USER1
CONNECT_TIME/IDLE_TIME 변경
--test를 위해 Timeout을 재설정하였습니다. CONNECT_TIME 5분/IDLE_TIME 3분
SQL> ALTER PROFILE APP_USER1 LIMIT
2 CONNECT_TIME 5
3 IDLE_TIME 3;
Profile altered.
SQL> SELECT * FROM DBA_PROFILES
2 WHERE PROFILE='APP_USER1';
PROFILE RESOURCE_NAME RESOURCE LIMIT COM INH IMP
---------- -------------------------- -------- ---------- --- --- ---
APP_USER1 COMPOSITE_LIMIT KERNEL DEFAULT NO NO NO
APP_USER1 SESSIONS_PER_USER KERNEL DEFAULT NO NO NO
APP_USER1 CPU_PER_SESSION KERNEL DEFAULT NO NO NO
APP_USER1 CPU_PER_CALL KERNEL DEFAULT NO NO NO
APP_USER1 LOGICAL_READS_PER_SESSION KERNEL DEFAULT NO NO NO
APP_USER1 LOGICAL_READS_PER_CALL KERNEL DEFAULT NO NO NO
APP_USER1 IDLE_TIME KERNEL 3 NO NO NO
APP_USER1 CONNECT_TIME KERNEL 5 NO NO NO
APP_USER1 PRIVATE_SGA KERNEL DEFAULT NO NO NO
APP_USER1 FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_LIFE_TIME PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_REUSE_TIME PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_REUSE_MAX PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT NO NO NO
APP_USER1 PASSWORD_LOCK_TIME PASSWORD .0416 NO NO NO
APP_USER1 PASSWORD_GRACE_TIME PASSWORD 7 NO NO NO
APP_USER1 INACTIVE_ACCOUNT_TIME PASSWORD DEFAULT NO NO NO
17 rows selected.
Timeout 확인
--아무 작업도 하지 않는 경우, IDLE_TIME으로 설정한 3분 뒤 세션이 끊기는지 확인
[test:/home/oracle] sqlplus appuser1@test
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 16:06:47 2022
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
SQL> /*아무것도 하지 않고 대기*/
SQL>
SQL> select count(*) from test;
select count(*) from test
*
ERROR at line 1:
ORA-02396: exceeded maximum idle time, please connect again
--이때 alert.log
[test:/oracle/app/oracle/diag/rdbms/test/test/trace] tailf alert_test.log
...
2022-09-30T16:10:03.428025+09:00
KILL SESSION for sid=(214, 42062):
Reason = profile limit idle_time
Mode = KILL SOFT -/-/NO_REPLAY
Requestor = PMON (orapid = 2, ospid = 371, inst = 1)
Owner = Process: USER (orapid = 38, ospid = 2892)
Result = ORA-0
--CONNECT_TIME으로 설정한 5분 뒤 세션이 끊기는지 확인
[test:/home/oracle] sqlplus appuser1@test
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 16:12:52 2022
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Enter password:
Last Successful login time: Fri Sep 30 2022 16:06:55 +09:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
--IDLE_TIME 설정으로 인해 세션이 끊기지 않기위해 간단한 SELECT문 조회
SQL> SELECT COUNT(*) FROM DBA_OBJECTS;
COUNT(*)
----------
65771
...
--5분 경과
SQL> SELECT COUNT(*) FROM DBA_OBJECTS;
select count(*) from dba_objects
*
ERROR at line 1:
ORA-01012: not logged on
Process ID: 32224
Session ID: 208 Serial number: 43026
-> CONNECT_TIME의 경우, alert.log에는 아무것도 기록되지 않았다.
Profile을 통해 Timeout뿐만 아니라, 다양한 설정을 할 수 있으므로 아래 URL을 통해 다른 파라미터도 확인해보면 좋을 것 같습니다.
참조:
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-PROFILE.html#GUID-ABC7AE4D-64A8-4EA9-857D-BEF7300B64C3
SQL Language Reference
docs.oracle.com
'OracleDB > Test' 카테고리의 다른 글
ASM Diskgroup, Disk 확인하는 SQL (0) | 2025.04.17 |
---|---|
Archivelog File 정리 스크립트 (1) | 2024.09.06 |
ORA-19909: datafile XX belongs to an orphan incarnation 발생 (0) | 2024.07.05 |
Pfile/Spfile 차이 (0) | 2023.01.19 |
INBOUND_CONNECT_TIMEOUT 설정 (0) | 2023.01.10 |