SQL Server 2012(32ビット)からSQL Server 2005(64ビット)にデータベースを移動する必要がある場合、どのようなオプションがありますか?
私はできないことを知っています:
自分ができるということがわかっている:
より簡単なオプションはありますか?
あなたは以下の方法に従うことができます:
注:新しいデータ型などの新機能を使用している場合は、エラーが発生するため、テストする必要があります。
方法1:ネイティブツールの使用
データベースSCHEMA_ONLYのスクリプトを作成し、移行先サーバーで空のデータベースを再作成します。以下はスクリーンショットです。
BCP OUTとBULK INSERTを使用してデータを挿入します。
以下は、パート2で役立つスクリプトです。
/************************************************************************************************************************************************
Author : KIN SHAH *********************************************************************************************************************
Purpose : Move data from one server to another*********************************************************************************************
DATE : 05-28-2013 *********************************************************************************************************************
Version : 1.0.0 *************************************************************************************************************************
RDBMS : MS SQL Server 2008R2 and 2012 *************************************************************************************************
*************************************************************************************************************************************************/
-- 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_OUT\*.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_OUT\' -- 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) <> 'some_schema_exclude' -- Optional to exclude any schema
order by schema_name(schema_id)
--- 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 = 'destination_database_Name' -- 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_OUT\' -- 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) <> 'some_schema_exclude' -- Optional to exclude any schema
order by schema_name(schema_id)
方法2:サードパーティツールの使用
移行先サーバーに空のデータベースを作成します。 Redgateのスキーマ比較とデータ比較を使用して、データを作成し、宛先サーバーにロードします。
注:私はRedgateのスキーマとデータ比較を使用しましたが、これらはこの種のタスクに最適なツールであるため、サードパーティのツールを使用している場合は、Redgateをお勧めします。
ここですでに提案されている方法に加えて、BACPACファイルを作成して宛先にインポートすることもできます。これは、データベースをオンプレミスからAzureクラウドデータベースに移行することをマイクロソフトが推奨する方法と似ています。
スキーマとデータのエクスポートの組み合わせであり、データベースのバージョンに依存しないので、理論的にはデータベースを任意のバージョンから任意のバージョンにインポートできます。
それの欠点は、ソースでBACPACファイルを生成する前に、ある種の厳密な検証プロセスを実行することです。データベース外のオブジェクト(ユーザーデータベースまたはシステムデータベース)への参照がある場合、または暗号化されたオブジェクト。しかし、運がよくて失敗しない場合は、かなり簡単な解決策になる可能性があります。
必要なのは、新しいSSMSバージョン(17または18)のいずれかです: https://docs.Microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms
BACPACファイルの作成を開始するには、データベースを右クリックして[データ層アプリケーションのエクスポート...]を選択します(「データ層アプリケーションの抽出...」と混同しないように注意してください)。
手順を案内する簡単なウィザードが表示されます。完了したら、移行先サーバーで「データ層アプリケーションのインポート...」を使用できます。これは、「データベース」ノードを右クリックして表示できます(ここでも、「データの展開」と混同しないでください。 -層アプリケーション... "):
これも、手順を説明する簡単なウィザードを示します。
Sql Serverのバージョンを下げることは大変な作業です。
;のように減少するいくつかのオプションがあります)
まず、すべてのデータベースオブジェクトスクリプトを作成し、宛先サーバーで実行します。
その後、使用できます。
しかしRedGate Data Compareツールの場合、
主キーを持つテーブルのみを比較することを考慮する必要があります。したがって、主キーを持たないテーブルの場合、他の方法を使用する必要があります