Fragensteller
Index aus SQL Server Express 2005 (Datenbankdatei) löschen

Frage
-
Hi zusammen, ich möchte gerne eine Indexdatei aus einer Datenbank löschen.
Wähle ich diese Datei aus (im SSMMS) und sage entfernen bekomme ich folgenden Fehler
Das Datei-Objekt ..._index kann nicht entfernt werden, da es nicht leer ist (MS SQL Server Fehler 5042)
Habe jetzt beim Googlen folgendes gefunden
erst
DBCC SHRINKFILE('MEINEDB', EMPTYFILE)
und denn noch mal versuchen die Datei zu droppen. Nur bekomme ich hier folgenden Fehler
Meldung 2556, Ebene 16, Status 1, Zeile 1
In der Dateigruppe ist nicht genügend Speicherplatz vorhanden, um den emptyfile-Vorgang abzuschließ
Die reine Datenbank ist aber nur 900 MB gross die Index Datei 177 MB auf der Festplatte sind noch 500 GB frei.
Im SSMMS / SQL Datenbank habe ich unbeschränkt Vergrößerbar drin stehen.
Könnt ihr mir weiterhelfen?
Alle Antworten
-
Hallo Thomas,
hast Du sämtliche Indizes gelöscht?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hmm, gibt es dafür ein "einfaches" Script.
Also, eigentlich reicht es aus, das EmptyFile per DBCC SHRINKFILE auszuführen, damit die vorhandenen Datenseiten in die andere(n) Datei(en) der Dateigruppe übertragen werden. Anschließend ein Remove File (nicht DROP) und das war es:
DBCC SHRINKFILE('LogischerDateiName', EMPTYFILE); GO ALTER DATABASE [Datenbank] REMOVE FILE [LogischerDateiName];
Wenn Du aber eine Fehlermeldung bekommst, dann wird schon eines von beiden zutreffen; entweder kein Platz auf der Platte oder die Datei in der Dateigruppe ist größenbeschränkt.Olaf Helper
Blog Xing -
Ja ich bekomme den Fehler ,
>Meldung 2556, Ebene 16, Status 1, Zeile 1In der Dateigruppe ist nicht gengend Speicherplatz vorhanden, um den emptyfile-Vorgang abzuschlieen.
Was meint die Fehlermeldung denn genau ? Also Speicherplatz ist eigentlich satt
Obwohl unter Eigenschaften der DB stehtGröße :1080 MB
verfügbarer Speicherplatz 765 MB
Auf der Festplatte sind aber >500 GB frei.Gruss
-
Hallo Thomas,
lässt sich leicht ausprobieren: DB mit 2 größenbeschränkten Datei je 50 MB anlegen, 100 MB Daten reinschaufeln und dann das EmptyFile ausführen
SET NOCOUNT ON; USE [master] GO CREATE DATABASE [TestEmpty] ON PRIMARY ( NAME = N'TestEmpty_File1', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\TestEmpty_File1.mdf' , SIZE = 3072KB , MAXSIZE = 51200KB , FILEGROWTH = 1024KB ), ( NAME = N'TestEmpty_File2', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\TestEmpty_File2.ndf' , SIZE = 3072KB , MAXSIZE = 51200KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'TestEmpty_log', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\TestEmpty_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO USE [TestEmpty] GO CREATE TABLE dbo.TestTable (ID int NOT NULL IDENTITY(1, 1) PRIMARY KEY CLUSTERED ,Daten nchar(4000)); GO -- 12.500 Datensätze = 100 MB einfügen INSERT INTO dbo.TestTable (Daten) VALUES (N'Hello World'); GO 12500 DBCC SHRINKFILE('TestEmpty_File2', EMPTYFILE);
Und siehe da, exakt der gleiche Fehler:
Olaf Helper
Blog Xing