データベースへのデータのバルク・ロード

TimesTen Scaleoutでは、様々なソースからデータベースにデータをロードできます。ttBulkCpユーティリティを使用してファイルから、またはttLoadFromOracle組込みプロシージャを使用してOracleデータベース表から、特定の表にデータをロードできます。

TimesTen Scaleoutでは、ttBulkCpユーティリティとttLoadFromOracle組込みプロシージャの両方でlocalOnlyフィルタ・オプションがサポートされます。このフィルタを使用すると、ローカル要素およびそのレプリカにハッシュされた行のみをロードできます。localOnlyフィルタ・オプションを使用すると、ttBulkCpユーティリティおよびttLoadFromOracle組込みプロシージャでは、ローカル要素のレプリカではないリモート要素にハッシュされた行が無視されます。指定したオプションに関係なく、ttBulkCpユーティリティおよびttLoadFromOracle組込みプロシージャでは、重複する行は表にコピーされません。

localOnlyフィルタ・オプションを有効にすると、表の分散スキームに応じて、ttBulkCpユーティリティおよびttLoadFromOracle組込みプロシージャは次のように動作します。

  • ハッシュ: ローカル・データ・インスタンスとそのレプリカの要素にハッシュされたハッシュ・キー値を含む行が、保持および挿入されます。残りの要素にハッシュされた行は無視されます。

  • 参照: ローカル要素とそのレプリカにハッシュされたハッシュまたは参照キー値を参照する参照キー値を含む行が、保持および挿入されます。残りの要素にハッシュされた行は無視されます。

  • 複製: localOnlyオプションは無視されます。すべてのデータ・インスタンスの要素に、行が挿入されます。

localOnlyフィルタ・オプションを使用する長所は、次のとおりです。

  • バルク・ロード操作時にデータを分散するために必要なネットワーク帯域幅が減少します。

  • バルク・ロード操作が失敗した場合、他の要素とは無関係に再試行できます。

localOnlyフィルタ・オプションを使用する短所は、次のとおりです。

  • すべてのホスト、または少なくともグリッドの各レプリカ・セットに対して1つのホストで、ソース・ファイルを使用できる必要があります。このことは、ttBulkCpユーティリティを使用したバルク・ロード操作にのみ適用されます。

  • 各レプリカ・セットの1つの要素について、バルク・ロード操作を1回実行する必要があります。

  • すべてのバルク・ロード操作で、データ・セット全体を処理する必要がありますが、別のレプリカ・セットにハッシュされた行はすべて無視されます。

次の各トピックでは、TimesTen Scaleoutの表にデータをロードする方法について説明します。

ノート:

次の例では、データベースの分散マップの定義で説明されているものと同じグリッド・シナリオについて検討します。

ttBulkCpユーティリティによる表への移入

-iオプションを指定してttBulkCpユーティリティを使用すると、ファイルからデータをロードできます。このオプションでは、標準のINSERT SQL文を使用して、データベースの特定の表にデータをロードします。ttBulkCpユーティリティを使用すると、表の分散スキームに基づいて、各行が対応する要素に挿入されます。

ノート:

  • ttGridAdminユーティリティを使用して実行される操作とは異なり、ttBulkCpユーティリティ(およびttBulkCpCSユーティリティ)は、アクティブ管理インスタンスのかわりにデータ・インスタンスで実行する必要があり、その使用はインスタンス管理者に制限されません。

  • コマンドを実行するユーザーまたは接続文字列に指定されたユーザーに、指定された表に対するINSERT権限があることを確認してください。

次の各トピックでは、ttBulkCpユーティリティを使用するとき、データベースにデータをロードするためのオプションについて説明します。

単一の場所からの表への移入

単一のデータ・インスタンスでのみソース・ファイルを使用できる場合は、-iオプションを指定してttBulkCpユーティリティを実行し、指定したデータベースの分散スキームに基づいて、指定したデータベースの行を対応する要素に挿入します。

ソース・ファイルへのアクセス権を持つデータ・インスタンスから、ファイル内のすべての行をdatabase1データベースのcustomers表に挿入します。

% ttBulkCp -i -connStr "DSN=database1;UID=terry" customers /mydir/customers_data.dmp
Enter password for 'terry':

/mydir/customers_data.dmp:
    1000 rows inserted
    1000 rows total

ttBulkCpユーティリティの使用の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』ttBulkCpユーティリティを使用したデータのバルク・コピー、および『Oracle TimesTen In-Memory Databaseリファレンス』ttBulkCpを参照してください。

複数の場所からの表への移入

グリッド内のすべてのホストでソース・ファイルを使用できる場合、データベースの各レプリカ・セットのいずれかのデータ・インスタンスで-iおよび-localOnlyオプションを指定してttBulkCpユーティリティを実行し、ファイルからローカル要素とそのレプリカ・セットにハッシュされた行を表に挿入します。

