2011-04-21

SonicWall Global VPN Client のインストールが失敗したり、クラッシュしてしまうときのちょっとした改善案(Windows Vista, Windows 7 編)

 Sonic Wall Global VPN Client (以降 SWGVC) がインストール先の OS によって正しく動作しないという記事を過去に書きましたが、今回、Vista/Windows 7 環境でも不具合が発生することがあったため、裏技的な対応方法をご紹介します。

【現象】(テスト時の SWGVC のバージョンンは 4.2.6.0305)

 SWGVC を起動すると、「Failed to open the IPSec driver.」 というエラーメッセージが表示され、接続できない。
 もしくは、SWGVC の起動まではできるが、Enable をクリックすると同様のエラーが表示されるか、接続が Enabled にならない。


【対応方法】

1. スタートメニューより、「コンピュータ」を右クリックしてから「プロパティ」の順に選択し、デバイスマネージャーを開きます。

2. デバイスマネージャーの「表示」メニューより、「非表示のデバイスの表示(W)」を選択します。


3. 左ペインに表示されるデバイスの一覧から、「SonicWall IPSec Driver」を右クリックし、「プロパティ」を選択します。




4. プロパティシートの「ドライバ」タブより、スタートアップの種類を「自動」に変更し、“開始”ボタンをクリックしてドライバを開始させ、コンピュータを再起動します。




5. SWGVC を起動し、接続を試みます。


 当方の場合は、最新版の SWGVC ではどうしても接続がうまくいかなかったため、旧版の SWGVC をインストールしなおし、上記の操作をしてみたところ、正常に接続されるようになりました。


 今までいろいろやってみて、どうしてもうまくいかなかった方は、ダメ元でお試しください。

参考:SonicWall Global VPN Client (GVC) Troubleshooting

Hyper-V の仮想マシンのエクスポート時の注意点

 前回の記事に関連した内容となりますが、Hyper-V の仮想マシンをエクスポートする際に注意しておきたい点がいくつかありますので、紹介いたします。

仮想マシン全体をエクスポートするか、スナップショットをエクスポートするか

 Windows Server 2008 R2 では、仮想マシンのエクスポートを行う際に、仮想マシン全体をエクスポートするか、スナップショットをエクスポートするか選択できます。

 Hyper-V マネージャーで仮想マシン名を右クリックしてエクスポートすると、仮想マシン全体をエクスポートできます。



 特定のスナップショットのみをエクスポートする場合は、下ペインでスナップショットツリーを展開してから、当該のスナップショットを右クリックしてエクスポートします。



 この柔軟性が意外と問題で、誤ったスナップショットをエクスポートしてしまうと、移行先が最新版の仮想マシン環境にならない可能性があるため、注意が必要です。

 そのため、仮想マシン全体をエクスポートして、移行先で仮想マシンを復元してから、スナップショットを削除してディスク結合を行う方が操作上無難ではないかと思います。


不要なスナップショットを削除して、仮想ハードディスク結合を行う
 スナップショットの削除の仕方によって、スナップショットディスク (.avhd) そのものが削除される場合と、スナップショットディスクが親仮想ディスク (.vhd) に結合される場合があります。

 スナップショットディスクが親仮想ディスクに結合されるようにスナップショットを削除するには、下図の番号の順番にスナップショットを削除します。



参考:スナップショットの削除とインポート/エクスポート(3.スナップショットの削除とインポート/エクスポート)


【仮想マシンインポート時の注意点】

 仮想マシンをインポートする際に、仮想 NIC 名および CD/DVD デバイス名が元の名前と一致していない場合は、以下のようなエラーがイベントビューアに記録されます。




 これらのエラーは、イベントビューアより「アプリケーションとサービスログ」→「Microsoft Windows」→「Hyper-V-VMMS」→「Admin」で確認できます。

ID: 14140
'仮想マシン名' は、デバイス 'Microsoft Virtual CD/DVD Disk' を追加できませんでした。(仮想マシン ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)

ID: 18130
'仮想マシン名' (仮想マシン ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) にデバイス '{ResourceType=21, OtherResourceType="", ResourceSubType="Microsoft Virtual CD/DVD Disk"}' を正しくインポートできませんでした。エラー: 無効なパラメーターです (0x80041008)。

ID: 18510
インポート タスクで、エラー '指定されたネットワーク リソースまたはデバイスは利用できません。' (0x80070037) により、ファイル 'C:\ProgramData\Microsoft\Windows\Hyper-V\Windows Server 2000\HV Windows Sever 2000 x86 SP4.vhd' の ACL を修復できませんでした。

ID: 18060
インポートできませんでした。場所 'C:\ProgramData\Microsoft\Windows\Hyper-V\Windows Server 2000\' に仮想マシンを保存できません。エラー: 指定されたネットワーク リソースまたはデバイスは利用できません。 (0x80070037)


 当方で仮想マシンのインポート、仮想 NIC 名が元の環境とインポート先の環境と一致していない場合に仮想マシンのインポートを実行すると、ホストの NIC が動作停止し、コンピュータをシャットダウンできなくなるという不具合が発生したため、仮想 NIC 名は旧環境と新環境で統一しておいた方が良いかもしれません。

2011-04-06

Hyper-V の仮想マシンの移行方法(エクスポート&インポート)

 さて、当ブログで以前から Hyper-V の設定方法や仮想ディスクの編集方法について述べてきましたが、今回はあるコンピュータの Hyper-V 環境にインストールされている仮想マシンを別のコンピュータに移行する方法について紹介します。

 ここでは、Hyper-V マネージャに用意されている仮想マシンのエクスポート、および仮想マシンのインポート機能を使います。

【仮想マシンのエクスポート】

1. 移行対象の仮想マシンをシャットダウンして停止させます。
2. Hyper-V マネージャより、1. の仮想マシンをマウスで右クリックしてサブメニューを表示させ、その中から「エクスポート(X)...」を選択します。


3. エクスポート先の指定を促すダイアログが表示されますので、任意の場所を指定します。


注:
 現在割り当てている仮想マシンの環境がそのままエクスポートされますので、エクスポート先のディスク空き容量が十分あることを事前に確認しておいてください。

 また、ユーザが任意に名称変更した仮想ハードディスク (.vhd) をエクスポートしようとすると、以下のようなメッセージが表示され、エクスポートに失敗してしまいますので、ご注意ください。イベント ID:18350

