Quantcast
Channel: Microsoft SQL Server Japan Support Team Blog
Viewing all 293 articles
Browse latest View live

Troubleshooting Connectivity #9 –ローカル接続でネットワーク エラーとはこれいかに?

0
0

 

高橋 理香

SQL Developer Support Escalation Engineer

みなさん、こんにちは。

皆さんの疑問にお答えするブログを書きたいと思い早数年、今回は時々お問い合わせされる方が声にされる「SQL Server が稼動している環境上のほかのアプリケーションやツールから接続した場合にもネットワーク エラーが発生するのはなぜ?」について、その接続の仕組みなどを説明したいと思います。

前提: ローカル接続でトランスポートネットワークエラーが発生する事象について疑問があるとはどういうこと?

まず、以下の2つの図を比べてみましょう。

image

図1 ではクライアント マシン CLIENT01 上の SQL Server Management Studio (以降、SSMS) から物理的にネットワークの回線を介してリモート マシン SERVER01 上で動作する SQL Server に接続するイメージです。接続でエラーが発生するということは、接続のリクエストとその完了の通信経路上で遅延や障害があった場合に生ずるため、図1 のパターンにおいてネットワークに起因した問題があればネットワーク通信におけるエラーが返される可能性があるということは容易に想像できますね。

それでは図2 はいかがでしょう。サーバー マシン SERVER01 上で SSMS を起動し、同じ SERVER01 上で動作する SQL Server に接続するイメージです。この場合、物理ネットワーク回線を介さないはずです。それにもかかわらずネットワーク層のエラーが発生することがある、これが「ローカル接続なのにネットワーク エラーが発生するのはなぜ?」という疑問です。

実際にどちらの構成であっても次のようにネットワークに問題があるようにも見えるエラーが発生します。

SERVER01 に接続できません。 ADDITIONAL INFORMATION:

SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: TCP Provider, error: 0 – リモート コンピューターによりネットワーク接続が拒否されました。) (Microsoft SQL Server、エラー: 1225)

リモート コンピューターによりネットワーク接続が拒否されました。

SQL Server への接続の仕組み

SSMS 等のアプリケーションやツールから SQL Server までにはどのように接続のリクエストが処理されるのでしょうか。Troubleshooting Connectivity #1 で説明したように、SQL Server に接続する場合には最初に OS レベルのセッションを確立する必要があります。たとえば TCP/IP プロトコルを使った接続の場合には、TCP/IP のセッションを確立します。そこで、SSMS から SQL Server に TCP/IP セッションを確立する仕組みを例にあげてみましょう。

SSMS は主に .NET Framework で開発されたアプリケーションであり、最初のダイアログにおける接続では内部的に .NET Framework Data Provider for SQL Server (System.Data.SqlClient) を使用しています。System.Data.SqlClient では SQL Server との通信を行う処理を SQL Server Network Interface (SNI) 層で管理しており、この SNI 層では OS レベルのセッションの確立やログイン処理などを Windows OS で利用可能な Windows Sockets (Winsock 関数) を利用して実現しています。たとえばダイアログからの接続時には SqlConnection.Open というメソッドを呼び出しますが、このメソッドが呼ばれると SNI 層では Winsock の connect 関数を呼び出すことになります。そして、SNI 層ではこの connect 関数の結果を踏まえ、次のログイン処理へ進むか、エラーとして処理するかなどの判断、および、必要な処理を行います。

では、「SSMS から TCP/IP プロトコルを使用して SQL Server に接続する」という動作に関して、リモート接続時とローカル接続時で違いはあるのでしょうか。

基本的な違いはありません。接続先がリモートであってもローカルであっても、SNI 層では Winsock 関数を呼び出し、接続処理を行います。正確には、SNI 層では接続に使用するプロトコルを選択する機能も持つため、接続先がローカルの場合には特にプロトコル指定がない限り共有メモリ プロトコルを使用するなど、接続先がローカルかリモートかの判別は行っています (*)。しかし、それでも Winsock 関数を呼び出す点に違いはありません。そのため、Winsock 関数による通信上の問題があると判断される限り、それはネットワーク層におけるエラーとして扱われます。これがローカルでもネットワーク関連のエラーがあるとメッセージとして表面化する理由です。

なお、上記動作は ODBC ドライバーや OLE DB プロバイダーでも同様です。MDAC や Windows DAC に含まれる ODBC ドライバー等では SNI ではなく、ネットワーク ライブラリと呼ばれていましたが、基本的に同様の仕組みとなっています。

// (*) 補足 – クラスタ環境のローカル接続

接続先がローカルかリモートかは接続文字列に指定した接続先サーバー名が現在そのプロセスが動作しているホスト名と同一かどうかによって判断しています。SNI 層では同一であると判断した場合に共有プロトコルを優先的に使用し、接続試行します。クラスタ環境の場合には、接続先はクラスタ名\インスタンス名となり、稼動ノード名とは異なるため、ローカルであるとは判断されません。そのため、ローカル接続でも TCP/IP もしくは名前付きパイプが使用されます。

ローカル接続失敗の一般的な原因

基本的には Troubleshooting Connectivity #2 で説明した主な原因と同一です。ただし、ローカル接続の OS レベルのセッション確立においてはネットワーク インターフェース カード (NIC) の外に通信が及ぶことはない (*) ため、ネットワーク負荷などの物理ネットワーク回線に関する要因が除外されます。

過去のお問い合わせでローカル接続失敗の要因として多いのはやはりサーバーの高負荷ですが、このような負荷が高い場合においては、同一マシン上で動作するプロセスの優先度に差がある (sqlservr.exe が高でアプリケーション プロセスが通常、もしくは、sqlservr.exe は通常でアプリケーション プロセスが低) 場合において、優先度により CPU をすぐに利用できずに待たされることで、接続のリクエストに遅延が生じ、タイムアウトするというケースがあります。負荷が高い場合にバッチ処理で接続タイムアウトが発生するようなケースがあったら、優先度の設定を確認してみてはいかがでしょう。

 

// (*) 補足 – ローカル接続での NIC 外への通信

セッション確立後のログイン認証においては、Windows 認証のために Active Directory への問い合わせが必要となります。Windows 認証の場合に接続タイムアウト エラーが発生し、SQL Server 認証では発生しない場合には、ネットワーク通信遅延が疑われます。SQL Server のセキュリティ設定で SQL Server 認証を許容している場合には切り分けとして試してみるとよいでしょう。

 

 

ローカル接続におけるネットワーク関連エラーについて参考になりましたでしょうか。少しでもイメージいただけたならうれしいです。

過去の Troubleshooting Connectivity シリーズはこちら。 Troubleshooting Connectivity #1 – SQL Server への接続

Troubleshooting Connectivity #2 – エラー情報からわかる失敗原因

Troubleshooting Connectivity #3 – 予期しない接続切断

Troubleshooting Connectivity #4 – 接続エラーの調査方法

Troubleshooting Connectivity #5 – セッション確立までの動作

Troubleshooting Connectivity #6 – 接続タイムアウトは悪なのか?

Troubleshooting Connectivity #7 – 接続タイムアウトエラーまでの時間は?

Troubleshooting Connectivity #8 – エラー番号からわかる接続失敗原因:エラー 26

clip_image001


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

0
0

 

神谷 雅紀
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 側 MS DTC に通知され、それはアプリケーション側 MS DTC にも通知されます。

8-4) アプリケーション側 MS DTC から アプリケーションに対して、ロールバックの完了が通知されます。

 

 

 

9) 分散トランザクションの例外フロー

 

a) MS DTC が停止した場合

 

MS DTC proxy と MS DTC との間の接続が途切れると、実行中のトランザクションが準備状態ではない場合には、MS DTC proxy は SQL Server に対してトランザクションの中断を要求します。

トランザクションが準備完了状態にある場合、MS DTC proxy は MS DTC との接続が途切れたことを SQL Server に通知します。SQL Server は、この通知を受けると、復旧プロセスを開始します。このプロセスは、MS DTC との接続が回復するまで繰り返し行われます。MS DTC との接続が回復し、トランザクションの結果 (コミットまたはロールバック) を受け取れるまでの間、トランザクションは in-doubt 状態となります。

MS DTC との接続が回復できた場合、SQL Server は同じリソースマネージャー ID を MS DTC に渡しますので、MS DTC は、自身が停止する前と同じリソースマネージャーが復帰してきたことを認識します。SQL Server は、トランザクション状態に関する情報を取得し、トランザクションに再参加します。その後、取得したトランザクションの結果がコミットであれば、in-doubt 状態のトランザクションをコミットし、ロールバックであればロールバックします。

MS DTC との接続が回復できず、トランザクションがどうなったのか判断できない状態に陥った場合、そのトランザクションを完了させるためには、データベースを再起動する必要があります。データベース再起動時にトランザクションをどのようにするかは、sp_configure ‘in-doubt xact resolution’ の設定により異なります。

 

in-dout xact resolution

データベース起動時の動作

0

トランザクションの結果が不明な場合、データベース復旧は失敗し、データベースはアクセス不可となります。

1

トランザクションの結果が不明な場合、トランザクションはコミットされます。

2

トランザクションの結果が不明な場合、トランザクションはロールバックされます。

 

 

 

 

b) SQL Server が停止した場合

 

