SQL Server における分散トランザクション 3

  神谷 雅紀 Escalation Engineer     以下の投稿で、分散トランザクションの開始から終了までの動作を説明しました。   SQL Server における分散トランザクション 1 SQL Server における分散トランザクション 2   本投稿では、分散トランザクションに関連するその他の一般的なトピックについて説明します。     ロック所有者 session_id (SPID) –2   MS DTC トランザクションにエンリストしているセッションがない場合、sys.dm_tran_locks 動的管理ビューでは、そのトランザクションが所有しているロックの所有者 session_id が –2 と表示されます。実際に –2 というセッションが存在する訳ではなく、そのロックに紐づくセッションがないために、便宜的に –2 という値を使用しているだけです。 以下の例では、4) と 5) の間、7) から 8) の完了までの間、-2 がこの分散トランザクションによって獲得されたロックの所有者として表示されます。   1) トランザクション開始 2) セッション 51 が SQL Server…

0

Known Issue: Microsoft JDBC Driver for SQL Server を使った接続が「SQL Server が不完全な応答を返しました。」のエラーで失敗する。

  SQL Developer Support Escalation Engineer 高橋 理香   みなさん、こんにちは。 最近お問い合わせいただくことが多い事象がありますので、今回はその内容をご紹介したいと思います。   事象 Java アプリケーションから Microsoft JDBC Driver for SQL Server を使用して SQL Server に接続するアプリケーションがある。このアプリケーションからの接続時に以下のエラーが発生することがある。 com.microsoft.sqlserver.jdbc.SQLServerException: ドライバが SSL (Secure Sockets Layer) 暗号化による SQL Server への安全な接続を確立できませんでした。エラー: SQL Server が不完全な応答を返しました。接続が閉じられました。。   対象環境/アプリケーション 上記事象が発生する条件として以下の特徴があります。 Windows Server 2012 R2 に Windows Server 2012 R2 Update1 (2919355) をインストールした環境上で動作する Java アプリケーションから Microsoft…

0

SQL Server 2016 [新機能] 動的なデータマスキングでクエリの変更が必要な場面は?

  みなさん、こんにちは。 Microsoft SQL Server/Microsoft Azure SQL Database サポートチーム です。 SQL Server 2016 から動的なデータマスキングの機能が加わりました。 動的なデータマスキングの特徴として、クエリの結果に対してマスクが適用されるため、アプリケーション側でのクエリの変更が不要な場合が多い点にあります。   動的なデータ マスキング https://msdn.microsoft.com/ja-jp/library/mt130841.aspx 動的データマスクは、クエリの結果にマスク ルールが適用されるため、既存のアプリケーションで簡単に使用できます。 多くのアプリケーションは、既存のクエリを変更せずに、デリケートなデータをマスクすることができます。     一方で意図した結果にならないということでお問い合わせを頂くケースも出てきました。 ここではアプリケーション側でのクエリの変更が必要な場面の例をご紹介したいと思います。 いずれも仕様に沿った結果ではありますが、ご参考頂ければ幸いです。   変更が必要な場面 カーソルで取得した値がマスクされる前の値であることを前提としている実装 カーソルで取得した値は既にマスクされているため、マスクされた後の値であることを前提とした実装に変更する必要があります。 取得した値をクエリ内で置き換えた場合 置き換えた値もマスク対象となるため、マスクされた値であることを前提とした実装が必要です。   以下は、上記の具体例です。 前準備   ※公開情報で紹介しているテーブルとデータを使用しています。    動的なデータマスキング    https://msdn.microsoft.com/ja-jp/library/mt130841.aspx   テーブルを作成します。 CREATE TABLE Membership    (MemberID int IDENTITY PRIMARY KEY,     FirstName…

0

イベント ID : 455/489/490 及び 413/486 の対処方法について

  皆さん、こんにちは。 BI Data Platform サポートチーム です。 ※ BI Data Platformサポートチーム では、Microsoft SQL Server/Azure SQL Database/BI Azure などの製品をサポートしています。 今回は、イベント ID : 455/489/490 及び 413/486 の対処方法について、紹介したいと思います。   Windows Server 2012 以降、ソフトウェアの使用状況を収集する機能が追加されており、ソフトウェアの使用状況 を収集する機能の中で、“C:\Windows\system32\LogFiles\Sum” フォルダ配下への読み取り、書き込みが行われています。 そして、SQL Server サービス に指定された サービス起動アカウントに、“C:\Windows\system32\LogFiles\Sum” フォルダ配下に対する読み取り、書き込み、変更権限が付与されていない場合、権限不足に起因し、イベント ID : 455/489/490 がイベントログに記録されます。   ソース:ESENT イベントID:455 内容:   sqlservr (2032) ログファイル C:\Windows\system32\LogFiles\Sum\Api.log を開いているときに、エラー -1032 (0xfffffbf8) が発生しました。 ソース:ESENT…

0

SQL Server における分散トランザクション 2

  神谷 雅紀Escalation Engineer   SQL Server における分散トランザクション 1 の続きです。   前回の投稿では、SQL Server における MSDTC の接続を確立する際の振る舞いと、コミットまでの動作を説明しました。本投稿では、ロールバック時のシナリオや異常系シナリオについて説明します。   分散トランザクションの流れ (前回からの続き)   8) トランザクションのロールバック   ロールバック前までの流れは、前回紹介したコミットの場合と同様です。   8-1) アプリケーションは、アプリケーション側 MS DTC に対して、トランザクションのロールバック (中断) を要求します。 8-2) アプリケーション側 MS DTC は、SQL Server 側 MS DTC に対して、トランザクションの中断を要求し、その要求は SQL Server に対しても行われます。 この時、Transaction is aborting トレース/拡張イベントが生成されます。 8-3) SQL Server でのロールバックが完了すると、その完了が SQL Server…

