説明

データベースクラスタリカバリ方法及び装置

【課題】データベースクラスタリカバリ方法及び装置を提供する。
【解決手段】
本発明にかかる方法及び装置は、ディスクアレイキャッシュ(204)にREDOログブロックを保持すること、データブロック書き込みフラグ(DBWF)を使用して前記REDOログブロックをフィルタリングすること、及び、障害のあった(failed)データベースインスタンスによって生成されたREDOログレコードのサブセットであるリカバリセットを前記ディスクアレイキャッシュ(204)に生成することを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースクラスタリカバリ方法及び装置に関する。
【背景技術】
【0002】
データベースクラスタは、ローカルエリアネットワーク(LAN)を介して相互に接続された、共有ディスクアーキテクチャを使用する1群の独立したサーバを含む。データベースクラスタは、異なるサーバで実行するプロセス間の個々の高速相互接続を使用して、データを交換し、キャッシュ同期を行う。このようなデータベースクラスタの一例は、Oracleリアルアプリケーションクラスタ(RAC(real application cluster))である。OracleインスタンスがRACデータベースクラスタで開始されるごとに、システムグローバルエリア(SGA(system global area))と呼ばれるメモリ領域が割り当てられ、1組のバックグラウンドプロセスが開始される。SGAとプロセスとを結合したものは、Oracleデータベースインスタンス又は単にインスタンスと呼ばれる。RACは複数のインスタンスから成り、各インスタンスは個々のノード(単一のサーバ又は対称型マルチプロセシング(SMP(symmetric multiprocessing))システム等)に存在する。インスタンスのメモリ及びプロセスは、データベースのデータを効率的に管理するように機能し、データベースのそのインスタンスに関連した1人又は複数のユーザのために働く。RACは、単一ノードのOracleデータベースインスタンスでは満たされない可能性のある処理負荷に対する拡張性のあるソリューションを提供するために相互に協働する1組のOracleインスタンスである。RACのノードは、単一の中央演算処理装置(CPU)とすることもできるし、単一のインスタンスを実行するSMPとすることもできる。RACは、異なるタイプの障害(failure)を有する可能性があり、その結果、RACは、媒体リカバリ及びインスタンスリカバリを含む異なるタイプのRACリカバリをサポートすることができる。
【0003】
データベースインスタンスの障害は、多くの状況によって引き起こされる可能性がある。この多くの状況は、データベースがインスタンスを停止させたり、サーバがシャットダウンしたり、サーバがリブートしたり、インスタンスが自動開始されなかったり等である。インスタンスの障害が発生すると、Oracleインスタンスリカバリプロセスは、インスタンスの起動時にデータベースを自動的にリカバリさせることができる。障害が発生した時にコミットされたトランザクションは、リカバリされるか、又は、ロールフォワードされ、その時点で処理中のすべてのトランザクションはロールバックされる。
【0004】
RACアーキテクチャ内のキャッシュフュージョンアーキテクチャは、アプリケーションの要求を満たすために、異なるインスタンスのローカルバッファキャッシュの総量を、RACシステム全体に利用可能な1つの大きな仮想キャッシュに「仮想化」することによって改善された拡張性を提供する。キャッシュフュージョンは、プロセス間通信(IPC)を使用してインスタンスのローカルバッファキャッシュ間でデータブロックを転送するのに、高速インターコネクト(たとえば、ギガビットイーサネット(登録商標)等)を使用する。キャッシュフュージョンは、アプリケーションのコードにも設計にも何ら影響を与えることなく、複数のバッファキャッシュを1つの結合したグローバルキャッシュとして取り扱うことによって、複数のインスタンスのデータブロックの一貫性を提供する。
【0005】
グローバルキャッシュサービス(GCS)は、キャッシュフュージョンによって導入され、GCSのインスタンスプロセスであるロックマネージャサーバプロセス(LMSn(lock manager server))を含む1組のプロセスとして実施され、グローバルエンキューデーモン(LMD)は、エンキューマネージャサービス要求を調整するGES(global enqueue service)のロックエージェントプロセスである。GCS及びGESは、リソース(データブロック)及びエンキューに関する情報を記録するためのグローバルリソースディレクトリ(GRD(global resource directory))を保持する。GRDはメモリに存在し、そのディレクトリリソースの一部はRACのあらゆるインスタンスによって管理される。クラスタ全体にわたるリソースがエンキュー及び/又はロックである状況では、GCSは、データブロックの変更又は読み込みが可能となる前に、当該クラスタ全体にわたるリソースを獲得するようにインスタンスに要求する。
【0006】
マルチノードRACの場合、データブロックは、インスタンスのいずれかに存在することができるか、又は、どのインスタンスも、ユーザアプリケーションによる必要に応じてデータブロックをフェッチすることができる。キャッシュフュージョンは、複数のインスタンスにおいてデータブロックのキャッシュされたものの間の一貫性を維持する上で重要な役割を果たす。インスタンスがデータブロックにアクセスする必要がある場合、そのインスタンスは、RACのどのインスタンス(LMS)がそのデータブロックを管理しているかを、ローカルオペレーションを通じて見つけ出すことができる。この複製されたデータは、比較的静的なデータであり、インスタンスに障害があった時にのみ変更を行う必要があり、障害のあったインスタンスによって管理された該当するデータブロックは、RACの残りのインスタンスに割り当てる必要がある。
【発明の開示】
【発明が解決しようとする課題】
【0007】
データベースクラスタリカバリ方法及び装置を提供する。
【課題を解決するための手段】
【0008】
本発明にかかる方法及び装置は、ディスクアレイキャッシュ(204)にREDOログブロックを保持すること、データブロック書き込みフラグ(DBWF)を使用して前記REDOログブロックをフィルタリングすること、及び、障害のあった(failed)データベースインスタンスによって生成されたREDOログレコードのサブセットであるリカバリセットを前記ディスクアレイキャッシュ(204)に生成することを含む。
【発明を実施するための最良の形態】
【0009】
次に、本発明の例示の実施の形態を詳細に説明するために、添付図面を参照する。
【0010】
[表記及び専門語]
以下の説明全体及び特許請求の範囲を通じて特定のシステムコンポーネントを指すのに一定の用語が使用される。当業者には理解されるように、異なる企業/業界は、コンポーネントを異なる名前で指すことがある。この文書は、名前が異なるが機能は異ならないコンポーネントを区別するように意図されていない。以下の説明及び特許請求の範囲では、用語「含む」及び「備える」は、オープンエンドな形式で使用され、したがって、「含むが、これらに限定されるものではない」との意味に解釈されるべきである。また、用語「連結する」は、間接的な電気接続又は直接的な電気接続のいずれかを意味するように意図されている。したがって、第1のデバイスが第2のデバイスに連結する場合、その接続は、直接的な電気接続によるものである場合もあるし、他のデバイス又は接続を介した間接的な電気接続によるものである場合もある。
【0011】
[詳細な説明]
以下の説明は、本発明のさまざまな実施の形態を対象にする。これらの実施の形態の1つ又は複数は好ましいものとすることができるが、開示した実施の形態は、特許請求の範囲を含めて、開示の範囲を限定するものとして解釈されるべきでなく、それ以外に使用されるべきでない。これに加えて、以下の説明は幅広い用途を有すること、どの実施の形態の説明も、その実施の形態の例示にすぎないことが意図されていること、及び、特許請求の範囲を含めて開示の範囲はその実施の形態に限定されることを暗示するようには意図されていないことが当業者には理解されよう。
【0012】
ディスクアレイストレージサブシステムで利用可能な大きなキャッシュ及び処理能力を利用することによって、本発明の実施の形態は、サーバインスタンスリカバリを改善することを援助する。このような機能の結果、データベースがアプリケーションにアクセス不能となる時間(前述したリカバリのフェーズ1)が削減され、それによって、全体的なデータベースの可用性が増大する。
【0013】
一実施の形態では、改善されたインスタンスリカバリを提供する、Oracle RAC等用のディスクアレイが提供される。本発明の実施の形態は、適切なキャッシュ及び処理能力を有するあらゆるデータベースクラスタ又はディスクアレイと共に使用することができる。
【0014】
REDOログレコード(redo log record)は、タイムスタンプ、ディスクブロックアドレス(DBA(disk block address))、データブロック書き込みフラグ(DBWF(Data Block Written Flag))等を含む複数のフィールドを含む。このREDOログレコードは、データベースクラスタに対して行われたすべての変更を記録する。インスタンスリカバリに関する限り、DBWFが設定されている場合、同じDBAについての以前のすべてのREDOログレコードが必要とされないことを示し、このプロセスは「フィルタリング」と呼ばれる。すべてのREDOログレコードをスキャンして、フィルタリングを実行することの純粋な(net)効果によって、リカバリセットが生成される。
【0015】
例示として、データベースクラスタの一例は、100個のブロック及び数個のインスタンスを含む。リカバリの例示として、ここではインスタンス1と呼ぶ1つだけのインスタンスの実行時の振る舞いのみに注目することにする。このインスタンス1は、所与のアプリケーションを実行しているデータベースクラスタの一部である。この例では、インスタンス1は、以下のオペレーションを実行したものである。
−REDOログレコード1を生成したブロックDBA1を読み込み、次いで更新した。
−REDOログレコード2を生成したブロックDBA2を読み込み、次いで更新した。
−REDOログレコード3を生成したブロックDBA3を読み込み、次いで更新した。
−ブロックDBA1を更新し、この更新したブロックをディスクに書き込み、DBWFフラグセット(Oracle RACシステムの場合、BWRフラグ)が設定されたREDOログレコード4を生成する。
インスタンスリカバリ中、すなわち、インスタンス1に障害があった後、生存している選ばれたインスタンス(たとえばインスタンス2)は、インスタンス1のREDOログを読み出す。このREDOログは、レコード1、レコード2、レコード3、及びレコード4を含む。DBWFフラグセットが設定されたREDOログレコード4の読み込み時に、レコード4、及び、DBA1に属する以前のすべてのREDOログレコード(すなわち、上記例ではレコード1)の双方がトスされる(tossed away)。REDOログレコードをスキャンして適切なレコードを捨てる(throwing away)プロセスは、「フィルタリング」と呼ばれる。この時点における「リカバリセット」は、2つのREDOログレコード(レコード2、レコード3)である。フェーズ1の終了時には、データベースは、「リカバリセット」のメンバであるブロック(DBA)を除いて、アプリケーションに利用可能になる。リカバリのフェーズ2では、リカバリインスタンスは、「リカバリセット」のREDOログレコードをデータベースに適用し、その結果、障害が発生した時以後のデータベースの状態をリカバリさせる。フェーズ2の完了時には、データベースは、データベースクラスタのアプリケーションに完全に利用可能となる。データベースクラスタ全体が利用可能でないリカバリのフェーズ1は、全インスタンスリカバリ時間の約10%程度の時間を要し、通常、3分から3時間に及ぶことがある。他方、リカバリのフェーズ2は、非常に長い時間を要する可能性がある。
【0016】
図1を参照して、本発明の一実施の形態によるデータベースクラスタリカバリ技術を強調したフロー図が示されている。102において、入力したREDOログブロックがディスクアレイキャッシュに保存されて処理される。また、これらのブロックは、104において、通常通り、安定したストレージエリアにも書き込まれる。106において、好ましくはバックグラウンドオペレーションとして、アレイプロセッサが、ディスクアレイキャッシュの個々の領域で「リカバリセット」を徐々に増加させながら動的に生成して保持する。この「リカバリセット」の生成は、REDOログレコード自体の物理的なコピーを意味するものではない。「リカバリセット」は、データブロック書き込みフラグ(DBWF)セットが設定されたレコードのREDOログブロックをアレイプロセッサにスキャンさせることによって生成することができる。DBWFフィールドは、インスタンスがグローバルリソースによってカバーされたブロックを書き込んだ時又は廃棄した時にREDOログバッファに設定される。Oracle環境の場合、DBWFフィールドは、ブロック書き込みレコード(BWR(Block Written Record))フィールドに対応する。これによって、インスタンスから得られたREDOログをフィルタリングすることが援助される。一実施の形態では、DBWFセットが設定されたあらゆるREDOログレコードは通常のアレイキャッシュに残され、REDOログレコード及び(タイムスタンプ情報に基づく)以前のレコードはリカバリセットの一部ではない。
【0017】
DBWFフィールド(たとえば、BWR)セットが設定されたレコードの値よりも前のタイムスタンプを有するすべてのレコードは、リカバリセットの一部とはならず、残りのREDOログレコードのみがリカバリセットの一部となる一方、すべてのREDOログレコードが、110において、通常のディスクアレイキャッシュに含められる。Oracle環境の場合、タイムスタンプは、システム変更番号(SCN)を備えることができる。リカバリセットの一部であるREDOログレコードは、112において、自身のタイムスタンプによって自身をソートすることが可能で、且つ、ソートされた「リカバリセット」を要求に応じてインスタンスに戻すことが可能なデータ構造体によって管理される。次に、このルーチンは、ステップ106にループバックする。
【0018】
一インプリメンテーションは、リカバリセットのあらゆるREDOログレコードにつきヘッダデータ構造体を作成することを含む。これらのヘッダデータ構造体は、そのディスクブロックアドレス(DBA)に基づいてハッシュテーブルに挿入することができる。このようにして、レコードは、アクセス可能になり、場合によっては、後に「リカバリセット」から除去することができる。REDOログレコードのタイムスタンプ(たとえば、OracleのSCN)に基づいてソートされた当該REDOログレコードを反映するように、リンクをあらゆるヘッダに追加して、これらのヘッダをリンクすることを可能にすることができる。「リカバリセット」の要求に応じて、ディスクアレイは、上述したリンクを使用してリンクリストを辿ることによって、SCNによりソートされたインスタンスに「リカバリセット」を返す。
【0019】
インスタンスの障害が発生するときは常に、選ばれた「リカバリインスタンス」が、その障害のあったインスタンスのREDOログ全体の代わりに「リカバリセット」を要求する。「リカバリセット」を要求することは、データベースがその間アプリケーションによってアクセス可能ではない経過時間を削減することに対する、以下の見込まれるプラスの効果の1つ又は複数を有する。すなわち、「リカバリセット」を要求することによって、ストレージアレイからOracleリカバリインスタンスへ送り返すのに必要なデータ量が数ギガバイト(GB)から数メガバイト(MB)へ削減される;数GBではなく数MBのデータを返すことは、リカバリインスタンスのページングを削減することに大きな影響を与え、このことは、次に、フェーズ1のリカバリ時間に大きな影響を与える;ディスクアレイキャッシュは、オプションとして、RACの異なるスレッド/インスタンスのREDOログの共有メモリとして機能する唯一の機会を提供し、プロセッサは、必要とされないREDOログエントリをさらに取り除くことができ、それによって、「リカバリセット」のサイズをさらに削減することができる;「リカバリセット」を要求することによって、リカバリインスタンスプロセッサにより必要とされる処理時間が節減されて、データベースがアクセス可能でない時間を削減するのを援助する「リカバリセット」が作成される;「リカバリセット」を要求することによって、タイムスタンプ(たとえば、SCN値)に基づいてREDOログをソート又はマージ/ソートする機会が提供され、これが効果的であるためには、(たとえば、Oracleの)「リカバリインスタンス」は、返されたREDOログレコードがすでにソートされたものであることを知っている必要があり、そうでない場合、「リカバリインスタンス」はそれらを再びソートすることになり、これは、「NOOP」オペレーション(ノーオペレーション)となる。
【0020】
Oracleインスタンスは、そのREDOログレコードをディスクアレイのREDOログデバイスに書き込む。製造(production)システムは、通常、低いアレイ利用率(たとえば、50%未満の利用率)で構成される。これは、提案したアルゴリズムを実行するのに十分な処理サイクルがあることを意味する。データがディスクアレイキャッシュで得られている間、上述したフィルタリング及びソートのルーチンは、一般にリアルタイムで実行されるが、このルーチンは、非リアルタイムで実行することもできるし、ほぼリアルタイムで実行することもできる。ディスクアレイにおけるCPUサイクルの可用性は問題ではないと予想されるが、これらのサイクルのスケジューリングは、最適な性能を確保するために慎重に行われる(be handled)べきである。ディスクアレイの通常のオペレーションのように、入ってくるREDOログを処理することは、通常のREDOログオペレーションの性能に影響を与えることを回避するために、フィルタリング/ソートオペレーションを実行することに優先されるべきである。したがって、ディスクアレイサイクルがアイドルである間にバックグラウンドでフィルタリング/ソートを実行できることが望ましい。上記手法の代替的なものとしては、通常はリアルタイムOSを実行する従来のディスクアレイCPUが、REDOログレコードのフィルタリング/ソート及び汎用OSの実行を行うが、そうする代わりに、これらのオペレーションを汎用CPUが実行するように汎用CPUを専用化するものがある。
【0021】
単一のインスタンスの障害では、オプションとして、REDOログレコードをディスクアレイキャッシュに恒久的に保持することができ、これによって、すでにディスクに書き込まれているブロックに関連したREDOログレコードを、たとえばDBWFフラグを使用して取り除くことができる。その結果、REDOログレコードのサブセットのみを返すことができる。REDOログレコード全体をネットワーク上で返し、大部分が必要とされなかったことを後に知っても意味がない。その結果、リカバリセットのサイズは削減されており、REDOログ全体のサイズよりも小さい。リカバリセットのリソースは、障害のあったセットでは変更されているが、障害のあったインスタンスによってディスクにまだ書き込まれていない1組のブロックを含む。
【0022】
次に図2を参照して、本発明の一実施の形態によるディスクアレイ200が示されている。一実施の形態では、ディスクアレイ200は、本明細書で説明したデータベースクラスタリカバリルーチンを含むHP SureStore E XPファミリーのディスクアレイ等、Hewlett-Packard社(HP)のStorageWorksディスクアレイXPを含むことができる。本発明の実施の形態は、多くのタイプのディスクアレイと共に使用でき、開示した実施の形態は単に例示にすぎないことに留意すべきである。
【0023】
ディスクアレイは、複数のディスクストレージアレイ202、データキャッシュ204、共有メモリ206、クロスバースイッチ/共有メモリインターコネクト208、最大4つまでのチップホストインターフェースプロセッサ(CHIP)対210〜216、データキャッシュ204及び共有メモリ206の双方に直接アクセスできるだけでなく、ファイバチャネルを通じてディスクストレージアレイ202にアクセスできる複数のアレイ制御プロセッサ(ACP)218を含む。CHIP210〜216は、アレイ200へのホスト接続のための接続ポイントを提供する。CHIP210〜216は、コマンド及び信号をACP218に送信し、ディスクに対してキャッシュメモリの読み込み/書き込みを行う。追加されたCHIP機能は、キャッシュトラックディレクトリにアクセスして当該キャッシュトラックディレクトリを更新すること、データアクセスパターンを監視すること、ホストデバイスタイプをエミュレートすること、及び、アレイ間の複製のための接続ポイントを提供することである。データ制御ブロック220は、ACP218とクロスバスイッチ/共有メモリインターコネクト208との間の相互接続を提供する。
【0024】
本発明の一実施の形態では、ディスクアレイキャッシュ204は、データベースクラスタにおける異なるスレッド/インスタンスのREDOログの共有メモリとして機能する唯一の機会を提供する。CHIPのCPUは、必要とされないREDOログエントリをさらに取り除くことができ、それによって、「リカバリセット」のサイズをさらに削減することができる。リカバリセットの削減によって、アプリケーションによるデータベースへのアクセスが不能となる時間、及び、ネットワーク上のデータトラフィック量を削減することが援助される。REDOログレコードがインスタンスによって生成されている間、CHIPプロセッサ210〜216は、前述したようなクラスタリカバリ技術を非同期に実行することができる。
【0025】
また、本発明の実施の形態は、SCN値を使用することによること等、タイムスタンプに基づいてREDOログをソート又はマージ/ソートする機会も提供する。Oracle環境の場合、Oracleリカバリインスタンスは、返されたREDOログレコードがすでにソートされたものであることを知っている必要があり、そうでない場合、Oracleリカバリインスタンスはそれらを再びソートすることになる。
【0026】
図3には、本発明の一実施の形態によるインスタンスリカバリの第1フェーズが示されている。302において、ディスクアレイから「リカバリセット」を得るための要求がリカバリインスタンスによって行われる。ステップ304において、リカバリセットが、ディスクアレイCPUによって管理され、REDOログレコードのタイムスタンプによって当該REDOログエントリをフィルタリング/ソートする。ステップ306において、「リカバリセット」がリカバリインスタンスに返される。Oracle環境の例示として、リカバリセットは、リカバリを行うOracleインスタンスに返される。
【0027】
本発明で行われるように、いくつかのリカバリ機能をディスクアレイキャッシュ等のインテリジェントなストアに移すことによって、データベースがアクセス不能となる時間中におけるリカバリ時間を削減することが援助され、改善されたデータベース可用性を提供することが援助される。この開示で提示した方法及び装置は、他のデータベース機能にも適用可能であり、一般に、ソート能力及び/又は検索能力を必要とする機能に適用可能である。このような機能をインテリジェントなディスクアレイに移すことは、性能の観点から非常に有益となる可能性がある。
【0028】
上記説明は、本発明の原理及びさまざまな実施の形態の例示であるように意図されている。当業者には、上記開示を十分に理解すると、多数の変形及び変更が明らかとなるであろう。
【図面の簡単な説明】
【0029】
【図1】本発明の一実施の形態によるデータベースクラスタリカバリフローを強調したフローチャートである。
【図2】本発明の一実施の形態によるデータベースクラスタのブロック図である。
【図3】本発明の一実施の形態によるインスタンスリカバリの第1フェーズを強調したフローチャートである。
【符号の説明】
【0030】
202・・・ディスクアレイ
204・・・データキャッシュ
206・・・共有メモリ
208・・・クロスバースイッチ/共有メモリインターコネクト
220・・・データ制御

