2016年6月19日日曜日

スマホの GPS が取得できない。(SQLServer とは全く関係がない)

前回の Raspberry Pi3 に引き続き、SQLServer とは全く関係のない話題です。

仮想移動体通信(MVNO)の関連です。

今まで au のスマホ( Xperia SOL22 )を使っていましたが、
毎月割(?)が終了したので、実質的に月額の支払いが高くなります。

まあ、もともと高い機種代をキャッシュで支払ったので、それが返ってきただけで、
別に月額利用料が安くなっていたわけではないいんですけど。

こうなると新機種に買い替えて、また毎月割を開始するか?
それだと、また高額な機種代を支払わないとダメ。

今使っている機種は、性能的に不便を感じていないし、
故障もなく、元気に動いている。

そういえば、半年ぐらい前に、勝手に電源が落ちるという不安定な動作になったため、
保証を使って、ほぼ新品になってたんでした。

なので、別に高額な新機種にするメリットはない。
でも、月額利用料が高い。

そこで、一気に、 MVNO に乗り換えることにした。
選んだのは、 au と相性のいい、MINEO 。

au の回線も残しておきたい事情もあったので、別途、古いスマホを中古で買って、
通話専用プランで au を完全解約しないようにした。
要は2台持ち。
(このあたりの仕掛けは別途書くつもり)

データ通信部分だけを au から MINEO にした状態。

これで、全く不便なく使っていたんですが、
ふと撮影した写真のジオタグがどうも変なところを指している。

GPS はもちろん ON にした状態なのに。

アプリの  GPS Status & Toolbox で確認したら、衛星を全く捕捉していない。
何分待っても捕捉しない。

  GPS Status & Toolbox は A-GPS のリセットもできるので、やってみたけど、
それでも捕捉しない。

MINEO の説明を掘り返したら、「 A-GPS には対応していません。」となっている。
なんてこった!

でも、 WIFI から A-GPS をダウンロードしてるはずなのに、全く捕捉しないし、
A-GPS が無くても、広場で15分も放置すれば捕捉できると思うけど、
それでもダメ。

これはこのスマホ本体の GPS 機能が故障している?












2016年5月13日金曜日

Raspberry Pi3 がやってきた

このブログにはSQLServer系の話題を書いていくつもりでしたが、
他に楽しいことが出来てしまったので、それも書いてみます。

Raspberry Pi3 を購入しました!

とりあえず、OSをインストールして、Winndows系のパソコンからリモートログインできるとこまでできました。
めちゃくちゃコンパクト(手洗い石鹸ぐらいの大きさ)ですが、NEC PC9800 系のパソコンよりよっぽど性能がいいですね。

しかも、簡単。

OSやその他のアプリケーションのインストールも、Android系のGoogle Playストアと同じような感覚で、簡単にできます。

所々に、GUI環境が用意されていないために、昔ながらのエディタを使う場面もあって、
それはそれなりに懐かしくて面白いです。

当面、こっち系の情報を書いていきます。

2016年3月12日土曜日

SQLServer 64bit 上で SQLServer 32bit をリンクサーバーに設定した場合、アクセスできない!

64bit で動作している SQLServerから32bit で動作しているSQLServer に対してリンクサーバーを設定しようとするとリンクサーバー自体は作成できますが、リンクサーバー内のテーブル対して、ビューを作成することはできません。(テーブルを参照することができません。)

なぜなんでしょうね?

ところが、シノニムを使えば、向こう側のテーブルを参照することができます。

CREATE SYNONYM dbo.こっちの名前 FOR リンクサーバー名.dbo.向こうの名前

これでOK!

2016年1月30日土曜日

シノニムってなんや?

「シノニム」っていう単語を知らなかったので、無視してましたが、直訳すると、「同意語」とかいう意味だそうです。

SQLServer 2005 以降ですが、
これ、意外とめっちゃ便利かも。
他のデータベースのオブジェクトをそのまま「別名を付けて」利用することができます。

今までは、ビューを作って接続していましたが、「Synonym」を使うと、元のデータベースと同じ名前で作成することもできるので、ほぼ、元のデータベースと同じオブジェクトような感覚で扱うことができます。

作成する際も、「 CREATE SYNONYM こっち側のテーブル名 FOR あっち側のサーバー名.データベース名.スキーマ.テーブル名 」で簡単に作成できます。

