DevAdmin Blog

Blog di Ermanno Goletto (Microsoft MVP Directory Services - MCITP - MCTS - MCSA - MCP)
posts - 887, comments - 447, trackbacks - 13

My Links

News

Avatar

Curriculum Vitae

Visualizza il profilo di Ermanno Goletto su LinkedIn


Il contenuto di questo blog e di ciascun post viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto. Questo blog riporta il mio personale pensiero che non riflette necessariamente il pensiero del mio datore di lavoro.

Logo Creative Commons Deed


Logo SysAdmin.it SysAdmin.it Staff


Logo TechNet Forum TechNet Italia @ForumTechNetIt Follow TechNet Forum on Twitter


Logo MVP


Ermanno Goletto Follow ermannog on Twitter

Article Categories

Archives

Post Categories

Blogs

Friends

Knowledge Base

MVP Sites

Resources

Ricavare i path di default per i file di dati e logs in SQL Server 2005

Una delle impostazioni che possibile fare su un'istanza di SQL Server è quella del percorso di default in cui memorizzare file dati e logs di un nuovo database. Ho fatto diverse ricerca, ma non trovato un modo semplice per ricavare tramite T-SQL tali informazioni.

A quanto sembra se si modificano tali percorsi questi vengono memorizzati nelle chiavi di registry:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData
  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog

In caso contrario i path è quello specificato durante l'installazione per i File di dati quindi si può pensare di ricavarli dai path dei file mdf e ldf del database master.

Di seguito uno script T-SQL per ricavare il path di default per i file di dati:

USE master
declare @DefaultData nvarchar(512)

--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',
 N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData',
 @DefaultData OUTPUT, 'no_output'

--Se la chiave di registry non esiste si utilizza il path del file mdf del database master
IF (@DefaultData IS NULL)
 BEGIN
  SELECT  @DefaultData = SUBSTRING(physical_name, 0, CHARINDEX(N'master.mdf', physical_name))
  FROM sys.database_files
  WHERE name='master'
 END

--Rimozione eventuale slash finale
IF ((@DefaultData IS NOT NULL) AND (CHARINDEX(N'\', @DefaultData, len(@DefaultData)) > 0))
BEGIN
 SELECT @DefaultData = STUFF (@DefaultData,len(@DefaultData),1,N'')
END

SELECT @DefaultData

Mentre questo è lo script per ricavare il path di default per i file di log:

USE master
declare @DefaultLog nvarchar(512)

--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',
 N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog',
 @DefaultLog OUTPUT, 'no_output'

--Se la chiave di registry non esiste si utilizza il path
--del file mdf del database master
IF (@DefaultLog IS NULL)
 BEGIN
  SELECT  @DefaultLog = SUBSTRING(physical_name, 0, CHARINDEX(N'mastlog.ldf', physical_name))
  FROM sys.database_files
  WHERE name='mastlog'
 END

--Rimozione eventuale slash finale
IF ((@DefaultLog IS NOT NULL) AND (CHARINDEX(N'\', @DefaultLog, len(@DefaultLog)) > 0))
BEGIN
 SELECT @DefaultLog = STUFF (@DefaultLog,len(@DefaultLog),1,N'')
END

SELECT @DefaultLog

Se poi occorre usare questi script in un programma .NET il mio consiglio è quello di non inserire lo script nel codice, ma di creare dei file con estensione sql in questo modo Visual Studio visualizzerà lo script evidenziando le parole chiave esattamente come in Management Studio. Quindi aggiungere il file come risorsa in questo modo VS 2005 e sucessivi creeranno una comoda prorietà stringa in My.Resources che conterrà il testo del file. In VS 2003 è possibile impostare il file come Embedded e tramite un po' di codice leggere il contenuto del file:

        Dim text As String = String.Empty
        Dim resource As System.IO.Stream = _
            System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream( _
                "NameSpace.FileName")

        Dim reader As New System.IO.StreamReader(resource)
        text = reader.ReadToEnd()

        reader.Close() : reader = Nothing
        resource.Close() : resource = Nothing

Print | posted on Thursday, May 29, 2008 7:50 PM | Filed Under [ Code, Snippets & Scripts Database ]

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 8 and 5 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET