SQL Datensicherung per BATCH Datei

Immer wieder taucht die Frage auf, wie man auf einfache Art und Weise eine Datensicherung einer SQL Datenbank anlegen kann.

Auch wenn Heute viele gar nicht mehr genau wissen wozu man die Eingabeaufforderung, Batch Dateien und Kommandozeilen (das sind Programme die keine GUI haben) Programme verwendet ist die Zeit dieser Tools noch lange nicht zu Ende, wie auch dieser Beitrag wieder einmal beweist.

Und eines dieser Kommandozeilen Programme, das osql tool des SQL Server, ist auch die Basis dieses Artikel.

Das osql tool des Microsoft SQL Server (sowohl im SQL Server 2000, der MSDE und auch in allen SQL 2005 Versionen enthalten) bietet die Möglichkeit Transact SQL Befehle (T-SQL) direkt von der Kommandozeile auszuführen.

Nutzen wir doch diese Möglichkeit und erstellen wir uns eine Batch Datei (Datei die auf Kommandozeilen Ebene ausgeführt werden kann), mit der wir eine Datenbank eines SQL Server’s sichern können.

Ich Denke nicht dass man jede Zeile der Batch Datei erklären muss, deshalb hier nun den Inhalt der Batch Datei:

@ECHO OFF
rem Für die Verwendung mit SQL Server 2000 oder der MSDE in der nachfolgenden Zeile  das rem am Anfang entfernen
rem set SQL_UTIL_HOME="%ProgramFiles%\Microsoft SQL Server\80\Tools\Binn\osql"
rem Für die Verwendung mit SQL Server 2005 oder SQL Server 2005 Express in der nachfolgenden Zeile  das rem am Anfang entfernen
set SQL_UTIL_HOME="%ProgramFiles%\Microsoft SQL Server\90\Tools\Binn\osql"
rem Tragen Sie in der nachfolgenden Zeile den Namen des SQL Server ein z.B. (localhost)
set SQL_SERVERNAME=HP-DN01\SQL2005
rem Tragen Sie in der nachfolgenden Zeile den Namen der zu sichernden Datenbank ein
set SQL_DBNAME=FASC
rem Tragen sie den Namen inkl. Pfad der Backup Datei ein
set SQL_BACKUP_FILE='C:\temp\fasc.bak'
@ECHO ON
%SQL_UTIL_HOME% -E -S%SQL_SERVERNAME% -n -Q "BACKUP DATABASE %SQL_DBNAME% TO DISK = %SQL_BACKUP_FILE% WITH INIT"
Hier kann man die Datei herunterladen Backup.Bat.
Einfach herunterladen, das ZIP File entpacken und dann die Backu.BAT Datei öffnen und die darin gesetzten Environment Variablen auf die eigenen Bedürfnisse anpassen.

T-SQL Replace

Vermutlich ist das für die meisten nichts neues, aber ich habe nun schon einige male nach dem enrsprechenden Befehl gesucht und dabei Zeit vergeudet, aus diesem Grund mach ich nun für mich selbst diesen Blog Eintrag.


Hintergrund:


In einer Datenbank (MS-SQL) sind in einem Tabellenfeld Werte die gegen andere Werte ausgetauscht werden müssen.


Ein simples Update wie das hier:

UPDATE [TABLENAME] SET [FIELDNAME] = NEWVALUE

Nun ist es aber so, dass ich nur einen Teil des Inhaltes ändern muss, im speziellen Fall wird in der Spalte der Tabelle Informationen über den Speicherort einer Datei vorgehalten.


Hier ein Beispielinhalt:


C:\Program Files\hMailServer\Data\ihrportal\AB\{AB88191E-9A94-4C08-90B8-597A4B2FA3E2}.eml


Nun befinden sich die Daten aber nicht mehr auf dem Laufwerk C: sondern die Daten befinden sich nun auf Laufwerk D: und dort in dem Verzeichnis hMailServer\Data also auf D:\hMailServer\Data. Somit muss der Inhalt des Feldes wie folgt geändert werden:


D:\hMailServer\Data\ihrportal\AB\{AB88191E-9A94-4C08-90B8-597A4B2FA3E2}.eml


Dies muss nun bei tausenden von Einträgen durchgeführt werden.


Lösung:


Um nun die Daten in der Spalte messagefilename der Tabelle hm_messages zu ändern habe ich folgedes Query ausgeführt:

update hm_messages
set messagefilename = REPLACE(messagefilename,‘C:\Program Files\hMailServer\Data’,‘D:\hMailServer\Data’)

So und nun hoffe ich das ich das nächste mal wenn ich so etwas machen möchte, daran denke dass ich dazu einen Blog Eintrag verfasst habe.