元になるデータベースのテーブル一覧は、「 Select * from sys.Tables 」で全部取ってこれますので、ループでぐるぐる回せば、あっち側のすべてのテーブルをシノニムにすることが簡単にできてしまいます。
(もちろん、あっち側のビューとかもとってこれます。)

同じデータを利用した別のシステムを構築するときに、同じデータベース内にビューなどのオブジェクトをどんどん作っていくと、名前付けに苦労します。

こんな時に、システム別にそれぞれデータベースを作って、それぞれのデータベース側は全部シノニムで接続しておけば、元のデータベース内と同じ感覚で作業できます。

2015年11月21日土曜日

専用の tnsnames.ora でAccess MDB から ORACLE にリンクを張る

通常 tnsnames.ora ファイルは、管理者権限がないと修正できません。
しかし、その端末に OracleClient さえ入っていれば以下の方法で tnsnames.oraを修正しなくても Access からODBC接続することができます。

本来の tnsnames.ora は %OracleHome%\NETWORK\ADMIN\ にあります。
これは修正不可です。

そこで、
Access の MDBファイルと同じところに専用の tnsnames.ora と、専用のファイルデータソース(hoge.dsn など)を作成する。

これで、Access から通常のリンクテーブルの方法でODBCリンクを張れます。

tnsnames.ora の例

Agyomu_hoge01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hoge01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = Agyomu)
    )
  )

赤字が、ファイルデータソースを作成するときに頼りにする、接続用のニックネームのようなものです。
緑字が、ORACLEのデータベースが存在するサーバーの名称です。IPアドレスで指定することも可能。
青字が、接続したいデータベースの名称(=サービス名)です。



2015年11月8日日曜日

インターネットに接続できない環境でアプリケーションの起動が異常に遅い

今回は SQLServer についてではありません。

社内でクローズ(インターネット接続なし)のネットワーク環境があり、
そこで使用するHTTPを使用したアプリケーションの起動が異常に遅いことがありました。

通常15秒程度で起動するはずが、最大2分ほど必要。
これは使用に耐えない。

色々調べましたが、開発元からの回答は、
「インターネットオプションで、セキュリティーを『信頼済みサイト』から『ローカルイントラネット』に変更してください。」とのことでした。

しかし、いまいち。

よくよく確認したら、「前提条件として、インターネットオプションの『発行元証明書の取り消しを確認する』がOFFになってますよね?」とも。

私「えっ?なってないよ。」
開発元「いや、私が先日設定しました。」
私「でも、なってない。とりあえず、OFFにしてみるね。」

おお!15秒で起動するやん。

私「やっぱり、問題は証明書の取り消しでした。OFFにしてくれてないやん。」
開発元「いや、しました。ドメインアドミニ権限で。」

それ!
この「発行元証明書の取り消しを確認する」はユーザー単位なんですね。
なので、開発元さんが設定してくれたのは、アドミニの時だけ効いて(OFF)ました。

「発行元証明書の取り消しを確認する。」とは、
事前にアプリケーションの開発者が申請してあった、発行元証明書(正しく作成されたアプリであることを証明する電子署名)が、現在も取り消されていないかどうかを、インターネットで確認するものだそうです。
なので、インターネットに接続できない環境では、タイムアウトするまで待ち続けます。

クローズ環境ではONにする必要は全くないですね。




2015年9月27日日曜日

SQLServer からリンクサーバーでつないだOracle に OpenQuery を発行 その2

SQLServer からリンクサーバーで ORACLE につなぐのは、結構みなさんやりたいようですね。

以前に書いた「SQLServer からリンクサーバーでつないだOracle に OpenQuery を発行」に結構アクセスをいただいています。

この時の例では、条件に数値を入れていますのであまり問題ないのですが、文字列を条件に入れる場合、クォーテーション「'」の数で悩むときがあります。

条件が数値の場合は、
SELECT * FROM OPENQUERY(OraLink, 'SELECT * FROM hoge Where ID = 1')
これでいいんですけど、

条件が文字の場合は、
SELECT * FROM OPENQUERY(OraLink,
               'SELECT * FROM hoge Where name like  ''hagehage%'' ')

ということになります。
SQLServer がクォーテーテョンを2個並べると1個分と判断するので、
実際にORACLE に投げられるSQL文は、
SELECT * FROM hoge Where name like  'hagehage%'
ということになります。