2013-07-02 5 views
1

나는 클라이언트가 목록하기 -이를 서버 데스크톱 응용 프로그램 (.NET)을 클라이언트하면 다시 폴더까지 기본에 저장 가능한 백업 파일의 목록을 가져옵니다 (C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup)SQL 서버 2012 : 자료 백업

나는 결정

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 

을하지만 점점 오전 오류 다음과 같습니다 :

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.

당신은 그럴 필요 수있는 모든 필요한 파일을 가진 테이블을 반환하는 저장 프로 시저를 만들 수 있습니다 이 스크립트는 컴퓨터에 설치되어 있습니다 ...

무엇이 문제입니까?

(SMO 라이브러리를 사용 중일 수 있습니다) 사용 가능한 백업 목록을 얻는 다른 방법이 있습니까?

+0

, 당신은 목록을하고자하는 SQL Server에서 추적하지 않는 백업 파일은 무엇입니까? sql 서버가 알고있는 백업 파일 목록을 원한다면 (유지 관리 계획에서와 같이), msdb 데이터베이스에서'backupfile' 테이블을 쿼리하면됩니다. –

+0

'xp_dirtree'는 문서화되지 않았기 때문에 지원되지 않습니다. . –

+0

Darren Kopp => 예,이 테이블 (backupfile, backupmediafamily, backupset)에 대해 알고 있지만이 테이블은 폴더와 동기화되지 않습니다. 단지 역사 일뿐입니다 –

답변

2
그것은 당신이 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 
+0

감사합니다 !!! 좋은 작품! –