(57)【要約】【課題】記憶装置に記憶されたデータベースの一部を他の記憶装置に移行した場合であっても、データベース全体に対し効率的にアクセスする。【解決手段】データベースに対するアクセスを制御するシステムであって、第１の記憶装置に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置に移行するデータ移行部と、前記データベースに対するアクセスコマンドの入力を受け付けるコマンド入力部と、入力された前記アクセスコマンドによりアクセスされるべきデータが、既に前記第２の記憶装置に移行されたか否かを、入力された前記アクセスコマンドおよび入力された前記移行条件に基づいて判断する移行判断部と、前記移行判断部による判断に基づいて、前記データベースに含まれるデータまたは前記第２の記憶装置に移行されたデータを前記アクセスコマンドに従ってアクセスするアクセス部とを備えるシステムを提供する。
2009066691.tif 000002
【特許請求の範囲】
【請求項１】
データベースに対するアクセスを制御するシステムであって、
第１の記憶装置に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置に移行するデータ移行部と、
前記データベースに対するアクセスコマンドの入力を受け付けるコマンド入力部と、
入力された前記アクセスコマンドによりアクセスされるべきデータが、既に前記第２の記憶装置に移行されたか否かを、入力された前記アクセスコマンドおよび入力された前記移行条件に基づいて判断する移行判断部と、
前記移行判断部による判断に基づいて、前記データベースに含まれるデータまたは前記第２の記憶装置に移行されたデータを前記アクセスコマンドに従ってアクセスするアクセス部と
を備えるシステム。
【請求項２】
前記第２の記憶装置に既に移行したデータに対するアクセスを許可するかどうかを、使用者ごとに設定する設定部を更に備え、
前記アクセス部は、入力された前記アクセスコマンドによりアクセスされるべきデータが、前記データ移行部により既に前記第２の記憶装置に移行された場合であっても、前記アクセスコマンドを入力した使用者が、前記設定部によりアクセスの許可されていない使用者の場合には、前記第２の記憶装置に移行された当該データにアクセスしない、請求項１に記載のシステム。
【請求項３】
制御用のデータを記憶するための制御用記憶装置を更に備え、
前記データ移行部は、前記第２の記憶装置にデータを移行するために入力された前記移行条件を、前記制御用記憶装置に格納し、
前記アクセス部は、前記制御用記憶装置に記憶された前記移行条件、および、入力された前記アクセスコマンドに基づいて、前記アクセスコマンドによりアクセスされるべきデータが、前記移行条件を満たすかどうかを判断し、満たすことを条件に前記第２の記憶装置にアクセスする、請求項１に記載のシステム。
【請求項４】
前記第１の記憶装置に記憶された前記データベースは、第１のテーブルを含み、
前記データ移行部は、前記第１のテーブルの一部を読み出して新たな第２のテーブルとして前記第２の記憶装置に格納すると共に、前記第１のテーブルの一部を前記データベースから削除し、
前記アクセス部は、入力された前記アクセスコマンド中のアクセス対象とするテーブルの指定を、前記第１のテーブルから、前記第１のテーブルおよび前記第２のテーブルを結合したテーブルに書き換えることで、前記データベースまたは既に移行された前記データにアクセスする、請求項１に記載のシステム。
【請求項５】
過去に入力されたアクセスコマンドと、当該アクセスコマンドを前記アクセス部がコンパイルして前記データベースに対し発行したコマンドであるコンパイル済みコマンドとを、対応付けて記憶しているコマンドキャッシュを更に備え、
前記データ移行部は、前記データベースから前記第２の記憶装置に追加して移行するべきデータが満たすべき移行条件の入力を更に受け付けたことに応じ、前記データベースのうち当該移行条件を満たすデータを前記第２の記憶装置に更に移行すると共に、前記コマンドキャッシュをクリアする、請求項４に記載のシステム。
【請求項６】
前記アクセス部は、
入力された前記アクセスコマンドによりアクセスされるべきデータが、予め設定された第１チェック制約を満たすか否かを判断して、当該チェック制約を満たすことを条件に、前記第１のテーブルへのアクセスを許可し、当該チェック制約を満たさないことを条件に、前記第１のテーブルへのアクセスを禁止する、第１制御部と、
入力された前記アクセスコマンドによりアクセスされるべきデータが、予め設定された第２チェック制約を満たすか否かを判断して、当該チェック制約を満たすことを条件に、前記第２のテーブルへのアクセスを許可し、当該チェック制約を満たさないことを条件に、前記第２のテーブルへのアクセスを禁止する、第２制御部と
を有し、
前記データ移行部は、入力された前記移行条件を前記第２チェック制約として前記第２制御部に設定し、入力された前記移行条件の否定を前記第１チェック制約として前記第１制御部に設定する、請求項４に記載のシステム。
【請求項７】
前記データ移行部は、前記データベースから前記第２の記憶装置に追加して移行するべきデータが満たすべき条件の入力を更に受け付けて、前記データベースのうち当該条件を満たすデータを前記第２の記憶装置に更に移行し、さらに、
既に前記第２チェック制約として設定されている条件と、追加して移行するべきとして入力された条件との論理和を、新たな前記第２チェック制約として設定すると共に、既に前記第１チェック制約として設定されている条件と、追加して移行するべきとして入力された条件の否定との論理和を、新たな前記第１チェック制約として設定する、請求項６に記載のシステム。
【請求項８】
前記データ移行部は、使用者の指示に基づいて、前記第２の記憶装置に移行したデータに読み出し専用の属性を設定し、
前記アクセス部は、前記移行判断部によって、前記アクセスコマンドに従ってアクセスされるべきデータが、前記第２の記憶装置に移行されたと判断された場合であっても、前記第２の記憶装置に移行したデータに前記読み出し専用の属性が設定されていることを条件に、前記アクセスコマンドによる更新のためのアクセスを禁止する、請求項１に記載のシステム。
【請求項９】
データベースに対するアクセスを制御する方法であって、
第１の記憶装置に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置に移行するステップと、
前記データベースに対するアクセスコマンドの入力を受け付けるステップと、
入力された前記アクセスコマンドによりアクセスされるべきデータが、既に前記第２の記憶装置に移行されたか否かを、入力された前記アクセスコマンドおよび入力された前記移行条件に基づいて判断するステップと、
前記判断するステップにおける判断に基づいて、前記データベースに含まれるデータまたは前記第２の記憶装置に移行されたデータを前記アクセスコマンドに従ってアクセスするステップと
を備える方法。
【請求項１０】
データベースに対するアクセスを制御するシステムとして、コンピュータを機能させるプログラムであって、
前記コンピュータを、
第１の記憶装置に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置に移行するデータ移行部と、
前記データベースに対するアクセスコマンドの入力を受け付けるコマンド入力部と、
入力された前記アクセスコマンドによりアクセスされるべきデータが、既に前記第２の記憶装置に移行されたか否かを、入力された前記アクセスコマンドおよび入力された前記移行条件に基づいて判断する移行判断部と、
前記移行判断部による判断に基づいて、前記データベースに含まれるデータまたは前記第２の記憶装置に移行されたデータを前記アクセスコマンドに従ってアクセスするアクセス部
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに対するアクセスを制御する技術に関する。特に、本発明は、複数の記憶装置に渡って記憶されたデータベースに対するアクセスを制御する技術に関する。
【背景技術】
【０００２】
多数のデータを含むデータベースを、高速処理の記憶媒体と低速処理の記憶媒体とに区分けして記憶する方法が提案されている（特許文献１を参照。）。この方法においては、検索頻度の高いデータを高速処理の記憶媒体に、検索頻度の低いデータを低速処理の記憶媒体にそれぞれ記憶することで、データベースに対する効率的なアクセスを実現できる。
【特許文献１】特開２０００−１１２９８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１の技術において、低速処理の記憶媒体（例えば磁気テープ）にアクセスするためには、その記憶媒体内のデータを高速処理の記憶媒体（例えばハードディスク装置）に復元している（特許文献１の図５のＳ４および段落００１０を参照）。このため、データの検索指令を発行してからデータが参照可能となるまでに待ち時間が生じてしまう。【０００４】
また、近年、企業の法令遵守を支援する観点から、データを変更不可能な状態で長期間保存する必要が生じる場合がある。この場合には、使用者は、ハードディスク装置などに記憶されたデータの一部を選択して、いわゆるＷＯＲＭ（Ｗｒｉｔｅ  Ｏｎｃｅ  Ｒｅａｄ  Ｍａｎｙ）メディアなどに移行する。また、ハードディスク装置の空き容量が少なくなった場合にも、それに記憶された一部のデータをＷＯＲＭメディアに移行してよい。【０００５】
このようなＷＯＲＭメディアもデータベースの一部として参照することができれば、ハードディスク装置はその移行したデータを記憶し続けている必要がなく、ハードディスク装置などの必要容量を削減できて効率がよい。しかしながら、非特許文献１には、ハードディスク装置から必要なデータをＷＯＲＭメディアに移行すること、および、移行したデータにどのようにアクセスするべきか、については記載されていない。【０００６】
そこで本発明は、上記の課題を解決することのできるシステム、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明の第１の形態においては、データベースに対するアクセスを制御するシステムであって、第１の記憶装置に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置に移行するデータ移行部と、前記データベースに対するアクセスコマンドの入力を受け付けるコマンド入力部と、入力された前記アクセスコマンドによりアクセスされるべきデータが、既に前記第２の記憶装置に移行されたか否かを、入力された前記アクセスコマンドおよび入力された前記移行条件に基づいて判断する移行判断部と、前記移行判断部による判断に基づいて、前記データベースに含まれるデータまたは前記第２の記憶装置に移行されたデータを前記アクセスコマンドに従ってアクセスするアクセス部とを備えるシステムを提供する。また、当該システムによりデータベースに対するアクセスを制御する方法、および、当該システムとしてコンピュータを機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００８】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。【０００９】
図１は、本実施形態に係る制御システム１０の機能構成を示す。制御システム１０は、例えばハードディスクドライブなどによって実現される第１の記憶装置１５０と、例えばテープ記憶装置または光磁気ディスクドライブなどによって実現される第２の記憶装置１６０とを備える。これに代えて、第２の記憶装置１６０は、例えばＩＢＭコーポレーションのＤＲ５５０などの、データを長期保存するための専用の装置であってよい。【００１０】
そして、制御システム１０は、使用者から受け付けたデータの移行指示に従って第１の記憶装置１５０に記憶されたデータベースの一部を第２の記憶装置１６０に移行する。本実施形態に係る制御システム１０は、そのようなデータの移行の後であっても、使用者から受け付けたアクセスコマンドに従って第１の記憶装置１５０および／または第２の記憶装置１６０に適切にアクセスすることを目的とする。【００１１】
制御システム１０は、ＲＡＭなどの主記憶装置により実現される制御用記憶装置１１０およびコマンドキャッシュ１２５を備える。また、制御システム１０は、ＣＰＵまたはマイクロコンピュータなどの演算装置がＲＡＭなどの主記憶装置からプログラムを読み出して実行することで、データ移行部１００と、コマンド入力部１２０と、移行判断部１３０と、アクセス部１４０と、設定部１７０として機能する。このプログラムは、ＩＢＭコーポレーションのＤＢ２サーバに備わる機能を拡張して開発されてよい。また、このプログラムの第２制御部１４５は、ＩＢＭコーポレーションのＦｅｄｅｒａｔｉｏｎ  Ｓｅｒｖｅｒのｎｏｎ−ｒｅｌａｔｉｏｎａｌ  ｗｒａｐｐｅｒ  ＳＤＫを使用して開発されてよい。【００１２】
データ移行部１００は、第１の記憶装置１５０に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置１６０に移行する。具体的には、第１の記憶装置１５０は、例えばテーブル構造のデータベースを記憶している。このテーブルのことを第１のテーブルと呼ぶ。そして、データ移行部１００は、移行条件として、第１のテーブル中のカラム名、および、そのカラムが採り得る値の範囲の入力を受け付ける。すると、データ移行部１００は、そのカラムがその範囲の値となるレコードを、第１のテーブルから読み出す。【００１３】
そして、データ移行部１００は、読み出したそのレコードを含む新たな第２のテーブルを生成して第２の記憶装置１６０に格納する。第２の記憶装置１６０は、例えば光磁気ディスクであるＷＯＲＭメディア１６５に、新たな第２テーブルを格納する。第２テーブルは、ＷＯＲＭメディア１６５内の複数のファイル１６２−１〜Ｎに分散して記憶されてよい。これと共に、データ移行部１００は、読み出したそれらのレコードを第１のテーブルから削除する。また、データ移行部１００は、データを移行するために入力された移行条件を制御用記憶装置１１０に格納する。【００１４】
制御用記憶装置１１０は、上記移行条件など、各種の制御用のデータを記憶するために設けられている。記憶する移行条件は、例えば、上記の例のように、条件設定の対象となるカラムのカラム名、および、そのカラム内のデータが満たすべき値の範囲の組である。また、移行条件は、複数のカラムおよびそれぞれのカラム内のデータが満たすべき値の範囲の組合せであってもよい。【００１５】
コマンド入力部１２０は、データベースに対するアクセスコマンドの入力を受け付ける。例えば、アクセスコマンドは、アクセスの種類、アクセス対象とするテーブルの指定、および、アクセス対象とするレコードが満たすべき条件などを含む。アクセスの種類は、参照、更新または挿入などである。一例として、このアクセスコマンドは、例えばＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）などの言語で記述されていてよい。【００１６】
移行判断部１３０は、入力されたそのアクセスコマンドによりアクセスされるべきデータが、既に第２の記憶装置１６０に移行されたか否かを、入力されたそのアクセスコマンドおよび入力されたその移行条件に基づいて判断する。具体的には、まず、移行判断部１３０は、アクセスコマンドの入力に応じて移行条件をコマンド入力部１２０から読み出す。そして、移行判断部１３０は、そのアクセスコマンドに基づいて、そのアクセスコマンドによりアクセスされるべきデータが、移行条件を満たすかどうかを判断する。【００１７】
アクセスされるべきデータが移行条件を満たすことを条件に、移行判断部１３０は、そのデータが第２の記憶装置１６０に既に移行されたと判断する。具体例として、移行条件が、あるカラムの数値が定数１００００以上であるという条件の場合、そのアクセスコマンドに含まれる条件が、そのカラムの数値が定数２００００以上という条件であれば、アクセスされるべきデータは移行されていると判断される。【００１８】
一方、移行条件が、あるカラムの数値が定数１００００以上であるという条件の場合、そのアクセスコマンドに含まれる条件が、そのカラムの数値が定数９０００以下という条件であれば、アクセスされるべきデータは移行されていないと判断される。さらに、移行条件が、あるカラムの数値が定数１００００以上であるという条件の場合、そのアクセスコマンドに含まれる条件が、そのカラムの数値が定数５０００以上という条件であれば、アクセスされるべきデータは一部移行されていると判断される。このように、移行判断部１３０は、単にデータが移行されているか否かのみならず、一部のデータが移行されているかどうかについても判断してよい。【００１９】
アクセス部１４０は、移行判断部１３０による判断に基づいて、第１の記憶装置１５０に記憶されたデータおよび第２の記憶装置１６０に移行されたデータの少なくとも一方を、アクセスコマンドに従ってアクセスする。具体的には、アクセス部１４０は、入力されたそのアクセスコマンドを書き換えることで、第１の記憶装置１５０または第２の記憶装置１６０にアクセスしてもよい。一例として、アクセスされるべきデータが第２の記憶装置１６０に既に移行されている場合において、アクセス部１４０は、アクセスコマンドの中のアクセス対象とするテーブルの指定を、第１の記憶装置１５０内の第１のテーブルから、第２の記憶装置１６０内の第２のテーブルに書き換えてよい。【００２０】
他の例として、アクセスされるべきデータが第１の記憶装置１５０および第２の記憶装置１６０の双方に渡る場合に、アクセス部１４０は、アクセスコマンド中のアクセス対象とするテーブルの指定を、第１のテーブルから、第１のテーブルおよび第１のテーブルを結合したテーブルに書き換えてよい。アクセスコマンドがＳＱＬの場合において、そのようなテーブルの結合は「ＵＮＩＯＮ  ＡＬＬ」コマンドによって表される。これにより、第１の記憶装置１５０内のデータベースおよび既に移行されたデータのそれぞれに対し適切にアクセスすることができる。【００２１】
なお、アクセス部１４０は、基本的機能としてＳＱＬなどで記述されたアクセスコマンドを、コンパイルして、第１の記憶装置１５０または第２の記憶装置１６０により直接解釈可能なコマンドに変換したうえで、そのコンパイル済みコマンドを第１の記憶装置１５０および第２の記憶装置１６０に対し発行する。コマンドキャッシュ１２５は、そのようなコンパイル処理を効率化するために、過去の入力されたアクセスコマンドと、当該アクセスコマンドをアクセス部１４０がコンパイルしてデータベースに対し発行したコマンドであるコンパイル済みコマンドとを、対応付けて記憶している。【００２２】
ここで、コンパイル済コマンドは、いわゆるアクセスプランと呼ばれるものであり、どのような処理をどのような順序で行うか、のみならず、どの記憶装置からどの情報を取得するべきかを示してよい。その例を以下に示す。
ステップ１：カラムＡの値が５０００から１００００までのデータを第１の記憶装置１５０から取得する
ステップ２：カラムＡの値が１００００以上のデータを第２の記憶装置１６０から取得する
ステップ３：…（以降同様に処理が続く）【００２３】
そして、アクセス部１４０は、コマンド入力部１２０が新たに入力されたアクセスコマンドが、既にコマンドキャッシュ１２５に記憶されている場合には、そのアクセスコマンドに対応してコマンドキャッシュ１２５に記憶されているコンパイル済コマンドを読み出す。その場合、アクセス部１４０は、そのアクセスコマンドを再度コンパイルすることなく、読み出したそのコンパイル済みコマンドが示す複数の処理を順次実行する。この結果、必要に応じて第１の記憶装置１５０および第２の記憶装置１６０がアクセスされる。これにより、既にキャッシュされている一部のコマンドについてはコンパイル処理が不要になるので、コマンド発行からアクセス完了までの待ち時間を短縮できる。【００２４】
但し、データ移行部１００がデータを新たに移行した場合においては、移行前後でコマンド入力部１２０がたとえ同じアクセスコマンドの入力を受け付けたとしても、アクセス部１４０が実際に発行するコンパイル済みコマンドは異なる場合がある。このため、データ移行部１００は、データを移行する毎にコマンドキャッシュ１２５をクリアする。クリアする部分は、新たに入力した移行条件に関する部分のみであることが望ましい。【００２５】
設定部１７０は、第２の記憶装置１６０に既に移行したデータに対するアクセスを許可するかどうかを、使用者ごとに設定する。例えば、ある使用者１について、移行したデータに対するアクセスを許可しない場合においては、その使用者１から、移行したデータに対するアクセスコマンドが発行されても、アクセス部１４０は、エラーを返答する。また、その使用者１から、第２のテーブルをアクセス対象として明示したアクセスコマンドが入力されても、アクセス部１４０は、エラーを返答する。【００２６】
これに代えて、移行したデータに対するアクセスを許可しない場合において、その使用者１から、移行したデータに対するアクセスコマンドが発行されると、アクセス部１４０は、その移行されたデータを無視してアクセス可能なデータのみにアクセスしてもよい。例えば、テーブルＴ１からテーブルＴ２に一部のデータが移行された場合において、「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  Ｔ１」というコマンドが発行されると、テーブルＴ２に移行されたデータは無視されて、テーブルＴ１に移行されたデータのみがアクセスされてよい。【００２７】
第１の記憶装置１５０および第２の記憶装置１６０に対するアクセスは、アクセスコマンドの書き換えのみではなく、アクセス部１４０が備えるチェック制約という機能と共に実現されてもよい。具体的には、アクセス部１４０は、第１制御部１４２および第２制御部１４５を有する。【００２８】
第１制御部１４２は、第１の記憶装置１５０に対応して設けられている。第１制御部１４２は、入力されたアクセスコマンドによりアクセスされるべきデータが、予め設定された第１チェック制約を満たすか否かを判断して、当該チェック制約を満たすことを条件に、第１のテーブルへのアクセスを許可し、当該チェック制約を満たさないことを条件に、第１のテーブルへのアクセスを禁止する。【００２９】
第２制御部１４５は、第２の記憶装置１６０に対応して設けられている。第２制御部１４５は、入力されたアクセスコマンドによりアクセスされるべきデータが、予め設定された第２チェック制約を満たすか否かを判断して、当該チェック制約を満たすことを条件に、第２のテーブルへのアクセスを許可し、当該チェック制約を満たさないことを条件に、第２のテーブルへのアクセスを禁止する。【００３０】
即ち、アクセスコマンドに含まれるアクセス条件が、第１および第２チェック制約のそれぞれと順次比較されて、その何れかが満たされれば、満たされたチェック制約に対応する記憶装置が自動的に選択されてそれに対するアクセスが成功する。例えば、第１のチェック制約が「カラムC1＜1000」であり、かつ、第２のチェック制約が「カラムC1＞＝1000」であり、入力されたＳＱＬのＳＥＬＥＣＴコマンドなどにおけるアクセス条件部分が「Ｃ１＜２０００」であれば、第１の記憶装置１５０から該当する全てのデータが取得され、かつ、第２の記憶装置１６０からカラムＣ１が２０００未満のデータが取得される。一方、情報を参照するコマンドにおけるアクセス条件部分が「カラムC1<500」なら、第１の記憶装置１５０のうちカラムC1＜500のデータが取得され、第２の記憶装置１６０からデ
ータは取得されない。【００３１】
なお、何れのチェック制約も満たされなければ、アクセスに失敗した旨のエラーが返答される。例えば、入力されたコマンドが情報の参照を示し(SQLのSELECT文)、該当するデ
ータがない場合、レコードなしで正常に終了する。入力されたコマンドが情報の挿入である場合には、どちらか１つのみ該当しないとエラーとなる。また、更新・削除は該当するデータがない場合、エラーとなる。エラーの発生のためのこれらの条件は、既存のデータベースの仕様に依存して定められてよい。【００３２】
アクセス部１４０は、これらのチェック制約を利用して第１の記憶装置１５０および第２の記憶装置１６０のそれぞれにおいて適切なデータにアクセスする。具体的には、データ移行時において、データ移行部１００は、入力された移行条件を第２チェック制約として第２制御部１４５の第２チェック制約記憶部１４８に設定する。そして、データ移行部１００は、入力された移行条件の論理否定を第１チェック制約として第１制御部１４２の第１チェック制約記憶部１４６に設定する。また、上述のように、アクセス部１４０は、入力されたアクセスコマンド中のアクセス対象とするテーブルの指定を、第１のテーブルに代えて、第１のテーブルおよび第２のテーブルを結合したテーブルに書き換える。すると、以降に入力されるアクセスコマンドについては、それに含まれるアクセス条件に従って、第１の記憶装置１５０および第２の記憶装置１６０の何れかあるいは双方がアクセス対象として適切に選択される。【００３３】
図２は、本実施形態に係る制御システム１０がデータベースからデータを移行し、そして、移行したデータにアクセスする処理の流れを示す。まず、データ移行部１００は、第１の記憶装置１５０に記憶されたデータベースの一部を第２の記憶装置１６０に移行させる指示を受信したかどうかを判断する（Ｓ２００）。移行させる指示とは、例えば、移行元となるデータベースのテーブル（本実施形態においてはＴ１）、移行条件（例えばカラムとそのカラムの数値の範囲）、および、移行先のデータを読み出し専用にするかどうかの設定、を含む。【００３４】
移行させる指示を受信したことに応じて（Ｓ２００：ＹＥＳ）、データ移行部１００は、移行元のテーブルにとってその移行指示が新規なものか、即ち、過去にその移行元のテーブルから何れのデータもまだ移行されていないかを判断する（Ｓ２１０）。その移行指示が新規であれば（Ｓ２１０：ＹＥＳ）、データ移行部１００は、第１の記憶装置１５０に記憶されたデータベースのうち、使用者が入力した移行条件を満たすデータを、第２の記憶装置１６０に移行する（Ｓ２２０）。この処理の具体例を、図３−８を参照して説明する。【００３５】
図３は、図２のＳ２２０における処理の流れの詳細を示す。図４は、本実施形態に係る第１の記憶装置１５０に記憶されたデータベースの一例を示す。図３の処理開始時点において、図４に示すように、第１の記憶装置１５０は、例えばリレーショナルデータベースなどの、テーブル構造のデータベースを記憶している。【００３６】
第１の記憶装置１５０は、テーブルＴ１を記憶している。テーブルＴ１は、カラムＣ１およびカラムＣ２を含む。カラムＣ１のデータ型はＤａｔｅ（日付）型であり、カラムＣ２のデータ型は文字列（Ｃｈａｒ）型である。【００３７】
この図４にはテーブルＴ１のうちの３つのレコードを示す。第１のレコードは、カラムＣ１に「１９９９−０６−１５」を含み、カラムＣ２に「ＡＡＡ１」を含む。第２のレコードは、カラムＣ１に「２０００−０８−２２」を含み、カラムＣ２に「ＡＡＡ２」を含む。第３のレコードは、カラムＣ１に「２００２−１２−０１」を含み、カラムＣ２に「ＡＡＡ３」を含む。【００３８】
図３の説明に戻る。まず、データ移行部１００は、第２の記憶装置１６０に移行したデータのデータ構造を規定するための第２のテーブルを生成する（Ｓ３００）。このテーブルのことを仮想テーブルと呼ぶ。この仮想テーブルの一例を図５に示す。【００３９】
図５は、本実施形態に係る第２の記憶装置１６０に対応付けて生成した仮想テーブルの一例を示す。この仮想テーブルの名前はＴ１＿ＷＯＲＭである。この仮想テーブルは、テーブルＴ１と全く同じように、カラムＣ１およびカラムＣ２を含む。カラムＣ１のデータ型はＤａｔｅ（日付）型であり、カラムＣ２のデータ型は文字列（Ｃｈａｒ）型である。但し、テーブルＴ１＿ＷＯＲＭは何らレコードを含まない。【００４０】
例えば、ＩＢＭコーポレーションのＦｅｄｅｒａｔｉｏｎ  Ｓｅｒｖｅｒの機能を用いて、第２の記憶装置１６０（ここでは例えばＩＢＭコーポレーションの製品ＤＲ５５０）にアクセスするためのｗｒａｐｐｅｒを開発すると、ＩＢＭコーポレーションのＤＢ２サーバに対し以下のようなコマンドを順次発行することで、ｔ１＿ｗｏｒｍという仮想テーブルが生成される。このテーブルを用いてＤＲ５５０にアクセスすることができる。
ｃｒｅａｔｅ  ｗｒａｐｐｅｒ  ｗｏｒｍ＿ｗｒａｐｐｅｒ  ｌｉｂｒａｒｙ  'ｄｂ２
ｑｇｊａｖａ．ｄｌｌ'  ｏｐｔｉｏｎｓ（ｕｎｆｅｎｃｅｄ＿ｗｒａｐｐｅｒ＿ｃｌａ
ｓｓ  'ＵｎｆｅｎｃｅｄＴａｐｅＷｒａｐｐｅｒ'）；
ｃｒｅａｔｅ  ｓｅｒｖｅｒ  ｗｏｒｍ＿ｓｅｒｖｅｒ  ｗｒａｐｐｅｒ  ｗｏｒｍ＿ｗｒａｐｐｅｒ  ｏｐｔｉｏｎｓ  （ｔａｒｇｅｔ  'ＤＲ５５０'）；
ｃｒｅａｔｅ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ  ｆｏｒ  ｓｅｒｖｅｒ  ｗｏｒｍ＿ｓｅｒｖｅｒ  ｏｐｔｉｏｎｓ  （ｂａｓｅ＿ｓｃｈｅｍａ  'ＵＳＥＲ１'，  ｂａｓｅ＿ｔａｂｌｅ  'Ｔ１'，  ｎｕｍ＿ｗｏｒｍ＿ｆｉｌｅ＿ｒｅｃｏｒｄｓ  '１００'，  ｃａｃｈｅ＿ｄｉｒ  '／ｖａｒ／ｃａｃｈｅ／ｄｂ１／ｔ１＿ｗｏｒｍ'，  ｃａｃｈｅ＿ｓｉｚｅ  '１Ｇ'）；【００４１】
図３の説明に戻る。次に、データ移行部１００は、入力を受けたデータ移行指示に基づいて、各種の情報を登録する（Ｓ３１０）。例えば、データ移行部１００は、入力された移行条件を第２チェック制約として第２制御部１４５に設定する。また、データ移行部１００は、その移行条件を制御用記憶装置１１０に格納すると共に、移行元であるテーブルＴ１および移行先であるテーブルＴ１＿ＷＯＲＭを対応付けた対応情報を制御用記憶装置１１０に格納する。さらに、データ移行部１００は、移行先のデータに読み出し専用の属性を設定する指示を受けた場合には、テーブルＴ１＿ＷＯＲＭに読み出し専用の属性を設定してよい。その一例を図６に示す。【００４２】
図６は、本実施形態に係る制御用記憶装置１１０に記憶された、データ移行後における移行条件および対応情報を示す。制御用記憶装置１１０は、移行条件として「Ｃ１＜＝１９９９−１２−３１」を記憶している。また、制御用記憶装置１１０は、対応情報としてベーステーブルと移行先テーブルとを対応付けて記憶している。ベーステーブルは、ＵＳＥＲ．Ｔ１であり、移行先テーブルは、ＵＳＥＲ．Ｔ１＿ＷＯＲＭである。これにより、アクセス部１４０は、テーブルＴ１に対するアクセスコマンドを、テーブルＴ１およびテーブルＴ１＿ＷＯＲＭに対するアクセスコマンドとみなすことができる。さらに、制御用記憶装置１１０は、読み出し専用属性およびアタッチ有効属性を記憶している。読み出し専用属性は、移行先テーブルのアクセス制限を示す。アタッチ有効属性は、上記対応情報による対応付けが有効かどうかを示す。【００４３】
以上の処理を、例えばＩＢＭコーポレーションのＤＢ２サーバ用のコマンドを拡張して実現すると、例えば以下のようになる。
まず、データ移行先仮想テーブルの作成については、既に例示したとおりである。
データ移行条件の登録（Ｔ１＿ＷＯＲＭに対し図６に示す各種情報を定義する）
ａｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ  ａｄｄ  ａｔｔａｃｈ  ｉｎｆｏ  （ｂａｓｅ＿ｓｃｈｅｍａ  'ＵＳＥＲ１'，  ｂａｓｅ＿ｔａｂｌｅ  '
Ｔ１'，  ｒａｎｇｅ＿ｋｅｙ  'Ｃ１'，  ｅｎｄｉｎｇ  '１９９９−１２−３１'，  
ｒｅａｄｏｎｌｙ  'Ｙ'）；
Ｔ１＿ＷＯＲＭテーブルのチェック制約を登録する（上記で登録した移行条件を、チェック制約として登録する）
ａｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＜＝'１９９９−１２−３１'）  ｎｏｔ  ｅｎｆｏｒｃｅｄ；
Ｔ１テーブルをロックする 
ｌｏｃｋ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｉｎ  ｅｘｅｃｌｕｓｉｖｅ  ｍｏｄｅ；
Ｔ１テーブルの移行対象データをT1_WORMテーブルに移行する（図６の情報を用いてデー
タを移行する）
ａｒｃｈｉｖｅ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１；
Ｔ１テーブルのチェック制約を登録する（図６の移行条件と逆の条件をT1テーブルのチェック制約として登録する）
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＞'１９９９−１２−３１'）；
Ｔ１テーブルにT1_WORMテーブルをアタッチする（図６のアタッチ有効属性を、「無効」
から「有効」に変更する）
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｔｔａｃｈ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；
T1テーブルとT1_WORMテーブルに関連するSQL文のキャッシュをクリアする 
ｆｌｕｓｈ  ｓｔａｔｅｍｅｎｔ  ｃａｃｈｅ  ｆｏｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１；
ｆｌｕｓｈ  ｓｔａｔｅｍｅｎｔ  ｃａｃｈｅ  ｆｏｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；
上記設定情報の確定、および、Ｔ１テーブルのロック解除を行う
ｃｏｍｍｉｔ；  なお、以上の各機能は以上のように複数のコマンドによって実現されてもよいし、これらの機能をまとめて実現するための単一のコマンドによって実現されてもよい。【００４４】
なお、データ移行部１００は、移行したデータを第２の記憶装置１６０において複数のファイルに分割して保存してよい。これら複数のファイルのそれぞれには、複数の部分データのそれぞれが格納されている。そしてこれら複数の部分データは、それぞれ異なる条件を満たす。例えば、あるファイルには、カラムＣ１が１９９８−０１−０１から１９９８−１２−３１までの範囲にあるレコードが格納され、他のファイルには、カラムＣ１が１９９７−０１−０１から１９９７−１２−３１までの範囲にあるレコードが格納されてよい。この場合には、データ移行部１００は、このような各部分データが満たすべき条件を制御用記憶装置１１０に記憶してよい。【００４５】
図３の説明に戻る。次に、データ移行部１００は、排他制御により移行元のデータベースをロックしてアクセスを禁止する（Ｓ３２０）。そして、データ移行部１００は、第１の記憶装置１５０に記憶されたデータベースのうち移行条件を満たすデータを第２の記憶装置１６０に移行する（Ｓ３３０）。移行されたデータは、必要に応じて暗号化され、または、データ圧縮されてよい。また、データ移行部１００は、入力された移行条件の論理否定を第１チェック制約として第１制御部１４２に設定する（Ｓ３４０）。【００４６】
データ移行部１００は、次に、移行元のテーブルを移行先のテーブルにアタッチする（Ｓ３５０）。アタッチとは、対応付けを示す対応情報を有効に設定することをいい、具体的には上記図６のアタッチ有効属性を有効に設定することである。これと共に、データ移行部１００は、コマンドキャッシュ１２５をクリアする（Ｓ３６０）。そして、データ移行部１００は、データベースをアンロックしてアクセスを許可する（Ｓ３７０）。
以上の処理によりデータが第１の記憶装置１５０から第２の記憶装置１６０に移行した後の第１の記憶装置１５０および第２の記憶装置１６０の例を図７および図８に示す。【００４７】
図７は、本実施形態に係る第１の記憶装置１５０に記憶された、データ移行後におけるデータベースの一例を示す。第１の記憶装置１５０は、Ｃ１の数値が１９９９−１２−３１よりも新しい日付を表すレコードを記憶し、当該数値が１９９９−１２−３１以前の日付を表すレコードは第１の記憶装置１５０から削除されている。また、第１チェック制約記憶部１４６は、移行条件の論理否定である「Ｃ１＞１９９９−１２−３１」を第１チェック制約として記憶している。【００４８】
図８は、本実施形態に係る第２の記憶装置１６０に記憶された、データ移行後における仮想テーブルの一例を示す。第２の記憶装置１６０は、Ｃ１の数値が１９９９−１２−３１以前の日付を表すレコードを記憶し、当該数値が１９９９−１２−３１よりも新しい日付を表すレコードは第２の記憶装置１６０に移行されていない。また、第２チェック制約記憶部１４８は、移行条件である「Ｃ１＜＝１９９９−１２−３１」を第２チェック制約として記憶している。【００４９】
図２の説明に戻る。一方、移行指示を受信していない場合には、コマンド入力部１２０は、データベースに対するアクセスコマンドの入力を受け付けたかどうかを判断する（Ｓ２６０）。アクセスコマンドの入力を受け付けたことに応じて（Ｓ２６０：ＹＥＳ）、アクセス部１４０は、第１の記憶装置１５０および第２の記憶装置１６０の少なくとも１つに対しアクセスする（Ｓ２８０）。その処理の詳細を図９に示す。【００５０】
図９は、図２のＳ２８０における処理の流れの詳細を示す。まず、アクセス部１４０は、アクセスコマンドを発行したユーザに対し、移行先のデータに対するアクセスが許可されているかどうかを判断する（Ｓ９００）。この許可は、たとえば上述の設定部１７０により設定されたものである。【００５１】
移行先のデータへのアクセスが許可されていない場合に（Ｓ９００：ＮＯ）、アクセス部１４０は、そのデータへの参照をエラーとするように設定されているか、または、そのデータへの参照は無視するように設定されているかを判断する（Ｓ９３０）。【００５２】
無視するような設定がされている場合には（Ｓ９３０：無視する）、アクセス部１４０は、入力されたアクセスコマンドをそのまま発行する（Ｓ９３５）。この結果、もしアクセスの対象が移行先のデータであれば、そのアクセスは無視されて、移行元のデータのみがアクセスされる。【００５３】
一方、移行先のデータへのアクセスをエラーとする設定がされている場合に（Ｓ９３０：エラーとする）、アクセス部１４０は、コマンド入力部１２０が入力したアクセスコマンドを書き換えて実行する（Ｓ９４０）。その書き換えの一例については、図１０を参照して後に説明する。【００５４】
次に、移行判断部１３０は、そのアクセスコマンドに従ってアクセスされるべきデータの少なくとも一部が、既に第２の記憶装置１６０に移行されたか否かを、入力されたそのアクセスコマンドおよび入力されたその移行条件に基づいて判断する（Ｓ９５０）。既に第２の記憶装置１６０に移行されたことを条件に（Ｓ９５０：ＹＥＳ）、アクセス部１４０は、アクセスコマンドを入力したユーザに対しエラーを通知する（Ｓ９６０）。【００５５】
また、移行先のデータへのアクセスが許可されている場合においては（Ｓ９００：ＹＥＳ）、アクセス部１４０は、入力されたアクセスコマンドを書き換えて実行する（Ｓ９１０）。その場合においては、アクセス部１４０は、さらに、第２の記憶装置１６０に移行されたデータに読み出し専用の属性が設定されており、かつ、そのデータに対するアクセスがそのデータを更新する要求であるかを判断する（Ｓ９２０）。そのような場合には（Ｓ９２０：ＹＥＳ）、アクセス部１４０は、Ｓ９６０に処理を移してエラーを通知する。【００５６】
図１０は、本実施形態に係るアクセス部１４０により書き換えられるアクセスコマンドの一例を示す。図１０（ａ）に、書き換える前のアクセスコマンドを示す。このアクセスコマンドは、カラムＣ１の値が「１９００−０１−０１」よりも大きい（即ち日付が新しい）レコードをテーブルＴ１から選択するコマンドを示す。このアクセスコマンドの書き換えの例を、以下に説明する。【００５７】
チェック制約が設定されている場合において、それぞれのテーブルから読み出すべきレコードが満たす条件はチェック制約により判断される。従って、アクセス部１４０は、アクセスコマンド内に指定されたアクセス対象となるテーブルを書き換えれば充分であり、アクセスコマンド内で指定されるアクセス条件を書き換える必要はない。【００５８】
例えば図１０（ｂ）に示すように、アクセス部１４０は、アクセス対象となるテーブルの指定を「Ｔ１」から、「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＵＳＥＲ１．Ｔ１  ＵＮＩＯＮ  ＡＬＬ  ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＵＳＥＲ１．Ｔ１＿ＷＯＲＭ」に書き換える。この結果、第１の記憶装置１５０および第２の記憶装置１６０のそれぞれをアクセス対象とすることができる。【００５９】
以上、アクセス部１４０によれば、入力されたアクセスコマンドにより指定されるデータのうち、データ移行時に入力された移行条件を満たさないレコードを第１のテーブルから読み出し、当該移行条件を満たすレコードを第２のテーブルから読み出すことができる。【００６０】
なお、以上の例に加えて、第２の記憶装置１６０に対する設定によりレコード更新またはレコード挿入の操作が許可されている場合においては、アクセス部１４０は、ＳＥＬＥＣＴコマンドのみならず、ＩＮＳＥＲＴコマンドまたはＵＰＤＡＴＥコマンドで書き換えてもよい。但し、入力されるコマンドがＵＰＤＡＴＥコマンドの場合において、データの移行条件として設定されているカラムの内容を変更する場合においては、単に上記の書換を行うのでは不充分である。その具体例を図１０（ｃ）、図１０（ｄ）および図１０（ｅ）に示す。【００６１】
図１０（ｃ）に、書き換える前のＵＰＤＡＴＥコマンドを示す。このアクセスコマンドは、テーブルＴ１のうち、カラムＣ２の値が「１００」であるレコードのカラムＣ１に「２０００−１０−１０」を設定するコマンドを示す。カラムC1が2000-10-10のレコードは、テーブルT1に属す必要があるため、T1_WORMに該当するレコードがある場合、それらをT1に移動する必要がある。従って、アクセス部１４０は、このコマンドを、図１０（ｄ）
−（ｆ）に示す３つのコマンドに書き換える。この結果、図１０（ｄ）に示すように、書き換えられたコマンドは、まず、テーブルＵＳＥＲ１．Ｔ１のうち、カラムＣ２の値が「１００」であるレコードのカラムＣ１に「２０００−１０−１０」を設定する。【００６２】
そして、Ｔ１＿ＷＯＲＭの該当するデータをＵＰＤＡＴＥして、ＵＳＥＲ１．Ｔ１テーブルに移動する必要があるため、図１０（ｅ）に示すコマンドの実行が必要である。この結果、ＵＳＥＲ１．Ｔ１＿ＷＯＲＭのうち該当するレコードが取得されて、そのレコードのカラムＣ１に「２０００−１０−１０」がセットされ、そのレコードがテーブルＵＳＥＲ１．Ｔ１に挿入される。但し、ここではテーブルＴ１のレコードがカラムＣ１、Ｃ２およびＣ３のみを含むと仮定した。さらに、図１０（ｆ）に示すように、テーブルＵＳＥＲ１．Ｔ１＿ＷＯＲＭから不要なデータが削除される。【００６３】
以上、図９および図１０に示すように、入力されたアクセスコマンドが、データ移行前のデータベースに対するものであっても、データ以降後のデータを含むデータベースに適切にアクセスできる。なお、アクセスの結果読み出されたデータは、その後同一のレコードに対するアクセスのために、ＲＡＭなどの記憶装置内に設けた記憶域にキャッシュされてもよい。【００６４】
図２の説明に戻る。コマンド入力部１２０が入力したコマンドがアクセスコマンドで無い場合に（Ｓ２６０：ＮＯ）、制御システム１０は、そのコマンドに従う従来の処理を行う（Ｓ２７０）。一方で、受信した移行指示が新規の移行指示ではない場合に（Ｓ２１０：ＮＯ）、制御システム１０は、移行指示が、新たにテーブルを生成してそのテーブルにデータを移行する指示か、あるいは、既にデータを移行した移行先のテーブルにデータを追加するかどうかを判断する（Ｓ２３０）。【００６５】
移行先のテーブルにデータを追加することを条件に（Ｓ２３０：ＮＯ）、データ移行部１００は、第１の記憶装置１５０からデータベースの一部を読み出して第２の記憶装置１６０に追加して移行する処理を行う（Ｓ２４０）。その処理の詳細を、図１１を参照して説明する。【００６６】
図１１は、図２のＳ２４０における処理の流れの詳細を示す。データ移行部１００は、まず、排他制御によりデータベースをロックしてアクセスを禁止する（Ｓ１１００）。これは、例えば以下のコマンドにより実現される。
ｌｏｃｋ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｉｎ  ｅｘｅｃｌｕｓｉｖｅ  ｍｏｄｅ；  次に、データ移行部１００は、データ移行元のテーブル（例えばＴ１）をデータ移行先のテーブル（例えばＴ１＿ＷＯＲＭ）からデタッチする（Ｓ１１１０）。これは、例えば、制御用記憶装置１１０に記憶されたアタッチ属性を無効に設定することにより実現される。そのコマンド例は以下の通りである。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｄｅｔａｃｈ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；【００６７】
次に、データ移行部１００は、入力を受けたデータ移行指示に基づいて、各種の情報を登録する（Ｓ１１２０）。例えば、データ移行部１００は、既に第２チェック制約として第２制御部１４５に設定されている条件と、追加して移行するべきとして入力された条件との論理和を、新たな第２チェック制約として第２制御部１４５に設定する。また、データ移行部１００は、既に制御用記憶装置１１０に記憶された移行条件と新たな移行条件との論理和を生成して制御用記憶装置１１０に格納すると共に、移行元であるテーブルＴ１および移行先であるテーブルＴ１＿ＷＯＲＭを対応付けた対応情報を制御用記憶装置１１０に格納するさらに、データ移行部１００は、必要に応じて、移行先の仮想テーブルに読み出し専用属性を設定してよい。そのコマンド例は以下の通りである。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｄｒｏｐ  ｃｈｅｃｋ  ｃ１；  
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＞'２０００−１２−３１'）；
その結果として登録された情報の一例を図１２に示す。【００６８】
図１２は、本実施形態に係る制御用記憶装置１１０に記憶された、データを追加して移行した後における移行条件および対応情報を示す。制御用記憶装置１１０は、移行条件として「Ｃ１＜＝２０００−１２−３１」を記憶している。また、制御用記憶装置１１０は、対応情報としてベーステーブルと移行先テーブルとを対応付けて記憶している。ベーステーブルは、ＵＳＥＲ．Ｔ１であり、移行先テーブルは、ＵＳＥＲ．Ｔ１＿ＷＯＲＭである。さらに、制御用記憶装置１１０は、読み出し専用属性およびアタッチ有効属性を記憶している。アクセス条件を除き図６に示した制御用記憶装置１１０の具体例と略同一であるから、説明を省略する。【００６９】
図１１の説明に戻る。次に、データ移行部１００は、第１の記憶装置１５０に記憶されたデータベースのうち、追加して移行すべきとして入力された条件を満たすデータを読み出して、第２の記憶装置１６０にさらに移行する（Ｓ１１３０）。そのコマンド例は以下の通りである。
ａｒｃｈｉｖｅ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１；
移行されたデータは、必要に応じて暗号化され、または、データ圧縮されてよい。また、データ移行部１００は、既に第１チェック制約として第１制御部１４２に設定されている条件と、追加して移行するべきとして入力された条件の否定との論理和を、新たな第１チェック制約として設定する（Ｓ１１４０）。そのコマンド例は以下の通りである。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｄｒｏｐ  ｃｈｅｃｋ  ｃ１；  
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＞'２０００−１２−３１'）；【００７０】
そして、データ移行部１００は、移行元のテーブルを移行先のテーブルにアタッチする（Ｓ１１５０）。これは、具体的には上記制御用記憶装置のアタッチ有効属性を有効に設定することで実現されてよい。そのコマンド例は以下の通りである。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｔｔａｃｈ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；
これと共に、データ移行部１００は、コマンドキャッシュ１２５をクリアする（Ｓ１１６０）。そのコマンド例は以下の通りである。
ｆｌｕｓｈ  ｓｔａｔｅｍｅｎｔ  ｃａｃｈｅ  ｆｏｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１；  
ｆｌｕｓｈ  ｓｔａｔｅｍｅｎｔ  ｃａｃｈｅ  ｆｏｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；
そして、データ移行部１００は、データベースをアンロックしてアクセスを許可する（Ｓ１１７０）。そのコマンド例は以下の通りである。
ｃｏｍｍｉｔ；
以上の処理によりデータが追加して第１の記憶装置１５０から第２の記憶装置１６０に移行した後の第１の記憶装置１５０および第２の記憶装置１６０の例を図１３および図１４に示す。【００７１】
図１３は、本実施形態に係る第１の記憶装置１５０に記憶された、データを追加して移行した後におけるデータベースの一例を示す。第１の記憶装置１５０は、Ｃ１の数値が２０００−１２−３１より新しい日付を表すレコードを記憶し、当該数値が２０００−１２−３１以前の日付を表すレコードは第１の記憶装置１５０から削除されている。また、第１チェック制約記憶部１４６は、追加の移行条件の論理否定である「Ｃ１＞２０００−１２−３１」を第１チェック制約として記憶している。【００７２】
図１４は、本実施形態に係る第２の記憶装置１６０に記憶された、データを追加して移行した後における仮想テーブルの一例を示す。第２の記憶装置１６０は、Ｃ１の数値が２０００−１２−３１以前の日付を表すレコードを記憶し、当該数値が２０００−１２−３１よりも新しい日付を表すレコードは第２の記憶装置１６０に移行されていない。また、第２チェック制約記憶部１４８は、移行条件である「Ｃ１＜＝２０００−１２−３１」を第２チェック制約として記憶している。【００７３】
図２の説明に戻る。入力した移行指示が、新たにテーブルを生成してそのテーブルにデータを移行する指示であることを条件に（Ｓ２３０：ＹＥＳ）、データ移行部１００は、例えば上記Ｔ１＿ＷＯＲＭに加えて新たなテーブルを生成して、そのテーブルにテーブルＴ１からデータを移行する（Ｓ２４０）。新たなテーブルは、第３の記憶装置１６６内に生成されてもよい。その場合におけるアクセス部１４０のハードウェア構成の一例を図１５に示す。【００７４】
図１５は、本実施形態に係るアクセス部１４０の他の例を示す。この例において、制御システム１０は、図１に示す構成に加えて、さらに、第３の記憶装置１６６を備えてよい。第３の記憶装置１６６は、第２の記憶装置１６０とは性質の異なるものであることが望ましい。【００７５】
例えば、第３の記憶装置１６６は、第２の記憶装置１６０と比較して高速に動作してよく、その場合、アクセスのレイテンシが小さくかつスループットが高い。一方で、第２の記憶装置１６０は第３の記憶装置１６６と比較して安価かつ大容量であってよい。このように、移行先の複数の記憶装置の性質が異なれば、利用者は移行しようとするデータの性質に応じて（例えば頻繁にアクセスされるか、あるいは、サイズが大きいかに応じて）移行するべき記憶装置を選択できる。【００７６】
そしてこの例の場合、アクセス部１４０は、図１に示す構成に加えて、更に、第３制御部１４６を有してよい。第３制御部１４６は、第３の記憶装置１６６に対応するチェック制約を記憶するための第３チェック制約記憶部１４９を有してよい。制御システム１０のその他の構成は、図１を参照して説明した制御システム１０と略同一であるから説明を省略する。【００７７】
図１６は、本実施形態に係る制御システム１０が新たに作成した他のテーブルにデータを追加して移行する処理の流れを示す。まず、データ移行部１００は、第３の記憶装置１６６中に、新たな仮想テーブルＴ１＿ＷＯＲＭ２を生成する（Ｓ１６００）。次に、データ移行部１００は、入力された移行条件その他の各種情報を制御用記憶装置１１０に登録する（Ｓ１６１０）。この登録の処理は、例えば以下のコマンドにより実現される。
ａｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ２  ａｄｄ  ａｔｔａｃｈ  ｉｎｆｏ  （ｂａｓｅ＿ｓｃｈｅｍａ  'ＵＳＥＲ１'，  ｂａｓｅ＿ｔａｂｌｅ  '
Ｔ１'，  ｒａｎｇｅ＿ｋｅｙ  'Ｃ１'，  ｅｎｄｉｎｇ  '１９９９−１２−３１'，  
ｒｅａｄｏｎｌｙ  'Ｙ'）；【００７８】
次に、データ移行部１００は、新たな移行先テーブルであるＴ１＿ＷＯＲＭ２のチェック制約を第３チェック制約記憶部１４９に登録する（Ｓ１６２０）。この登録の処理は、例えば以下のコマンドにより実現される。
ａｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ２  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＜＝'１９９９−１２−３１'）  ｎｏｔ  ｅｎｆｏｒｃｅｄ；
そして、データ移行部１００は、移行元テーブルＴ１をロックしてアクセスを禁止する（Ｓ１６２５）。このロックの処理は、例えば以下のコマンドにより実現される。
ｌｏｃｋ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｉｎ  ｅｘｅｃｌｕｓｉｖｅ  ｍｏｄｅ；【００７９】
次に、データ移行部１００は、移行先テーブルであるＴ１＿ＷＯＲＭを移行元テーブルであるＴ１からデタッチする（Ｓ１６３０）。このデタッチの処理は、例えば以下のコマンドにより実現される。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｄｅｔａｃｈ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；
そして、データ移行部１００は、データ移行条件を変更する。この変更の処理は、例えば以下のコマンドにより実現される。
ａｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ  ａｌｔｅｒ  ａｔｔａｃｈ  ｉｎｆｏ  （ｓｔａｒｔｉｎｇ  '２０００−０１−０１'，  ｅｎｄｉｎｇ  '２
００４−１２−３１'）；
その結果として登録される情報の一例を図１７に示す。【００８０】
図１７は、本実施形態に係る制御用記憶装置１１０に記憶された、新たに作成した他のテーブルにデータを移行した後における移行条件および対応情報を示す。この例において、移行先テーブルＴ１＿ＷＯＲＭおよびＴ１＿ＷＯＲＭ２のそれぞれに対応して移行条件が入力される。まず、Ｔ１＿ＷＯＲＭに対応する移行条件は、カラムＣ１の数値が１９９９−１２−３１以前の日付である、という条件であり、移行指示は、その移行条件を満たすレコードをテーブルＴ１＿ＷＯＲＭ２に移行するという指示である。また、Ｔ１＿ＷＯＭＲ２に対応する移行条件は、カラムＣ１の数値が２００１−０１−０１以上でありかつ２００４−１２−３１以下であるという条件であり、移行指示は、その移行条件を満たすレコードをテーブルＴ１＿ＷＯＲＭに移行するという指示である。【００８１】
制御用記憶装置１１０は、移行先テーブルであるテーブルＵＳＥＲ１．Ｔ１＿ＷＯＲＭおよびＵＳＥＲ１．Ｔ１＿ＷＯＲＭ２のそれぞれについて、移行条件を記憶している。ＵＳＥＲ１．Ｔ１＿ＷＯＲＭについて、制御用記憶装置１１０は、移行条件として「Ｃ１＞＝２０００−０１−０１  ＡＮＤ  Ｃ１＜＝２００４−１２−３１」を記憶している。また、ＵＳＥＲ１．Ｔ１＿ＷＯＲＭ２について、制御用記憶装置１１０は、移行条件として「Ｃ１＜＝１９９９−１２−３１」を記憶している。【００８２】
また、図６の例と同様に、制御用記憶装置１１０は、それぞれの移行先テーブルに対応付けて、読み出し専用属性およびアタッチ有効属性を記憶している。読み出し専用属性は、移行先テーブルのアクセス制限を示す。アタッチ有効属性は、上記対応情報による対応付けが有効かどうかを示す。【００８３】
図１６の説明に戻る。次に、データ移行部１００は、移行先テーブルＴ１＿ＷＯＲＭのチェック制約を変更する（Ｓ１６５０）。この変更の処理は、例えば以下のコマンドによって実現される。
aｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ  ｄｒｏｐ  ｃｈｅｃｋ
ｃ１；  
ａｌｔｅｒ  ｎｉｃｋｎａｍｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＞＝'２０００−０１−０１'  ａｎｄ  ｃ１＜＝'
２００４−１２−３１'）  ｎｏｔ  ｅｎｆｏｒｃｅｄ；【００８４】
そして、データ移行部１００は、移行を指示されたデータを、第１の記憶装置１５０から読み出して第３の記憶装置１６６に移行する（Ｓ１６６０）。この以降の処理は、例えば以下のコマンドにより実現される。
ａｒｃｈｉｖｅ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１；
これにより、テーブルＴ１にもともと記憶されていたデータは、入力された移行条件に従って、テーブルＴ１、Ｔ１＿ＷＯＲＭおよびＴ１＿ＷＯＲＭ２に分散して記憶される。【００８５】
そして、データ移行部１００は、テーブルＴ１のチェック制約を変更する（Ｓ１６７０）。この変更の処理は、例えば以下のコマンドにより実現される。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ｄｒｏｐ  ｃｈｅｃｋ  ｃ１；  
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｄｄ  ｃｏｎｓｔｒａｉｎｔ  ｃ１  ｃｈｅｃｋ  （ｃ１＞'２００４−１２−３１'）；
そして、データ移行部１００は、テーブルＴ１にテーブルＴ１＿ＷＯＲＭおよびテーブルＴ１＿ＷＯＲＭ２のそれぞれをアタッチする（Ｓ１６８０）。この処理は、例えば以下のコマンドにより実現される。
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｔｔａｃｈ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ；  
ａｌｔｅｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１  ａｔｔａｃｈ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１＿ｗｏｒｍ２；【００８６】
そして、データ移行部１００は、コマンドキャッシュ１２５をクリアする（Ｓ１６９０）。この処理は、例えば以下のコマンドにより実現される。
ｆｌｕｓｈ  ｓｔａｔｅｍｅｎｔ  ｃａｃｈｅ  ｆｏｒ  ｔａｂｌｅ  ｕｓｅｒ１．ｔ１；  
そして、データ移行部１００は、テーブルＴ１をアンロックしてテーブルＴ１へのアクセスを許可する（Ｓ１６９５）。この処理は、例えば以下のコマンドにより実現される。    ｃｏｍｍｉｔ；【００８７】
図１８は、本実施形態に係る第１の記憶装置１５０に記憶された、新たに作成した他のテーブルにデータを移行した後におけるデータベースの一例を示す。第１の記憶装置１５０は、Ｃ１の数値が２００５−０１−０１よりも以降の日付を表すレコードを記憶し、当該数値が２００４−１２−３１以前の日付を表すレコードは第１の記憶装置１５０から削除されている。また、第１チェック制約記憶部１４６は、Ｔ１＿ＷＯＲＭおよびＴ１＿ＷＯＲＭ２のそれぞれに対応する移行条件の論理和の論理否定である「Ｃ１＞＝２００５−０１−０１」を第１チェック制約として記憶している。【００８８】
図１９は、本実施形態に係る第２の記憶装置１６０に記憶された、新たに作成した他のテーブルにデータを移行した後におけるデータベースの一例を示す。第２の記憶装置１６０は、Ｃ１の数値が２００１−０１−０１以降かつ２００４−１２−３１以前の日付を表すレコードを記憶し、当該数値がその範囲外の日付を表すレコードは第２の記憶装置１６０に移行されていない。また、第２チェック制約記憶部１４８は、移行条件である「Ｃ１＞＝２０００−０１−０１  ＡＮＤ  Ｃ１＜＝２００４−１２−３１」を第２チェック制約として記憶している。【００８９】
図２０は、本実施形態に係る第３の記憶装置１６６に記憶された、新たに作成した他のテーブルにデータを移行した後におけるデータベースの一例を示す。第３の記憶装置１６６は、Ｃ１の数値が１９９９−１２−３１以前の日付を表すレコードを記憶し、当該数値がその範囲外の日付を表すレコードは第３の記憶装置１６６に移行されていない。また、第３チェック制約記憶部１４９は、移行条件である「Ｃ１＜＝１９９９−１２−３１」を第３チェック制約として記憶している。【００９０】
以上、図１５−図２０を参照して説明したように、本実施形態に係る制御システム１０によれば、ベーステーブルに記憶されたデータの一部ずつを、性質の異なる複数の記憶装置に移行させることができる。これにより、例えば、比較的高速動作する記憶装置にはアクセス頻度の高いデータを記憶し、低速だが大容量の記憶装置にはアクセス頻度の低いデータを記憶させるなどのように、データの用途に応じて記憶装置を使い分けることができる。【００９１】
図２１は、本実施形態に係る制御システム１０として機能するコンピュータ５００のハードウェア構成の一例を示す。コンピュータ５００は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。【００９２】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。【００９３】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、コンピュータ５００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又はハードディスクドライブ１０４０に提供する。【００９４】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、コンピュータ５００の起動時にＣＰＵ１０００が実行するブートプログラムや、コンピュータ５００のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０またはハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。【００９５】
コンピュータ５００に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して
、記録媒体から読み出されコンピュータ５００にインストールされて実行される。プログラムがコンピュータ５００等に働きかけて行わせる動作は、図１から図１４において説明した制御システム１０における動作と同一であるから、説明を省略する。【００９６】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ５００に提供してもよい。【００９７】
以上、本実施形態に係る制御システム１０によれば、ＷＯＲＭメディアなどに移行したデータを、元のハードディスクドライブなどに復帰させることなく、直接読み出すことができる。これにより、アクセスの待ち時間を短縮して処理を効率化すると共に、比較的大容量かつ安価なＷＯＲＭメディアなどを使用して大規模なデータベースを安価に構築できる。また、ＷＯＲＭメディアなどからデータを読み出す場合であっても、アクセスコマンドは従前のハードディスクに対するコマンドのままで構わない。これにより、ハードディスクドライブ向けに既に開発されたＳＱＬアプリケーション・プログラムの改変を不要とすることができる。【００９８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００９９】
【図１】図１は、本実施形態に係る制御システム１０の機能構成を示す。
【図２】図２は、本実施形態に係る制御システム１０がデータベースからデータを移行し、そして、移行したデータにアクセスする処理の流れを示す。
【図３】図３は、図２のＳ２２０における処理の流れの詳細を示す。
【図４】図４は、本実施形態に係る第１の記憶装置１５０に記憶されたデータベースの一例を示す。
【図５】図５は、本実施形態に係る第２の記憶装置１６０に対応付けて生成した仮想テーブルの一例を示す。
【図６】図６は、本実施形態に係る制御用記憶装置１１０に記憶された、データ移行後における移行条件および対応情報を示す。
【図７】図７は、本実施形態に係る第１の記憶装置１５０に記憶された、データ移行後におけるデータベースの一例を示す。
【図８】図８は、本実施形態に係る第２の記憶装置１６０に記憶された、データ移行後における仮想テーブルの一例を示す。
【図９】図９は、図２のＳ２８０における処理の流れの詳細を示す。
【図１０】図１０は、本実施形態に係るアクセス部１４０により書き換えられるアクセスコマンドの一例を示す。
【図１１】図１１は、図２のＳ２４０における処理の流れの詳細を示す。
【図１２】図１２は、本実施形態に係る制御用記憶装置１１０に記憶された、データを追加して移行した後における移行条件および対応情報を示す。
【図１３】図１３は、本実施形態に係る第１の記憶装置１５０に記憶された、データを追加して移行した後におけるデータベースの一例を示す。
【図１４】図１４は、本実施形態に係る第２の記憶装置１６０に記憶された、データを追加して移行した後における仮想テーブルの一例を示す。
【図１５】図１５は、本実施形態に係るアクセス部１４０の他の例を示す。
【図１６】図１６は、本実施形態に係る制御システム１０が新たに作成した他のテーブルにデータを追加して移行する処理の流れを示す。
【図１７】図１７は、本実施形態に係る制御用記憶装置１１０に記憶された、新たに作成した他のテーブルにデータを移行した後における移行条件および対応情報を示す。
【図１８】図１８は、本実施形態に係る第１の記憶装置１５０に記憶された、新たに作成した他のテーブルにデータを移行した後におけるデータベースの一例を示す。
【図１９】図１９は、本実施形態に係る第２の記憶装置１６０に記憶された、新たに作成した他のテーブルにデータを移行した後におけるデータベースの一例を示す。
【図２０】図２０は、本実施形態に係る第３の記憶装置１６６に記憶された、新たに作成した他のテーブルにデータを移行した後におけるデータベースの一例を示す。
【図２１】図２１は、本実施形態に係る制御システム１０として機能するコンピュータ５００のハードウェア構成の一例を示す。
【符号の説明】
【０１００】
１０  制御システム
１００  データ移行部
１１０  制御用記憶装置
１２０  コマンド入力部
１２５  コマンドキャッシュ
１３０  移行判断部
１４０  アクセス部
１４２  第１制御部
１４５  第２制御部
１４６  第１チェック制約記憶部
１４８  第２チェック制約記憶部
１５０  第１の記憶装置
１６０  第２の記憶装置
１６２  ファイル
１６５  ＷＯＲＭメディア
１７０  設定部
５００  コンピュータ
【図１】
2009066691.tif 000003
【図２】
2009066691.tif 000004
【図３】
2009066691.tif 000005
【図４】
2009066691.tif 000006
【図５】
2009066691.tif 000007
【図６】
2009066691.tif 000008
【図７】
2009066691.tif 000009
【図８】
2009066691.tif 000010
【図９】
2009066691.tif 000011
【図１０】
2009066691.tif 000012
【図１１】
2009066691.tif 000013
【図１２】
2009066691.tif 000014
【図１３】
2009066691.tif 000015
【図１４】
2009066691.tif 000016
【図１５】
2009066691.tif 000017
【図１６】
2009066691.tif 000018
【図１７】
2009066691.tif 000019
【図１８】
2009066691.tif 000020
【図１９】
2009066691.tif 000021
【図２０】
2009066691.tif 000022
【図２１】
2009066691.tif 000023
【国際調査報告】
2009066691.tif 000024
2009066691.tif 000025
2009066691.tif 000026
2009066691.tif 000027