2010-05-06

登記変更とか

昨年5月に事務所を狛江から調布へ移転したが、登記を変更していなかった。 税務署と社会保険事務所にも住所変更届けを出さなければならないが、本店移転登記が前提となり登記簿謄本がないと原則、住所変更ができない。
というわけで渋々いままでほったらかしてあったいくつかの登記変更(本店移転、役員変更、役員住所変更、解散事由の破棄)を同時に行うことにした。

普通の会社であれば、行政書士とか司法書士とかいう人に依頼してこの種の手続きを行うのだろうが、小社は文字通りの小社なので社員=小生が自ら行う。 もっとも法務省のサイトに各種申請フォームの雛型が用意されているので、トウシロの小生でも上記4つの申請書+株主総会議事録+取締役会議事録等というものを一日強で仕上げることができた。
申請書等の準備ができたので調布市管轄の法務局=東京法務局府中支局に行くことになる。ところがこの支局、府中駅から数キロも離れており激しく不便。 府中社会保険事務所や武蔵府中税務署は駅から近いのだが、やはり法務局などというところは普通の会社・個人はそう頻繁に訪れる場所ではないから不便なところで良い、ということか。 しょうがないので、運動も兼ね多摩川サイクリングロード(当事務所は多摩川に近接している)を通って府中支局に行くことにする。 今日は天気は素晴らしく良かったのだが風が強く激しく疲れる。約1時間半で到着。案内された3階の法人登記課(?)に作成した申請書等を提出。あっさり受理され、「書類に問題がなければ5/13に謄本が出ますよ」とのこと。
費用(印紙代)は本店移転と解散事由廃止が各3万、役員住所変更と役員変更が各1万、計8万円、解っていたけどやっぱ、「たっけぇー!」
ということで、傷心のまま、強風且つ一時間半の帰路についたのであった。
(終わり)

注:
インターネットでの申請も可能なようでちょっと調べたのだが、JAVAのバージョンが違うと動作しない(つまりネット申請を行うためにJAVAをアップデートしない申請専用PCを用意しなけらばならない)というような恐ろしいことが書いてあったので、ネット申請は止めることにした。 さすがお役所仕事と言うべきか。

2010-04-28

Hyper-V のゲスト OS として bkf アーカイブを復元してみる(2/2)

 さて、前回の ASR バックアップセットによる自動復旧の失敗を踏まえ、今回は Hyper-V のゲスト OS 環境に Windows Server 2003 をインストールした後で、手動でシステム情報を復旧する方法について記述します。

【操作方法】
1. ゲスト OS に Windows Server 2003 をインストールする。
 Hyper-V の仮想マシン設定については割愛します。
 Windows Server 2003 の仮想マシンへのインストールについては、過去記事(Hyper-V にゲスト OS をインストール(覚え書き))で紹介しているとおり、SP2 以降のインストールディスクを使用しなければブルースクリーンが出てクラッシュするので注意が必要です。

2. 1. でインストールした Windows Server 2003 をネットワークに参加させる。
 既存ドメインや既存ワークグループへ参加させるようにゲスト OS の Windows Server 2003 の設定を変更して、ネットワーク経由でバックアップアーカイブ(.bkf) にアクセスできるようにしておきます。

3. バックアップツールを起動し、復旧コマンドでシステム状態を復旧する。
 ゲスト OS より「スタート」→「すべてのプログラム」→「アクセサリ」→「システムツール」→「バックアップ」の順に選択してバックアップツールを起動し、「復元ウィザード(詳細)(R)」をクリックします。



 すると復元ウィザードが表示されますので、2. のネットワーク上に配置されているバックアップアーカイブを指定し、左ペインの[System State]項目にチェックを付けます。
(バックアップアーカイブは DVD-R に焼いたものをゲスト OS に認識させても構いません。)



 “次へ”をクリックすると、以下のような警告メッセージが出ますので、本当にシステム状態がバックアップのもので上書きされても良ければ“OK”をクリックして復元を実行します。



【システム状態復元によって発生する不具合】
 前述の操作によってシステム状態を復元すると、旧環境のシステム状態が引き継がれた形となりますので、次のような問題が起こります。

1) コンピュータ名の重複
 同一ネットワーク上に同じコンピュータ名のマシンが複数台存在すると、警告メッセージがデスクトップに表示されます。
 新環境の方のコンピュータ名を適切なものに変更するか、旧環境のコンピュータをネットワークから切り外してください。

2) IP アドレスの重複
 コンピュータ名と同様に、同一ネットワーク上に複数の同一 IP アドレスを割り当てることはできませんので、新環境または旧環境の IP アドレスを適切なものに変更してください。

3) Windows のライセンス認証の不具合(特に注意)
 上記 1)、2) を行う前に、Windows ライセンス認証を促すメッセージが表示された場合、その時点で仮想ネットワークカードが動作停止状態となるため、インターネット経由でのライセンス認証はできなくなります。
 このため、認証手続きはライセンス認証ウィザードの電話認証の手続きを選択し、音声ガイダンスに従って認証を行う必要があります。

4) アンチウィルスソフトを始めとする、システム関連ソフトウェアの再インストール
 システム状態復旧ではソフトウェアまでは復旧されないため、Windows Server 2003 起動時にソフトウェアがインストールされていないという旨のエラーメッセージが表示されることがあります。必要に応じてインストールし直してください。

5) 旧環境で発生していたイベントエラー
 旧環境のシステム状態を復旧した場合、旧環境で発生していたイベントエラーの一部がそのまま継承されることがあります。
 イベントビューアで発生しているエラーを調べ、必要に応じて修正する必要があります。

 その他の不具合や問題点などは見つけ次第こちらに記述していく予定です。

 今後の課題としては以下のものがありますが、また機会ができたときに対応したいと思います。

