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

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

[若葉マークブログ] 第 3 回 : システム データベースとは

みなさん、こんにちは。若葉マークブログの第 3 回は、システム データベースについてお話したいと思います。 システム データベースとは、SQL Server が動作する上で必要なデータベースで、master、msdb、model、Resource、tempdb の5つのデータベースがあります。以下の表をご参照下さい。 また、SQL Server 2012 の既定のインスタンス (MSSQLSERVER) におけるデータベースを構成するファイルの既定の場所も記載しております。 データベース 説     明 master ≪含まれる情報≫SQL Server のシステム レベルの情報 ・ログオン アカウント ・エンドポイント ・リンク サーバー ・システム構成設定 など   SQL Server の初期化情報を記録するための情報 ・他のすべてのデータベースの管理情報 ・他のすべてのデータベースの場所   ≪バックアップの推奨タイミング≫ ・データベース作成後、変更後、削除後 ・サーバーまたはデータベースの構成値の変更後 ・ログオン アカウントの変更後、追加後   ≪物理ファイル 既定の場所≫ C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf   ≪備考≫…

0

SQL Database から Microsoft Azure 仮想マシン + SQL Server 環境 へのデータ移行方法について

  皆さん、こんにちは。SQL Server/Microsoft Azure SQL Database サポートチームです。今回のテーマは SQL Database から IaaS 環境へのデータ移行方法についてです。 Microsoft Azure SQL Database (以下 MASD) /Microsoft Azure 仮想マシン + SQL Server  (以下 SQL VM) をご利用いただいているお客様からよく頂くご質問の一つに、MASD から SQL VM へのデータ移行方法に関するものがあります。 当初は、MASD の使用した開発を検討していたが、SQL Server のフル機能を使用したいなど、開発途中で要件変更が発生し、別の環境にデータ移行を行う必要が出てくる可能性があると思います。 今回は、このような状況で役立つ、MASD から SQL VM へのデータ移行方法をご紹介します。   [前提条件] データ移行先の Microsoft Azure 仮想マシンに SQL Server がインストールされていることを前提にしています。   [事前準備] 1) Microsoft Azure…

0

Known Issue: Windows Server Backup / Windows Azure Backup が正常に実行できなくなる

清水 磨 (しみず おさむ) SQL Server Support Engineer 現象 Microsoft SQL Server Backup to Microsoft Azure Tool をインストールしている環境では、Windows Server Backup 時にエラーが発生し、正常にバックアップすることが出来なくなります。 また、Windows Azure 上の仮想マシンの場合、Windows Azure Backup が使用できなくなります。 バックアップに失敗した場合、以下のようなエラー メッセージが出力されます。 Windows Server Backupに失敗した場合: 出力されるエラー メッセージ 例 —————– 名前 C: メッセージ ボリュームをバックアップする操作は、操作の実行開始前に停止されました。 —————– アプリケーション ログには以下のように記録されます: —————————————————— ログの名前:         Application ソース:           Microsoft-Windows-Backup 日付:            2014/10/07 10:41:28 イベント ID:       521 タスクのカテゴリ:     …

0

[SQL Server/IaaS] 接続の暗号化に使用可能な証明書について

皆さん、こんにちは。 SQL Server/Windows Azure SQL Database サポートチーム の高原です。 今回は、SQL Server (Windows Azure 仮想マシン上の SQL Server 含む) への接続の暗号化 (SSL) に使用可能な証明書について紹介します。   まず初めに、SQL Server への接続の暗号化に使用可能な証明書には、以下のものがあります。   認証局 (CA) が発行した SSL 証明書 自己署名入り SSL 証明書   SQL Server では、起動時に自己署名入り SSL 証明書を自動的に作成しています。 そのため、証明書を明示的にインストールしなくとも、SQL Server がインストールされたサーバー上で SQL Server 構成マネージャ を起動し、SQL Server ネットワークの構成 – <インスタンス名> のプロトコル – 右クリック – プロパティ を開き、フラグ…

0

サーバー カーソル動作とクエリパフォーマンスとの関連性について

皆さん、こんにちは。 SQL Server/Windows Azure SQL Database サポートチームの 高原 です。 今回は、サーバー カーソル (Transact-SQL カーソル) の動作とクエリパフォーマンスとの関連性について説明します。   SQL Server では、以下の 4 種類の サーバー カーソル をサポートしています。 静的カーソル (STATIC) キーセット ドリブン カーソル (KEYSET) 動的カーソル (DYNAMIC ) 順方向専用カーソル (FAST_FORWARD)   各カーソルの動作 (特徴) について簡単に説明します。   静的カーソル (STATIC) ・カーソル宣言 (DECLARE CURSOR) 時に指定したクエリ結果セットを、TempDB 上の 一時テーブル に保存 ・フェッチ (FETCH) 時に、FIRST、LAST、RELATIVE などのフェッチ動作が使用可能 ・取得した結果セットの行の値がカーソル処理中に更新された場合でも、変更は結果セットに反映されない   キーセット…

0