アクティブ管理インスタンス(この例のアクティブ管理インスタンスはhost1.instance1)からttGridAdmin dbStatus -replicasetコマンドを使用すると、各レプリカ・セットに関連付けられているデータ・インスタンスの判別に役立ちます。

% ttGridAdmin dbStatus database1 -replicaset
Database database1 Replica Set status as of Mon Aug 16 14:05:15 PDT 2021

RS DS Elem Host  Instance  Status Cache Agent Date/Time of Event  Message 
-- -- ---- ----- --------- ------ ----------- ------------------- ------- 
 1  1    1 host3 instance1 opened stopped     2021-08-12 14:49:08         
 1  2    2 host4 instance1 opened stopped     2021-08-12 14:49:09         
 1  3    3 host5 instance1 opened stopped     2021-08-12 14:49:08         
 2  1    4 host6 instance1 opened stopped     2021-08-12 14:49:08         
 2  2    5 host7 instance1 opened stopped     2021-08-12 14:49:08         
 2  3    6 host8 instance1 opened stopped     2021-08-12 14:49:09

ソース・ファイルからローカル要素とそのレプリカにハッシュされた行を、database1データベースのcustomers表に挿入します。必ず、使用可能な各レプリカ・セットのいずれかのデータ・インスタンス(host3.instance1host5.instance1host7.instance1データ・インスタンスなど)で、ttBulkCpユーティリティを実行するようにしてください。

host3.instance1データ・インスタンスで実行する場合、次のようになります。

% ttBulkCp -i -localOnly -connStr "DSN=database1;UID=terry" customers /mydir/customers_data.dmp
Enter password for 'terry':

/mydir/customers_data.dmp:
    501 rows inserted
    449 rows not inserted (ignored)
    1000 rows total

ノート:

この例では、host4.instance1およびhost5.instance1データ・インスタンスの要素は、host3.instance1データ・インスタンスの要素のレプリカとして定義されています。host3.instance1データ・インスタンスの要素内のcustomers表に挿入されたものと同じ行が、host4.instance1およびhost5.instance1データ・インスタンスの要素内のcustomers表に挿入されます。

host6.instance1データ・インスタンスの場合:

% ttBulkCp -i -localOnly -connStr "DSN=database1;UID=terry" customers /mydir/customers_data.dmp
Enter password for 'terry':

/mydir/customers_data.dmp:
    449 rows inserted
    501 rows not inserted (ignored)
    1000 rows total

ノート:

この例では、host7.instance1およびhost8.instance1データ・インスタンスの要素は、host6.instance1データ・インスタンスの要素のレプリカとして定義されています。host6.instance1データ・インスタンスの要素内のcustomers表に挿入されたものと同じ行が、host7.instance1およびhost8.instance1データ・インスタンスの要素内のcustomers表に挿入されます。

ttGridAdmin dbStatusコマンドの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』データベースのステータスのモニター(dbStatus)を参照してください。

ttBulkCpユーティリティの使用の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』ttBulkCpユーティリティを使用したデータのバルク・コピー、および『Oracle TimesTen In-Memory Databaseリファレンス』ttBulkCpを参照してください。

ttLoadFromOracle組込みプロシージャによる表への移入

ttLoadFromOracle組込みプロシージャを使用すると、Oracleデータベースからデータをロードできます。

次の各トピックでは、ttLoadFromOracle組込みプロシージャを使用するとき、1つのOracleデータベースから1つのデータベースにデータをロードする方法について説明します。

Oracleデータベースへの通信の有効化

ttLoadFromOracle組込みプロシージャで1つのOracleデータベース表から1つのデータベース表にデータをインポートできるようにするには、TimesTen ScaleoutがそのOracleデータベースを認識し、そのOracleデータベースと通信できる必要があります。このことを実現するには、次を実行する必要があります。

  1. sqlnet.oraファイルの内容をインポートします

    ttGridAdmin SQLNetImportコマンドを実行して、sqlnet.oraファイルの内容を最新バージョンのモデルにインポートします。

    % ttGridAdmin SQLNetImport /mydir/sqlnet.ora
    SQLNet configuration file /mydir/sqlnet.ora imported
  2. tnsnames.oraファイルの内容をインポートします

    ttGridAdmin TNSNamesImportコマンドを実行して、tnsnames.oraファイルの内容を最新バージョンのモデルにインポートします。

    % ttGridAdmin TNSNamesImport /mydir/tnsnames.ora
    TNSNames configuration file /mydir/tnsnames.ora imported

    ノート:

    sqlnet.oratnsnames.oraの両方のファイルの内容のインポートは、OCI、Pro*C/C++またはODP.NETを使用してOracle Databaseと通信するアプリケーションに関連します。『Oracle TimesTen In-Memory Databaseリファレンス』Oracle Databaseの操作を参照してください。

  3. 加えた変更をモデルの最新バージョンに適用します。

    ttGridAdmin modelApplyコマンドを実行して、最新バージョンのモデルに加えた変更を操作グリッドに適用します。

    % ttGridAdmin modelApply
    ...
    Updating grid state...................................................OK
    Pushing new configuration files to each Instance......................OK
    ...
    ttGridAdmin modelApply complete

    ttGridAdmin modelApplyコマンドの詳細は、「モデルに加えた変更の適用」を参照してください。

