[FIX] SQL プロファイラ または SQL トレースを使用するとアクセス違反が発生する

この記事は、以前は次の ID で公開されていました: JP308723
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
SQL Server プロファイラまたは SQL トレースを使用すると、アクセス違反 (AV) と次のエラー メッセージのいずれかまたは両方が発生することがあります。
トレース データを読み取れませんでした。
アクセス違反は、次の条件がすべて成立する場合に発生する可能性があります。
  • SQL トレースのデータ列として [TextData] 列を選択する。
  • Isql.exe などの非 Unicode クライアントからテキスト データが送られる。
  • テキスト データに 2 バイト文字セット (DBCS) の文字が含まれている。
アクセス違反発生時の short stack trace は次のとおりです。
Short Stack Dump004D8C1C Module(sqlservr+000D8C1C) (CShortConstLockBytesSS::ReadAt(union _ULARGE_INTEGER,void *,unsigned long,unsigned long *)+0000002B)006550EA Module(sqlservr+002550EA) (CLockBytesToLBSS::ReadAt(union _ULARGE_INTEGER,void *,unsigned long,unsigned long *)+00000035)006E2C2C Module(sqlservr+002E2C2C) (TSendRowClass<3,0>::TSendLOB(struct srv_proc *,class CTypeInfo const *,class CXVariant *)+0000026E)006E087C Module(sqlservr+002E087C) (CValOdsRow::SetDataX(unsigned long *,class CXVariant *)+00000221)00426566 Module(sqlservr+00026566) (SetDataWithPop(class CEsExec *,class CXVariant *)+0000001C)00416524 Module(sqlservr+00016524) (CEs::GeneralEval4(unsigned long *,class CEsExec *,class CXVariant *)+0000003D)004270DA Module(sqlservr+000270DA) (CStmtQuery::ErsqExecuteQuery(class CMsqlExecContext *,class CEsComp const *,class CEsComp const *,unsigned long *,int,int)const +00000451)00441A34 Module(sqlservr+00041A34) (CStmtSelect::XretExecute(class CMsqlExecContext *)const +0000021C)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)0049CD0A Module(sqlservr+0009CD0A) (CStmtExec::XretLocalExec(class CMsqlExecContext *,unsigned short *,int,class WParseName *)const +00000154)0049CB9F Module(sqlservr+0009CB9F) (CStmtExec::XretExecute(class CMsqlExecContext *)const +00000322)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)00459A54 Module(sqlservr+00059A54) (language_exec(struct srv_proc *)+000003C8)004175D8 Module(sqlservr+000175D8) (process_commands(struct srv_proc *)+000000E0)410735D0 Module(UMS+000035D0) (ProcessWorkRequests(class UmsWorkQueue *)+00000264)4107382C Module(UMS+0000382C) (ThreadStartRoutine(void *)+000000BC)7800BEA1 Module(MSVCRT+0000BEA1) (_beginthread+000000CE)77E637CD Module(KERNEL32+000037CD) (TlsSetValue+000000F0) 
トレースをファイルに書き込んだ場合は、トレース ファイルを開こうとすると、SQL Server プロファイラによって次のエラー メッセージが表示されます。
ファイル データを読み取れませんでした。ファイルが壊れているか、データ形式が無効です。
[TextData] 列を選択しなければ、エラーは発生しません。
原因
非 Unicode テキストを Unicode テキストに変換する際、SQL Server が変換対象の文字列サイズを大きく見積もりすぎることが原因です。
解決方法
この問題を解決するために、SQL Server 2000 の最新の Service Pack の適用をお願いいたします。
最新の SQL Server サービスパックのダウンロードおよびインストールについて詳しくは以下をご覧下さい。
状況
弊社では、これを Microsoft SQL Server version 2000 の問題として確認しています。
この問題は、Microsoft SQL Server version 2000 Service Pack 2 で修正されています。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 308723 (最終更新日 2001-12-10) をもとに作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

single dual double byte DBCS
プロパティ

文書番号:308723 - 最終更新日: 01/16/2015 23:37:05 - リビジョン: 2.1

  • Microsoft SQL Server 2000 Standard Edition
  • kbnosurvey kbarchive kbbug kbfix KB308723
フィードバック