Ошибка ORA-27101: shared memory realm does not exist — решение проблемы
- При попытке подключения клиент получает связку ошибок:
ORA-01034: ORACLE not availableиORA-27101: shared memory realm does not exist. - Экземпляр СУБД выключен или находится в процессе падения.
- Переменная окружения
ORACLE_SIDуказана с ошибкой в регистре символов (case-sensitive в Linux).
1. Проверка регистра переменной ORACLE_SID в Linux
В Linux имя инстанса чувствительно к регистру букв (например, db1 и DB1 — разные сущности):
echo $ORACLE_SID
ps -ef | grep pmon2. Запуск экземпляра базы данных
Если процесс PMON отсутствует, подключитесь как SYSDBA и запустите инстанс:
export ORACLE_SID=DB1
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
sqlplus / as sysdba
SQL> STARTUP;3. Проверка параметров ядра Linux для разделяемой памяти (IPC)
В /etc/sysctl.d/99-oracle-shm.conf:
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096sysctl --system4. Проверка прав на бинарник oracle
chmod 6751 $ORACLE_HOME/bin/oracle Частые вопросы (FAQ)
Что означает термин 'shared memory realm' в Oracle?
Это сегмент разделяемой памяти System V IPC или POSIX Shared Memory, выделенный ядром ОС под структуры System Global Area (SGA) конкретного экземпляра Oracle.
Почему ORA-27101 возникает, если база запущена?
Пользователь подключился с другим значением ORACLE_HOME или ORACLE_SID. Клиент пытается подключиться к сегменту памяти с другим хэш-ключом IPC, которого нет в системе.
Как посмотреть существующие сегменты разделяемой памяти в ОС?
Выполните команду ipcs -m или ipcs -u в терминале Linux.
Зачем нужны права 6751 (SUID) на файл bin/oracle?
Бит SUID необходим, чтобы обычные пользовательские процессы могли переключаться в контекст пользователя oracle и подключаться к общим сегментам памяти SGA.