Получение папки резервного копирования SQL Server по умолчанию в Linux с T-SQL
Для SQL Server в Windows для получения папки резервного копирования по умолчанию мы можем использовать master.dbo.xp_instance_regread
:
DECLARE @HkeyLocal nvarchar(18) = N'HKEY_LOCAL_MACHINE';
DECLARE @MSSqlServerRegPath nvarchar(31) = N'SOFTWARE\Microsoft\MSSQLServer';
DECLARE @InstanceRegPath sysname = @MSSqlServerRegPath + N'\MSSQLServer';
DECLARE @BackupDirectory nvarchar(512)
if 1=isnull(cast(SERVERPROPERTY('IsLocalDB') as bit), 0)
SET @BackupDirectory=cast(SERVERPROPERTY('instancedefaultdatapath') as nvarchar(512))
else
EXEC master.dbo.xp_instance_regread @HkeyLocal, @InstanceRegPath, N'BackupDirectory', @BackupDirectory OUTPUT;
SELECT @BackupDirectory AS SQLServerBackupDirectory;
Но для Linux это не работает. Кто-нибудь может помочь с подходом T-SQL (я только нахожу решение SSMS здесь)?
1 ответ
В SQL Server v2019 Microsoft улучшила ServerProperty, чтобы предоставить InstanceDefaultBackupPath. Об этом же говорилось здесь ( https://learningintheopen.org/2020/06/08/sql-server-configuration-default-directories/)
Я никогда не находил не-реестр способ надежного получения каталога резервного копирования в t-sql. Я обычно просто делаю замену /data/ to /backup/, так как при установке по умолчанию его связь с каталогом данных ясна. Это не дает прямого ответа на ваш вопрос, но это рабочий способ, если вы не выполнили индивидуальную настройку каталога во время установки.
-- for one of my databases, [dharma] in my linux test-bed.
declare @bkup nvarchar(1024)
set @bkup = replace(cast(SERVERPROPERTY('instancedefaultdatapath') as nvarchar(512)),'/data/','/backup/') + 'dharma.bak'
backup database dharma to disk = @bkup