スクリプトによるクラシック・レプリケーション・スキームの作成
クラシック・レプリケーション・スキームをスクリプトで作成すると、時間の節約および誤りの回避に有効です。この項では、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";