Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć katalog danych dla instancji SQL Server?

Zależy to od tego, czy domyślna ścieżka jest ustawiona dla plików danych i dzienników, czy nie.

Jeśli ścieżka jest jawnie ustawiona w Properties => Database Settings => Database default locations następnie serwer SQL przechowuje go w Software\Microsoft\MSSQLServer\MSSQLServer w DefaultData i DefaultLog wartości.

Jeśli jednak te parametry nie są ustawione jawnie, serwer SQL używa ścieżek Data i Log głównej bazy danych.

Poniżej znajduje się skrypt, który obejmuje oba przypadki. To jest uproszczona wersja zapytania uruchamianego przez SQL Management Studio.

Pamiętaj też, że używam xp_instance_regread zamiast xp_regread , więc ten skrypt będzie działał dla każdej instancji, domyślnej lub nazwanej.

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

Ten sam efekt możesz osiągnąć, używając SMO. Poniżej jest przykład C#, ale możesz użyć dowolnego innego języka .NET lub 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;
}

Jest to o wiele prostsze w SQL Server 2012 i nowszych, zakładając, że masz ustawione domyślne ścieżki (co prawdopodobnie zawsze jest właściwe):

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wypełnić kolumnę liczbami losowymi w SQL? Otrzymuję tę samą wartość w każdym rzędzie

  2. Unikanie zakleszczeń SQL dzięki dostrajaniu zapytań:porady Brenta Ozara

  3. Instalacja i konfiguracja programu SQL Server Log Shipping i odzyskiwanie po awarii -4

  4. SQL:klauzula IF w klauzuli WHERE

  5. Wstawianie danych SQL Server do Salesforce.com