tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル接続先のWindowsServerを64bitへ変更
記事No16498
投稿日: 2019/08/22(Thu) 17:05
投稿者むろや
クラサバ環境にて、

<現状の環境>
■クライアント側端末PC:VB6で作ったアプリケーションをインストールしてEXEファイルを使用
 ↓アクティブディレクトリの接続先サーバーとして↓
■WindowsServer2008(32bit)/SQLServer2005
 で、データの抽出などをするシステムが現状動いています。

<今後の環境>
■クライアント側端末PCの環境やアプリケーションは基本的にそのまま
 (EXEファイル内の接続文字列などの記述の変更をして再度ビルドは可能)
■WindowsServer2016(64bit)/SQLServer2016に変更

このように、接続先のサーバーOSを変えて64bit版になると、
このアプリケーションはそもそも動作しないのでしょうか?

中には使えなくなる機能もあるかも知れませんが、
32bitのアプリケーションで64bitのサーバー側への
接続がそもそも出来ないなど、あるのでしょうか?

[ツリー表示へ]
タイトルRe: 接続先のWindowsServerを64bitへ変更
記事No16499
投稿日: 2019/08/23(Fri) 01:58
投稿者魔界の仮面弁士
> ■WindowsServer2016(64bit)/SQLServer2016に変更

Windows Server が 2016 になりましたので、Windows Server CAL の購入が必要かも知れません。
(SQL Server の方の接続ライセンスは、Server+CAL モデルか コア・ベースオプションかで異なる)

新しいサーバーに設置後、Firewall 設定で必要なポートを開けておく必要があったりしますが、
そのあたりの事情は、SQL Server 2005 の頃と変わらないはずです。


> ■クライアント側端末PCの環境やアプリケーションは基本的にそのまま

OLE DB Provider for SQL Server での接続でしょうか。
あるいは、ODBC 接続でしょうか。


> 32bitのアプリケーションで64bitのサーバー側への
> 接続がそもそも出来ないなど、あるのでしょうか?

通信上の大きな違いは無いため、引き続き 64bit OS 上のデータベースにアクセスすることができます。
もちろん 64bit OS 上で VB6 アプリを使う場合は、WOW64 による 32bit 動作となりますが、
クライアント PC が 32bit であれ 64bit であれ、VB6 アプリからの接続は引き続き可能です。


ただし Provider=SQLOLEDB での接続は、もはや推奨されていないことに注意してください。
現在は Provider=MSOLEDBSQL での接続、もしくは ODBC 接続がサポートされています。
ODBC 接続の場合も、Microsoft 製ドライバーだけでも 3 世代、他社製有償ドライバーも含めれば
さらに数種類のバージョンがありますので、何で接続するかの選定も合わせて行いましょう。
https://docs.microsoft.com/ja-jp/sql/connect/connect-history?view=sql-server-2017
https://docs.microsoft.com/ja-jp/sql/connect/oledb/applications/installing-oledb-driver-for-sql-server?view=sql-server-2017

いずれの接続形態をとるにしても、クライアントには、「32bit 版」のモジュールが
インストールされていることが大前提となります。
(サーバーが 64bit であったとしても、VB6 自体は 32bit アプリであるため)

ADO からの接続であれば、拡張子 .udl な 0 バイトのファイルを用意し、
それをダブルクリックで実行して、接続確認を行うことができます。
接続できた場合は、そのファイルをメモ帳で開けば、接続文字列が入手できますね。

※ 64bit 環境で 32bit での接続確認を行う場合には、
 32bit プロセスである C:\Windows\SysWOW64\cmd.exe から *.udl を起動します。



以下、追加情報として:

https://stackoverflow.com/questions/44033982/vb6-and-sql-server-2016-express-connection-string
https://social.msdn.microsoft.com/Forums/en-US/87b80d54-4f3e-496f-86b4-9f79afeccdc6/vb60-ado26-and-sql-2016?forum=sqldatabaseengine
http://maigo-pg.seesaa.net/article/443500968.html

[ツリー表示へ]
タイトルRe^2: 接続先のWindowsServerを64bitへ変更
記事No16500
投稿日: 2019/08/23(Fri) 10:56
投稿者むろや
魔界の仮面弁士さま
ありがとうございます。

