Cómo obtener espacio disponible en el espacio de tabla para un usuario (Oracle)

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

  •  13-11-2019
  •  | 
  •  

Pregunta

Estoy trabajando en una aplicación web donde necesito advertir al usuario que se están quedando sin espacio en el espacio de tablas de usuario dado de DB. La aplicación no conoce las credenciales del usuario del sistema de DB, por lo que no puedo consultar las vistas como DBA_USERS, DBA_FREE_SPACE..ETC.

Mi pregunta es, ¿hay una manera en Oracle para que un usuario averigüe la cantidad de espacio que queda para ellos en su espacio de tablas?

¡Gracias!

¿Fue útil?

Solución

Perdona mi ignorancia sobre el tema, porque creí solo las vistas disponibles en el almacenamiento de datos fueron DBA_FREE_SPACE, etc.

Me di cuenta de que para el usuario registrado, hay usuarios_free_space .. Vistas para ellos. Versión modificada de la consulta mencionada aquí sería la respuesta a mi pregunta.

La consulta es la siguiente: (que queda el espacio en la memoria predeterminada del usuario registrado)

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;

volvería espacio libre en MB

Otros consejos

Crear un paquete almacenado como usuario que tiene los privilegios necesarios.Es posible que tenga que crear un nuevo usuario.GRANT Ejecutar en el paquete a cualquier usuario que lo necesite.Los paquetes deben tener todos los procedimientos y funciones necesarios para acceder a las vistas del DBA, pero deben codificarse cuidadosamente para evitar acceder a la información "demasiado".Es posible que desee escribir un segundo paquete en la cuenta de un usuario no privilegiado para encapsular la lógica.

Esto es potencialmente muy complejo, ya que es bastante posible que el usuario:

  1. Reciba un error "fuera del espacio" a pesar de que los espacios de tabla en los que tienen privilegios, incluido su espacio de tabla predeterminado, tienen un montón de espacio.Esto podría suceder cuando se insertan en una tabla que es propiedad de un usuario diferente que está en un espacio de tabla que su usuario no tiene cuota.En este caso, su usuario probablemente no tiene acceso a las vistas requeridas para determinar si hay espacio libre o no,
  2. Poder continuar insertando datos aunque no hay espacio libre en los espacios de tabla en los que tienen una cuota, es posible que ni siquiera tengan una cuota en sus espacios de tabla predeterminados.

    A menos que tenga un caso bastante simple, realmente tenga que ser muy consciente de la forma en que el usuario interactúa con la base de datos en un nivel mucho más profundo, y mire el espacio libre de un punto de vista holístico más de la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top