SQL Server が一旦停止し、その後復帰すると、SQL Server が起動する際には、改めて MS DTC との接続が確立されます。MS DTC は、リソースマネージャー ID により同じリソースマネージャーが復帰してきたことを認識します。SQL Server は中断されていたトランザクションがあれば、そのトランザクションに再度エンリストし、トランザクションの結果に従い、ロールバックまたはコミットします。

[Azure Stream Analytics] Azure Stream Analytics の IoT Hub の入力で指定する消費者グループ (コンシューマーグループ) の作成方法

0
0

BI Data Platform (SQL Server) Support Team 山崎実久

– Azure Stream Analytics とは?


Azure Stream Analytics は、デバイスやセンサーから出力される JSON 形式のデータをリアルタムで処理し、Azure SQL Database への保存や、Power BI でグラフ化などできるサービスです。サーバーの準備や管理は必要なく、Azure Portal 上の Stream Analytics のサービスでジョブを作成し、Input と Output の設定と、SQL Like な集計処理を行うクエリを設定後、ジョブを開始するだけで利用できます。指定した Input に流れてくる (Stream) データを分析 (Analytics) し、指定した Output へ出力することができます。詳細は Stream Analytics とは を参照ください。


– Azure Stream Analytics の IoT Hub の入力で利用する消費者グループ (コンシューマグループ) の作成


IoT Hub のデータの受信や配信は、消費者グループ(コンシューマグループ)を介して行われます。このコンシューマグループを正しく作成し利用しないと Stream Analytics で指定した Output にデータが出力されません。

Stream Analytics を利用した IoT Hub からの データ出力に関して、サポートによくあるお問い合わせとして、Stream Analytics の Input の設定で新規作成したコンシューマグループが選べないとか、選べないので手動で指定して Stream Analytics のジョブを動かしたが Output が得られないなどがあります。いずれも下記画面キャプチャー Fig2 の [Endpoints] – [Events] からコンシューマグループを作成していない場合に発生する問題です。

既定では以下のように Azure Stream Analytics の IoT Hub の Input にて $Default のコンシューマグループが利用可能です。このコンシューマグループを利用すれば、Output に処理したデータを出力することができます。


image

Fig1. 既定のコンシューマグループ $Default

 

一方で、別のコンシューマグループを作成し利用したい場合は、以下の画面キャプチャー Fig2 のように Azure Portal の IoT Hub のサービスから [Endpoints] – [Events] を選択後、Consumer groups にて、新しいコンシューマグループを指定し、上記 Fig1 の Azure Stream Analytics の IoT Hub の Input にて、 コンシューマグループのプルダウンメニューから、新しく作成したコンシューマグループを選択します。

image

Fig2. IoT Hub のコンシューマグループの新規作成

 

※ 本ブログの内容は、2017 年 4 月時点の情報です。
以上です。お役に立てたら幸いです。

Temporary Post Used For Theme Detection (02ea3c96-ecb1-4e02-a669-c005cb0897d3 – 3bfe001a-32de-4114-a6b4-4005b770f6d7)

0
0

This is a temporary post that was not deleted. Please delete this manually. (5ce68e36-6a4f-4cb2-8c78-c2f596215f98 – 3bfe001a-32de-4114-a6b4-4005b770f6d7)

2017 年 1 月 SQL Server 最新モジュール

0
0

2017 年 1月 19日 時点の SQL Server 最新モジュールです。

SQL Server 2005 は 2016 年 4 月 12 日に延長サポートが終了しました。長らくのご愛用ありがとうございました。
SQL Server 2008 は 2014 年 7 月 8 日にメインストリームサポートが終了しました。

サービス
パック

更新プログラム

バージョン

リリース年月

SQL Server 2016

SP1

KB 3208177 (CU1)

13.0.4411.0

2017/1
メインストリームサポート

SQL Server 2014

SP2

KB 3204388 (CU3)

12.0.5538.0

2016/12
メインストリームサポート

SQL Server 2012

SP3

KB 3205051 (CU7)

11.0.6579.0

2017/1
メインストリームサポート

SQL Server 2008 R2

SP3

無し

10.50.6000.0

2014/9
延長サポート
※2014年7月8日にメインストリームサポートが終了しました。

SQL Server 2008

SP4

無し

10.0.6000.0

2014/10
延長サポート
※2014年7月8日にメインストリームサポートが終了しました

 

RTM : Release To Manufacturing (製品出荷版)
SP : Service Pack (サービスパック)
CU : Cumulative Update (隔月リリースの累積更新プログラム)
OD : On-Demand (オンデマンドリリースの累積更新プログラム)

SQL Server の更新プログラムの詳細については、SQL Server の更新プログラムを参照して下さい。

メインストリームサポート、延長サポートについては、マイクロソフトサポートライフサイクルを参照して下さい。

Temporary Post Used For Theme Detection (02ea3c96-ecb1-4e02-a669-c005cb0897d3 – 3bfe001a-32de-4114-a6b4-4005b770f6d7)

0
0

This is a temporary post that was not deleted. Please delete this manually. (5ce68e36-6a4f-4cb2-8c78-c2f596215f98 – 3bfe001a-32de-4114-a6b4-4005b770f6d7)

2017 年 1 月 SQL Server 最新モジュール

0
0

2017 年 1月 19日 時点の SQL Server 最新モジュールです。

SQL Server 2005 は 2016 年 4 月 12 日に延長サポートが終了しました。長らくのご愛用ありがとうございました。
SQL Server 2008 は 2014 年 7 月 8 日にメインストリームサポートが終了しました。

サービス
パック

更新プログラム

バージョン

リリース年月

SQL Server 2016

SP1

KB 3208177 (CU1)

13.0.4411.0

2017/1
メインストリームサポート

SQL Server 2014

SP2

KB 3204388 (CU3)

12.0.5538.0

2016/12
メインストリームサポート

SQL Server 2012

SP3

KB 3205051 (CU7)

11.0.6579.0

2017/1
メインストリームサポート

SQL Server 2008 R2

SP3

無し

10.50.6000.0

2014/9
延長サポート
※2014年7月8日にメインストリームサポートが終了しました。

SQL Server 2008

SP4

無し

10.0.6000.0

2014/10
延長サポート
※2014年7月8日にメインストリームサポートが終了しました

 

RTM : Release To Manufacturing (製品出荷版)
SP : Service Pack (サービスパック)
CU : Cumulative Update (隔月リリースの累積更新プログラム)
OD : On-Demand (オンデマンドリリースの累積更新プログラム)

SQL Server の更新プログラムの詳細については、SQL Server の更新プログラムを参照して下さい。

メインストリームサポート、延長サポートについては、マイクロソフトサポートライフサイクルを参照して下さい。

2017 年 4月 SQL Server 最新モジュール

0
0

2017 年 4月 18日 時点の SQL Server 最新モジュールです。

SQL Server 2005 は 2016 年 4 月 12 日に延長サポートが終了しました。長らくのご愛用ありがとうございました。
SQL Server 2008 は 2014 年 7 月 8 日にメインストリームサポートが終了しました。

サービス
パック

更新プログラム

バージョン

リリース年月

SQL Server 2016

SP1

KB 4013106 (CU2)

13.0.4422.0

2017/3
メインストリームサポート

SQL Server 2014

SP2

KB 4013098 (CU5)

12.0.5546.0

2017/4
メインストリームサポート

SQL Server 2012

SP3

KB 4013104 (CU8)

11.0.6594.0

2017/3
メインストリームサポート

SQL Server 2008 R2

SP3

無し

10.50.6000.0

2014/9
延長サポート
※2014年7月8日にメインストリームサポートが終了しました。

SQL Server 2008

SP4

無し

10.0.6000.0

2014/10
延長サポート
※2014年7月8日にメインストリームサポートが終了しました

 

RTM : Release To Manufacturing (製品出荷版)
SP : Service Pack (サービスパック)
CU : Cumulative Update (隔月リリースの累積更新プログラム)
OD : On-Demand (オンデマンドリリースの累積更新プログラム)

SQL Server の更新プログラムの詳細については、SQL Server の更新プログラムを参照して下さい。

メインストリームサポート、延長サポートについては、マイクロソフトサポートライフサイクルを参照して下さい。


Azure Preview (プレビュー) 機能 のサポートについて

0
0

 

皆さん、こんにちは。 BI Data Platform サポートチーム です。

※ BI Data Platformサポートチーム では、Microsoft SQL Server/Azure SQL Database/BI Azure などの製品をサポートしています。

Azure では、Preview (プレビュー) 機能が存在し、最新の機能をいち早く公開しています。

しかしながら、Preview (プレビュー) 機能を使用するうえで、次の点にご注意ください。

 

1) サービス レベル契約 および 限定的保証の対象とはならない

2) 限定的なサポート (英語のみ もしくは、フォーラムのみ など)

 

1) については、Preview (プレビュー) 機能を使用し、該当の機能が正常に動作しない状況となったとしても、サービス レベル契約 (SLA) の対象とならないため、返金の対象にはなりません

また、該当の Preview (プレビュー) 機能が正常に動作しない状態となったとしても、該当機能が使用できる状態に復旧させるために、多くの時間を頂く可能性があります。

 

また、2) については、基本的に  Preview (プレビュー) 機能に関しては、日本語 (ローカル 言語) でのお問い合わせをお受けしておりません。

