Announcement

Collapse
No announcement yet.

Speicherplatz frei geben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Speicherplatz frei geben

    Hallo,

    blöde Frage:
    Habe etliche Tabellen in der DB gelöscht wie krieg ich jetzt den entsprechenden Festplattenplatz wieder frei?
    Muss ich da die kmpl. Datenbank reorganisieren?

    danke
    christoph

  • #2
    Du sprichst hier von Festplattenplatz.
    Dieser kann nur freigegeben werden indem du entweder ein RESIZE der jeweiligen Datenfiles machst. Das wird aber fehlschlagen da ein downsizing von Datafiles nur bis zur HWM funktioniert. Dh. war der Platz einmal allokiert, kann man ihn nicht mehr RESIZEN.

    Dir bleibt danach nur ein MOVE der restlichen vorhandenen Tabellen in einen anderen Tablespace.
    Danach kannst du den anderen Tablespace löschen.

    Grüße morlogg

    Comment


    • #3
      Originally posted by Alfons Wiesmeier View Post
      Hallo,

      blöde Frage:
      Habe etliche Tabellen in der DB gelöscht wie krieg ich jetzt den entsprechenden Festplattenplatz wieder frei?
      Muss ich da die kmpl. Datenbank reorganisieren?

      danke
      christoph
      Hallo,

      Du kannst die Tablespace (resp die Datafiles shrinken. Dabei gibt es ein paar Einschränkungen :

      - Du kannst nur max. bis zur Highwatermark shrinken
      - Wieviel du komprimieren kannst, musst du vorgängig feststellen . Ich habe dir ein Script (Danke an Tom Kyte) , welches dies macht :
      SPOOL doshrink.sql
      set verify off
      column file_name format a50 word_wrapped
      column smallest format 999,990 heading "Smallest|Size|Poss."
      column currsize format 999,990 heading "Current|Size"
      column savings format 999,990 heading "Poss.|Savings"
      break on report
      compute sum of savings on report

      column value new_val blksize
      select value from v$parameter where name = 'db_block_size'
      /
      select file_name,
      ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
      ceil( blocks*&&blksize/1024/1024) currsize,
      ceil( blocks*&&blksize/1024/1024) -
      ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
      from dba_data_files a,
      ( select file_id, max(block_id+blocks-1) hwm
      from dba_extents
      group by file_id ) b
      where a.file_id = b.file_id(+)
      /

      column cmd format a75 word_wrapped

      select 'alter database datafile '''||file_name||''' resize ' ||
      ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd
      from dba_data_files a,
      ( select file_id, max(block_id+blocks-1) hwm
      from dba_extents
      group by file_id ) b
      where a.file_id = b.file_id(+)
      and ceil( blocks*&&blksize/1024/1024) -
      ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
      /
      spool off
      - Der eigentliche Shrinkbefehl lautet nun:

      Code:
      alter database datafile '/data/oracle/dbf/system/THLTST9/par_ow1.dbf' resize xxx m;
      Praktischerweise erzeugt das obenerwähnte Script gleich alle SQL im Spoolfile für die betreffende Instanz --> :-)


      Gruss

      Comment


      • #4
        super...muchas gracias...

        Comment

        Working...
        X