TEMTECOMAI ORTHOSTATIC HYPOTENSION

元ダメプログラマで現ダメ中間管理職の駄文

カテゴリ: DATABASE

一時期随分と悩んでいた件、sem さんからコメントにてお教えいただいたように、DB 側の remote query timeout の値を初期値の600 から無制限の 0 に変更したところ無事に完了するようになりました。
感謝です。
USE SUSDB ;
GO
EXEC sp_configure 'remote query timeout', 0 ;
GO
RECONFIGURE ;
GO

口頭で困りごと解決を相談され、微力ながら助けられる範囲で頑張ってみるか、と空いてる時間を使って牛歩の如く進めていたら、実はそれが先方の部門の今期の重要施策だったという話。<br/>
怖い話です。<br/>
<br/>
先方のメンバーたちによる進捗確認会とかに呼び出されてヘコヘコと付いて行ったら 1対4 で私の作業の進捗確認だったという話。<br/>
怖い話です。<br/>
<br/>
対面形式の部屋に入った瞬間に勘がはたらいたので先方と同じ並びに座ってやったさ<br/>
当然ながら話の流れはオレの進捗に始まって、言い訳させられて、問題点を出して。 でもいくら頑張ってもボールは全部オレ側にあるわけさ。 もう全部オレを待っている状態<br/>
てか、オレからのアウトプットがあるまで先方メンバーは完全に手が止まってるっていう苦情なのよ。<br/>
知らんわ、そんな事情。 今はじめて知ったわ。<br/>
人件費で請求させていただきますよ。

自己啓で開発中のプログラムですが、ろくな仕様書も作らないまま手書きメモだけを頼りに作っておりましたところ、土日を遊びほうけて再開してみたら記憶が飛んでいるわけです。
Visual Studio の IDE で記入するタスクってどこに保存されてるんだろうか。
SkyDrive のフォルダーにプロジェクトを保存して別の場所でも開発できるようにしてるんだけど、タスクだけが消えちゃうんだよね。

前回の続き。
データベースへの接続文字列は App.config や Web.configに書くわけですが、DB のパスに関しては DataDirectory ってキーワードが使えますわな。
たとえば
<connectionStrings>
    <add name="MyDbEntities" connectionString="Data Source=|DataDirectory|MyDB.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
とか。
これつまり、"|App_Data|" の部分は相対パスで表現した予約変数でして、Web アプリの場合はアプリのルートにある App_Data フォルダーを表し、Windows フォーム アプリの場合は実行ファイルと同じフォルダーを意味する。
ところが SQLite の .NET Framework 用ラッパーで有名な System.Data.SQLite の何が悪いのかわからんけれど、Windows フォーム アプリでは 「テーブルが見つからないよ」 みたいなエラーになるわけです。
Entity Framework で作成したモデル オブジェクトにデータを入れるところまでは問題なし。
コンテキストの SaveChanges() メソッドで DB に書き込もうとしたところでエラーが出て、そのメッセージが 「○○テーブルが見つからない」 的な。
いやいや、テーブルならホラこの通りあるじゃないか、と。
だから最初は全然気づかなかった。
英語のサイトとか調査してて何となく 「Windows フォーム アプリでは絶対パスを書かないとダメ」 みたいな情報にぶちあたったので試してみたらビンゴですわ。
使えねーぞ System.Data.SQLite !!

とりあえずその問題を置いといて開発を進めるため Connection String に実行ファイルのフォルダー パスを書きましたよ。bin\debug フォルダーのパスをね。

んで書き込みテストして、その結果を Visual Studio の中で確認してみようとしたけれどデータが反映されていないじゃないか!!

しばし考えた。
そして答えが出た。
プロジェクト フォルダー内に SQLite のデータベース ファイルがある。
このファイルはコンパイル時に bin\debug フォルダーにコピー出力される。
んで App.config 内の Connection String には C:\hogehoge\...\hogeProject\bin\debug\hoge.db って言う風にデバッグ時の実行ファイルと同じパスを記述してある。
デバッグの中で DB を更新する。これすなわち bin\debug フォルダー内のデータベース ファイルが更新される。
次に IDE のデータツールでデータベース ファイルを開いてテーブルのデータを確認してみる。これすなわち開発時に生成した接続情報を使っているのでプロジェクト フォルダーにあるオリジナルのデータベース ファイルを参照している。
更新されてなくて当たり前じゃないか

すんげー疲れたよ。
そんでオリジナル ファイルへの接続以外に debug フォルダーのデータベース ファイルを開くための接続を作ったりして混乱してきて気持ち悪くなってきたよ。

そう、結局解決策としてどうするか。
これも英語のサイトで見つけたんだけど、App.config に書かないで Connection String を動的に作成する方法。
static で適当なクラスを作り、実行ファイルのフォルダー パスとデータベース ファイルを使って作ったフルパスを System.Data.EntityClient.EntityConnectionStringBuilder なんぞに突っ込む。
さらに System.Data.SqlClient.SqlConnectionStringBuilder なんぞも使う。
そいつをコンテキストのコンストラクターで取り込む、と。
具体的なコードは面倒だから載せないよ。

