Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

ORA-00020 1С:Предприятие и СУБД

Ошибка 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 на сервере базы данных.

Полезные материалы
Рекомендуем