GetMsSqlDump!!!

Végre, körülbelül másfél hét után, elkészült életem (majdnem) főműve, egy kütyü, mellyel SQL-ből ki lehet nyerni a táblák tartalmát insert into utasítások képében. Tipikusan a “nem nagy dolog, de jólesik” kategória, ugyanis nem MSSQL-en felnőtt ismerőseimnek az az első kérdése, hogy hogyan lehet ilyen módon kinyerni az adatokat MSSQL-ből, és már nagyon untam, hogy mindig azt kellett mondanom, hogy “ööööö… sehogy”.
Másrészt a Powershell mindig is foglalkoztatott, és például erre a célra tökéletesen alkalmas eszköz volt, úgyhogy PS-ben írtam, röpke 300 sor, kommentekkel, de hibakezelés nélkül. Mindenesetre működik, úgyhogy 0.1-es verzióval, béta állapotban elérhetővé tettem az emberiség számára egyrészt itt a saját oldalamon, másrészt pedig a CodePlexen.
Egyelőre néhány sebből vérzik, de ezeket szeretném befoltozni, meg majd egy C#-os command-line exét is akarok csinálni belőle. Meg portolni Linuxra :)
A cucc teljesen angolul van, de a doksit majd lefordítom magyarra, lássátok a részrehajlást :)

SQL Server uptime

Az uptime egy nagyon kedves és szeretett funkció számomra az operációs rendszerekben, jó látni, hogy mi mióta fut. Az SQL szerver esetében is lehet igény erre a szolgáltatásra, amit nem nehéz megvalósítani, ha egy aprócska tényt kihasználunk.

USE master

CREATE PROCEDURE sp_uptime
AS
DECLARE @up DATETIME
SELECT @up = login_time FROM sys.dm_exec_sessions WHERE session_id = 1

DECLARE @day varchar(4), @hour char(2), @minute varchar(10)
SELECT @minute = DATEDIFF(minute, @up, getdate())
SELECT @day = @minute / 1440, @minute = @minute % 1440, 
		@hour = @minute / 60, @minute = @minute % 60
PRINT @@SERVERNAME + ' has been up for ' + @day + ' day(s), ' + @hour + ' hour(s), ' + @minute + ' minute(s).'

Az alapötlet a hatodik sorban látható: az 1-es SPID-del rendelkező processz, a resource monitor a szerver indulásakor logol be, és ott is marad, amíg fut a SQL. Ezek után némi favágással a dátumot a megszokott uptime küllemre hoztam. A végén a print került be select helyett, mivel így nem kell azon bénázni, hogy az oszlopszélességet állítgassuk (persze aki szereti, írja át bátran). SQL 2000-nél a sys.dm_exec_sessions helyett master..sysprocesses van, session_id helyett pedig spid.
Azért a master adatbázis, mert így akárhol bemondhatjuk, hogy sp_uptime, az le fog futni, mivel az SQL minden sp_ kezdetű tárolt eljárást először a masterban keres, és csak aztán az aktuális adatbázisban. (Ezért nem jó ötlet sp_ kezdetű tárolt eljárásokat csinálni az alkalmazásainkhoz, mert mindig be fog nézni a masterba is a SQL szerver.)
Hogy mire használható? Öööö… fogalmam sincs. Én akkor találtam ki, amikor időnként megszakadt a kapcsolatom a szerverhez, ami amúgy is sztochasztikusan működött, néha újraindult, néha csak az oprendszer tűnt el a hálózatról, és jó volt tudni, hogy éppen hányadán állok a kis döggel.