2009-02-10 6 views
17

Die meisten Tabellen (wenn nicht alle) haben ein "Blob" -Feld. Eine der Tabellen, in der die Protokolle der Aktion des Benutzers gespeichert sind, ist jetzt auf 8 GB (etwa 5 Millionen Datensätze) angewachsen.Verständnis Lob Segmente (SYS_LOB) in Oracle?

Und unser DBA hat gesehen, dass dieses Schema jetzt den Raum exponentiell verzehrt. Wir untersuchten ein wenig und fanden heraus, dass es eine der Tabellen mit (SYS_LOB) gibt, die ungefähr 116 GB einer Datenbank mit 140 GB benötigt.

Unsere DBA hat uns gesagt, dass diese Tabelle auf die Tabelle bezieht, die die Protokolle der Benutzeraktionen speichern (das 8 GB ist)

Weiß jemand, was diese SYS_LOB Tabellen tun? Ist der tatsächliche Blob in der von uns erstellten Tabelle OR ORACLE gespeichert, speichert dieser Blob diesen in einer anderen Tabelle (wenn ja, dann wäre SYS_LOB diese Tabelle)?

Antwort

38

Es gibt keine Tabelle SYS_LOB in der Oracle-Datenbank (zumindest gibt es keine solche Tabelle, die Teil einer grundlegenden Datenbankinstallation ist. Es gibt eine Tabelle DBA_LOBS, die Informationen über alle LOB-Spalten in der Datenbank anzeigt, aber es speichert nicht tatsächlich jedes LOB-Daten, nur Metadaten. die tatsächlichen LOB-Segmente in der Datenbank vom System generierten Namen haben, dass die Form SYS_LOB nehmen Kennung $$.

Meine Vermutung ist, dass Ihr DBA ein Segment namens identifiziert SYS_LOBBezeichner $$ das verbraucht 116 GB Speicherplatz.Nimmt man an, dass das korrekt ist, können Sie herausfinden, welche Spalte welcher Tabelle das ist Die LOB-Spalte entspricht der Verwendung der Tabelle DBA_LOBS, d. H.

SELECT owner, table_name, column_name 
    FROM dba_lobs 
WHERE segment_name = 'SYS_LOB<<identifier>>$$' 
+2

Dies ist aufschlussreich, danke. Dies sollte die akzeptierte Antwort sein. –

Verwandte Themen