> > ■クライアント側端末PCの環境やアプリケーションは基本的にそのまま
>
> OLE DB Provider for SQL Server での接続でしょうか。
> あるいは、ODBC 接続でしょうか。

<現状の接続文字列>
"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & _
"Initial Catalog=XXXXXSQL;Data Source=XXXXX-SERVER"
となっております。

> > 32bitのアプリケーションで64bitのサーバー側への
> > 接続がそもそも出来ないなど、あるのでしょうか?
>
> 通信上の大きな違いは無いため、引き続き 64bit OS 上のデータベースにアクセスすることができます。
> もちろん 64bit OS 上で VB6 アプリを使う場合は、WOW64 による 32bit 動作となりますが、
> クライアント PC が 32bit であれ 64bit であれ、VB6 アプリからの接続は引き続き可能です。

現在まだサーバー選定の段階です。
実際にテストなどが出来なかったので、
「接続は引き続き可能」という情報ありがとうございます。

お手数をおかけして申し訳ございません。
もう少し質問させてください。

> ただし Provider=SQLOLEDB での接続は、もはや推奨されていないことに注意してください。
> 現在は Provider=MSOLEDBSQL での接続、もしくは ODBC 接続がサポートされています。
> ODBC 接続の場合も、Microsoft 製ドライバーだけでも 3 世代、他社製有償ドライバーも含めれば
> さらに数種類のバージョンがありますので、何で接続するかの選定も合わせて行いましょう。

推奨されていない SQLOLEDB をそのまま使い続けるという判断をした場合、
極論、クライアント側のアプリケーションの接続における記述などは
「何も変えなくて良い」ということになるのでしょうか?

> いずれの接続形態をとるにしても、クライアントには、「32bit 版」のモジュールが
> インストールされていることが大前提となります。
> (サーバーが 64bit であったとしても、VB6 自体は 32bit アプリであるため)

こちらは、上記の
・SQLOLEDB接続のまま
・MSOLEDBSQLへ変更
・ODBCへ変更
の3点とも、「32bit版のモジュール」を 新たに クライアント端末側PCに
入れなければならない ということでしょうか?
(アプリケーションが実行されるクライアントPCは、現状と変わらず
32bitOSのままを予定しています)

[ツリー表示へ]
タイトルRe^3: 接続先のWindowsServerを64bitへ変更
記事No16501
投稿日: 2019/08/23(Fri) 15:26
投稿者魔界の仮面弁士
> <現状の接続文字列>
> "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & _
> "Initial Catalog=XXXXXSQL;Data Source=XXXXX-SERVER"
> となっております。

Windows 認証の接続文字列は、プロバイダによって微妙に異なる可能性があります。
https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/connection-string-syntax


自分の場合、メインで携わっていたのは、SQL Server 2008 R2 (v10.5) の頃ですし、
手元にあるのも SQL Server 2014 (v12.0) まで(しかも利用権限が割り当てられていない)なので、
あまり具体的な話になると弱かったりしますが……SQLOLEDB での接続事例は見かけました。
http://www.jiging.com/WP/blog/2019/02/

汎用的な障害事例を見かけた場合は、むしろ情報提供をお願いしたいところ。



> の3点とも、「32bit版のモジュール」を 新たに クライアント端末側PCに
> 入れなければならない ということでしょうか?

SQLOLEDB はそもそも更新されていないため、既にインストールされている環境であれば、
アップグレードの必要は無いはずです。(Windows Update だけで十分かと思います)

それ以外のモジュールについても、「入っていなければインストールせねばならない」点は自明なので、
先述したとおり、クライアント上に *.udl ファイルを作るなどして、インストールされている
32bit ドライバーを事前確認しておくことをお奨めします。



> 実際にテストなどが出来なかったので、
> 「接続は引き続き可能」という情報ありがとうございます。

Windows Server も SQL Server も評価版が用意されていますので、
早めに環境(物理 or 仮想)を用意して、十分な検証工数を確保しておきましょう。

移植に際して、照合順序を古いものに合わせておくのかどうかとか、
互換性レベルは幾つに設定するのかといった点も検討しておく必要がありそうです。


> 推奨されていない SQLOLEDB をそのまま使い続けるという判断をした場合、
> 極論、クライアント側のアプリケーションの接続における記述などは
> 「何も変えなくて良い」ということになるのでしょうか?

厳しい言い方をするならば、そうは言えないと思います。