0

SQL Server における分散トランザクション 1

  神谷 雅紀Escalation Engineer     分散トランザクション 分散トランザクションとは、複数のリソースマネージャーで実行されるトランザクションを、ひとつのトランザクションとして実行するトランザクションです。       リソースマネージャー リソースマネージャー (RM) とは、トランザクションによって更新されるデータを管理しているコンポーネントです。通常は、SQL Server や Oracle などのデータベース管理システムです。   トランザクションマネージャー トランザクションマネージャー (TM) とは、トランザクションを管理し、各リソースマネージャーに対してトランザクションに関する指示を出すソフトウェアコンポーネントです。SQL Server は、トランザクションマネージャーとして、Microsoft Distributed Transaction Coordinator (分散トランザクションコーディネーター / MS DTC) を使用します。   SQL Server における分散トランザクション実行時のソフトウェア構成 SQL Server やアプリケーションは、MS DTC Proxy を使用して MS DTC とのやり取りを行います。 最も一般的な形は次の図のように、それぞれの Windows で動作している MS DTC を使用して分散トランザクションを実行します。 尚、通常リソースマネージャは複数 (上図のように右側のサーバーが複数ある構成)…

0

照合順序 – 文字の比較と並び順 (その 2)

神谷 雅紀Escalation Engineer   照合順序 – 文字の比較と並び順 (その 1) では照合順序とは何かを書きました。今回は、照合順序に関わるいくつかの注意点について書きます。     照合順序の衝突   異なる照合順序が指定されている列同士は、比較することができません。 以下は、その簡単なサンプルです。   use mastergodrop database ja_90_bin2go— 照合順序 japanese_90_bin2 のデータベースを作成create database ja_90_bin2 collate japanese_90_bin2gouse ja_90_bin2go— 照合順序 japanese_90_bin2 のデータベースに japanese_90_ci_as と japanese_90_cs_as の列を持つテーブルを作成create table dbo.ja_90_cias (c1 int, c2 nvarchar(10) collate japanese_90_ci_as)create table dbo.ja_90_csas (c1 int, c2 nvarchar(10) collate japanese_90_cs_as)go— japanese_90_ci_as と japanese_90_cs_as…

0

照合順序 – 文字の比較と並び順 (その 1)

神谷 雅紀Escalation Engineer 照合順序が分かりにくいという意見がありましたので、今回は照合順序を取り上げます。        照合順序とは何か SQL Server では、文字の大小関係を比較する場合の基準を照合順序 (collation) と呼んでいます。例えば、「朝」と「海」ではどちらが大きいのか、「あ」「ア」「ア」を大きい順に並べた場合どのように並ぶのかといった、文字の大小関係を決めているのが照合順序です。 言語としての日本語の観点では、「朝」と「海」のどちらが大きくても、さほど問題にはならないように思えるかもしれません。しかし、もしこれらの文字に大小関係がなかったら、データを大きい順に並べても毎回違った並び順になる可能性があります。さらに、もしこれらの文字に大小関係がなかったら、大きくも小さくもないということになります。大きくも小さくもないということは、   if (a < b) …else if (a > b) …else …   の式で最後の else に入るということであり、そこに入るのは a = b の場合だけです。つまり、等しいということです。「朝」と「海」が等しいとなると、それは言語としての日本語でも問題となってきます。 このように、照合順序 (文字の大小関係) は、データを扱う処理にとっては、重要な要素です。 照合順序はどのような場面で使われるのか 文字の比較を行うすべての場面で使われます。 例えば、インデックスを作成する際には、キー列の値順にインデックス行を並び替えるために使われます。select … from … order by Col1 のようなクエリでデータを並び替える際にも使われます。select … from … group by Col1 のようなクエリでグルーピングを行う際にも使われます。また、if (@a = @b)…

1

SQL Server エージェントのジョブの結果をメール通知する方法

Microsoft SQL Server サポートチー 佐藤美菜 SQL Server の標準機能で、メンテナンス プランや SQL Server エージェント ジョブを利用して、定期的にバックアップを取得したり、ジョブを実行できます。「ついでに、SQL Server の標準機能でその結果をメール通知したいけれど、標準機能でできる?」というご質問をいただきます。 ジョブ管理ツールがなくても、SQL Server の標準機能で行えるメール通知方法がありますので、今回は具体的な設定方法をご案内します。 ※ SQL Server エージェントが提供されていない Express Edition では利用できません。その他のエディションでは利用可能です。   概要 メンテナンス プランや SQL Server エージェント ジョブの結果をメール通知するには以下の設定を行います。 データベース メールの構成 SQL Server エージェント のメール プロファイルの設定 オペレータの作成 ジョブ通知の設定 順番に設定する手順をご紹介します。 なお、通知されるメールの内容は決まっており、残念ながらカスタマイズできません。メールの文言を変更したいなどカスタマイズの要望がある場合は、サードパーティー製のツール等をお探しください。   1. データベース メールの構成 ( 1 ) SQL Server Management Studio(SSMS)…

0

FlushCache メッセージ

  神谷 雅紀Escalation Engineer     SQL Server 2012 以降では、以下のメッセージが Errorlog ファイルに記録されることがあります。今回はこのメッセージを解説します。   メッセージ   FlushCache: cleaned up 39907 bufs with 1628 writes in 74882 ms (avoided 30218 new dirty bufs) for db 5:0            average writes per second: 21.74 writes/sec average throughput: 4.15 MB/sec, I/O saturation: 3296, context switches 9000            last target outstanding: 153600, avgWriteLatency…

0