Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Oracle] Database File verkleinern

Empfohlene Antworten

Veröffentlicht

Hi,

ich habe hier ein Problem mit einem dbf das mir etwas zu groß geworden ist, um genau zu sein ist es exakt 32 GB groß :-)

Ich möchte es wieder verkleinern erhalte aber jedes mal den Fehler:

ORA-03297: file contains used data beyond requested RESIZE value

Laut EM sind von diesen 32 GB gerade mal 8 GB belegt. Wie kann ich dieses Problem den lösen?

Grüße

Scratch

das liegt wohl daran, dass die sogenannte "high water mark" über der bei ALTER ... RESIZE angegeben grösse liegt. ein blick auf die dba_extents und dort die höchste block_id verrät über umwege die maximal einsparbare grösse.

ein beispiel zeigt z.b. http://www.oracleadvice.com/Tips/dfhwm.htm

alles was darunter liegt, müsste IMO exportiert, gedroppt und wieder neu eingespielt werden.

s'Amstel

nicht zwingend es kann auch sein das am ende des Datenfiles noch ein extent belegt ist auch wenn der größte teil des DBF-Files leer ist, verkleinern geht immer nur bis zum letzten verwendeten Extent.

Welche Oracle Version?

ab 9i könntest du die Objekte in dem Tablespace per "ALTER TABLE name MOVE neuer Tablespace name" in einen neuen TS umziehen und den zu großen alten hinterher löschen.

select für TS angaben

select nvl(b.tablespace_name,

                                     nvl(a.tablespace_name,'UNKNOWN')) "Tablespace",

                                     kbytes_alloc "Allocated MB",

                                     kbytes_alloc-nvl(kbytes_free,0) "Used MB",

                                     nvl(kbytes_free,0) "Free MB",

                                     ((kbytes_alloc-nvl(kbytes_free,0))/kbytes_alloc) "Used",

                                     data_files "Data Files"

                                from ( select sum(bytes)/1024/1024 Kbytes_free,

                                              max(bytes)/1024/1024 largest,

                                              tablespace_name

                                         from sys.dba_free_space

                                        group by tablespace_name ) a,

                                     ( select sum(bytes)/1024/1024 Kbytes_alloc,

                                              tablespace_name,

                                              count(*) data_files

                                         from sys.dba_data_files

                                        group by tablespace_name )b

                               where a.tablespace_name (+) = b.tablespace_name

                               order by 1

Ab Version 10 folgende Möglichkeit:

du kannst alle objekte die in dem Tablespace liegen

shrinken.

Alter ..... shrink space [cascade];

damit rückt der Speicherplatz der Tabellen zusammen und sie rücken wohl auch wieder hintereinander und du kannst dann das file resizen.

Bevor du das machst musst du aber rowmovement anstellen... (und darauf hoffen das in deinen Applikationen sauber gearbeitet wird und keine Schweinereien mit rowids gemacht werden. Die können sich nämlich ändern)....

(alter table ... enable row movement;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.