1. 複数ボリュームを持つ BKF の Hyper-V ゲスト OS への復旧
2. VHD の復旧

2010-04-27

Hyper-V のゲスト OS として bkf アーカイブを復元してみる(1/2)

 既存の Windows Server 2003 サーバ機の環境を Hyper-V のゲスト OS にごっそり移行してみようということになり、試してみたのですが Hyper-V では自動システム回復 (ASR) セットからの復旧はやはり無理があることがわかりました。

 今回は失敗談を踏まえて、手動によるシステム状態の復旧までをまとめることにします。

 操作にあたり、以下のMicrosoft 社の技術情報ページを参考にしました。
 ハード的に独立したマシンを準備して、ページの記載どおりに操作すれば復旧はそれほど難しくないのではないかと思います。
Windows Server 2003 のデータをバックアップおよび復元する

 今回は Hyper-V のゲスト OS 環境で復旧作業をするということで、以下の問題がネックとなりました。

A. フロッピーディスクをどうやってゲスト OS に認識させるか。
 自動システム回復 (ASR) を行う場合は、元環境のパーティション情報はフロッピーディスクに記録されているため、フロッピーディスクを読み込ませる仕組みが必要となります。
 しかし Hyper-V のゲスト OS 環境では、物理的なフロッピーディスクを認識できないため、フロッピーディスクのイメージファイルを仮想フロッピーディスクファイル(.vfd)として保存し、それを読み込ませる必要があります。

 .vfd ファイル(イメージファイル)を作成するツールは Microsoft 社では提供されていないため、適当なツールをどこからか調達する必要があります。

 今回は K.Takata さんが公開している Read/Write FD というツールを使いました。
  Read/Write FD の仕様およびダウンロードページはこちら

 使い方は仕様のページに書かれているとおりですが、フロッピードライブを丸ごとイメージファイル化するには次のように指定します(.vfd 拡張子前のファイル名は任意です)。

 rwfd a: c:\fdimageW2003.vfd

 この操作で作成した .vfd ファイルをゲスト OS に認識させるための設定を行います。
 この .vfd ファイルは Hyper-V のホスト OS の適当な場所に保存しておきます(今回は f:\に入れることにします)。
 Hyper-V マネージャを開き、Windows 2003 用の仮想ハードディスクを割り当てた後で、設定を開き、以下の図のように仮想フロッピーディスクを割り当てて適用させます。
 


 この操作を行うことによって、ゲスト OS からフロッピーディスクを仮想的に読み込ませることが可能となります。

B. バックアップアーカイブ(.bkf)をどうやってゲスト OS に認識させるか。

 ASR による自動システム回復を行うにあたり、途中で .bkf の指定を求められるわけですが、Windows 2003 のインストーラでは、このファイルの配置場所として物理的に接続されている HDD デバイスを想定しているようで、ここで躓いてしまいました。
 この時点で自動システム復旧操作は断念せざるを得なかったわけですが、操作としてはなかなか面白いものでしたので、掲載することにします。

【操作手順】
1. ASR バックアップセットを作成する。
「スタート」→「すべてのプログラム」→「アクセサリ」→「システムツール」→「バックアップ」の順に選択すると、次のような画面が表示されるので、[常にウィザードモードで開始する]のチェックボックスを外して一度“キャンセル”をクリックしてプログラムを終了させます。



 もう一度バックアップツールを開くと、今度はバックアップウィザードが開きますので、画面一番下の「自動システム回復ウィザード(A)」を選択します。



 すると自動システム回復の準備ウィザードが開きますので、図のようにバックアップアーカイブ名を指定します(.bkf 前のファイル名は任意です)。
 “次へ”をクリックすると、バックアップが始まります。



注意:この操作を行うにあたり、パーティション情報がフロッピーディスクに書き込まれます(前述の仮想フロッピーの記述参照)。このため、フォーマット済のフロッピーディスクをフロッピーディスクドライブに入れておいてください。

 フロッピーディスクを作り忘れてしまった場合は、手動でも作成できます。
 フォーマット済のフロッピーディスクを用意し、C:\WINDOWS\repair\ 配下の asr.sif および asrpnp.sif をこのフロッピーディスクにコピーしてください。

2. Hyper-V 環境を準備する。
 Hyper-V 環境にゲスト OS 用の領域を割り当てておきます。
 このとき、システムドライブとなる vhd の容量は移行元のシステムドライブの容量と同じか、それ以上になるように設定します。
 この時点で前述にあったとおり、仮想フロッピーの設定も行います。

3. Windows Server 2003 インストーラーディスクを入れてゲスト OS を起動し、途中で ASR による復旧モードに入る。

 インストーラーディスクを入れてゲスト OS を起動するとインストールが始まります。
 程なくして Press F2 to run Automated System Recovery (ASR) というメッセージが画面下に表示されますので、ここで F2 キーを押すと、次の画面に切り替わります。



 フロッピーディスクを入れてくださいというメッセージですが、すでに仮想フロッピーディスクを設定してありますので、任意のキーを押すことによって、次のような画面が表示されます。



 C キーを押してパーティションの削除、修復を行うと、システムが一旦インストールされます。

 ある程度までインストールが進むと、インストーラがシステム状態のバックアップアーカイブを読み込もうとして以下のエラーが発生します。



 ローカル環境にバックアップアーカイブが無いのでこのようなエラーが発生するのは当然と言えば当然ですが、上記 1. の手順で作成した .bkf ファイルを DVD-R に焼いて読み込ませようとしても、この段階では Windows Server 2003 のインストーラが DVD ドライブの認識を行っていないようで、このバックアップアーカイブを読み込ませることができなかったため、この時点で自動復旧操作は断念しました。

 もし、同じような方法で ASR 操作がうまく行った方がいらっしゃったら、情報をいただけると幸いです。

 次回は手動システム復旧と、復旧後の注意事項についてまとめます。

