SQL Server 2012 데이터베이스 백업을 SQL Server 2008로 복원하는 방법이 있습니까?
파일을 첨부하려고 시도했지만 작동하지 않습니다.
SQL Server 2012 데이터베이스 백업을 SQL Server 2008로 복원하는 방법이 있습니까?
파일을 첨부하려고 시도했지만 작동하지 않습니다.
답변:
몇 가지 옵션이 있습니다.
옵션 A : 스크립트 생성 옵션을 사용하여 호환 모드에서 데이터베이스를 스크립트 출력합니다.
참고 : 데이터 크기에 따라 스키마 및 데이터를 사용하여 데이터베이스를 스크립팅하는 경우 스크립트는 방대하며 SSMS, sqlcmd 또는 osql (GB로도 가능)에 의해 처리되지 않습니다.
옵션 B :
먼저 모든 인덱스, FK 등을 사용하여 테이블을 스크립팅하고 대상 데이터베이스에 빈 테이블을 만듭니다 (옵션은 SCHEMA ONLY (데이터 없음)).
BCP를 사용하여 데이터 삽입
아래 스크립트를 사용하여 데이터를 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)
지정한 폴더에 .dat 파일을 생성 할 bat 파일을 실행하십시오.
텍스트 모드에서 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)
SSMS를 사용하여 출력을 실행하여 테이블에 데이터를 다시 삽입하십시오.
기본 모드를 사용하므로 매우 빠른 bcp 방법입니다.
Some SSIDs and linked servers didn't go across properly
. 연결된 서버는 수동으로 스크립팅해야합니다. sp_helprevlogin을 사용하여 SSID를 정리할 수 있습니다. SQLAgent 작업, ssis 패키지 등은 필요에 따라 이동해야합니다. 이 방법의 요점은 2 개의 데이터베이스를 다운 그레이드하거나 병합 할 때 가능한 빨리 데이터를 얻는 것입니다.
SQL Server는 이러한 종류의 호환성을 허용하지 않기 때문에 지원되는 방법이 없습니다.
당신이 할 수있는 것은
SQL 2012에서 데이터베이스 복원
객체 및 데이터에 대한 스크립트 생성
SQL Server 2012가없는 경우 타사 도구를 사용하여 백업을 읽고 데이터와 구조를 추출 할 수 있습니다.
이 경우 SQL 2008에서 빈 데이터베이스를 만들고 ApexSQL Diff 및 ApexSQL Data Diff 와 같은 도구를 사용 하여 개체와 데이터를 동기화하십시오. Red-Gate 또는 Idera와 같은 다른 주요 공급 업체에서도 찾을 수 있습니다.