Access データベースを SQL Server に移行する
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

すべてのユーザーに制限があり、Access データベースも例外ありません。 たとえば、Access データベースのサイズ制限は 2 GB で、255 を超える同時ユーザーをサポートすることはできません。 そのため、Access データベースが次のレベルに進むときは、SQL Server に移行できます。 SQL Server (オンプレミスでも Azure クラウドでも) では、大量のデータ、より多くの同時ユーザーがサポートされ、JET/ACE データベース エンジンよりも容量が大きくなります。 このガイドでは、SQL Server の取り組みをスムーズに開始し、作成した Access フロントエンド ソリューションを保持し、将来のデータベース ソリューションに Access を使用するよう促します。 Microsoft SQL Server Migration Assistant (SSMA) を使用して正常に移行するには、次のステージに従います。

SQL Server へのデータベース移行のステージ

始める前に

以降のセクションでは、開始に役立つ背景とその他の情報を提供します。

データベースの分割について

すべての Access データベース オブジェクトは、1 つのデータベース ファイルに格納することも、フロントエンド データベースとバックエンド データベースという 2 つのデータベース ファイルに格納することもできます。 これは データベースの分割 と呼ばれ、ネットワーク環境での共有を容易にするように設計されています。 バックエンド データベース ファイルには、テーブルとリレーションシップのみを含む必要があります。 フロントエンド ファイルには、フォーム、レポート、クエリ、マクロ、VBA モジュール、バックエンド データベースへのリンク テーブルなど、他のすべてのオブジェクトのみを含める必要があります。 Access データベースを移行すると、SQL Server がサーバー上にあるデータの新しいバックエンドとして機能している分割データベースに似ています。

その結果、SQL Server テーブルにリンクされたテーブルを含むフロントエンド Access データベースを引き続き維持できます。 効果的に、Access データベースが提供する迅速なアプリケーション開発の利点と、SQL Server のスケーラビリティを引き出すことができます。

SQL Server の利点

それでも、SQL Server への移行に説得力が必要ですか? 考慮する必要があるその他の利点を次に示します。

  • 同時実行ユーザーの数が増える    SQL Server では、Access よりも多くの同時実行ユーザーを処理でき、追加されたユーザーが増えたときにメモリ要件が最小限に抑えられます。

  • 可用性の向上    SQL Server を使用すると、データベースの使用中にデータベースを増分または完全に動的にバックアップできます。 その結果、データをバックアップするために、ユーザーにデータベースへのアクセスを強制的に終了してもらう必要はありません。

  • 高パフォーマンスとスケーラビリティ    通常、SQL Server データベースは Access データベースよりも優れたパフォーマンスを発揮します。特にテラバイトサイズの大規模なデータベースではパフォーマンスが向上します。 また、SQL Server は、1 つのプロセス内で複数のネイティブ スレッドを使用してユーザー要求を処理することで、クエリを並列処理することで、クエリをはるかに高速かつ効率的に処理します。

  • セキュリティの強化    SQL Server は、信頼された接続を使用して Windows システム セキュリティと統合し、ネットワークとデータベースへの 1 つの統合アクセスを提供し、両方のセキュリティ システムを最大限に活用します。 これにより、複雑なセキュリティ スキームの管理がはるかに簡単になります。 SQL Server は、社会保障番号、クレジット カード データ、機密アドレスなどの機密情報に最適なストレージです。

  • 即時復旧可能性     オペレーティング システムがクラッシュした場合、または電源が切れた場合、SQL Server は、データベース管理者の介入なしで、数分で一貫性のある状態にデータベースを自動的に復旧できます。

  • VPN の使用    アクセスと仮想プライベート ネットワーク (VPN) が機能しません。 ただし、SQL Server では、リモート ユーザーは引き続きデスクトップ上の Access フロントエンド データベースと、VPN ファイアウォールの背後にある SQL Server バックエンドを使用できます。

  • Azure SQL Server    SQL Server の利点に加えて、ダウンタイムのない動的なスケーラビリティ、インテリジェントな最適化、グローバルなスケーラビリティと可用性、ハードウェア コストの排除、管理の削減を実現します。

最適な Azure SQL Server オプションを選択する

