sqlog

sql & co
posts - 52, comments - 29, trackbacks - 8

mercoledì 25 novembre 2009

[OT] Per i nostalgici...

http://www.idealsoftblog.net/playarea/2009/11/quake-1-shareware-flash/

posted @ mercoledì 25 novembre 2009 18.02 | Feedback (1) | Filed Under [ Varie ]

lunedì 21 settembre 2009

Powershell & Get-HashFile

Avendo la necessità di calcolare l'hash di un file all'interno di uno script Powershell, mi sono preparato questa piccola funzione che fa al caso mio:


function Get-HashFile([System.IO.FileInfo[]] $file)
{    
        if (($file.Count -le 0) )
        {
            #Write-Host "NA"
            return $null             
        }
        
        [object[]] $out = New-Object object[] $file.Length
        
        for($z = 0; $z -lt $file.Length; $z++)
        {
            #Write-Host $file[$z].FullName
            [System.Security.Cryptography.SHA1Managed] $hashAlg = New-Object System.Security.Cryptography.SHA1Managed
            $str = New-Object System.IO.FileStream $file[$z].FullName, Open, Read
            [byte[]] $hash = $hashAlg.ComputeHash($str)
            #$out[$z] =  [System.BitConverter]::ToString($hash)
            $out[$z] = @{File=$file[$z]; FileHash=[System.BitConverter]::ToString($hash)}
            $str.Close()
            $str.Dispose()
        }
        return $out
}


$myFile = Get-Item c:\tmp\_Varie_\_Working\*.*
$test = Get-HashFile($myFile)
foreach($i in $test) {$i}

Le flessibilità e la potenzialità offerte dalla Powershell sono (come sempre) semplicemente fantastiche!

posted @ lunedì 21 settembre 2009 18.28 | Feedback (0) |

martedì 19 maggio 2009

Microsoft Story

Su http://channel9.msdn.com/ è disponibile una serie di documentari, di una 10ina di minuti l'uno, che raccontano anno dopo anno la storia della Microsoft. Si parte dal 1975 sino ad arrivare ai nostri giorni. Siamo al 1989 e settimanalmente (più o meno) viene rilasciato un video.

interessante...

http://channel9.msdn.com/shows/History/

posted @ martedì 19 maggio 2009 16.48 | Feedback (0) |

lunedì 11 maggio 2009

Monitoring utilizzo oggetti SQL Server

Tenere in ordine gli oggetti presenti in un database, avendo cura periodicamente di eliminare tabelle, viste o procedure / funzioni non più utili, è da sempre un operazione un po critica e in alcuni casi anche abbastanza fastidiosa. Qualche giorno fa mi è stato chiesto di gestire una situazione molto simile alla suddetta. Era arrivato il momento di fare pulizia su uno dei database di supporto più grossi. Obbiettivo eliminare oggetti non più utilizzati e fare un censimento di quelli ancora utilizzati (per un eventuale aggiornamento).
Serviva monitorare l'utilizzo del suddetto database, procurando il meno "fastidio" possibile agli utenti.
Il Profiler in questi casi torna davvero utile.

Gli eventi che dobbiamo gestire sono (avendo cura di attivare tutte le colonne, vedere img.):
  • Audit Schema Object Access Event
  • Audit Database Object Access Event


A questo punto filtriamo solo i dati che riguardano il database che vogliamo monitorare (inserendo un filtro sulla colonna DatabaseName).



Attiviamo e verifichiamo che il tutto funzioni come previsto.
Magari potrebbe essere necessario raffinare i dati tracciati per mezzo di ulteriori filtri (in questo caso applicare un filtro sulla colonna ObjectName può tornare utile).

A questo punto possiamo generarci un template ScriptSQL (vedere img.) che andremo a parametrizzare correttamente e che quindi scheduleremo per mezzo di uno job.