しかしながら、一部の機能を除き、英語によるお問い合わせ、もしくは、フォーラムへの投稿にて、Preview (プレビュー) 機能に関する質問が可能です。

 

[英語によるお問い合わせを起票する場合]

質問内容を 英語 で記載し、連絡先情報の言語を “English” に変更し、連絡先を入力したうえで、”作成” ボタンを選択します。

 

image

 

[フォーラムに投稿する場合]

1)  以下の URL にアクセスし、”Ask a question” ボタンを選択します。

Developer Network 

https://social.msdn.microsoft.com/Forums/en-US/home?forum=windowsazureplatform%2Cazuremarketplace%2Cwindowsazureplatformctp

 

2)  Language、Forum category、質問内容を記載し、”Submit” ボタンを選択します。

※ 英語で内容を記載して頂くことにより、より多くの情報を得ることができる可能性があります。

image

 

なお、 現時点における SQL 関連の Preview (プレビュー) 機能としては、以下のようなものがあります。

Preview (プレビュー) 機能

サポート状況

Azure Database for MySQL

英語のみ もしくは、フォーラム

Azure Database for PostgreSQL

英語のみ もしくは、フォーラム

フェールオーバー データベース グループ

(Azure SQL Database)

英語のみ もしくは、フォーラム

SQL Data Sync

英語のみ もしくは、フォーラム

 

 

Preview (プレビュー) 機能の詳細については、以下の参考情報を参照下さい。

 

[参考情報]

 

プレビュー機能

https://azure.microsoft.com/ja-jp/services/preview/

 

Azure SQL Database now supports transparent geographic failover of database groups

https://azure.microsoft.com/en-us/blog/azure-sql-database-now-supports-transparent-geographic-failover-of-multiple-databases-featuring-automatic-activation/

 

Microsoft Azure の法的情報

https://azure.microsoft.com/ja-jp/support/legal/

 

Microsoft Azure プレビューの追加使用条件

https://azure.microsoft.com/ja-jp/support/legal/preview-supplemental-terms/

 

※ 本Blogの内容は、2017年5月現在の内容となっております。

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

0
0

 

皆さん、こんにちは。 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

イベントID:489

内容:

   “sqlservr (2032) 読み取るためにファイル “”C:\Windows\system32\LogFiles\Sum\Api.log”” を開こうとしましたが、システム エラー 5 (0x00000005): “”アクセスが拒否されました。 “” が発生したため開けませんでした。ファイルを開く処理は、エラー -1032 (0xfffffbf8) のため失敗します。”

ソース:ESENT

イベントID:490

内容:

   “sqlservr (2032) 読み取りまたは書き込みのためにファイル “”C:\Windows\system32\LogFiles\Sum\Api.chk”” を開こうとしましたが、システム エラー 5 (0x00000005): “”アクセスが拒否されました。 “” が発生したため開けませんでした。ファイルを開く処理は、エラー -1032 (0xfffffbf8) のため失敗します。”

 

[対処方法]

今回のイベントID 455/489/490 が発生したとしても、SQL Server の機能に全く影響を及ぼさないため、無視して問題ありません。

しかしながら、本イベントの発生を回避したい場合は、SQL Server サービス起動アカウントに “C:\Windows\system32\LogFiles\Sum” 配下への読み取り/書き込み権限を付与することで、イベントID 455/489/490 の発生を回避することが可能です。

1) Windows エクスプローラーから、”C:\Windows\system32\LogFiles\Sum” フォルダのプロパティを開きます。

2) [セキュリティ] タブより、[編集] ボタンをクリックします。

3) [追加] ボタンより、以下を指定し、[名前の確認] をクリックし、該当する名前を選択し、[OK] を押します。

[例] SQL Server サービスアカウントに対して権限を付与する場合

オブジェクトの種類 : ユーザー、グループまたはビルトイン セキュリティ プリンシパル

場所 : 該当のコンピューター名 ※ 一覧の中の一番上に表示されます

選択するオブジェクト名を入力してください : SQL Server サービスアカウント (既定の場合 NT Service\MSSQLSERVER)

4) 追加したアカウントに、”アクセス許可”より、”読み取り”/”書き込み”/”変更” を許可します。

 

[参考情報]

Error 1032 messages in the Application log in Windows Server 2012

https://support.microsoft.com/ja-jp/help/2811566/error-1032-messages-in-the-application-log-in-windows-server-2012

 

また、SQL Server サービス起動アカウントに “C:\Windows\system32\LogFiles\Sum” 配下への読み取り/書き込み/変更権限を付与したとしても、イベントID 413/486 が発生する場合があることが報告されています。

 

ソース:ESENT

イベントID:413

内容:

  sqlservr (1836) そのデータベースをログ用のドライブに書き込めないため、新しいログ ファイルを作成できません。ドライブが読み取り専用になっているか、

ディスク領域が不足しているか、誤った構成がされているか、または壊れている可能性があります。エラー -1032 が発生しました。

ソース:ESENT

イベントID:486

内容:

  sqlservr (1836) システムエラー 5 (0x00000005): “アクセスが拒否されました。 ” が発生したため、ファイル “C:\Windows\system32\LogFiles\Sum\Apitmp.log” を

“C:\Windows\system32\LogFiles\Sum\Api.log” に移動できませんでした。

ファイルの移動処理は、エラー -1032 (0xfffffbf8) のため失敗します。

 

イベント ID 413、486 は、ESENT (Windows に標準搭載されたデータべース) がトランザクション ログとして使用していた Api.log が一杯になったため、あらかじめ用意されている Apitmp.log のファイル名を Api.log に変更しようとしたものの、それに失敗したことを示しています。

そして、イベント ID 413 は、新しいログファイルを使用できなかったことを示しており、その原因がイベント ID 486 で示されている error -1032 (0xfffffbf8) です。

このエラーコード「error -1032 (0xfffffbf8)」は、アクセス権が不足しているか、もしくは、ファイルが他のプロセス (ウィルス対策ソフト) などによってロックされていることでアクセスできなかったことを示します。

なお、イベント ID 413/486 は、イベントID 455/489/490 と同様に、発生したとしても、SQL Server の機能に全く影響を及ぼさないため、無視して問題ありません。

そのため、SQL Server サービス起動アカウントに “C:\Windows\system32\LogFiles\Sum” 配下への読み取り/書き込み/変更権限を付与している場合においても、イベント ID 413、486 が発生する場合は、本イベントを無視下さい。

 

[補足]

SQL Server Analysis Services (Msmdsrv.exe) においても、同様の現象が発生することが確認できております。

そして、イベント ID 413/486/455/489/490 の現象を回避したい場合は、SQL Server Analysis Services に指定された サービス起動アカウントに、“C:\Windows\system32\LogFiles\Sum” フォルダ配下に対する読み取り、書き込み、変更権限を付与することで回避可能です。

なお、SQL Server サービスと同様に、イベント ID 413/486/455/489/490 が発生したとしても、SQL Server Analysis Services の機能に全く影響を及ぼさないため、無視して問題ありません。

 

※ 本Blogの内容は、2017年5月 現在の内容となっております。

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

0
0

 

みなさん、こんにちは。

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

 

  1. テーブルを作成します。
CREATE TABLE Membership  

  (MemberID int IDENTITY PRIMARY KEY,  

   FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,  

   LastName varchar(100) NOT NULL,  

   Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,  

   Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);  

 

  1. データを挿入します。
