낮은 버전에서 SQL Server 데이터베이스 백업 복원


185

상위 버전의 SQL Server 데이터베이스 백업 파일을 하위 버전의 SQL Server로 복원하는 방법은 무엇입니까?

SQL Server 2008 R2 (10.50.1600)를 사용 하여 백업 파일을 만들었으며 이제는 라이브 서버의 SQL Server 2008 (10.00.1600)에서 파일을 복원하려고합니다 .

SQL Server 2008에 백업을 복원하려고하면 다음과 같은 Restore Failed이유로 오류가 발생합니다 .

데이터베이스는 버전 10.50.1600을 실행하는 서버에서 백업되었습니다. 해당 버전은 10.00.1600 버전을 실행중인이 서버와 호환되지 않습니다.

이 서버에서 백업 파일을 어떻게 복원합니까?


2
당신은 이것을 할 수 없습니다-그것은 불가능합니다. SQL Server에서는 데이터베이스를 상위 버전에서 하위 버전으로 * 다운 그레이드 할 수 없습니다.
marc_s

18
Microsoft는 SQL Server를 만든 이후로 SQL Server에 대한 모든 것을 알고 있지만 두 버전간에 데이터를 이동하는 것은 불가능합니다. 내보내기에서 어떤 종류의 호환성 모드를 사용할 수없는 이유를 이해하지 못합니다. 얼마나 힘들까요?
dvdmn

1
@dvdmn은 톱 기어 에피소드만큼 어렵습니다. 다른 유형, 문장, 블록 레이아웃. 데이터베이스 간 데이터 이동 은 버전에 관계없이 매우 쉽습니다. 그러나 다운 그레이드는 아닙니다 .
Panagiotis Kanavos

2
@PanagiotisKanavos 동의하지 않습니다 .mysql에서는 db를 sql 명령으로 내보내고 모든 버전의 mysql (down 또는 up)에서 복원 할 수 있습니다. 예, sql db를 스크립트로 내보낼 수도 있지만 서로 의존하는 저장된 함수 / 프로 시저가 있으면 쉽지 않습니다. 기본적으로는 유용하지 않습니다.
dvdmn 2016

3
데이터베이스 스크립트를 내보내는 @dvdmn 은 백업과 완전히 다릅니다. 일부 제품은 백업 / 복원 기능을 제공하지 않거나 두 가지 개념을 혼동하지 않습니다. 과거의 백업 부족, 그 이름으로 내보내기 / 스크립팅이라고하는 일부 제품은 역사적 이유로 인해 종종 발생합니다. 이제 그들은 것을 , 그들은 물리적 및 논리적 백업에 대한 이야기로, 용어의 충돌을 해결 유지해야 그들이 스크립팅에 대해 이야기 할 때, 다음 혼동
파나지오티스 Kanavos을

답변:


78

아니요, 데이터베이스를 다운 그레이드 할 수 없습니다. 10.50.1600은 SQL Server 2008 R2 버전입니다. 이 데이터베이스를 복원하려는 SQL Server 2008 인스턴스에 복원하거나 연결할 수있는 방법은 없습니다 (10.00.1600은 SQL Server 2008 임). 유일한 옵션은 다음과 같습니다.

  • 이 인스턴스를 SQL Server 2008 R2로 업그레이드 하거나
  • SQL Server 2008 R2 인스턴스에있는 백업을 복원하고 모든 데이터를 내보내고 SQL Server 2008 데이터베이스로 가져옵니다.

권한 제한으로 인해 클라이언트 라이브 서버를 업그레이드 할 수 없습니다. 내 데이터베이스 크기가 2.5GB 이상이므로 메모리 예외 오류로 인해 데이터 스크립트를 만들 수 없습니다.

9
@Gaurav 데이터를 스크립트로 작성하지 마십시오. 대신 데이터없이 전체 데이터베이스 (테이블, 프로세스, 트리거, 제약 조건 등)를 스크립트로 작성하고 새 데이터베이스를 만든 다음 소스 데이터베이스를 마우스 오른쪽 단추로 클릭하고 "도구"로 이동 한 다음 테이블의 내용을 데이터베이스로 전송하는 "데이터 내보내기".
Jim McLeod

