SQL Server 2012データベースのバックアップをSQL Server 2008に復元する方法はありますか?
ファイルを添付しようとしましたが、動作しません。
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メソッドです。
Some SSIDs and linked servers didn't go across properly。リンクサーバーは、手動でスクリプト化する必要があります。SSIDは、sp_helprevloginを使用して変換できます。SQLAgentジョブ、ssisパッケージなどは、必要に応じて移動する必要があります。この方法のポイントは、2つのデータベースをダウングレードまたはマージするときに、データをできるだけ速く取得することです。
                    いいえ、前に戻ることはできません。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などの他の主要ベンダーからも入手できます。