Pergunta

Estou trabalhando em um aplicativo da web onde preciso avisar o usuário que ele está ficando sem espaço no espaço de tabela do usuário do banco de dados.O aplicativo não conhece as credenciais do usuário do sistema do banco de dados, portanto não posso consultar visualizações como dba_users, dba_free_space..etc.

Minha pergunta é: existe uma maneira no Oracle de um usuário descobrir quanto espaço resta para ele em seu espaço de tabela?

Obrigado!

Foi útil?

Solução

Perdoe minha ignorância sobre o assunto, pois acreditava que apenas as visualizações disponíveis no armazenamento de dados eram dba_free_space etc.

Percebi que para o usuário logado, existem user_free_space..visualizações para eles.Versão modificada da consulta mencionada aqui seria a resposta à minha pergunta.

A consulta é a seguinte:(Obtendo o espaço restante no DEFAULT_TABLESPACE do usuário logado)

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;

Isso retornaria espaço livre em MB

Outras dicas

Crie um pacote armazenado como um usuário que tenha os privilégios necessários.Você pode ter que criar um novo usuário.Conceder execute no pacote para qualquer usuário que precise.Os pacotes precisam ter todos os procedimentos e funções necessárias para acessar as exibições do DBA, mas devem ser codificadas com cuidado para evitar acessar informações "demais".Você pode escrever um segundo pacote na conta de um usuário não privilegiado para encapsular a lógica.

Isso é potencialmente muito complexo, pois é bem possível para o usuário:

    .
  1. Receba um erro "fora do espaço", apesar de os espaços de tabela que eles têm privilégios, incluindo o espaço de tabela padrão, têm muito espaço.Isso pode acontecer quando eles inserem em uma tabela que é de propriedade de um usuário diferente, que está em um espaço de tabela que seu usuário não tem cota.Nesse caso, seu usuário provavelmente não tem acesso às visualizações necessárias para determinar se há espaço livre ou não,
  2. ser capaz de continuar inserindo dados mesmo que não haja espaço livre nos espaços de tabela em que eles têm uma cota - eles podem nem mesmo ter uma cota em seus tablespaces padrão.

    Então, a menos que você tenha um caso bastante simples, você realmente tem que estar muito consciente da maneira como o usuário interage com o banco de dados em um nível mais profundo, e olhar para o espaço livre de um ponto de vista mais holístico mais do banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top