Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка ORA-00020: maximum number of processes exceeded в Oracle DB

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Ошибка ORA-00020: maximum number of processes (string) exceeded при попытке любого подключения.
  • Серверные процессы ОС типа oracle<ORACLE_SID> (LOCAL=NO) заполняют таблицу процессов ОС.
  • Слушатель (TNS Listener) перестает принимать новые соединения и выдает TNS-12500 / TNS-12518.

1. Проверка текущей утилизации процессов

SELECT * FROM v$resource_limit WHERE resource_name = 'processes';

2. Анализ процессов на уровне операционной системы (Linux)

# Подсчет запущенных процессов Dedicated Server Oracle
ps -ef | grep "oracle$ORACLE_SID (LOCAL=NO)" | wc -l

3. Увеличение параметра PROCESSES в базе данных

-- Установка нового значения в SPFILE (требуется рестарт)
ALTER SYSTEM SET processes=1200 SCOPE=SPFILE;
-- Пересчет sessions (sessions = processes * 1.5 + 22)
ALTER SYSTEM SET sessions=1822 SCOPE=SPFILE;

4. Проверка системных лимитов Linux (nproc / nofile)

Убедитесь, что лимиты пользователя oracle в /etc/security/limits.d/99-oracle-limits.conf не ниже значений СУБД:

oracle   soft   nproc    65536
oracle   hard   nproc    65536
oracle   soft   nofile   65536
oracle   hard   nofile   65536

5. Аварийное освобождение процессов (Kill)

-- Завершение конкретного зависшего серверного процесса через SQL
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

-- Или на уровне ОС Linux при полной недоступности базы:
kill -9 <SPID>
Практический опыт инженера: При увеличении параметра `processes` пропорционально возрастает потребление оперативной памяти PGA. Убедитесь, что сервер располагает достаточным объемом свободной памяти: `1000 processes * ~4-8MB PGA per process = ~4-8GB RAM` дополнительно.

Частые вопросы (FAQ)

Почему параметр processes нельзя изменить динамически без перезагрузки?

Массив структур процессов Process Table выделяется в статической разделяемой памяти SGA (Shared Global Area) при старте экземпляра. Изменение его размера невозможно без пересоздания области памяти.

Что произойдет, если значение processes в Oracle превысит nproc в Linux?

Фоновые процессы ядра СУБД или новые Dedicated Server процессы начнут завершаться системной ошибкой ORA-27300/ORA-27301 (OS system call failed: fork: Resource temporarily unavailable).

В чем разница между ORA-00018 и ORA-00020?

ORA-00020 указывает на исчерпание физических процессов ядра ОС и фоновых потоков СУБД. ORA-00018 указывает на исчерпание логических сессий внутри СУБД (один процесс может содержать несколько сессий при определенных архитектурах).

Как предотвратить зависание брошенных клиентских процессов?

Включите функцию Dead Connection Detection (DCD), прописав параметр SQLNET.EXPIRE_TIME = 10 в файле sqlnet.ora на сервере базы данных.