Как получить доступное пространство в табличном пространстве для пользователя (Oracle) - PullRequest
9 голосов
/ 13 мая 2011

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

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

Спасибо!

Ответы [ 3 ]

18 голосов
/ 16 мая 2011

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

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

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

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;

Возвращается свободное место в МБ

.
2 голосов
/ 13 мая 2011

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

1 голос
/ 29 ноября 2012

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

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

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

...