17
나는 "가능한 방법이 없습니다"라는 팻 답변을 매우 의심합니다. 이는 아직 당신이 아직 길을 찾지 못했음을 의미합니다. 여러 가지 이유가있을 수 있으므로 유용한 답변이 아닙니다.
Jay Imerman

6
@Jay에 동의하지 않는 경우도 있습니다. 때로는 "당신은 할 수 없습니다"라는 완벽한 답변이지만, 가능한 경우 해결 방법을 제공하는 것이 더 유용합니다.
Russell Fox

1
@Zhang 궁금한 점이 있으면 의견이 아닌 질문으로 질문하십시오.
Remus Rusanu

83

데이터베이스 스키마 및 데이터로 구성된 파일 을 생성하는 Export Data-Tier Application 이라는 기능을 사용할 수 있습니다 .bacpac.

대상 서버 에서 미리 작성된 파일 에서 새 데이터베이스를 작성하고 채우는 데이터 계층 애플리케이션 가져 오기 옵션을 사용할 수 있습니다..bacpac

데이터베이스 스키마를 전송하려는 경우 파일 작성을 위해 데이터 계층 애플리케이션 추출 을 사용 하고 작성된 데이터베이스 스키마를 배치하기 위해 데이터 계층 애플리케이션 배치를 사용할 수 있습니다 .

SQL 2014에서 SQL 2012 및 SQL 2014에서 SQL 2008R2까지 다양한 버전의 SQL Server에서이 프로세스를 시도해 보았습니다.


8
이것은 더주의를 기울여야 할 답입니다. 실제로 대부분의 경우 Just Work를 수행합니다. 그러나 분리 된 SQL 사용자가 있으면 내보내기 작업이 실패합니다. SQL 버전을 초월하려면 항상 해당 비트를 수동으로 제거 / 추가 할 수 있습니다.
Doctor Blue

3
방금 MSSQLEX2012 (V11)의 MSSQLEX2014 (V12)에서 생성 된 DB를 만들려고 시도했습니다. "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider가 유효하지 않습니다."라는 오류가 발생했습니다.
Craig

5
.bakpac DOES 작업을 사용하여 SQL Server 2014에서 2012로 가져 오지만 올바른 버전의 SSMS가 필요합니다. 예를 들어 SSMS 2016 CTP3을 사용하며 완벽하게 작동했습니다. SSMS 2012를 사용하는 경우에는 효과가 없었습니다. SSMS 2014를 테스트하지 않았습니다.
Greg Gum

1
T-SQL에서이 절차를 스크립팅 할 수 있는지 아는 사람 이 있습니까? 업데이트 (약간 인터넷 검색 후 나 자신에게 응답) : sqlpackage.exe명령 줄을 통해 이것을 자동화 할 수 있습니다 . 더 많은 것을위한 구글.
Alex

1
이것은 매우 크고 복잡한 SQL2017을 SQL2016으로 다운 그레이드하는 데 도움이되는 유일한 솔루션입니다. 성능도 매우 좋습니다.
Keith Blows

35

반드시 작동하지 않습니다

작동합니다

  • 스크립트 생성 - 작업 -> 스크립트 생성 . 스크립팅 옵션 설정 -> 고급 페이지 에서 원하는 대상 SQL Server 버전을 설정해야 합니다. 스키마, 데이터 또는 둘 다를 복사할지 여부를 선택할 수도 있습니다. 생성 된 스크립트에서 비 표현식에서 표현으로 또는 그 반대로 이동하는 경우 mdf / ldf 파일의 DATA 폴더를 변경해야 할 수도 있습니다.

  • Microsoft SQL Server 데이터베이스 게시 서비스 -SQL Server 2005 이상과 함께 제공됩니다. 여기 에서 최신 버전을 다운로드 하십시오 . 전제 조건 : sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi( 여기에서 다운로드 ).