「仮想マシン 'Windows Sever 2000 x86' (E07BACD0-A9A4-4FC2-85F0-D9A9357943AA) をエクスポートできませんでした: エラー '指定されたファイルが見つかりません。' (0x80070002)。


 このエラーメッセージは、管理ツールのイベントビューアより、「アプリケーションとサービス ログ」→「Microsoft」→「Windows」→「Hyper-V-VMMS」→「Admin」で確認できます。


【仮想マシンのインポート】

0. 仮想マシンのインポートは一旦処理が始まってしまうと、後でユーザがインポート先を任意指定できないため、事前にインポート先を決めておく必要があります。
 Hyper-V マネージャを開き、右ペインに表示されるメニュー項目の中から「Hyper-V の設定...」を選択します。



 Hyper-V の基本設定をするためのウィンドウが表示されますので、必要に応じて「サーバー」項目の[仮想ハードディスク] および [仮想マシン]へのパスを変更しておきます。
 仮想マシンのインポート処理が実行されると、これらのパスを使用して仮想マシンが構成されます。



 
注:
 デフォルトでは、これらのパスは以下のようになっているため、仮想マシンをインポートすると、以下のディレクトリ配下に仮想マシン環境が展開されることになります。

[仮想ハードディスク]
<%systemdrive%>:\Users\Public\Documents\Hyper-V\Virtual Hard Disks

[仮想マシン]
<%systemdrive%>:\ProgramData\Microsoft\Windows\Hyper-V


1. 移行先のコンピュータの Hyper-V マネージャを開き、右ペインに表示されるメニュー項目の中から「仮想マシンのインポート」を選択します。



2. 仮想マシンのインポートダイアログが表示されますので、下図のようにエクスポート済の仮想マシンを指定してから、オプションを設定して“インポート”ボタンを押すと、仮想マシンがインポートされます。




○オプション解説

仮想マシンを移動または復元する(既存の一意な ID を使用する)(M) --- エクスポート元の ID と全く同一の仮想マシンが復元される。
インポート先にすでに同じ ID の仮想マシンが存在する場合は、インポートは失敗する。

仮想マシンをコピーする(新しい一意な ID を作成する)(O) --- エクスポート元のマシンに新しい ID を振り、仮想マシンをコピー。

すべてのファイルを複製し、同じ仮想マシンを再度インポートできるようにする(D) --- エクスポートされた仮想マシンを元に、何回でもインポート操作ができる。

注:このチェックボックスを外してインポートを実行すると、エクスポート済の仮想マシンが使えなくなるため、一度しか操作を実行できなくなります。


3. インポートが完了したら、仮想マシンを起動します。
システムの構成によっては CD/DVD ドライブや NIC が正常に動作しないことがあるため、設定画面で調整を行ってください。


参考リンク:
Hyper-V 関連ドキュメント
http://technet.microsoft.com/ja-jp/virtualization/dd297510
Windows Server 2008 R2 Hyper-V バックアップ/リストアガイド
http://primeserver.fujitsu.com/primergy/technical/construct/pdf/win2008r2-hyperv-backup.pdf

2011-04-01

計画停電対策(2) --- データセンターを利用する

計画停電対策の王道は、やはり予備電源設備を完備したデータセンターの利用となる。
下図は今回、客先へ提出したデータセンター利用提案書の一部(改変)である。 既にインターネットVPNを構築済であるため、今まで本社で運用していたサーバ群をデータセンターに移し、データセンターを中心としたVPNネットワークを再構築する。 今まで支社からアクセスしていた Terminal Server だけでは 本社からのアクセスを捌き切れないので、Terminal Server をもう一台増設する。
これで、データセンター内のサーバは停電の心配がなくなるが、計画停電区域にある本社、支社等は停電時、当然ながら、センターのサーバへのアクセスはできない。 そこで、前回書いたように、本社、支社ではONUやルータといった必要最低限の通信機器はUPSに接続するとともに、必要最低限のノートPCを用意し、停電中もセンターのサーバへアクセスできるようにする。


注:
支社のクライアントPC 上の FileMaker からデータセンターのFileMaker Server にアクセスして処理を行うと、インターネットを介して多量のトラフィックが発生するため処理は遅くなる。 Terminal Server (Terminal Service) を利用すると、処理は Terminal Server 上で実行され、処理の結果たる画面イメージあるいは印刷イメージのみが支店のクライアントPCあるいはプリンタに 送付されるため、高速に処理を実行することが可能。 また、データ書出は支社のPCやストレージに行うこともできる。

2011-03-30

計画停電対策(1) --- ノートPCサーバとHyper-Vで乗り切る

震災発生が3/11。 計画停電(輪番停電)なるものがその後発生し、その間、サーバを停止させなければならないと判明したのが3/13(日)。 当事務所がある調布が第2グループに含まれており、15日に計画停電があると判ったのが14日夜。

当社では客先のデータベースを運用している関係上、至急、以下のような対策を検討した。

1.発電機導入
探してみるとヤマハのEF1600iS(13万円~、1.6kVA、燃料はガソリン)なるものが良いらしい。ルータ、ONU、最小限のサーバなら、停電時も運用できそうだ。 さっそく販売店に問い合わせてみると、「政府・メーカーから在庫分はすべえて被災地に送るようにと指示されていて、当面入荷の見込みはない」とのこと。 あっさり頓挫。


2.客先へのサーバ移動
客先の所在地が計画停電の範囲外にある場合に検討の余地がある。 サーバを新設する場合はすべて一から再構築になり、DNSやSSLも再申請・再設定になる可能性あり。また、夏場は千代田、港、中央以外の東京23区も停電の対象地域となるらしいので、この場合は解決策にはならない。


3.データセンター
データセンターであれば電源は保障される筈なので、上記2前段の問題は残るものの、停電対策には一番良い解決策と思われる。 が、コストが高い。


4.ノートPCサーバへの移行とUPS増設
現サーバ環境をノートPC(Windows Server 2008 R2 + Hyper-V)に移行し、停電時は増設したUPS で乗り切る。 結局、これを採用した。 開発用のノートPC(CORE I5/8GB)に Windows 2008 と Hyper-V をインストールしてあったので、ここに必要最低限の現サーバ(複数)の環境を移行。Hyper-Vのお陰で1台の物理マシンに複数のサーバOSをインストールして運用できる。 このノートPCの内蔵バッテリは最大6時間持つ仕様だが、テストしてみると3時間弱で切れてしまう。そこで、UPS(APC Smart-UPS 1500)も2台増設した。
1台はノートPC専用、もう1台はONUとルータに接続。この構成で3時間程度の停電であればUPSバッテリも余裕をもって乗り切ることができる。 また、停電後2時間程度でバッテリは満タン状態に戻るので、1日6時間停電がある場合でも、停電と停電の間に3時間の余裕があればどうにかなりそうである。


