Comment obtenir un espace disponible dans l'espace de table pour un utilisateur (Oracle)

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

  •  13-11-2019
  •  | 
  •  

Question

Je travaille sur une application Web où je dois avertir l'utilisateur qu'ils manquent d'espace dans l'espace de table de l'utilisateur DB donné. L'application ne connaît pas les informations d'identification de l'utilisateur du système de la base de données, donc je ne peux pas interroger des vues comme dba_users, dba_free_space..etc.

Ma question est: y a-t-il un moyen dans Oracle pour un utilisateur de savoir combien d'espace lui reste-t-il dans son espace de table?

Merci!

Était-ce utile?

La solution

Pardonnez mon ignorance sur le sujet, car je pensais que seules les vues disponibles sur le stockage de données étaient dba_free_space, etc.

J'ai réalisé que pour l'utilisateur enregistré, il existe des vues user_free_space .. pour eux. Version modifiée de la requête mentionnée ici serait la réponse ma question.

La requête est la suivante: (Il est laissé l'espace sur l'espace de défaut_tables de l'utilisateur enregistré)

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;

Il retournerait l'espace libre en MB

Autres conseils

Créez un package stocké en tant qu'utilisateur qui a les privilèges nécessaires. Vous devrez peut-être créer un nouvel utilisateur. Accordez l'exécution du package à tout utilisateur qui en a besoin. Les packages doivent avoir toutes les procédures et fonctions nécessaires pour accéder aux vues DBA, mais doivent être codées avec soin pour éviter d'accéder à des informations "trop". Vous voudrez peut-être écrire un deuxième package dans le compte d'un utilisateur non priviaire pour encapsuler la logique.

C'est potentiellement très complexe, car il est tout à fait possible pour l'utilisateur de:

  1. Recevez une erreur "hors de l'espace" même si les espaces de table sur lesquels ils ont des privilèges, y compris leur espace de table par défaut, ont beaucoup d'espace. Cela pourrait se produire lorsqu'ils s'insérer dans une table qui appartient à un autre utilisateur qui se trouve sur un espace de table sur lequel votre utilisateur n'a pas de quota. Dans ce cas, votre utilisateur n'a probablement pas accès aux vues requises pour déterminer s'il y a un espace libre ou non,
  2. Être capable de continuer à insérer des données même s'il n'y a pas d'espace libre sur les espaces de table sur lesquels ils ont un quota - ils pourraient même ne pas avoir de quota sur leurs espaces de table par défaut.

Donc, à moins que vous ayez un cas assez simple, vous devez vraiment être très conscient de la façon dont l'utilisateur interagit avec la base de données à un niveau beaucoup plus profond, et regardez l'espace libre à partir d'un point de vue de base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top