2010-04-13

『売上猫くん on MySQL』開発日記 - 番外9 - 外部キー制約設定でのたうちまわる

システム開発、運用に様々なトラブルは付き物で、ストレスの元。 特に「マニュアル通りにやってるはずなのにできない、直らない」というのは凹む。 それでも最近は「トラブルも経験のうち」、「(自社の)ナレッジベースに入れてノウハウにしよう」、「ブログに書いて世の中に貢献しよう(笑)」とか、達観しはじめた。が、あまり長い時間、しょんもないことで時間を浪費すると、凄まじく凹む。

さて、今回は外部キー制約の設定について。ここでも凹んだというか、疲弊した。FileMakerのリレーションのところでそれらしきことは簡単にできる。 ただ、このシステムは折角MySQLをデータベースとして使うのだから、PHPやフレームワーク等の多言語、他環境での開発も視野に入れている(というより、実は、当初はFileMaker よりもCakePHPでのWeb開発が先行していたが、大人の事情で優先順位を変更した)。 であれば、MySQL側でできることはできるかぎりMySQLに任せた方が、開発効率が(システムのパフォーマンスも)上がる。 閑話休題。


データが入力されているテーブルに外部キーを設定しようと以下を実行。

alter table neko.estimatedtls
add foreign key estimatedtls(estimateId) references estimates(ID)
ON DELETE cascade ON UPDATE NO ACTION
,add index estimateId (estimateId);


いろいろシンタクスを弄ってみたが駄目。 そこでデータが無い同様のテーブルを作ってやってみると旨くいく。どうやら既存のデータに問題があるらしいことがわかったので、テーブルを一旦空にして外部キー制約を設定、データを取り込み直そうとするとエラーが出る。 MySQL有名某サイトにそれらしい記事を発見。 苦節2日、どうにか原因は分かった。親テーブルの参照キー(ID)にない外部キー(estimateID)が子テーブルにあることが原因らしい。 そこで、そのはぐれ者の子レコードを削除しようと以下を実行。

delete from estimatedtls where
(select ID from estimatedtls where estimateId not in
(select ID from estimates))

と、「Error Code : 1093 You can't specify target table 'estimatedtls' for update in FROM clause」と出る。 どうもこういうサブクエリはUpdataやDeleteでは使用できないらしい。しかたなく、サブクエリの結果をテンポラリテーブルに一旦納めて、それをwhere句に使用することにした。

create temporary table temp(id int);
insert into temp select ID from estimatedtls
where estimateId not in (select ID from estimates);
delete from estimatedtls where Id in (select id from temp);

結果、成功。 親テーブルに属さないはぐれ者の子レコードを削除できた。 そこで、上記の Alter table以下を再実行すると、めでたく外部キー制約を設定できた。 これにより、FileMakerのリレーションでの設定に関わりなく、見積を削除すると見積明細も自動的に削除されるようになった。
以上、めでたし。

追記(10/08/23)
MySQL Workbench 5.2.16 Beta のGUIを利用して外部キー制約を設定しようとすると、[Column]でフィールドのチェックボックスをチェックできないことがある。 どうもWorkbenchのバグのようだ。 この場合はしょうがないので、外部キーのSQL文を書いて実行すること。 尚、Workbenchの最新版では解消している可能性も。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-04-02

『売上猫くん on MySQL』開発日記 - 3 - FMからストアド、トリガ

単純な操作であってもFileMaker(以下、FM)からMySQLには実に多くのクエリが発せられてしまう。 これはシステムのパフォーマンスの低下を招く。 また、複数テーブルにまたがる処理とそれに伴う冗長なFMスクリプトはさらにパフォーマンスを低下させる。 よって、FMの組み込みのSQL発行機能に頼らず、ビュー、ストアドプロシージャ(以下、SP)、ストアドファンクション、トリガを用いて高速化を図ることが開発者には要求される。 (尚、高速化の手段としてい一時テーブル(Create temparary table)は、残念ながらFileMakerからは認識できない。痛い!)

◇SP(ストアドプロシージャ)を実行し、FM側で戻り値を取得する
FMには「SQLを実行」スクリプトステップがあるので、DB側で作成したSPを利用するには、クライアントPCにODBCを入れて、

   Call procedure(param1,param2...) 

と書いて、実行すればよい。 ところが問題がある。 FMはエラーを除き、実行した結果を返さない(MySQLの場合はエラーメッセージそのもので、SQLSTATEの番号は拾わないようだ)。 SQLに限らず、FM(特にWindows版)の外部アプリケーションとの連携の悪さは定評がある。実際、「メッセージ送信」を利用してVBSやコマンドプロンプトを実行しても送信しっぱなし、戻り値無し、で困った人も多いと思う。面倒な回避方法はないこともないが…
さて、今回は「SQLを実行」ステップの話である。この場合は比較的楽ちんな対策がある。SP側で結果をテーブルに書き込み、FMアプリ側から読み込めばいい。 以下、実装方法例。
  1. session(primary_key,return) テーブルを用意し、FMアプリ起動時にsession に行を追加し、FMアプリ上でそのprimary_key の値(pVal)を記憶する
  2. SPのコードの終りには、 update session set return=戻り値 where primary_key=pVal を追記する。
  3. 「SQLを実行」で、Call SP(pVal,......)  を実行。
  4. sessionテーブルレイアウトのpValのレコードに移動し、returnを取得。
