sql >> Database >  >> RDS >> Sqlserver

Hoe vind ik de gegevensmap voor een SQL Server-instantie?

Het hangt ervan af of het standaardpad is ingesteld voor gegevens- en logbestanden of niet.

Als het pad expliciet is ingesteld bij Properties => Database Settings => Database default locations vervolgens slaat de SQL-server het op in Software\Microsoft\MSSQLServer\MSSQLServer in DefaultData en DefaultLog waarden.

Als deze parameters echter niet expliciet zijn ingesteld, gebruikt de SQL-server de gegevens- en logpaden van de hoofddatabase.

Bellow is het script dat beide gevallen omvat. Dit is een vereenvoudigde versie van de query die SQL Management Studio uitvoert.

Merk ook op dat ik xp_instance_regread . gebruik in plaats van xp_regread , dus dit script werkt voor elke instantie, standaard of benoemd.

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

U kunt hetzelfde resultaat bereiken door SMO te gebruiken. Bellow is een C#-voorbeeld, maar u kunt elke andere .NET-taal of PowerShell gebruiken.

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;
}

Het is zoveel eenvoudiger in SQL Server 2012 en hoger, ervan uitgaande dat u standaardpaden hebt ingesteld (wat waarschijnlijk altijd het juiste is om te doen):

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


  1. Hoe SQL Server Manager Studio (SSMS) te installeren - SQL Server / TSQL-zelfstudie deel 1

  2. Android:Bulk Insert, wanneer InsertHelper is verouderd

  3. Het standaarddatabase-e-mailprofiel voor een gebruiker in SQL Server (T-SQL) wijzigen

  4. SQL Server 2016:een relatie maken