FlySpeed Database Migration でSalesforce データをSQL Server に移行（コピー）

SQL Server へのマイグレーションツール、[FlySpeed Migrate]https://www.activedbsoft.com/overview-migrate.html) は、ODBC データソースで接続したデータをSQL Server やMySQL にコピーできるツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/24487108-8f12-7222-c495-53ebed504a86.png)

この記事では、Salesforce データのコピーをSQL Server に作成します。CData ODBC Driver for Salesforce を利用することによって、Salesforce データをFlySpeed Database Migration ツールで利用可能にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/6d6e6e8e-3257-a1ab-ec8a-5fc9f0970a6e.png)



## CData ODBC Driver for Salesforce のインストールと接続設定
## ドライバーのダウンロード
[CData ODBC Driver for Salesforce](https://www.cdata.com/jp/drivers/salesforce/odbc/) は、Salesforce 内のデータを仮想RDB としてODBC 経由でのアクセスを可能にするライブラリです。

* 32-bit、64-bit アプリケーションをサポート。
* ODBC 3.8 準拠のネイティブプロトコルドライバー。
* ANSI SQL-92 をサポート。
* Unicode をサポートし、多様な言語、データをサポート。
* Windows、Linux、macOS にクロスプラットフォームで対応するODBC Drivers。

製品をDL してインストールを行います。デフォルト設定のままでクリックしてDL してください。

### Salesforce への接続
Salesforce アカウントへの接続にはSalesforce 側でセキュリティトークンを発行する必要があります。

Salesforce 画面の右上の［アカウント名］→［私の設定］を開き、［個人用］からセキュリティトークンを発行しておきます。

CData ODBC Driver for Salesforce のインストール終了後にODBC DSN の設定画面が開きます。

* User: Salesforce のユーザー名
* Password：Salesforce のパスワード
* Serucity Token：上記で取得したセールストークン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/8d107c66-6b39-2117-7bec-bd1683a70ff1.png)

［接続のテスト］で接続を確認し、問題がなければ［OK］を押して接続を確立します。

## FlySpeed Database Migration でSalesforce データをコピー
[FlySpeed Migrate]https://www.activedbsoft.com/overview-migrate.html) をダウンロードします。Free 版は、一部のデータしかマイグレーションできないそうです。とりあえず今回は動作確認なのでFree 版を使っています。

今回はSalesforce データをODBC 経由で取得し、SQL Server に新規テーブルを作ってデータを移行します。

まずは、ODBC 接続を選択します。
![スクリーンショット (887).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/53757de0-af53-d797-4bc4-3ec5e66c25c8.png)

上のステップで作成した［CData Salesforce Source］を選択します。
![スクリーンショット (877).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/73f07aaf-ecd9-60a1-98e1-d50f9b90255a.png)

スキーマおよびオブジェクト選択です。設定してもいいですし、すべてのオブジェクトを取得することもできます。CData ODBC Driver によってSaleforce 内のオブジェクトがRDB 的なスキーマを付与されています。
![スクリーンショット (878).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/db712c6e-7997-a5a8-dcb2-2a0b43446094.png)

移行するオブジェクトを選択します。今回は［Lead］オブジェクトを使います。
![スクリーンショット (879).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/efe63e63-50fd-5ebc-6be2-4312b106c0ce.png)

移管先のSQL Server のデータベースを設定します。今回は事前に［FlySpeed］という空のデータベースを作っておきましたので、それを使います。テーブルなどはまだ作っていません。
![スクリーンショット (880).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/c34a2715-bbd4-ca6d-3c89-7a7513f46b28.png)

これまでのステップで指定したSalesforce Lead オブジェクトのテーブルスキーマをSQL Server に作成しに行きます。ODBC 経由で取得したスキーマを書き込むSQLを自動生成してくれていますので、実行します。実行されたSQL は以下でした。