Azure SQL Server に移行する場合は、それぞれ異なる利点を持つ 3 つのオプションから選択できます。

  • 単一データベース/エラスティック プール    このオプションには、SQL Database サーバーを介して管理される独自のリソース セットがあります。 1 つのデータベースは、SQL Server の包含データベースに似ています。 エラスティック プールを追加することもできます。これは、SQL Database サーバーを介して管理されるリソースの共有セットを持つデータベースのコレクションです。 最も一般的に使用される SQL Server 機能は、組み込みのバックアップ、パッチ適用、および回復で使用できます。 ただし、正確なメンテナンス時間は保証されておらず、SQL Server からの移行が困難な場合があります。

  • マネージド インスタンス    このオプションは、リソースの共有セットを持つシステム データベースとユーザー データベースのコレクションです。 マネージド インスタンスは、オンプレミスの SQL Server との互換性が高い SQL Server データベースのインスタンスに似ています。 マネージド インスタンスには、バックアップ、修正プログラムの適用、回復が組み込まれており、SQL Server から簡単に移行できます。 ただし、使用できない SQL Server 機能の数が少なく、正確なメンテナンス時間は保証されません。

  • Azure Virtual Machine    このオプションを使用すると、Azure クラウド内の仮想マシン内で SQL Server を実行できます。 SQL Server エンジンと簡単な移行パスを完全に制御できます。 ただし、バックアップ、パッチ、回復を管理する必要があります。

詳細については、「 Azure へのデータベース移行パスの選択 」と「 Azure SQL とは」を参照してください。

最初の手順

SSMA を実行する前に移行プロセスを合理化するのに役立つ、事前に対処できるいくつかの問題があります。

  • テーブル インデックスと主キーを追加する    各 Access テーブルにインデックスと主キーがあることを確認します。 SQL Server では、すべてのテーブルに少なくとも 1 つのインデックスが必要であり、テーブルを更新できる場合は、リンク テーブルに主キーが必要です。

  • 主キーと外部キーのリレーションシップを確認する    これらのリレーションシップが、一貫性のあるデータ型とサイズを持つフィールドに基づいていることを確認します。 SQL Server では、外部キー制約で異なるデータ型とサイズを持つ結合列はサポートされていません。

  • [添付ファイル] 列を削除する    SSMA では、Attachment 列を含むテーブルは移行されません。

SSMA を実行する前に、次の最初の手順を実行します。

  1. Access データベースを閉じます。

  2. データベースに接続されている現在のユーザーもデータベースを閉じていることを確認します。

  3. データベースが ファイル形式.mdb場合は、 ユーザー レベルのセキュリティを削除します。

  4. データベースをバックアップします。 詳細については、「 バックアップと復元プロセスを使用してデータを保護する」を参照してください。

ヒント    最大 10 GB をサポートし、移行を実行して確認するための無料で簡単な方法である Microsoft SQL Server Express エディションをデスクトップにインストールすることを検討してください。 接続するときは、 LocalDB をデータベース インスタンスとして使用します

ヒント    可能であれば、スタンドアロン バージョンの Access を使用します。

SSMA を実行する

Microsoft では、移行を容易にするために Microsoft SQL Server Migration Assistant (SSMA) を提供しています。 SSMA は主にテーブルを移行し、パラメーターのないクエリを選択します。 フォーム、レポート、マクロ、VBA モジュールは変換されません。 SQL Server メタデータ エクスプローラーには、Access データベース オブジェクトと SQL Server オブジェクトが表示され、両方のデータベースの現在のコンテンツを確認できます。 今後、追加のオブジェクトを転送する場合は、これら 2 つの接続が移行ファイルに保存されます。

