SQL Server 2012에서 2008로 데이터베이스 이동


29

2008 서버에 복사하려는 SQL Sever 2012 인스턴스에 데이터베이스가 있습니다. 2008 서버는 2012 서버에서 생성 한 백업을 복원 할 수 없습니다 (시도했습니다).

2012 년에 2008 호환 백업을 생성하는 옵션을 찾을 수 없습니다. 뭔가 빠졌습니까?

스키마와 데이터를 버전 독립적 형식으로 내 보내서 2008 년으로 가져올 수있는 쉬운 방법이 있습니까?

데이터베이스는 2012 특정 기능을 사용하지 않습니다. 테이블, 데이터 및 저장 프로 시저가 포함됩니다.

여기 내가 지금까지 시도한 것입니다

2012 서버에서 작업스크립트 생성을 시도했는데 스키마 (저장 프로 시저 포함)를 SQL 스크립트로 생성 할 수있었습니다. 그러나 여기에는 데이터가 포함되지 않았습니다.

2008 시스템에서 해당 스키마를 만든 후 2012 시스템에서 "데이터 내보내기"마법사를 열 수 있었고 2012를 소스 시스템으로, 2008을 대상 시스템으로 구성한 후 테이블 목록이 표시되었습니다. 복사 할 수 있습니다. 모든 테이블 (300+)을 선택하고 마법사를 클릭했습니다. 불행히도 스크립트를 생성하는 데 오랜 시간이 걸리고 "읽기 전용 열 'FOO_ID'에 삽입하는 데 실패했습니다"와 같은 오류가 발생하여 실패합니다.

또한 "2000 이상에서 2005 이상으로"복사 할 수 있다고 주장하는 "데이터베이스 복사 마법사"를 시도했습니다. 두 가지 모드가 있습니다.

  1. 오류와 함께 실패한 "분리 및 연결":

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. 오류로 실패한 SQL 관리 오브젝트 메소드

    IsFileStream 속성을 읽을 수 없습니다. 이 속성은 SQL Server 7.0에서 사용할 수 없습니다. "


직접 수출 할 수 있습니까? 나는 당신의 DB가 얼마나 큰지 모르겠지만, 이것이 더 작은 데이터베이스로 작업 할 때 할 것입니다.
Dave

2
이전 버전의 SQL Server는 최신 버전에서 백업을 복원 할 수 없습니다. 이것은 의도적으로 설계된 동작입니다. 내보내기 기능을 사용하고 테이블과 데이터를 스크립트로 작성하고 스크립트 대상을 SQL 2008로 설정하십시오.

4
"올바른 마음을 가진 사람이 거꾸로 이주하는 이유를 파악하려고 노력 중입니다." -2012 년을 운영하는 프로덕션 서버가 있지만 개발 컴퓨터에는 2008 년만 있습니다. 개발을 돕기 위해 로컬 DB 복사본을 원하지만 개발하지 않은 개발자 컴퓨터에는 2012를 설치하고 싶지 않습니다. 남은 여유 공간이 많으며 설치 시간을 낭비하고 싶지 않습니다. (따라서 뒤로 이동하는 데 몇 시간을 소비하고 있습니다.하지만 그건 저뿐입니다.)
Rich

1
거의 다 왔습니다. 내보내기 섹션에는 스키마뿐만 아니라 데이터를 포함하는 옵션이 있습니다.

1
Ramhound를 추가하고 싶었습니다. 개발 환경에서 SQL 2008 R2를 SQL 2012로 업그레이드 한 다음 업그레이드 된 인스턴스에서 많은 스키마와 데이터를 변경 한 후 VS 2010에서 스키마 또는 데이터를 SQL 2012와 비교할 수 없다는 것을 깨달았습니다. VS 2010 및 VS 2012 용 SSDT는 스키마를 SQL 2012와 비교할 수 있지만 원래 VS 2010 데이터베이스 프로젝트와 호환되지 않으며 데이터를 비교할 수 없습니다. 간단히 말해서, 나는 SQL 2008 R2로 돌아가서 회사가 2012 년으로 나아가기로 결정을 내릴 때까지 기다립니다. 그러나 새로운 스키마 / 데이터를 저장하고 싶습니다. AFAIK 나는 내 마음에 있습니다.
GFK

답변:


40

2012 SQL Management Studio에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 "작업-> 스크립트 생성"을 선택하십시오. 시작 화면을 클릭하고 "스크립트 전체 데이터베이스 및 모든 데이터베이스 개체"를 선택하십시오. "스크립트 저장 방법 지정"페이지에서 "고급"을 클릭하십시오. 팝업 속성 페이지의 "일반"에서 "스크립트 유형의 데이터"를 "스키마 만"에서 "스키마 및 데이터"로 변경하고 "서버 버전 용 스크립트"를 "2012"에서 "2008"로 변경하십시오.

그런 다음이 대규모 SQL 파일의 시작을 편집하여 데이터베이스 작성 방법을 조정하는 방법을 찾아야했습니다.이 q를 참조하십시오 : https : //.com/questions/102829/best-free-text-editor -4GB보다 많은 파일 지원

그리고 마지막으로 SQL Management Studio에서 열 수없는 SQL 스크립트를 실행할 수있는 방법을 찾아야했습니다. https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql- 파일


파일 시작 부분에서 무엇을 조정 했습니까?
JonoRR

