データベースへのデータのバルク・ロード
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.instance1
、host5.instance1
、host7.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データベースと通信できる必要があります。このことを実現するには、次を実行する必要があります。
単一の場所からの表への移入
次の例では、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.instance1
やhost6.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を参照してください。