かくして、上記4の方法で行くことを14日午前に決定、14日午後一でUPSを発注、サーバ環境をノートPCサーバに移行作業開始、17日午後より運用を開始した。 Smart 1500が発注から中2日で到着したのは幸運だった。(その後、Webのショップを覗いてみたが、軒並み売り切れになっていた。3/30現在、在庫があるショップも僅かにあるが、14日時点に比べると、割高になっている。)

以上 


2011-01-25

『売上猫くん on MySQL』開発日記 - 番外22 -SQL SECURITY の DEFINER/INVOKER指定

ようやく再リリース!、と思ったのもつかの間。 MySQLデータベース neko のインストール後、テーブル(実際はビュー)にアクセスできない現象が発生。 CREATE VIEW するときの SQL SECURITY [DEFINER | INVOKER]に問題があることがわかったので、以下、そのメモ。
(ということで、1/25現在、ダウンロード停止中 )
(1/25 18:00~、ダウンロード再開)

DEFINER/INVOKER

DEFINER指定:
Stored/Viewに対して実行アカウントがExecute/Selectできる権限さえあれば、Stored/Viewの内容はDEFINERの権限で実行される→Stored/Viewが実行できない可能性は少ない(DEFINERがroot@localhost なら、ほぼ確実に実行できる筈。)

INVOKER指定:
Stored/Viewに対してExecute/Selectできる権限があっても、Stored/Viewの内容は実行アカウントの権限に基づき実行される→Stored/Viewが実行できない可能性は、DEFINER指定に比し大きい。

例:
CREATE DEFINER = 'admin'@'localhost' PROCEDURE p1()
SQL SECURITY DEFINER (or INVOKER)
BEGIN
UPDATE t1 SET counter = counter + 1;
END;


DEFINER指定:実行アカウントに Execute権限さえあれば、t1テーブルのUPDATE権限は不要( 'admin'@'localhost'の権限で実行される)
INVOKER指定:INVOKER(実行者) は Execute権限とUPDATE権限の両方必要。 

尚、下記サイトでは、セキュリティ上、INVOKER の使用を推奨している。


参考サイト
http://dev.mysql.com/doc/refman/5.0/en/stored-programs-security.html
(対応の日本語頁は無く、DEFINER | INVOKERに関する日本語サイトも少なし)

以上

2011-01-20

Hyper-V ゲスト OS 用仮想ハードディスクが膨れ上がって大慌て (イベントID 16060)

Hyper-V のゲスト OS が一斉に一時停止になってさあ大変

 Hyper-V のゲスト OS から共有しているフォルダにアクセスしようとすると、ネットワークリソースにアクセスできないという旨のメッセージが出ました。



 そこで、Hyper-V マネージャーを見てみると、すべてのゲスト OS が一時停止状態となっていたため、イベントビューアを調べてみると、以下のエラーが記録されていました。
 このエラーは、イベントビューアより、「アプリケーションとサービスログ」→「Microsoft」→「Windows」→「Hyper-V-VMMS」から参照することができます(イベントID 16060)。




 どうやら、ゲスト OS 用に割り当てた仮想ハードディスク (.vhd) が膨れ上がってしまい、ハードディスクの空き容量が少なくなってしまったたために、登録されているすべてのゲスト OS が Hyper-V の 仮想マシン管理サービスプロセス(VMMS)によって一時停止状態となったようです。

 仮想ハードディスクが膨れ上がった原因を調べてみると、次のことがわかりました。

  1. 仮想ハードディスクの形式が可変になっていた。

  2. スナップショットが複数存在していた


 上記のために、いつの間にか膨れ上がった仮想ハードディスクが実際のハードディスク領域を圧迫していた模様です。

こうなったら仮想ハードディスクを固定にするしかない

 限りあるコンピュータ資源であるハードディスクの空きがあまりないということで、今回のような現象が発生すると、これ以上仮想ハードディスクが膨らまないように対応するしかありません。

 仮想ハードディスクの形式を可変から固定に変換すれば、ディスク容量はそれ以上は大きくなりません。
 仮想ハードディスクの形式を可変から固定に変換する作業自体はそれほど難しくはないのですが、スナップショットが存在する場合は、先にスナップショットを親仮想ディスクに結合しなければなりません。

 以下のような仮想ハードディスク構成になっているとします。

Windows Server 2000 x86.vhd <--- 親仮想ディスク
  Windows Server 2000 x86[ユニークID].avhd <--- 差分仮想ディスク1
  Windows Server 2000 x86[ユニークID].avhd <--- 差分仮想ディスク2
  Windows Server 2000 x86[ユニークID].avhd <--- 差分仮想ディスク3(最新)

 上記で.avhd がスナップショットで作成される差分仮想ハードディスクとなります。
 このように、一つでも差分仮想ハードディスクが存在する場合は、ディスク形式を変換する前に親ディスクにディスクを結合しなければならなくなりますので、注意が必要です。

 上記の例では 3 の差分仮想ハードディスクが最新となっていますので、3、2、1 の順に計 3 回の結合作業が必要となります(3 回結合が完了すると、Windows Server 2000 x86.vhd だけになる)。


差分仮想ハードディスクの結合方法

 差分仮想ハードディスクを親仮想ディスクに結合するには、ゲスト OS をシャットダウンしてから、ディスクを解除します。

1. Hyper-V マネージャより、当該のゲスト OS を選択して設定画面を開き、下図のように IDE コントローラーから仮想ディスクを削除し、“適用”ボタンをクリックします。



 「削除」という表現が紛らわしいですが、Hyper-V の管理下から解除されるという意味ですので、仮想ハードディスク自体はそのまま残ります。

2. 下図のように、Hyper-V のマシン名をマウスで右クリックするとサブメニューが開きますので、その中から「ディスクの編集(E)...」というメニュー項目を選択します。



 仮想ハードディスクの編集ウィザードが開きますので、以下のように最新の差分仮想ディスク(.avhd)を指定します。



3. 仮想ハードディスクに対するアクションを選択するための画面に移りますので、下図のように「結合(M)」を選択し、“次へ”をクリックします。



4. 差分ディスク変更の結合をするための画面に映りますので、下図のように「親仮想ハードディスクに結合する(P)」を選択し、“次へ”をクリックします。



5. 以下のような確認画面が表示されますので、この内容でよければ“完了(F)”をクリックします。
差分仮想ハードディスクが親仮想ハードディスクに結合されます。



