スクリプトによるクラシック・レプリケーション・スキームの作成
クラシック・レプリケーション・スキームをスクリプトで作成すると、時間の節約および誤りの回避に有効です。この項では、Perlを使用してレプリケーション・スキームの作成を自動化する場合の推奨事項をいくつか示します。
たとえば、一般的なワークロードの双方向スキームについて考えてみます。5つの表ttuser.accounts、ttuser.sales、ttuser.orders、ttuser.inventoryおよびttuser.customersへの要素記述への入力を手動で行うと、時間がかかり、エラーも発生しやすくなります。
CREATE REPLICATION bigscheme ELEMENT elem_accounts_1 TABLE ttuser.accounts MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_accounts_2 TABLE ttuser.accounts MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" ELEMENT elem_sales_1 TABLE ttuser.sales MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_sales_2 TABLE ttuser.sales MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" ELEMENT elem_orders_1 TABLE ttuser.orders MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_orders_2 TABLE ttuser.orders MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" ELEMENT elem_inventory_1 TABLE ttuser.inventory MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_inventory_2 TABLE ttuser.inventory MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast" ELEMENT elem_customers_1 TABLE ttuser.customers MASTER westds ON "westcoast" SUBSCRIBER eastds ON "eastcoast" ELEMENT elem_customers_2 TABLE ttuser.customers MASTER eastds ON "eastcoast" SUBSCRIBER westds ON "westcoast";
多くの場合、スクリプトを使用してクラシック・レプリケーション・スキームの作成プロセスを自動化するとより効率的です。たとえば、次の例に示すレプリケーションスキームを作成するには、次のperlスクリプトを使用できます。
@tables = qw(
ttuser.accounts
ttuser.sales
ttuser.orders
ttuser.inventory
ttuser.customers
);
print "CREATE REPLICATION bigscheme";
foreach $table (@tables) {
$element = $table;
$element =~ s/repl\./elem\_/;
print "\n";
print " ELEMENT $element\_1 TABLE $table\n";
print " MASTER westds ON \"westcoast\"\n";
print " SUBSCRIBER eastds ON \"eastcoast\"\n";
print " ELEMENT $element\_2 TABLE $table\n";
print " MASTER eastds ON \"eastcoast\"\n";
print " SUBSCRIBER westds ON \"westcoast\"";
}
print ";\n";@tables配列は、データベースなどの他の一部のソースから取得できます。たとえば、Perl文でttIsqlおよびfを使用して、所有者名がreplのWestDSNデータベース内のすべての表に対して@tables配列を生成できます。
@tables = 'ttIsql -e "tables; quit" WestDSN
| grep " REPL\."';このPerlスクリプトの例では、WestDSNデータベース内のすべてのrepl表のクラシック・レプリケーション・スキームを作成します。grep出力から余分な空白および改行を削除するには、置換を行う必要があります。
@tables = 'ttIsql -e "tables; quit" WestDSN
| grep " REPL\."';
print "CREATE REPLICATION bigscheme";
foreach $table (@tables) {
$table =~ s/^\s*//; # Remove extra spaces
$table =~ s/\n//; # Remove line feeds
$element = $table;
$element =~ s/repl\./elem\_/;
print "\n";
print " ELEMENT $element\_1 TABLE $table\n";
print " MASTER westds ON \"westcoast\"\n";
print " SUBSCRIBER eastds ON \"eastcoast\"\n";
print " ELEMENT $element\_2 TABLE $table\n";
print " MASTER eastds ON \"eastcoast\"\n";
print " SUBSCRIBER westds ON \"westcoast\"";
}
print ";\n";