Access インベントリをエクスポート (AccessToSQL)
複数の Access データベースがあり、SQL Server に移行するデータベースがわからない場合は、プロジェクト内のすべての Access データベースのインベントリをエクスポートできます。 その後、インベントリ メタデータを確認してクエリを実行して、データベース内のどのデータベースとオブジェクトを移行するかを決定できます。 このインベントリを使用すると、次の一覧のような質問に対する回答をすばやく見つけることができます:
- 最大のデータベースはどれですか?
- ほとんどのデータベースを所有しているのは誰ですか?
- 同じテーブルを含むデータベースはどれですか?
- 過去 6 か月間に変更されていないデータベースはどれですか?
- どのデータベースに個人情報が含まれていますか?
これらの質問に回答するために使用されるクエリの例については、この記事の最後で説明します。
エクスポートされたメタデータ
SSMA は、Access データベース、テーブル、列、インデックス、外部キー、クエリ、レポート、フォーム、マクロ、モジュールに関するメタデータをエクスポートします。 これらの項目の各カテゴリに関するメタデータは、個別のテーブルにエクスポートされます。 これらのテーブルのスキーマについては、「Access Inventory Schemas」を参照してください。
インベントリ データをエクスポート
Access インベントリをエクスポートするには、まず SSMA プロジェクトを開くか作成してから、分析する Access データベースを追加する必要があります。 SSMA プロジェクトにデータベースを追加した後、それらのデータベースに関するメタデータを指定された SQL Server データベースとスキーマにエクスポートします。 必要に応じて、SSMA はメタデータを格納するテーブルを作成します。 SSMA は、Access データベースに関するメタデータを SQL Server データベースに追加します。
Note
Access データベースは、複数のファイル (クエリ、フォーム、レポート、マクロ、モジュール、ショートカットを含むテーブルとフロントエンド データベースを含むバックエンド データベース) に分割できます。 分割データベースを SQL Server に移行する場合は、フロントエンド データベースを SSMA に追加します。
次の手順では、プロジェクトの作成、プロジェクトへのデータベースの追加、SQL Server への接続、インベントリ データのエクスポートを行う方法について説明します。
プロジェクトの作成
SSMA for Access を開きます。
[ファイル] メニューの [新しいプロジェクト] を選択します。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクト名] ボックスにプロジェクトの名前を入力します。
[場所] ボックスで、プロジェクトのフォルダーを入力または選択します。
[移行先] コンボ ボックスで、移行先のターゲット バージョンを選択し、[OK] を選択します。
プロジェクトの作成に関する詳細については、「プロジェクトの作成と管理」を参照してください。
データベースの検索と追加
[ファイル] メニューの [データベースの検索] を選択します。
データベースの検索ウィザードで、検索するドライブ、ファイル パス、または UNC パスを入力します。 または、[参照] を選択してドライブまたはネットワーク フォルダーを選択します。
[追加] を選択して、リスト ボックスに場所を追加します。
前の 2 つの手順を繰り返して、検索場所を追加します。
必要に応じて検索条件を追加することで、返されるデータベースの一覧を絞り込むことができます。
重要
[すべてまたは一部のファイル名] テキスト ボックスでは、ワイルドカード文字はサポートされていません。
[スキャン] を選択します。
スキャン ページが表示されます。 見つかったデータベースと検索の進行状況が表示されます。 検索を停止するには、[停止] を選択します。
[ファイルの選択] ページで、プロジェクトに追加する各データベースを選択します。
一覧の上部にある [すべて選択] ボタンと [すべてクリア] ボタンを使用すると、すべてのデータベースを選択または選択解除することができます。 Ctrl キーを押しながら複数の行を選択したり、Shift キーを押しながら行の範囲を選択したりすることもできます。
[次へ] を選択します。
[確認] ページで [終了] を選択します。
プロジェクトへのデータベースの追加の詳細については、「Access データベース ファイルの追加と削除」を参照してください。
SQL Server への接続
[ファイル] メニューの [SQL Server に接続] を選択します。
[接続] ダイアログ ボックスで、SQL Serverのインスタンスの名前を入力または選択します。
ローカル コンピューター上の既定のインスタンスに接続する場合は、localhost またはドット (.) を入力できます。
別のコンピューター上の既定のインスタンスに接続する場合は、コンピューターの名前を入力します。
名前付きインスタンスに接続する場合は、コンピューター名、バックスラッシュ、インスタンス名を入力します。 例: MyServer\MyInstance
[データベース] ボックスに、エクスポートされたメタデータのターゲット データベースの名前を入力します。
SQL Server のインスタンスがデフォルト以外のポートで接続を承諾するように構成されている場合は、[サーバー ポート] ボックスに SQL Server 接続に使用されるポート番号を入力します。 SQL Server の既定のインスタンスの場合、デフォルトのポート番号は 1433 です。 名前付きインスタンスの場合、SSMA は SQL Server Browser サービスからポート番号を取得しようとします。
[認証] ドロップダウン リスト メニューで、接続に使用する認証の種類を選択します。 現在の Windows アカウントを使用するには、[Windows 認証] を選択します。 SQL Server ログインを使用するには、[SQL Server 認証] を選択し、ユーザー名とパスワードを指定します。
SQL Server への接続についての詳細は、「SQL Server に接続する (AccessToSQL)」をご覧ください。
エクスポート インベントリ情報
Access メタデータ エクスプローラーで、[Access-metabase] を展開します。
[データベース] の横にあるチェック ボックスをオンにします。
個々のデータベースまたはデータベース オブジェクトを省略するには、[データベース] フォルダーを展開し、データベースまたはデータベース オブジェクトの横にあるチェック ボックスをオフにします。
[データベース] を右クリックし、[スキーマのエクスポート] を選択します。
[エクスポートするスキーマの 選択] ダイアログ ボックスで、エクスポートされたメタデータのターゲット スキーマを選択し、[OK] を選択 します。
メタデータをエクスポートするたびに、SSMA によってインベントリにデータが追加されます。 インベントリ内の既存のデータは更新または削除されません。
エクスポートされたメタデータのクエリを実行する
Access データベースに関するメタデータをエクスポートした後、メタデータのクエリを実行できます。 次の手順では、SQL Server Management Studio の [クエリ エディター] ウィンドウを使用してクエリを実行する方法について説明します。
メタデータのクエリを実行する
[スタート] メニューの [すべてのプログラム] をポイントし、Microsoft SQL Server 2005 または Microsoft SQL Server 2008 または Microsoft SQL Server 2012 をポイントして、SQL Server Management Studio を選択します。
[サーバーへの接続] ダイアログ ボックスで設定を確認し、[接続] を選択します。
Management Studio ツール バーの [新しいクエリ] を選択し、クエリ エディター ウィンドウを開きます。
クエリ ウィンドウにクエリを入力します。 次のセクションでいくつかの例を示します。
F5 キーを押してクエリを実行します。
クエリの例
次のいずれかのクエリを実行する前に、USE database_name クエリを実行して、エクスポートされたメタデータを含むデータベースに対してクエリが実行されるようにする必要があります。 たとえば、MyAccessMetadata という名前のデータベースにメタデータをエクスポートした場合、Transact-SQL コードの先頭に次のステートメントを追加します:
USE MyAccessMetadata;
GO
以下の例はすべて、dbo スキーマを使用します。 メタデータを別のスキーマにエクスポートした場合は、これらのクエリを実行するときにスキーマを変更してください。
これらのデータベースに含まれるテーブルと列は何ですか?
次のクエリは、列、テーブル、およびデータベースのメタデータを含むテーブルを結合し、列名で並べ替えられたすべてのデータベース、テーブル、および列の名前を返します:
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns C
INNER JOIN dbo.SSMA_Access_InventoryTables T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON T.DatabaseId = D.DatabaseId
ORDER BY ColumnName;
最大のデータベースはどれですか?
次のクエリは、各 Access データベース内のデータベース名、ファイル サイズ、テーブル数をファイル サイズで並べ替え、返します:
SELECT DatabaseName,
FileSize,
TablesCount
FROM dbo.SSMA_Access_InventoryDatabases
ORDER BY FileSize DESC;
データベースを最も多く所有している所有者は誰ですか?
次のクエリは、各 Access データベースのデータベース名と所有者を所有者別に並べ替え、返します。
SELECT DatabaseName, FileOwner
FROM dbo.SSMA_Access_InventoryDatabases
ORDER BY FileOwner;
同じテーブルを含むデータベースはどれですか?
次のクエリでは、サブクエリを使用して、テーブルの一覧に複数回表示されるすべてのテーブル名を検索し、このテーブルの一覧を使用してデータベース名を取得します。 結果はデータベース名とテーブル名として返され、テーブル名で並べ替えられます。
SELECT DatabaseName,
TableName
FROM dbo.SSMA_Access_InventoryTables T
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON D.DatabaseId = T.DatabaseId
WHERE TableName IN (
SELECT TableName
FROM dbo.SSMA_Access_InventoryTables
GROUP BY TableName
HAVING COUNT(*) > 1
)
ORDER BY TableName;
過去 6 か月間に変更されなかったデータベースはどれですか?
次のクエリでは、現在の日付を取得し、6 か月前の月の値を取得した後、変更日が 6 か月前を超えるデータベースの一覧を返します。
SELECT DatabaseName,
DateModified
FROM dbo.SSMA_Access_InventoryDatabases
WHERE DATEDIFF(MONTH, DateModified, GETDATE()) > 6
ORDER BY DateModified;
どのデータベースに個人情報が含まれていますか?
Access データベースには、機密情報または個人情報が含まれている場合があります。 これらのデータベースを SQL Server に移動して、そのセキュリティ機能を利用することができます。 機密データを含む列に特定の名前が付いているか、特定の文字が含まれていることがわかっている場合は、クエリを使用して、その情報を含むすべての列を検索できます。 たとえば、文字列 "salary" を含むすべての列を検索できます。 その後、クエリはデータベース名、テーブル名、および列名を返します。
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns C
INNER JOIN dbo.SSMA_Access_InventoryTables T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON T.DatabaseId = D.DatabaseId
WHERE ColumnName LIKE '%salary%';
列名がわからない場合は、すべての列を返すクエリを記述できます。 これを行うには、前のクエリから WHERE 句を削除します。