注意)この手順を繰り返し、すべての差分仮想ハードディスクを親仮想ハードディスクに結合する必要がありますので、ディスク領域に余裕のあるハードディスク上でこの操作を行ってください。


仮想ハードディスクを最適化する

 上記で差分仮想ハードディスクがすべて結合されると、ディスクの中は下図のように仮想ハードディスクのみになります。



 仮想ハードディスクのサイズ形式を可変から固定に変換する前に、以下の手順で仮想ハードディスクを最適化することによって、不使用の領域を取り除いておくことをお勧めします。


1. 下図のように、Hyper-V のマシン名をマウスで右クリックするとサブメニューが開きますので、その中から「ディスクの編集(E)...」というメニュー項目を選択します。



2. 仮想ハードディスクの編集ウィザードが開きますので、先ほど結合した仮想ハードディスクを指定し、“次へ”をクリックします。



3. 仮想ハードディスクに対する操作のメニュー項目が表示されますので、その中から一番上の「最適化(C)」を選択し、“次へ”をクリックします。



4. 確認画面が表示されますので、操作内容が最適化になっていることと、指定した仮想ハードディスクが正しいことを確認してから、“完了”をクリックすると、仮想ハードディスクが最適化されます。



仮想ハードディスクのサイズ形式を可変から固定に変換する

 仮想ハードディスクを最適化した後は、サイズ形式を可変から固定に変換します。

1. 下図のように、Hyper-V のマシン名をマウスで右クリックするとサブメニューが開きますので、その中から「ディスクの編集(E)...」というメニュー項目を選択します。



2. 仮想ハードディスクの編集ウィザードが開きますので、先ほど結合した仮想ハードディスクを指定し、“次へ”をクリックします。



3. 仮想ハードディスクに対する操作のメニュー項目が表示されますので、その中から真ん中の「変換(V)」を選択し、“次へ”をクリックします。



4. 変換対象の仮想ハードディスクを選択するための画面に移りますので、先ほど最適化した仮想ハードディスクを選択してから、“次へ”をクリックします。



5. 確認画面が表示されますので、操作内容が「容量固定に変換」になっていることと、指定した仮想ハードディスクが正しいことを確認してから、“完了”をクリックすると、仮想ハードディスクのサイズ形式が固定に変換されます。




変換済みの仮想ハードディスクを Hyper-V のIDE コントローラに繋ぎ直す

 これで仮想ハードディスクのサイズ形式が固定になりましたので、Hyper-V の IDE コントローラに繋ぎ直して起動できれば操作は完了です。


1. Hyper-V マネージャより、当該のゲスト OS を選択して設定画面を開き、下図のように IDE コントローラーを左ペインで選択し、右ペインで「ハードドライブ」を選択してから“追加(D)”ボタンをクリックします。




2. 仮想ハードディスクファイルを選択する画面に移りますので、“参照(B)...”をクリックして先ほどサイズ形式を固定に変換した仮想ハードディスクを選択してから、“適用(A)”をクリックします。




3. IDE コントローラに仮想ハードディスクが適用されると、“適用(A)”ボタンが灰色反転しますので、“OK”をクリックします。



4. 今回適用したハードディスクを使ったゲスト OS を起動し、問題なく操作できれば完了です。


 今回の障害で得られた教訓は次のとおりです。

1) 最初に仮想ハードディスクを割り当てる際は、予想されるディスク容量の形式を固定にする。
2) スナップショットはある時点のシステム状態を再現するには便利な機能だが、仮想ハードディスク絡みのトラブルが発生して最適化や変換が必要になった場合に、すべてのスナップショットを一旦親ディスクに結合しなければならなくなるので、スナップショットを多用するのは得策とは言えない。

2011-01-17

『売上猫くん on MySQL』開発日記 - 番外21 - βリリースしまつた

ダウンロード再開しまつた。 MySQL 5.5 に対応させようとしましたが、簡単には修正できなさそう。当面は諦めモード。 ということで、本製品は、現段階では、MySQL 5.5 には非対応!ですので、ご注意ください。 (11/01/21 土屋追記)



最新版のMySQL 5.5で動作しないことが判明したため、一時ダウンロード停止! トホホ…(11/01/20 土屋追記)



ようやく「売上猫くん on MySQL 5.0」のβ版(フリーウェア)をリリースすることになりました。
売上明細のテーブルに200万程度のレコードを入れてテストを行っています。
現時点でできるかぎりの巨大テーブル対応と、ストアドプロシジャやトリガを使用した高速化を行っています。 200万行のテーブルがあっても、起動が若干遅いこと、起動後最初に売上明細テーブルにアクセスにいくと10秒位コーヒーマークがでる位で、使用できるレベルではないか、と思ってます。 1000万件クラスのテーブルになると、今以上の対策がいるかも知れないです。

ご興味のある方は下記からダウンロードしてくださいね。 

売上猫くん on MySQL 5.0βのサイト
http://www.tpc.jp/product/neko/50/index.htm

ダウンロードページ


尚、バージョンを 5.0 としているのは、FileMaker Pro 5/6 で作成した旧製品「売上猫くん 4.5」の機能のほとんどを継承しているからです。データベース(バックエンド)に MySQL を使用した猫くん製品は、これが最初となります。


2010-11-16

『売上猫くん on MySQL』開発日記 - 番外20 - ウィンドウ内容の再表示ステップ実行時のクエリ

SQLデータベースを使用時、あるユーザが行った更新は他のユーザの画面に即時反映されることは無い。他のユーザが更新を行ったか否かを確認するには、[ウィンドウ内容の再表示]ステップを使用するが、このステップには、「キャッシュ結合結果を書き込む」「キャッシュされたSQLデータ」という2つのオプションがある。 オプションによって、SQLデータベースに送られるクエリにはどういう違いがあるのか?

1.キャッシュ結合結果を書き込む/キャッシュされたSQLデータの両オプション選択時
SELECT ID,`〒`,`住所` FROM vw_zips WHERE ID IN(121013,121014,~) 等のクエリを発行、画面は更新される

2.キャッシュ結合結果を書き込のみ
クエリ実行されず、画面未更新

3.キャッシュされたSQLデータのみ
上記1と同様

4.オプション無
クエリ実行されず、画面未更新

FileMakerの[レコード]-[ウィンドウ内容の再表示]を実行すると、1と同じ結果となり、画面は更新される。