もう 2月になりましたが、改めまして明けましておめでとうございます。

さっそくではございますが、Windows 7 Ultimate 64bit SP1 にて Visual Web Developer 2010 Express と SQL Server 2008 R2 Express SP1 64bit な環境でいろいろと勉強させてもらっているのでございますが、ある日をきっかけに SQL Server 関連のエラーが出てしまうようになりました。

すでに作成してある MVC 2 のアプリにて、テンプレで作成されるログイン機能を使ってアプリケーションに新規ユーザーを登録しようとするとハンドルされていない例外ってのが出てしまう。
さらに開発環境にて App_Data フォルダに [追加]-[新しい項目] で SQL Server データベースてな MDF ファイルを作ろうとすると 「ユーザーインスタンスのプロセス起動中のエラーによりSQL Serverのユーザーインスタンスを生成できませんでした。接続は閉じられます。」 みたいなエラー。
ググってみても情報が出てこなかったんですが、有力情報として

App_Dataフォルダにデータベースを作成できません
http://social.msdn.microsoft.com/Forums/ja-JP/vwdexpressja/thread/13919e51-b9f9-4ab4-8ef7-92dce872851b
App_Dataフォルダにデータベースを作成できませんの対処
http://www.moonmile.net/blog/archives/984
あたりがヒットしたわけですね。
んなもんで C:\Users\UserName\AppData\Local\Microsoft\Microsoft SQL Server Data フォルダの中にある SQLEXPRESS フォルダーごと削除してみたところ上記の不具合が出なくなりました。

しかし、、、
SQLEXPRESS フォルダーを削除した状態で、開発環境から App_Data フォルダーに新規で MDF ファイルを作成してみると、プロジェクト内では Database1.mdf と Database1_log.ldf ファイルが作られるのはいいんですが、実際のフォルダーを見てみると、
master.mdf
master.ldf
msdbdata.mdf
msdblog.ldf
tempdb.mdf
templog.ldf
などなどのほかに
error.log
error1.log
なんてのも作られてるわけですよ。
ログを見てみるとエラー 8316、5598、15466、5602、5604、22002、なんてのがゾロゾロと出てますし、アクセス拒否なんて文字もありますし、まぁそれが健康な状態なのか不健康な状態なのかもわからんのですよ。

つーことで一度 SQL Server 2008 R2 Express SP1 をアンインストールしてみようかと思っております。

まぁひょんな事から各種ログの監視をせにゃならなくなったわけです。
イベントログを分析するなら Log Parser ちう便利なツールがあるわけですが、セキュリティのイベントは流れが速いため、Windows に直接問いかけても間に合わないわけです。
てことで、Windows Server 側の設定でイベントログを外部ファイルに定期保存するように設定し、evtx ファイルを外部ツールでゴニョゴニョしようじゃないかって事になりました。
ちなみにゴニョゴニョする外部ツールってのは、Windows Server 2008 64bit か、Windows 7 64bit 上で稼働させる SQL Server 2008 でございます。

ここで重要なことがひとつ。
Windows Server 2003 や Windows XP までは、イベントログを外部保存しようとすると *.evt てファイルだったんですが、Windows Server 2008, Vista, 7 からは *.evtx ていうファイルになります。
ログを吐き出す側は新旧サーバーが混在しているので、集まってくるファイルは evt も evtx もあります。
イベントログ飛ばしをして 1つのサーバーから吐き出せば統一できるんでしょうが、今回はそこまではしません。このまま何とかします。

[evt やら evtx ファイル] → [Windows 7 上の LogParser で Windows 7 上の SQL Server にインポート] てなことがやりたい。
LogParser 2.2 は Windows 7 でもちゃんとインストールでき、稼働テストも OK でした。
ところが Windows 7 上で動かした LogParser は *.evt ファイルを読み込めないみたいなんですわ。
逆に *.evtx ファイルなら読み込める。
つーことで *.evt ファイルは *.evtx ファイルに変換しなきゃならないわけです。
これには wevtutil というツールを使います。
ここの情報によるとコマンドラインで
wevtutil epl e:\hoge.evt e:\hoge.evtx /lf:true
とかやるとのこと。
これで無事に *.evtx ファイルが生成された。

次にこの *.evtx ファイルを SQL Server にインポートする。

とりあえず SQL Server 上に適当な DB を作成する。
テーブルを作っていない状態でコマンドラインから
logparser "SELECT * INTO tabelName FROM e:\hoge.evtx" -i:evt -o:sql -driver:"SQL SERVER" -server:serverName -database:dbName -username:username -password:password -createtable:true
と打ちます。
e:\hoge.evtx ファイルをイベントログ形式で読み込み、指定したサーバーの指定した DB の、SQL 内で指定したテーブルに、指定したユーザーとパスワードでログインしてインポートします。
当然ながらこの時点でテーブルは存在しませんが、-createTabel:True とすることで自動的にテーブルを作成してくれます。