SQL 2005 Express Edition – Beschränkungen

Immer wieder taucht die Frage auf, welchen Beschränkungen die Express Edition des SQL 2005 Server aus dem Hause Microsoft unterliegen.

Vorab gesagt: Es sind weniger Beschränkungen als es der Vorgänger die MSDE hatte.
Und vor allem wird die Express Edition nicht auf eine Anzahl gleichzeitiger Threads beschränkt wie das bei der MSDE der Fall war.

Übrigens, wenn ich hier von der Express Edition spreche, dann ist dies nicht ganz korrekt, da es zwei Versionen gibt.

Aber nun zu den Beschränkungen:

  • Anzahl unterstützter CPU’s = 1
  • Maximale Speichernutzung (RAM) des SQL Server’s = 1 GB
  • Keine direkte 64 BIT Betriebssystem Unterstützung (nur über WOW)
  • Maximale Datenbankgröße (ohne Log File) = 4GB
  • Mergereplikation und Transaktionsreplikation = nur Abonnenten
  • Volltextsuche (nur in der Express Edition with Advanced Services)

Einen kompletten Vergleich der einzelnen Editionen findet man wenn man dem nachfolgenden Link folgt:

http://www.microsoft.com/germany/sql/editionen/default.mspx

SQL Server 2005 Express Editionen

Microsoft SQL Server Management Studio Express

Alle, die neben der Leistungsfähigen Express Version des SQL Server 2005, auch das entsprechende Verwaltungstool zum verwalten von SQL Server 2005 Express Edition und SQL Server 2005 Express Edition with Advanced Services, benötigen, sollten sich das ebenfalls kostenlose SSMSE (Microsoft SQL Server Management Studio Express) von Microsoft besorgen.

Das Tool gibt es in einer 32 und einer 64 BIT Version.

Doppelte Datensätze finden – SQL

Hier ein einfaches SQL Skript um doppelte Datensätze in einer Tabelle zu finden und anzeigen zu lassen.

Im Beispiel gehen wir von folgenden Informationen aus:

Die Tabelle in der Datenbank heißt: Products

Das Referenzfeld in der Tabelle heißt: productcode

SELECT productcodes, COUNT(productcode) AS NumOccurrences
FROM Products
GROUP BY productcode
HAVING ( COUNT(productcode) > 1 )

Angezeigt bekommt man alle productcodes der Datensätze die mehr als einmal in der Tabelle vorhanden sind.

MSDE Authentifizierung nachträglich ändern

Bei der Standard Installation von MSDE wird wenn nicht extra per Parameter angegeben die MSDE Instanz mit Integrierter Sicherheit installiert.

Wenn man nun aber gemischte Sicherheit benötigt gibt es eigentlich nur die Möglichkeit die MSED zu deinstallieren und noch einmal mit dem Parameter SECURITYMODE=SQL zu installieren.

Es gibt aber eine Möglichkeit die MSDE Konfiguration nachträglich per Änderung der Registry zu ändern.

WARNUNG: Bevor Sie die Registry ändern sollten Sie unbedingt vorher eine Datensicherung der Registry anlegen.

Bevor Sie die Änderungen in der Registry vornhemen sollten Sie die SQL Dienste beenden.

Um den Registry Editor zu öffnen gehen Sie wie folgt vor.

Im Startmenu wählen Sie ausführen und geben dort regedit ein und bestätigen die Eingabe mit OK .

Im Registry Editor suchen wir nun den Schlüssel:

Wenn Sie eine Standard Instantz erstellt haben:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSqlserver\MSSqlServer\

Wenn Sie eine benannte Instanz erstellt haben:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Name\MSSQLServer\

Im rechten Fenster suchen Sie nun den Schlüsseleintrag LoginMode und ändern den Wert von 1 auf 2 ab.

Nun starten Sie die SQL Dienste neu.um die neue Konfiguration zu übernehmen

SQL 2000 Transaktionsprotokoll verkleinern

Das Transaktionsprotokoll wird größer und größer, die Festplatte droht zu platzen, was kann man tun ?.

Wenn trotz Datensicherung das Transaktionsprotokoll nicht abgeschnitten und verkleinert wird. (Voraussetzung dafür ist allerdings, dass auch in den Einstellungen automatisch verkleinern aktiviert ist), kann man mit dem nachfolgenden SQL Script das Transaktionsprotokoll der SQL 2000 Datenbank manuell verkleinern.

BACKUP LOG pubs WITH TRUNCATE_ONLY
GO
DBCC SHRINKFILE(pubs_log, 10)
GO

Im Beispiel wurde die Datenbank pubs verwendet, ersetzen Sie einfach pubs gegen Ihre Datenbank und führen diese Befehle im SQL Query Analyzer aus.