注:
  • Selectクエリの対象となるフィールドは、レイアウトテーブルの全フィールドと、そのレイアウト上の関連フィールドに限られる。 よって、関連フィールドの値を最新に更新したい場合は、そのフィールドをレイアウト上に明示的に配置しなければなならい点に要注意。
  • 他ユーザが追加したレコードについては、[ウィンドウ内容の再表示]ステップでは表示できない。追加されたレコードをSelcectするような検索を実行すること。
参考URL
http://www.filemaker.co.jp/help/html/scripts_ref2.37.9.html


2010-11-08

Windows 2008 R2 64 ビットで 32 ビット用の ODBC ドライバを動かす

 Windows Server 2008 R2 64 ビット環境で 32 ビット版用に開発された ODBC アプリケーション(例:FileMaker Server 11) は、通常の ODBC データソースアドミニストレーターからは参照することも使用することもできません。

 32 ビット用の ODBC データソースアドミニストレーターは以下のディレクトリに配置されています。

C:\Windows\SysWOW64\odbcad32.exe

たとえば、接続先のアプリケーションが 32 bit 版にしか対応していない場合は、odbcad32.exe を使用して ODBC 接続設定を行います。

2010-11-05

『売上猫くん on MySQL』開発日記 - 番外19 - FMで大きなSQLテーブルは扱えるのか? ― その4

前回は、FM社製のドキュメント(日本語版英語版)内の一文を引用し、それを小生なり解釈すると「他のフロントエンド開発ツールに比べるとFileMakerのESSはかなり限定されていること、また一見してFileMaker単体のシステムと同じ結果を返すように見えても異なることがある。ユーザはESSの限界と特性を意識して使用すべし」となる旨のことを書いた。これに加えて、同ドキュメントにもう一つ気になる文章がある。
    ESS は、FileMaker Pro ソリューションを、FileMaker Pro のみをベースにしたソリューションの限界を超えてスケールアップできる手段として設計されたものではありません。(ESS is not designed as a means to allow a FileMaker Pro solution to scale beyond the limits of a purely FileMaker Pro based solution.)
この一文は何のことを言っているのか? この日記番外シリーズにも書いたように、FileMakerソリューションであっても、当然ながら、SQLデータベースの多くの機能---ビュー、ストアドプロシジャ、トリガ、ログ照会、バイナリ/トランザクションログからのリカバリ等----FileMaker純正データベースエンジンでは不可能だった機能の恩恵に浴せる。この場合、主語を“ESS”ではなく“FileMaker”にすれば、「FileMaker Pro のみをベースにしたソリューションの限界を超えてスケールアップできる」のである。

とするとこの文は、「FileMaker純正データベースエンジンが実用的には(“論理的”にではない)取り扱うことができない大きなテーブルをSQLデータベースのそれに置き換えても、やはり実用的には取り扱うことはできない」と言っているのだと思われる。 タイトルにある「 FMで大きなSQLテーブルは扱えるのか?」という命題への直接否定のようだ。

直接否定だとすると、FileMakerの理論上、仕様上の限界はデータベース単位で8TBであるが、実用上の“限界”はどのくらいなのだろう? 古い記事だが、「(個人的な意見だがテーブルベースで)100万を超える位なら大丈夫だよ」とある。 小社でも数十フィールドあるFileMakerテーブルに100万~200万弱のレコードを収納して数年間、運用している。 200万レコード程度をFileMakerの“限界”と仮定すると、その“限界”を超えて、と主張するには、レコード件数的には400万レコード以上をテスト時の最大数とすれば十分だろうか。ちなみに、『売上猫くん on MySQL』のテスト環境で、いまのところ一番大きなテーブルのレコード数は約180万件である。

ただレコード件数をいくら増やそうとも、ユーザが強いストレスを感じたり、安定性が無いシステムでは“実用的”とは言えない。 “実用的”と言うには、その1とその2で書いたような問題をできる限り顕在化させてはいけない。問題6の激遅ソートは回避策がないので、ユーザによるカスタムソートの実用性は非常に低い。 その他の問題については、回避策を施したり、 運用で調整する(例えば、.fp7ファイルをサーバ上に置かず、ローカルに置く)ことにより、緩和できるものと判断している。 だが結局、「FileMaker Pro のみをベースにしたソリューションの限界を超えてスケールアップでき」たかどうかというのは、公正なエンドユーザの判断に拠る、としかいいようがない。

(土屋)

注:
「~限界を超えて~」については、上記の英文をキーにググってみたが(その3の参考URLを参照)、2007年当時は否定的な見方が優勢だった。 2008年以降は関連する記事を見つけることができなかった。


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

2010-11-04

『売上猫くん on MySQL』開発日記 - 番外18 - FMで大きなSQLテーブルは扱えるのか? ― その3

FileMaker のVer9リリース時位にFM社が作成した不思議なドキュメントがある。『Introduction to External SQL Sources』(邦題:外部SQLソース入門)というタイトルが付いており、日本語版英語版がある。 読んでみると、

    ESS 機能セットは、FileMaker Pro をSQL データソースの「フロントエンド」として利用できるようにすることを意図したものではありません。 (The ESS feature set is not intended to allow FileMaker Pro to act as a “front end” to SQL data sources.)

と、衝撃の1文がある。ハァ? SQLデータベースに接続してFileMakerを使用しようとする者ならだれてもFileMakerまたはFileMakerで作成したアプリ(.fp7)がSQLデータベースのフロントエンドとなる、と思っている筈だ。 試しに「filemaker フロントエンド」をキーにググってみると、そう確信して記事を書いている人がたくさんいることがわかる。ところが、FM社の公式見解は、FileMaker(のESS)は、
「フロントエンド」として利用できるようにすることを意図したものではない、のである。 では、FM社がESSとか呼んでる機能なんなの?、ということである。 小生はフロントエンドとは、「ユーザが操作する部分=ユーザインタフェイス」位に理解していたのだが、念のためググってみると、こんな感じである。

Wikipedia
フロントエンドは、ユーザーと直接やりとりするソフトウェアシステムの部分を指し、バックエンドはフロントエンドへの出力を生成する部分を指す

IT用語辞典バイナリ
フロントエンドは、一般的に、表示やデータ入力を行うための仕組みを指し、ユーザーインターフェースUI)と同義と同義で用いられることも多い。
IT用語時点
ユーザからの操作の受付や画面表示などを担当するGUI(グラフィカルユーザインタフェース)プログラムなどがこれに当たる。

元々の小生の理解と大差は無い。であれば“ESS”はバックエンド(データベース)を操作するためのユーザインタフェイス=フロントエンドと言ってもいい筈だ。ただのユーザインタフェイスなんだから。 にもかかわらず、「FileMaker はフロントエンドじゃないんだ!」と宣言するFM社の意図はなんなのだろう?

