Domanda

Sto lavorando a un'applicazione Web in cui ho bisogno di avvisare l'utente che stanno esaurendo lo spazio nel tablespace utente DB utente DB. L'applicazione non conosce le credenziali dell'utente del sistema DB, quindi non posso interrogare viste come DBA_USERS, DBA_Free_Space..etc.

La mia domanda è, c'è un modo in Oracle per un utente per scoprire quanto spazio è lasciato per loro nel loro spazio tablespace?

Grazie!

È stato utile?

Soluzione

Perdona la mia ignoranza sull'argomento, perché ho creduto solo le viste disponibili sullo archivio dati c'erano dba_free_space ecc.

L'ho capito che per l'utente registrato, ci sono utenti_free_space .. viste per loro. Versione modificata della query menzionata qui sarebbe la risposta alla mia domanda. .

Query è il seguente: (Ottenere lo spazio a sinistra su Default_TableSpace dell'utente registrato)

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;
.

Ritornerebbe lo spazio libero in MB

Altri suggerimenti

Creare un pacchetto memorizzato come utente che ha i privilegi necessari.Potrebbe essere necessario creare un nuovo utente.Grant Execute sul pacchetto a qualsiasi utente che ne ha bisogno.I pacchetti devono avere tutte le procedure e le funzioni necessarie per accedere alle viste DBA ma devono essere codificate con cura per evitare di accedere a "troppe" informazioni.Potresti voler scrivere un secondo pacchetto nell'account di un utente non privilegiato per incapsulare la logica.

Questo è potenzialmente molto complesso, poiché è abbastanza possibile per l'utente:

    .
  1. Ricevi un errore "fuori spazio" anche se gli spazi tables di cui hanno privilegi, incluso il loro spazio tablespazio predefinito, hanno un sacco di spazio.Questo potrebbe accadere quando si inseriscono in una tabella di proprietà di un utente diverso che è su un tablespace che il tuo utente non ha alcuna quota.In questo caso, il tuo utente probabilmente non ha accesso alle opinioni necessarie per determinare se c'è spazio libero o meno,
  2. Essere in grado di continuare ad inserire i dati anche se non vi è spazio libero sui tablespace su cui hanno una quota - potrebbero nemmeno avere una quota sui loro spazi predefiniti.

    Quindi, a meno che tu non abbia un caso piuttosto semplice che devi davvero essere molto consapevole del modo in cui l'utente interagisce con il database su un livello molto più profondo e guarda lo spazio libero da un altro punto di vista olistico di database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top