7
실질적인 데이터베이스에는 스크립트 생성을 신뢰할 수 없으므로 가능하면 피하십시오.
Chris

하단의 두 링크는 ​​모두 404입니다.
Sнаđошƒаӽ

29

이것을 완료하기위한 다른 옵션에 대한 2 센트는 다음과 같습니다.

타사 도구 : 아마도 작업을 수행하는 가장 쉬운 방법은 하위 버전에서 빈 데이터베이스를 만든 다음 타사 도구를 사용하여 백업을 읽고 새로 만든 데이터베이스를 백업과 동기화하는 것입니다.

레드 게이트는 가장 인기있는 중 하나입니다하지만 같은 많은 다른 사람이있다 ApexSQL DIFF , ApexSQL 데이터 DIFF , 숙련자 SQL , Idera는 .... 이들은 모두 프리미엄 도구이지만 시험 모드에서 작업을 수행 할 수 있습니다.)

스크립트 생성 : 이미 언급했듯이 SSMS를 사용하여 항상 구조와 데이터를 스크립팅 할 수 있지만 실행 순서를 고려해야합니다. 기본적으로 개체 스크립트는 올바르게 정렬되지 않으므로 종속성을 관리해야합니다. 데이터베이스가 크고 많은 개체가있는 경우 문제가 될 수 있습니다.

가져 오기 및 내보내기 마법사 : 모든 오브젝트를 복원하지 않고 데이터 테이블 만 복원하므로 이상적인 솔루션은 아니지만 필요할 때 빠르고 더러운 수정을 고려할 수 있습니다.


1
Red Gate Sql Clone은 다른 버전의 SQL Server 간 복제를 지원하지 않으므로 수동으로 시도 할 때 발생하는 것과 정확히 동일한 오류를보고합니다.
DarkDeny

29

상위 버전에서 작성된 데이터베이스 (또는 첨부)를 하위 버전으로 복원 할 수 없습니다. 유일한 방법은 모든 오브젝트에 대한 스크립트를 작성하고 스크립트를 사용하여 데이터베이스를 생성하는 것입니다.

여기에 이미지 설명을 입력하십시오

선택 "스키마 및 데이터를" - 당신은 백업 스크립트 파일에 모두 물건을 가지고하려는 경우
선택 만 스키마 - 단지 스키마가 필요합니다.

여기에 이미지 설명을 입력하십시오

예, 이제 데이터베이스의 스키마 및 데이터를 사용하여 스크립트 작성을 완료했습니다.


16

이를 수행하는 다른 방법은 "데이터베이스 복사"기능을 사용하는 것입니다.

원본 데이터베이스> "작업"> "데이터베이스 복사"를 마우스 오른쪽 단추로 클릭하여 찾으십시오.

데이터베이스를 더 낮은 버전의 SQL Server 인스턴스로 복사 할 수 있습니다. 이것은 SQL Server 2008 R2 (SP1)-10.50.2789.0에서 Microsoft SQL Server 2008 (SP2)-10.0.3798.0까지 나를 위해 일했습니다.


3
대상이 SQL Server Express "대상 서버가 SQL Server 2005 이상 Express 인스턴스 일 수 없음"인 경우에는 작동하지 않습니다. social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Ohad Schneider가

2
이 방법으로 SQL Server 2012에서 SQL Server 2008로 데이터베이스를 복사 할 수도 없습니다.
Twinkles

1
데이터베이스 복사 분리 / 첨부 작업입니다
Panagiotis Kanavos

1
이 힌트에 감사드립니다! 그것은 매우 도움이되었습니다. SQL 2008 R2에서 SQL 2008로 데이터를 복사했습니다.
dns_nx

8