ユーザはこの文章についてどう思っているのかと思いググってみたが、それらしき記事は日本のサイトには見当たらなかった。 海外のサイトには、上記のドキュメントに関する記事・投稿がいくつかある。

参考URL
SQL as backend? (2007年7月、V9当時?)
SQL performance: Alpha Five vs. Filemaker 9 benchmarks (2007年9月)
07.12.07FileMaker 9 SQL Link… ish(2007年9月)
beginners odbc question

特に3つめのURLは、Servoyという開発ツールと比較しながら、FileMakerの問題点を以下のように列挙している。

  1. SQLデータ変更時、その変更が他のユーザの画面に反映されない
  2. レコードレベルのロック機能がない
  3. テーブルやフィールドへの変更が自動的に反映されない
  4. ユーザが作成するSQLクエリを発行できない(SQLクエリは全てESSにお任せ)
  5. 未サポートのデータ型がある
  6. 検索が遅い
  7. ソートはさらに遅い(バックエンドでソートを行わず、一旦FMにデータをロードした後にそのデータをソートするため)
  8. データベース/テーブルをALTERできない

なんとなく解ってきた気がする。 開発者はFileMakerをフロントエンド開発ツールとして使用し始めると、他ツールと比較していろいろと不便な点があることに気がつく。 特に1.データ型、2.ユーザ独自のSQLクエリが実行不能、よって、3.検索、特にソートが非常に遅くなるというのは大問題で、簡単な回避策は無い。 ところが、多くのフロントエンド開発ツールは、何の問題もなくこれらのことを実行できる。 つまり、FM社が「フロントエンドにはなりませんよ」というのは、「他のフロントエンドツールにできることでも、FileMakerではできないことがあります。 その代り、FileMakerっぽくSQLのデータをある程度なら扱えますよ。 でも、FileMaker純正データベースとは違った結果が返ることも大いにありうるので、そこら辺、凄く注意して使ってね!」というのがかなりホントのところではないかと思われる。

(土屋)






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

2010-10-26

『売上猫くん on MySQL』開発日記 - 番外17 - FMで大きなSQLテーブルは扱えるのか? ― その2

前回の続き

問題4.検索実行時のデータの並び

郵便番号レイアウトの住所で「北海道」を検索すると、MySQL側では以下のようなクエリが走る。

SELECT ID FROM vw_zips WHERE `住所` LIKE '%北海道%'

MySQLは検索対象となったフィールドの文字コード順にデータを返し、それがそのまま表示される(ORDER BY PrimayKey は実行されない)。 この点、FileMakerのデータベースエンジンはテーブル内の並び順(作成順)にデータを返すので、この差異には注意を要す。 尚、その1で書いたように、SQLデータは一旦ロードされると取り込んだ順で保持されるので、プライマリキーにも文字コードにも関係なく、検索結果がぐちゃぐちゃに表示される可能性があることにも注意を要す。


問題5.新規レコード作成時の不審な挙動
a)検索がかかった状態で新規レコードを作成すると、レコードを確定した瞬間にその作成したレコードから新規レコード作成コマンド実行時点で選択されていたレコードに移動してしまう。レコードは作成されているのだが、ブックツールが正しく動作せず、そのままでは作成したレコードに移動できない。 これは単純にバグと思われる。 すぐに気付きそうなものだが、FileMaker社はなぜこのバグを放置したままでいるのだろう?

b)だらだらクエリ---新規レコード作成後のコミット時に、その1で書いた『だらだらクエリ』が走る(レコード数が10万位あると、顕著にだらだら加減が解る)。 我慢できずにエスケープすると、作成したレコードが消失する(FileMaker上でロールバックされる)。


以上で見た問題1~5のようにSQLデータベースの大きなテーブルを扱う際は、レコード(レイアウト)表示、レコード間移動、検索といった基本操作に問題があり、開発者はなんらかの回答を用意しなければならない。 尚、削除、更新については今のところ大きな問題は見当たらない。

問題6 ソートが著しく遅い
FileMaker 側でのソートは著しく遅く、少数のレコードが対象というのでなければ、実用的ではない。 バックエンド側のビューで ORDER BY しておくことは可能だが、解決策とは言えない。


(土屋)

2010/11/05 問題6を追記


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

2010-10-21

『売上猫くん on MySQL』開発日記 - 番外16 - FMで大きなSQLテーブルは扱えるのか? ― その1

MySQLを使用するメリットの一つは、何百万、何千万もの大量のレコードを持つ巨大なテーブルを扱えること。 ところが、そうした巨大テーブルをFileMaker アプリから操作しようとすると、大きな問題にぶつかる。(尚、下記の環境は、クライアントからFileMaker Server上のアプリファイル(NekoApp50.fp7)にアクセスしている。ローカルでNekoApp50.fp7を実行すれば、実行速度は改善される。)

問題1. だらだらクエリ
例えば、12万件のレコードを持つ郵便番号テーブルをFileMaker のレイアウト上に表示し、一番最後のレコードに移動してみる。移動すると「検索実行中...  クエリーを処理中」と数十秒またされることになる。これはMySQLのログを見てみるとわかるが、

SELECT DISTINCT ID FROM vw_zips WHERE ID>19 ORDER BY ID
SELECT DISTINCT ID FROM vw_zips WHERE ID>1019 ORDER BY ID
SELECT DISTINCT ID FROM vw_zips WHERE ID>2019 ORDER BY ID
SELECT DISTINCT ID FROM vw_zips WHERE ID>3019 ORDER BY ID
・・・
・・・ 中略
・・・
SELECT DISTINCT ID FROM vw_zips WHERE ID>119019 ORDER BY ID

といったクエリをテーブルの全レコード件数(この例では12万件)に達するまで延々と発行し続け、FileMakerにこれまた延々とロードし続ける、という仕様なのである。 実務上、これではユーザから苦情が来るのは必至。 さらに、テーブルデータが100万、1000万件に達する場合は、実用に耐えない。

尚、一度ロードしてしまえば、アプリを閉じるまで、上記の『だらだらクエリ』は実行しないようである。


問題2. 検索を実行すればするほどデータの並びがグチャグチャに?
FileMakerはクエリを実行した順にデータをロードし、一旦ロードされると再ロードは行わない。ユーザの検索実行数が増せば増すほど、レコードは作成順に並ばず、グチャグチャに並んでるように見える。