メモ    移行プロセスは、データベース オブジェクトのサイズと転送する必要があるデータの量に応じて時間がかかる場合があります。

  1. SSMA を使用してデータベースを移行するには、まず 、ダウンロード した MSI ファイルをダブルクリックしてソフトウェアをダウンロードしてインストールします。 コンピューターに適切な 32 または 64 ビット バージョンをインストールしてください。

  2. SSMA をインストールした後、デスクトップ (できれば Access データベース ファイルを含むコンピューター) で開きます。

    共有フォルダー内のネットワークから Access データベースにアクセスできるコンピューターで開くこともできます。

  3. SSMA の最初の手順に従って、SQL Server の場所、移行する Access データベースとオブジェクト、接続情報、リンク テーブルを作成するかどうかなどの基本的な情報を提供します。

  4. SQL Server 2016 以降に移行し、リンク テーブルを更新する場合は、[ レビュー ツール ] > [ プロジェクト設定] > [全般] を選択して rowversion 列を追加します。

    rowversion フィールドは、レコードの競合を回避するのに役立ちます。 Access では、SQL Server リンク テーブルのこの rowversion フィールドを使用して、レコードが最後に更新されたタイミングを判断します。 また、クエリに rowversion フィールドを追加すると、更新操作の後に行が再選択されます。 これにより、書き込み競合エラーやレコード削除のシナリオを回避し、列を変更する浮動小数点数データ型やトリガーで発生する可能性があるなど、元の送信とは異なる結果が Access によって検出される場合に発生する可能性があるため、効率が向上します。 ただし、フォーム、レポート、または VBA コードで rowversion フィールドを使用しないでください。 詳細については、「rowversion」を参照してください。

    メモ    行バージョンとタイムスタンプを混同しないようにします。 キーワードタイムスタンプは SQL Server の rowversion のシノニムですが、データ エントリのタイムスタンプを設定する方法として rowversion を使用することはできません。

  5. 正確なデータ型を設定するには、[ レビュー ツール ] > [ プロジェクト設定] > [タイプ マッピング] を選択します。 たとえば、英語のテキストのみを格納する場合は、nvarchar データ型ではなく varchar を使用できます。

オブジェクトの変換

SSMA は Access オブジェクトを SQL Server オブジェクトに変換しますが、オブジェクトはすぐにはコピーされません。 SSMA には、移行する次のオブジェクトの一覧が用意されているため、SQL Server データベースに移動するかどうかを決定できます。

  • テーブルと列

  • [パラメーターなしのクエリ] を選択します。

  • 主キーと外部キー

  • インデックスと既定値

  • 制約の確認 (長さ 0 の列プロパティ、列の検証規則、テーブルの検証を許可する)

ベスト プラクティスとして、SSMA 評価レポートを使用して、変換結果 (エラー、警告、情報メッセージ、移行を実行するための時間見積もり、実際にオブジェクトを移動する前に実行する個々のエラー修正手順など) を示します。

データベース オブジェクトの変換は、Access メタデータからオブジェクト定義を取得し、同等の Transact-SQL (T-SQL) 構文に変換してから、この情報をプロジェクトに読み込みます。 その後、SQL Server または SQL Azure メタデータ エクスプローラーを使用して、SQL Server または SQL Azure オブジェクトとそのプロパティを表示できます。

オブジェクトを変換、読み込み、SQL Server に移行するには、 このガイドに従います

ヒント    Access データベースを正常に移行したら、後で使用するためにプロジェクト ファイルを保存して、テストまたは最終的な移行のためにデータを再度移行できるようにします。

テーブルをリンクする

Windows に付属するネイティブ SQL Server ドライバーを使用する代わりに、最新バージョンの SQL Server OLE DB ドライバーと ODBC ドライバーをインストールすることを検討してください。 新しいドライバーの方が高速であるだけでなく、以前のドライバーではサポートされていない Azure SQL の新機能をサポートしています。 変換されたデータベースが使用されている各コンピューターにドライバーをインストールできます。 詳細については、「 Microsoft OLE DB Driver 18 for SQL Server 」および「 Microsoft ODBC Driver 17 for SQL Server」を参照してください

Access テーブルを移行した後、データをホストする SQL Server 内のテーブルにリンクできます。 Access から直接リンクすると、より複雑な SQL Server 管理ツールを使用するのではなく、データを簡単に表示できます。  SQL Server データベース管理者が設定したアクセス許可に応じて、リンクされたデータのクエリと編集を行うことができます。

メモ    リンク プロセス中に SQL Server データベースにリンクするときに ODBC DSN を作成する場合は、新しいアプリケーションを使用するすべてのマシンで同じ DSN を作成するか、DSN ファイルに格納されている接続文字列をプログラムで使用します。

詳細については、「Azure SQL Server データベースにデータをリンクまたはインポートする」および「SQL Server データベース内のデータをインポートまたはリンクする」を参照してください。

