SQL Server xp_delete_file 파일 삭제 안 함




sql-server maintenance (6)

7 일보다 오래된 형식의 '.7z'파일을 삭제하는 SQL을 작성하려고합니다.

다음은 내가 작동하지 않는 부분입니다.

DECLARE @DateString CHAR(8)
SET @DateString = CONVERT(CHAR(8), DATEADD(d, -7, GETDATE()), 1)
EXECUTE master.dbo.xp_delete_file 0, 
                  N'e:\Database Backups',N'7z', @DateString, 1

또한 '1'을 '0'으로 변경하려고 시도했습니다.

이렇게하면 'success'가 반환되지만 파일은 삭제되지 않습니다.

SQL Server 2005, Standard, SP2 포함


AFAIK xp_delete_file 은 SQL Server 2005에서 인식 한 파일 만 삭제합니다 (백업 파일, 트랜잭션 로그 등). 아마 당신은 다음과 같이 시도 할 수 있습니다 :

xp_cmdshell 'del <filename>'

나는 이것이 조금 오래되었다는 것을 알고 있지만, 나는 당신 모두와 나의 좌절감을 나누고 싶었다. 나는이 게시물들과 같은 문제를 겪고 있었지만 아무 것도 효과가없는 것처럼 보였다. 나는 NetLib이라는 데이터베이스에 암호화 레이어가 있음을 기억했다. 즉, 백업이 암호화되어 있으므로 xp_delete_file에서 헤더를 읽을 수 없습니다. 이제는 OS에서 배치 파일을 사용하고 에이전트 작업에서 호출합니다. 희망이 사람을 도움이됩니다.


이 sp는 보안 목적으로 원시 SQL Server 백업 파일 또는 기본 유지 관리 보고서 파일 만 삭제합니다.

Smink가 당신이 사용할 수 있다고 제안 했으므로

xp_cmdshell 'del <filename>'

폴더에 대한 적절한 사용 권한이 있어야합니다.


이 질문을 발견했지만 솔루션이 나에게 적용되지 않았습니다 (SQL Server 자체가 유지 관리 계획의 일부로 작성된 .bak 파일처럼).

제 경우의 문제는 보안이었습니다. 이 스크립트는 SQL Server (MSSQL)를 시작하는 사용자 (내 경우에는 대개의 경우 "네트워크 서비스")에서 파일을 삭제하려고 시도한 폴더에 대한 액세스 권한이 없기 때문에 실행되었습니다.

따라서 "네트워크 서비스"를 추가하고 "수정"하는 것이 도움이되었습니다.



확장 저장 프로 시저 xp_delete로 문제를 해결하려고 시도 할 때 여러 개인이 추구했던 여러 가지 접근 방식과 솔루션을 읽었습니다. 솔루션은 다음과 같습니다.

  1. SSIS 유지 관리 작업을 구성 할 때 확장에 마침표 (.)를 사용하지 마십시오.
  2. 각 데이터베이스 백업마다 기본 하위 폴더가있는 경우 Include First-Level 하위 폴더를 클릭하십시오.
  3. 맨 위에있는 백업 파일을 클릭하십시오. 유지 보수 태스크는 파일 유형을 점검합니다. 데이터베이스 백업의 경우 백업 파일 헤더를 확인합니다.

내 시나리오에서는 위의 모든 것이 옳았다. 웹에 대한 몇 가지 의견이 있는데, 그 중 일부는 일상적인 xp_delete가 버그라고합니다.

백업 파일이 삭제되지 않을 때 유지 관리를 위해 SQL을 추출하고 SSMS에서 실행했습니다. 결과 메시지는 파일이 SQL Server 백업 파일이 아니 었습니다. 이 메시지는 백업이 성공적으로 복원되어 운영 데이터베이스가 될 수 있으므로 잘못된 것입니다.

데이터베이스 확인에 사용 된 데이터베이스 명령은 다음과 같습니다.

RESTORE HEADERONLY FROM DISK = N'<file path\filename>.Bak'
RESTORE VERIFYONLY FROM DISK = N'<file path\filename>.bak'

위의 두 명령 모두 백업 파일이 유효 함을 나타냅니다.

다음으로 이벤트 뷰어를 열고 연결 관리자에 대한 로그인 오류가 있음을 나타내는 메시지를 찾았습니다. 테스트 연결 단추로 연결을 확인했기 때문에 이것은 이상했습니다. 이 오류는 내가 만든 모든 계정과 관련이 없습니다.

이벤트 뷰어 메시지 :

* 원본 MS SQL SERVER에서 이벤트 ID 17052에 대한 설명을 찾을 수 없습니다. 이 이벤트를 발생시키는 구성 요소가 로컬 컴퓨터에 설치되어 있지 않거나 설치가 손상되었습니다. 로컬 컴퓨터에 구성 요소를 설치하거나 복구 할 수 있습니다. 이벤트가 다른 컴퓨터에서 시작된 경우 표시 정보를 이벤트와 함께 저장해야했습니다.

다음 정보가 이벤트에 포함되었습니다.

심각도 : 16 오류 : 18456, OS : 18456 [Microsoft] [SQL Server Native Client 11.0] [SQL 서버] 'domain \ servername $'사용자가 로그인하지 못했습니다. *

다음으로 xp_delete가 올바르게 작동하는 컴퓨터에 로그온했습니다. 활성 디렉토리를 검토하고 시스템 계정을 찾지 못하면 이벤트 뷰어로 이동하여 유사한 메시지를 찾습니다. 여기서는 domain \ server $의 계정이 시스템 보안에 매핑되어 있음이 분명해졌습니다.

다음 단계는 xp_delete가 작동하지 않은 데이터베이스에 대해 작동했던 데이터베이스 보안을 비교하는 것이 었습니다. xp_delete가 작동하지 않은 데이터베이스에서 보안 상 누락 된 로그인이 2 개있었습니다. 2 개의 누락 된 로그인은 다음과 같습니다. NT AUTHORITY \ SYSTEM NT Service \ MSSQLSERVER

NT 서비스 \ MSSQLSERVER를 추가 한 후 xp_delete가 성공적으로 작동했습니다.

테스트 방법 중 하나는 유지 관리 작업을 사용하여 개별 파일을 삭제하는 것입니다.





maintenance