まぁ毎回これを打ち込むのは面倒でしょうから DSN を作っておくと良いかと思います。
DSN の設定で、DB へのログイン方法は Windows 統合認証にしておくと更に楽になる。ただし実際に Windows ユーザーが DB にログオンできるよう、DB 側でログオン ユーザーを作成し、Windows ユーザー アカウントやグループ アカウントをマッピングしておく必要があります。
DSN を作る際にもうひとつ重要な注意点。
64bit Windows には 64bit版と 32bit版の ODBC データ ソース アドミニストレーターがあり、管理ツールから呼び出すのは 64bit版です。
64bit版で作った DSN は logparser で使用できないので、SysWOW64 フォルダにある odbcad32.exe を使って DSN を作る必要があります。
Access の DB に接続するツールを作るときなんかも注意が必要ですね。

んでコマンドラインがこんな感じにシンプルになります。
logparser "SELECT * INTO tabelName FROM e:\hoge.evtx" -i:evt -o:sql -dsn:"LogDB"

あとは必要な evtx ファイルを読み込んで、別に作成したフロント ツールからデータを分析すれば OK って感じです。

Windows XP を再インストールする機会があり、SQL Server 2008 も入れなおしたのだけれど、SQL Server のオプションで入れた Integration サービス (サービス名: MsDtsServer100) がサービスの起動時に警告を出しているようだ。
-- イベントのプロパティ ここから --
ソース: SQLISService100
分類: Service Control
種類: 警告
イベント ID: 274
ユーザー: N/A
説明
Microsoft SSIS Service:
Registry setting specifying configuration file does not exist.
Attempting to load default config file.
-- イベントのプロパティ ここまで --

http://msdn.microsoft.com/ja-jp/library/cc627360.aspx
MSDN ライブラリの情報によると Integration Services サービスの構成ファイルの場所が書かれているレジストリー エントリーが削除されたとか、エントリーの値が削除されたとか、エントリーにアクセスできないってことらしい。
で、対策としては正しい値を書き込むか、サービスの実行アカウントがレジストリーへの読み取り権限を持っているかを確認しろ、と。
エントリーのパスは "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\100\SSIS\ServiceConfigFile" っていうキーの中。
生まれてこのかた、こんなエントリーを削除した覚えも編集した覚えもない私としてはアクセス権を疑ったわけですが、上記のキーを開いてみると "(既定)" っていう文字列のエントリーがあるけれどデータは空っぽなわけですよ。
既定のエントリー以外にきちんと名前が入ったエントリーが必要なのか、既定のエントリーに値を書き込めばいいのかわからんのですが、これは明らかにインストール時から何もされていないってことじゃないでしょうかね。
で、上記ページにはこのキーの中にどのように書けばいいのか書かれていないし、構成ファイルがどこにあるのかもわからない。
もうちょい調べたら別のページで発見しました。
MSDN ライブラリ "Integration Services サービスの構成"
http://msdn.microsoft.com/ja-jp/library/ms137789.aspx
構成ファイルは "%ProgramFiles%\Microsoft SQL Server\100\DTS\Binn\MsDtsSrvr.ini.xml" です。
自分の環境を見てみるとたしかに同じ場所に同じファイルがあります。 そんで既定の構成ファイルの例も載ってるんですが、比べてみても全く同じです。つーことで、私の構成ファイルは場所も中身も既定のままってことになります。
とりあえずレジストリーを何とかしてみようってことで "(既定)" のエントリーに構成ファイルのパスを書こうとするわけですが、なんて書いたらいいかも上記ページに書いてありました。「構成ファイルの場所の変更」 ってところに載っているとおり、"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\MsDtsSrvr.ini.xml" と入れてみる。(ちなみに MSDN のページに掲載されているパスはファイル名の前に不要なスペース文字が入っているのでそのままコピペするとエラーになりますよ)
サービスの一覧から "SQL Server Integration Services 10.0" を再起動して、イベント ビューアに警告がでていないのを確認したら解決。

Windows XP なんですが、スタートメニューの左下、最近使ったアプリケーションの一覧のところに度々 "SQL Server 構成マネージャ" が表示されるんです。
明示的に起動した覚えはないんですけどね。
同じように "Sleipnir(拡張機能を外して起動)" てのも出てくることがあるんですよね。
表示されるようになったら右クリックして [この一覧から削除] で消してます。
なんなんでしょうかね。

SQL Server 2008 が登場してしばらく経つが、Express Edition が仲間外れ状態である。
各エディションの紹介ページエディションの機能比較のページで掲載されているのは Express Edition 以外です。
Visual Studio 2008 Express Editions のページには SQL Server 2008 Express のアイコンがあるのだが、リンク先は 2005 だったり。
で、ダウンロードするには SQL Server 2008 のページ上部の [ダウンロード] をクリックしてダウンロード情報のページに移動し、ページ下部の [関連サイト] セクションにある "SQL Server 2008 ダウンロード" をクリックして別ページに飛び、そこに記述してある "SQL Server 2008 Express" か "SQL Server 2008 Express with Tools" か "SQL Server 2008 Express with Advanced Services" のリンクで実際のダウンロード ページに行く。

ムムム・・・もしかしてコレ、デスマっぽいぞ。
データの品質がこんなにもひどいとは・・・
マクロもワークシート関数も Access でのゴニョゴニョも通用せず、最後に残った手段は目視作業か・・・