ヒント   Access でリンクされたテーブル マネージャーを使用して、テーブルを簡単に更新および再リンクすることを忘れないでください。 詳細については、「 リンク テーブルの管理」を参照してください。

テストと修正

次のセクションでは、移行中に発生する可能性がある一般的な問題とその対処方法について説明します。

クエリ

選択したクエリのみが変換されます。パラメーターを受け取るクエリの選択など、他のクエリは含まれません。 一部のクエリは完全に変換されない場合があり、SSMA は変換プロセス中にクエリ エラーを報告します。 T-SQL 構文を使用して、変換しないオブジェクトを手動で編集できます。 構文エラーでは、アクセス固有の関数とデータ型を SQL Server に手動で変換する必要がある場合もあります。 詳細については、「Access SQL と SQL Server TSQL の比較」を参照してください。

データ型

Access と SQL Server のデータ型は似ていますが、次の潜在的な問題に注意してください。

大きい数値    Large Number データ型は、非通貨の数値を格納し、SQL bigint データ型と互換性があります。 このデータ型を使用すると、大量の数値を効率的に計算できますが、Access 16 (16.0.7812 以降) .accdb データベース ファイル形式を使用する必要があり、64 ビット バージョンの Access でパフォーマンスが向上します。 詳細については、「 Large Number データ型の使用 」および「 64 ビットバージョンまたは 32 ビット バージョンの Office を選択する」を参照してください。

はい/いいえ    既定では、Access Yes/No 列は SQL Server ビット フィールドに変換されます。 レコードのロックを回避するには、ビット フィールドが NULL 値を許可しないように設定されていることを確認します。 SSMA では、ビット列を選択して、 Allow Nulls プロパティを NO に設定できます。 TSQL では、 CREATE TABLE ステートメントまたは ALTER TABLE ステートメントを 使用します。

日付と時刻    日付と時刻に関するいくつかの考慮事項があります。

  • データベースの互換性レベルが 130 (SQL Server 2016) 以上で、リンク テーブルに 1 つ以上の datetime 列または datetime2 列が含まれている場合、テーブルは結果に #deleted メッセージを返す可能性があります。 詳細については、「データベースが #deleted を返 SQL-Server リンク テーブルにアクセスする」を参照してください。

  • Datetime データ型にマップするには、Access 日付/時刻データ型を使用します。 Access Date/Time Extended データ型を使用して、日付と時刻の範囲が大きい datetime2 データ型にマップします。 詳細については、「日付/時刻拡張データ型の使用」を参照してください。

  • SQL Server で日付のクエリを実行する場合は、時刻と日付を考慮してください。 次に例を示します。

    • DateOrdered 1/1/19 から 1/31/19 の間には、すべての注文が含まれていない場合があります。

    • DateOrdered between 1/1/19 00:00:00 AM and 1/31/19 11:59:59 PM には、すべての注文が含まれます。

添付   Attachment データ型は、Access データベースにファイルを格納します。 SQL Server では、いくつかのオプションを考慮する必要があります。 Access データベースからファイルを抽出し、そのファイルへのリンクを SQL Server データベースに格納することを検討できます。 または、FILESTREAM、FileTables、またはリモート BLOB ストア (RBS) を使用して、添付ファイルを SQL Server データベースに格納したままにすることもできます。

ハイパーリンク    アクセス テーブルには、SQL Server でサポートされていないハイパーリンク列があります。 既定では、これらの列は SQL Server の nvarchar(max) 列に変換されますが、より小さいデータ型を選択するようにマッピングをカスタマイズできます。 Access ソリューションでは、コントロールの Hyperlink プロパティを true に設定した場合でも、フォームとレポートで ハイパーリンク の動作を使用できます。

複数値フィールド    Access の複数値フィールドは、区切られた値のセットを含む ntext フィールドとして SQL Server に変換されます。 SQL Server では多対多リレーションシップを表す複数値を持つデータ型はサポートされていないため、追加のデザインや変換作業が必要になる可能性があります。

Access と SQL Server のデータ型のマッピングの詳細については、「 データ型の比較」を参照してください。

メモ    複数値フィールドは変換されません。

詳細については、「 日付と時刻の型」、「 文字列型とバイナリ型」、「 数値型」を参照してください。

Visual Basic

VBA は SQL Server ではサポートされていませんが、次の問題が発生する可能性があることに注意してください。

