Neuer Server neues Glück – Blog Umzug ist vollzogen

Nachdem es lange Zeit "sehr" still rund um meinen Blog war, möchte ich den gerade vollzogenen Umzug meines Blog auf einen neuen Server auch dazu nutzen wieder regelmäßig zu bloggen.

Mit dem Umzug auf den neuen Server habe ich auch gleich das Zertifikat Thema aktualisiert.

Ab sofort setze ich hier im Blog ein Zertifikat von Letsencrypt ein.

SQL Transaktionsprotokoll verkleinern (sichern) – SQL 2005 – SQL 2008

Bereits vor 6 Jahren (wie die Zeit vergeht) hatte ich in einem Artikel „SQL 2000 Transaktionsprotokoll verkleinern“ beschrieben wie man ein zu groß gewordenes Transaktionsprotokoll verkleinern kann.

Da die neuere Version SQL 2008 nicht mehr über die Option WITH TRUNCATE_ONLY verfügt, funktioniert die beschrieben Methode nicht mehr.

Nachfolgend möchte ich daher eine alternative Method vorstellen, welche den gleichen  gewünschten Effekt hat.

Das verkleinern des Transaktionsprotokolls.

Damit die Verkleinerung des Transaktionprotokolls nicht zu problemen bei einer eventuellen Rücksicherung führt, würde ich vor dem verkleinern unbedingt eine Sicherung der Datenbank und des Transaktionsprotokolls durchführen. Denn nur die Sicherung des Transaktionsprotokolls ermöglicht auch das spätere verkleinern.

Hier also nun der Transakt SQL Code zur Speicherung der DB und des Logs mit anschließendem Verkleiner der Transaktionsprotokoll Datei.

USE pubs
BACKUP DATABASE pubs TO DISK='C:\SqlDataBackup\pubs.bak' WITH INIT
BACKUP LOG pubs_log TO DISK='C:\SqlDataBackup\pubs_log.bak' WITH INIT
DBCC SHRINKFILE(pubs_Log, 10)
GO

Am besten kann man das in einer Batch Datei (Kommando Stapeldatei) einbauen und z. B. regelmäßig als Tast auf dem Rechner laufen lassen.
Wer das regelmäßig ausführen möchte kann das auch in eine Batch Datei packen und von der Kommandozeile ausführen. Was übrigens auch dann als Task ausgeführt werden kann.

@ECHO OFF
set SQL_UTIL_HOME="%ProgramFiles%\Microsoft SQL Server\100\Tools\Binn\osql"
rem Tragen Sie in der nachfolgenden Zeile den Namen des SQL Server ein z.B. (localhost)
set SQL_SERVERNAME=localhost
rem Tragen Sie in der nachfolgenden Zeile den Namen der zu sichernden Datenbank ein
set SQL_DBNAME=pubs
set SQL_LOGNAME=pubs_log
rem Tragen sie den Namen inkl. Pfad der Backup Datei ein
set SQL_BACKUP_FILE='C:\SqlBackup\pubs.BAK'
set SQL_LOG_FILE='C:\SqlBackup\pubs_log.BAK'
@ECHO ON
@ECHO Datenbank sichern
%SQL_UTIL_HOME% -S%SQL_SERVERNAME% -E -n -Q "BACKUP DATABASE %SQL_DBNAME% TO DISK = %SQL_BACKUP_FILE% WITH INIT;"
@ECHO Protokolldatei sichern
%SQL_UTIL_HOME% -S%SQL_SERVERNAME% -E -n -Q "BACKUP LOG %SQL_DBNAME% TO DISK = %SQL_LOG_FILE% WITH INIT;"
@ECHO Protokolldatei verkleinern
%SQL_UTIL_HOME% -S%SQL_SERVERNAME% -E -n -d%SQL_DBNAME%  -Q "DBCC SHRINKFILE(%SQL_LOGNAME%, 10)"

Wenn man nun noch ein Backup Programm wie Cobian Backup verwendet um die erzeugten Datenbank Backup Dateien auf einen FTP Server zu sichern, hat man eine kostenlose Lösung zur Sicherung der SQL Datenbank.

Ich denke, ich werde bald man in einem neuen Beitrag beschreiben, wie man Dedizierte WEB Server, die man bei einem Hoster stehen hat, mit Hilfe von Batch Dateien und Cobian Backup WEB Seiten inkl. Datenbanken ganz einfach und kostenlos sichern kann.