dotnetlogo2昔 .NET Framework 1.1 で作成した Web サービスの動作確認をすることになったが実機を用意できないため Virtual PC で環境を構築中。
ホストは 1GB RAM で Pentium D 3GHz なマシンなため、ケチってゲストの XP SP2 に 128MB しかメモリを割り当てなかった。
おかげで動作が遅い遅い。
一晩かけて約 90件の Windows Update が終了。
今は数時間前から Visual Studio .NET 2003 をインストール中。
そのあとは SQL Server 2005 をインストール予定w (当時は SQL Server 2000 だったのだが、最近になって相手が DB もろとも 2005 に上げてしまった)
さすがに 128MB RAM はダメか?
512MB 差し出さないとダメかなぁ。
こんなんだったらホスト機を 2GB にしとけばよかった。

ともかく Visual Studio のインストールは Windows Update 以上に掛かりそうな気配。今日は帰る。

技術調査のため SQL Server 2005 Standard Edition をインストール中です。
Pentium D 3.0GHz, 1GB RAM な Windows XP SP2 の Virtual PC 2004 で、512MB RAM を確保した Windows Server 2003 R2 Standard Edition を動かし、そいつの中にインストールしてます。
IIS、.NET Framework 3.0 のインストールが終了し、18:00 ごろから SQL Server のインストールに入ったのですが、未だに完了しません。。。
ようやく最後(であると信じたい)の「ワークステーション コンポーネント、Books Online、および開発ツール」てところに差し掛かってます。
帰りたいなぁ。。。
Virtual PC のゲスト OS ってシャットダウンしなくても状態を保存して終了できるよね。 ホスト OS(Windows XP)上の DAEMON TOOLS による仮想ドライブにマウントしてある SQL Server 2005 の DVD イメージをゲスト OS である Server 2005 から使用してインストールを行ってる状態なんですが、こんな状態でも状態を保存して終了できるんでしょうか。。。
試したいけど怖くて試せない。。。

Oracle 9i をアンインストールして Oracle 10g にバージョンアップ。対象は恐らく 70台ぐらい・・・
未だに好きになれない Oracle のインストーラ。インストール済みのコンポーネントを削除してもまだゴミが各所に残ってしまう。
いかに作業者に効率よく動いてもらえるかが命題。
てなことで今日は朝からずっと Oracle 9i のインストーラと格闘。8回ぐらいインストールとアンインストールを繰り返しました。
思い出しながら書いてるので細かい名前とか適当。
  1. ODBC に追加したデータベース接続設定を削除
  2. サービス一覧を見て、もし稼働中の Oracle サービスがあれば停止。
  3. Oracle 9i Universal Installer でインストール済みコンポーネントを削除。
  4. レジストリ HKEY_CLASSES_ROOT の下に Oracle 関連のキーが残っていれば削除。
  5. レジストリ HKEY_LOCAL_MACHINE\SOFTWARE\Oracle を削除。
  6. レジストリ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services の下にある Oracle 関連のキーを削除。
  7. C:\Oracle(Oracle ホーム)を削除。C:\Program Files\Oracle を削除。削除できない場合は PC を再起動してから再チャレンジ。
  8. PC を再起動。
  9. Oracle 10g の Universal Installer を実行。
  10. Network Utility(だったっけ?)と、Database Utility(だったっけ?)と、Net Configuration Assistant(だったけ?)、ODBC 用ドライバをインストール。
  11. Network Utility のウィザードが動き出すのでキャンセルして Universal Installer を終了。
  12. Net Confiuration Assistant を起動して接続情報を作成。
  13. コントロール パネルから ODBC 設定を作成。
んな感じ。だいぶ最初のイメージよりも速くなった。

Windows Vista は SQL Server 2000 と MSDE2000 をサポートしません。
SQL Server 2000、および SQL Server 2000 Desktop Engine (MSDE 2000) に関する Windows Vista、および Windows Server “Longhorn” における サポートについて

Windows Server 2003 んときだって SP4 で何とか対応してたわけですが、Vista や Longhorn のセキュリティ モデルでは対応しないんだそうです。
やばい?
やばいですか、コレ

う〜〜〜〜ん・・・
率直に言って、やばい日が来るのは確実ですね。
あと 5年ぐらいかなぁ。
ところで Oracle 10g は Longhorn に乗るんかな。

2005年12月版のブックスオンラインが半年掛かって日本語化されました。
http://www.microsoft.com/downloads/details.aspx?FamilyID=be6a2c5d-00df-4220-b133-29c1e0b6585f&DisplayLang=ja
何ぼなんでも掛かりすぎじゃないですか?
SP1 での変化点が盛り込まれるのは更に半年後になるんでしょうか・・・

ベータ版はここでどうぞ。
http://www.microsoft.com/japan/office/preview/

