【问题标题】:SQL Server 2012 : getting a list of available backupsSQL Server 2012:获取可用备份列表
【发布时间】:2013-07-02 15:12:38
【问题描述】:

我有一个客户端 - 服务器桌面应用程序 (.NET),客户端必须获取存储在默认备份文件夹 (C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup) 中的可用备份文件列表

我决定创建一个存储过程,它将返回包含所有需要文件的表:

CREATE PROCEDURE [dbo].[spGetBackUpFiles] AS 
SET NOCOUNT ON
BEGIN

declare @backUpPath as table 
(
 name nvarchar(max),
 backuppath nvarchar(max)
)

insert into @backUpPath
EXECUTE [master].dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',    N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory'

declare @table as table 
(
 filename nvarchar(max),
 depth int,
 filefile int
)

declare @backUpFilesPath as nvarchar(max) = (select top 1 backuppath from @backUpPath)

insert into @table
 EXEC xp_dirtree @backUpFilesPath, 1, 1

SELECT * FROM @table WHERE filename like N'MASK[_]%'
END

但我收到以下错误:

消息 0,级别 11,状态 0,行 0
当前命令发生严重错误。结果(如果有)应丢弃。

你可以在你的机器上试试这个脚本...

可能是什么问题?

是否有另一种方法来获取可用备份列表(可能使用 SMO 库)?

【问题讨论】:

  • 那么,您想要一个未被 sql server 跟踪的备份文件列表吗?如果您想要 sql server 知道的备份文件列表(例如从您的维护计划中或其他),那么您只需查询 msdb 数据库中的 backupfile
  • 请注意,xp_dirtree 未记录且不受支持。
  • Darren Kopp => 是的,我知道这些表(backupfile、backupmediafamily、backupset),但这些表没有与文件夹同步,只是历史记录
  • Aaron Bertrand => 有什么选择吗?

标签: sql-server tsql backup sql-server-2012 smo


【解决方案1】:

这与将文件路径传递给 xp_dirtree 的方式有关,我可以让它工作的唯一方法是使用临时表和动态 SQL,如下所示:

CREATE PROCEDURE [dbo].[spGetBackUpFiles]
AS 
    SET NOCOUNT ON
    BEGIN

        IF OBJECT_ID('tempdb..#table') IS NOT NULL 
            DROP TABLE #table

        CREATE TABLE #table
            (
              [filename] NVARCHAR(MAX) ,
              depth INT ,
              filefile INT
            )

        DECLARE @backUpPath AS TABLE
            (
              name NVARCHAR(MAX) ,
              backuppath VARCHAR(256)
            )

        DECLARE @SQL NVARCHAR(MAX)

        INSERT  INTO @backUpPath
                EXECUTE [master].dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
                    N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer',
                    N'BackupDirectory'

        DECLARE @backUpFilesPath AS NVARCHAR(MAX) = ( SELECT TOP 1
                                                              backuppath
                                                      FROM    @backUpPath
                                                    )



        SET @SQL = 'insert into #table
        EXEC xp_dirtree ''' + @backUpFilesPath + ''', 1, 1'

        EXEC(@SQL)

        SELECT  *
        FROM    #table WHERE [filename] like N'MASK[_]%'
        DROP TABLE #table
    END

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2014-09-22
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多