1
기억이 안나 네요, 죄송합니다 앱 고유의 것 같아요. 아마도 데이터베이스 이름이나 그와 비슷한 것입니다. 같은 문제를 가진 사람들과 관련이 있다면 여기에 추가했을 것입니다.
Rich

3
@JonoRR CREATE DATABASE 문을 편집하고 대상 서버에서 의미가있는 것으로 데이터 파일 경로를 설정하려고합니다.
Igby Largeman

12

SQL 마이그레이션의 경우 무료 및 오픈 소스 SQL 데이터베이스 마이그레이션 마법사를 사용하십시오.

나는 ~ 1 천만 개의 레코드가있는 5GB 데이터베이스를 가지고 Generate Script를 통해 경로를 시도하고 sqlcmd.exe로 실행했습니다. 우선, 생성 된 스크립트가 항상 올바르게 작동하지는 않았습니다. 둘째, sqlcmd.exe는 사용 가능한 메모리에 대해 불평하면서 대용량 파일에서도 실패 할 수 있습니다. osql.exe는 작동하지만 오래 걸리며 동일한 명령 줄 인수를 갖습니다.

그런 다음 SQL Server를 SQL Azure 데이터베이스로 마이그레이션하기위한 훌륭한 도구를 발견했습니다. 예를 들어 SQL 2012 데이터베이스를 2008 R2로 마이그레이션하려는 경우 SQL Server에서 SQL Server로도 작동합니다. 대량 복사를 사용하는 bcp.exe를 사용합니다. 사용 가능한 GUI 및 명령 줄 (배치) 버전이 있으며 오픈 소스입니다. http://sqlazuremw.codeplex.com/을 참조 하십시오 . 제 경우에는 16 분이 걸렸습니다.

고급 화면에서 대상이 SQL Azure가 아니라 SQL Server임을 선택할 수 있습니다.


1
이 마법사에서 2008 R2를 어디에 설정합니까?
JonoRR

팁 : Express 2012에서 Web 2008로 데이터베이스를 복원했습니다. 매우 쉽습니다.
rkawano

광고 된대로 작동하는지 확인할 수 있습니다. 2014-> 2012, 도메인 간, 로컬 SQL 서버를 수행했습니다. 이 도구는 어떻게 오랫동안 내 검색을 피했습니까! 비 정확한 사용에도 놀랍습니다.
고미 부시

3

SQL을 처음 접했지만 2012 년에서 2008 년으로 마이그레이션 할 수있었습니다.이를 위해 SQL 가져 오기 및 내보내기 유틸리티를 사용했습니다. SQL 2012 서버와 마이그레이션하려는 데이터베이스를 선택하고 마침내 2008 서버를 선택하고 대상 데이터베이스로 새 데이터베이스를 만들었습니다. 효과가있었습니다.


2

APEXSQL 도구를 사용해보십시오 . 여기에는 데이터베이스를 스크립팅하고 데이터를 스크립팅하는 도구가 있습니다.


"$ 299부터"-무료 대안이 있습니까?
Rich

1

2008 시스템에서 해당 스키마를 만든 후 2012 시스템에서 "데이터 내보내기"마법사를 열 수 있었고 2012를 소스 시스템으로, 2008을 대상 시스템으로 구성한 후 테이블 목록이 표시되었습니다. 복사 할 수 있습니다. 모든 테이블 (300+)을 선택하고 마법사를 클릭했습니다. 불행히도 스크립트를 생성하는 데 오랜 시간이 걸리고 "읽기 전용 열 'FOO_ID'에 삽입하는 데 실패했습니다"와 같은 오류가 발생하여 실패합니다.

문제는 ID 열을 삽입 할 수 없다는 것입니다.

  1. 체크하여 모든 테이블을 선택하십시오.
  2. 모든 테이블을 선택하십시오 (이 작업을 수행하는 방법은 첫 번째 테이블을 클릭하고 Shift 키를 누른 상태에서 마지막 테이블을 클릭하는 것입니다).
  3. "매핑 편집"을 클릭하면 다음 버튼 바로 위와 미리보기 옆에있는 것을 볼 수 있습니다.
  4. 창이 열리면 "아이덴티티 삽입 사용"을 선택하고 다음을 클릭 한 다음 계속 진행하십시오. 그것은 나를 위해 일했다.

1

위의 Rich 솔루션 https://superuser.com/a/469597/312310을 따랐으며 훌륭하게 작동했습니다! 감사합니다-아직 투표 할 수 없습니다!

이 작업을 수행하기 위해 수행해야하는 추가 단계는 다음과 같습니다.

  • 논리 파일 이름을 변경하고 경로가 올바른지 확인하십시오. 또한 생성 된 로그 이름을 변경해야했습니다. 그렇지 않으면 mdf 파일을 로그로 덮어 쓰려고 시도한 다음 https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- 이미 사용중인

    기본적으로 [xxxxx] 데이터베이스 만들기 (NAME = xxxxx ', FILENAME = N'C : \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', SIZE = 14400KB, MAXSIZE = 무제한, FILEGROWTH = 1024KB) 로그온 (이름 = N'xxxxxldf ', 파일 이름 = N'C : \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) GO

  • 생성 된 섹션을 주석 처리하고 나중에 사용자 권한을 수동으로 추가해야했습니다.

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

이제는 새로운 Umbraco 7.1.2 데이터베이스를 SQL Server 2008 R2 만있는 웹 서버로 복원 할 수 있습니다.


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