【特許請求の範囲】
【請求項1】
ディスクアレイキャッシュ(204)にREDOログブロックを保持すること、
データブロック書き込みフラグ(DBWF)を使用して前記REDOログブロックをフィルタリングすること、及び、
障害のあった(failed)データベースインスタンスによって生成されたREDOログレコードのサブセットであるリカバリセットを前記ディスクアレイキャッシュ(204)に生成すること、
を含む、データベースクラスタリカバリ方法。
【請求項2】
前記DBWFは、ブロック書き込みレコード(BWR)フィールドを備える、請求項1に記載のデータベースクラスタリカバリ方法。
【請求項3】
前記REDOログレコードのタイムスタンプによって前記REDOログレコードを前記ディスクアレイキャッシュ(204)内でソートすること、
をさらに含む、請求項1に記載のデータベースクラスタリカバリ方法。
【請求項4】
前記ソートしたリカバリセットを、要求に応じて、前記リカバリを行う、障害のあったデータベースインスタンスに戻すこと、
をさらに含む、請求項3に記載のデータベースクラスタリカバリ方法。
【請求項5】
前記REDOログレコードのタイムスタンプによって前記REDOログレコードをソートすることは、システム変更番号(SCN)を使用して前記REDOログレコードをソートすることを含む、請求項3に記載のデータベースクラスタリカバリ方法。
【請求項6】
データベースクラスタリカバリを提供するデータベースクラスタであって、
ディスクアレイと、
前記ディスクアレイに連結されたディスクアレイキャッシュ(204)と、
前記ディスクアレイキャッシュにREDOログブロックを保存し、データブロック書き込みフラグ(DBWF)フィールドを使用して該REDOログレコードをフィルタリングし、且つ、リカバリセットを表す、該REDOログブロックの小さなサブセットを前記ディスクアレイキャッシュ(204)に設けるためのディスクアレイコントローラ(218)と、
を備える、データベースクラスタ。
【請求項7】
前記ディスクアレイコントローラ(218)は、前記REDOログブロックのタイムスタンプによって前記REDOログブロックをソートする、請求項6に記載のデータベースクラスタ。
【請求項8】
前記リカバリセットは、前記ディスクアレイキャッシュ(204)内の、前記REDOログブロックが格納されている(be stored)場所とは別個の領域に格納される、請求項7に記載のデータベースクラスタ。
【請求項9】
前記ディスクアレイコントローラ(218)は、前記リカバリセットを動的に作成して保持する、請求項6に記載のデータベースクラスタ。
【請求項10】
前記ディスクアレイコントローラ(218)は、前記リカバリセットの一部である前記REDOログレコードを管理するためのデータ構造体を含む、請求項6に記載のデータベースクラスタ。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate


【公開番号】特開2006−155623(P2006−155623A)
【公開日】平成18年6月15日(2006.6.15)
【国際特許分類】
【出願番号】特願2005−344023(P2005−344023)
【出願日】平成17年11月29日(2005.11.29)
【出願人】(503003854)ヒューレット−パッカード デベロップメント カンパニー エル.ピー. (1,145)
【Fターム(参考)】