Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để tìm thư mục dữ liệu cho phiên bản SQL Server?

Nó phụ thuộc vào việc đường dẫn mặc định có được đặt cho dữ liệu và tệp nhật ký hay không.

Nếu đường dẫn được đặt rõ ràng tại Properties => Database Settings => Database default locations thì máy chủ SQL lưu trữ nó tại Software\Microsoft\MSSQLServer\MSSQLServer trong DefaultDataDefaultLog giá trị.

Tuy nhiên, nếu các tham số này không được đặt rõ ràng, máy chủ SQL sẽ sử dụng các đường dẫn Dữ liệu và Nhật ký của cơ sở dữ liệu chính.

Dưới đây là kịch bản bao gồm cả hai trường hợp. Đây là phiên bản đơn giản hóa của truy vấn SQL Management Studio chạy.

Ngoài ra, lưu ý rằng tôi sử dụng xp_instance_regread thay vì xp_regread , vì vậy tập lệnh này sẽ hoạt động cho mọi trường hợp, mặc định hoặc được đặt tên.

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

Bạn có thể đạt được kết quả tương tự bằng cách sử dụng SMO. Dưới đây là mẫu C #, nhưng bạn có thể sử dụng bất kỳ ngôn ngữ .NET hoặc PowerShell nào khác.

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

Nó đơn giản hơn rất nhiều trong SQL Server 2012 trở lên, giả sử bạn đã đặt đường dẫn mặc định (có lẽ luôn là điều đúng đắn cần làm):

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. Làm cách nào để sao lưu cơ sở dữ liệu SQL Server từ xa vào ổ đĩa cục bộ?

  2. Cách bật tính năng ghi dữ liệu thay đổi (CDC) trên cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng máy chủ SQL

  3. Tạo Ngày giữa các phạm vi ngày

  4. Giao dịch ngoại lệ ném ngoại lệ nền tảng này không hỗ trợ các giao dịch phân tán trong khi mở đối tượng kết nối

  5. Trình điều khiển không thể thiết lập kết nối an toàn với SQL Server bằng cách sử dụng mã hóa Lớp cổng bảo mật (SSL)