
データドリブン経営の前提として考えるMVV:ミッション・ビジョン・バリューと戦略・戦術・戦法
RDS(Relational Database Service)移行顛末記(笑)、最終回は、PostgreSQLと、オマケにOracle情報です。
今回の記事はAmazon Relational Database Service(AmazonRDS)へのデータ移行(2)MySQL編の続編です。
Windowsで稼働中のPostgreSQLからRDSのPostgreSQLへデータを渡すのには非常に苦労します。
まず、PosygreSQLは共通仕様として、DBがシフトJISをサポートしていません。
MySQLと同様に、PostgreSQLもINSERT文の入ったエクスポートを生成するのですが、Windowsでエクスポートすると、エクスポートファイルはシフトJISで生成されます。
しかし、スクリプト内の書かれたコードはUTF8です?
この時点で???なのですが、EC2上のWindowsクライアントからRDSのLinuxサーバーのPostgreSQLへデータを入れようとすると、エラーになってしまいます。
実際、ファイルをUTF-8に変換しても、スクリプト上のコード指定をSJISに変更しても、どの組み合わせでも動作しません。
MySQLの時も同様な悩みがあったのですが、我々のテストしたい製品は「ETLツール」なので、製品を使えばもちろん移行は可能です。
しかし、そのETLを検証するテストDBなので、バイナリ的にエラーになるデータとか、文字コードとして微妙なデータも含んでいますから(それが原因かもしれませんが)そのまま移送できなければテストにならないのです。
結局あきらめて、Windows上にPostgreSQLサーバーを立てました。
所詮PostgreSQLはLinux/Unixの世界のDBということですね。
ちょっと悔しいですが、仕方ありません。時間ができたらもう少し突っ込んで検証したいと思います。
RDS上でのOracleは、何の問題もなく移行できたと前回記事に書きました。
しかし、実際には大ハマリしてしまいました。
ODBCはAPI上からINSERTやUPDATEのレコードデータを配列で渡すことができます。我々の製品はこのような配列渡しをしています。
JDBCだと常識のようですが、ODBCでこれをやっているユーザーは少ないのではないでしょうか。
SQLExecuteのたびに配列サイズが増えていくようなコールをすると、ODBC内でメモリ破壊があるようで、INSERTやUPDATEのデータが途中で切れたり、全く反映されなかったりするのです。
この現象は12.1.0.1以前で発生し、12.1.0.2では修正されており、11g以前では発生していなかったのですが、Windows Server 2012で11gを動作させると必ず発生するという事がわかりました。
ところが、よく調べてみると、OracleはWindows Server 2012上での11gの動作をサポートしていません。
要は、私がWindows Server 2012にOracle 11g Clientをインストールしたのが悪かったのです。
でも、2012 Server上で11gをインストールしても「それはダメ」と言ってくれなかったのに・・・
・・・教訓、Windows Server 2012でOracle 11gを動作させると酷い目にあうと言うことです。
追加情報:Oracle 12.1.0.2で修正された障害は、11gでは直っていないようです。Windows Server 2008では出にくいのですが、Windows Server 2012ではOS側の動作変更で出やすくなっているようです。
これからプログラムを作って障害報告しますが、承認されて直るのはかなり先になるでしょう。
Amazon Relational Database Service(Amazon RDS)へのデータ移行(1)SQL Server編
Amazon Relational Database Service(AmazonRDS)へのデータ移行(2)MySQL編
20年以上の実績に裏打ちされた信頼のデータ連携ツール「Waha! Transformer」で、自社に眠るデータを有効活用。まずは無料のハンズオンセミナーや体験版で効果を実感していただけます。
Rankingランキング
New arrival新着
Keywordキーワード