```SQL

CREATE TABLE [Lead](
    [Id] nvarchar(36) NOT NULL,
    [IsDeleted] bit NOT NULL,
    [MasterRecordId] nvarchar(36) NULL,
    [LastName] nvarchar(160) NOT NULL,
    [FirstName] nvarchar(80) NULL,
    [Salutation] nvarchar(80) NULL,
    [Name] nvarchar(242) NOT NULL,
    [Title] nvarchar(256) NULL,
    [Company] nvarchar(510) NOT NULL,
    [Street] nvarchar(510) NULL,
    [City] nvarchar(80) NULL,
    [State] nvarchar(160) NULL,
    [PostalCode] nvarchar(40) NULL,
    [Country] nvarchar(160) NULL,
    [Latitude] float NULL,
    [Longitude] float NULL,
    [GeocodeAccuracy] nvarchar(80) NULL,
    [Phone] nvarchar(80) NULL,
    [MobilePhone] nvarchar(80) NULL,
    [Fax] nvarchar(80) NULL,
    [Email] nvarchar(160) NULL,
    [Website] nvarchar(510) NULL,
    [PhotoUrl] nvarchar(510) NULL,
    [Description] ntext NULL,
    [LeadSource] nvarchar(80) NULL,
    [Status] nvarchar(80) NOT NULL,
    [Industry] nvarchar(80) NULL,
    [Rating] nvarchar(80) NULL,
    [AnnualRevenue] float NULL,
    [NumberOfEmployees] int NULL,
    [OwnerId] nvarchar(36) NOT NULL,
    [IsConverted] bit NOT NULL,
    [ConvertedDate] date NULL,
    [ConvertedAccountId] nvarchar(36) NULL,
    [ConvertedContactId] nvarchar(36) NULL,
    [ConvertedOpportunityId] nvarchar(36) NULL,
    [IsUnreadByOwner] bit NOT NULL,
    [CreatedDate] datetime NOT NULL,
    [CreatedById] nvarchar(36) NOT NULL,
    [LastModifiedDate] datetime NOT NULL,
    [LastModifiedById] nvarchar(36) NOT NULL,
    [SystemModstamp] datetime NOT NULL,
    [LastActivityDate] date NULL,
    [LastViewedDate] datetime NULL,
    [LastReferencedDate] datetime NULL,
    [Jigsaw] nvarchar(40) NULL,
    [JigsawContactId] nvarchar(40) NULL,
    [CleanStatus] nvarchar(80) NULL,
    [CompanyDunsNumber] nvarchar(18) NULL,
    [DandbCompanyId] nvarchar(36) NULL,
    [EmailBouncedReason] nvarchar(510) NULL,
    [EmailBouncedDate] datetime NULL,
    [SICCode__c] nvarchar(30) NULL,
    [ProductInterest__c] nvarchar(510) NULL,
    [Primary__c] nvarchar(510) NULL,
    [CurrentGenerators__c] nvarchar(200) NULL,
    [NumberofLocations__c] float NULL
)
GO

ALTER TABLE [Lead]
    ADD CONSTRAINT [Lead_PRIMARYKEY_Id] 
    PRIMARY KEY CLUSTERED ([Id])
WITH (
    IGNORE_DUP_KEY = OFF)
GO

```

![スクリーンショット (882).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/39d093cf-c89c-28da-5277-48ea2a28661c.png)

dbo.Lead テーブルが作成されたので、移行先テーブルとして選択します。ここでフィールドごとのマッピングがカスタマイズできます。カスタマイズなしで次に進みます。
![スクリーンショット (883).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/91545af8-11b7-1652-7ed6-05fe282f09b2.png)

文字セットやインポートオプションを設定可能です。
![スクリーンショット (884).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/b9ce09f4-3256-a6ed-fb20-498625e0b535.png)

内容を確認して、Migration（移行）を実行。
![スクリーンショット (885).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/c2d094f7-c349-1b2b-e140-9994892f0472.png)

Lead オブジェクトがコピーされました。
![スクリーンショット (886).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/51a53f6e-1714-4de8-e84a-23cfba9bf7ac.png)

SQL Server 側をSSMS で見てみましょう。たしかにSalesforce のLead データが移行されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/5e9ee969-81f0-023c-40b7-c8519dffa268.png)

## まとめ
このようにCData ODBC Driver for Salesforce を使うことで、FlySpeed Database Migration でSalesforce データをSQL Server にノーコードで移行することができました。

[CData ODBC Driver ](https://www.cdata.com/jp/odbc/)は、他にも150以上のSaaS およびNoSQL へのODBC アクセスを実現します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116843/1ba50445-448c-3c24-611e-ccb75897cdfb.png)

また、CData では、[CData Sync](https://www.cdata.com/jp/sync/)という製品でSQL Server だけでなく多様なRDB やクラウドデータストア・DWH へのデータ移行や反復同期が可能です。より細かなクエリ設定、タイマー起動の反復同期、差分更新などのニーズにもお答えします。