バージョン上がるたびに SarePoint が前に出てきてるような気がするんだけど・・・「SharePoint サービスと密接に統合されています」とかいう説明が随所に出てきます。
個人的に気になるのは Access です。
デモ動画を見てさらに気になったんだけど、タブだってよ、タブ。う〜ん・・・さてどうすべ・・・実際に触ってみないと何とも言えないな。
さらに気になるところ。デモの中で新規 DB を作成する場面があるんですが、00:50 あたりでウィンドウの右側にファイル名が表示されてます。
拡張子が "*.accdb" って。mdb じゃないみたいですね。気になります。
フォームのレイアウトも実行時に変更できちゃうみたいな事が書いてあるし・・・
今までは「生でデータを読み書きする」ってぐらいしか使えなかった「データシート」ですが、Excel みたいなスプレッドシートの機能を持ってるみたいです。画面上部に「fx」ってボタンがあるって事は式やら関数を使えるってことでしょうか。
触ってみないとわからないですが、少なくとも accdb ファイルにおいては開発の仕方が変わるかもしれませんね。
昔ながらの mdb がどうなっているのかは不明です。
プログラミング言語もどうなったのか不明。気になります。
さっそく明日は出先の予備機で試してみようかな。

機器管理のレコードで「導入方法」が「リース」とか「レンタル」って場合は、別次元でそれらの管理をするテーブルがあるといいな。これは総務向けの機能かな。
いや、オイラだって「○月○日にコレコレのリースが終わりますよ」ってお知らせをもらった時にその中身まで確認できるようになるから便利だぞ、きっと。
そーすっと、機器レコードが先か、リース管理レコードが先かって所だ。
静的に制約とか作っちゃうとリース管理レコードが存在しないと機器管理レコードが作れなくなっちゃったりするかもしれないし・・・
どちらからも作れるようにしておかなくちゃいけないな。

PC に限らず、IT系機器(なんじゃそりゃ)の管理 DB をチョロっと考えてた。
DB はとりあえず手ごろなところで SQL Serve なんぞを。
管理される機器の種類は PC、サーバ、複合機、プリンタ、ネットワーク機材、外付け周辺機器、モバイル HDD、メモリカードなんて感じか?
今後もこの種類は増えるかと思うので、共通項目は共有し、種類に応じて変化する項目はカスタム項目のマスターテーブルに機器種類別にレコードで用意しておこう。機器種別ID, 項目名 てな感じ?
んで新しい機器を投入するときに機器テーブルの機器種別 ID でカスタム項目用のテーブルに種別に応じたいくつかの項目レコードを追加する、と。
Windows フォームでやるなら、MDI にして、コンテナのフォームは左端にパネルをくっ付けてコンボボックスとツリービューを置く。コンボボックスはツリーの表示根拠を変える役割。"機器名別" とか "部別" とか "種類別" とか。
んでツリーのノードをダブルクリックすると MDI の Child フォームが右側に表示sれていく。
この詳細フォームでは PropertyGrid コントロールを使うのもオサレさんかもしれない。
いやまて。PropertyGrid で各項目をジャンル別に見せるためには、そもそも各管理項目について、"項目名" と "項目のジャンル名" が必要なんじゃないか?
だとすると共通項目たちもカスタム項目のように、項目マスタでマスタ情報を持っておく必要があるってか?
[項目ジャンル名][項目名] てな感じか?

んで、使用管理者に関する情報ってのはどうしたらよかんべ?
せっかくだから ActiveDirectory から取りたいよなぁ。 ユーザー名は取れるだろうな。(余計な物まで取ってきちゃうのかな)
使用管理者の部署情報は?・・・使用管理者を選択すると自動で埋まるのがベストなんだよなぁ・・・つう事は ActiveDirectory のユーザーのプロパティから取得?
ユーザーのプロパティをきちんと使ってれば取れないことはないでしょ。
ただ、できれば使用管理者を選ぶ場面では「ツリーで表示されてる部署名を展開すると、その子ノードにユーザー名がある」っていう UI がほしいな。
そう考えると Notes って楽なんだな。
うちは Exchange Server とか使ってないからわからないけれど、Notes の公開アドレス帳っていろんな場面で使えるもんなぁ。
自前で「ユーザー一覧から部署のプロパティでソートしてツリーを作る」なんてのをやらにゃいかんのかなぁ・・・

Express Edition についての資料だけど、可能みたい。 http://www.microsoft.com/japan/msdn/sqlserver/express/sseoverview.asp#sseover_topic4
他のエディションでも大丈夫なんでしょかね。

ちゅーのはですね、もう少しでファイルサーバの入れ替えを計画してるんですが、Backup Exec が自身のログをためておくデータベースが従来と変わらず MSDE なのか独自形式なのかがわからんのです。
まぁ今ふっと思ったわけなので営業さんとかに聞けば解決するんだろうけどね。
最新バージョンの Backup Exec 10d もインストール時に MSDE がインストールされちゃうとなると、ここから 4年間、もしかしたらファイルサーバに何らかの必要性から SQL Server 2005 なんぞを入れることがあるとすると心配だなぁ、なんて。
今の時点では「ファイルサーバはファイルサーバ」を貫くつもりなので、仮に社内的に SQL Server 2005 を使用した何らかのシステムを動かすことがあれば別のサーバを立てるつもりだけどね。

しかし今から 4年間使うファイルサーバで使用するバックエンドのデータベースが MSDE 2000 じゃぁねぇ・・・
もしそうなら ARCServe に戻ろう・・・何だかんだ言って ARCServe にも慣れたし。

