2011-05-13 29 views
9

Estoy trabajando en una aplicación web en la que debo advertir al usuario que se están quedando sin espacio en el espacio de tablas del usuario de db dado. La aplicación no conoce las credenciales del usuario del sistema de db, por lo que no puedo consultar vistas como dba_users, dba_free_space..etc.Cómo obtener espacio disponible en tablespace para un usuario (Oracle)

Mi pregunta es, ¿hay alguna manera en Oracle para que un usuario descubra cuánto espacio le queda en su tablespace?

Gracias!

Respuesta

17

Perdona mi ignorancia sobre el tema, porque creía sólo vistas disponibles en el almacenamiento de datos fueron DBA_FREE_SPACE etc ..

me di cuenta de que para el usuario que ha iniciado, hay user_free_space .. vistas para ellos. La versión modificada de la consulta mencionada here sería la respuesta a mi pregunta.

de consulta es la siguiente: (Conseguir el espacio libre en la default_tablespace 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

+0

Gracias, no lo sabía. Sabía sobre user_tables y vistas similares, pero no sabía sobre eso. – redcayuga

2

crear un paquete almacenado como un usuario que tiene los privilegios necesarios. Puede que tenga que crear un nuevo usuario. Otorgue 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 de DBA, pero deben codificarse cuidadosamente para evitar el acceso a información "excesiva". Es posible que desee escribir un segundo paquete en la cuenta de un usuario sin privilegios para encapsular la lógica.

+0

Gracias, creo que encontré otra resolución. – Emrah

1

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

  1. Recibe un error de "falta de espacio" a pesar de que los espacios de tabla en los que tienen privilegios, incluido el espacio de tabla predeterminado, tienen mucho espacio. Esto podría suceder cuando se insertan en una tabla que pertenece a un usuario diferente que se encuentra en un espacio de tablas en el que su usuario no tiene cuotas. En este caso, su usuario probablemente no tenga acceso a las vistas requeridas para determinar si hay espacio libre o no,
  2. Poder continuar insertando datos aunque no haya 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.

Así que, a menos que tenga un caso bastante simple, debe 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 ver el espacio libre desde un punto de vista holístico de la base de datos.

Cuestiones relacionadas