INSERT Membership (FirstName, LastName, Phone#, Email) VALUES   

   ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com'),  

   ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co'),  

   ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net');

 

  1. 作成者の権限で SELECT すると通常の結果を得られます。
SELECT * FROM Membership;  

出力結果

MemberID    FirstName                      LastName                       Phone#       Email 

----------- ------------------------------ ------------------------------ ------------ ------------------------------ 

1           Roberto                        Tamburello                     555.123.4567 RTamburello@contoso.com 

2           Janice                         Galvin                         555.123.4568 JGalvin@contoso.com.co 

3           Zheng                          Mu                             555.123.4569 ZMu@contoso.net 

(3 行処理されました)

 

  1. SELECT の権限だけを与えたユーザーを作ります。
CREATE USER TestUser WITHOUT LOGIN;  

GRANT SELECT ON Membership TO TestUser;

 

 

  1. 動的データマスキングが有効であることを確認します。
EXECUTE AS USER = 'TestUser';  

SELECT * FROM Membership;  

REVERT; 

出力結果

MemberID    FirstName                      LastName                       Phone#       Email 

----------- ------------------------------ ------------------------------ ------------ ------------------------------ 

1           RXXXXXXX                       Tamburello                     xxxx         RXXX@XXXX.com 

2           JXXXXXXX                       Galvin                         xxxx         JXXX@XXXX.com 

3           ZXXXXXXX                       Mu                             xxxx         ZXXX@XXXX.com 

(3 行処理されました)

 

 

  • 例1. カーソルを使った場合

出力結果で、2行目のデータが match となることを期待してしまうかもしれませんが、マスク後の値で比較されるので unmatch になります。

 

EXECUTE AS USER = 'TestUser';  

declare @Email nvarchar(200) 

declare Cur cursor for 

  SELECT TOP (1000) Email 

  FROM Membership 

open Cur 

fetch next from Cur 

into @Email 

while @@FETCH_STATUS = 0 

begin           

        if @Email = 'JGalvin@contoso.com.co' 

        begin 

                print @Email + N' mutch' 

        end 

        else 

                print @Email + N' unmatch' 

        fetch next from Cur 

        into @Email 

end 

close Cur 

deallocate Cur 

REVERT; 

出力結果

RXXX@XXXX.com unmatch 

JXXX@XXXX.com unmatch 

ZXXX@XXXX.com unmatch

 

  • 例2. 取得した値をクエリ内で置き換えた場合

 

比較はマスク前の値で行われていますが、置き換えられた値はマスクされます。

EXECUTE AS USER = 'TestUser';  

SELECT FirstName 

      ,Email 

          ,matching = 

                CASE [Email] 

                WHEN 'JGalvin@contoso.com.co' 

                  THEN N'match' 

                  ELSE N'unmatch', 

        END 

  FROM Membership; 

REVERT; 

出力結果

FirstName                      Email                          matching 

------------------------------ ------------------------------ -------- 

RXXXXXXX                       RXXX@XXXX.com                  uXXX@XX 

JXXXXXXX                       JXXX@XXXX.com                  mXXX@XX 

ZXXXXXXX                       ZXXX@XXXX.com                  uXXX@XX 

(3 行処理されました)

 

IIFでも同様です。

EXECUTE AS USER = 'TestUser';  

SELECT FirstName 

      ,Email 

      ,matching = 

            IIF ( [Email] = 'JGalvin@contoso.com.co' 

                  , N'match' 

                  , N'unmatch') 

       FROM Membership; 

REVERT; 

出力結果

FirstName                      Email                          matching 

------------------------------ ------------------------------ -------- 

RXXXXXXX                       RXXX@XXXX.com                  uXXX@XX 

JXXXXXXX                       JXXX@XXXX.com                  mXXX@XX 

ZXXXXXXX                       ZXXX@XXXX.com                  uXXX@XX 

(3 行処理されました)

 

 

  • 最後に

 

動的データマスキングは上手に使っていただくことで開発やメンテナンスのコストを大きく削減できる機能になります。

しかしながら、公開情報にもありますように単体でセキュリティを確保するような機能ではないため、適切な機能や実装と連携し、実際のご利用にあたっては、十分な検証の上、ご利用ください。

 

動的データ マスクの目的は、アクセスすべきではないユーザーがデータを閲覧することを防ぎ、デリケートなデータの公開を制限することにあります。

動的データ マスクは、ユーザーが直接データベースに接続し、徹底的なクエリを実行して、デリケートなデータの漏えいを防ぐことを目的としてはいません。

動的データ マスクは、その他の SQL Server セキュリティ機能 (監査、暗号化、行レベルのセキュリティなど) を補完します。

データベース内のデリケートなデータの保護をより強化するために、セキュリティ機能と連携して動的データ マスクを使用することをお勧めします。

 

※ 本情報の内容 (添付文書、リンク先などを含む) は、作成日時点のものであり、予告なく変更される場合があります。あらかじめご了承ください。

タイトル:Azure 仮想マシン上に作成した SQL Server の日本語化手順(SQL Server 2012 , 2014 対応手順)

0
0

Microsoft SQL Server/Microsoft Azure SQL Database サポート

田中 真人

 

 

皆さん、こんにちは。 Microsoft SQL Server/Microsoft Azure SQL Database サポートチーム です。

日ごろから、Azure サービスをご愛顧頂き誠にありがとうございます。

 

今回は、日々のサポート業務において、比較的お問合せをいただく、Azure 仮想マシン上に作成した SQL Server の日本語化手順について記載致します。

Azure ギャラリーイメージより、SQL Server が含まれた仮想マシンをデプロイすることが可能ですが、現在は英語版のみの提供となっています。

その為、日本語でSQL Server をご利用頂くには、SQL Server を以下の手順にて日本語化する必要があります。

 

※SQL Server 2016 の日本語化手順は以下の BLOG をご確認ください。

<UP後に添付予定>

 

尚、本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でものであり、予告なく変更される場合があります。予めご了承ください。

—————
注意:Azure 仮想マシンおよび SQL Server を日本語化するには、SQL Server のアンインストール、再インストール作業が必要になります。

しかしながら、SQL Server IaaS Agent 拡張機能は、既定でインストールされている英語の SQL Server でのみで使用出来る機能となり、日本語化いたしますと動作致しません。

SQL Server の自動修正機能、自動バックアップ機能や、Azure Key Vault 統合の機能に関して、ポータルから設定できなくなるためご注意ください。

—————

 

大まかな流れは以下の通りです。以下ではSQL Server 2014を例にご説明いたしますが、SQL Server 2012でも手順はほぼ変わりません。

*******************************************

A. SQL Server IaaS Agent 拡張機能のアンインストール

B. SQL Server のアンインストール

C. OSのロケール設定を日本語に変更

D. 日本語のSQL Server 2014 Evaluation Editionを用いて、日本語版のSQL Server をインストール

*******************************************

 

順にご説明致します。

 

A. SQL Server IaaS Agent 拡張機能のアンインストール

==========================================================

1. Azure 仮想マシンのメニュー一覧から、[拡張機能] を選択します。

2. 一覧から SQL IaaS Extension を確認し、右端 [・・・] を選択し、アンインストールを選択します。

clip_image001

<図1.SQL Server IaaS Agent 拡張機能のアンインストール>

 

B SQL Server のアンインストール

==========================================================

以下のURLに従い、既存の英語版SQL Server をアンインストールします。

 

◆SQL Server の既存のインスタンスのアンインストール (セットアップ)

https://msdn.microsoft.com/ja-jp/library/ms143412(v=sql.120).aspx

–サイト内、一部抜粋–

1. アンインストール プロセスを開始するには、コントロール パネルで [プログラムと機能] をクリックします。

2. [Microsoft SQL Server 2014] を右クリックし、[アンインストール] を選択します。次に、[削除] をクリックします。これにより、SQL Server インストール ウィザードが起動します。

セットアップサポート ルールが実行され、コンピューターの構成が確認されます。続行するには、[次へ] をクリックします。

3. [インスタンスの選択] ページのドロップダウンボックスを使用して、削除する SQL Server インスタンスを指定するか、SQL Server の共有機能と管理ツールだけを削除するオプションを指定します。続行するには、[次へ] をクリックします。

4. [機能の選択] ページで、指定した SQL Server インスタンスから削除する機能を指定します。

削除ルールが実行され、操作を正常に完了できることが確認されます。

5. [削除の準備完了] ページで、アンインストールされるコンポーネントおよび機能の一覧を確認します。 [削除] をクリックしてアンインストールを開始します。

6. 最後の SQL Server インスタンスをアンインストールした直後は、SQL Server に関連付けられたその他のプログラムがまだ [プログラムと機能] のプログラムの一覧に表示されています。ただし、[プログラムと機能] を閉じ、次に [プログラムと機能] を開いたときには、プログラムの一覧は更新され、実際にインストールされているプログラムのみが表示されます。

——————–

 

C. OSのロケール設定を日本語に変更

==========================================================

日本語版SQL Server を英語版OSにインストールする場合、事前にOSの言語設定を変更する必要があります。

具体的には以下の設定です。

・オペレーティングシステムのユーザー インターフェイス設定

・オペレーティングシステムのユーザー ロケール設定

・システムロケール設定

 

以下のURLよりダウンロードできるドキュメントにOS日本語化のスクリーンショット付き手順がございます。必要に応じてご確認下さい。

 

◆Microsoft Azure SQL Server の活用(IaaS 環境における設定や運用のベストプラクティス)

http://www.microsoft.com/click/services/Redirect2.ashx?CR_EAC=300173769

+ [3.2 OS の日本語化] の章をご確認ください。

 

以下URLでも紹介されておりますので、こちらも必要に応じてご確認いただけますと幸いです。

◆SQL Server のローカル言語版

https://msdn.microsoft.com/ja-jp/library/ee210665(v=sql.120).aspx

補足)Windows 2012 R2 環境下でのロケール変更は以下となります。

 

・オペレーティング システムのユーザーロケール設定を変更するには

—————————————————————————————————-

コントロールパネル[時計、言語、および地域]-[地域]-[場所]タブの主な使用場所を “日本” に設定してください。

(設定例)

clip_image002

<図2.ロケール設定 – 1>

 

 

・システムのロケール設定を変更するには

——————————————————————

ご認識の通り、コントロールパネル[時計、言語、および地域]-[地域]-[管理]タブから、[システムロケールの変更]を開き、現在のシステムロケールを[日本語(日本)]を選択してください。

(設定例)

clip_image003

<図3.ロケール設定 – 2>

 

 

D. 日本語のSQL Server 2014 Evaluation Editionを用いて、日本語版のSQL Server をインストール

=================================================================================================

OSの言語設定を日本語に変更後、日本語のSQL Server 2014 Evaluation Editionをインストールします。

この際、ギャラリーの英語版SQL Server に同梱されているSQL Server のプロダクトキーを、日本語版SQL Server のインストール時に設定していただき、作業は完了となります。

 

1. 下記URLより、IaaSのマシン上に日本語版のSQL Server 2014 をダウンロードします。

 

◆評価版のダウンロード: Microsoft SQL Server 2014 SP1

https://www.microsoft.com/ja-jp/evalcenter/evaluate-sql-server-2014-sp2/

 

この際、[プロダクト キー] ページで、SQL Server 2014 SP1 ISOを選択してください。

また、ダウンロードするためにはマイクロソフトアカウントが必要になります。

clip_image004

<図4.ダウンロードする>

 

ダウンロード後には、該当ISOファイルをマウントし、DVDドライブに読み込ませます。

clip_image005

<図5.マウント>

 

2. IaaS上のマシンにて、C:\SQLServer_12.0_Full\x64\DefaultSetup.ini を開きます。

 

3. PIDに指定されているプロダクトキーを確認します。

// DefaultSetup.ini

********************

;SQL Server 2014 Configuration File

[OPTIONS]

PID=”XXXXX-XXXXX-XXXXX-XXXXX-XXXXX”

PCUSOURCE=”.\PCU”

********************

※ XXXXXの部分が実際のプロダクトキーになります。

 

4. 日本語版のSQL Server 2014のインストールを開始します。(既定では、Eドライブにマウントされていますので、ここからセットアップを開始します。)

この際、[プロダクト キー] ページで、該当プロダクトキーを入力することで、EditionをEvaluationから変更できます。

clip_image007

<図6.プロダクトキーの入力> 

 

SQL Server 2014 のインストールについての詳細は以下サイト内を必要に応じてご確認ください。

 

◆インストール ウィザードからの SQL Server 2014 のインストール (セットアップ)

https://msdn.microsoft.com/ja-jp/library/ms143219(v=sql.120).aspx

 

以上ですべての作業は完了です。お疲れ様でした。

 

[補足情報]

SQL Server 2012 の場合には、該当の設定ファイルパスが C:\SQLServer_11.0_Full\x64\DefaultSetup.ini になります。

また、SQL Server 2012 の場合、下記の SP1 のダウンロードサイトよりメディアを入手することが可能です。

 

◆Microsoft® SQL Server® 2012 Service Pack 1 (SP1)

https://www.microsoft.com/ja-jp/download/details.aspx?id=35575

+ SQLServer2012SP1-FullSlipstream-JPN-x64.iso

タイトル:Azure 仮想マシン上に作成した SQL Server の日本語化手順(SQL Server 2016 対応手順 )

0
0

Microsoft SQL Server/Microsoft Azure SQL Database サポート

田中 真人

 

 

皆さん、こんにちは。 Microsoft SQL Server/Microsoft Azure SQL Database サポートチーム です。

日ごろから、Azure サービスをご愛顧頂き誠にありがとうございます。

 

今回は、日々のサポート業務において、比較的お問合せをいただく、Azure 仮想マシン上に作成した SQL Server の日本語化手順について記載致します。

Azure ギャラリーイメージより、SQL Server が含まれた仮想マシンをデプロイすることが可能ですが、現在は英語版のみの提供となっています。

その為、日本語でSQL Server をご利用頂くには、SQL Server を以下の手順にて日本語化する必要があります。

 

◆SQL Server 2012 、2014 の日本語化手順は以下の BLOG をご確認ください。

<UP後に添付予定>

 

尚、本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でものであり、予告なく変更される場合があります。予めご了承ください。

 

—————
注意:Azure 仮想マシンおよび SQL Server を日本語化するには、SQL Server のアンインストール、再インストール作業が必要になります。

しかしながら、SQL Server IaaS Agent 拡張機能は、既定でインストールされている英語の SQL Server でのみで使用出来る機能となり、日本語化いたしますと動作致しません。

SQL Server の自動修正機能、自動バックアップ機能や、Azure Key Vault 統合の機能に関して、ポータルから設定できなくなるためご注意ください。

—————

 

大まかな流れは以下の通りです。以下ではSQL Server 2014を例にご説明いたしますが、SQL Server 2012でも手順はほぼ変わりません。

 

*******************************************

A. SQL Server IaaS Agent 拡張機能のアンインストール

B. SQL Server と関連コンポーネントのアンインストール

C. OSのロケール設定を日本語に変更

D. 日本語のSQL Server 2016 Evaluation Editionを用いて、日本語版のSQL Server をインストール

*******************************************

順にご説明致します。

 

A. SQL Server IaaS Agent 拡張機能のアンインストール

===============================

1. Azure 仮想マシンのメニュー一覧から、[拡張機能] を選択します。

 

2.一覧から SQL IaaS Extension を確認し、右端 [・・・] を選択し、アンインストールを選択します。

clip_image001

<図1 SQL Server IaaS Agent 拡張機能のアンインストール>

 

B. SQL Server と 関連コンポーネントのアンインストール

==============================================================

以下のURLに従い、既存の英語版SQL Server をアンインストールします。

 

◆SQL Server の既存のインスタンスのアンインストール (セットアップ)

https://msdn.microsoft.com/ja-jp/library/ms143412(v=sql.140).aspx

–サイト内、一部抜粋–

1. アンインストール プロセスを開始するには、コントロール パネルで [プログラムと機能] をクリックします。

2. [Microsoft SQL Server 2016(64bit)] を右クリックし、[アンインストール] を選択します。次に、[削除] をクリックします。これにより、SQL Server インストール ウィザードが起動します。

セットアップ サポート ルールが実行され、コンピューターの構成が確認されます。続行するには、[次へ] をクリックします。

3. [インスタンスの選択] ページのドロップダウンボックスを使用して、削除する SQL Server インスタンスを指定するか、SQL Server の共有機能と管理ツールだけを削除するオプションを指定します。続行するには、[次へ] をクリックします。

4. [機能の選択] ページで、指定した SQL Server インスタンスから削除する機能を指定します。

削除ルールが実行され、操作を正常に完了できることが確認されます。

5. [削除の準備完了] ページで、アンインストールされるコンポーネントおよび機能の一覧を確認します。 [削除] をクリックしてアンインストールを開始します。

6. 最後の SQL Server インスタンスをアンインストールした直後は、SQL Server に関連付けられたその他のプログラムがまだ [プログラムと機能] のプログラムの一覧に表示されています。ただし、[プログラムと機能] を閉じ、次に [プログラムと機能] を開いたときには、プログラムの一覧は更新され、実際にインストールされているプログラムのみが表示されます。

——————–

 

上記と同様の手順にて、プログラムと機能より、 「Data Tier Application Framework」 と 「Microsoft Visual Studio 2015 Shell (Isolated)」 のアンインストールを同様に実施ください。

clip_image002

<図2.プログラムと機能>

 

C. OSのロケール設定を日本語に変更

============================================

日本語版SQL Server を英語版OSにインストールする場合、事前にOSの言語設定を変更する必要があります。

具体的には以下の設定です。

・オペレーティング システムのユーザー インターフェイス設定

・オペレーティング システムのユーザー ロケール設定

・システム ロケール設定

以下のURLよりダウンロードできるドキュメントにOS日本語化のスクリーンショット付き手順がございます。必要に応じてご確認下さい。

 

◆Microsoft Azure SQL Server の活用(IaaS 環境における設定や運用のベストプラクティス)

http://www.microsoft.com/click/services/Redirect2.ashx?CR_EAC=300173769

+ [3.2 OS の日本語化] の章をご確認ください。

 

以下URLでも紹介されておりますので、こちらも必要に応じてご確認いただけますと幸いです。

 

◆SQL Server のローカル言語版

https://msdn.microsoft.com/ja-jp/library/ee210665(v=sql.120).aspx

 

D. 日本語のSQL Server 2016 Evaluation Editionを用いて、日本語版のSQL Server をインストール

==================================================================================================

OSの言語設定を日本語に変更後、日本語のSQL Server 2016 Evaluation Editionをインストールします。

この際、ギャラリーの英語版SQL Server に同梱されているSQL Server のプロダクトキーを、日本語版SQL Server のインストール時に設定していただき、作業は完了となります。

 

1. 下記URLより、IaaSのマシン上に日本語版のSQL Server 2016 をダウンロードします。

 

◆評価版のダウンロード: Microsoft SQL Server 2016 SP1

https://www.microsoft.com/ja-jp/evalcenter/evaluate-sql-server-2016

 

ダウンロードする際に、インストールの種類は [メディアのダウンロード (D)] 選択します。

clip_image003

<図3.インストールの種類>

 

パッケージの種類を [ISO] にし、ダウンロードをします。

clip_image004

<図4.SQL Server インストーラーのダウンロードを指定する>

 

clip_image005

<図5.メディアのダウンロード>

 

また、ダウンロードするためにはマイクロソフト アカウントが必要になります。

ダウンロード後には、該当ISOファイルをマウントし、DVDドライブに読み込ませます。

 

2. IaaS上のマシンにて、C:\SQLServer_13.0_Full\x64\DefaultSetup.ini を開きます。

 

3. PIDに指定されているプロダクトキーを確認します。

 

// DefaultSetup.ini

********************

;SQL Server 2016 Configuration File

[OPTIONS]

PID=”XXXXX-XXXXX-XXXXX-XXXXX-XXXXX”

PCUSOURCE=”.\PCU”

********************

※ XXXXXの部分が実際のプロダクトキーになります。

 

4. 日本語版のSQL Server 2016のインストールを開始します。(既定では、Eドライブにマウントされていますので、ここからセットアップを開始します。)

この際、[プロダクト キー] ページで、該当プロダクトキーを入力することで、EditionをEvaluationから変更できます。

clip_image006

<図6.プロダクトキーの入力>

 

SQL Server 2016 のインストールについての詳細は以下サイト内を必要に応じてご確認ください。

 

◆インストール ウィザードからの SQL Server 2016 のインストール (セットアップ)

https://msdn.microsoft.com/ja-jp/library/ms143219(v=sql.140).aspx

 

以上ですべての作業は完了です。お疲れ様でした。

[Power BI] ※緊急告知※ Power BI (無料版) のサービス内容が 2017 年 6 月 1 日に変更されます。

0
0

SQL Server Developer Support Team

米内 満

 

こんにちは。

2017 年 5 月 3 日に、弊社 Microsoft Power BI チームより、Power BI (無料版) のサービス内容が変更になる旨が、アナウンスされました。

ユーザー様のお手元には、5 月 4 日前後に下記のメールが届いていらっしゃるかと思います。

 

clip_image001

 

日本は、ゴールデンウィーク真っ只中ということもあり [Power BI (無料版) のサービス内容が 2017 年 6 月 1 日に変更されます。] というアナウンスに気づかれていないお客様もいらっしゃるかと思います。

この度のサービス内容の変更に伴い、Power BI 無料版をメインにご利用頂いておりますお客様には、再度ご利用方法をご検討いただくことになりますため、どのような変更になるのかなどをなるべくわかりやすくご案内したいと思います。

 

<Power BI (無料版) のサービス内容がどう変わるのか>

これまで Power BI 無料版と Power BI Pro 版の違いとして、利用できるコンテンツに機能差がありました。

この度のサービス内容変更に伴いレポート作成における Power BI Pro 版無料版垣根がなくなり、無料版は Pro 版と同等のレポート作成機能を備えます。

これまでご利用いただけなかった Power BI Pro の機能を活用できるチャンスですので、ぜひ、機能の評価/検証にご活用ください。

この変更により、 Power BI 無料版は、個人ユーザー向けのライセンスとなりますので、これまで利用できていた共有機能を中心に、一部機能が利用できなくなります。

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. ダッシュボードの共有

  • ダッシュボードの共有は、Power BI Pro ユーザー同士が利用できる機能となります。そのため、6/1 以降、無料版を利用しているユーザーは、共有されているダッシュボードを参照できなくなる可能性があります。
  • 共有しているコンテンツが削除されることはありません。

2. Power Point へのエクスポート

3. CSV/Excel へのエクスポート

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

<Power BI ライセンスの整理/追加>

6 月 1 日以降におけるライセンス形態について下記に纏めます。

 

・Power BI 無料 版: 変更になります。

レポート作成において従来の Power BI Pro のライセンスと同等の表現が可能となりますが、レポート開発/評価の位置づけのライセンスとなりますため、パーソナル利用を目的としたライセンスとなります。

このため、作成したレポートを複数ユーザーと共有するためには、Webに公開 機能をご利用いただくか Power BI Pro/Power BI Premium のライセンスが必要となります。

 

・Power BI Pro 版:※ この度のサービス内容変更に伴い Pro 版については、サービス内容の変化はありません

中規模ユーザーが、組織のメンバーとレポートを共有し利用するために用意されたライセンスとなります。

 

・Power BI Premium 版:※新しく追加されます。

ユーザー自身が Power BI が利用するリソースを選択し、リソースに応じたプランを選択するライセンスとなります。大規模ユーザー、または、Power BI のパフォーマンスを向上させたい組織のユーザーが利用します。

Power BI Pro のアドオン ライセンスとなる位置づけとなるため、ご利用いただくには Power BI Pro ライセンスが必要です。

 

<重要:6 月 1 日以降にお願いしたいこと>

Power BI (無料版) を 2016/05/01 から 2017/05/02 までにアクティベーションしたユーザーは、1年間 Power BI Pro の評価期間を得られるようになります。

しかしながら、自動でご利用いただけるようにはならないため、無料版ご利用のユーザーは、下記をご検討下さい。

 

 

・拡張期間 1年間の利用オファーを受ける。

6/1 以降に Power BI Service にサインインいただくと、拡張期間 1 年間の利用オファーが表示されます。オファーを受け、1 年間利用することをご検討下さい。

※ Power BI Pro 評価版を利用したことがあるユーザーも、改めて対象となりますので、ご安心下さい。

 

・Power BI Pro 版、もしくは、Power BI Premium 版の利用を検討する。

特に管理者様には、その 1 年間の間に Power BI Pro 版もしくは、Power BI Premium 版の利用のご検討をお願い致します。

 

 

この度の詳細については下記をご参考下さい。

 

<参考情報>

この度のライセンス実装に伴う内容につきましては、英語となり恐縮ではございますが、弊社海外エンジニアのブログ、コミュニティの情報がご参考いただけるかと存じますので、ご案内いたします。

 

Microsoft accelerates modern BI adoption with Power BI Premium

https://powerbi.microsoft.com/en-us/blog/microsoft-accelerates-modern-bi-adoption-with-power-bi-premium/

 

May 3 announcement FAQ

https://community.powerbi.com/t5/Changes-to-the-free-Power-BI/May-3-announcement-FAQ/m-p/167399

 

ライセンスの比較表

https://powerbi.microsoft.com/ja-jp/pricing/

 

Extended Pro Trial activation (英語) 5/27 up

https://powerbi.microsoft.com/en-us/documentation/powerbi-extended-pro-trial/

 

Sales Team のブログ にも、情報を掲載しておりますので、ご参考下さい。

 

なお、本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でものであり、予告なく変更される場合があります。予めご了承ください。

今後も新情報が確認できましたら、随時アップデートしていく予定です。

 

以上となります。少しでも皆さまのお役に立てればうれしく思います。

2017 年 5月 SQL Server 最新モジュール

0
0

2017 年 5月 16日 時点の SQL Server 最新モジュールです。

SQL Server 2005 は 2016 年 4 月 12 日に延長サポートが終了しました。長らくのご愛用ありがとうございました。
SQL Server 2008 は 2014 年 7 月 8 日にメインストリームサポートが終了しました。

サービス
パック

更新プログラム

バージョン

リリース年月

SQL Server 2016

SP1

KB 4019916 (CU3)

13.0.4435.0

2017/5
メインストリームサポート

SQL Server 2014

SP2

KB 4013098 (CU5)

12.0.5546.0

2017/4
メインストリームサポート

SQL Server 2012

SP3

KB 4016762 (CU9)

11.0.6598.0

2017/5
メインストリームサポート

SQL Server 2008 R2

SP3

無し

10.50.6000.0

2014/9
延長サポート
※2014年7月8日にメインストリームサポートが終了しました。

SQL Server 2008

SP4

無し

10.0.6000.0

2014/10
延長サポート
※2014年7月8日にメインストリームサポートが終了しました

 

RTM : Release To Manufacturing (製品出荷版)
SP : Service Pack (サービスパック)
CU : Cumulative Update (隔月リリースの累積更新プログラム)
OD : On-Demand (オンデマンドリリースの累積更新プログラム)

SQL Server の更新プログラムの詳細については、SQL Server の更新プログラムを参照して下さい。

メインストリームサポート、延長サポートについては、マイクロソフトサポートライフサイクルを参照して下さい。


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

0
0

 

神谷 雅紀

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 との接続を確立し、トランザクションにエンリスト

3) セッション 51 がデータを更新

4) セッション 51 が SQL Server との接続を切断

5) セッション 52 が SQL Server との接続を確立し、トランザクションにエンリスト

6) セッション 52 がデータを更新

7) セッション 52 が SQL Server との接続を切断

8) トランザクションをコミット

 

SPID –2 が所有しているロックの強制解放 (分散トランザクションの強制終了)

 

クライアントアプリケーションやネットワークの問題などにより、トランザクションがコミットもロールバックもされず、SPID –2 がロックを保持し続けるという状況が発生する可能性があります。このような場合には、管理者がトランザクションを強制終了してロックを解放する必要があります。

以下はその具体的な手順です。通常、KILL ステートメントには session_id を指定しますが、-2 は便宜的な session_id であるため、KILL –2 としても、ロックは解放されません。分散トランザクションが所有しているロックを解放するためには、 KILL ステートメントに UOW (Unit Of Work) を指定する必要があります。

 

1) 以下のクエリを実行し、ロックを所有しているトランザクションの UOW である request_owner_guid 列の値を確認します。

 

select request_session_id, request_owner_guid from sys.dm_tran_locks where spid=-2

 

実行結果例

session_id request_owner_guid
-2 9D99300B-AD20-49C7-BC4B-0F19D20E2E0E

 

2) 確認した UOW (request_owner_guid 列の値) を指定して、KILL ステートメントを実行します。

 

KILL ‘1) で確認した UOW’

 

実行例

KILL ‘9D99300B-AD20-49C7-BC4B-0F19D20E2E0E’

 

SQL Server が MS DTC からのコミット、ロールバック要求を処理する方法

 

MS DTC からのトランザクションに関する要求は、クライアントセッションとは別に実行されます。そのため、以下の例のように、クライアントが T-SQL を実行しているセッションが SPID (session_id) 59 と 60 であったとしても、トランザクションのコミットやロールバックは、SPID 49 などクライアントセッションとは別のセッション (システムタスク) によって実行されます。

 

image_thumb6

 

  • SQL Server は、MS DTC から callback されると、callback に対応するメッセージを DTC transaction background task のキューにポストします。DTC transaction background task がポストされたメッセージを処理し、トランザクションを完了します。そのため、トランザクションの完了は、クライアントセッションとは異なる SPID で行われることになります。

 

 

MS DTC の起動

 

SQL Server 2016 からは、MS DTC が起動していない場合、MS DTC が必要になった時点で SQL Server が MS DTC を起動できるようになっています。そのため、MS DTC サービスを明示的に起動する必要はなくなっています。

SQL Server 2014 以前は、SQL Server は MS DTC を起動できないため、分散トランザクションの実行時に MS DTC が起動されていないと、エラーとなり分散トランザクションは開始できません。

 

MS DTC に関連する待機

 

sys.dm_exec_requests 動的管理ビューの wait_type 列で “DTC” という文字列から始まる種類の待機や PREEMPTIVE_TRANSIMPORT, PREEMPTIVE_DTC_ENLIST, PREEMPTIVE_DTC_REENLIST などの待機は、MS DTC での処理待ちや MS DTC からの応答待ちを示します。

SQL Server 開発部門に属する SQL Server Customer Advisory Team (SQLCAT) のテストでは、アプリケーションと SQL Server がそれぞれのローカル MS DTC を使用する構成ではなく、両方が単一の MS DTC を使用するように構成することで、これらの待機を緩和できています。すべての環境において必ずしもそのような構成が有効であるとは限りませんが、MS DTC に関連する待機の時間が長い場合には、そのような構成を試してみる価値はあるかと思います。詳細は以下を参照して下さい。

Resolving DTC Related Waits and Tuning Scalability of DTC
https://blogs.msdn.microsoft.com/sqlcat/2010/05/11/resolving-dtc-related-waits-and-tuning-scalability-of-dtc/

 

クラスター環境での MS DTC 構成

 

以下の記事に Cluster 上の SQL Server が利用する上で MSDTC の構成について、それぞれのメリット、デメリットが記載されていますので、クラスター構成を検討する場合の参考になるかと思います。

 

MSDTC Recommendations on SQL Failover Cluster
https://blogs.msdn.microsoft.com/alwaysonpro/2014/01/15/msdtc-recommendations-on-sql-failover-cluster/

 

この記事では、特に SQL Server のリソースグループごとに MSDTC のリソースを作成・参加させることで、常に同じ物理ノード上で MS DTC と SQL Server が動作するため、MS DTC と SQL Server 間でのコミュニケーションにおけるオーバーヘッドが小さく、高パフォーマンスを発揮できると記載しています。(この構成の場合は、SQL Server を先に構築し、その後に MSDTC のリソースを追加する必要があります。SQL Server をグループに追加する際には、必ず未使用の共有ディスクが必要なため、先に MSDTC のリソースをグループに追加すると、同じディスクを共有することが出来ません。)

その他にも、各 MS DTC インスタンスごとに専用クラスターグループとする場合、 単一のクラスター化 MS DTC インスタンスを共有する場合、ノードのローカル MS DTC インスタンスを使用する場合についても言及しています。

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

0
0

 

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 JDBC Driver for SQL Server を利用している。
  • Windows Server 2008 R2 に KB361608 または KB3172605 をインストールした環境上の JDK/JRE バージョン 6 で動作する Java アプリケーションから Microsoft JDBC Driver for SQL Server を利用している。

 

エラーが示す意味

JDBC ドライバからの SQL Server への接続では内部的に SSL 暗号化を利用していますが、それが失敗したことを示しているのが「ドライバが SSL (Secure Sockets Layer) 暗号化による SQL Server への安全な接続を確立できませんでした」というメッセージです。また、「SQL Server が不完全な応答を返しました。」のメッセージは、SQL Server が受信したパケットに含まれるデータが本来想定される長さよりも短いために、“不完全である” と判断したと応答を返したことを示しています。

つまり、SSL 暗号化の処理の一環でクライアントからパケットを送信したものの、それが想定よりも短いために SQL Server で受け付けることができず、接続処理が失敗したことを意味します。

 

エラー発生の原因

Windows Server 2012 R2 以前の OS では、対象環境に示したような OS の更新プログラムによって Diffie-Hellman (DH)  の暗号化スイートが追加されますが、それらの暗号化スイートが利用された場合に OS の問題によって 1 バイトが省略される不具合が存在することが判明しました。この不具合によって、クライアントから送信するパケットが 1バイト短くなり、SQL Server が不完全であると判断してエラーを返すに至ります。

 

エラーの対処方法

追加される暗号化スイートに起因した事象であるため、これらが使われないようクライアント環境を構成することが対処となります。具体的には以下の通りです。

 

A. Windows Server 2012 R2 Update1 (2919355) をアンインストールする。

B. KB 361608 や KB 3172605 をアンインストールする。(Windows Server 2008 R2 もしくは Windows 7 の場合)

C. Windows 10 TH2 以降, Windows Server 2016 の OS にアップグレードする。

D. DH を使わないように暗号化スイートを構成する。

 

更新プログラムのアンインストールや OS のアップグレードは運用環境維持の都合等で困難なケースが多いのではないかと思いますので、その場合には上記の D の構成変更を対処としてご検討ください。構成変更の手順は以下の通りです。

    1. クライアントで、レジストリ エディター (regedit.exe) を管理者として起動します。
    2. 次のレジストリを右クリックし、[修正] を選択します。 

      キー:
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002]

      名前: Functions
      種類: REG_MULTI_SZ

    3. 次の 2 つの暗号スイートが追加されたものですので、これらを削除します。
      ※ バックアップが必要な場合には、事前に当該キーをエクスポートします。 

      TLS_DHE_RSA_WITH_AES_128_CBC_SHA
      TLS_DHE_RSA_WITH_AES_256_CBC_SHA
      ※もしも上記以外に _DHE_ を含むエントリがある場合にはそちらも削除します。


      以下などは削除します。
      TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
      TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
      TLS_DHE_DSS_WITH_AES_256_CBC_SHA
      TLS_DHE_DSS_WITH_AES_128_CBC_SHA
       
      以下などは残します。
      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384
      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384


    4. 設定を反映させるために OS を再起動します。

 

なお、暗号化スイート構成変更も困難な場合には、大変恐れ入りますが、接続の再試行 (リトライ) の実装を検討ください。本事象は 256 回に 1回の頻度で発生する事象ですので、再試行により接続が成功する事を期待できます。最近では Azure 上の SQL Database や SQL Data Warehouse に対してアクセスする場合には、接続のリトライを推奨しており、また、その実装例なども Web サイトで各種紹介しております。オンプレミス上の SQL Server への接続の場合にも同様の実装を行っていただくことで、今回の事象にも対応できるアプリケーションとなります。

Azure SQL Database の Point in Time Restore を使用したデータベースの復元方法と注意点

0
0

皆さん、こんにちは。BI Data Platform サポートチーム です。

SQL Database をご利用いただいている方の多くにその便利さを感じていただいているであろう機能の一つとして Point in Time Restore があるかと思います。
大変便利な機能ですが、利用にあたり少し留意いただきたい点がありますので、Point in Time Restore の利用方法とともに、説明します。

Point in Time Restore とは

SQL Database は、マネージド型のサービスのため、手動でバックアップを取得する必要はありません。
そのかわりに、SQL Database 自身が内部的にデータベースの完全バックアップ (週に1回)、差分バックアップ (数時間に1回)、トランザクションログバックアップ (5分~10分程度に1回) を取得しております。
ユーザーの皆さんは、バックアップの保持期間内であれば任意の日時の SQL Database を復元することが可能です。

バックアップの保持期間は、ご利用いただいているサービスレベルで異なりますので、詳細は下記をご参照ください。

SQL Database バックアップについての詳細情報
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-automated-backups

 

利用方法

例えば、Point in Time Restore が役に立つシナリオとして、下記が考えられるかと思います。

  • 操作ミスなどで、SQL Database 内の重要なデータ (レコードやテーブル) を削除してしまい、削除前に戻したい場合
  • 特定の日時の SQL Database を復元し、その環境に対して検証作業を行いたい場合

前者の場合は、誤って削除する前のタイミングのデータベースを復元し、クライアントアプリケーションからの接続先を復元したデータベースにするか、元のデータベースを別の名前に変更したうえで復元したデータベースに元のデータベース名をつけることが考えられます。
後者の場合は、復元を行ったデータベースを検証したいアプリケーションの接続先として指定するだけで実現可能です。

Point in Time Restore を使用した復元作業は簡単です。
Azure Portal 画面を使う方法、PowerShell を使う方法、RestAPI を使う方法の3つの方法で復元ができます。
例えば Azure Portal 画面から復元する場合には、下図のように Azure Portal 画面上で復元を行いたい SQL Database の [概要] ページを開き、[復元] ボタンを選択し、復元したい日時や復元先の価格レベル、新しいデータベース名を指定します。


<図1. Azure Portal 画面>

これで、指定した日時までのデータを持った新しいデータベースが作成できます。

 

注意点

一点ご注意いただきたい点として、あくまで Point in Time Restore 機能は指定した日時のデータを持った “新しい SQL Database” が作成される点です。
つまり Point in Time Restore で復元したデータベースは、復元時点より前のバックアップデータは保持しておらず、復元したデータベースに対して Point in Time Restore を使った復元を行おうとしても復元可能な “最も前の復元ポイント” は復元されたタイミング以降になります。
例えば、下図のように Point in Time Restore を使って復元されたデータベース B は、データベース B が作られたタイミング以前に戻すことができず、データベース B が作られたタイミングより前に戻すためにはデータベース A に対して Point in Time Restore を行う必要があります。

<図2. Point in Time Restore バックアップ保持期間イメージ図>

では、この動作はどのようなときに注意する必要があるのでしょうか。
それは、データベース B を Point in Time Restore で作成した後に、元となったデータベース A を削除する場合です。
この場合、仮にデータベース B 作成時点よりも前に戻したいと思っても、データベース B のバックアップにはデータベース B が作成されたタイミング以降のバックアップデータしか含まれていないためそれ以前の状態に戻すことはできません。また SQL Database には削除されてから一定の期間であれば削除済みのデータベースを復元する機能がありますが、この機能を使って復元できるのはあくまでデータベース A を削除したタイミングのデータベースだけであり、それに紐づくバックアップファイルは復元できず Point in Time Restore を使って削除されたタイミングより前に戻すこともできません。

以上のことから、Point in Time Restore の作成元となったデータベース (データベースA) を削除する際には、それよりも前の時点に戻す必要が無いのかを十分にご検討いただいてから削除頂くか、復元後十分な時間が経過し Point in Time Restore で新しく作成されたデータベース (データベースB) に対する十分な期間のバックアップが取得された後に元のデータベースを削除頂ければと思います。

※ 本Blogの内容は、2017年6月28日現在の内容となっております。

既存の SQL Server ライセンスを使用し、Azure 仮想マシン上に SQL Server をインストールするためには。

0
0

 

皆さん、こんにちは。  BI Data Platform サポートチームです。

※ BI Data Platformサポートチーム では、Microsoft SQL Server/Azure SQL Database/BI Azure などの製品をサポートしています。

今回は、既存の SQL Server ライセンスを使用し、Azure 仮想マシン上に SQL Server をインストールするために必要な契約について紹介します。

 

既存の SQL Server ライセンス を Azure 仮想マシン上の SQL Server で使用するためには、ソフトウェア アシュアランス (Software Assurance) の契約が必要となります。

 

SQL Server Azure VM の料金ガイダンス

+ ライセンスを持ち込む (BYOL)

---

ライセンス モビリティを使用した自分の SQL Server ライセンスの持ち込み (BYOL) は、Azure VM のソフトウェア アシュアランスで既存の SQL Server ボリューム ライセンスを使用することです。 BYOL を使用した SQL Server VM の料金は、SQL Server のライセンスではなく、VM を実行するコストに対してのみ発生します。これは、ボリューム ライセンス プログラムを介して既にライセンスとソフトウェア アシュアランスを取得している場合が対象になります。

---

 

ソフトウェア アシュアランスは、テクノロジ、サービス、使用権のセットを提供している包括的なボリューム ライセンス プログラムです。

本ライセンスに含まれる 「ライセンス モビリティ」 の特典により、お持ちのライセンスを Azure 仮想マシン上の SQL Server で利用することができます。

 

Azure でのソフトウェア アシュアランスによるライセンス モビリティ

 

ソフトウェア アシュアランスやライセンス全般に関する質問がある場合は、以下  Cloud Direct  にお問い合わせください。

 

Cloud Direct


 

※ 本Blogの内容は、2017年7月現在の内容となっております。

Windows インストーラーでイベント 1004/1001 が発生し、SQL Server 関連コンポーネントが繰り返し再構築される現象 及び 回避策 について

0
0

 

皆さん、こんにちは。 Microsoft SQL Server/Microsoft Azure SQL Database サポートチームです。

今回は、Windows インストーラーでイベント 1004/1001 が発生し、SQL Server 関連コンポーネントが繰り返し再構築される現象 及び 回避策について紹介します。

 

Windows Update で .NET Framework の更新プログラムを適用後、イベントログ (アプリケーション) に、Windows インストーラのイベント 1004/1001 が繰り返し発生し、該当サーバーの CPU 使用率が高くなるという現象が報告されています。

[1004] 製品 '{7842C220-6E9A-4D5A-AE70-0E138271F883}'、機能 'SDK_Full'、コンポーネント '{5459C63B-8203-43FD-9C96-9D643FD17EF0}' の検出に失敗しました。リソース 'D:\' がありません。

[1001]製品 '{7842C220-6E9A-4D5A-AE70-0E138271F883}'、機能 'SDK_FNS' の検出は、コンポーネント '{30DC367C-77F2-4EB1-8661-7B2CC3714758}' を要求するときに失敗しました

 

上記のメッセージは、 Windows インストーラーで該当コンポーネントの自動修復が行われた際、D ドライブ が存在しないために、繰り返し自動修復が行われている場合に発生するメッセージとなります。

本事象は、Windows の更新プログラム適用時に .NET アセンブリのネイティブ イメージの作成処理がキューに格納された状態となり、その後バックグラウンドとして実行される .NET Runtime Optimization Service (mscorsvw.exe) によりネイティブ イメージの作成が施行され、その際にファイルの欠損が検知されたことにより、Windows インストーラー の自動修復が繰り返し行われていたことに起因していることが報告されています。

 

[対処方法]

Windows インストーラー の自動修復が繰り返される要因として、以前インストール時に利用していた D ドライブを参照しにいくものの、 D ドライブが存在しないことに起因していることが報告されています。

そのため、以下の手順を実施し、手動で該当コンポーネントをインストール下さい。

 

手順

-------------------------------------------------------

1. イベントログに出力されているドライブ (今回の例では D:\) に SQL Server のメディアを用意します。

2. コマンドプロンプトより、イベントログに出力されている製品のGUID (今回は、{7842C220-6E9A-4D5A-AE70-0E138271F883}) を指定し、下記のコマンドを実行します。

 

+ コマンド

Msiexec /f イベントログに出力されている製品のGUID

 

[例]

Msiexec /f {7842C220-6E9A-4D5A-AE70-0E138271F883}

※ 本コマンド実行時後に、OS の再起動を求められる場合があるため、メンテナンス時間帯などに実施ください。

 

[暫定対処策]

上記に記載した対処方法をすぐに実施することが出来ない場合、以下の何れの何れかの方法を実施することで、一時的に本事象の発生を回避することが出来ます。

 

1. ネイティブ イメージタスク(ngen) の無効化

2. MsiInstaller サービスの無効化

 

1. ネイティブ イメージタスク(ngen) の無効化

----------------------------------

1. スタート メニューなどからタスクスケジューラを選択して起動します。

2. 画面左側のツリーから、[タスク スケジューラ (ローカル)] – [タスク スケジューラ ライブラリ] – [Microsoft] – [Windows] – [.NET Framework] を順に選択して、ノードを展開します。

3. [無効化] ボタンを押下して、タスクをすべて無効状態にします。

4. [トリガー] 列に表示のあるタスクについてはプロパティからトリガーを編集し、[有効] のチェックを外して [OK] を選択します。

 

[補足]

.NET Framework を使用して開発されたアセンブリ (DLL) は、コンピューターが直接実行できる機械語 (ネイティブ コード) ではなく、MSIL という中間言語で構成されています。

.NET Framework アプリケーションでは、中間言語で作成されたアセンブリを、アプリケーションの実行時にネイティブ コードに実行時コンパイル (JIT : Just in Time コンパイル) して利用します。

ネイティブイメージ タスクは、この JIT コンパイルの処理コストを低減するため、中間言語として提供されている .NET Framework のアセンブリを、コンピューターのアイドル時間を利用して、あらかじめネイティブ コードにコンパイルして利用可能な状態にしておくためのタスクです。

ネイティブイメージタスクの詳細については、以下のドキュメントを参照ください。

 

ネイティブイメージ タスク

(英語原文) <https://docs.microsoft.com/en-us/dotnet/framework/tools/ngen-exe-native-image-generator#native-image-task>

(日本語訳) <https://msdn.microsoft.com/ja-jp/library/6t9t5wcf(v=vs.110).aspx#ネイティブ イメージ タスク>

 

なお、.NET Framework を使用したアプリケーションの動作上、ネイティブ イメージ を利用することは必須ではないため、無効化してもアプリケーションが動作しなくなるなどの問題は発生しません。しかし、実行時コンパイルが必要になることでパフォーマンスに影響を与える可能性があります。

 

 

2. Windows Installer サービスの無効化

----------------------------------

以下のレジストリを変更後、OS の再起動を実施することで、Windows Installer (MsiInstaller) サービスが無効となり、Windows インストーラー の自動修復が行われなくなります。

---

レジストリ :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msiserver

値の名前 : Start

値の種類 : REG_DWORD

値のデータ : 4 (既定値は 3 “手動” です )

---

[注意]

Windows Installer を無効にすると、Windows Installer で動作する事を前提に作成されたインストール パッケージや、アプリケーションが正しく動作しなくなります。

サービスを無効にする場合は、試験環境で十分な検証を実施した上で、一時的な回避策として検討ください。

 

 

※ 本Blogの内容は、2017年7月現在の内容となっております。

Viewing all 293 articles
Browse latest View live




Latest Images