당신은 이것을 시도 할 수 있습니다.

  1. SQL Server 2008에 데이터베이스를 만듭니다.
  2. 데이터 가져 오기 기능을 사용하면 SQL Server R2 이상에서 데이터를 가져올 수 있습니다.
  3. "RedGate SQLCompare"를 사용하여 스크립트를 동기화하십시오.

6

작업 -> 스크립트 생성 ...으로 이동 하십시오 .

에서 고급 에서 "스크립트에 대한 데이터 유형"을 선택 "Schema and data"하고 낮은 버전에서이 스크립트를 실행 해보십시오.


5
이것은 매우 좋은 솔루션이지만 더 큰 데이터베이스에서는 매우 좋지 않습니다.
veljasije

5

예쁘지는 않지만 SQL 2008 R2 설치에이 옵션이 설치되어 있는지 확인한 방법입니다.

1) SQL Server 2008 R2 "작업"에서 데이터베이스를 마우스 오른쪽 단추로 클릭하십시오. 마법사의 "스크립트 생성"에서 첫 번째 단계에서 전체 데이터베이스 및 개체를 선택하십시오. "스크립팅 옵션 설정"단계에서 "고급"단추가 표시되면이를 선택하고 R2 버전이 아닌 "서버 버전 용 스크립트"= SQL Server 2008 "을 선택해야합니다."데이터 가져 오기 "이므로 중요한 단계입니다. 그 자체로는 모든 기본 키, 구성 요소 및 저장 프로 시저와 같은 다른 개체를 가져 오지 않습니다. "

2) 쿼리 창을 사용하여 새 설치 또는 데이터베이스 인스턴스 SQL Express 또는 SQL Server 2008에서 생성 된 SQL 스크립트를 실행하거나 저장된 .sql 스크립트를 열고 실행하면 새 데이터베이스가 표시됩니다.

3) 이제 새 데이터베이스를 마우스 오른쪽 단추로 클릭하고 "작업"을 선택하십시오. "데이터 가져 오기"는 R2 데이터베이스로 소스를 선택하고 새 데이터베이스로 대상을 선택하십시오. "하나 이상의 테이블 또는 뷰에서 데이터 복사", 맨 위 확인란을 선택하여 모든 테이블을 선택한 후 다음 단계에서 패키지를 실행하면 이전 버전의 모든 항목이 있어야합니다. 이것은 2005 버전으로 돌아가는데도 효과적입니다. 이것이 누군가를 돕기를 바랍니다.


안녕하세요 @ motogeek, 같은 문제가 있지만 프로덕션 서버의 R2와 로컬의 2008이 있습니다.이 경우 가져 오기 및 내보내기 데이터를 사용할 수 없습니다. 이에 대한 이상적인 솔루션은 무엇입니까?
Abbas

2

작은 테이블에 BCP를 사용하거나 사용하지 않을 수 있습니다.

BCP OUT 명령 :-

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

BCP IN 명령 :-Invoicescopy1에 대한 테이블 구조를 만듭니다.

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c

0

이 게시물은 오래된 게시물이지만 고맙지 만 사람들은 Azure Migration Wizard (Codeplex에서 사용 가능-Codeplex가 현재 입력 중이므로 연결할 수 없음)가 쉽게 수행 할 수 있음을 아는 것이 유용 할 수 있습니다.


이 도구는 SQL Server Data Migration Assistant로 대체되었습니다. 다음을 참조하십시오 : stackoverflow.com/questions/46517060/…
ahwm

0

SSMS에서 가져 오기 / 내보내기 마법사를 사용하여 모든 것을 마이그레이션해야합니다.

백업 / 복원 또는 분리 / 연결을 사용하여 가능한 "다운 그레이드"는 없습니다. 따라서해야 할 일은 :

  1. 새 SSMS / SQL 버전을 실행하는 서버에서 데이터베이스를 백업하십시오.
  2. "작업"메뉴를 확장하고 (대상 데이터베이스를 마우스 오른쪽 단추로 클릭 한 후) "데이터 가져 오기"옵션을 선택하여 생성 된 .bak 파일에서 데이터를 가져 오십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.