Generato lo script apriamolo con query analayzer e procediamo con il configurarlo. Quattro sono le procedure che vengono utilizzate (e ben documentate su MSDN che vi invito ad consultare per ulteriori info):
  • sp_trace_create: creare il trace
  • sp_trace_setevent: impostare gli eventi da traccaire (e relative colonne)
  • sp_trace_setfilter: impostare eventuali filtri
  • sp_trace_setstatus: attivare / disattivare il trace

Per provare possiamo impostare a 2 il secondo parametro (attivando cosi il rollover del file) e inseriamo il path e relativo nome file del trace che andremo a generare:
exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL  (impostazioni originali)
exec @rc = sp_trace_create @TraceID output, 2, N'\\nomeShare\FolderTrace\FileName', @maxfilesize, NULL

Per monitorare lo stato dei vari trace attivi, possiamo ricorrere alla seguente funzione di sistema:

select
    traceid,
    case
        when [property] = 1 then 'Opzioni della traccia'
        when [property] = 2 then 'Nome del file'
        when [property] = 3 then 'Dimensioni massime'
        when [property] = 4 then 'Ora di interruzione'
        when [property] = 5 then 'Stato corrente della traccia'
        else convert(varchar(50), [property]) + ' - ND'
    end
    as [property_descr],
    [property],
    [value]
from fn_trace_getinfo ( 0 )


Il traceid=1 è da considerarsi di sistema.

