SQL Server 2012データベースのバックアップをSQL Server 2008に復元する方法はありますか?
ファイルを添付しようとしましたが、うまくいきません。
いくつかのオプションがあります:
オプションA:[スクリプトの生成]オプションを使用して、互換モードでデータベースをスクリプト化します。
注:スキーマとデータを使用してデータベースをスクリプト化すると、データサイズによっては、スクリプトが大量になり、SSMS、sqlcmd、またはosql(GBの場合もある)で処理されなくなります。
オプションB:
最初にすべてのインデックス、FKなどを含むテーブルを最初にスクリプト化し、宛先データベースに空のテーブルを作成します-スキーマのみのオプション(データなし)。
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メソッドです。
いいえ、後退することはできません。前進するだけです。 2008年に空のデータベースを作成してから、Management Studioの[スクリプトの生成]ウィザードを使用して、スキーマとデータ(またはRed Gateなどのサードパーティの比較ツール)をスクリプト化できます。正しいターゲットバージョンを2008に設定していることを確認してください。2012で使用した可能性のある互換性のないもの(OFFSETやFORMATなど)を具体化する必要があります。
SQL Serverではこの種の互換性が許可されていないため、これをサポートする方法はありません。
あなたができることは
sQL 2012でデータベースを復元する
オブジェクトとデータのスクリプトを生成する
SQL Server 2012がない場合は、サードパーティのツールを使用してバックアップを読み取り、データと構造を抽出できます。
この場合、SQL 2008で空のデータベースを作成し、 ApexSQL Diff や ApexSQL Data Diff などのツールを使用してオブジェクトとデータを同期します。 Red-GateやIderaなど、他の主要ベンダーからも入手できます。