かくして、FMアプリでも、SQLの戻り値を無理矢理取得できる。


◇SPをトリガから起動する
以前に書いたように上記の「SQLを実行」ステップを利用するにはクライアントPCにODBCがインストールされていなければならならい。 FMクライアント(ODBC無)→FMServer(ODBC有)→MySQL の場合、SPは使用できないのか?  答はNo、トリガからSPを起動すればよい。
具体的にはMySQL で トリガ実行専用の「trigs」テーブルを用意。FM側にもtrigsのレイアウトを作成する。trigsへのInsert発生時に上記SPが起動するように、 「CREATE TRIGGER trig_name after insert ON trigs」を書く。 最後にFM側で、上記で作成したtrigsレイアウトに移動し、レコードを新規作成(確定させた瞬間にSPが実行される)するように、スクリプトを書く。 尚、トリガでは、NEW.field を利用し、上述の pValやその他の必要情報をSPに渡す。


◇まとめ
一連の動きをまとめると以下のようになる。

FMアプリ起動→スタートアップスクリプトで、sessionテーブルにレコードを追加→sessionのユニークなpVal を取得しアプリ終了まで保持→trigsレイアウトに移動し新規レコード作成→SPが実行される→SPにより、pVal を持つ session レコードの return フィールドに戻り値が返る→その戻り値により、必要な処理を行う。

10/4/7 追記&修正

以上

2010-03-31

『売上猫くん on MySQL』開発日記 - 番外8 - insert...select構文とODBC

以下、ODBC 5.1.5だと×、5.1.6だとOK

INSERT INTO estimates(customerNo) SELECT customerNo FROM estimates WHERE ID=5

これ、痛い。 この構文使えずに困っている人、結構いるんじゃなかろうか? 回避方法も見つからないし。


参考サイト:Bug #42905


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-29

『売上猫くん on MySQL』開発日記 - 番外7 - FileMaker内にMySQLの一般ログを表示する

MySQL の一般ログをFileMakerで表示する方法。

