> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sync.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SQL Server

CData Sync アプリケーションからSQL Server コネクタを使用して、サポートされている任意のデータソースから同期先のSQL Server へデータを移動できます。これを行うには、コネクタを追加し、コネクタへの認証を行い、接続を完了する必要があります。

## 前提条件

このセクションでは、CData Sync でSQL Server 同期先コネクタを追加する前に完了しておく必要がある前提条件について説明します。サポートされているSQL Server のバージョンと、安全で信頼性の高いデータレプリケーションをサポートするための専用ユーザーアカウントの推奨作成方法について概説します。

### バージョンサポート

Sync は、SQL Server 2008（メジャーバージョン10）以降への接続をサポートしています。

### Sync ユーザーの作成

十分な権限を持つ任意のSQL ユーザーアカウントを使用して、SQL Server に接続できます。ただし、ベストプラクティスとして、CData では、Sync アプリケーションからのデータレプリケーション専用のSQL Server ユーザーを作成することを推奨します。SQL Server Management Studio で次のコマンドを送信して、新しいSQL Server ログインと、**sync\_user** という名前の関連データベースユーザーを作成できます。

```sql theme={null}
  -- Create the login sync_user with password '<Password>'.

CREATE LOGIN sync_user
WITH PASSWORD = '<Password>';
GO
  -- Create a database user for this new sync_user login.
CREATE USER sync_user
FOR LOGIN sync_user;
GO
```

デフォルトでは、新しい**sync\_user** アカウントにはロールや権限が割り当てられていません。Sync がSQL Server 同期先接続でデータの書き込み、変更、削除を行えるようにするには、**sync\_user** にINSERT、UPDATE、DELETE 権限を付与する必要があります。これらの権限は、**sync\_user** に**db\_datawriter** ロールを付与することでデータベースレベルで設定でき、これによりデータベース内のすべてのテーブルに対するINSERT、UPDATE、DELETE 操作が許可されます。

SQL Server 同期先接続では、受信データを既存のテーブルに正しくマッピングするために、ターゲットデータベース内のテーブルスキーマを読み取る権限も必要です。これを実現するには、**sync\_user** に**db\_datareader** ロールも付与する必要があります。

次のコマンドを送信して、両方のロールを**sync\_user** に付与します。

```sql theme={null}
  -- Grant the db_datawriter role to sync_user.
ALTER ROLE db_datawriter ADD MEMBER sync_user;
  -- Grant the db_datareader role to sync_user,
ALTER ROLE db_datareader ADD MEMBER sync_user;
```

**Note：** INSERT、UPDATE、DELETE などの個別の権限も、必要に応じて個別に付与し、オブジェクトレベルに制限できます。

**db\_datawriter** ロールにはデータベーステーブルの作成、変更、削除の権限が含まれないため、**sync\_user** にALTER 権限も付与する必要があります。この権限は、次のコマンドを使用してスキーマレベルで付与できます。

```sql theme={null}
GRANT ALTER ON SCHEMA::[<SchemaName>] TO [sync_user];
```

SQL Server ユーザーの作成に関する一般的なガイドについては、[Create a Database User - SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver17) を参照してください。

## SQL Server コネクタを追加

Sync でSQL Server のデータを使用できるようにするには、まず以下の手順でコネクタを追加する必要があります：

<ol>
  <li>Sync のダッシュボードから**接続**ページを開きます。</li>
  <li>**接続を追加**をクリックして**コネクタを選択**ページを開きます。</li>
  <li>**同期先**タブをクリックして
  **SQL Server** 行に移動します。</li>

  <li>
    行末にある**接続を設定**アイコンをクリックして、**新しい接続**ページを開きます。この操作により、
    **接続を追加**ダイアログボックスが開きます。

    **Note：** **接続を設定**アイコンが表示されない場合は、**コネクタをダウンロード**アイコンをクリックして SQL Server コネクタをインストールしてください。
  </li>

  <li>**接続を追加**ダイアログボックスに接続名を入力します。</li>
  <li>**追加**をクリックして、コネクタの**設定**タブを開きます。</li>
</ol>