某会社では「情報公開系は Oracle」「基幹系なら DB2」なんて感じです。
オブジェクト指向の DB なんてとっつきづらいと感じてるわけですが、よく考えたら使ってる開発言語がどんどんオブジェクト指向にシフトしてきてるんで、DB もオブジェクト指向の方がマッチングしやすいのかなぁって。
いやでも Visual Studio はそれでも SQL Server や Oracle など RDBMS とのマッチングに勝負掛けてるよなぁ。DB2 の側から Visual Studio にどれぐらいラブコールしてるのかは不明。やっぱ Java なのか?

そんな玄人志向の DB2 ですが、ソースネクストから激安物件です。
http://www.sourcenext.com/products/db2/
なんと 1,980円!!
開発者用エディションなのでクライアント/サーバ機能は使えないみたい。(つーか厳密に言えば同一サーバ上でも通信してるんだろうけど)
何はともあれ Java 開発環境も持ってなきゃダメだと思うけど、入門用にはいいのかな。
なんて所に「DB2 無料版が出るかも」なんて記事まで飛び込んできましたよ。
http://japan.cnet.com/news/ent/story/0,2000047623,20091251,00.htm

dotnetlogo2http://www.microsoft.com/japan/presspass/detail.aspx?newsid=2498
12月15日に開発が終了して、順次 MSDN 会員はダウンロード可能に。一般用販売は来年の 2月から。
さらには Express Edition の無償ダウンロードは 12月から。
ムヒョヒョヒョ、楽しみだ〜!

今回出る SQL Server 2005 の前のバージョンは SQL Server 2000。てことは 5年も間が開いちゃったわけだけど、これは微妙だね。
オイラてきには SQL Server 2000 の管理機能で特に不便に思ったことはない。
開発系だと「ストアド プロシージャが書きづらい」「T-SQL の関数に不満」とかあった。まぁ Visual Studio .NET が出てからはストアド プロシージャも書きやすくなったけどさ。
しかし 5年という時間に怒っている会社もたくさんいることでしょう。
2002年ごろから Microsoft Software Assurance ってライセンス プログラムが開始された。これは通常より高いお金を払っておけば、3年の間に当該製品がバージョンアップしても無償でそれを受け取ることができるってプログラム。
その対象製品が出ないんだもんw
短期間で順調に新しいバージョン(しかも一般には有料で買いなおさなきゃいけない物)が出ること前提のライセンス プログラムなもんで、オイラにとっちゃ迷惑この上ない。
なので SQL Server が遅れてるのを見ながら内心ほくそ笑んでましたw
でもその一方で開発系のパワー不足に悩みつつw

これからバージョンアップの間隔って短くなっちゃうんでしょうかね。
SQL Server 2005 R1 とか出しちゃうんでしょうかね。
別に年度モデルとか出さなくていいよ、マイクロソフト。

グループウェアってゴロゴロしてるよね。
定番機能として "文書公開" って機能があるよね。(権限があれば)誰でも文書をグループウェアに乗っけてみんなに公開できる機能。

そこで、何らかの管理品の一覧を Excel なんかで作って公開するとしましょ。
この場合、Excel ファイルが添付されてる(グループウェアで言うところの)文書は、グループウェアの DB 側から見ると単純に 1つのレコードであって、Excel ファイルは添付されたファイルにすぎないわけです。

さぁみんなで管理品の棚卸をしましょう。
棚卸した情報は各自が Excel に反映させてください。

となった場合、(内部の仕組み的には)グループウェアの 1レコードに添付されている Excel ファイルをみんなが(一時的に)ローカルにコピーして再度アップロードするわけだから、上書合戦になっちゃう。Notes なら競合文書乱立。
ファイルサーバのフォルダに Excel ファイルを置いてみんなで更新するようにすれば、誰かが開いていれば警告を出してくれるだけマシです。
とは言え、棚卸担当者の数が増えれば Excel ファイルを同時に開く可能性も高まるので待たされる確立も時間も長くなるってもんです。
やっぱしょうがないかなぁ・・・
Excel の中で定義している列項目を使って、わざわざ Notes でカスタムな DB を作る程のものでもなかったりするしなぁ・・・
ただ一時だけ更新作業が活発になるだけで、ある時期を過ぎれば更新が収まる。
更新が活発な時期、棚卸作業を行うために Excel 形式でデータを手元に持ってきて印刷する。まぁそんな感じだよね。

なら簡単に DBMS に Excel の列項目を使った DB を作って、ASP.NET で簡単な行進用インターフェイスを作っちゃえばみんな幸せ。多分工数的にも半日ってところかな。(ActiveDirectory のセキュリティを使い、あるグループのメンバーだけがアクセスできるようにしたとしても半日で終わるよね)
リスト出力も Web から出力させなくとも、Excel から ADO で直接引っ張ってきちゃえばいいんじゃないかな。
おそらくコレぐらいのスキルがメンバー全員に備わっていると色々楽になると思う。
せっかくだからそういう知識を置き土産にしようかな。続きを読む

