none
SQL Server 2012 Probleme RRS feed

  • Frage

  • Hallo,

    ich habe einen SQL Server 2012 Standard. Dort ist eine Instanz mit mehreren Datenbanken vorhanden. Nun wollte ich die Dateinamen ändern und habe wohl ein wenig Mist gebaut.

    Inzwischen habe ich eine .mdf und 3 .ldf.

    Die .ldf Dateien bekomme ich nicht mehr entfernt. Die Datenbank ist online.

    Wenn ich versuche die eine Datei zu entfernen, dann erhalte ich folgende Meldung:

    TITEL: Microsoft SQL Server Management Studio
    ------------------------------
    
    Fehler bei Löschen für LogFile 'MeinName_Log'.  (Microsoft.SqlServer.Smo)
    
    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Löschen+LogFile&LinkId=20476
    
    ------------------------------
    ZUSÄTZLICHE INFORMATIONEN:
    
    Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)
    
    ------------------------------
    
    Mindestens eine in der Anweisung aufgeführte Datei wurde nicht gefunden oder konnte nicht initialisiert werden. (Microsoft SQL Server, Fehler: 5009)
    
    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=5009&LinkId=20476
    
    ------------------------------
    SCHALTFLÄCHEN:
    
    OK
    ------------------------------
    

    Bei der anderen Datei erhalte ich folgende Meldung:

    TITEL: Microsoft SQL Server Management Studio
    ------------------------------
    
    Fehler bei Löschen für LogFile 'MeinName_Log1'.  (Microsoft.SqlServer.Smo)
    
    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Löschen+LogFile&LinkId=20476
    
    ------------------------------
    ZUSÄTZLICHE INFORMATIONEN:
    
    Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)
    
    ------------------------------
    
    Das Datei-Objekt 'MeinName_Log1' kann nicht entfernt werden, da es nicht leer ist. (Microsoft SQL Server, Fehler: 5042)
    
    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=5042&LinkId=20476
    
    ------------------------------
    SCHALTFLÄCHEN:
    
    OK
    ------------------------------
    

    Beide Einträge (logische Namen) sind unterschiedlich, verweisen jedoch auf den gleichen physikalischen Namen.

    Ich würde nun gerne diesen beiden unnötigen LOG Dateien entfernen (eine dritte, die bleiben soll, ist noch vorhanden) und anschließend einfach die Dateinamen verändern.

    Ich bin jedoch, wie man wahrscheinlich unschwer an meiner Vorgehensweise erkennen kann, nicht unbedingt ein SQL Profi.

    Jemand eine Idee wie ich das wieder hinbekomme?

    Samstag, 30. Mai 2015 10:26

Antworten

  • http://www.mssqltips.com/sqlservertip/1891/best-practice-for-renaming-a-sql-server-database/

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    • Als Antwort vorgeschlagen Benjamin.Hoch Sonntag, 31. Mai 2015 15:39
    • Als Antwort markiert SADFR Sonntag, 31. Mai 2015 17:25
    Sonntag, 31. Mai 2015 03:51

