Benutzer mit den meisten Antworten
SQL Server 2012 Probleme

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?
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
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
-
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. -
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,
- Bearbeitet Benjamin.Hoch Samstag, 30. Mai 2015 16:55
-
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,
-
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
-
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 -
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. -
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,
-
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.
-
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
-
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.
-
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.
-
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,
-
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. -
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
-
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