SQL Server 2012 백업을 SQL Server 2008 데이터베이스로 복원 하시겠습니까?


41

SQL Server 2012 데이터베이스 백업을 SQL Server 2008로 복원하는 방법이 있습니까?

파일을 첨부하려고 시도했지만 작동하지 않습니다.


다음 참조가 도움이 될 것입니다. msdn.microsoft.com/en-us/library/ms140052.aspx dba.stackexchange.com/questions/5511/… 감사합니다

이 동등의 또 다른 문제는 아주 잘 대답한다 : superuser.com/questions/468578/...
Cavaleiro

1
이 문제에 큰 작업 대답은 (마이그레이션, 백업하지 / 복원) 여기에 있습니다 : stackoverflow.com/questions/19837886/...은
돈 Jewett

답변:


30

몇 가지 옵션이 있습니다.

옵션 A : 스크립트 생성 옵션을 사용하여 호환 모드에서 데이터베이스를 스크립트 출력합니다.

참고 : 데이터 크기에 따라 스키마 및 데이터를 사용하여 데이터베이스를 스크립팅하는 경우 스크립트는 방대하며 SSMS, sqlcmd 또는 osql (GB로도 가능)에 의해 처리되지 않습니다.

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

옵션 B :

먼저 모든 인덱스, FK 등을 사용하여 테이블을 스크립팅하고 대상 데이터베이스에 빈 테이블을 만듭니다 (옵션은 SCHEMA ONLY (데이터 없음)).

BCP를 사용하여 데이터 삽입

  1. 아래 스크립트를 사용하여 데이터를 bcp로 출력하십시오. 텍스트 모드에서 SSMS를 설정하고 아래 스크립트에서 생성 된 출력을 bat 파일로 복사하십시오.

    -- save below output in a bat file by executing below in SSMS in TEXT mode
    
    -- clean up: create a bat file with this command --> del D:\BCP\*.dat 
    
    select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
        +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
        +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
        +  QUOTENAME(name)  
        +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
        +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
        +  REPLACE(name,' ','') 
        + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
    from sys.tables
    where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
    /*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
    order by schema_name(schema_id)
    
  2. 지정한 폴더에 .dat 파일을 생성 할 bat 파일을 실행하십시오.

  3. 텍스트 모드에서 SSMS를 사용하여 대상 서버에서 아래 스크립트를 다시 실행하십시오.

    --- Execute this on the destination server.database from SSMS.
    
    --- Make sure the change the @Destdbname and the bcp out path as per your environment.
    
    declare @Destdbname sysname
    set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
    select 'BULK INSERT ' 
    /*Remember Tables must be present on destination database */ 
    + QUOTENAME(@Destdbname) + '.' 
    + QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
    + '.' + QUOTENAME(name) 
    + ' from ''D:\BCP\' /* Change here for bcp out path */ 
    + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
    + '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
    + char(10) 
    + 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
    + char(10) + 'go'
       from sys.tables
       where is_ms_shipped = 0
    and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
    and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
        order by schema_name(schema_id) 
    
  4. SSMS를 사용하여 출력을 실행하여 테이블에 데이터를 다시 삽입하십시오.

기본 모드를 사용하므로 매우 빠른 bcp 방법입니다.


매우 유용합니다-방법 B가 저에게 효과적이었습니다 (방법 A에 의해 생성 된 SQL은 7GB이고 SSMS에는 아무것도 없었습니다). 일부 SSID 및 연결된 서버가 제대로 작동하지 않았지만 연결된 서버와 관련이있는 경우는 언제입니까? 프로덕션 환경에서이 제품을 사용하면 행복 할 지 확신 할 수 없지만 테스트 환경을 95 % 빠르게 향상시키는 것은 완벽했습니다.
aucuparia

@aucuparia Some SSIDs and linked servers didn't go across properly. 연결된 서버는 수동으로 스크립팅해야합니다. sp_helprevlogin을 사용하여 SSID를 정리할 수 있습니다. SQLAgent 작업, ssis 패키지 등은 필요에 따라 이동해야합니다. 이 방법의 요점은 2 개의 데이터베이스를 다운 그레이드하거나 병합 할 때 가능한 빨리 데이터를 얻는 것입니다.
Kin Shah

옵션 B는 생성 된 스크립트는 다른 방법으로 너무 커서로, 나를 위해 일을하는 유일한 방법이었다
JumpingJezza

23

아니요, 뒤로 갈 수없고 앞으로 만 갈 수 있습니다. 2008 년에 빈 데이터베이스를 만든 다음 Management Studio에서 스크립트 생성 마법사를 사용하여 스키마 및 데이터 (또는 Red Gate 및 기타 업체의 타사 비교 도구)를 스크립팅 할 수 있습니다. 올바른 대상 버전을 2008로 설정했는지 확인하고 2012 년에 사용했을 수있는 호환되지 않는 항목 (예 : OFFSET 또는 FORMAT)을 제거해야합니다.


8

SQL Server는 이러한 종류의 호환성을 허용하지 않기 때문에 지원되는 방법이 없습니다.

당신이 할 수있는 것은

  1. SQL 2012에서 데이터베이스 복원

  2. 객체 및 데이터에 대한 스크립트 생성

  3. SQL 2012에 고유 한 모든 세부 정보에서 스크립트 정리
  4. 2008 년에 스크립트를 실행

SQL Server 2012가없는 경우 타사 도구를 사용하여 백업을 읽고 데이터와 구조를 추출 할 수 있습니다.

이 경우 SQL 2008에서 빈 데이터베이스를 만들고 ApexSQL DiffApexSQL Data Diff 와 같은 도구를 사용 하여 개체와 데이터를 동기화하십시오. Red-Gate 또는 Idera와 같은 다른 주요 공급 업체에서도 찾을 수 있습니다.

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