it-swarm.dev

섹터 크기가 다른 HDD에서 데이터베이스 백업

개발 환경에서는 오랫동안 다양한 SQL Server 버전과 다양한 환경 구성을 통해 각 제품에 대해 특정 백업 및 복원 스크립트를 문제없이 사용했습니다.

최근 레거시 시스템에 대한 지원을 유지하기 위해 SQL 호환성 수준 2005 (90)가 포함 된 표준 개발 서버로 SQL Server 2012로 업그레이드했습니다. 이제 특정 개발자 컴퓨터에서 데이터베이스 백업을 시도 할 때 다음 오류가 발생합니다.

백업 파일 'D :\MyDB.bak'은 (는) 원래 섹터 크기 512로 포맷되어 현재 섹터 크기가 4096 인 장치에 있기 때문에 사용할 수 없습니다. BACKUP DATABASE가 비정상적으로 종료됩니다.

명령은 다음과 같습니다.

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  NOSKIP ,  STATS = 10,  NOFORMAT

궁금한 점은 섹터 크기가 다르더라도 해당 개발자의 컴퓨터에서 하드웨어 나 파티션이 변경되지 않았으며 이전에는 문제가되지 않았다는 것입니다.

내 연구 (즉, 인터넷 검색)에서이 문제에 대해 WITH BLOCKSIZE 옵션이지만 동일한 오류 메시지가 표시됩니다.

내 쿼리는 다음과 같습니다.

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  NOSKIP ,  STATS = 10,  NOFORMAT, BLOCKSIZE = 4096

섹터 크기가 다른 HDD로 데이터베이스를 백업 및 복원하는 방법에 대해 누구나 알 수 있습니까?

21
codemonkeh

이 문제는 다른 드라이브에서 사용하는 다른 섹터 크기로 인해 발생합니다.

원래 백업 명령을 다음과 같이 변경하여이 문제를 해결할 수 있습니다.

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  STATS = 10,  FORMAT

NOFORMAT을 FORMAT으로 변경하고 NOSKIP을 제거했습니다.

MSDN에 대한 다음 블로그 게시물의 주석 섹션에서이 문제를 해결하기위한 힌트를 찾았습니다. SQL Server– 스토리지 공간/VHDx 및 4K 섹터 크기

4k 섹터 드라이브에 관한 자세한 정보 : http://blogs.msdn.com/b/psssql/archive/2011/01/13/sql-server-new-drives-use-4k-sector-size. aspx

22
Will L

다른 이름으로 백업하기 만하면됩니다.

30
Michael

기존 .bak 파일을 제거하고 다시 실행하십시오.

6
Gayan Dasanayake

2005 년부터 2008 년까지 동일한 문제가있었습니다. 문제는 2008 년에 사용한 것과 동일한 백업 파일 (2005 년에 백업을 하나의 파일에 추가)을 사용하려고한다는 것입니다.

스크립트를 다른 파일로 백업하도록 변경했으며 문제가 해결되었습니다. 이전 파일을 이동/삭제하면 동일한 영향을 줄 것이라고 생각합니다.

4
Greg

OP와 같은 문제가 발생했습니다. 개발자 컴퓨터에는 원격 데이터베이스 서버에서 데이터베이스를 백업하고 백업 파일을 로컬로 저장하는 PowerShell 스크립트가있었습니다. 스크립트는 동일한 백업 파일을 반복해서 덮어 썼으며 스크립트는 몇 년 동안 제대로 작동했습니다. 그런 다음 회전식 미디어 드라이브를 dev 시스템의 SSD에 복제했습니다. 갑자기 OP와 같은 오류가 발생했습니다.

Backup-SqlDatabase : System.Data.SqlClient.SqlError : 백업 파일 '\ DevMachine\Back-Up\Demo.bak'은 원래 섹터 크기가 4096으로 포맷되었으며 현재 섹터 크기가 512 인 장치에 있으므로 백업 파일을 사용할 수 없습니다.

물론 문제를 해결하기 위해 기존 .bak 파일을 모두 삭제할 수 있습니다. 그러나 다시 발생하면 어떻게 될까요? 일관되게 작동하는 명령 줄 솔루션을 원했습니다.

원래 코드는 다음과 같습니다.

Backup-SqlDatabase -ServerInstance "DBServer1" -Database "Demo" -BackupFile "\\DevMachine\Back-Up\Demo.bak" -BackupAction Database -CopyOnly -CompressionOption On -ConnectionTimeout 0 -Initialize -Checksum -ErrorAction Stop

주변을 둘러 본 후 문제를 해결하기 위해 다음과 같이 변경했습니다.

Backup-SqlDatabase -ServerInstance "DBServer1" -Database "Demo" -BackupFile "\\DevMachine\Back-Up\Demo.bak" -BackupAction Database -CopyOnly -CompressionOption On -ConnectionTimeout 0 -Initialize -Checksum -FormatMedia -SkipTapeHeader -ErrorAction Stop

기본적으로이 문제를 해결하기 위해 다음 옵션이 추가되었습니다.

-FormatMedia -SkipTapeHeader

Backup-SqlDatabase cmdlet에 대한 설명서를 읽으면 -FormatMedia가 디스크 백업이 아닌 테이프에만 적용되는 것으로 표시됩니다. 그러나 디스크에 백업 할 때 기존 백업 파일을 제거하는 작업을 수행하는 것으로 보입니다.
- https://docs.Microsoft.com/en-us/powershell/module/sqlps/backup-sqldatabase

-FormatMedia 옵션 만 사용하면 다음과 같은 오류가 발생합니다.

Backup-SqlDatabase : FormatMedia 및 SkipTapeHeader 속성에 설정이 충돌합니다.

추가 옵션을 추가하여 두 번째 오류를 수정했습니다 : -SkipTapeHeader. 분명히 이것은 테이프 백업을위한 것이지만 효과가있었습니다.

4
Van Vangor

나는 같은 문제가 있었지만 restore 만 사용했습니다. Management Studio에서이 오류가 발생했습니다. "지정된 캐스트가 유효하지 않습니다. (SqlManagerUI)" ... 그리고 쿼리에서이 오류 : "SQL Server가이 미디어 제품군을 처리 할 수 ​​없습니다."

그런 다음 간단한 작업을 수행했습니다. 백업 세트를 기본 백업 폴더에 복사했습니다. 예를 들면 다음과 같습니다. C :\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\Backup\bckup.bak 작동했습니다. 이곳에서 복원했습니다. : -S SQL은 섹터 크기에 민감한 것 같습니다.

0
etveszprem