Vediamo un esempio di script di schedulazione completo:

    --Per prima cosa provvedo a stoppare eventuali trace attivi in precedenza...
    DECLARE @TraceID_ToStop AS INT
    select @TraceID_ToStop = 0
   
    --Recupero il traceid
    select @TraceID_ToStop = isnull(traceid, 0)

    from fn_trace_getinfo ( 0 )
    WHERE CONVERT(NVARCHAR(255), [value]) LIKE '%Profiler_Cambusa_Log_%_.trc' and traceid > 1    --Filtro sul nome file del trace per recuperare eventuali trace attivi.

    if(select @TraceID_ToStop) > 1
    begin
        --Arresto ed elimino trace...
        exec sp_trace_setstatus @TraceID_ToStop, 0
        exec sp_trace_setstatus @TraceID_ToStop, 2

        print 'Stoped TraceID: ' + convert(varchar(50), @TraceID_ToStop)
    end
    --------------------------------------------------------------

    DECLARE @DateNow AS NVARCHAR(500)
    DECLARE @PathFileLog AS NVARCHAR(255)
    SET @DateNow = CONVERT(VARCHAR(255), GETDATE(), 112)
    SET @PathFileLog = 'F:\Profile\Cambusa\Profiler_Cambusa_Log_' + @DateNow + '_'        --Preparo il path e il nome file del trace.
    PRINT 'PathFileLog: ' + @PathFileLog


    -- Create a Queue
    declare @rc int
    declare @TraceID int
    declare @maxfilesize bigint
    set @maxfilesize = 50

    exec @rc = sp_trace_create @TraceID output, 2, @PathFileLog, @maxfilesize, NULL
    if (@rc != 0) goto error

    -- Client side File and Table cannot be scripted

    -- Set the events
    declare @on bit
    set @on = 1
    exec sp_trace_setevent @TraceID, 180, 7, @on
    exec sp_trace_setevent @TraceID, 180, 23, @on
    exec sp_trace_setevent @TraceID, 180, 8, @on
    exec sp_trace_setevent @TraceID, 180, 40, @on
    exec sp_trace_setevent @TraceID, 180, 64, @on
    exec sp_trace_setevent @TraceID, 180, 1, @on
    exec sp_trace_setevent @TraceID, 180, 41, @on
    exec sp_trace_setevent @TraceID, 180, 49, @on
    exec sp_trace_setevent @TraceID, 180, 6, @on
    exec sp_trace_setevent @TraceID, 180, 10, @on
    exec sp_trace_setevent @TraceID, 180, 14, @on
    exec sp_trace_setevent @TraceID, 180, 26, @on
    exec sp_trace_setevent @TraceID, 180, 34, @on
    exec sp_trace_setevent @TraceID, 180, 50, @on
    exec sp_trace_setevent @TraceID, 180, 3, @on
    exec sp_trace_setevent @TraceID, 180, 11, @on
    exec sp_trace_setevent @TraceID, 180, 19, @on
    exec sp_trace_setevent @TraceID, 180, 35, @on
    exec sp_trace_setevent @TraceID, 180, 51, @on
    exec sp_trace_setevent @TraceID, 180, 4, @on
    exec sp_trace_setevent @TraceID, 180, 12, @on
    exec sp_trace_setevent @TraceID, 180, 28, @on
    exec sp_trace_setevent @TraceID, 180, 60, @on
    exec sp_trace_setevent @TraceID, 180, 29, @on
    exec sp_trace_setevent @TraceID, 180, 37, @on
    exec sp_trace_setevent @TraceID, 114, 7, @on
    exec sp_trace_setevent @TraceID, 114, 23, @on
    exec sp_trace_setevent @TraceID, 114, 8, @on
    exec sp_trace_setevent @TraceID, 114, 40, @on
    exec sp_trace_setevent @TraceID, 114, 64, @on
    exec sp_trace_setevent @TraceID, 114, 1, @on
    exec sp_trace_setevent @TraceID, 114, 9, @on
    exec sp_trace_setevent @TraceID, 114, 41, @on
    exec sp_trace_setevent @TraceID, 114, 49, @on
    exec sp_trace_setevent @TraceID, 114, 2, @on
    exec sp_trace_setevent @TraceID, 114, 10, @on
    exec sp_trace_setevent @TraceID, 114, 26, @on
    exec sp_trace_setevent @TraceID, 114, 34, @on
    exec sp_trace_setevent @TraceID, 114, 50, @on
    exec sp_trace_setevent @TraceID, 114, 3, @on
    exec sp_trace_setevent @TraceID, 114, 11, @on
    exec sp_trace_setevent @TraceID, 114, 19, @on
    exec sp_trace_setevent @TraceID, 114, 35, @on
    exec sp_trace_setevent @TraceID, 114, 51, @on
    exec sp_trace_setevent @TraceID, 114, 59, @on
    exec sp_trace_setevent @TraceID, 114, 4, @on
    exec sp_trace_setevent @TraceID, 114, 12, @on
    exec sp_trace_setevent @TraceID, 114, 28, @on
    exec sp_trace_setevent @TraceID, 114, 44, @on
    exec sp_trace_setevent @TraceID, 114, 60, @on
    exec sp_trace_setevent @TraceID, 114, 5, @on
    exec sp_trace_setevent @TraceID, 114, 21, @on
    exec sp_trace_setevent @TraceID, 114, 29, @on
    exec sp_trace_setevent @TraceID, 114, 37, @on
    exec sp_trace_setevent @TraceID, 114, 6, @on
    exec sp_trace_setevent @TraceID, 114, 14, @on


    -- Set the Filters
    declare @intfilter int
    declare @bigintfilter bigint

    exec sp_trace_setfilter @TraceID, 35, 0, 6, N'DbNameTest_1'                           --Filtro solo attività sul seguente db
    exec sp_trace_setfilter @TraceID, 34, 0, 7, N'OggettoDaEscludereDalMonitoring'        --escludo eventuali oggetti

    -- Set the trace status to start
    exec sp_trace_setstatus @TraceID, 1

    -- display trace id for future references
    select TraceID=@TraceID
    goto finish

    error:
    select ErrorCode=@rc

    finish:
    return

Questo script potrebbe essere schedulato giornalmente, ed in automatico provvederà a creare uno o più file di trace con nome file e data di generazione.
Periodicamente potrete quindi aprire il vostro file trace con il profiler ed importarlo in una tabella per eseguire eventuali indagini (vedere img.).