Microsoft SQL Server Management Studio – Spaltenüberschriften fehlen beim kopieren der Abfrageergebnisse

Wer kennt das nicht, mal schnell eine Abfrage auf eine SQL Datenbank mit dem Microsoft SQL Server Management Studio gemacht, Ergebnis der Abfrage markiert und dann mit Copy / Paste das Abfrageergebnis einfach in Excel eingefügt.

Soweit geht das auch ohne Probleme. Störend dabei ist nur, dass die Spaltenüberschriften (Spaltenheader) nicht mit kopiert werden und man diese wenn man sie benötigt manuell übertragen muss.

Wenn man das Ergebnis mit Copy / Paste als Text in einen Texteditor einfügt, sind die Spaltenheader übrigens vorhanden.

Das kann aber auch in Excel so sein.

Das Microsoft SQL Server Management Studio besitzt einen Optionsschalter mit dem man dieses Verhalten steuern kann.

Der Optionsschalter befindet sich wie nachfolgend dargestellt unter Extras –> Optionen

image

Man muss einfach nur das Häkchen bei der Option:

Spaltenheader beim kopieren oder Speichern der Ergebnisse einschließen.

setzen und schon wird auch der Spaltenheader kopiert.

Übrigens kann man das Verhalten beim einfügen in einen Texteditor genau so steuern, nur da ist die Default Einstellung eben; das Häkchen ist gesetzt (siehe Abbildung).

image

Attachment von eingehenden Emails automatisch speichern (Exchange Server)

Durch den Einsatz des nachfolgenden Skripts im Agent des Exchange Server kann man die Attachment’s einer Email automatisch in einem lokalen Verzeichnis speichern.

Um ein überschreiben der Dateien zu vermeiden wird ein temporärer Dateiname gebildet.

Um das Skript ausführen zu können muss in jedem Fall ein Exchange Server betrieben werden.

Hier nun das Skript:

<SCRIPT language=VBScript RunAt="Server">

'------------------------------------------------------------------------------
'FILE DESCRIPTION: Exchange Server Event Script
'------------------------------------------------------------------------------

OptionExplicit

'------------------------------------------------------------------------------
' Global Variables
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
' Event Handlers
'------------------------------------------------------------------------------

' DESCRIPTION: This event is fired when a new message is added to the folder
PublicSub Folder_OnMessageCreated
Dim objSession
Dim objItem
Dim objAttachment
dim i
dim atName

Set objSession = EventDetails.Session

Set objItem = objSession.GetMessage(EventDetails.MessageID, Null)

If objItem.Type ="IPM.Note"or objItem.Type ="IPM.Post"Then
If objItem.Attachments.Count > 0 then
for i = 1 to objItem.Attachments.Count
Set objAttachment = objItem.Attachments.Item(i)
atName ="C:\Attachment\Inbox\" & GetTempName("C:\Attachment\Inbox\")
ifNot FileExist(atName) then
objAttachment.WriteToFile(atName)
else
objAttachment.WriteToFile(atName & "neu")
EndIf
next
endif
EndIf

Set objAttachment =nothing
Set objSession =Nothing
Set objItem =Nothing

EndSub

--------------------------------------------------------------------------------

' DESCRIPTION: This event is fired when a message in the folder is changed
PublicSub Message_OnChange
EndSub

--------------------------------------------------------------------------------

' DESCRIPTION: This event is fired when a message is deleted from the folder
PublicSub Folder_OnMessageDeleted
EndSub

--------------------------------------------------------------------------------

' DESCRIPTION: This event is fired when the timer on the folder expires
PublicSub Folder_OnTimer
EndSub

--------------------------------------------------------------------------------

Function FileExist(filespec)
Dim fso, msg
Dim bRet
Set fso =CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(filespec)) Then
bRet =true
Else
bRet =false
EndIf
FileExist = bRet
EndFunction

--------------------------------------------------------------------------------

Function GetTempName(path)
Dim fso, fsp
Dim bRet
Set fso =CreateObject("Scripting.FileSystemObject")
fsp = fso.GetTempName
GetTempName = fsp
EndFunction

</SCRIPT>

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.