商品: TEdit.NET
開発: DVXP
価格: $249-(サーバー), $1,199 (無制限サーバー)
ASP.NET用のとっても便利な DataGrid コントロールです。
マスターテーブルの編集画面は、ページ上にこれを配置して、定義ファイルをいくつか作成すれば、完成です。
マスター/詳細タイプの画面も作ることができます。
英語版のソフトですが、ボタンやメッセージなどを日本語にすることもできます。

■購入 (DVXP Online Store)

msSQLed

.NET ベースのSQL Serverクエリーアナライザです
おもしろそうなので、評価して、blogs.sqlpassj のほうに書きたいと思います。

だれか、VERITAS Indepth for SQL Server を評価していただけないかな
アメリカのサイトからダウンロードできます。英語版とありますが、ちゃんと日本語でどうさします。
Indepth の情報は、日本の VERITAS サイトにいくつかあります。

家庭内留学のススメ―園児・小学生とお母さんのための 短いフレーズで英語が話せる

4月に行われる MVP Global Summit に向けて、英語を勉強する場合にと unimaru さんが推薦していただいた本です。
あと、一ヶ月、そろそろマジメに練習しておかないといけない
と、今回 PASSJ Conference 2004, MVP OpenDay をすごして思いました。
いいたいとこの 1/100 も言えなかったし、聞けなかった。

本だけでは、たぶん勉強しないと思いますので、実際に会話できる場を調べたいと思います。

02/25/2004 9:36 AM

英語で聞くことは苦痛ではなくなってきたんですが、何せ話せない。
だもんで、アマゾンに発注しちゃいました。
あと電子装備も発注しようかと考えています。
いや、世の中やっぱ英語だよね。。。

|ogawaAT NOSPAMhorae dot dti dot ne dot jp

03/05/2004 5:24 PM

最近は、週刊「モーニング」に連載されている「ドラゴン桜」の英語編を楽しく読ませてもらっています。見方によっては日本人は非英語圏でもっとも英語の能力がある国民とのことです。
ただし、「完璧をもとめがち」「ネガティブな発想」の国民性から、話せない、、、と考えているとのこと、、、だそうです。

えすぬま

プログラム言語「Xen」
GrazBlog に記事がありました。
The Xen of Programming

さらに、次の記事に詳細があります。
Microsoft Expands .NET with Xen
Xen とは、マイクロソフトリサーチで開発中のプログラム言語で、C# に XML と SQL を直接扱える機能を追加したようです。
たとえば、クラス定義の中で、XML Schema のように定義できたり、配列へのアクセスで、SELECT の WHERE 句のような表現ができるようです。
マイクロソフトリサーチって、たのし。

講師が語る PASSJ Conference (PASSJ)

2004/2/20(金) 東京コンファレンスセンター品川でPASSJ Conference 2004を開催します。
私もセキュリティについてセッションを予定しています。
そこで、このセッションで聞いていただきたいことをすこし、まとめて紹介してみました。
※なお、参加受付は、終了しています。

他にも、堀川さんと、小川貢さんが、セッションの概要を語っています。 もう、あっという間ですね。きっと。

blogs.sqlpassj.org

SQL Server を利用されている方々にむけたブログサービスを開始しました。
現在は、試験運用中です。
.TEXT を利用して設置しています。

目的と概要は、次のところにまとめました。

blogs.sqlpassj.org の概要
ただいま、試験運用に参加して、ブログを書いていただける方を募集中です。

PASSJ通信2004年2月号 DBMagazine 2004 Feb P.110-111 今回とりあげたのは、次のようになります。
  • PASSJ サイトのDBA向け機能
  • ハードウェアの性能にあったパフォーマンスが出ない
  • VBScript,ASPからADOを利用する場合の定数宣言
  • マイクロソフト SQL Server 担当副社長ゴードン・マンジョウネさんとのラウンドテーブル
  • PASSJ 秋の合宿セミナー
  • PASSJ会員による受験体験記「MCA完全制覇」連載開始
  • PASSJ事務局による「2003 PASS Summitレポート」掲載
今年も、PASSJ をとうしてたくさんの方々と SQL Server を語り合えたなぁと、しみじみ思います。

さっそくですが、新年会を企画します。

2004/1/16(金) 7:00pm 月桃
PASSJ セキュリティセミナー in OSAKA の後、開催したいと思います。

2003/12/17 月桃にて、忘年会をしました。
NT-Committee2, INETA, .NETフォーラム, MSMVP などつごう 16名でたのしい時間をすごしました。
さて、次は、新年会の企画ですね。

SQL Server マガジン Vol.12

今回は、ヒロシ君がセキュリティの設定ミスをしてしまったというお話

ポイントは、次のようになります。
  • 克明な変更記録が必須
  • 設定ミス ? 不正アクセス ?
  • 変更の前の準備
  • 変更テスト用サーバーの準備
  • バックアップがだいじ
  • セキュリティ設定テスト
キーワードは、次のとおり
  • ストアドプロシージャでロールをチェック
  • 所有権の継承と sp_executesql
  • 特定のコンピュータからのみ接続を許可する
運用サーバー上での設定変更手順ができていないと、明日はわが身。

PASSJ Conference 2004
いよいよ、SQL Server ユーザーグループ「PASSJ」の年間最大イベント、Conference の参加登録が開始になりました。
日時: 2004/2/20(金)
場所: 東京カンファレンスセンター
費用: 無料

今回は、次期 SQL Server、開発コード「Yukon」についての詳細なセッションや、待望のツール「Reporting Services」などを中心に、準備しています。
ぜひぜひ、たくさんの方とお会いできるのを楽しみにしています。

12/18/2003 9:3 PM

 申し込みを今さっき済ませました。
楽しみにしています・・・・。セッションは、多分 Yukon を聞きに行くことになると思う。

PASSJ PASSJ セキュリティセミナー OSAKA

日時: 2004/1/16(金)
会場: 大阪ビジネスセンター
定員: 80名
会費: 無料

セッション:
1.「管理コストを削減するセキュリティ対策入門」(福原 聡さん)
2.「トラブルに負けない社内LAN」(濱本 常義さん)
3.「事例から学ぶ SQL Server セキュリティ」(河端 善博)

ひさしぶりの大阪でのセミナーです。よろしければ、ご参加いただければと思います。

NETDCで、ほんとにたくさんの刺激をうけました。
まとめていきたいのですが、あまりに書きたいことが多くて.

ですので、もっとも試してみたいことだけ、箇条書きします
  • Yukon UDT の Disposeタイミングは ?
  • Yukon UDT を SETすると、それは、Clone ? Serialize/Deserialize ?
  • Yukon UDT と XML の関係
  • Yukon UDT のデータベース上のイメージ
  • Yukon UDT のフィールドのインデックス化
  • Yukon XQuery のパラメータ化
  • WinFS の XSD スキーマの動作
  • WinFS の JPEG の扱い
そのほかにも、いろいろ、いろいろ。

12/15/2003 2:16 AM

ちなみに.NETのAppDomainの境界って何処になるんでしょ>Yukon CLR
ちょっとAppDomainネタで遊んでて気になってみました。

#インストール先にするマシンの調達が思うように進みません…

菊池

12/16/2003 9:50 AM

課題ですね。とりあえず、UDT の面白さがわかった
ところでとまっています。

河端善博

PASSJ PASSJ セキュリティセミナーOSAKA 2004/1/16(金)

ようやく SQL Server セキュリティセミナーを大阪で開催します。
講師は、「システム管理ってそういうことだったのか」「セキュリティ管理ってそういうことだったのか」の著者の福原聡さん、セキュリティ分野で活躍されている濱本常義さんと、私です。
現場でのセキュリティ運用、さまざまな組織でのセキュリティ対策の状況やツール、そして、SQL Server でのセキュリティの失敗と、対策などを紹介させていただく予定です。

NWiki

中西さんが、YukiWiki を元に C# と SQL Server で動作するWikiを開発し、公開しています。
これは、たのしそう。
時間ができたら、ダウンロードして設置してみたいですね。
INETA Japan のサイトを NWiki & BlogX にしてもいいかも。

松本美穂さんが、いつもの丁寧でわかりやすい語り口で、ADO.NETを
歴史から DataSet, SqlDataReader まで、わかりやすく解説しています。

本文は読んでいただくとして、ひとつ気にかかったことが。
Close/Disposeが適切にコーディングされていません
SqlConnection/SqlCommand/SqlDataReader ともエラー時の扱いも含めた
Close/Dispose処理が十分には行われていませんでした。
初心者が参考にする書籍の中でも、Disposeをもれなく記述しておいたほうがいいと
思われます。

11/22/2003 12:27 PM

ご指摘ありがとうございます。松本美穂です。

