1

对于 Windows 上的 SQL Server 来获取默认备份文件夹,我们可以使用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 解决方案)?

4

2 回答 2

1

在 SQL Server v2019 中,Microsoft 增强了 ServerProperty 以公开 InstanceDefaultBackupPath。说到这里(https://learningintheopen.org/2020/06/08/sql-server-configuration-default-directories/

于 2020-06-09T03:33:27.760 回答
1

我从来没有找到一种非注册表方式来可靠地在 t-sql 中获取备份目录。我通常只是将 /data/ 替换为 /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
于 2019-04-01T18:24:34.750 回答