Как получить доступное место в табличном пространстве для пользователя (Oracle)

StackOverflow https://stackoverflow.com/questions/5994324

  •  13-11-2019
  •  | 
  •  

Вопрос

Я работаю над веб-приложением, где мне нужно предупредить пользователя, что у них выходит из места в данном табличном пространстве пользователя DB. Приложение не знает учетных данных пользователей системы БД, поэтому я не могу запросить виды, такие как dba_users, dba_free_space..etc.

Мой вопрос в том, есть ли путь в Oracle для пользователя, чтобы узнать, сколько места осталось в их табличном пространстве?

Спасибо!

Это было полезно?

Решение

Прости мое невежество по этому вопросу, потому что я верил только взгляды, доступные на хранилище данных были dba_free_space и т. Д. ..

Я понял, что для зарегистрированного пользователя есть user_free_space .. Виды для них. Модифицированная версия запроса упомянута Здесь будет ответом на мой вопрос. .

Запрос выглядит следующим образом: (Получение пространства, оставленного на по умолчанию_tableesce пространство зарегистрированного пользователя)

SELECT
  ts.tablespace_name,
  TO_CHAR(SUM(NVL(fs.bytes,0))/1024/1024, '99,999,990.99') AS MB_FREE
FROM
  user_free_space fs,
  user_tablespaces ts,
  user_users us
WHERE
  fs.tablespace_name(+)   = ts.tablespace_name
AND ts.tablespace_name(+) = us.default_tablespace
GROUP BY
  ts.tablespace_name;
.

Это вернет свободное место в MB

Другие советы

Создайте сохраненный пакет в качестве пользователя, имеющего необходимые привилегии.Возможно, вам придется создать новый пользователь.Грант выполнить на пакете любому пользователю, который его нуждается в этом.Пакеты должны иметь все процедуры и функции, необходимые для доступа к представлениям DBA, но должны тщательно закодироваться, чтобы избежать доступа к «слишком много».Вы можете написать второй пакет в учетной записи невилегированного пользователя для инкапсуляции логики.

Это потенциально очень сложный, так как для пользователя вполне возможно:

  1. Получите ошибку «вне пространства», даже если табличные пространства, на которых у них есть привилегии, включая их табличное пространство по умолчанию, имеют много места.Это может произойти, когда они вставляют в таблицу, которая принадлежит другому пользователю, который находится в табличном пространстве, на котором у вашего пользователя нет квоты.В этом случае у вашего пользователя, вероятно, не имеет доступа к мнениям, необходимым для определения того, есть ли свободное пространство или нет,
  2. сможет продолжать вставлять данные, даже если на табличных пространствах нет свободного места, на котором они имеют квоту - они могут даже не иметь квоты на табличные пространства по умолчанию.

    Поэтому, если у вас нет довольно простых случаев, вы действительно должны быть очень осведомлены о том, как пользователь взаимодействует с базой данных на гораздо более глубоком уровне, и посмотрите на свободное место с более целостной точки зрения базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top