> エラー時の扱いも含めた
> 初心者が参考にする書籍の中でも、~
>
これは、ASP.NETの連載記事を書いているときからの悩みの種でした。
結局、私の結論としては「エラー処理を記述しない方が初心者にとってわかりやすい」と考え、エラー処理については連載の最後の方で別途解説する予定でした。しかし、連載を長く続けたいという私の希望はかなわず、中途半端な形での連載終了となりました。今回の特集記事は、それを少しでも補う形としてでしたが、やはりページ数の関係からエラー処理までは触れることができませんでした。連載を通して、また特集記事でも伝えたいことを半分も書けておりませんので、突っ込みどころが満載になっております。読者の方には本当に申し訳ないと思っております。
また、河端さんのご指摘の通り、エラー時のdisposeの扱いはとても重要だと考えておりますので、無理にでも入れておけばよかったと後悔しております。今後、単発記事を書く機会がある場合は、エラー時の扱いもきちんと解説していきたいと考えております。
お忙しい中、ご指摘ありがとうございました。

松本美穂

11/23/2003 10:50 AM

記事の中で完全性の高いサンプルを紹介するのは難しいですね
自戒も含めて、最低限の規約をつくっていければと思います。
たとえば、マイクロソフトは、サンプルプログラムの中からもセキュリティホールを排除する方針とのことです。
.NET, T-SQL でも、最低限のコーディング規約を育てて共有してったほうがよさそうですね。

また、今回、コメントさせていただいたもうひとつの狙いは、
雑誌のインデックスの一覧を、インターネット上で共有したいという点です。どのように実現するかは、まだ検討中ですが。

河端善博

PASSJ通信2004年1月号
DBMagazine 2004 Jan P.102-103

今回とりあげたのは、次のようになります。
  • PASSJ でのSQLServer初心者向けコンテンツ
  • T-SQLでのビット演算
  • 列名を変数として扱う
  • sp_executesqlで戻り値を得る
  • サポート情報を活用する
  • ロールに割り当てられた権限を確認する
  • 10/25 DBAセミナー報告
  • MCDBA取得者インタビュー 李さん
  • セキュリティのキ・ホ・ン最終回
さて、次はなにをとりあげましょう

sp_executesql (Transact-SQL リファレンス)

sp_executesql の戻り値は、次のようにして得ることができます。
declare @r int exec @r = sp_executesql N'select count(*) from [authors]' select @r as [結果]

変数 @r に戻り値が得られます。
ここで注意があります。
解説によると、「成功した場合は 0 を、失敗した場合は 1」とありますが
実際には、このようになりません
成功した場合には、0 になりますが、失敗した場合には、エラー番号が
戻ります。つまり、@@ERROR と同じ値となります。
declare @r int, @e int exec @r = sp_executesql N'select count(*) from [XXX]' set @e = @@error select @r as [結果], @e as [エラー]
[結果] と [エラー] が同じ値になっていることが確認できます。

以上より、sp_executesql の実行が成功したかどうかを判断する場合、
次のコードでいいと思います。
exec @r = sp_executesql N'select count(*) from [authors]' IF @@error <> 0   -- エラー処理   RETURN

コネクションプール対策のための Dispose/using 処理

eXconn のシステムでコネクションプーリングを
有効にすると、コネクションがどんどん消費され、
最終的に不足してエラーになるという問題がありました。
原因を調査したところ、SqlConnection, SqlCommand, SqlDataReader の
Dispose 処理が適切に行われていないことが原因であると判明しました。

今回、調査にあたって、次のポイントをしらべました。
  • パフォーマンスモニタでのConnectionPoolに関するカウンタ
  • .NET での ConnectionPool の処理方法
  • IIS 6のアプリケーションプールとワーカープロセスの動作
  • SqlClient に属するオブジェクトの Dispose 実装
  • プロファイラでの eXconn 動作確認

今回の調査よりプログラム上の注意として、次のルールが必要であると思います。
  1. Disposeが必要なクラスは、かならず Disposeする
  2. C# でのDispose処理は、using を利用する
  3. SqlConnection, SqlDataReader などの Closeは、明記せず using で対応
  4. コネクションプールサイズを小さな値に設定して、テストする
  5. SqlClientを利用する処理は、限定する。

11/14/2003 2:56 PM

SqlConnectionのStateでAssertするのもデバッグの段階では良い方法です。

System.Diagnostics.Debug.Assert( sqlConnection.State ==
ConnectionState.Closed )

 SqlDataReaderではIsClosedプロパティが使えますが、実際問題としてSqlDataReaderのスコープが関数ローカルでない事はありえず、関数のローカルスコープでチェックを書く人がCloseを忘れるとも思えませんし…

 DisposeされずにFinalizeが動いたらイベントログとかに出して欲しいとも思う今日この頃です。(あ、これできるかも…)

菊池

11/14/2003 7:8 PM

Dispose が必要なクラスを using せずに new したら、VS.NETが警告をだしてくれればと思いました。
正規表現で、^(:Es\t)*SqlConnection として検索したら、たいてい引っかかりそう。

河端善博

11/19/2003 10:45 AM

正直、usingステートメントにcatchがあればな~と思う。
try {
using(...) {
...
}
catch(...) {
}
てのはなんか気になるんですよね。。。

うに。

11/19/2003 5:7 PM

using / catch が必要な場合は、try/catch/finally でよさそうですね。

河端善博

11/20/2003 3:44 PM

つか、using って try/finally そのものだったりします。
http://www.divakk.co.jp/aoyagi/csharp_tips_using.html
けど、私は必ず using を使うようにしてます(try/catch が必要なときは using と try/catch を両方書く)。using の変わりに try/catch/finally にして、finally を書き忘れたら意味無いので(^^;

|aoyagiAT NOSPAMosk dot 3web dot ne dot jp

System.Data.SqlClient名前空間

SqlClient のクラスの中で、Disposeがどのように対応しているのかを確認しました

クラスDispose
SqlClientPermission×
SqlClientPermissionAttribute×
SqlCommand
SqlCommandBuilder
SqlConnection
SqlDataAdapter
SqlDataReader
SqlError×
SqlErrorCollection×
SqlException×
SqlInfoMessageEventArgs×
SqlParameter×
SqlParameterCollection×
SqlRowUpdatedEventArgs×
SqlRowUpdatingEventArgs×
SqlTransaction

※ヘルプでは、SqlDataReader にDispose がありませんが、IDisposeインターフェースを実装していますので、Disposeすることができます。
利用時には、using を使って適切なタイミングで Dispose する必要があります。
例:
try
{
  using (SqlConnection c = new SqlConnection("..."))
  {
    using (SqlCommand m = new SqlCommand())
    {
       ...
    }
  }
}
catch (SqlException exp)
{
  ...
}
※using は、using (..., ...) と複数のならべて書くこともできます。

11/12/2003 10:39 PM

try
{
using (SqlConnection c = new SqlConnection("..."),
SqlCommand m = new SqlCommand())
{

}
}
catch( SqlException excep )
{
}

 using にはカンマ区切りで複数の宣言を入れられます。
 のでネストはそれほど深くなくて済みますね。

 catch で Exception とするのは良くないでしょう。
(無関係の例外がつかまった場合にどうすれば良いか困った事になります。)

 特に、ArgumentNullExceptionとかを間違えてつかんでしまうとデバッグの効率が落ちますです。

菊池

11/12/2003 10:41 PM

あ、肝心な事を書き忘れた。

 SqlDataReaderもIDisposableです。

菊池

11/12/2003 11:11 PM

菊地さん、ありがとうございます。更新しました。
SqlDataReader は、ヘルプには Dispose がありませんね。ヘルプのミスと思います。

河端善博

11/13/2003 12:5 AM

えと、クラスの概要の所では記述されてますね。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemDataSqlClientSqlDataReaderClassTopic.asp
--
public sealed class SqlDataReader : MarshalByRefObject,
IEnumerable, IDataReader, IDisposable, IDataRecord
--

 Closeメソッドが付いているのでインターフェースの明示実装によってDisposeが実装されているのだと思いますが、インターフェースの明示実装の欄にも無いですね。
#ILDASMしてみるとhidebysigなので明示実装ですね。

 SqlDataReaderがCloseされるまでConnectionがロックされてしまうので、SqlDataReaderの後始末忘れが一番被害が大きいとも言えますね。

菊池

@Seattle

いまシアトルで開催されている PASS Conference の様子を現地で取材している江青さんがブログにまとめています。
Yukon 情報がどんどんでているようですね。
ただし現地での個別にNDAを結んでいるようですが

江青さん、英語たいへんだろうけど、がんばってね。
たくさん友だちをつくってきてくれるとうれしいな

11/12/2003 1:53 PM

河端さん
海外に行くと俄然人見知りになるのですが、ここは仕事と割り切って、早速、河端さんの教えを実行しました。
周りに、電器屋がなかったので、ビデオデッキを買えなかったので、手書きですがカレンさんとキンバリーさんのPASSJへのメッセージをゲットしました!私のblogにとりあえず、アップして、後でPASSJサイトにまとめて上げますね。

二人ともとっても日本のことを良く覚えていてくれてうれしかったです。また、バージョンに関わらない基本をじっくり学んだ感じの一日で充実しました。

ということで。

11/12/2003 9:3 PM

まずは、シアトルの街を楽しんでくださいね。
カレンさん、キンバリーさん、ますます活躍されていますね。できればジム・グレイさんにも会ってきてほしいな

河端善博

PASSJ 合宿セミナー で、以下の点について、検証してみたいと思いました。

統計情報を管理するツール
統計情報を手軽に表示、登録、削除、更新できるツールの開発
統計情報がまちがっている場合に遅いプランが作成される場合の作成
統計情報がまちがっていると、数分で終わる処理が、数時間かかるパターンも
あるようです。
そのようなパターンを作成してみたいと思います。
合宿でテンションをあげすぎたせいか、日曜日、月曜日は事実上休眠していました。
そういえば、日曜日、小板さんに練馬まで送っていただいた後、池袋にいって映画を
見ていました。リーグ オブ レジェンド。各俳優の方の演技がどれも、私の好みに合っていました

TcpConMon.zip

TCP ポートを監視し、特定のポートへの接続/切断を出力するプログラムです。
.NET Framework 1.1 が必要です
設定は、TcpConMonConfig.xml を直接編集する必要があります
設定方法は、また次回..
イベントを SQL Server へ出力することもできます。

IPHelper API のラッパーは、Axel Charpentier さんのGetting active TCP/UDP connections on a boxからお借りしました

DBCC権限の割り当て状況の確認方法と、設定値をまとめました。

固定サーバーロールに割り当てられた権限一覧
sp_srvrolepermission
固定データベースロールに割り当てられた権限一覧
sp_dbfixedrolepermission
このコマンドを用いて、DBCC の割り当て状況を確認しました。
環境: SQL Server 2000 SP3a Build 8.00.818
※テストクエリーを添付しています

固定サーバーロールDBCC権限
ServerRolePermission
serveradmindbcc freeproccache
sysadmindbcc change 'on' rules
dbcc checkalloc
dbcc checkdb
dbcc checkfilegroup
dbcc checkident
dbcc checktable
dbcc cleantable
dbcc dbreindex
dbcc dropcleanbuffers
dbcc freeproccache
dbcc inputbuffer
dbcc outputbuffer
dbcc pintable
dbcc proccache
dbcc setcpuweight
dbcc setioweight
dbcc show_statistics
dbcc showcontig
dbcc showoptweights
DBCC ShrinkDatabase
dbcc shrinkfile
dbcc traceon/off
dbcc updateusage
固定データベースロールDBCC権限
DbFixedRolePermission
db_ddladmindbcc cleantable
dbcc show_statistics
dbcc showcontig
db_ownerdbcc checkalloc
dbcc checkdb
dbcc checkfilegroup
dbcc checkident
dbcc checktable
dbcc cleantable
dbcc dbreindex
dbcc proccache
dbcc show_statistics
dbcc showcontig
dbcc shrinkdatabase
dbcc shrinkfile
dbcc updateusage

これを見ると、dbcc sqlperf(logspace) は、どこにも割り当てられて
いませんね。

DBCC コマンドのほとんどは、管理者のみに実行が許可されています。
ところが、一部のコマンドは、public から利用できてしまいます。

例:DBCC SQLPERF(logspace)

そこで、次の点について確認しようと思います。
  • DBCC の各機能について、権限を設定する方法はあるか ?
  • DBCC の各機能に割り当てられている権限を表示する機能はあるか ?
microsoft.public.sqlserver.securityと、pml-security にて質問をあげています。

Michael Shao [MSFT] は、権限設定はできないと思うとのことでした

WANSync SQL

LAN, WAN 対応のサーバー間同期ソフトらしい。
SQL Server, Oracle, Exchange, Server の同期が行われるとのこと。
フリーのダウンロードがあるので、一度、試してみたいですね

SQL Server 2000 の COLLATEは、明らかに間違った比較をしています。
問題を明らかにするクエリーを作成してみました。

TEST 1.1: 0x30a2, 0x32d0
PRINT 'TEST 1.1: ' + NCHAR(0x30a2) + ' = ' + NCHAR(0x32d0) + ' COLLATE Japanese_CI_AI'
IF NCHAR(0x30a2) = NCHAR(0x32d0) COLLATE Japanese_CI_AI
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x30a2) + ' with circle is ' + NCHAR(0x32d0)
  
--- TEST 1.2: 0x30a2, 0x32f3
PRINT 'TEST 1.2: ' + NCHAR(0x30a2) + ' != ' + NCHAR(0x32f3) + ' COLLATE Japanese_CI_AI'
IF NCHAR(0x30a2) != NCHAR(0x32f3) COLLATE Japanese_CI_AI
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !!' + NCHAR(0x32f3) + ' is ' + NCHAR(0x30e4) + ' with circle'

--- TEST 2.1: ', 0xff07
PRINT 'TEST 2.1: ' + '''' + ' != ' + NCHAR(0xff07) + ' COLLATE Japanese_CI_AS'
IF '''' = NCHAR(0xff07) COLLATE Japanese_CI_AS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !!'

--- TEST 2.2: ', 0x2019
PRINT 'TEST 2.2: ' + '''' + ' != ' + NCHAR(0x2019) + ' COLLATE Japanese_CI_AS'
IF '''' = NCHAR(0x2019) COLLATE Japanese_CI_AS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x2019) + ' is single-quote wide version in japan'

--- TEST 3.1: a, 0x24d0
PRINT 'TEST 3.1: ' + 'a' + ' != ' + NCHAR(0x24d0) + ' COLLATE Japanese_CI_AI_WS'
IF 'a' != NCHAR(0x24d0) COLLATE Japanese_CI_AI_WS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x24d0) + ' is wide'

--- TEST 3.2: a, 0x249a
PRINT 'TEST 3.2: ' + 'a' + ' != ' + NCHAR(0x249c) + ' COLLATE Japanese_CI_AI_WS'
IF 'a' != NCHAR(0x249c) COLLATE Japanese_CI_AI_WS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x249c) + ' is wide'

--- TEST 3.3: a, 0x24b6
PRINT 'TEST 1.2: ' + 'a' + ' != ' + NCHAR(0x24b6) + ' COLLATE Japanese_CI_AI_WS'
IF 'a' != NCHAR(0x24b6) COLLATE Japanese_CI_AI_WS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x24b6) + ' is wide'

--- TEST 4.1: 1, 0x2460
PRINT 'TEST 4.1: ' + '1' + ' != ' + NCHAR(0x2460) + ' COLLATE Japanese_CS_AI_WS'
IF '1' != NCHAR(0x2460) COLLATE Japanese_CS_AI_WS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x2460) + ' is wide'

--- TEST 4.2: 1, 0x2474
PRINT 'TEST 4.2: ' + '1' + ' != ' + NCHAR(0x2474) + ' COLLATE Japanese_CS_AI_WS'
IF '1' != NCHAR(0x2474) COLLATE Japanese_CS_AI_WS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x2474) + ' is wide'

--- TEST 4.3: 1, 0x2488
PRINT 'TEST 4.3: ' + '1' + ' != ' + NCHAR(0x2488) + ' COLLATE Japanese_CS_AI_WS'
IF '1' != NCHAR(0x2488) COLLATE Japanese_CS_AI_WS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x2488) + ' is wide'

--- TEST 5.1: 0x30fc, 0x3005
PRINT 'TEST 5.1: ' + NCHAR(0x30fc) + ' != ' + NCHAR(0x3005) + ' COLLATE Japanese_CI_AS'
IF NCHAR(0x30fc) != NCHAR(0x3005) COLLATE Japanese_CI_AS
  PRINT '  GOOD !'
ELSE
  PRINT '  STRANGE !! ' + NCHAR(0x30fc) + ' dont same ' + NCHAR(0x3005)

データベースのオブジェクトに日本語を扱う場合の問題について、まとめてみました。

1. オブジェクト名の照合順序は、Japanese_CI_AS
SQL Server 2000 の場合、オブジェクト名の照合順序は、
そのオブジェクトがあるデータベースの照合順序になります。
日本語版 SQL Server 2000 の場合、通常は Japanese_CI_AS です。
 