先に紹介したとおり、少なくとも下記の【重要】欄において、
SQLOLEDB および SQLNCLI は「非推奨のまま」であるとともに、
「新しい開発作業にはどちらの使用もお勧めできません」と、
わざわざ囲み枠として記載されているわけです。

その注釈の意味を考えると、自分ならば「何も変えなくて良い」という判断はなかなか下しにくいところ。
https://docs.microsoft.com/ja-jp/sql/connect/oledb/oledb-driver-for-sql-server


一方、楽観的な観測で言えば、SQLOLEDB をそのまま利用するとしても、
接続文字列の見直しだけで、そのまま動かすことができるであろうとも思います。
少なくとも下記の記述から、互換性は担保されているように見えます。

https://docs.microsoft.com/en-us/sql/connect/oledb/applications/support-policies-for-oledb-driver-for-sql-server

》 ADO support policies

》 ADO applications can use the SQLOLEDB OLE DB provider that is included with Windows
》 if they don't require any of the features of SQL Server 2005 (9.x) or later.

》 ADO applications can use the OLE DB Driver for SQL Server,
》 but if they do so they must specify `DataTypeCompatibility=80` in the connection strings.
》 Only features from SQL Server 2005 (9.x) are available
》 when `DataTypeCompatibility=80` is present in the connection strings.



ということで、実例を持たない自分の意見では何の回答にもなりませんが、
「何も修正しなくても間違いなく動く」あるいは
「接続文字列を変えただけで、以前と同様の動作となる」ことを、
誰かが利用者に保証できるのであれば、「何も変えなくて良い」と判断できそうです。

とはいえその保証をするのは、Microsoft でもなければ掲示板で回答している第三者でもなく、
作成したアプリをお持ちの、むろやさん自身しかありえないと思いますよ。


厄介な点として…先に紹介した URL にもありますように、既に SQLOLEDB のメンテンスは
打ち切られており、ODBC への移行が進められてきたという事実があります。
2011年夏の時点で既に非推奨扱いと明言されたのみならず、SQL Server 2017 においては、
そもそも OLE DB というテクノロジそのものが、非推奨とされています。

ところがその後の方針転換により、OLE DB の廃止案が撤廃され、
改めて MSOLEDBSQL がリリースされることになりました。
https://teratail.com/questions/36859
https://support.office.com/ja-jp/article/050d88f3-b2d6-4e76-b6f9-f3c556f139ea


こう何度も方針転換されてしまうと、開発者としてはたまったものではないですが、
安全策を取るなら、次のバージョンまでは保証されるが、次の次は分からないと考えて
その時々で推奨されている方式を採用することが望ましいと思っています、理想論的ですけれどね。

そうは言っても移行コストの問題もあるので、単純には行かないのが世の常ですし
あえて何もしないという判断が下される事例も少なからずあるでしょう。

ただ、Microsoft が SQLOLEDB を継続保守するのではなく、あえて MSOLEDBSQL として
再設計した意味を考えれば、サーバーリプレース案件において古い方式を使い続けることは、
リスクが大きい気がします。現時点での互換性については、十分に検討されているとは思いますが、
たとえばさらにその次の移行時において完全廃止されてしまえば、移行テストすら難しくなるでしょう。

互換性が担保されている今のうちに、接続方法の見直しを行うことも検討しておいた方が良いと思います。
(同様の問題として、Oracle Database 向けの接続ライブラリである oo4o が完全撤廃された問題で、
 Oracle Client のバージョンを更新できなくなったという状況は、しばしば目にしてきました)

まぁ、そもそも VB6 のままで良いのかという問題もあるわけですが……それはまた別の話ですかね。

[ツリー表示へ]
タイトルRe^4: 接続先のWindowsServerを64bitへ変更
記事No16502
投稿日: 2019/08/23(Fri) 16:27
投稿者むろや
魔界の仮面弁士さま
ありがとうございます。

> > 実際にテストなどが出来なかったので、
> > 「接続は引き続き可能」という情報ありがとうございます。
>
> Windows Server も SQL Server も評価版が用意されていますので、
> 早めに環境(物理 or 仮想)を用意して、十分な検証工数を確保しておきましょう。

はい。
まずはテスト環境を準備して、
MSOLEDBSQLなど新しい接続方法などを色々試して検証してみます。

たいへん参考になりました。
ありがとうございました。

[ツリー表示へ]