Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menemukan direktori data untuk contoh SQL Server?

Itu tergantung pada apakah jalur default diatur untuk data dan file log atau tidak.

Jika jalur diatur secara eksplisit di Properties => Database Settings => Database default locations kemudian SQL server menyimpannya di Software\Microsoft\MSSQLServer\MSSQLServer di DefaultData dan DefaultLog nilai.

Namun, jika parameter ini tidak disetel secara eksplisit, server SQL menggunakan jalur Data dan Log dari database master.

Di bawah ini adalah skrip yang mencakup kedua kasus tersebut. Ini adalah versi sederhana dari kueri yang dijalankan SQL Management Studio.

Juga, perhatikan bahwa saya menggunakan xp_instance_regread bukannya xp_regread , jadi skrip ini akan berfungsi untuk semua instance, default atau bernama.

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

Anda dapat mencapai hasil yang sama dengan menggunakan SMO. Di bawah ini adalah contoh C#, tetapi Anda dapat menggunakan bahasa .NET atau PowerShell lainnya.

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

Ini jauh lebih sederhana di SQL Server 2012 dan di atasnya, dengan asumsi Anda memiliki jalur default yang ditetapkan (yang mungkin selalu merupakan hal yang benar untuk dilakukan):

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. Ubah 'waktu' menjadi 'datetime2' di SQL Server (Contoh T-SQL)

  2. Memecahkan masalah Replikasi SQL Server

  3. Cara Menonaktifkan Semua Batasan PERIKSA &Kunci Asing untuk Tabel di SQL Server (Contoh T-SQL)

  4. dapatkan ID catatan SQL baru

  5. SET NOCOUNT PADA penggunaan