posted @ lunedì 11 maggio 2009 14.38 | Feedback (4) |

mercoledì 25 marzo 2009

Libro consigliato

E da un po che non scrivo... in questo periodo tra la facoltà e il lavoro, il tempo si è ridotto notevolmente. Nel tempo "forzatamente libero" offertomi dalle Ferrovie Nord Milano che puntualmente sono in ritardo, sto avendo modo di leggere con molto interesse questo libro: Il Lato Oscuro della Rete di N. Carr.

Argomento centrale è la rete e le sue future possibili evoluzioni sia dal punto di vista prettamente informatico, sia dal punto vista sociale.

Il taglio è "giornalistico", scorrevole e piacevole e fatta eccezione le poche volte che l'autore si fa prendere da un certo pessimismo cosmico, rimane una lettura che comunque consiglio caldamente.

alla proxima!

posted @ mercoledì 25 marzo 2009 14.13 | Feedback (1) |

venerdì 19 dicembre 2008

xp-dev.com

Con un mio amico stiamo portando avanti, da un po' di tempo un progetto in comune. Avere un tool di versioning inizia ad essere indispensabile. Mi sono fatto un giro in giro è ho trovato qualche provider che offre servizi di hosting per SVN. In particolare: http://xp-dev.com/ è quello che mi è sembrato il più adatto alle nostre necessità. Il servizio (almeno per ora) è gratuito è mette a disposizione circa 1,5Gb di spazio. Inoltre ha una gestione (seppur molto semplice)  dei progetti, bug e wiki.

Altri provider che offrono servizi analoghi:

http://unfuddle.com/
https://www.myversioncontrol.com/
http://www.beanstalkapp.com/
http://www.codespaces.com/
http://www.beanstalkapp.com/

posted @ venerdì 19 dicembre 2008 9.49 | Feedback (5) |

giovedì 13 novembre 2008

Microsoft DreamSpark

Oggi mi è arrivata la comunicazione da parte dell'università, che posso usufruire della suddetta iniziativa :

https://www.dreamspark.com/default.aspx

La Microsoft è sempre stata molto attenta sotto questo punto di vista, e alla fine pur lavorando in questo settore e avendo la possibilità di procurarmi ugualmente i suddetti prodotti, fa ugualmente piacere poter usufruire di queste iniziative.

Forse una piccola critica la muovo proprio al mondo universitario (almeno la facoltà e il corso che frequento io), che spesso "snobba" la piattaforma Microsoft a favore di Java / PHP / Linux.

posted @ giovedì 13 novembre 2008 14.14 | Feedback (0) |

giovedì 6 novembre 2008

VMWare vs. Microsoft Virtualization

Vengono esposti pro e contro delle due piattaforme:

http://edge.technet.com/Media/VMWare-vs-Microsoft-Virtualization/

posted @ giovedì 6 novembre 2008 14.25 | Feedback (3) |

giovedì 11 settembre 2008

Google Doctype

Interessante raccolta di articoli e suggerimenti riguardanti il web e la sicurezza.

http://code.google.com/doctype/

posted @ giovedì 11 settembre 2008 17.34 | Feedback (0) |

martedì 12 agosto 2008

CompressDecompress.rar & Encrypt_Decrypt.rar

Ho provveduto ad aggiornarli e ricompilarli con il Framework 3.5 (Sln. VS 2008).

Sono inoltre state apportate lievi modifiche.

posted @ martedì 12 agosto 2008 12.35 | Feedback (0) |

SQL Server Data Pump (ver. 1.5.2)

Rilasciata una nuova release del tool SQL Server Data Pump (ver. 1.5.2).

SQL Server Data Pump (ver. 1.5.2)

posted @ martedì 12 agosto 2008 12.23 | Feedback (0) |

