Der tägliche Wahnsinn
Chris
Dieser Benutzer hat keine Details eingegeben.
Webseite: http://heckelmann.info
Beiträge von Chris
YouTube XL
04. Jun
Endlich kann ich auf meinem 1900×1280 15,4″ Notebook-Display in einer Augenfreundlichen Version mir die lustigen Videos von Youtube ansehen. YouTube XL ist für den Fernseher gedacht, um Videos auf der XBOX oder PS3 mit einer ansehnlichen und leicht zu steuernden Oberfläche anzuzeigen.
Wer es selbst einmal ausprobieren will, klickt am besten gleich hier: YouTube XL.
Project Natal: Microsoft macht den Menschen zum Controller
03. Jun
Na wenn das mal keine schweißtreibende Angelegenheit wird
Project Natal: Microsoft und die Revolution im Wohnzimmer – Golem.de.
SQL Server Logins synchronisieren
03. Jun
Nachdem ich schon seit ein paar Wochen nichts geschrieben habe, wird es mal wieder Zeit.
Vor einigen Monaten haben wir auf der Arbeit unsere altes Cluster neu aufgesetzt, und den SQL Server auf neuer Hardware installiert. Nachdem wir massig SQL Logins und Windows Gruppen berechtigt hatten, stellte sich die Frage, wie wir diese Logins wieder auf den Datenbanken berechtigen können, ohne uns durch jede Datenbank zu klickern.
Um die Logins anzulegen hatte ich bereits ein Script zur Hand, jedoch mußten die neuen Logins (neue SID) mit den Datenbanken synchronisiert werden. Hier habe ich auf der SQLServerCenteral zwei kleine aber sehr gute Helferscripte gefunden, welche jedem DBA das Leben erleichtern.
Zunächst das erste Script, welches alle nicht synchronen Logins auf dem Server ausliest:
DECLARE @Collation varchar(100)
DECLARE @SQL VARCHAR(2000)
CREATE TABLE ##TempSync
(
DB_NME Varchar(50),
DBUserName varchar(50),
SysLoginName varchar(50)
)
SELECT @Collation = CONVERT(SYSNAME,DatabasePropertyEx('master','Collation'))
SET @SQL = 'USE [?]
SELECT ''?'' DB_NME,
A.name DBUserName,
B.loginname SysLoginName
FROM sysusers A
JOIN master.dbo.syslogins B
ON A.name Collate ' + @Collation + ' = B.Name
JOIN master.dbo.sysdatabases C
ON C.Name = ''?''
WHERE issqluser = 1
AND (A.sid IS NOT NULL
AND A.sid <> 0x0)
AND suser_sname(A.sid) IS NULL
AND (C.status & 32) =0 --loading
AND (C.status & 64) =0 --pre recovery
AND (C.status & 128) =0 --recovering
AND (C.status & 256) =0 --not recovered
AND (C.status & 512) =0 --offline
AND (C.status & 1024) =0 --read only
ORDER BY A.name'
INSERT into ##TempSync
EXEC sp_msforeachdb @SQL
SELECT * FROM ##TempSync
DROP TABLE ##TempSync
Und nun das Script, was alle Logins wieder synchronisiert
DECLARE @Collation VARCHAR (100)
DECLARE @SQL VARCHAR(2000)
SELECT @Collation =CONVERT(SYSNAME,DatabasePropertyEx('master','Collation'))
SET @SQL = 'USE [?]
DECLARE @DBUserName varchar(50)
DECLARE @SysLoginName varchar(50)
DECLARE SyncDBLogins CURSOR FOR
SELECT A.name DBUserName,
B.loginname SysLoginName
FROM sysusers A
JOIN master.dbo.syslogins B
ON A.name Collate ' + @Collation + ' = B.Name
JOIN master.dbo.sysdatabases C
ON C.Name = ''?''
WHERE issqluser = 1
AND (A.sid IS NOT NULL
AND A.sid <> 0x0)
AND suser_sname(A.sid) IS NULL
AND (C.status & 32) =0 --Loading
AND (C.status & 64) =0 --pre recovery
AND (C.status & 128) =0 --recovering
AND (C.status & 256) =0 --not recovered
AND (C.status & 512) =0 --offline
AND (C.status & 1024) =0 --read only
ORDER BY A.name
OPEN SyncDBLogins
FETCH NEXT FROM SyncDBLogins
INTO @DBUserName, @SysLoginName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_change_users_login ''update_one'', @DBUserName, @SysLoginName
FETCH NEXT FROM SyncDBLogins
INTO @DBUserName, @SysLoginName
END
CLOSE SyncDBLogins
DEALLOCATE SyncDBLogins
'
EXEC sp_msforeachdb @SQL
Orginal Artikel: http://go.xinox.net/52sceq
Logfile shrink Part II
01. Apr
Ich habe mein kleines Script zum shrinken der Logfiles aktualisiert. Der Logische Filename des Logfiles wird nun nicht hart angegeben ([DBNAME]_Log) sondern aus der sys.database_files gelesen.
Hier der aktualisierte Code:
USE [DBNAME] GO DECLARE @LDF NVARCHAR(255) SELECT @LDF=[name] FROM sys.database_files WHERE [type_desc]='LOG' DBCC SHRINKFILE(@LDF, 1) BACKUP LOG [DBNAME] WITH TRUNCATE_ONLY DBCC SHRINKFILE(@LDF, 1)
Excel Arbeitsmappenschutz entfernenMA
02. Feb
Hier ein kleines Stückchen VBA-Code, mit dessen Hilfe man eine Kennwort geschütze Arbeitsmappe “entsperren” kann.
Einfach mit Alt+F11 in den VBA-Editor wechseln, Code einfügen und ausführen.
Sub PasswordBreaker()
'Author unknown but submitted by brettdj of www.experts-exchange.com
'http://www.theofficeexperts.com/VBASamples/Excel02.htm
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
ActiveWorkbook.Sheets(1).Select
Range("a1").FormulaR1C1 = Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub
Thank God it’s Friday!
16. Jan
Und wieder einmal haben wir es geschafft, endlich Freitag! Ich wünsche allen Lesern ein schönes Wochenende!

