SQL Server 2012からSQL Server 2008 R2に取得したバックアップを復元しようとしていますが、エラーが発生します
指定されたキャストは無効です。 (SqlManagerUI)
これに対する解決策がある場合はコメントしてください
ありがとう。
注、上記の回答のいくつかはかなり古くなっています!これは実行でき、すべてSQL Server Management Studio(SQL MS)内で実行できます
データベースを「ダウングレード」するために採用できる方法は多数ありますが、最近発見したものであり、SQL MS 2012の初期リリースでは見つからなかったと思われるものは、データベースのコピーウィザードです。 2012サーバーインスタンスから2008 R2インスタンスにデータベースをコピーする方法は次のとおりです。
2012インスタンスでは、コピー/「ダウングレード」するデータベースを右クリックし、「タスク」>「データベースのコピー...」を選択します。
「データベースのコピーウィザードへようこそ」をクリックして、[次へ]をクリックします。
「ソースサーバーの選択」:「ソースサーバー」を2012インスタンス(または上位バージョンのサーバーインスタンス)として設定し、適切な認証を設定します。 [次へ]をクリックします。 [注意。サーバーエージェントサービスが実行されている必要があります]
「宛先サーバーの選択」:「宛先サーバー」を2008 R2(または以前のバージョンのインスタンス)として設定し、適切な認証を設定します。 [次へ]をクリックします。 [注意。サーバーエージェントサービスが実行されている必要があります]
「転送方法の選択」この例では、「SQL管理オブジェクトの方法を使用する」を選択して、[次へ]をクリックします。
必要なデータベースの移動またはコピーを選択して、[次へ]をクリックします。
宛先データベースのパスや論理名などを設定します。データベースが存在する場合に必要なオプションを選択します。 [次へ]をクリックします。
統合サービスパッケージを構成し、[次へ]をクリックします。
この例では、[パッケージのスケジュール]オプションで[すぐに実行]オプションを選択し、[次へ]をクリックします。
「ウィザードを完了」、[完了]をクリックしてパッケージを実行し、「ダウングレードされた」データベースを作成します。
ハッピーデイ、これで完了です。 :]
私が見つけた別の方法は、SQLデータベースの移行Wizardでした。これは、Microsoftによって作成され、上記のウィザードの作成元と思われます(わかりません)。ここで入手してください http://sqlazuremw.codeplex.com/ 。このパッケージを使用してデータベースをSQL Server 20012から2008 R2に移行するには、次の操作を実行できます。
注。 Microsoftは、CodeplexからSQLAzureMWを削除しました。個人的に利用可能にしました here
SQLAzureMW.exeを実行します。
メインウィンドウの右側から[分析/移行]ラジオボタンを選択します。
「SQLデータベースの最新サービスバージョン(V12)」としてターゲットサーバーを選択します。 [次へ]をクリックします。
SQL Server 2012インスタンスに接続します。マシンのサーバー名は「VAIOE\SQLSERVER2012」で、Windows認証を使用し、データベースオプションから「Master DB(すべてのデータベースをリスト)」を選択し、「ログイン情報を保存」を選択します。 [接続]をクリックします。
移行するために必要なデータベースを選択します[今のところGVHレポートデータベースを使用]。 [次へ]をクリックします。
「すべてのデータベースオブジェクトのスクリプト」を選択します。
[アドバンス]をクリックして、次のオプションを変更します。
a。 [全般]で[ターゲットサーバー]を[SQLサーバー]に設定します。
b。 [テーブル/ビューオプション]で、[スクリプトテーブル/データ]を[データ付きテーブルスキーマ]に設定します。 「データベースエンジンストアドプロシージャ」を「True」に設定します。 「セキュリティ関数」、「セキュリティストアドプロシージャ」、および「システム関数」を「True」に設定します。
[OK]をクリックします。 [次へ]をクリックします。
選択内容を確認します。 [次へ]をクリックします。
「スクリプトを生成する準備ができましたか?」というメッセージが表示されたら、[はい]をクリックします。これにより、スクリプト生成が開始されます。これが完了したら、[次へ]をクリックします。
これで、別の接続ダイアログが表示されます。今回は、ターゲットサーバー(SQL Server 2008 R2インスタンス)上のデータベースを選択します。マスターデータベースを選択して、ターゲットDBを選択できるようにします。 [接続]をクリックします。
ここで、新しいデータベースに移行する可能性があるため、[データベースの作成]をクリックします。
データベースのターゲット名を入力し、「照合」を「」のままにしてください。これは関係ありません。 [データベースの作成]をクリックします。 [次へ]をクリックします。
「宛先サーバーに対してスクリプトを実行しますか?」というメッセージが表示されたら、[はい]をクリックします。
これにより、生成されたスクリプトを使用してスキーマが設定され、ロードが行われますが、前の方法とは異なり、データは非常に高速なBCPを使用してバルクロードされます。これもすべて内部で行われるため、大量の.sqlスクリプトファイルなどは生成されません。
[終了]をクリックします。
できました。 Management Studioを開いて、SQL Server 2012と2008 R2の両方のインスタンスに接続すると、2012年のソースデータベースのスキーマが、作成されたばかりのターゲットデータベースと一致することがわかります。
上記の2つのプロセスはほぼ同じで、同じ機能を提供します。特にAzureに移行する必要がある場合、または方法1が失敗する場合を除き、後者は実行しません。
これが誰かの助けになることを願っています。
データベースを右クリックして、[タスク]-> [スクリプトの生成]を選択します
復元するものを選択するか、デフォルトでデータベース全体を選択します。
次に、[次へ]をクリックし、[詳細設定]をクリックして、2008または2008 R2などの復元する 'ssmsバージョン'の 'サーバーバージョンのスクリプト'を選択します。
また、「スクリプト化するデータのタイプ」から「スキーマとデータ」を選択します
最後に、目的のssmsでこの.sqlファイルを実行し、最初の行使用データベースのデータベース名を変更します
データベースが存在しない場合は作成し、スクリプトの実行でエラーが発生した場合は、alterキーワードからスクリプトを実行して最後まで完了します。
SQL Serverの上位バージョンから下位バージョンに決して復元することはできません。唯一のオプションは、データベースをスクリプト化してから、SSIS、BCP、リンクサーバー経由でデータを転送するか、データをスクリプト化することです。
To:Killercamソリューションをありがとう。最初の解決策を1時間試しましたが、うまくいきませんでした。
スクリプト生成メソッドを使用して、以下の手順としてSQL Server 2012からSQL Server 2008 R2にデータを移動しました。
2012 SQL Management Studioで
わたしにはできる。
2012
から2008
に復元することはできません。 red-gate SQL compare
などのツールを使用して、スキーマなどをコピーできます(2012固有のものが使用されていない場合)。コピーするデータもある場合は、 Data Compare
ツールを使用できます。14日間の無料試用版を入手できると思います。
データベースを「downgrade "SQL Serverのあるバージョンから下位のバージョンに変更する唯一の組み込み方法は、難しい方法です。データベース全体、スキーマand data、次に、ターゲットサーバーでスクリプトを実行します。
これは実行可能ですが、残忍な傾向があります。
ここに私のためのトリックをした別のオプションがあります: https://dba.stackexchange.com/a/4434
そこで使用しましたOption B。これは私の考えではないため、すべてのクレジットは元の著者に帰属します。リンクが機能しないこともあることを知っているので、ここに置いています。ストーリー全体を手元に置いておくことをお勧めします。
私からの1つのヒント:最初にスキーマの非互換性がある場合は解決します。その後、データを簡単に入力する必要があります。
オプションA:スクリプトの生成オプションを使用して、互換モードでデータベースをスクリプトアウトします。
注:データサイズに応じて、スキーマとデータを使用してデータベースのスクリプトを作成する場合、スクリプトは大規模であり、SSMS、sqlcmd、またはosqlで処理されません(GB単位の場合もあります)。
オプションB:
最初にすべてのインデックス、FKなどを含むテーブルを最初にスクリプト化し、宛先データベースに空のテーブルを作成します-スキーマのみのオプション(データなし)。
BCPを使用してデータを挿入する
I.以下のスクリプトを使用してデータを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)
II。指定したフォルダーに.datファイルを生成するbatファイルを実行します。
III。テキストモードで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)
IV。 SSMSを使用して出力を実行し、データをテーブルに挿入します。
これはネイティブモードを使用するため、非常に高速なBCPメソッドです。
既に述べたように、「バックアップ」および「復元」機能を使用して、SQL Server 2012 DBからSQL Server 2008 DBに移行することはできません。しかし、私が書いたプログラム SQL Server Scripter は、SQL Serverデータベースに接続し、データベース、そのスキーマ、およびデータをスクリプト化します。 BitBucketからgitクローンを作成し、Visual Studio 2010以降でコンパイルできます(それ以降のバージョンの場合は、.csproj
)。