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/...のおかげ

そここの1に等しい別の問題であり、非常によく答えている:superuser.com/questions/468578/...
Cavaleiro

1
ここでは、この問題に大きな作業の回答(移動ではなく、バックアップ/復元)があります:stackoverflow.com/questions/19837886/...
ドン・ジェウェット

回答:


30

いくつかのオプションがあります:

オプションA:[スクリプトの生成]オプションを使用して、互換モードでデータベースをスクリプト出力します。

注:データサイズに応じてスキーマとデータを使用してデータベースをスクリプトアウトすると、スクリプトは大規模になり、SSMS、sqlcmd、またはosqlで処理されなくなります(GB単位の場合もあります)。

ここに画像の説明を入力してください

オプションB:

最初にすべてのインデックス、FKなどを使用してテーブルを最初にスクリプト化し、宛先データベースに空白のテーブルを作成します-スキーマのみのオプション(データなし)。

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。リンクサーバーは、手動でスクリプト化する必要があります。SSIDは、sp_helprevloginを使用して変換できます。SQLAgentジョブ、ssisパッケージなどは、必要に応じて移動する必要があります。この方法のポイントは、2つのデータベースをダウングレードまたはマージするときに、データをできるだけ速く取得することです。
キンシャー

生成されたスクリプトは、他の方法で大きすぎるとしてオプション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.