SQL Data und Log-Verzeichnis auslesen

12/03/2009 - 15:27 von Thomas Griepentrog | Report spam
Hallo NG,

ich möchte gerne für ein Build-Script den Pfad für Data und Log des
SQL-Server 2008 auslesen.

Folgendes Script habe ich zum auslesen gefunden:

declare @SmoDefaultFile nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer,
N'DefaultData', @SmoDefaultFile OUTPUT

declare @SmoDefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer',
N'DefaultLog', @SmoDefaultLog OUTPUT

SELECT ISNULL(@SmoDefaultFile,N'') AS [DefaultFile],
ISNULL(@SmoDefaultLog,N'') AS [DefaultLog]



Leider bekomme ich damit auf meinem Windows Server 2008 und auch auf Vista
eine Leere Tabelle angezeigt.

wenn ich die Declare und exec-Zeilen einzeln ausführe, bekomme ich folgende
Fehlermeldung:

'RegOpenKeyEx()' returned error 2, 'Das System kann die angegebene Datei
nicht finden.'
Msg 22001, Level 1, State 1

Woran kann das liegen und wie kann ich es beheben?

Danke.

Thomas
 

Lesen sie die antworten

#1 Elmar Boye
12/03/2009 - 16:14 | Warnen spam
Hallo Thomas,

Thomas Griepentrog schrieb:
ich möchte gerne für ein Build-Script den Pfad für Data und Log des
SQL-Server 2008 auslesen.

Folgendes Script habe ich zum auslesen gefunden:



was wohl aus einem Trace stammt und mit Fehlern versehen wurde,
denn der Instanzname hat da nichts zu suchen.

Leider bekomme ich damit auf meinem Windows Server 2008 und auch auf
Vista eine Leere Tabelle angezeigt.



Passierte hier auch, und dürfte an einer Änderung zu liegen,
was in der Registry gespeichert wird...

wenn ich die Declare und exec-Zeilen einzeln ausführe, bekomme ich
folgende Fehlermeldung:

'RegOpenKeyEx()' returned error 2, 'Das System kann die angegebene Datei
nicht finden.'



... Solange keine Änderungen über SSMS etc. vorgenommen wurden,
wird kein Registrierungsschlüssel angelegt, was zu dem Fehler führt.
(Sieht man wenn man in die Registry schaut)

Ich habe mal eine abgewandelte Fassung gebaut, die das Stammverzeichnis,
was beim Setup angegeben wird mit einbezieht.

Gruß Elmar

DECLARE @SQLDataRoot nvarchar(512)
DECLARE @DefaultData nvarchar(512)
DECLARE @DefaultLog nvarchar(512)
DECLARE @BackupDirectory nvarchar(512)

exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\Setup',
N'SQLDataRoot',
@SQLDataRoot OUTPUT
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultData',
@DefaultData OUTPUT
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'DefaultLog',
@DefaultLog OUTPUT
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'BackupDirectory',
@BackupDirectory OUTPUT

IF LEFT(REVERSE(@SQLDataRoot), 1) <> N'\'
SET @SQLDataRoot = @SQLDataRoot + N'\'

SELECT ISNULL(@DefaultData, @SQLDataRoot + 'DATA') AS DefaultData,
ISNULL(@DefaultLog, @SQLDataRoot + 'LOG') AS DefaultLog,
ISNULL(@BackupDirectory, @SQLDataRoot + 'BACKUP') AS BackupDirectory

Ähnliche fragen