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 파라미터 그룹 작업을 참조하십시오. 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_SERVERS 및 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)

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?