うーん、今手元に SQL Server の CD がない・・・
テキストファイルに書いてあったような・・・
後で調べよっと。
てか SQL-DMO を .NET で参照設定したさいのアレやコレやのリファレンスが欲しいなぁ。
というよりも、もしかしたら、COM を使用する際のリファレンスで十分なのかもしれないけど。
ここんとこ管理業務や火消し役ばかりなので勉強不足です。

オイラが開発した案件じゃないんで、中身については詳しくないが、何の変哲もない MDB ファイルがあります。Access 97 で作成され、Access 2000 と 2002 の形式にも変換され、合計 3つ。
参照設定で DAO 3.6 が使われてます。
実行時に DAO の TableDeff でテンポラリ用のテーブルを作成し、そのテーブルに対して
INSERT INTO table_A ([field_A]) SELECT [field_B] FROM table_B As m
なんて至極単純な INSERT を CurrentDb.Execute SqlString てな感じで実行します。
しかしここでエラーが出るらしい。てか目の前で出た。でもエラーの詳細は覚えてない。でもでも「不正な SQL がなんちゃら」みたいな感じだったかと。

打ちあがったエラー環境は、Windows XP Professional と Access 2003 のクリーンインストール。
正確かわからないけど、Access 2000 から 2003 にアップした環境では出ていないなんて情報も。

サンプルを借りて、周りの PC で一生懸命チェックしてみたけれど、一切再現しないわけですわ。
もうギブ。
参照設定も済。ユーザー権限や空き容量なんかも済。


でもさっき、ちょっとだけ気が付いた。
まだ解決したわけじゃないけど、エラーが出る環境と出ない環境の目に見える違いに気づいた。

もう1年ぐらい前だと思うけど、社内で PC を新規配布するのに、Office Professional 2003 を入れて配布してたのね。
んでさっそくユーザーさんから「Access の MDB を開こうとすると変なダイアログが出る」ってヘルプが掛ったわけですよ。
見てみると、2種類もダイアログが出るわけ。
片方は Excel でおなじみのダイアログ。もう一方は「危険な式をブロックなんちゃら」って感じのダイアログ。
ハハァ〜ン、Access も 2003 になってセキュリティを締めてきたな、って素直に思ったわけで、ユーザーさんにも「そういうもんだ」って伝えた。
ところが今回いろいろとチェックしてたら、Access 2003 で MDB を開くときのダイアログが 1回しか出ないんですわ。全ての Access 2003 で。
このダイアログについて調べてみると、これかい? と。
[ACC2003] Access 2003 で表示されるセキュリティ警告について
http://support.microsoft.com/default.aspx?scid=kb;ja;834420

Microsoft Jet 4.0 Service Pack 8 以降がインストールされてないと出るダイアログらしいんだよね。
するってぇと、うちの PC の Msjet40.dll のバージョンはいくつなんだい、と。
調べてみると SP8 よりも後に出た(MS04-014)バージョンが入ってるわけさ。
Jet 4.0 Service Pack を明示的に社内導入した覚えはないけれど、MS04-014 なら考えられる。
つーことで、今回の原因かどうかは未だ不明だけれど「違い」としては Jet って点が挙げられる、と。
さっき気づいたばかりのホットな情報だし、相手の dll のバージョンもまだ確認できないので何とも言えないけどね。
それに、相手の dll のバージョンがいくつなのかわからないけれど、DAO 3.6 の CurrentDb オブジェクトでは SP8 があたってないと Execute も実行できないってわけでもないしなぁ。 続きを読む

価格決定と、最終プレビュー版が提供開始されました。
価格についてはここ。
「Microsoft(R) SQL Server(TM) 2005」のライセンス体系及び価格を発表、最終プレビュー版の日本語版を提供開始
http://www.microsoft.com/japan/presspass/detail.aspx?newsid=2403


各エディションの機能についてはここ。
SQL Server 2005 エディション別機能比較表
http://www.microsoft.com/japan/sql/2005/productinfo/sql2005features.mspx


むむむむ。価格が高くなっていやしませんかね。
まぁ比較元となる SQL Server 2000 Standard だってベンダーに出してもらった見積書を見てるわけで、このままの金額で単純な比較はできないんだけどね。
でも某社に出してもらった極最近の値段だと、SQL Server 2000 One Processor OpenBusiness が \484,500也。マイクロソフトが発表した 2005 の同エディションが SelectA で \698,000、Open Business NO Level で \998,000也。NO Level てのが何なのかイマイチ理解してないんだけどね。
機能比較なんぞをしてみると、どうやら Standard Edition を使ってそれほど高度な事をやっていないのなら 1個下の Workgroup Edition でもいいんじゃないかなって。
ホラ、オイラが作るのってせいぜい部門サーバのレベルだからさ。

さて、最終プレビュー版ですが、
http://www.microsoft.com/japan/sql/2005/CTPsep.mspx
によると、MSDN 会員も一般人もダウンロードできるようで、一般人はそこのページの右側にダウンロード用のボタンから落とすようですが、今んとこエラーでダウンロードできませんねぇ。混雑しちゃってるんでしょうか。
素直に MSDN 会員用のサイトから落としなさいってか。