Alle Antworten

  • Zum Umbenennen der Dateinamen habe ich folgendes herausgefunden:

    GO
    ALTER DATABASE MeineDatenbank 
    MODIFY FILE (NAME =Dateiname, 
    FILENAME = 
    'C:\Program Files\Microsoft SQL Server\
    MSSQL10_50.MSSQLSERVER\MSSQL\DATA\neuerDateiname.mdf')
    
    GO
    
    ALTER DATABASE MeineDatenbank 
    MODIFY FILE (NAME = Dateiname_log, 
    FILENAME ='C:\Program Files\Microsoft SQL Server\
    MSSQL10_50.MSSQLSERVER\MSSQL\DATA\neuerDateiname.ldf')
    
    GO


    Bleibt nur noch das Problem mit den überflüssigen Dateien. Ich hoffe mir kann Jemand helfen.
    • Bearbeitet SADFR Samstag, 30. Mai 2015 10:59
    Samstag, 30. Mai 2015 10:59
  • Einen der beiden Einträge habe ich mit einer Sicherung und anschließender Widerherstellung wegbekommen.

    Nun habe ich nur noch nachfolgenden Fehler, wenn ich die letzte überflüssige Log Datei entfernen möchte:

    TITEL: Microsoft SQL Server Management Studio
    ------------------------------
    
    Fehler bei Löschen für LogFile 'MeinName_Log'.  (Microsoft.SqlServer.Smo)
    
    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Löschen+LogFile&LinkId=20476
    
    ------------------------------
    ZUSÄTZLICHE INFORMATIONEN:
    
    Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)
    
    ------------------------------
    
    Mindestens eine in der Anweisung aufgeführte Datei wurde nicht gefunden oder konnte nicht initialisiert werden. (Microsoft SQL Server, Fehler: 5009)
    
    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=5009&LinkId=20476
    
    ------------------------------
    SCHALTFLÄCHEN:
    
    OK
    ------------------------------

    Die Datei ist natürlich noch vorhanden, jedoch erhalte ich ständig diesen Fehler.

    Samstag, 30. Mai 2015 16:14
  • Hallo

    Führe mal bitte das folgende Skript aus und poste mal das Ergebnis um mal den aktuellen Stand der Datenbank zu sehen

    use master
    go 
    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');

    Um die ldf zu entfernen wäre folgender Befehl 

    USE [MeineDatenbank]
    GO
    ALTER DATABASE [MeineDatenbank]  REMOVE FILE [Dateiname_log]
    GO
    
    Wichtig ist dass es diese Datei auch im Filesystem geben muss. Notfalls einfach eine Datei erzeugen.

    Gruß Benjamin


    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,


    Samstag, 30. Mai 2015 16:40
  • Hallo,

    wenn ich den Befehl im Management Studio ausführe, dann läuft dieser fehlerfrei durch jedoch erhalte ich keine Ergebnisse.

    Unter Meldung steht: 0 Zeilen betroffen.

    Samstag, 30. Mai 2015 16:52
  • Hast du den Namen der Datenbank im Skipt ersetzt?

    use master
    go 
    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'MeineDatenbank');


    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Samstag, 30. Mai 2015 16:58
  • Ja.

    Ich habe das auch mal bei anderen Datenbanken probiert, die keine Probleme haben, jedoch erhalte ich dort ebenfalls keine Ergebnisse zurück.

    EDIT: ich habe die spitzen Klammern nicht weggenommen.

    Jetzt erhalte ich ein Ergebnis. Die Fehlerhafte LOG Datei erscheint jedoch nicht. Nur die mdf und ldf welche auch erscheinen sollen.

    • Bearbeitet SADFR Samstag, 30. Mai 2015 17:03
    Samstag, 30. Mai 2015 17:01
  • Wo wird denn die unnötige ldf Datei angezeigt?

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Samstag, 30. Mai 2015 17:16
  • Vom letzten Beitrag. Mein Fehler.

    EDIT: ich habe die spitzen Klammern nicht weggenommen.

    Jetzt erhalte ich ein Ergebnis. Die Fehlerhafte LOG Datei erscheint jedoch nicht. Nur die mdf und ldf welche auch erscheinen sollen.

    Samstag, 30. Mai 2015 17:16
  • Hi,

    Die Fehlerhafte LOG Datei erscheint jedoch nicht. Nur die mdf und ldf welche auch erscheinen sollen.

    und wo liegt dann das Problem? Dass Du eine (unnötige) .LDF Datei im Dateisystem hast? Falls ja, lösch die halt.

    Und in Zukunft bitte die Finger von solchen manuellen Spielereien lassen. Sowas sollte man nur machen, wenn man genau weiß, welche Auswirkungen das haben kann.


    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

    Samstag, 30. Mai 2015 17:27
    Moderator
  • Die Datei erscheint auch im Management Studio. Dort hätte ich sie gerne gelöscht. Wenn nur eine Datei im Verzeichnis liegen würde, dann hätte ich keine Probleme damit.

    Samstag, 30. Mai 2015 17:44
  • Wo wird denn die unnötige ldf Datei angezeigt?

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,


    Im Management Studio unter Eigenschaften der Datenbank / Dateien.
    Samstag, 30. Mai 2015 17:46
  • Sehr merkwürdig dass das SSMS hier andere Daten anzeigt als die T-SQL Abfragen.

    Persönlich würde ich hier eher dem Support von Microsoft das Problem schildern.

    Eine Möglichkeit wäre noch per TSQL die Datei neu erstellen und dann auch wieder so entfernen. (KEINE Garantie ob das funktioniert oder sogar mehr Schaden macht)


    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Samstag, 30. Mai 2015 18:03
  • Sehr merkwürdig dass das SSMS hier andere Daten anzeigt als die T-SQL Abfragen.

    Persönlich würde ich hier eher dem Support von Microsoft das Problem schildern.

    Eine Möglichkeit wäre noch per TSQL die Datei neu erstellen und dann auch wieder so entfernen. (KEINE Garantie ob das funktioniert oder sogar mehr Schaden macht)


    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Was mich wundert ist, dass die Datei ja nun mal für den Eintrag physikalisch vorhanden ist. Ich kann Sie auch einfach löschen oder umbenennen auf Dateiebene. In einem anderen Forum wurde empfohlen einen neuen Eintrag hinzuzufügen und die gleiche Datei zu verwenden. Das hat zu größeren Problemen geführt, die ich nur mit einem Restore beheben konnte.

    Wie würde denn dein Vorschlag aussehen? Mittlerweile würde ich beinahe alles versuchen.

    Ich finde es auch Schade, dass ich nicht einfach eine neue DB anlegen und die vorhandenen Dateien verwenden kann. Zu diesem Fehler findet man sehr viel, jedoch hat bislang nichts geholfen.

    Danke schon mal für deine Mühen.

    Samstag, 30. Mai 2015 18:09
  • Lösche die Datei im Dateisystem

    USE [master]
    GO
    ALTER DATABASE [Demo] ADD LOG FILE ( NAME = N'demo_log2', FILENAME = N'E:\Logs\demo_log2.ldf' , SIZE = 1024KB , FILEGROWTH = 1024KB )
    GO
    
    USE [Demo]
    GO
    ALTER DATABASE [Demo]  REMOVE FILE [demo_log2]
    GO

    Bei Name und Filename muss dann die gleichen Werte stehen wie sie jetzt angezeit werden und bei Demo die eigene Datenbank eintragen.

    Vorher unbediengt eine Vollsicherung durchführen.

    Es kann durchaus sein dass es mehr kapput macht.


    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    • Als Antwort vorgeschlagen Benjamin.Hoch Sonntag, 31. Mai 2015 15:40
    Samstag, 30. Mai 2015 18:19
  • Auf Dateiebene hat das funktioniert, jedoch habe ich nun im SSMS wieder 2 Einträge, die sich nicht entfernen lassen. Dort wurde der logische Name mit allen Parametern angelegt jedoch nicht entfernt. Dadurch das die Dateien mit dem SQL Befehl wieder entfernt wurden kann ich natürlich nicht die Einträge im SSMS entfernen, da die Dateien dazu fehlen. Kopiere ich eine Datei mit gleichen Namen in das Verzeichnis und versuche den Eintrag im SSMS wieder zu entfernen, dann erscheint wieder die Meldung, dass die Datei fehlt. Genau das gleiche Problem mit dem Eintrag, den ich versuche die ganze Zeit zu entfernen. Nun habe ich 2 davon. Ist aber kein Problem, da ich eine Sicherung vorher erstellt habe.
    Samstag, 30. Mai 2015 18:32
  • Nun funktioniert es. Nach deinem Vorschlag und einem erneutem Restore waren auf einmal wie von Zauberhand beide Einträge verschwunden.

    Ich würde nun gerne, das war mein Plan, die Dateien umbenennen.

    Wollte es wie folgt lösen:

    1. DB offline stellen

    2. Dateinamen ändern (auf Dateiebene)

    3. Folgendes Script ausführen

    GO
    ALTER DATABASE AuditTest 
    MODIFY FILE (NAME =AuditTest, 
    FILENAME = 
    'C:\Program Files\Microsoft SQL Server\
    MSSQL10_50.MSSQLSERVER\MSSQL\DATA\RenameAudit.mdf')
    
    GO
    
    ALTER DATABASE AuditTest 
    MODIFY FILE (NAME = AuditTest_log, 
    FILENAME ='C:\Program Files\Microsoft SQL Server\
    MSSQL10_50.MSSQLSERVER\MSSQL\DATA\RenameAudit.ldf')
    
    GO

    4. DB wieder online schalten.

    Jedoch erhalte ich die Fehlermeldung: Modify File Die Datei 'AuditTest' ist nicht vorhanden. Selbst wenn ich die Dateien nicht vorher auf Dateiebene umbenenne.

    Samstag, 30. Mai 2015 18:49
  • Poste bitte nochmal das Ergebnis von dem Skript
    use master
    go 
    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AuditTest');



    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Samstag, 30. Mai 2015 19:24
  • Passt nun (fast) alles. Ich muss natürlich als Namen (MODIFY FILE (NAME =AuditTest, )
     den logischen Namen angeben. Anschließend konnte ich alle Namen anpassen.

    Einzige Problem was ich nun noch habe ist, dass bei einer DB noch der logische Name nicht stimmt. Ich habe es mit oben beschriebenen Script angepasst, jedoch wird mir eine Fehlermeldung ausgegeben, dass dieser Name schon verwendet wird und ich einen anderen angeben muss.

    Dieser Name wird eigentlich nirgends verwendet. Es handelt sich um die DB, die vorhin die ganze Zeit ärger gemacht hat. Bei allen anderen hat es nun mittlerweile bestens funktioniert.

    Mit der Abfrage

    use master
    go 
    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AuditTest');

    erhalte ich die Information der betroffenen DB, dass die besagte Datei tatsächlich noch den Namen trägt, den ich gern geändert hätte. Es handelt sich hier um den logischen Namen der Log Datei. Der physikalische Name passt nur der logische Name ist noch der Alte. Will ich nur den logischen Namen ändern, dann gibt's die Fehlermeldung.

    Samstag, 30. Mai 2015 20:06
  • dann lass den logischen Namen einfach

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Sonntag, 31. Mai 2015 03:41
  • http://www.mssqltips.com/sqlservertip/1891/best-practice-for-renaming-a-sql-server-database/

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    • Als Antwort vorgeschlagen Benjamin.Hoch Sonntag, 31. Mai 2015 15:39
    • Als Antwort markiert SADFR Sonntag, 31. Mai 2015 17:25
    Sonntag, 31. Mai 2015 03:51
  • dann lass den logischen Namen einfach

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    OK.

    Vielen Dank für deine Geduld.


    Thema erledigt.
    • Bearbeitet SADFR Sonntag, 31. Mai 2015 06:47
    Sonntag, 31. Mai 2015 06:46
  • dann bitte die Frage als beantworte markieren

    Benjamin Hoch MCSA: Microsoft Certified Solutions Associate - SQL Server 2012, MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,

    Sonntag, 31. Mai 2015 15:39