クエリの VBA 関数    アクセス クエリでは、クエリ列のデータに対する VBA 関数がサポートされます。 ただし、VBA 関数を使用する Access クエリは SQL Server で実行できないため、要求されたすべてのデータが処理のために Microsoft Access に渡されます。 ほとんどの場合、これらのクエリは パススルー クエリに変換する必要があります。

クエリのユーザー定義関数    Microsoft Access クエリでは、VBA モジュールで定義されている関数を使用して、渡されたデータを処理できます。 クエリには、スタンドアロン クエリ、フォーム/レポート レコード ソースの SQL ステートメント、フォーム、レポートとテーブル フィールドのコンボ ボックスとリスト ボックスのデータ ソース、既定または検証ルール式を指定できます。 SQL Server では、これらのユーザー定義関数を実行できません。 これらの関数を手動で再設計し、SQL Server 上のストアド プロシージャに変換する必要がある場合があります。

パフォーマンスを最適化する

これまで、バックエンドの新しい SQL Server でパフォーマンスを最適化する最も重要な方法は、ローカル クエリまたはリモート クエリを使用するタイミングを決定することです。 データを SQL Server に移行する場合は、ファイル サーバーからコンピューティングのクライアント サーバー データベース モデルにも移行します。 次の一般的なガイドラインに従ってください。

  • クライアントで小さな読み取り専用クエリを実行して、最も迅速にアクセスできるようにします。

  • サーバーで長い読み取り/書き込みクエリを実行して、処理能力を高めます。

  • フィルターと集計を使用してネットワーク トラフィックを最小限に抑え、必要なデータのみを転送します。

クライアント サーバー データベース モデルのパフォーマンスを最適化する

詳細については、「 パススルー クエリを作成する」を参照してください。

追加の推奨ガイドラインを次に示します。

サーバーにロジックを配置する     アプリケーションでは、ビュー、ユーザー定義関数、ストアド プロシージャ、計算フィールド、トリガーを使用して、クライアントではなく、アプリケーション ロジック、ビジネス ルールとポリシー、複雑なクエリ、データ検証、参照整合性コードを一元化して共有することもできます。 このクエリまたはタスクをサーバー上でより適切かつ迅速に実行できますか。 最後に、各クエリをテストして、最適なパフォーマンスを確認します。

フォームとレポートでビューを使用する    [アクセス] で、次の操作を行います。

  • フォームの場合は、読み取り専用フォームの SQL ビューと、読み取り/書き込みフォームの SQL インデックス付きビューをレコード ソースとして使用します。

  • レポートの場合は、レコード ソースとして SQL ビューを使用します。 ただし、レポートごとに個別のビューを作成して、他のレポートに影響を与えずに特定のレポートをより簡単に更新できるようにします。

フォームまたはレポートでのデータの読み込みを最小限に抑える    ユーザーが要求するまでデータを表示しないでください。 たとえば、recordsource プロパティを空白のままにし、ユーザーがフォームでフィルターを選択し、レコードソース プロパティにフィルターを設定します。 または、DoCmd.OpenForm と DoCmd.OpenReport の where 句を使用して、ユーザーが必要とする正確なレコードを表示します。 レコード ナビゲーションをオフにすることを検討してください。

異種クエリに注意する   ローカル Access テーブルと SQL Server リンク テーブル (ハイブリッド クエリとも呼ばれます) を組み合わせたクエリは実行しないでください。 この種類のクエリでは、すべての SQL Server データをローカル コンピューターにダウンロードし、クエリを実行するために Access が必要です。SQL Server ではクエリは実行されません。

ローカル テーブルを使用する場合    国または地域の州や都道府県の一覧など、ほとんど変更されないデータにはローカル テーブルを使用することを検討してください。 多くの場合、静的テーブルはフィルター処理に使用され、Access フロントエンドでパフォーマンスが向上します。

詳細については、「 データベース エンジン チューニング アドバイザー」、「 パフォーマンス アナライザーを使用して Access データベースを最適化する」、 および「SQL Server にリンクされた Microsoft Office Access アプリケーションの最適化」を参照してください

関連項目

Azure Database 移行ガイド

Microsoft Data Migration ブログ

SQL Server への Microsoft Access の移行、変換、およびアップサイズ化

Access デスクトップ データベースを共有する方法

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。