例えば、郵便番号レイアウトを開くと、FileMakerはそのレイアウトに割り当てられたテーブル(レイアウトテーブル)のレコードの1番目から数十番目までをSELECTする以下のようなクエリを実行し、レイアウト上に表示する(SELECTされるレコード数は、レイアウトの形状、ウインドウの大きさにより異なる)。 

SELECT ID,`〒`,`住所` FROM 郵便番号 WHERE ID IN (1,2,3,4, ~中略~ ,26,27)

次に、ユーザ自ら郵便番号の「9071801」(沖縄県)を検索し、次に「2010004」を検索し、その後レコードメニューから「全レコードを表示」を行うと、以下のような並びになってしまう。


郵便番号「2010004」の後に「0600012」移行が並ぶのは、上記の「全レコード表示」の直後にスクロールダウンした為、SELECT ID,`〒`,`住所` FROM 郵便番号 WHERE ID IN (28,29,~,40,41)というクエリが実行され、該当するレコードがロードされた結果だ。 

FileMaker は内部の SELECTクエリを実行した順にレコードをロードする。 再度検索を行っても、プライマリキーが同じものは再ロードされない。 ユーザが該当件数が少ない検索条件を実行すればする程、レコードは作成順には並ばないため、ユーザからみればグチャグチャに見える。


問題3. レコード総数取得クエリ
SQLテーブルをレイアウトに最初にロードすると以下のクエリが走る。

SELECT COUNT(*) FROM (SELECT DISTINCT ID FROM vw_salesdtls) COUNTER_TABLE 

この SELECT DISTINCT には時間がかかり、180万件のテーブルだとレイアウトにレコードを表示するだけで30秒程度はかかってしまう(但し、一旦レイアウトテーブルをロードすると、アプリファイルを閉じるまで、このクエリは再発行されない)。巨大なテーブルを扱う場合は、VIEWによりレコード総数を制限する必要がある。


問題3については、数百万レコード程度であれば、ユーザも我慢できるかもしれないが、1と2ついてはなんらかの対応が必要だろう。


土屋 


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

2010-10-13

『売上猫くん on MySQL』開発日記 - 番外15 - 再び権限(私的メモ)

特定のテーブルにGRANTできる権限/グローバルにしかGRANTできない権限
できる権限は以下。
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION, INDEX, and ALTER

つまり、上記以外の権限はテーブル毎に設定することはできない。

  • " The EXECUTION, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, and SUPER privileges are administrative privileges that can only be granted globally (using ON *.* syntax)."
参考URL
Re: Grant Execute on selected procedures
MySQL - How to grant FILE privilege?

Privileges Provided by MySQL 権限の詳細説明

(土屋)


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

2010-10-12

『売上猫くん on MySQL』開発日記 - 番外14 - テーブル毎に権限を設定する(ほぼ私的メモ)

MySQLにロールやグループは無い
かねがね疑問だったんだけど、権限をまとめて管理する機能(FileMakerのアクセス権限セット/グループ定義のようなもの)はMySQL本体にはないことがわかった。 コミュニティーで「他のDBにあんだから、付けてよー」って要望はあるけど、Priority は LOW なので期待薄。 Ver5.5 ではどうなんだろうか。

参考URL:
Creation of user groups http://bugs.mysql.com/bug.php?id=13131


ちなみに、MySQL Workbench には、DBA、BackupAdmin といった権限の“Role”が用意されており、これを選択することにより User に対して簡単に Role を割り当てることができる。 また、下図のように、Role そのものをユーザが定義することができる。


GRANT ~ ON scheme.* すると、 Revoke ~ ON scheme.table できない
あるデータベース内のすべてのテーブルに権限を与え、その後、そのデータベースの特定のテーブルから与えた権限を剥奪=revoke しようとしても、

Error Code: 1147 There is no such grant defined for user 'testuser' on host '%' on table 'infos'

とエラーになってしまう。


GRANTでテーブルの列記はできない
GRANT ~ on dbname.table1, dbname.table2 ~ のようなテーブルの列記はできない 。



ということで、多数のユーザ登録が必要で、且つテーブル毎/コラム毎に権限を設定する場合は、大量のGRANT文を書かなければならない。


(土屋)


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

2010-10-07

『売上猫くん on MySQL』開発日記 - 番外13 - MySQL Workbenchの憂鬱(ほぼ私的メモ)

『売上猫くん on MySQL』の開発もようやく終盤戦に突入。いままでは root 権限を主に使用して開発をすすめてきたが、リリース版のテストを行うにあたり、できるだけリスクを伴わないユーザ権限を作成し、これによりテストを行わなければならない。

そこでユーザ・権限を“お手軽に”管理・変更できる筈の、MySQL Workbench の Server Administration 機能を使うことにしたが、実はこれが全く“お手軽”ではなかったという御笑いの一席。

MySQL Workbench Ver5.2.16 OSS Beta→5.2.28 CE へアップグレード
このアップグレードを行った途端、Object Browser に mysql / information_schema が表示されなくなる。 「なんかとんでもないことやったかなぁ…?」と思いつつも、 これは以下を見つけて解決。