単一の場所からの表への移入

次の例では、ttIsqlユーティリティを使用してdatabase1データベースに接続し、Oracleデータベースのterry.customers表からdatabase1データベースのterry.customers表に行をコピーします。

ノート:

データベース・ユーザーに、組込みプロシージャでデータをコピーする目的の表に対するINSERT権限があること確認してください。

任意のデータ・インスタンスの要素への接続から、次を実行します。

Command> call ttLoadFromOracle('terry', 'customers', 'SELECT * FROM terry.customers');
< 1000 >
1 row found.

ttLoadFromOracle組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』ttLoadFromOracleを参照してください。

複数の場所からの表への移入

localOnly=Yパラメータを指定してttLoadFromOracle組込みプロシージャをコールし、ローカル要素とそのレプリカにハッシュされた行をOracleデータベース表からTimesTen Scaleoutデータベース表にコピーします。localOnly=Yパラメータを使用した場合、ttLoadFromOracle組込みプロシージャでは、ローカル要素のレプリカではないリモート要素にハッシュされた行が無視されます。

次の例では、ttIsqlユーティリティを使用してdatabase1データベースに接続し、ローカル要素とそのレプリカにOracleデータベースのterry.customers表からハッシュされた行をdatabase1データベースのterry.customers表にコピーします。必要に応じて、アクティブ管理インスタンス(この例のアクティブ管理インスタンスはhost1.instance1)からttGridAdmin dbStatus -replicasetコマンドを使用すると、各レプリカ・セットに関連付けられているデータ・インスタンスの判別に役立ちます。

% ttGridAdmin dbStatus database1 -replicaset
Database database1 Replica Set status as of Mon Aug 16 14:05:15 PDT 2021

RS DS Elem Host  Instance  Status Cache Agent Date/Time of Event  Message 
-- -- ---- ----- --------- ------ ----------- ------------------- ------- 
 1  1    1 host3 instance1 opened stopped     2021-08-12 14:49:08         
 1  2    2 host4 instance1 opened stopped     2021-08-12 14:49:09         
 1  3    3 host5 instance1 opened stopped     2021-08-12 14:49:08         
 2  1    4 host6 instance1 opened stopped     2021-08-12 14:49:08         
 2  2    5 host7 instance1 opened stopped     2021-08-12 14:49:08         
 2  3    6 host8 instance1 opened stopped     2021-08-12 14:49:09

必ず、使用可能な各レプリカ・セットのいずれかのレプリカ(host3.instance1host6.instance1データ・インスタンスなど)で、ttLoadFromOracle組込みプロシージャを実行するようにしてください。

ノート:

データベース・ユーザーに、組込みプロシージャでデータをコピーする目的の表に対するINSERT権限があること確認してください。

host3.instance1データ・インスタンスの要素への接続から、次を実行します。

Command> call ttLoadFromOracle('terry', 'customers', 'SELECT * FROM terry.customers', 4, 'localOnly=Y');
< 501 >
1 row found.

ノート:

この例では、host4.instance1およびhost5.instance1データ・インスタンスの要素は、host3.instance1データ・インスタンスの要素のレプリカとして定義されています。host3.instance1データ・インスタンスの要素内のcustomers表に挿入されたものと同じ行が、host4.instance1およびhost5.instance1データ・インスタンスの要素内のcustomers表に挿入されます。

host6.instance1データ・インスタンスの要素への接続で、次を実行します。

Command> call ttLoadFromOracle('terry', 'customers', 'SELECT * FROM terry.customers', 4, 'localOnly=Y');
< 449 >
1 row found.

ノート:

この例では、host7.instance1およびhost8.instance1データ・インスタンスの要素は、host6.instance1データ・インスタンスの要素のレプリカとして定義されています。host6.instance1データ・インスタンスの要素内のcustomers表に挿入されたものと同じ行が、host7.instance1およびhost8.instance1データ・インスタンスの要素内のcustomers表に挿入されます。

ttGridAdmin dbStatusコマンドまたはttLoadFromOracle組込みプロシージャの詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』データベースのステータスのモニター(dbStatus)またはttLoadFromOracleを参照してください。