SQLAdminToolset
Wenn ich so auf die Woche zurückblicke, ist das beste das eintreffen unserer Idera Lizenzen gewesen. Jetzt habe ich eine Version des SQL Admin Toolsets, welches ich jedem DBA nur empfehlen kann, da es für den Preis von 495 USD auch für kleinere Betriebe erschwinglich ist und eine menge Arbeit einen abnimmt.
Hier ein kleiner Auszug der Funktionen:
- Abfragen über mehrere SQL Server
- Clonen und Kopieren von Logins
- Datenbanken über Server kopieren
- Server inventarisieren
- Patchlevel auslesen
- u.v.m…
Ich will jetzt nicht weiter darauf eingehen, da der Feierabend langsam näher rückt, aber wer mag kann sich auf der Herstellerseite eine 14-Tage Testversion herunterladen und selbst ausgiebig testen.
Ausgabe von sp_help_job in Temptable speichern
15. Jan
Ich brauchte eine Übersicht von SQL Agent Jobs (Name, LastRunDate, Current Execution Status und LastRunOutcome), doch da die Job Hisorty auf 10 Tage auf diesem Server begrenzt ist, fällt der Ansatz über die Tabellen msdb.dbo.sysjobs und msdb.dbo.sysjobhistory aus (siehe Beispiel).
select distinct [name] as 'Job Name',
case [enabled] when 1 then 'Enabled' else 'Disabled' end as 'Enabled',
cast (ltrim(str(run_date))+' '+stuff(stuff(right('000000'+ltrim(str(run_time)), 6) , 3, 0, ':'), 6, 0, ':') as datetime) as 'Last Run',
step_id as Step,
case [h].[run_status]
when 0 then 'Failed' else 'Success'
end as 'Status'
from msdb.dbo.sysjobs j
left join msdb.dbo.sysjobschedules s
on j.job_id = s.job_id
LEFT join msdb.dbo.sysjobhistory h
on j.job_id = h.job_id
where step_id = 0
and h.instance_id in (select max(sh.instance_id)
from msdb.dbo.sysjobs sj
join msdb.dbo.sysjobhistory sh
on sj.job_id = sh.job_id
where h.step_id = 0
group by sj.[name])
Die einzigste Möglichkeit von allen Jobs diese Werte zu ermitteln, ist über die Prozedur sp_help_job. Leider ist es nicht möglich das Ergebnis in eine TempTable umzuleiten (siehe Beispiel)
insert into #TempJobTable execute sp_help_job
Dies Endet dann meist in folgender Fehlermeldung:
Server: Msg 8164, Level 16, State 1, Procedure sp_get_composite_job_info, Line 67
An INSERT EXEC statement cannot be nested.
Nun bleibt nur noch der Weg über OPENROWSET (siehe Beispiel) was wunderbar funktioniert.
SELECT * INTO #JobInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes', 'set fmtonly off exec msdb.dbo.sp_help_job')
Select
[name],
cast(ltrim(str(last_run_date))+' '+stuff(stuff(right('000000'+ltrim(str(last_run_time)), 6) , 3, 0, ':'), 6, 0, ':') as NVARCHAR(255)) as 'Last Run',
CASE [current_execution_status]
WHEN 1 THEN 'Executing'
WHEN 2 THEN 'Waiting For Thread'
WHEN 3 THEN 'Between Retries'
WHEN 4 THEN 'Idle'
WHEN 5 THEN 'Suspended'
WHEN 7 THEN 'PerformingCompletion'
ELSE 'Unknown'
END AS Status
, CASE [last_run_outcome]
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Success'
ELSE 'Unknown'
END AS Result
from #JobInfo
ORDER BY [name]
DROP TABLE #JobInfo
Frühjahrsputz mit EasyCleaner
14. Jan
Bin heute morgen auf ein kleines nützliches Freeware Tool gefunden, welches beim entrümpeln der Festplatte hilf. Der EasyCleaner von ToniArts hilft bei folgenden Aufgaben:
- Registry säubern

EasyCleaner
- Software verwalten
- Doppelte Dateien auffinden
- Temporäre und sonstige nicht benötigte Dateien aufspüren
- Veraltete Verknüpfungen entfernen
- Festplattenbelegung analysieren
- Autostart Einträge bearbeiten
- IE Verlauf / Cookies / Cache verwalten
- Zuletzt verwendete Dokumente bearbeiten
Alles in allem ein gutes Helferlein. Herunterladen kann man den EasyCleaner auf der Homepage der Herstellers.
Frohes neues Jahr 2009
07. Jan
Ich möchte hier an dieser Stelle allen ein frohes neues Jahr 2009 wünschen!
T-SQL Script zum shrinken des Logfiles
07. Jan
Hier ein kleines T-SQL Script, welches ich verwende, um Logfiles zu shrinken.
USE [DBName] GO DBCC SHRINKFILE([DBName]_log, 1) BACKUP LOG [DBName] WITH TRUNCATE_ONLY DBCC SHRINKFILE([DBName]_log, 1)
Einfach [DBName] in den gewünschen Datenbanknamen ersetzen.
Letzte Kommentare