Microsoft SQL Server Compact 3.5 SP1

Sono stati rilasciati tutti gli aggiornamenti che riguardano Microsoft SQL Server Compact 3.5.
Per comodità li raccolgo tutti in questo post.

Microsoft SQL Server Compact 3.5 Service Pack 1 Books Online and Samples
    http://www.microsoft.com/downloads/details.aspx?familyid=07829770-73A7-41E4-880D-E74B1A353623&displaylang=en

Microsoft SQL Server Compact 3.5 Service Pack 1 Server Tools
    http://www.microsoft.com/downloads/details.aspx?FamilyId=FA751DB3-7685-471B-AC31-F1B150422462&displaylang=en

Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop
    http://www.microsoft.com/downloads/details.aspx?FamilyId=DC614AEE-7E1C-4881-9C32-3A6CE53384D9&displaylang=en

Microsoft SQL Server Compact 3.5 Service Pack 1 for Windows Mobile
    http://www.microsoft.com/downloads/details.aspx?FamilyId=FCE9ABBF-F807-45D6-A457-AB5615001C8F&displaylang=en

Microsoft Synchronization Services for ADO.NET
    http://www.microsoft.com/downloads/details.aspx?FamilyId=75FEF59F-1B5E-49BC-A21A-9EF4F34DE6FC&displaylang=en

Microsoft Synchronization Services for ADO.NET Books Online
    http://www.microsoft.com/downloads/details.aspx?FamilyID=02989F70-49AA-43D7-81B8-A651120F8D65&displaylang=en

Microsoft Sync Framework v1.0
    http://www.microsoft.com/downloads/details.aspx?familyid=C88BA2D1-CEF3-4149-B301-9B056E7FB1E6&displaylang=en

Microsoft Sync Framework Documentation
    http://www.microsoft.com/downloads/details.aspx?familyid=2E9BEC3B-9DEB-4620-A955-266E656D8FA4&displaylang=en

posted @ martedì 12 agosto 2008 12.16 | Feedback (4) |

sabato 5 luglio 2008

SSIS Task Zip-UnZip

Pubblicato questo semplice Task su Codeplex. Attualmente gestisce solo il formatto ZIP, permettendo di comprimere e decomprimere un archivio. Ho aggiunto per comodità anche il supporto alla password.

 http://www.codeplex.com/TaskUnZip

posted @ sabato 5 luglio 2008 10.12 | Feedback (1) |

venerdì 6 giugno 2008

SQL Lite 3.5.9 + System.Data.SQLite

Da qualche giorno è stata rilasciata la versione SQL Lite 3.5.9 e relativa libreria .NET.

Qui trovate tutto:

http://www.sqlite.org/
http://sqlite.phxsoftware.com/

posted @ venerdì 6 giugno 2008 9.37 | Feedback (0) |

giovedì 5 giugno 2008

SQL Compare e creazione utenti su SQL 2005

Durante l’attuale procedura di migrazione di una serie di database da SQL 2000 a SQL 2005 ho avuto modo di utilizzare l’ottimo tool della RedGate SQL Compare.
Ho notato che durante la migrazione degli utenti il suddetto tool provvede a crearli/migrarli ma non aggiunge la GRANT Connect.
Di default SQL 2005 non la inserisce (giustamente) e di conseguenza gli utenti che appartengono a ruoli di basso rango (es. db_datareader) non possono accedere ai vari database.

Per risolvere il problema (dato che non ho trovato soluzioni fra le opzioni offerte da SQL Compare) ho provveduto a scrivermi due righe di codice che si interfacciano con lo SMO di SQL Server (per l’occasione gli ho dato anche un occhio…).
Ve li allego, magari possono tornare utili a qualcun altro.

Il codice magari è un po’ sporco, ma l’idea c’è

Link

posted @ giovedì 5 giugno 2008 16.04 | Feedback (0) |

Powered by: