エンジニアが発信する【その他DBMS】の記事を集めました

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【その他DBMS】

2010年08月31日

SQL ServerがLANの別のPCから見られない場合の対処

SQL Server のデータをゴニョゴニョして調査するツールを作ったが、あるサーバーでは動かない。
動くサーバー:Windows 2003 R2 / SQL Server 2005
動かないサーバー:Windows 2008 R2 / SQL Server 2008 R2

Excel から ADO 接続していたが、最近ADOなんてサポートしなくなったのか?とかで調べるがそのような情報はない。SQL Server Browser というサービスが起動している必要があるという記載をどこかで見つけ、試してもダメ。ファイヤーウォールか?

試しにSQL Server Management Studio にて接続を試みるも、これもダメ。ということはファイヤーウォール?と調べると、確かにファイヤーウォール上許可はなかった。よし、1433ポートを許可するよう追加、と言う作業をしていると、確か4年ほど前にもSQL Server2005 で似たようなことに遭遇したことをふと思い出した。デフォルトではSQL ServerはTCP/IPでの接続できるようになっていなかったはず
状態を調べると、SQL Server でTCP/IP接続が許可されていない。接続できるよう設定変更。


SQL Server Management Studio での利用がOKになった。ツールからのアクセスもOK。ほっと一安心である。


【まとめ】
・SQL Server 2005 以降は TCP/IP でデータベースへの接続を行おうとしてもデフォルトでは不可。
・調査にはSQL Server Management Studioも使うこと。
・ファイヤーウォールの設定と、SQL Server 自体のTCP/IPの利用可否を確認すること。


【おまけ】
ADOでSQL Server へ接続する際のプロバイダー名が追加されていた。
・従来 SQLOLEDB
・SQL Server 2005 SQLNCLI
・SQL Server 2008 SQLNCLI10

なお、SQL Server 2005/2008 でも SQLOLEDB を使用することは可能。
詳細
http://msdn.microsoft.com/ja-jp/library/ms130978.aspx

同じテーマの最新記事

2010年08月15日

DBMSの選択

今や商用DBは Oracle と SQL Server が2大勢力である。もちろん、無償のモノなら MySQL や PostGreSQL もある。

私の個人的な選択肢は、
・カネを掛けたくないなら PostgreSQL
・カネを存分に掛けられ、Windowsでよいなら SQL Server
としている。この2つは私が保守に慣れているからだ。

もちろん、お客さんの指定があったり、実際の保守要員が慣れているモノにするなど、他に適切なモノがあったりする場合は別のモノを提案する。実現はしなかったが、とにかく速いデータベースが必要という場合には、高速屋の「高速機関」が使えるかもメーカーに問い合わせたことがある。

今までは、XMLへの対応も気にして、DB2も範疇に入れていたが、他のDBMSでも対応が謳われてきていること、XMLDBという別カテゴリも出てきていることもあり、除外した。

OracleではなくSQL Server であるのは、これ以外に「ミラーリングが可能」であること。どうやら他の製品では対応していないようで、とことん高可用性を求めるならこれだろう、と思う。
ただ、そこまで必要になるシチュエーションはそうないはずだ。しかし、DBMSを変更するというのは厄介な作業である。プログラムを変更する、と言う程度ならまだマシであるが(一般にはコレすら嫌がられる)保守の画面やらが総入れ替えになり、再教育が必要になるからである。それなら初めからどう転んでも大丈夫なモノにしておく方が安全だ。


念のために書くが、このブログはVBAの情報がメインであるにも関わらず、上記の選択肢には Access が含まれていない。それは知れたことで、Access には DBMS と呼べるだけの機能が備わっていないからだ。それなら SQL Server Express Edition の方がずっといいだろう。

同じテーマの最新記事

2010年06月16日

データベースへの接続 サンプル 続き

先日の記事では「次回はクラスモジュール」と書いたが、あれだけでは接続と切断だけなので、実際のDBアクセスのコードも追加しておく。先日の記事のコードと同じモジュール内に加えて使う


' 追加分

'----------------------------------------
' トランザクション開始
'----------------------------------------
Public Sub transBEGIN()
Con.beginTrans

End Sub

'----------------------------------------
' トランザクション確定
'----------------------------------------
Public Sub transCOMMIT()
Con.commitTrans

End Sub

'----------------------------------------
' トランザクション取消
'----------------------------------------
Public Sub transROLLBACK()
Con.rollbackTrans

End Sub

'----------------------------------------
' DBアクセス関連
'----------------------------------------
Public Sub ExecChgSQL(sSQL As String)

If Not (Rs Is Nothing) Then
Set Rs = Nothing
End If

sSQL = Replace(sSQL, "''", "NULL")

Con.Execute (sSQL)
Set Rs = Nothing

End Sub

'----------------------------------------
' DB 選択系処理
'----------------------------------------
Public Sub ExecRefSQL(sSQL As String)

Dim iErrCnt As Integer
On Error GoTo PROC_DBERR

If Not (Rs Is Nothing) Then
Set Rs = Nothing
End If

Cmd.CommandText = sSQL
Set Rs = Cmd.Execute

Exit Sub

PROC_DBERR:
If ERR Is Nothing Then
For iErrCnt = 0 To Con.Errors.count - 1
COM.MSG.ERR (Con.Errors(iErrCnt))
Next iErrCnt
Con.Errors.Clear
Else
For iErrCnt = 0 To ERR.count - 1
COM.MSG.ERR (Con.Errors(iErrCnt))
Next iErrCnt
ERR.Clear
End If

End Sub


これは、たぶんだけど、標準モジュール/クラスモジュールのどちらにコピーしても使えると思う。

次回は、これを標準モジュール/クラスモジュールで使った場合、どうなるかを実験することで、標準モジュールとクラスモジュールの差異や、クラスモジュールの使い方の例となればいいだろう。

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【その他DBMS】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA