sql >> Databáze >  >> RDS >> Sqlserver

Jak najdu datový adresář pro instanci SQL Server?

Záleží na tom, zda je pro data a soubory protokolu nastavena výchozí cesta nebo ne.

Pokud je cesta nastavena explicitně v Properties => Database Settings => Database default locations pak jej SQL server uloží do Software\Microsoft\MSSQLServer\MSSQLServer v DefaultData a DefaultLog hodnoty.

Pokud však tyto parametry nejsou nastaveny explicitně, SQL server používá Data a Log cesty hlavní databáze.

Níže je uveden scénář, který pokrývá oba případy. Toto je zjednodušená verze dotazu, který SQL Management Studio spouští.

Všimněte si také, že používám xp_instance_regread místo xp_regread , takže tento skript bude fungovat pro jakoukoli instanci, výchozí nebo pojmenovanou.

declare @DefaultData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', @DefaultData output

declare @DefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', @DefaultLog output

declare @DefaultBackup nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @DefaultBackup output

declare @MasterData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg0', @MasterData output
select @MasterData=substring(@MasterData, 3, 255)
select @MasterData=substring(@MasterData, 1, len(@MasterData) - charindex('\', reverse(@MasterData)))

declare @MasterLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg2', @MasterLog output
select @MasterLog=substring(@MasterLog, 3, 255)
select @MasterLog=substring(@MasterLog, 1, len(@MasterLog) - charindex('\', reverse(@MasterLog)))

select 
    isnull(@DefaultData, @MasterData) DefaultData, 
    isnull(@DefaultLog, @MasterLog) DefaultLog,
    isnull(@DefaultBackup, @MasterLog) DefaultBackup

Stejného výsledku dosáhnete pomocí SMO. Níže je ukázka C#, ale můžete použít jakýkoli jiný jazyk .NET nebo PowerShell.

using (var connection = new SqlConnection("Data Source=.;Integrated Security=SSPI"))
{
    var serverConnection = new ServerConnection(connection);
    var server = new Server(serverConnection);
    var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile;
    var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog;
}

Je to mnohem jednodušší v SQL Server 2012 a vyšších, za předpokladu, že máte nastavené výchozí cesty (což je pravděpodobně vždy správné):

select 
    InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
    InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')


  1. Kolekce Oracle PL/SQL – Vytvořte vnořenou tabulku v databázi

  2. Jak srovnávat výkon PostgreSQL

  3. Jak PERIOD_DIFF() funguje v MariaDB

  4. SQL vyberte max(datum) a odpovídající hodnotu