サーバーまたがりと言うのは、自分のサーバーから相手のサーバーのデータをネットワーク越しに操作(選択・更新など)することを言っています。
環境は以下の通りです。
◎自分サーバー側(Windows10 T.P)の環境
・仮想OS環境(ゲストOS)
・サーバー名(ASPIRE5750G2\SVR1)
◎相手サーバー側(Windows7)の環境
・実OS環境(ホストOS)
・サーバー名(ASPIRE5750G\SVR1)
まずは、自サーバー(Windows10側)から、OPENROWSET関数を使って、相手サーバー(Windows7側)のテーブルが読み取る事が出来るかどうかやってみました。
接続はWindows認証で、あらかじめ信頼関係接続で行けるように設定済みです。
SELECT 'Windows10(自サーバー)' AS [TITLE],T.* FROM MAINDB.dbo.T001 AS T ORDER BY ITEM_CD,R_ITEM_CD; SELECT 'Windows7(相手サーバー)' AS [TITLE],T.* FROM OPENROWSET('SQLOLEDB','Server=ASPIRE5750G\SVR1;Trusted_Connection=yes;', 'SELECT * FROM MAINDB.dbo.T001') AS T; SELECT 'Windows10にだけ存在し、Windows7に存在していないデータ' AS [TITLE],T.* FROM MAINDB.dbo.T001 AS T LEFT JOIN OPENROWSET('SQLOLEDB','Server=ASPIRE5750G\SVR1;Trusted_Connection=yes;', 'SELECT * FROM MAINDB.dbo.T001') AS W ON(T.ITEM_CD = W.R_ITEM_CD) WHERE W.R_ITEM_CD IS NULL;特に問題なく、ホストOS側(Windows7)に立てた、SQL-Server2014 Expressのテーブルにアクセスし、内容を読み取る事が出来ました。
立場を逆転させて、逆方向が行くかどうかもやってみました。
SELECT 'Windows7(自サーバー)' AS [TITLE],T.* FROM MAINDB.dbo.T001 AS T ORDER BY ITEM_CD,R_ITEM_CD; SELECT 'Windows10(相手サーバー)' AS [TITLE],T.* FROM OPENROWSET('SQLOLEDB','Server=ASPIRE5750G2\SVR1;Trusted_Connection=yes;', 'SELECT * FROM MAINDB.dbo.T001') AS T; SELECT 'Windows10にだけ存在し、Windows7に存在していないデータ' AS [TITLE],T.* FROM OPENROWSET('SQLOLEDB','Server=ASPIRE5750G2\SVR1;Trusted_Connection=yes;', 'SELECT * FROM MAINDB.dbo.T001') AS T LEFT JOIN MAINDB.dbo.T001 AS W ON(T.R_ITEM_CD = W.ITEM_CD) WHERE W.R_ITEM_CD IS NULL;逆方向の立場でも特に問題なく読み取る事が出来ました。
サーバーまたがりのクエリーなんか、個人では特に書く機会は無いと思いますが、Windowsが本格的にモバイルに殴り込みをかけたため、これからは、マザーシップPC上のSQL-Serverと、外に持ち出す8インチWindowsタブレットに立てたSQL-Serverとの間で、データベースの連携をとりたい・・・そんなシーンが増えてくるのかなぁと。
手のひらモバイルに、SQL-Serverを搭載して持ち歩くという、画期的な時代がもうとっくにスタートしてしまっているので・・・。
ちなみに、OPENROWSET関数ではなく、リンクサーバーでもやってみました。
SELECT 'Windows10(自サーバー)' AS [TITLE],T.* FROM MAINDB.dbo.T001 AS T ORDER BY ITEM_CD,R_ITEM_CD; SELECT 'Windows7(相手サーバー)' AS [TITLE],T.* FROM [ASPIRE5750G\SVR1].MAINDB.dbo.T001 AS T; SELECT 'Windows10にだけ存在し、Windows7に存在していないデータ' AS [TITLE],T.* FROM MAINDB.dbo.T001 AS T LEFT JOIN [ASPIRE5750G\SVR1].MAINDB.dbo.T001 AS W ON(T.ITEM_CD = W.R_ITEM_CD) WHERE W.R_ITEM_CD IS NULL;リンクサーバーでも特に問題ない感じですね。
■サーバーまたがりの更新が出来るかどうか?
■トランザクション処理がかかるかどうか?
次は、単なる参照ではなくて、サーバーまたがりの更新が出来るかどうかやってみました。
Windows10側のテーブルにしか無いデータを抽出して、Windows7側に挿入してあげる、という処理です。
更新と言えば、トランザクション処理も試してみました。
トランザクション処理というのは、平たく言うと、更新中に何かが起きて失敗したら、全てをチャラにして、更新前の元の状態に戻す事です。
テーブル一つだけならともかく、10個とかある場合、8個まで更新したところでネットワーク障害が発生しました!!となった時、途中でやめられたら、リカバリーするのにとんでもない手間がかかってしまいます。
元に戻すか、全部やりきるか、これを保障する処理でとても重要です。
個人レベルでは問題にもならないですが、企業では、この処理がとにかく肝となって、パフォーマンス・チューニングとかに大変な労力と才能がつぎ込まれてたりします。
SELECT '更新前' AS [TITLE],T.* FROM [ASPIRE5750G\SVR1].MAINDB.dbo.T001 AS T; SELECT 'Windows7側に存在しないデータをWindows10側から補完する' AS [TITLE]; SET XACT_ABORT ON; BEGIN TRAN; INSERT INTO [ASPIRE5750G\SVR1].MAINDB.dbo.T001 SELECT T.R_ITEM_CD AS ITEM_CD, T.ITEM_CD AS R_ITEM_CD, REPLACE(T.CONTENTS,'Windows 10','Windows 7') AS CONTENTS, 5800 AS PRICE FROM MAINDB.dbo.T001 AS T LEFT JOIN [ASPIRE5750G\SVR1].MAINDB.dbo.T001 AS W ON(T.ITEM_CD = W.R_ITEM_CD) WHERE W.R_ITEM_CD IS NULL; IF @@ERROR = 0 BEGIN COMMIT TRAN; END ELSE BEGIN ROLLBACK TRAN; END; SELECT '更新後' AS [TITLE],T.* FROM [ASPIRE5750G\SVR1].MAINDB.dbo.T001 AS T ORDER BY T.ITEM_CD,T.R_ITEM_CD;トランザクション処理も、更新も、特にに問題なく行けました!!
Windows10、このまま製品版として使ってもいけるんじゃないかなぁ・・・という勢い。
■トランザクション処理の設定について
ちなみに、SQL-Server 2014 Expressの設定だけやって、他の設定をやってないPCで単純にトランザクション処理をかけてしまうと、おそらく、「リンク サーバー "ASPIRE5750G\SVR1" の OLE DB プロバイダー "SQLNCLI11" で分散トランザクションを開始できなかったので、この操作を実行できませんでした。」というエラーメッセージが出てトランザクション処理が失敗すると思います(サーバー名の所は私の場合です)。
これは、MSDTCというコンポーネントの設定がうまくないからです。
この場合だと、相手側、Windows7側での設定が必要です。
コントロールパネルから「管理ツール」「コンポーネントサービス」と進んでください。
すると、設定画面が開くので、そこの、ツリーを、「ローカルDTC」にたどり着くまで徹底的に降りて行きます。
ローカルDTCの設定はまぁ色々ありますが、個人レベルだと画像のような設定にしておけば良いかなぁと。
OKにすると、MSDTCが再起動して、コンピュータを再起動しなくともそのまま使用可能になります。
これでもまだエラーが消えない時は、Windowsファイアウォールあたりが、必要なポートをブロックしてたりします。
おすすめは出来ませんが、一度、試験的にですよ?全てのポートを開いてみて、うまく行けばそれが原因という事になります。
同設定画面の、Windows10 Technical Preview版は上記のようになります。
Windows10だからって特に変化はなく、画面デザインがWindows10の流儀になっただけという感じですね。
安心しました。
この手の設定画面が変化すると、趣味でやってる時はともかく、システム担当者さんとかは激しくビビるのではないでしょうか(激しくはないか)。
全体的に、Windows10 T.P.って、このまますぐにでも本格投入したい感じですね。
自作PCのOSをこれにして、使用期限ぎりぎりまで使うというのも、結構ありかも????