none
Index aus SQL Server Express 2005 (Datenbankdatei) löschen RRS feed

  • 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?

    Donnerstag, 17. Januar 2013 14:58

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

    Donnerstag, 17. Januar 2013 15:02
    Moderator
  • Öhm? Indexdatei? Man lernt ja nie aus, hast du mal einen Screenshot wo sich das im SSMS befindet?
    Donnerstag, 17. Januar 2013 15:04
  • Evtl. habe ich mich falsch ausgedrückt.
    Datenbankeigenschaften->Dateien->MeineDB_Index
    Dateigruppe INDEX
    Donnerstag, 17. Januar 2013 15:10
  • Hmm, gibt es dafür ein "einfaches" Script.
    Donnerstag, 17. Januar 2013 15:11
  • 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

    Donnerstag, 17. Januar 2013 17:30
  • Ja ich bekomme den Fehler ,
    >Meldung 2556, Ebene 16, Status 1, Zeile 1

    In 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 steht

    Größe :1080 MB

    verfügbarer Speicherplatz 765 MB
    Auf der Festplatte sind aber >500 GB frei.

    Gruss

    Freitag, 18. Januar 2013 07:51
  • 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

    Freitag, 18. Januar 2013 10:53