Information_Schema and mysql databases not shown(http://bugs.mysql.com/bug.php?id=53154)

Please, check "Show Metadata Schemata" checkbox in the Query Editor group of the SQL Editor tab in the Workbench Preferences dialog box. Use Edit > Preferences... menu item to open it. Don't forget to click "Refresh all" in the Object Browser's context menu after that.

Server Administration機能を“リモートから使用するにはSSHサーバが必要
5.2.28CEへアップグレード直後、元々Connection登録してあったリモートサーバについては、SSHサーバが無くても、Server Administration 機能を使用できた(ここが不思議なところ)。 ところが新規にConnection登録したリモートサーバについては、SSHサーバがないとServer Administration 機能は利用できない。
ちなみに、元々あったConnectionについても、“Store in Vault...”ボタンで登録してあるパスワードを消去してしまうと、それ以降はリモート接続できなくなってしまった。

FreeSSHd=SSHサーバを入れる
そんなわけで、MySQLを積んだリモートサーバにSSHサーバを入れることにする。
Windowsでフリーで利用できるなSSHを探してみると、FreeSSHd (FreeSSHd.exeのダウンロード)というのが簡単・お手軽らしい。 インストール方法はここ
インストール時の注意は、
  • 「Shell」ととももに「SFTP」も選択すること。
  • SFTPのタブの「SFTP Home Path」にmy.iniが入っているボリュームを指定する。例えば、my.iniがEドライブに入っているなら、「E:\」と指定する。
New Server Instance でエラー
さて、準備完了となり、“New Server Instance”を実行。ところが途中で下図のエラーが発生する。


Operation failed: File %ProgramFiles%\MySQL\MySQL Server 5.1\my.ini doesn't exist

というエラーが出る。 例によってググり、下記のサイトを見つける。

参考URL:
Workbench doesn't autodetect my.ini properly if %programfiles% not on C:
The second thing which was wrong, was the path to the my.ini file in MySQL Workbench. I have changed it from C:\Programme\mysql\MySQL Server 5.1\my.ini to /Programme/mysql/MySQL Server 5.1/my.ini
OS Language small problem - Server Administration
...someone pointed out that I could ignore this error and continue. This is not obvious. The error message should probably say "Warning", not "Error" and it should indicate that you can specify the exact location in a later step.

つまり上図のエラーが出たら、構わず“Next”をクリック。続くダイアログで[Change Parameters]ボックスをチェックして“Next”。 次のウインドウで「my.ini」の場所を“...”ボタンをクリックして指定する。


次に“OK”して、以下、指示に従いつつ最後までいく。
尚、ここでmy.ini を正しく指定しなくても最後まで一応たどり着くが、その場合は、“Manage Import / Export” を実行した時に、「Workbench "AttributeError:NoneType object has no attribute parametervalues」というエラーが出てしまった。 これでとりあえずは、Server Administration 機能をリモートからも使用できるようになった。

ここでは略したがその他にもエラーが出て散々。またまた2日を潰してた。Workbenchもそうだが、MySQL 関連を動かすのはやはり大変だわ。

土屋


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

2010-09-22

『売上猫くん on MySQL』開発日記 - 番外12 - トリガの制約

CREATE OR REPLACE View はストアドプロシージャでは実行可能ですが、トリガから呼び出すと以下のようなエラーが返ります。

ERROR 1422: Explicit or implicit commit is not allowed in stored function or trigger.

ネット検索してみたところ、以下の命令を含むストアドプロシージャをトリガ呼び出しすると、暗黙のコミットが起こり、肝心のストアドプロシージャが実行されないらしいです。

ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD DATA INFILE LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES

参ったな...。

参考:暗黙のコミットを引き起こすステートメント



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

2010-09-17

Officejet H470 の無線LANがおかしい

知人が「一昨日からHP Officejet H470(無線接続)で印刷できない」という。 このプリンタは本年8月に知人が購入したもので、軽量ポータブル、バッテリ可動可、無線LAN接続可能で2万弱(本体)というなかなかの優れモノ(いや、HPのプリンタは紙詰まりが多発することを除くと、なかなか良い)。
そこで復旧にトライ。先ず電源OFFができないので、電源コードを引きぬき、バッテリも外し、再度装着し、電源をいれる。 こんどはONに成功。 ところがやはりPCからは接続も印刷できない。 よくみると、プリンタのワイヤレスLANアダプタのランプが点灯していない。 これはこのアダプタが壊れたに違いない、と確信してHPに電話をかけると、「電源とバッテリとアダプタを抜いて3分待って、再度装着してください」とのこと。「そんなことやっても駄目だよ、LANアダプタの故障なんだからさぁ~」と思いつつ、渋々言われたとおりに3分待って装着、電源投入。

「ぬ、ぬ、ぬ、ぬぅ!!!」、なんと、LANアダプタのランプが青色に点灯するではないか。あっさり、印刷もできるようになった。
疑ってごめんなさい > 
 サポートの人

土屋

2010-09-15

ドメインにログインできなくなって泣かされる

 先日、64ビット版の Windows Server 2008 を Windows Server 2008 R2 にアップグレードしましたが、一見何の問題もなく成功したかのように思われたアップグレードも、イベントを見てみると結構エラーが出ていました。
 特に気になったのが、別サーバで運用している Active Directory ドメインコントローラから今回アップグレードした Windows Server 2008 R2 マシンがうまく対話しなくなってしまったので、一度 Active Directory のメンバから外して再登録をしてみたところ、ログイン不能となってしまいました。

 結論から言うと、OS のアップグレードを行うと Active Directory とクライアントマシンとのセキュアチャネルの一部に不整合が生じるため、これをリセットすると解決するようです。

良い例
 OS をアップグレードした後に、Active Directory ドメインコントローラを運用しているマシンから Active Directory ユーザーとコンピュータを開き、アップグレードを行ったコンピュータを右クリックし、サブメニューから「アカウントのリセット」を選択します。

 すると、アカウントがリセットされたコンピュータの再度起動時に認証情報の再同期が行われ、ログイン可能な状態となります(セキュアチャネルが修復されるので、認証絡みのエラーや警告がイベントログに記録されなくなる)。

悪い例(当方の失敗例)
 Active Directory ユーザーとコンピュータを開き、アップグレードを行ったコンピュータを右クリックし、サブメニューから「削除」を選択し、再度同名のコンピュータを登録すると、再起動時にセキュアチャネルが破損した状態となり、ログインできなくなります。
 よほどのことがないかぎり、コンピュータは削除しないようにしましょう。

 万が一、この手順でコンピュータを削除してしまったために、ドメインにログインできなくなってしまった場合は、下図のようにコンピュータを一度ドメインから外し(任意のワークグループに参加させるなど)てコンピュータを再起動し、再度ドメインに参加させるように構成するとセキュアチャネルが再構築されるようになります。


重要
 対象のコンピュータが証明書サーバ(証明書サービスをインストールしている)の場合、ドメイン変更やコンピュータ名の変更ができなくなるため、アカウントのリセットやコンピュータの削除を行う前に証明書サービスを一旦アンインストールする必要があります。

ドメインセキュアチャネルが破損しているかどうか調べる方法
 ドメインにログインしようとしたときに「サーバーのセキュリティ データベースにこのワークステーションの信頼関係に対するコンピュータ アカウントがありません。」というメッセージが表示されてログインできなくなっている場合には、セキュアチャネルに何らかしらの問題がある可能性があります。

 クライアントマシンのコマンドラインからセキュアチャネルのリセットを試みることで、セキュアチャネルが破損しているかどうか判断できます。

a. netdom コマンドを使ってリセット

 netdom reset /d:[ドメイン名]

例:netdom reset /d:local.jp
このコマンド実行が失敗する場合は、セキュアチャネルが確立されていない(破損している)可能性があります。

b. nltest コマンドを使ってリセット

 nltest [ローカルマシン名] /SC_Reset:[ドメイン名]

例:nltest MyMachine /SC_Reset:local.jp
このコマンド実行が失敗する場合はセキュアチャネルが確立されていない(破損している)可能性があります。