1.MySQLのMySQLデータベースをDSN登録する。
2.my.ini に log-output=TABLE,FILE を指定。
3.以下をMySQLコマンドラインで実行。
mysql> SET @old_log_state = @@global.slow_query_log;
mysql> SET GLOBAL general_log = 'OFF';
mysql> ALTER TABLE mysql.general_log ENGINE = MyISAM;
mysql>ALTER TABLE `mysql`.`general_log` ADD COLUMN `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (`id`);
mysql> SET GLOBAL general_log = @old_log_state;
4.MySQL を再起動。
5.FileMaker のリレーションシップで、上記1で作成したDSNのmysql.general_logテーブル選択。このとき、上記で作成した id を指定。(以下、略)

するとこんな感じでログを表示できる。


FMの自動発行SQLクエリで「?」が頭に点灯したら、ログをチェックするのがよろしいかと。

尚、FM標準コマンドでは general_log テーブルのログは削除できないので、truncate(テーブル内の全行削除) を使用する。以下はFMの「SQLを実行」ステップを使用して、truncate を実行。

参考サイト:一般クエリとスロー クエリのログ出力先の選択

2010/9/24 追記
ログが出力されない場合、mysqlコマンドで
SET GLOBAL general_log = 'ON';
を実行してみる。

2010/10/25 追記
id の属性に AUTO_INCREMENT を追加。

2010/10/15 追記
slow_query についても、上記の要領でFileMaker上に表示可能だが、ログ対象となるクエリ時間の閾値がデフォルトでは10(秒)になっている。この為、ログ書き込みされないと思いこんでしまう。このデフォ値は、my.ini で long_query_time = 1 とするか、set global long_query_time = 1 を実行することにより変更できる。



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-27

『売上猫くん on MySQL』開発日記 - 2 - 開発環境

『売上猫くん on MySQL』の開発環境は以下の通り。


アプリケーションファイル(NekoApp.fp7)は、FileMaker Server Advanced 10(以下、FMServerAdv)上に置き、開発PC1、2、3及び開発Mac 10.6 の FileMaker Pro Advanced 10(以下、FMPA)からそのファイルにアクセスして開発を行う。FMServerAdv を使用する理由には、複数人が開発を安定して行えること、オンラインバックアップがスケジュールできる、という2点が挙げられる。 
サーバ側にODBCをインストールしておけば、クライアント(開発PC)にはODBCは不要である(例外は後述)。
アプリケーション/ODBCの配布・アップグレードの容易さを考えれば、この構成は運用においても一考の価値はあると思う。 
なお、図の「開発PC3 Win2008/TS」は Terminal Service を載せたWindows Server 2008機で、各クライアントがリモートデスクトップ接続によりFMPAを起動し、FMServerAdv にアクセスできるようにしている。(もともと、FileMaker は Terminal Service との相性が良く、Ver5位より常用しているが、近年のTerminal Service はローカルプリンタへの印刷、ローカルディスクの利用も格段に簡単にできるようになり、加えて接続遮断時にも接続を自動で復旧してくれたりする)。

前述のように FMSA (FileMaker Server無印も同様)にODBCをインストールすればクライアントにODBCを入れる必要はないが、例外がある。それは「SQLを実行」スクリプトステップを使用する場合である。 FileMaker は通常、開発者自らSQLを記述する必要はないが、FileMaker が用意していないコマンドを実行する場合は「SQLを実行」を使用する。また、FileMaker の外部DBに対する処理の中には非常に遅いものがあり(激遅処理)、その典型的なものに多数のレコードに及ぶ一括処理がある。CSV等のファイル取込、全置換、ループ等がそれである。 その回避策として 「SQLを実行」スクリプトステップにSQL文を埋め込み実行すると直接外部データベースに素のSQLが送られるので、FileMakerのレコード取込やループ処理を使うのに比べれて、桁違いにパフォーマンスが向上する。尚、FileMaker の外部DB使用時の激遅処理については、機会を改めて書きたい。

さて、開発PC1、ここには予備用のMySQLを入れ、リストアやリカバリをテストを行うので、データベースを全部削除したりとか無茶をやる。無茶をやると「あー、なるほど」と新たな発見もあったりする。また、ローカルにアプリケーションファイル(NekoApp.fp7)を置いても、FMSAサーバの環境と同様に諸機能が動作するかのチェックも行う。


以上

『売上猫くん on MySQL』開発日記 - 番外6 - リモートのログを mysqlbinlog できない

市販のソフトウェアでログ(MySQLではバイナリログ)からのリカバリ機能を実装しているものはあまり無いような気がする。 以前、某有名財務ソフトのSEに、「ログからのリカバリはできるんですか?」と聞いたことがある。 答えは「そういうのが必要なときは、うちのSEがやりますよ」とのこと。 確かに、下手にユーザがリカバリを行うと大変なことになるので、こういう機能は組み込まないのが正解なのかもしれない。 また、小中規模のデータベースシステムなら、フルバックアップを日に何回か取って、障害発生時には最新のフルバックアップでリストアまでし、最終フルバックアップ以降の更新は、ユーザがせっせと入れる、というが実態なのかとも思う。 また、“ユーザがせってと”できないようなクリティカルなシステムは、自社のシステム管理者や外部のSI業者がしっかりリカバリする体制ができているのだろう。 

さて、『売上猫くん on MySQL』には、一応、バックアップ、フルバックアップからのリストア、バイナリログからのリカバリ機能を実装する予定で、バイナリログからのリカバリをテストしている。 MySQLが載っているサーバ機を使用し、そのサーバ上のログによりリカバリ(mysqlbinlog)を実行するのは、マニュアル通りに動く。 
ところが、ローカルPCからリモートサーバ上のログをリモートサーバに対してリカバリすべく下記を実行すると失敗する。

> mysqlbinlog --disable-log-bin --read-from-remote-server //remote-server/***/log-bin mysql --user=root --password=passord --host=remote-server --database=neko"

例によってググりながら、疑わしきところを弄りながら、異なる2台のサーバに対して試すこと数時間。 どうしても「Misconfigured master - server id was not set」 とか、「error reading packet from server: binary log is not open」みたいなエラーが出力される(この2つのエラーはレプリケーション絡みで出力されるようだが…)。

諦めかけたところ、いきなりプロンプト画面に正常な出力が行われる。データを見ると、確かに更新分が反映されている。そこで実行文を見直してみると、--read-from-remote-server を入れ忘れて実行していた。結果、成功。
--read-from-remote-server はマニュアルによると、「バイナリログをローカルファイルから読み取らずにMySQLサーバから読み取ります」とあるので、このオプションは必要と思ったのだが…

結局、半日以上を費やして、--read-from-remote-server の正しい使用方法は分からずじまいだが、目的は達したので良しとしよう。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-26

『売上猫くん on MySQL』開発日記 - 番外5 - ポータルで検索できない

MySQL等の外部DBを使用し、複数のリレーションを設定したポータル内では、検索を実行できません。 たとえば、売上と売上明細のテーブルを[売上No]と[区分]という二つのフィールドでリレートし、ポータルに売上明細のフィールドを置き、これらで検索しても失敗します。
FMのバグでしょう。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-23

『売上猫くん on MySQL』開発日記 - 番外4 - mysqldump で文字化け?

mysqldumpで作成したテキスト(sql)ファイルを WordPad で開いてみる。 文字化けだらけ。
MySQLクライアントを使用しても、phpMyAdmin を使用しても結果は変わらず。ただ、phpMyAdminで実行結果を画面に出力するとちゃんと表示される奇怪。
「mysqldump 文字化け」でググってみるといろいろと記事があり、それを見ながら --default-character-set やら、my.ini やらでいろいろ試してみるが解決には至らず。 
半日ほど頑張ってみたが埒があかないので、念のため、隣の人に聞いてみた。すると「WordPadを使ってませんか?」 。 「はぁ?」 、固まる小生。 WordPadって、NotePadの上位エディタじゃないの? NotePadで 確かに、NotePadは UTF-8とUnicodeの保存オプションがあるのに、 WordPadにはUnicodeのみ。 読み込みできるキャラクタセットが違うらしい。 WordPad のUnicodeはUTF-16LE対応.
Notepadはこれに加えてUTF-8対応。 あー、とんんだ恥さらし記事だけど、小生の同類がいるかもしれないので、恥を忍んで上げておこう。


関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-22

『売上猫くん on MySQL』開発日記 - 番外3 - 0を書き込みできない

売上明細テーブル( vw_salesdtls)のInt型のフィールド(balanceFlg)に値を書き込もうとする。他の値は書き込みできるのだが、“0”の書き込みが実行できない。 ログで何が起こっているのか確認する。

Commitに失敗している場合はバイナリログには記録されないので、mysqlbinlog は使えない。 そこで、一般ログというものを、

mysql> set global general_log="ON";

で作成してみる。 以下、1を立てて成功したログと、0で失敗したログ(一部抜粋)。

【1立てで成功】
9 Query SELECT ID,`売上番号`,balanceFlg, ~略~ FROM vw_salesdtls WHERE ID=8340 FOR UPDATE
9 Query UPDATE vw_salesdtls SET balanceFlg=1 WHERE ID=8340

【0立てで失敗】
8 Query SELECT ID,`売上番号`,balanceFlg, ~略~ FROM vw_salesdtls WHERE ID=8341

失敗したほうでは、なぜか FOR UPDATE 以下が発行されず、当然これでは更新できない。 当初はInnoDB側に何か問題があるのかと疑ったが、FileMakerが適切なクエリを発行していないことがわかった。 ちなみに、類似した他のテーブルでは、1、0の値に関係なく、更新(Update)は成功する。

いろいろとやってみた。FMのファイルを修復したり、レイアウトモードにして数字の書式を変更してみたり、フィールド定義を眺めてみたり。 そして、これが FileMaker のバグだと判明。 なんと、FileMaker は 空欄(null)→0 への変更は変更と認識しない、null=0 と認識するのである。 更新と認識しないので、 Update が発行されない。 恐ろしい。

結論
ということで、null と 0 を区別して扱う必要がある場合は、非常に注意が必要だ。 0 を参照キーするのは極力避けるべきた。 MySQL側で初期値を0に設定しておく、というのは一案かもしれない。
ちなみに、上述のように「null=0 と認識」するので、0→空欄lに変更を行っても、コミットすると 0 のままである。



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-16

『売上猫くん on MySQL』開発日記 - 番外2 - MySQLミラーサイト

MySQL サイトが今朝から落ちてる。 レファレンスマニュアルが見れない、つまり開発できない。Googleのキャッシュは遅すぎる。 MySQLの全機能を網羅し、信頼の置けるドキュメントはここにしかない(と思う)。「MySQLの開発者はこういうときどうしているのだろう?」等と思いつつ、、、ミラーサイトをみつけた。これタイの大学のサイト。Googleキャッシュよりはずっと早い。 この大学のトップページにはなぜか秋篠宮殿下が…



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-15

『売上猫くん on MySQL』開発日記 - 番外1 - 全データベース削除→リストア

あるサーバにあるデータベースダンプを別のサーバに移動。その後、MySQLのすべてのデータベースを削除し、リストアのテストを行おう思い、まず、

> drop database information_schema
(だったと思う)

を実行してみた。 すると、「information_schemaは削除できない」旨のメッセージが表示される。
その後、mysqlを再起動しようとするとエラーが出て起動しない。 データフォルダをみると、mysqlを含むすべてのデータベースは削除されている。エラーログをチェック(←これ大事)すると、 mysql データベースは起動に必須らしい。そこで、元のサーバから無理やりこのmysql フォルダをコピーし(サーバ停止無、こんなことやっていいいのか?)、丸ごと、起動しなくなった別サーバ内にコピー。 その後は再起動できた(ここまで半日潰れる)。

そこで、

> show databases

を実行すると、やはり表示されるのは、mysql データベースのみ。 そこで、コマンドプロンプトからリストアを実行すると、以下のようなエラーが出る。

InnoDB: Error: table test/parent already exists in InnoDB internal
InnoDB: data dictionary. Have you deleted the .frm file
InnoDB: and not used DROP TABLE? Have you used DROP DATABASE
InnoDB: for InnoDB tables in MySQL version <= 3.23.43? InnoDB: See the Restrictions section of the InnoDB manual. InnoDB: You can drop the orphaned table inside InnoDB by InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and moving the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.

InnoDB内部の記録と不整合があるらしいので、一旦、同名の空のデータベースを作成し、それを削除したあとにもう一度リストアをやってみるとやっと成功。 めでたし、めでたし

参考サイト:トラブルシューティング InnoDB データ ディクショナリ操作



関連リンク:『売上猫くん on MySQL』開発日記の記事一覧

2010-03-03

SonicWALLの新製品テクニカルセミナー

先日、SonicWALLの新しいTotalSecure TZシリーズ(TZ100/TZ200/TZ210のセミナーに行ってきた。

セミナーは2時間で最初の一時間がマーケ、後の一時間がテクニカルな内容であった。以下、その備忘録。

マーケ
2008年、UTM製品の国内の出荷台数シェアは、Juniper(NetScreen)、SonicWALL、Fortinet、Cisco、Checkpointの順。 同年の金額によるシェアは、Fortinet、Juniper、Cisco、SonicWALL、Checkpointの順。 Sonicは台数は出てるのに金額が低い、つまり、Sonicは中小向けの安いUTM製品に強みを持っている。

あと、営業さんが資料等で強調していたのは、「他社製品に比べ、コストパフォーマンスがいいですよ」ということ。


テクニカル---新製品の特徴
  1. TZ180以前の機種で標準付属していたSonicOS Standardが無くなり、全機種がEnhanced(5.x) に統合された
  2. TZ180に比しUTMパフォーマンスが2.5~5倍Up(10Mbps→25Mbps~50Mbs)
  3. GAVシグネチャーが上位機種(NSA?)と同等に。 TZ100も?
  4. アプリケーションファイヤウォール(TZ210のみ)
  5. SSL-VPN(ユーザ数:1~10、機種/オプションにより異なる)
  6. 冗長構成 --- 予備機(同機種)を一台用意し、障害発生時に切り替えて運用
アプリケーションファイヤウォールは近頃流行らしく、WinnyやSkypeといった企業にとって都合の悪いアプリの通信を遮断、またはユーザ毎に管理できる。 また、企業がブラウザをFirefoxに統一しようとする場合、IEによる通信を遮断してしまい、間接的にFirefoxのインストールを強制する、という使いかたもあるらしい。 社員が一杯いたらGoogle Chrome をインストールしてシークレットモードで使おうとする不心得者もいる筈だが、どこまでのアプリケーションに対応可能なのか、アプリケーションのシグネチャはカスタマイズできるのかは、次回聞くことにしよう。 確か、カスタマイズはできると記憶している。

エンジニアは、TZより上位のシリーズはマルチコアCPUによりDPI(パケットのIPヘッダ部分だけではなく、データ部分を検査する機能)が高速化されていることを強調していた(が、今回のTZとは関係ないので、"マルチコアアーキテクチャ"と言いたかっただけと違うんかと)。
また、RFDPI(Reassembly Free Deep Packet Inspection)も強調。本機能は、他メーカー機と異なり、パケットをメモリ上に展開すること無く直接検査するため、非常に高速だとか。 こちらはTZシリーズでも採用している。
この2つの機能はSonicWALLの"売り"であるらしく、昨年のハイエンドのE-Class(ベンツかいな)のセミナーでも濃い説明があった。


尚、今回配布された「かんたんUTM導入ガイド」という小冊子(非売品)には、UTMのことがとてもよくまとめられている。 巻末の 文言によるとこの小冊子は、アスキーの「NETWORK MAGAZINE」の08/9月~09/2月号でSonicWALLのエンジニアが書いた記事を再編集したもの、とのこと。



以上

見つけモノ
SonicWALLのYouTube動画サイト(英語)

2010-02-19

サイト証明書の更新方法

 SSL で Web サイト証明書を使っている企業は多いと思いますが、事務所移転やサーバ移転等の理由から、内容を一部変更してサイト証明書の更新を行いたい場合があると思います。
 Windows Server 環境の場合は、もう一つ仮想 Web サイトを用意すれば、比較的容易にサイト証明書の更新申請を行うことができます。

 手順は次のとおりです。

1. 仮想 Web サイトの準備
 IIS の場合は、「規定の Webサイト」の他に「管理者のWebサイト」が用意されていますので、「管理者のWebサイト」を使うだけで問題はありませんが、必要に応じて Web サイトを追加してください。
 以下の図のように、仮想 Web サイトは停止中のままでかまいません。


2. CSR(証明書発行要求書)の発行と証明書申請
 仮想 Web サイトの「ディレクトリのセキュリティ」タブより CSR の発行を行います。

 途中、証明書の名前や組織名といった情報を求められますが、ここで最新のものを入力していきます。
 この画面より発行した CSR を、証明書発行サービスサイト(Global Sign 等)の証明書更新申請画面の CSR 欄に貼り付けて申請を行うと、更新済のサイト情報で証明書の発行が可能となります。

 Global Sign 社のマニュアルに詳しく発行方法が記載されていますので、それに倣って CSR を作成し、証明書更新申請画面の SCR 貼り付け欄に貼り付けて申請を行うと便利でしょう。

(参考)[CSR生成] Microsoft Internet Information Services 6.0(新規)の CSR 発行方法

『売上猫くん on MySQL』開発日記 ― 1 始めに

昨年1月にFileMakerの新バージョンがリリースされ、ややモチベーションがアップ。 大人の事情によりMySQL 版の「FlexSql売管」は取り止め、暇をみつけて「売上猫くん 4.5」の MySQL版を作ろう、と思い立ったのが去年3月。 今後、当Blogではこの開発工程を綴ります。

概要
「売上猫くん4.5」の後継バージョン『売上猫くん on MySQL』、を、FileMaker Pro 10/MySQL 5.1 を使用し開発する。 完成後、『売上猫くん on MySQL』を流用し、データベースにFileMakerを使用した『売上猫くん5.0』、MS SQL-Server を使用した『売上猫くんon MSSQL』を開発する。可能であれば、最終的に3つのシステムが同一のFileMakerファイル上で動作するようにし、アップグレードを含む開発効率のアップを図る。

システム要件
  • 基本機能は「売上猫くん 4.5」に準じる
  • 見積/売上登録時の取引先/商品の入力方法改善
  • マルチウインドウ対応
  • データベースバックアップ/リカバリ機能(MySQL/MSSQLのみ)
  • ユーザ管理/ログイン機能
  • ユーザインターフェイスの改善

開発環境
データベース:MySQL Community Server 5.1.30
開発ツール
 FileMaker Pro Advanced 10 (Windows/Macintosh)
 MySQL Administrator (→開発終了!)
 phpMyAdmin
 MySQL Workbench
ドキュメント作成
 A5:SQL Mk-2
サーバ(MySQL用)
 CPU: Dual-Core AMD Opteron 1212 2GHz/8GB RAM
 OS: Windows Server 2008 Enterprise
ODBC: MySQL ODBC 5.1 ドライバ




2010/12/16 開発ツール加筆、記事一部削除

2010-01-26

The Same Trouble Again in FMS10 Installation

I mentioned how to "forcibly" fix incompatibilities between FileMaker Server 9 Advanced, IIS, and Java in the article on June 16, 2008, and once again, the same trouble took place with FileMaker Server 10 Advanced!
Being a little smarter this time around, I fortunately found a way to handle this trouble without reinstalling Java, IIS, and FMS10.

The followings are what have happened and how I fixed the problem:

- What I did and what happened -
1. Uninstalled FMS9 first, since FMS9 had already been installed on this Windows Server 2003 to prevent incompatibility between FMS9 and FMS10.
2. Installed FMS10 and added php to IIS via FileMaker Server 10 Admin Console, however, the previously installed ASP.NET's behaviour became odd enough that my web browser would not load .aspx files any more.

* This trouble did not take place when I clean installed FMS10 on a 32-bit version Windows Server 2008, so the symptom could be caused if you uninstall an older version of FMS before installing FMS10 or try to reinstall FMS10.

- How I fixed it -
If you install FMS9/10 when the IIS has alreay ASP.NET installed, some parts of ASP.NET would stop functioning properly. So, you can fix this by reinstalling ASP.NET.

1. Just in case, take a backup of wwwroot and the subsidiary directories.
2. Install FMS10 and check out if your browser is able to load .aspx files from the web server. If not, go on to the next step.
3. Choose [Control Panel] -> [Add and delete programs] in Windows Server 2003, and highlight [Application Servers] from [Add and delete Windows components]. Click "Details...", deselect [ASP.NET] from the list shown, and click "OK."
4. Click "Next" to uninstall ASP.NET.
5. Restart IIS Admin Service and World Wide Web Publishing Service. Make sure ASP.NET is not listed on [Web Service Expansion] in the IIS.
6. Choose [Control Panel] -> [Add and delete programs] in Windows Server 2003, and highlight [Application Servers] from [Add and delete Windows components]. Click "Details...", tick off [ASP.NET] from the list shown, and click "OK."
7. Restart IIS Admin Service and World Wide Web Publishing Service. Make sure ASP.NET is listed with the version number on [Web Service Expansion] in the IIS.
8. Make sure that your web browser loads .aspx files properly. Also check out if php works accordingly.

2010-01-25

FMS10 のインストールでもトラブル発生

 2008/06/16 の記事で FileMaker Server 9 Advanced のインストールトラブルと無理矢理とも言えるトラブル回避策について書きましたが、今回 FileMaker Server 10 Advanced のインストール時にも同様の現象が発生したので、アプリケーションの再インストールをしない方向で対応してみました。

 以下、現象と対応方法です。

【現象】
 Windows Server 2003 に FMS9 がすでに入っていたため、FMS9 をまずアンインストール。
 その後、FMS10 をインストールしてから、FileMaker Server 10 Admin Console から php 機能を IIS に追加すると、IIS にインストールされていた ASP.NET 環境の挙動がおかしくなる。
 Web ブラウザから .aspx ファイルが読み込まれなくなる。

 Windows Server 2008 (32bit バージョン)にクリーンインストールした FMS10 ではこの現象は発生しなかったため、旧バージョンの FMS アンインストールや、FMS10 の再インストールを行うと発生する現象の可能性がある。

【対応】
 IIS に ASP.NET がすでに稼働中の状態で、FMS9/10 をインストールすると、ASP.NET の機能の一部が正常に動作しなくなるようです。このため、ASP.NET を再インストールすることで解決します。

1. 念のため、wwwroot 以下の環境をバックアップしておきます。
2. FMS10 をインストールし、.aspx ファイルが読み込めるかどうか確認します。読み込めなかった場合は次のステップに進みます。
3. Windows Server 2003 の「コントロールパネル」→「プログラムの追加と削除」を選択し、「Windows コンポーネントの追加と削除」より[アプリケーションサーバー]を反転させ、“詳細”ボタンをクリックして[ASP.NET]のチェックを外し、“OK”をクリックします。
4. “次へ”ボタンをクリックすると ASP.NET がアンインストールされます。
5. IIS Admin Service、World Wide Web Publishing Service を再起動し、IIS マネージャーの「Web サービス拡張」にASP.NET が登録されていないことを確認します。
6. Windows Server 2003 の「コントロールパネル」→「プログラムの追加と削除」を選択し、「Windows コンポーネントの追加と削除」より[アプリケーションサーバー]を反転させ、“詳細”ボタンをクリックして[ASP.NET]のチェックを付け、“OK”をクリックします。
7. IIS Admin Service、World Wide Web Publishing Service を再起動し、IIS マネージャーの「Web サービス拡張」にASP.NET がバージョン入りで登録されていることを確認します。
8. Web ブラウザを使って .aspx ファイルが読み込めたら成功です。php 環境も動作するか併せて確認してみてください。

2010-01-19

Dell のファン交換でハマる

 個人で使用している Dell600SC を起動すると BIOS から以下のメッセージが表示されるようになりました。

Alert! Back system fan was not detected.
Strike the F1 key to continue, F2 to run the setup utility.

 ケースカバーを外して電源を入れてみると、確かにケースファン(FAN2)が回転しなかったため、ファンを交換することにしました。マザーボードに挿さっていたファンは JMC/DATECH の 1238-12HBTA-4 というモデルです(写真左)。



 今回購入したのは KAZE-JYUNI SY1225SL12SH という 12cm, 1900RPM というタイプのファンです(上記写真右)。

 ファンをセットし、コネクタを挿そうとしましたが、コネクタの形状がマザーボードのコネクタスロットに合わず、挿せませんでした。以下の写真のように、DELL で提供されているファンは平型のコネクタで、市販のファンは多少厚みのあるコネクタになっています。

 暫定策として、コネクタを 4 ピン電源ケーブルに変換し、HDD の電源ケーブルとつないでファンを回していますが、これですと BIOS の FAN2 コネクタの接続状態が検出できないため、上記の BIOS エラーが解消しません。


 そこでこのコネクタを変換するためのケーブルをネット検索しましたが見つかりませんでした。
 量販店で聞いてみたところ、DELL の部品コネクタは特殊な形状をしており、市販されていない場合があるということで、このファンのコネクタもそれに該当してしまったようです。

 ここで考えられる対策は次のとおりです。

1. ダメ元でコネクタ変換ケーブルを扱っている業者のページをもう少し頑張って検索する。
2. コネクタのプラスチック部分を削って挿せるようにする。
3. DELL のコネクタ部分を新しいファンのコネクタ部分に半田付けする。
4. 正規品の DELL ケースファンを取り寄せる。

 2. と 3. の方法はケーブルコネクタそのものを加工してしまうので、失敗するとその時点でアウトですが、どっちみちダメなら最終手段として試してみる価値はあるかもしれません。