Amazon RDS Oracle DB 인스턴스의 ORA-00018 또는 ORA-00020 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2020년 2월 4일

Amazon Relational Database Service(Amazon RDS) Oracle DB 인스턴스에서 마스터 사용자 또는 DBA 사용자로 연결하려고 하는데 다음 오류 중 하나가 발생합니다.

  • ORA-00018 최대 세션 초과
  • ORA-00020 최대 프로세스 초과

이러한 오류를 해결하려면 어떻게 해야 하나요?

간략한 설명

이러한 오류는 예정된 크기 조정 작업 또는 많은 DB 연결을 야기하는 예정되지 않은 이벤트로 인해 발생할 수 있습니다. 이 경우 DB 인스턴스에 대해 많은 클라이언트 세션이 시작되고 다음 데이터베이스 제한 중 하나에 도달합니다.

  • PROCESSES – 허용되는 최대 사용자 프로세스 수입니다.
  • SESSIONS – 허용되는 최대 사용자 세션 수입니다.

계획된 확장 실행으로 인해 최대 연결에 도달한 경우, 애플리케이션의 새로운 확장을 수용하기 위해 SESSIONS, PROCESSES 또는 둘 모두를 늘려야 할 수도 있습니다. 이러한 두 파라미터는 동적으로 조정되지 않으므로 파라미터를 수정한 후 인스턴스를 재부팅하십시오.

예정되지 않은 이벤트로 인해 최대 연결 수에 도달한 경우 이벤트 원인을 파악하여 조치를 취하십시오. 예를 들어, 잠금 또는 차단 경합으로 인해 응답 시간이 증가할 때 애플리케이션이 데이터베이스에 과도할 수 있습니다. 이 경우 SESSIONS 또는 PROCESSES를 늘리면 최댓값을 다시 계산하기 전에 연결 수만 늘어나므로 경합으로 인한 문제가 악화될 수 있습니다. 따라서 Amazon RDS 모니터링 시스템이 로그인하지 못하거나, 상태 확인을 수행하지 못하거나, 재부팅과 같은 시정 조치를 취하지 못할 수 있습니다.

해결 방법

LICENSE_MAX_SESSIONS 사용

LICENSE_MAX_SESSIONS 파라미터는 허용되는 최대 동시 사용자 세션 수를 지정합니다. 이는 Oracle 백그라운드 프로세스 또는 DBA 역할을 가진 사용자(마스터 사용자 또는 RDSADMIN)와 같이 RESTRICTED SESSION 권한을 가진 사용자에게는 적용되지 않습니다. LICENSE_MAX_SESSIONS 제한을 SESSIONS 및 PROCESSES보다 낮은 값으로 설정하면 클라이언트 연결이 ORA-18 또는 ORA-20 오류 대신 ORA-00019 오류(최대 라이선스 수 초과)를 수신하도록 강제할 수 있습니다. ORA-00019 오류는 RESTRICTED SESSION 권한을 가진 사용자에게는 적용되지 않으므로 MASTER 사용자와 RDSADMIN 사용자는 DB 인스턴스에 로그인하고 관리 문제 해결 및 시정 조치를 수행할 수 있습니다. 또한 Amazon RDS 모니터링은 RDSADMIN을 사용하여 데이터베이스에 계속 연결함으로써 상태 확인을 수행할 수 있습니다.

여기에서 중요한 것은 LICENSE_MAX_SESSIONS는 원래 동시 세션 수를 기준으로 사용량을 제한하기 위한 것이라는 점입니다. Oracle은 더 이상 동시 세션 수를 기준으로 라이선스를 제공하지 않으므로 LICENSE_MAX_SESSIONS 초기화 파라미터는 더 이상 사용되지 않습니다. 하지만 최대 19c Oracle 버전까지는 파라미터를 계속 사용할 수 있습니다. 또한 애플리케이션 사용자에게 DBA 역할 또는 RESTRICTED SESSION 권한을 부여해서는 안 됩니다. 자세한 내용은 LICENSE_MAX_SESSIONS에 대한 Oracle 설명서를 참조하십시오.

LICENSE_MAX_SESSIONS는 동적 파라미터이기 때문에 RDS 인스턴스를 다시 시작하지 않고 설정할 수 있습니다. 자세한 내용은 DB 파라미터 그룹 작업(Working with DB parameter groups)을 참조하세요. SHARED 세션과 DEDICATED 세션 중 무엇을 사용하는지에 따라 다음 단계를 참조하세요.

DEDICATED 세션 사용

DEDICATED 세션을 사용하면 클라이언트 연결이 PROCESSES 파라미터(ORA-20) 제한을 초과할 수 있습니다. 클라이언트 연결이 한도를 초과할 경우 다음과 같이 LICENSE_MAX_SESSIONS 값을 PROCESSES 미만으로 설정합니다.

  • LICENSE_MAX_SESSIONS = 클라이언트 최대 연결 수만.
  • PROCESSES = LICENSE_MAX_SESSIONS + 모든 백그라운드 프로세스(병렬 쿼리, 마스터 사용자를 포함한 DBA 사용자, 버퍼 포함) 버퍼는 나중에 발생할 수 있는 예상치 못한 백그라운드 프로세스를 허용합니다. 현재 소유한 백그라운드 프로세스 수를 확인하려면 다음과 같은 쿼리를 실행합니다.
SQL> select count(*) from v$session where type= 'BACKGROUND';

참고: (1.5 * PROCESSES) + 22로 기본 설정된 SESSIONS면 충분합니다. 자세한 내용은 SESSIONS에 대한 Oracle 설명서를 참조하세요.

인스턴스에 수동으로 연결하여 SESSIONS를 확인하려면 다음과 같은 명령을 실행합니다.

SQL> select name, value from v$parameter where upper(name) in ('SESSIONS','PROCESSES','LICENSE_MAX_SESSIONS');
NAME   VALUE
------------------------------ ------------------------------
processes   84
sessions   148
license_max_sessions   0

SHARED 세션 사용

SHARED 세션을 사용하는 경우 클라이언트 연결이 SESSIONS 파라미터(ORA-0018) 제한을 초과할 수 있습니다. 클라이언트 연결이 한도를 초과할 경우 PROCESSES 파라미터 값을 더 높게 설정하십시오.

  • LICENSE_MAX_SESSIONS = 클라이언트 최대 연결 수만.
  • PROCESSES = 모든 백그라운드 프로세스(병렬 쿼리 및 마스터 사용자를 포함한 DBA 사용자 포함) 및 버퍼. 백그라운드 프로세스 수에 SHARED_SERVER 및 DISPATCHERS 설정을 포함해야 합니다.
  • SESSIONS = (1.5 * PROCESSES) + 22

SHARED 서버를 사용할 경우 최대 세션(ORA-18) 오류 대신 최대 프로세스(ORA-20) 오류가 표시될 경우 디스패처가 꽉 찼을 수 있습니다. 디스패처가 꽉 찼을 경우 연결이 DEDICATED로 설정됩니다. 이 경우, 공유에 더 많은 세션이 연결될 수 있도록 DISPATCHERS 수를 늘리십시오. SHARED_SERVERS 파라미터도 늘려야 할 수 있습니다. 자세한 내용은 Oracle 설명서를 참조하십시오.

SHARED 서버를 사용하고 있는지 DEDICATED 서버를 사용하고 있는지 잘 모를 경우, 다음과 같은 쿼리를 실행하여 어느 서버를 사용하고 있는지 확인할 수 있습니다.

SQL> select decode(server, 'NONE', 'SHARED', server) as SERVER, count(*)
from v$session group by decode(server, 'NONE', 'SHARED',server)

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?