こんにちはー。Y.Takahashiです。
今日は私が仕事で使っているソフトMagicxpaとデータベースとの接続についてはなしたいと思います。
皆さん、プログラミングするに当たってデータベースとの接続を気にしたことありますか?
言語系のプログラミングをしている方であれば、「そんなの当たり前すぎて呼吸するぐらい簡単だよ」ってなるかと思います。
しかし、大学のコンピュータ実習以外では、ずっとMagic一筋の私にとってはいまいち曖昧なんですよね。
Magicってデータビューに定義するだけ(昔ならレコードメインで定義するだけ)で後は勝手にデータベースに接続してテーブルをオープンするので、そのあたりMagicユーザーって気にしないのですね。気にしてもせいぜい読み取り専用モードで開くかどうかぐらいですね。
最近私はこれについて考えさせられました。
MS-SQLをDBMSとして使っていると、ネットワーク障害やサーバー側でSQLのサービスないしOSのリブートが起こった際、その時クライアント側でSQLを掴んでいなくても後で掴みに行くと「DB接続エラー」になるんですね。
ここで勝手に「何もテーブルをオープンしていなければセッションは張っていないはず」って思い込んでしまったのですね。
PervasiveSQL(現 Actian Zen PSQL)の場合だと、モニターがあって、テーブルのオープン状況を見れていたので、そこで上がっていなければセッションを張っていないと解釈していました。でもこれって私の勝手な解釈なんですね。
MS-SQLで確認しようと調べたら、Microsoft SQL Server Management Studio(MSSM)で接続状況みれるんですね。私、これ知りませんでした。
使い方は簡単ででした。
1.MSSMを起動
2.対象のインスタンスに接続
3.接続したインスタンスを右クリック→利用状況モニターをクリック
プロセスの所に自分の名前と接続しているアプリケーションの名前が出ています。
Magicで色々操作してみると分かったのですが、これって何かしないとMagicを終了するまでセッションを消しません。
どうもこれが原因で、一旦セッションが切れてもMagicは接続しに行こうとして「DB接続エラー」になるようです。
理屈は、
1.MagicがSQLにセッションを張る。
2.SQL側でセッション番号を振り出す。
3.MagicはSQLから振り出したセッション番号に対してやり取りを始める。
ここでSQLのサービスが再起動すると。
4.SQL側のセッション情報がクリアされる。
5.Magic側から”3”で振り出されたセッションに対してやり取りを始めようとする
6.セッション番号が見当たらないので「接続できません」とエラーを返す。
のようでした。
ちょっと前に「何かしないとセッションは消えない」と言いましたが、接続を切る方法があるんですね。
関数でDbdiscnt(‘データベース名’)ってのがあります。
これをSQLに接続を張る前に実行しておくと、Magicの内部的に持っているセッション情報をクリアして、改めてセッションを張るようです。
関数で切断はありますが、どうも接続は無いようです。
それでは。