この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
広告
posted by fanblog
2014年09月03日
Firebird で外部DBにレコードを同期的に追加する
最新の Firebird 2.5.3 では、リモートDBに対して操作できる機能も追加されていることを知り、データの同期に使えることがわかった
直接やりたかったことは、マスターテーブルに対してログレコードを出力した際に、別のバックアップDBに対しても同じレコードを出力したいということだった
つまり、 HOST_Aの LOGTABLE に対して INSERTされたら、 HOST_Bの LOGTABLE にも INSERTしたいということ
これを実現するために、 HOST_Aの LOGTABLE に対して以下のようなトリガーを設定すればよい
これでめでたく、レコードの同期ができることになった
※ただし、 INSERTのみ、いわゆる完全なレプリケーション機能とは異なる
※もっとも、各種トリガーを定義すれば、かなりそれに近いことはできそうだが、設定がかなり面倒だ
【広告】
国内最大級の個人向けレンタルサーバー『 ロリポップ!レンタルサーバー 』は、
月額100円(税抜)〜で容量最大120GB!しかも安いだけじゃなく
大人気WordPressの簡単インストール/ウェブメーラーなど
機能も満載!共有/独自SSLもバッチリ対応でセキュリティ対策も万全!
もちろん、オンラインマニュアルやライブチャットなど、
充実したサポートで初心者の方でも安心です。
無料のお試し期間が10日間ありますので、
まずはお気軽にご利用してみてくださいね!
▼ロリポップ!レンタルサーバーはこちら
お名前.com レンタルサーバー
直接やりたかったことは、マスターテーブルに対してログレコードを出力した際に、別のバックアップDBに対しても同じレコードを出力したいということだった
つまり、 HOST_Aの LOGTABLE に対して INSERTされたら、 HOST_Bの LOGTABLE にも INSERTしたいということ
これを実現するために、 HOST_Aの LOGTABLE に対して以下のようなトリガーを設定すればよい
CREATE TRIGGER ON_INSERT_LOGTABLE FOR LOGTABLE
AS
DECLARE sqlstr VARCHAR(128);
DECLARE rmtdb VARCHAR(128) = 'HOST_B:MY_DB.fdb';
DECLARE usernm VARCHAR(32) = 'sysdba';
DECLARE passwd VARCHAR(32) = 'masterkey';
BEGIN
sqlstr = 'INSERT INTO LOGTABLE VALUES(?)';
EXECUTE STATEMENT (:sqlstr) (new.DATA)
ON EXTERNAL DATA SOURCE :rmtdb
AS USER :usernm PASSWORD :passwd;
END
これでめでたく、レコードの同期ができることになった
※ただし、 INSERTのみ、いわゆる完全なレプリケーション機能とは異なる
※もっとも、各種トリガーを定義すれば、かなりそれに近いことはできそうだが、設定がかなり面倒だ
【広告】
国内最大級の個人向けレンタルサーバー『 ロリポップ!レンタルサーバー 』は、
月額100円(税抜)〜で容量最大120GB!しかも安いだけじゃなく
大人気WordPressの簡単インストール/ウェブメーラーなど
機能も満載!共有/独自SSLもバッチリ対応でセキュリティ対策も万全!
もちろん、オンラインマニュアルやライブチャットなど、
充実したサポートで初心者の方でも安心です。
無料のお試し期間が10日間ありますので、
まずはお気軽にご利用してみてくださいね!
▼ロリポップ!レンタルサーバーはこちら
お名前.com レンタルサーバー