新しいコネクタのインストールについての詳細は、
[接続](https://docs.sync.cdata.com/26.4/ja/connections/connections.md)を参照してください。

## SQL Server への認証

コネクタを追加したら、必要なプロパティを設定します。

* **Server：** SQL Server データベースをホストするサーバーのホスト名またはIP アドレスを入力します。デフォルトのサーバーは**localhost** です。
* **Port：** SQL Server のポート番号を入力します。デフォルトのポート値は**1433** です。
* **Database：** SQL Server に接続するときに接続先とするデフォルトのデータベースを入力します。
* **User：** SQL Server への認証に使用するユーザー名を入力します。
* **Password：** SQL Server への認証に使用するパスワードを入力します。

## 接続を完了する

接続を完了するには：

1. **Trust Server Certificate** で、サーバー証明書を信頼するかどうかを選択します。デフォルトでは、**Enable** チェックボックスが選択されています。
2. **高度な設定** タブで詳細な接続設定を定義します。（ただし、ほとんどの場合、これらの設定は必要ありません。）
3. **作成およびテスト**をクリックして接続を作成します。

## データ型マッピング

CData Sync は、SQL Server データベースにデータをロードするときに、次のデータ型変換を使用します。

| **CData 型** | **SQL Server 型** | **備考** |
| :-: | :-: | - |
| bigint | bigint | |
| binary | varbinary(\<ColumnSize>) | ColumnSize > 4000 の場合、ColumnSize = MAX になります |
| boolean | bit | |
| date | date | |
| decimal | decimal | |
| double | float | |
| float | float | |
| integer | int | |
| localdatetime | datetime2 | |
| smallint | smallint | |
| time | time | |
| timestamp | datetimeoffset | |
| varchar | nvarchar(\<ColumnSize>) | ColumnSize > 4000 の場合、ColumnSize = MAX になります |

Sync で利用できるほとんどの同期先では、カスタムカラムマッピングを使用できます。カラムマッピングの削除や調整、Sync のタスクへのさまざまな変換の適用については、[カラムのマッピング](https://docs.sync.cdata.com/26.4/ja/transformations/etl.md#カラムのマッピング)を参照してください。

## 高度なジョブオプション

次の表に、SQL Server 同期先接続で最も頻繁に使用される高度なジョブオプションを示します。使用可能なジョブオプションの完全な一覧については、[高度なジョブオプション](https://docs.sync.cdata.com/26.4/ja/jobs/advanced-job-options.md)を参照してください。

| オプション名 | デフォルト値 | 説明 |
| :- | :-: | :- |
| **Truncate Table Mode** | **Delete** | **テーブルデータを削除**レプリケーションオプションが有効な場合に、既存の行を削除するために使用するコマンドを指定します。**Truncate** を指定すると、ID カラムの値がシード値にリセットされ、外部キーによって参照されているテーブルに対しては実行できません。 |
| **コマンドタイムアウト** | **300** | 同期先の接続のタイムアウトを秒単位で制御します。 |
| **Date-Time の値をGMT に変換** | **Not enabled** | データベースに挿入する前に、すべてのローカルの日付と時刻の値をGMT に変換します。 |
| **PreserveCharDatatype** | **False** | Sync が同期先カラムを作成するときに、固定長文字データ型を保持します。有効にすると、CHAR(*n*) のソースカラムからはCHAR(*n*) の同期先カラムが作成され（長さ1～8,000）、NCHAR(*n*) のソースカラムからはNCHAR(*n*) の同期先カラムが作成されます（長さ1～4,000）。これらの上限を超えるソースカラムは、NVARCHAR(MAX) にフォールバックします。カラムレベルのデータ型オーバーライドが優先されます。 |

## Always Encrypted Support

CData Sync は、CData JDBC ドライバーを使用してSQL Server 同期先に接続します。JDBC ドライバーは`Always Encrypted` カラムをサポートしており、これによりSync は、クライアント側の暗号化で保護されたデータを安全に読み書きできます。

Sync が`Always Encrypted` カラムに書き込む際、JDBC ドライバーは、データが同期先に送信される前に必要なクライアント側の暗号化を実行します。この動作により、書き込みエラーを発生させることなく、暗号化されたカラムをレプリケーションワークフローに含めることができます。

## SQL Server に関するよくある問題

SQL Server 同期先に接続すると、エラーが発生することがあります。一般的なエラーと問題は、次のカテゴリに分類されます。

* タイムアウトエラー
* その他のエラーと問題

### タイムアウトエラー

タイムアウトの問題は、大規模なデータセットをレプリケートする場合に発生しやすく、通常は簡単に解決できます。SQL Server 同期先では、タイムアウトの問題は、多くの場合、Sync で設定されている**コマンドタイムアウト**の値に関連しています。

Sync を含む、SQL Server の外部にあるアプリケーションは、コマンドタイムアウトを使用して、クエリをキャンセルするまでSQL Server からの応答を待機する時間を決定します。指定された時間内にクエリが完了しない場合、SQL Server はタイムアウトエラーを返します。

Sync では、**コマンドタイムアウト**のデフォルト値は300秒です。5分前後で一貫して失敗するクエリは、コマンドタイムアウトの状態に陥っていることがよくあります。このような場合、**コマンドタイムアウト**の値を増やすことで、SQL Server がクエリ処理を完了するための時間が増え、タイムアウトエラーの防止に役立つ可能性があります。

ジョブの**高度な設定**タブから、ジョブレベルで**コマンドタイムアウト**の値を変更できます。（これらのオプションの詳細については、[高度なジョブオプション](https://docs.sync.cdata.com/26.4/ja/jobs/advanced-job-options.md)を参照してください。）この値を増やすとタイムアウト関連の問題が解決することが多いですが、タイムアウトの調整だけではすべてのシナリオで十分とは限りません。たとえば、各クエリで処理されるデータ量を減らすことでも、実行時間が改善され、タイムアウトを回避できる場合があります。

**コマンドタイムアウト**の値を調整してもタイムアウトエラーが引き続き発生する場合は、[CData Technical Support](https://jp.cdata.com/support/submit.aspx) にお問い合わせください。

SQL Server のクエリタイムアウトエラーの診断と解決に関する具体的なガイダンスについては、Microsoft のドキュメント[Troubleshoot query time-out errors – SQL Server](https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/performance/troubleshoot-query-timeouts) を参照してください。

### その他のエラーと問題

発生する可能性があるその他の問題やエラーに関するヘルプやトラブルシューティングリソースについては、[CData Knowledge Base](https://jp.cdata.com/kb/) を参照するか、[CData Community](https://community.cdata.com/community) に参加するか、[CData Technical Support](https://jp.cdata.com/support/submit.aspx) にお問い合わせの上、サポートチケットを開いてください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.