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

Windows Azure の仮想マシンで実行する SQL Server Reporting Services の構築手順

山崎 実久 SQL Developer Support Engineer Windows Azure に格納されたレポート定義言語 (RDL) レポートの実行と表示を提供するサービスである SQL レポートは、2014年10月31日にサービスの提供が中止されます。 SQL レポートを今までお使いのお客様は、Windows Azure の仮想マシン上で動作する SQL Server Reporting Services にレポートの移行をお願いいたします。 Windows Azure の仮想マシンの作成手順や、仮想マシン上での SQL Server Reporting Services (SSRS) の構築手順を下記構成でお伝えいたします。 ————————————— (A). Windows Azure の仮想マシンの作成 (B). 仮想マシン上での SQL Server Reporting Services の構築 (C). 仮想マシンへのエンドポイントの追 (D). 仮想マシンのファイアウォールのポートの解放 (E). Report Server のサイトへのアクセス可否の確認 ————————————— (A). Windows Azure…

0

統計情報更新処理をキャンセルした場合の動作

神谷 雅紀 Escalation Engineer インデックスの再構築や再構成を実行中にキャンセル (中断) した場合については、インデックス再構築と再構成の違いで触れていますが、統計情報を更新している最中に処理をキャンセルした場合はどうなるのかといった質問がありましたので、今回は、統計情報の更新処理をキャンセルした場合の動作について説明します。 ※ 以下の動作は SQL Server 2012 のものです。基本的には他のバージョンでも同じであると思われますが、明示的な確認は行っていません。   統計情報更新をキャンセルした場合の動作 統計情報の更新は、各統計情報ごとにひとつのトランザクションとして実行されます。ある統計情報を更新している最中にキャンセル (中断) した場合には、その統計情報を更新しているトランザクションも中断され、ロールバックされます。結果として、統計情報は更新前の状態に戻ります。 この動作は、拡張イベントの transactions.sql_transaction や SQL Trace の SQL Transaction イベントで確認することができます。     UPDATE STATISTICS ステートメントの場合 UPDATE STATISTICS は、個々の統計情報を指定して実行することも、テーブルを指定して実行することもできます。テーブルを指定して実行した場合には、そのテーブルに属するすべての統計情報が更新されます。 テーブル名のみを指定した UPDATE STATISTICS の実行をキャンセルした場合のキャンセル後の状態は、キャンセルよりも前に更新が完了している統計情報については更新後の状態、キャンセル時点で更新中であった統計情報、および、まだ更新が開始されていなかった統計情報は、更新前の状態になります。 テーブル名のみではなく統計名またはインデックス名も指定して実行した場合には、UPDATE STATISTICS をキャンセルすると、統計情報は更新前の状態に戻ります。 ただし、キャンセルが、統計情報更新トランザクションは完了しているものの、UPDATE STATISTICS ステートメントはまだ完了していないタイミングになることもありえます。その場合は、UPDATE STATISTICS をキャンセルしても統計情報は更新された状態になります。     統計情報の自動更新の場合 自動更新の場合も UPDATE STATISTICS の場合と同様に、統計情報更新トランザクションが実行されている最中にキャンセルした場合には、トランザクションはロールバックされ、更新前の状態に戻ります。 自動更新の場合は、明示的に…

0