高い。ただし場合によっては。
プロセッサ ライセンスで、マルチコア プロセッサを使用すると高い。
他の DB が「マルチコア プロセッサ = 1プロセッサ」つまり CPU 1個で 1プロセッサ ライセンスなのに対し、Oracle は ついこの間までは「1コア = 1プロセッサ ライセンス」だった。
今もこの考え方は変わっていない。
この間までは
「1つのコアは1つの完全なプロセッサである。したがって 2つのコアを持つプロセッサは 2つの CPU である」
という考えだったが、現在は
「複数のコアを持つプロセッサの 1つあたりのコアはシングルコア プロセッサの 75% の能力を持つプロセッサだとみなす」
というようにしたようだ。

じゃぁいったいいくつのライセンスを購入すればよいのか。
6つのコアを持つプロセッサの場合、コアの数である 6 に 0.75 を掛けた 4.5 の小数点以下を切り上げた 5 がプロセッサ ライセンスの必要数になるらしい。

ちょっと待った。
2つのコア(っていうプロセッサがあるのかわからんが)の場合、2 に 0.75 を掛けると 1.5 なので、切り上げると 2 じゃんか。
結局 2 かよ。

まぁよっぽどのことがない限り、Oracle を薦めずに SQL Server を薦めちゃうわけだけどね。
だって年間サポートとか高いんだもん。

困ったことに、お客さんの中には妙な Oracle 神話を信じている方がいたりする。
既存システムとの連携なしの新規開発案件なのに 「DB は Oracle で」
と指名されたんで、てっきり別のシステムで Oracle を導入してるんでライセンス管理やサポート契約を簡単にしたいから Oracle を指名したんだと思うじゃないですか。
んで一応そこら辺のところを聞いてみると

「業務連携してる別の会社の担当者さんが Oracle は良い!! って言ってたんだよね」

・・・・・・

よくある話ですね。
んで先に書いたようにライセンスの話をするとビビるわけですわw続きを読む

まだ出ないのかなぁ。楽しみだなぁ。
フルテキスト検索が同一 PC 上に複数インストールされた SQL Server の各インスタンスごとに独立してインデックスを持てるようになった、と。
http://www.microsoft.com/japan/msdn/sqlserver/sql2005/sql2005ftsearch.asp

.NET Framework 2.0 の CLR を取り入れたため、アレやコレなんかを Visual Basic .NET や C# なんかで書けるわけでございます。
ちうことは複雑なロジックの関数なんかを比較的楽に書けるかもしれないわけでございます。
とは言え、本家 T-SQL もだいぶ機能アップされてます。一番の目玉は「再帰クエリ」でございます。何らかの形で組織図的なデータを管理する場合に、あるレコードの親系図をトップまで引っ張れるとかに期待

hcl1ツインリンク茂木、Honda Collection Hall のライブラリ バージョンアップ完了。
明日の朝から稼働開始です。

【メモ】
MSDN Japan の記事 他
http://www.microsoft.com/japan/msdn/sqlserver/sql2000/sqlbackend.asp
http://www.microsoft.com/japan/business/offerings/lob/scenario/default.mspx
記事の内容の重要性というのは非常によくわかる。SQL Serve や MSDE 未経験の Access 開発者としてみればとても貴重な記事。
しかも次期 SQL Serve 2005 に対する MSDE 的な役割を持つ SQL Server 2005 Express Edition と次期 Access の距離は更に縮まるだろうし、次期 Access と .NET Framework の距離も縮まるかもしれない。
だがしかし。
なんで記事で取り上げ散る Access のバージョンが 2002 なのか、と。

MSDE 2000 って Windows Me と Windows 98 でも稼動するんだ。
SQL Server 2000 ファミリーは Developer Edition あたりがようやく Windows NT Workstation 4.0 でも入れられるわけだけど、そうか、9x でも入るもんがあったんだ。
ちゅーても管理ツールがないんで開発はちとつらいな。しないけど。9x 持ってないし。

米国 MSDN の記事でございます。
http://msdn.microsoft.com/sql/default.aspx?pull=/library/en-us/dnsqlpro04/html/sp04l9.asp

いくつかのルールが書いてあります。
例文が芸術的w

そんな中、気になるツールへのリンク発見。
Best Practices Analyzer Tool for Microsoft SQL Server 2000 1.0

どうやら SQL Server の環境やらを解析してくれて、最適なシステム環境例や推奨例を教えてくれるツールらしく、しかも SQL Server 2005 へのアップグレードを考慮したチェック機能も含まれているらしいです。
開発したのは SQL Server の開発チームだそうで。

MSDN TV(英語版)でも紹介されてます。
http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20040610sqlserverck/manifest.xml続きを読む

ちょいメモ

ALTER Procedure stdHoge
(
 @KW datetime,
)
AS
SELECT dbo.tblテスト.f日付
FROM dbo.tblテスト
WHERE dbo.tblテスト.f日付 = isnull(@KW, dbo.tblテスト.f日付)

RETURN


サンプル業務をモデリングする工程を通じてデータモデリングの手法について学べる本。
読みやすい。
前半は基礎知識で、後半は仮想の書店を題材にした実践編。
論理モデルから物理モデルまでで終わらず、その後のケアに関しても記述してある。
もっともっと勉強して経験しなきゃ、だな。

↑このページのトップヘ