Ошибка ORA-01950: no privileges on tablespace — настройка квот в Oracle
- При создании таблиц, индексов или выполнении
INSERTпользователь получает ошибкуORA-01950: no privileges on tablespace 'TABLESPACE_NAME'. - Пользователь имеет системные привилегии
CREATE TABLEили рольRESOURCE, но не может сохранять данные. - Приложение 1С или ETL-пакет не может инициализировать служебные объекты схемы.
1. Проверка текущих квот пользователя
SELECT tablespace_name, bytes/1024/1024 AS mb_used, max_bytes/1024/1024 AS max_mb
FROM dba_ts_quotas
WHERE username = 'APP_USER';2. Назначение неограниченной квоты на табличное пространство
ALTER USER app_user QUOTA UNLIMITED ON users;3. Назначение фиксированной квоты (альтернатива)
ALTER USER app_user QUOTA 50G ON data_tbs;4. Назначение привилегии UNLIMITED TABLESPACE (Осторожно)
Предоставляет неограниченную квоту на абсолютно все табличные пространства в БД:
GRANT UNLIMITED TABLESPACE TO app_user; Частые вопросы (FAQ)
Почему роли RESOURCE больше недостаточно в Oracle 12c/19c?
Начиная с Oracle 11g Release 2, привилегия UNLIMITED TABLESPACE была исключена из роли RESOURCE в целях повышения безопасности. Теперь квоту необходимо выдавать явно.
Теряются ли данные пользователя при установке квоты в 0?
Нет, существующие данные сохраняются, но любые попытки добавить новые строки или расширить сегменты будут блокироваться ошибкой ORA-01536 / ORA-01950.
Нужна ли квота на временное табличное пространство (TEMP)?
Нет, на Temporary Tablespace квоты пользователей не распространяются, так как они выделяются динамически для сортировок.
Как проверить, на какие tablespace у пользователя есть права создания объектов?
Проверьте представление DBA_TS_QUOTAS, а также системные привилегии в DBA_SYS_PRIVS на наличие 'UNLIMITED TABLESPACE'.