Japanese_CI_AS は、
 CI : 大文字小文字は区別しない
 AS : アクセントは区別する
 カタカナ、ひらがなは区別しない (KSが指定されていません)
 全角半角は、区別しない(WS が指定されていません)

となります。

参考:「照合順序の指定」

したがって、次のクエリーは、二行目でエラーとなります。

クエリー(ひらがな、カタカナ): 
CREATE TABLE [#てーぶる] ([名前] INT) -- ひらがな
CREATE TABLE [#テーブル] ([名前] INT) -- カタカナ

エラー:
サーバー : メッセージ 2714、レベル 16、状態 1、行 2
データベースにオブジェクト名 '#テーブル' が既に存在します。

次のクエリーもエラーになります。

クエリー(半角、全角):
CREATE TABLE [#TABLE] ([なまえ] INT) -- 半角
CREATE TABLE [#TABLE] ([なまえ] INT) -- 全角

エラー:
サーバー : メッセージ 2714、レベル 16、状態 1、行 2
データベースにオブジェクト名 '#TABLE' が既に存在します。
2. Japanese_CI_AS の仕様に注意
Japanese_CI_AS という照合順序が、なにと、なにを区別しているか
本当に具体的に理解されていますでしょうか ?

たとえば、先に問題となった長音「ー」 NCHAR(0x30fc) と同じとみなされる文字は、
何文字あるか、イメージできていますでしょうか ?

クエリー(長音)
CREATE TABLE [#テーブル] ([なまえ] INT) -- 長音
CREATE TABLE [#テーブル] ([なまえ] INT) -- 々

エラー:
サーバー : メッセージ 2714、レベル 16、状態 6、行 1
データベースにオブジェクト名 '#テーブルー' が既に存在します。

なんとJapanes_CI_AS では、長音「ー」 NCHAR(0x30fc)と、「々」 NCHAR(0x3005) が
同じ文字とみなされます。
3. オブジェクト名に使えても、変数名に使えない文字がある ?
テーブル名やフィールド名に、日本語を使うようになると、
変数名にも使いたくなりますね。

では、オブジェクト名に使えて、変数名に使えない文字はあるでしょうか ?

参照:クイズ: 変数名に使えない文字は何文字 ?
このほかにも、Enterprise Manager の動作や Access との連携の部分で、なにか問題があるかも。

今度は、SQL Server 2000 の変数名のクイズです。
SQL Server 2000で、変数名に使えない文字は NCHAR(1) から、
NCHAR(65535) のうち何文字でしょうか ?
  1. 0: つまり全部使えるはず
  2. 10文字前後
  3. 1000文字前後
  4. 10000文字ぐらい
  5. もっと多い
テスト方法は、次のクエリーのNameの部分に文字を当てはめて実行し、
エラーが出た文字数を調べます。
DECLARE @Name INT
[@Name] や @[Name] といった表現は変数ではできないのですね。
Books Online をみるとできそうですが。

検証用のクエリー ValuenameChar.sql を添付しますので、ダウンロードして
お使いください。

SQL Server 2000 の列名と文字についてのクイズです。
SQL Server 2000 で、列名に使えない文字は NCHAR(1) から
NCHAR(65535) のうち何文字でしょうか。
  1. 0 : つまり全部使えるはず
  2. 10文字前後
  3. 1000文字前後
  4. 10000文字ぐらいはある
  5. もっと多い
テスト方法は、次のクエリーのNameの部分に文字を当てはめて、実行し、
エラーが出た文字数をしらべます
CREATE TABLE [TableX] ([Name] int
ただし、] は、]] としてからテストします。

検証用のクエリー ColumnChar.sql を添付しますので、ダウンロードしてお使いください。

SqlJunkies.com

SQL Server な人たちの blog です。
マイクロソフトで SQL Serverの開発にかかわっている人から、著名なトレーナや
開発者の方々もいらっしゃいます。

トップページには、みなさんのブログがはいっていて、これだけでも、十分面白いですね。
いろいろなサイトで盛り上がった話が、まとめてられていることもあります

Randomize Data

SELECT の結果をランダムに並べ替えたい場合があります。
あるいは、100 個の中から、毎回ランダムな 3個を取り出したい場合もあります。
この方法は、ずばり。
SELECT * FROM [TableX] ORDER BY NewID()
3 個だけ取り出したい場合は、
SELECT TOP 3 * FROM [TableX] ORDER BY NewID()
となります。
とっても、シンプルでクールな解決策ではないかと思います。
この方法が、どのようなクエリープランになって、パフォーマンスはどうなのか、
どの程度、ランダムなのかは、別途テストする必要はありますね。

10/20/2003 3:53 PM

ほぅ NewID() とは考えましたね。 勉強になります。
って、何のために使う?
クイズ系のアプリケーションで使えそうですね。

アイライト

10/20/2003 10:37 PM

はじめまして。

アンケートや統計データ用に登録ユーザーから無作為抽出するときなどに使えるのではないかと思います。

|shortbahnAT NOSPAMhotmail dot com

COLLATE のテスト用に、すべての文字をPRINTするクエリーを
作成してみました

SQL Server の文字列の比較には、明らかな問題がありました。
文字列の比較用内部テーブルが、まともにチェックされていない
たとえば、次のようになうなものがあります
  • 'ア' = '㋳' COLLATE Japanese_CS_AI
    アクセントを無視する、AI を指定していると、丸付きの「ヤ」が「ア」と同じと判断されます。
  • '1' = '①' COLLATE Japanese_CS_AI_WS
    WS をつけているのに、丸付きの1が、半角の 1と同じと判断されます。
    AS とすると、異なる文字と判断されます。
  • '''' = ''' COLLATE Japanese_CS_AS
    半角のシングルクォートと同じとなるのは、コード ff07 のシングルクォートのみです
    通常、キーボードから入力される全角シングルクォート 2019 は、同じとみなされません
    ダブルクォートも同様です
  • '四' <> 'ಗ'
    数字は、括弧つきも、丸付きも同じと判定されますが、漢字の数字は、
    括弧つきの漢数字と同じとみなされません
    ただし、コード 3223 括弧つきの四 は、コードd212 ハングル文字 &#ud212; と
    同じ文字とみなされます。

このように、ひとつひとつの文字をCOLLATE を変更しながら、テストすると、
さまざまな間違いがあることがはっきりします。

添付の「PRINTEQ.txt」は、テスト用のクエリーです。

10/21/2003 10:39 AM

microsoft のネットニュースにて、マイクロソフトの方と話をしています。
わかってもらえるまで、がんばってみます

河端善博

SQL Server 2000 では、データベース単位に照合順序 COLLATE を指定することができます。
例: ALTER DATABASE [データベース名] COLLATE Japanese_CS_AS
このとき、さまざまな注意点がありますので、まとめてみました。
Books Online 熟読
まず、Books Online の次の目次について熟読する必要があります
 [SQL Server のアーキテクチャ]
+ [データベース アーキテクチャ]
+ [論理データベース構成要素]
+ [照合順序]

特に、「照合順序が混在している環境」と「照合順序の変更」は必須です。
ストアドプロシージャ、ユーザー定義関数での文字列の扱い
ストアドプロシージャやユーザー定義関数内での文字列の比較は、
データベースに設定している COLLATE が利用されます。
そのときに、使っているデータベースではありません。
たとえば、次の状況です。
  • データベース pubs COLLATE Japanese_CI_AS
  • データベース testDB COLLATE Japanese_CS_AS_KS_WS
  • ストアドプロシージャ: test.dbo.Hello
このとき、
 use pubs
 exec testDB.dbo.Hello
とした場合、Hello 内のCOLLATE は、Japanese_CS_AS_KS_WS になっています
オブジェクトの大文字、小文字表記に注意
データベースのCOLLATE は、標準で Japanese_CI_AS と大文字小文字を無視します
もし、Japanese_CS_AS に変更した場合、クエリー中で利用するオブジェクト名も
大文字小文字が正しく記述されていないとエラーになります。

たとえば、テーブル「table1」なのに、select * from [TABLE1] とすると、エラーになります。
KS,WS もあります
COLLATE は、CI/CS, AI/AS のほかに、KS, WS もあります。
参照: 照合順序の指定

もし、文字のコードが異なる文字は、別の文字としたい場合は、Japanese_BIN を
使うことをお勧めします
一時ストアドプロシージャ, EXEC, sp_executesql も注意
次の一時ストアドプロシージャを定義します
CREATE PROCEDURE #TestCollate
AS
BEGIN
   IF 'a' = 'A' PRINT 'CI' ELSE PRINT 'CS'
   declare @q nvarchar(4000)
   set @q = N' IF ''a'' = ''A'' PRINT ''CI'' ELSE PRINT ''CS'''
   EXECUTE (@q)
END
#TestCollateは、a と A を区別しているか、つまり CI か CS かを
通常の状態と、EXECUTE からの二つで調べます。
これをカレントデータベースのCOLLATE との相関でみると、次のようになります。
作成時COLLATE実行時COLLATE通常EXECUTE
Japanese_CS_ASJapanese_CS_ASCSCS
Japanese_CS_ASJapanese_CI_ASCSCI
Japanese_CI_ASJapanese_CS_ASCICS
Japanese_CI_ASJapanese_CI_ASCICI
つまり、#TestCollate 内の通常のクエリーは、作成時カレントになっていた
データベースのCOLLATE に依存しています。
もし、その作成時カレントだったデータベースを ALTER DATABASE [xx] COLLATE で変更すると、新しいCOLLATEに対応します
一方、EXECUTE 中のクエリーは、実行時のカレントデータベースに依存します。
Books Online を読んだ上で、ひっかかりそうなポイントを検証してみました。

今回も、DBA 向けのテーマ「移動」を選択しています。

■概要
題名: 第5回サポート情報読み合わせ会
日時: 2003/10/17(金) 16:00~17:30 (90分)
場所: 翔泳社1F 会議室
講師: マイクロソフト 平山様
対象: MVP, PASSJ
配信: Windows Media によるストリーミング, IRC.
募集: MVP のコミュニティと、PASSJ-ML、PASSJ メーリングリスト
参加申込: passjinfo@sqlpassj.org

■テーマ
  1. [HOWTO] SQL Server を実行しているコンピュータ間でデータベースを移動する方法
  2. [HOWTO] SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法
  3. [BUG] SQL Server 2000 Desktop Engine のインストールの SAPASSWORDおよびUSEDEFAULTSAPWD オプションに関する BOL の誤った記載について
  4. [HOWTO] Microsoft SQL Server 2000 Desktop Engine のインスタンスをSQLServer 2000 Service Pack 3 にアップグレードする方法
※テーマ1に時間がかかることが予想されますので、テーマ2,3,4
 は、残り時間に応じて選択させていただきます。

■配信
ストリーミング: http://www.kawabata.com/stream/passj.asx
※プレイヤ: Windows Media Player

チャットサーバ: irc.users.gr.jp
チャットチャネル: #benkyokai
司会: kawabata

SQL Server 2000 には、照合順序 として、JapaneseとJapanese_Unicodeがあります。
この違いをまとめてみました

■結論
Japanese_Unicode は過去の遺物
 Windows 2000 以降は、Japanese_Unicode を使わないほうがいいですね

■詳細
 Japanese と Japanese_Unicode について、collationproperty関数をつかって比較すると、次のようになります。
 
COLLATIONcodepageLCIDComparisonStyle
Japanese_CI_AS9321041196609
Japanese_Unicode_CI_AS93266577196609

declare @name nvarchar(100)
set @name = 'Japanese_Unicode_CI_AS'
select @name as name, 
	collationproperty(@name, 'codepage') as codepage, 
	collationproperty(@name, 'LCID') as LCID,
	collationproperty(@name, 'ComparisonStyle') as ComparisonStyle
 このように LCID のみが異なります。
 Japanese_Unicode の指定する LCID 66577 は、Windows NT 4 まではサポートされましたが、
 Windows 2000, XP, 2003 ではサポートされていません。
 SQL Server 2000 は、SQL Server 自身で、LCID 66577 をサポートしていますので、現在利用することができます
 ただし、SQL Server 2000 のクライアントアプリケーションでは、対応していない可能性があります。
 たとえば、接続文字列にて、明示的に Locale Identifier = 66577 と指定した場合は、エラーになる場合があります。

 したがって、今後 Japanese_Unicode は、利用しないほうがいいようです。

■参考情報
なお、この件について、Billy Yao さんにお世話になりました。

Microsoft Configuration Capture ユーティリティ (MPS_REPORTS) の概要

MPS_REPORTS シリーズは、Windows の各種情報をうまくあつめるツールです。
マイクロソフトのサポートチームが、顧客のサポートをするために作成したツールで、
ファイル情報、レジストリ、イベントログほか、目的にあわせて各種情報をがっさりと集めます。
目的にあわせて、次のものがあります。
  • MPSPRT_Alliance : 全般的に情報収集
  • MPSPRT_CLUSTER : クラスタ環境用
  • MPSPRT_DirSvc : Active Directory サーバー用
  • MPSPRT_MDAC : MDAC 関連情報
  • MPSPRT_NETWORK : ネットワーク関連情報
  • MPSPRT_SETUPPERF : セットアップ関係情報
  • MPSPRT_SQL : SQL Server 用
  • MPSPRT_SUS : SUS サーバ用
各種コマンドラインツールをうまくつかって、テキスト形式のファイルに情報を集めます。
コマンドの内容を分析して、コンピュータに合わせたものを作成するといいですね。
中で利用されているツールの使い方をみるのも、勉強になります。

10/12/2003 6:1 AM

 米田です。

 私は MPSPRT_MDAC を試したんですが、非常に
面白い TOOL ですよね。最初は Administrator 権限
のないユーザーで実行して部分的にしか取れなかっ
たりしました(笑)

米田

「サーバーネットワークユーティリティ」の「サーバーを非表示」に
ついて簡単にまとめてみました。

■概要
 TCP/IP の「サーバーを非表示」に設定すると、2433/tcp が利用される

■内容
 サーバーネットワークユーティリティを起動して、
 「TCP/IP」プロトコルの「プロパティ」を選択すると、
 「ネットワークプロトコル既定値の設定」で、
 チェックボックス「サーバーを非表示」があります。

 この設定は、次のレジストリに相当します

 HKEY_LOCAL_MACHINE\SOFTWARE
  \Microsoft
   \MSSQLServer
    \MSSQLServer
     \SuperSocketNetLib
      \Tcp
       TcpHideFlag (REG_DWORD)

 このチェックボックスをオンにするか、レジストリの値を 1 にして、
 SQL Server をリスタートすると、
 SQL Server のポートは、通常の 1433/tcp ではなく2433/tcp になります。

 ポートが変更されたことは、次のコマンドを
 コマンドプロンプトから実行すると確認できます。
 isql -S localhost,2433 -E -Q "PRINT 'OK'"
 ここで、注意する点があります。
 「サーバーを非表示が有効の場合、
 SQL Server 起動時にポートが 2433/tcp に設定しなおされる」
 「既定のプロパティ」または、レジストリ TcpPort にて、
 ポート番号を 1433 または、任意の設定していた場合でも、
 非表示が有効になっていると、
 SQL Server の起動時に 2433 に変更になります。

 サーバーを非表示をいったん有効にして、SQL Server を起動しなおしたあと、
 再度、サーバーネットワークユーティリティにて、「既定のポート」をみると、
 2433 に変更になっていることがわかります。
 レジストリ TcpPort でも確認できます。

 たとえば、9999 に設定していても、2433 になります。

 なお、サーバーの非表示を有効から無効にしても、
 ポート番号は、2433 のままになりますので、これも注意が必要です。
 1433 に明示的に修正してください。

■スキャンする場合には、2433/tcp も。
 手軽なセキュリティ対策として、「サーバーの非表示」を
 設定している場合が考えられます。

 そこで、SQL Server のうごいているコンピュータを検索する場合は、
 1433/tcp だけでなく、2433/tcp もスキャンすることをお勧めします。

■1434/udp は LISTEN のまま
 「サーバーの非表示」を有効にしても、1434/udp は、LISTEN になっています。
 1434/udp を LISTEN したくない場合は、TCP/IP プロトコルを含むプロトコルすべてを
 無効にするか、IPSec やファイアウォールで防御する必要があります。

ふと、「サーバーの非表示」って何だろうと、思いついて、調べなおしてみました。

一時ストアドプロシージャでの所有権の継承について、
Books Online に明確な表記がないようでしたので、
簡単にテストしてみました。
この件は、PASSJ セキュリティ分科会のML にもだしました

■概要
 ## で始まる一時ストアドプロシージャでは、
 所有権の継承は行われない

■テスト
 SQL Server 2000 SP3a
Windows 2000 Server

■内容
 ストアドプロシージャは、通常、所有権の継承が行われます。
 しかし、##test のように ## で、始まる名前をもつ
 一時ストアドプロシージャは、継承されていませんでした。

 例:
 ログイン sa で接続して、
create procedure ##t
as
select top 1 * from pubs.dbo.titles
go
とします。
 次にログイン userA を作成したあと、
 pubs にユーザー userA を追加し、
 titles テーブルへのアクセスを拒否します。
exec sp_addlogin 'UserA', 'password', 'pubs'
use pubs
exec sp_grantdbaccess 'UserA'
deny select on titles to [UserA]
次に、UserA でデータベースに接続し、##t を実行します。
exec ##t
 すると、次のエラーになります。
 「SELECT 権限は、オブジェクト 'titles'、
  データベース 'pubs'、所有者 'dbo' にありません。」
 テスト終了後、ログイン,ユーザーを削除します
exec sp_revokedbaccess 'UserA'
exec sp_droplogin 'UserA'
■背景
 ## で始まる一時ストアドプロシージャは、
 どのログインからでも呼び出すことができます。
 さらに、特定のログインやユーザーにのみ、実行を
 許可したり、拒否する機能がありません。
 したがって、このようなストアドプロシージャの実装時には、
 各自が適切なユーザーからのみ呼び出せるようにする
 必要があるのではないかと考えました

 たとえば、SYSTEM_USER を評価して、適切なログインのみ
 実行を許可するという方法です。

 例:
 
create procedure ##t2
as
SELECT SYSTEM_USER
IF SYSTEM_USER <> 'DOMAIN\UserP'
  RETURN

SELECT 'OK'
go

exec ##t2
 今回、所有権の継承が行われていないことが
 確認できましたので、特にこのような実装は必要ないかと
 思います。

※もしかしたら、継承させる方法があるのかもしれませんが。
※継承できないのは、それはそれで、使いにくい場合もあるかも。

SQL Server セキュリティ セミナー概要
参加レポート

2003/8/19(火) に PASSJ セキュリティセミナーを行いました。
この中で、翔泳社 DBマガジンに連載中の「DBセキュリティ研究所」を素材にして、
セキュリティ対策のアラカルトをご紹介しました。

とても、丁寧に参加レポートを書いていただいているのが、うれしいです
マイクロソフトの小野寺さんは、Blaster ワーム対策で、ほとんど寝ていないにもかかわらず、
わかりすい話をしていただけました

あと、どたばたでしたが、ブレーンストーミングをグループ分けして、全員で行いました。
せっかく参加された方の意見を、すこしでも、たくさん聞きたい、交流していただきたいと
思ってしてみました。
なかなか、東京でのセミナーには、顔を出せないのですが、これからも、やっていければと思います。

[INF] Microsoft SQL Server 修正プログラム パッケージの新しい命名方式
例: SQL2000-KB123456-8.00.0000-ENU.exe

たくさんの修正プログラムを管理するほうとしては、このように命名方式を
きちんと決めていただけるとうれしいですね。

あと、次の点を改善していただけると、もっと管理しやすいのですが。
Windows, Exchange, Office などとの統一
Windows や Exchange Server と命名方式が微妙に異なります。
Windows などには、ビルド番号がない
ビルド番号情報が、SQL にはありますが、Windows にはありません。
ビルド番号がないと、同じ修正を再リリースした場合、新旧を判断できません。
SQL にオプションがない
オプション指定は、Windows などにはありますが、SQL Serverには
ありません。
これでは、32bit版と、64bit版を区別することができません
適切なFileVersionInfo
修正プログラムのexe についているファイル情報を適切なものにしてほしい
また、製品に依存しない命名法則として、次のものを提案しています。
Productname-KBArcrticleNumber-BuildNumber-Option-Language.exe

09/19/2003 9:30 AM

FileVersionInfo についての要望を追加しました。
マイクロソフトのStephen とやりとりして、sqlwish にメールすることにしました。
命名法則を統一してほしいという点が理解してもらえないようです。

河端善博

09/19/2003 6:43 PM

FileVersion への適切な情報追加について、海外のMVPの方から、賛同をいただきました。ちょっと、うれしい。

河端善博

9/11(木) 第 4 回サポート情報読み合わせ会 ( データベースをコンピュータ間で移動する方法など)

今回は、SQL Server データベースを移動する方法をテーマに取り上げました
会場のストリーミング設定の問題のため、一時間もスタートが遅れてしまいました。
講師、参加された方々には、ほんとうに申し訳ありませんでした

データベースの移動というのは、簡単なようで、実にたいへんで奥の深いものです。
開発/テスト環境から本番環境への移動、その逆の移動、大きなデータベースの移動
別のドライブへの移動、複数のドライブへの分散など、多くのシチュエーションがあります。
これに、移動元と移動先のSQL Server のバージョンの違いや、照合順序の違いが
からんでいることも明らかになりました。

たとえば、SQL Server 6.5 から 7.0, 2000 へアップグレードしたサーバーと、
純粋に SQL Server 2000 をインストールしたサーバーでは、いくつかの設定値が異なっていて
移動の際には注意が必要になります

また、master や model などのシステムデータベースをアタッチ/デタッチで移動させる
方法も解説されました。そもそも master がデタッチできることがすごい !
ただ、そこには、Books Online に記載のない、いわゆるアンドキュメンテッドなオプションが
必要だったりします

さて、今回は、データベースの移動についてのサポート情報の半分も進むことができませんでした
次回、またがんばってやりたいと思います。

できれば、今回「移動」について、DBA 向け PASSJ セミナーとして企画してみたいですね。

クイズ:
varchar(50) COLLATE Japanese_CI_AS タイプの列に
'あいうえお' を入れました。
さて、どの文字コードで保存されているでしょうか ?
  1. Unicode
  2. Shift-JIS
  3. UTF-8
varchar と nvarchar を使い分けている方には、常識ですよね
簡単すぎるという方は、varchar(50) COLLATE Latin1_General_CI_AS タイプだと、どう保存されるでしょう ?

もちろん、わたしは、バイナリエディタで MDF を眺めたんです.

09/11/2003 11:15 AM

たくさんの方にご参照いただけたようですね。
ぜひ、コメントもお願いいたします。
★答え : 2. Shift-JIS
なんと、Shift-JIS なんですよね。
では、Latin1_General_CI_AS な varchar に 'あいうえお' を入れるとどうなるか ?
★答え: '?????'
なんと、全部 クエスチョンマークに変換されてから、変数に入ります。
表示上 ? になっているだけではないことに注意してください。
なにげに、 ? に意味を持たせた環境の場合、面倒な問題になりそうです


河端善博

今回は、DBA 向けのテーマを選択しています。

■概要
題名: 第4回サポート情報読み合わせ会
日時: 2003/9/11(木) 16:00~17:30 (90分)
場所: 翔泳社1F 会議室
講師: マイクロソフト 平山様
対象: MVP, PASSJ
配信: Windows Media によるストリーミング, IRC.
募集: MVP のコミュニティと、PASSJ-ML、PASSJ メーリングリスト
参加申込: passjinfo@sqlpassj.org

■テーマ
  1. [HOWTO] SQL Server を実行しているコンピュータ間でデータベースを移動する方法
  2. [HOWTO] SQL Server を実行しているサーバー間でデータベースを移動するときに、権限の問題を解決する方法
  3. [BUG] SQL Server 2000 Desktop Engine のインストールの SAPASSWORDおよびUSEDEFAULTSAPWD オプションに関する BOL の誤った記載について
  4. [HOWTO] Microsoft SQL Server 2000 Desktop Engine のインスタンスをSQLServer 2000 Service Pack 3 にアップグレードする方法
※テーマ1に時間がかかることが予想されますので、テーマ2,3,4
 は、残り時間に応じて選択させていただきます。

■配信
ストリーミング: http://www.kawabata.com/stream/passj.asx
※プレイヤ: Windows Media Player

チャットサーバ: irc.users.gr.jp
チャットチャネル: #benkyokai
司会: kawabata

09/08/2003 2:32 PM

また、現地で平山さんの頷き役(ちゃちゃいれ)をすることになるんだろぉ~なぁ。。。
だれかいっしょに来ません?

|mi-ogawaAT NOSPAMcrc dot co dot jp

09/08/2003 9:25 PM

ぜひぜひ、どなたか、お願いします。
平山さんからも、合いの手があると、どんどん前にすすんでうれしいと。

河端善博

09/08/2003 9:53 PM

300km彼方の新潟から応援しております...(^^;;

チャム&レオ

クイズ
PRINT REPLACE('--' COLLATE Latin1_General_BIN, '-', '[-]')
この結果は ?
  1. [-][-]
  2. [-]-
  3. [-]-
変換対象の文字列は、半角と全角のハイフンです。 答えをお待ちしております。
環境: SQL Server 2000 (or MSDE)

もちろん、ふつうに期待するのは、2番
もし、2番でないと答える方は、どうしたら 2番になるか修正案もどうぞ

09/06/2003 1:0 AM

ふぅ やっと出来ました。
COLLATE って使ったことなかったのですが、何とかできました。
勉強になりました。
#答えは書きませんね。 このクイズ面白いですから。

09/08/2003 11:35 AM

回答を期待しています :-)
ヒント: 1文字です

河端善博

09/08/2003 9:20 PM

正当な解は、Japanese_BIN ですね
亜流な回答もある ? 動いてしまうってやつで。

河端善博

09/08/2003 10:1 PM

 米田です。
> ヒント: 1文字です
 だとユニコード文字列ってことで
PRINT REPLACE(N'--' COLLATE Latin1_General_BIN, '-', '[-]')
ですかね。
(濃い問題だ)

|MXL04371AT NOSPAMnifty dot ne dot jp

MSDE 用管理ツールが英語版ですが、いくつかありました
MSDN Manager
開発: valuesoftware
価格: $79-
Teratrax Database Manager
開発: teratrax.com
価格: $49.95-
どちらも、SQL Server Enterprise Manager 相当画面になっているようです。
試用版をダウンロードできますね。
ただ、5,000- から 8,000- 程度で入手できる SQL Server 2000 Developer Edition のほうが、
日本語ですし、魅力的ですね

09/08/2003 2:36 PM

できるのかはようわかりませんが、codeproject に MSDEGUI なるツールが公開されています。

http://www.codeproject.com/cs/database/msde-gui.asp

だれか試して。

|mi-ogawaAT NOSPAMcrc dot co dot jp

09/08/2003 9:23 PM

ここのコメントをみていると、いろいろありますね。
わーい

河端善博

09/09/2003 11:7 AM

Database Framework に非常に興味があります。
EJB の CMP のようにエンティティをクラスに強く紐付けるものは大規模開発には向かないので、汎用的な Database 関連の Framework を探していたら、たどり着いちゃいました。

|mi-ogawaAT NOSPAMcrc dot co dot jp

マイクロソフトの SQL Server のデスクトップ版 MSDE について、サポート情報がいろいろ提供されています。
最近のものをまとめてみました。

ブログシステムの .TEXT も SQL Server/MSDE 対応しています。
これから、ますます MSDE を利用するアプリケーションの開発を増やしてしまいそうです。
また、サポート情報の検索機能も提供しますので、あわせてご利用ください。
RSS への変換もしています
過去90日間のMSDE情報

SQL Server の COLLATE について、ちゃんと考えないと、かなり問題がありそう。
まとめる時間ができるまで、メモしておきます

デフォルトの COLLATEをしらべる
exec sp_helpsort
サポートされるCOLLATE 一覧
SELECT * FROM ::fn_helpcollations()
REPLACE(@s, '-', '--') とすると、全角- まで
REPLACE(@s COLLATE Japanese_BIN, '-', '--')
Japanese_xx って、ハングルがきたらどうなる ?
COLLATE Japanese_CS_AS として、日本語以外で注意することはないの ?

SQL Server の 照合順序のオプションを簡単にまとめました

CI
大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない
例: 「A」 と 「a」 を同一視する
CS
大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する
例: 「A」 と 「a」 を区別する
AI
アクセント、濁音、破裂音を区別しない。
半角カナの濁音、破裂音も区別しない
例: 「ハ」、「バ」、「パ」を区別しない
AS
アクセント、濁音、破裂音を区別する。
例: 「ハ」、「バ」、「パ」を区別する
KS
ひらがなとカタカナを区別する。半角でも区別する
KS に対して、KI という指定はない
例: 「は」と「ハ」を区別する
WS
文字幅を区別する。つまり全角、半角を区別する。
WS に対して、WI という指定はない
例: 「a」と「a」を区別する
BIN
バイナリで比較する。つまりすべて区別する。
指定書式
書式: Japanese_BIN
書式: Japanese_(CI | CS)_(AI | AS)[(_KS | _WS | _KS_WS)]
例: Japanese_BIN
例: Japanese_CI_AS_KS

SQL Server の 接続文字列 ConnectionString で共有メモリプロトコルになる表記をまとめてみました

共有メモリプロトコルになる表記
.
(local)
コンピュータ名
lpc:
lpc:.
lpc:(local)
lpc:コンピュータ名

よく似ているが TCP接続になる表記
lpc:localhost
lpc:コンピュータのIPアドレス
lpc:127.0.0.1
tcp:.
tcp:(local)
localhost
tcp:localhost
tcp:
現在の接続プロトコルを確認するクエリー
select net_library from master..sysprocesses where spid=@@spid
LPC : 共有メモリプロトコル
TCP/IP : TCP/IPプロトコル
どうも、処理の切り分けが甘いような気がします。
仕様書はどうなっているんだろう。

添付のSQLCheck は、検証用のプログラムです。(.NET 1.1必須)

09/02/2003 9:31 AM

表記に「コンピュータ名」を追加しました。
また、接続プロトコルを確認するクエリーを追加しました

河端善博

09/02/2003 10:12 AM

検証用に SQLCheck.exe を添付しました

河端善博

09/02/2003 11:13 AM

私の環境が駄目なのかもしれませんが、
ファイルのダウンロードができません。
環境:XP, IE6.0

アイライト

09/02/2003 11:27 AM

添付ファイルは、SQLCheck.zip と名前を指定してダウンロードしていただければと思います。
ちと、BlogX を修正しないといけないな

河端善博

09/02/2003 11:43 AM

BlogXの添付ファイル名の処理を修正しました

河端善博

SQL Server マガジン 2003.10

DBセキュリティ研究所の連載も、3回目になりました。
今回は、データベースにまつわる暗号化を取り上げました。
ケーススタディは、SQL Server のストアドプロシージャにかける WITH ENCRYPTION が
解読できることをしらなかったら、どうなるか ! です
実際に簡単に解読する方法を紹介しています

ほかにも、公開鍵暗号を使うためのライブラリや、.NETアセンブリを暗号化する Obfuscator、
ドキュメントにはないパスワードを暗号化するための関数なども紹介しています。

Yukon では、どうなるのだろうか。楽しみです
さて、次回はどうしよう

08/27/2003 3:10 PM

ぷ・・・プロジェクトをふっ飛ばしました(死)
ちょうど紹介されていた解読ツールでかすかに残った.dllから多少なりとも復元中...
try...catch周りは全滅に近い雰囲気が

# ASP.NETプロジェクトはinetpub以下にしかファイルがないんですね・・・ご注意を

チャム&レオ

08/28/2003 10:8 AM

何らかのバージョン管理ツール(VSSとか)は使っていないのですか?

私はVSを使ってないのでCVSが好き(w。ていうか、自宅と外でプログラムをいじるのにVSSはちょっと使いにくいんですよね。CVSならInternet経由でも簡単に同期。。。でも無防備にポートを開けると寒いので自宅でのみ同期可能にしています。こうしておけば、CVSのリポジトリとクライアントにソースが分散しますのでどちらかが破壊されても復活は可能ですよね。VSがCVSをネイティブでサポートしてくれるとうれしいなぁ。

うに。

Forensic Log Parsing with Microsoft's LogParser by Mark Burnett

マイクロソフトは、IIS ログ解析用のツール LogParser を提供しています。
LogParser は、IIS ログを SQL でクエリーすることができます。
logparser -i:FS "SELECT TOP 20 Path, CreationTime from c:\inetpub\wwwroot\*.* ORDER BY CreationTime DESC" -rtp:-1
この記事では、LogParser を利用して、不正アクセス、エラーを検索する具体的な方法を紹介しています。

08/12/2003 8:30 AM

頂きます。
ログは取っているのですが、管理していないんですよね。
これで バリバリ 管理が出来そうです。

アイライト

08/12/2003 8:43 AM

ログがギガバイトに達してこの間ZIPに圧縮しました(笑)
.NETにも簡単なもので良いので標準で圧縮ライブラリがあるといいんですけどねぇ

チャム&レオ

08/13/2003 2:42 AM

これってテキスト形式のログを SQL でクエリするユーティリティですか?

うちの IIS は SQL Server にログを保存するように設定してあるので、

http://hidori.atnifty.com/?link=http://www.hidori.jp/reports/atackers.aspx

なんてページを作って遊んでます (^^;

|hidoriAT NOSPAMmbi dot nifty dot com

TechEd 2003 Yokohama の一日目が無事終了しました
いま、帰りの電車の中でレポートを書いています。

今日は、ずっと Yukon のセッションに出ていました。
Yukon、たのしいですね。ほんと。
まだ、初期ベータテストが一部のユーザーに公開されただけ、
ということもあり、項目のみの説明も多く、デモも簡単なものだけでした。
さらに、レジメの配布もなしと、ほんとに、どうレポートしろと。
※さらに、NDA でしゃべれないことも多々。


といっても、XML の多様なサポート、CLR 統合、SQL Broker、T-SQL強化、
DDLへのトリガなど、たっぷりの期待が。
Enterprise Manager は、Workbench と変わり、VS.NETのGUIになっています
DML の VSS 対応も入りましたね。
Query Notification は、特定のクエリーの結果が変化したら、イベントを返す機能を
提供するため、ASP.NET でクエリー結果を Cache したい場合にまず、使えます
私は Notification Service の機能を統合したのではないかとおもっています。
リカーシブクエリーは、階層のある組織や、掲示板のスレッド処理に使える
Analisys では、GUI が VS.NET なものになり、キューブの作成ウィザードでは、
SSABI の機能が組み込まれています。
Reporting Srever は、これも注目 !
XML,CSV,PDF,TIFF,html,mhtml への帳票出力が簡単に行えます
Office Web Component を利用したグラフは、インタラクティブなグラフだけでなく、
自動的に GIF に変換して出力させることもできます

PeerTalk では、NDA ということで、また、いろいろ MS の方と議論していました。
セミナー後は、MSMVP オフということで、立食パーティ。
沼口さん、小板さん、小島さん、ほんとにありがとうございました。
シアトルからこられた方々も、ぜひ日本を楽しんで帰っていただければとおもいます。

08/08/2003 11:7 AM

うー、いきたかったなぁ。。。
楽しそうだなぁ。。。
いま、いそがしくて気持ちの余裕がなく、ずっと沈んでますけど
またいろいろお話聞かせてくださいね。

小野@EAC

Akadia AG Informatin Technology

TIPSを提供しています。
数はすくないですが、ひとつひとつの TIPSを丁寧に解説しています。
分野は、.NET, SQL Server, ADO.NET, Oracle, Linux, Java, SSH などが
あります。

BlogX でつくる TIPS 集の参考にさせていただこうっと

PASSJ セミナーブレスト

15名ほどの方々にご参加いただき、セミナーやカンファレンスについて
たくさんの意見をいただくことができました。

なかでも、おもしろかったのは、会議革命という本の中で紹介されている、
ペアで考える話。
前回のPASSJ 合宿の中では、BI のセッションの中でチーム形式をやりました。
そこで、今回のブレーンストーミングでも早速試してみました。

テーマは、来年の PASSJ Conferenceのネタ。
二人一組で10分間、意見を出し合って、最後にそれぞれが発表

みなさん、がんがん意見が進んで、一気にネタをあつめることができました。
この方法は、セミナーにこられた方々の参加意識をうまく引き出すことが
できるように思います。
これから、ぜひ活用していければと思います。
各テーブルに IRC ができる端末を置いておき、チャットにどんどんサマリーを
書いていただくという方法も試せるといいなと思います。

ほんとに、いい方々がいま、PASSJコミュニティに関心を持っていただいている
ことを感じました。

07/29/2003 4:40 AM

いわゆるIP電話なVoIPアプリは結構ありますが
同時に複数人で話せるVoIPアプリがないな~と思って作ってみちゃいました(^^;;
話はできるようになったんですが・・・IP会議アプリが高価な訳が分かった気もします(爆)

チャム&レオ

07/29/2003 4:29 PM

書籍紹介です
「会議革命」 ISBN:4569624790

河端善博

PASSJセミナーブレスト

本日、PASSJ の9月以降のセミナーについてブレーンストーミングを行います
セミナーは、PASSJ 活動の柱となってきています
いろいろな方の意見をとりいれて、充実させていければと思います。

PASSJ 掲示板を RSS に変換するようにしました。
  • RSS すべての掲示板
  • RSS SQL Server 1年生
  • RSS 資格を取ろう!
  • RSS 開発の現場を語ろう
  • RSS PASSJ喫茶室
「すべての掲示板」の RSS は、4つの会議室全部の更新情報をまとめています。
個別の掲示板を選んで購読する場合は、それぞれの掲示板のRSSを選択してください。

System.Data.OleDb にて、ACCESSの MDB を操作するプログラムを開発しています。
このとき、不思議な現象にあっています。
とりあえず、現在のプログラムでは、問題を回避する方向で修正しました。

現象
OleDbCommand.CommandText にパラメータクエリーを設定
例: UPDATE 名前=@Name WHERE ID=@ID
OleDbParameter にて、パラメータを設定
実行すると、WHERE がうまく一致しない
ID が string の場合も、int の場合も、安定して動作しません
WHERE ID=5 と、パラメータをクエリーに埋め込むと問題ありません
UPDATE ではなく、SELECT にすると正しく動作します。

すでに二日間悩んでしまいました。
当面、パラメータにせず、クエリーに値を埋め込む形にします。
GotDotNet Japan で、まとめて質問してみようかと思います。

07/15/2003 2:6 PM

あぁ SELECTだと上手く行くんですね。

間違っているかもしれませんが、
MDBのパラメータクエリを扱うときには ? で指定するみたいです。
UPDATE 名前=? WHERE ID=?
VS.NETでデータアダプターを自動に作らせて
それで確認してみたらどうでしょうか?

|ishinoAT NOSPAMsofu dot co dot jp

07/15/2003 2:13 PM

時間をつくって、? も試してみます。
ちなみに、OleDbParameter は、SqlParameter と比較して、とても複雑なことをしているようです。
一見の価値あり。

河端善博

07/16/2003 1:50 PM

? でうまくいきました。石野さん、青柳さん、ありがとうございます。
@name でうまくいかない件は、レポートしたほうがいいのかな。

河端善博

PASSJ で、合宿を11月ぐらいに企画しています。
前回の合宿は、とっても楽しめました。
今度は、11月ぐらいで考えています。
ぜひ、保養所などお勧め施設をご紹介してください
よろしくお願いします

テーマ案
  • クラスタを実際に構築してみよう
  • GDNJ 掲示板のシステム徹底検証
うまいメシと、いい温泉と、ネットがあれば。

07/09/2003 12:28 AM

SCSIは高いのでIEEE1394でクラスタ実験を・・・と思って早一年
一回遊ぶだけに1394ボード買う勇気がありませんでした...

|cham-reoAT NOSPAMmxg dot mesh dot ne dot jp

connectionstring.com
コネクションストリングのの設定をまとめたサイトです。
たぶん、便利。

NewkbViewer
マイクロソフトのサポート情報を検索する機能です。
Blog, Rss のクライアントソフトから RSS 形式で利用することができます。
例: SQL Server の過去30日間のサポート情報 RSS

PASSJにて連載中の SQL Server セキュリティのキホンシリーズの第3回を公開しました。
第3回 権限の設定
今回は、テーブルやストアドプロシージャの権限設定方法です。
マイクロソフトの平山さんに教えていただいた組み合わせ所有権の設定についても、まとめました。

ようやく日本でも、WebCast がマイクロソフトで開催されました。
ビルゲイツさんにお会いしたときに、お願いしたストリーミングライブ&チャットによるオンラインセミナーがようやく実現しました。
ぜひ、これから広がっていってほしいと思います。
今回参加してみて特にうれしかったこと
  • ストリーミングが、ちゃんとした品質で提供されていた
  • 参加者との新しい出会いがあった (ふつうのセミナーでは参加者間の会話はほとんどありませんから)
  • セミナー中に質問ができる !
配信の安定性、司会方法など、調整してぜひ、続けてほしいと思います。

マイクロソフトでオンラインセミナーが開催されます。

タイトル: Excel を利用したビジネス分析の限界と可能性
日時: 2003 年 6 月 25 日 (水) 17:00 - 17:30

ライブで Q&A ができるので、とっても楽しみにしています。

気軽に質問できる Q&A サイトとしてできた「答えてねっと」 がもりあがっているなぁ。

どんどん質問もあがっているし、うまく答えている人も多いみたい。
裏方さんたちの、企画と調査と仕掛けか。

PASSJ で、何ができるかな。

ビルゲイツに、2003/2 にお会いする機会がありました。
記事: 「Bill Gates がやってきた」

このとき、SQL Server ユーザーグループの一員として、短時間でしたが、たのしい意見交換をさせていただきました。
あれから、数ヶ月。
PASSJ 活動や執筆もつづけながら、自分なりに何ができたのかと、考えることがあります。
さてさて。

SQL Server 用データドライブのフォーマットを アロケーションサイズ 64KB にして行っています
SQL Server の動作には、64KB が一番いいはずなのですが。

本日、判明したのは、デフラグができない、ファイル圧縮ができないってこと。
Diskeeper 7.0 が対応しているらしいので、一度試してみよう

SQL Server 用サーバを IDE/ATA HDD で低価格/大容量を実現できるかテスト中
とりあえず、今回、RAID カードを追加購入
AEC-6885S は、PCI 64bit/33MHz 対応 4Port ATA カード。。
1万円ちょっとの価格でしたが、なかなかどうして、いい性能を見せています。
Windows Server 2003 のドライバがでているといいのにな。