none
SQL database のViewで取得していた内容が1列狂いました(別な列の値がセットされる) RRS feed

  • 質問

  • 本日、突然、SQL databaseで、

    「名前」と「金額」をGroup by して金額をSumして取得するViewが突然エラーになり、全ユーザーが操作できなくなり、

    原因を調べたら、「金額」の列に「名前」がセットされ、「名前」は文字なので数値に変換できない、ということが原因でした。

    select 文 で同じ内容をとっても正常で、当たり前ですが、数字の列に、取るべき数字が入ります。

    そのViewでとると、上記の通り値が狂うのです。(SEI_GAK 請求金額 に、CST_NAME 顧客名が入るのです。危険すぎ)

    Viewの定義をSSMSで取得しても、正しく設定されていて、

    構築されたViewだけが、挙動がおかしいのです。

    不具合対応の結果としては、View定義をSSMSで取得してDrop・Createしたら直りました。(繰り返しですが、DBに入っているView定義は正しいのです)

    もう、何年も変更していない、安定稼働していたViewで起きたのが驚きで、

    なんの予兆もなく、このような状態になって本当に残念です。

    今回は、文字と金額だから、SQLエラーになり、金額のミスは結果的には発生しませんでしたが、

    もしも、文字と別の文字、金額と別の金額で、この不具合が再度発生してしまったら、

    ミスっていることを気づくことができません。本日、Azure databaseが、データベース製品としての信頼が劇的に低下しました。困ったものです。残念です。

    同じ現象に遭われた方はいらっしゃいますか?

    こういう、明らかにAzureの不具合があったとき、具体的な情報を提供して原因調査していただきたいのは山々ですが、

    有料サポートじゃないとテクニカルサポートに質問出せないですよね、不思議です。無料で問い合わせできるのは料金についてだけ。

    不思議です。致命的にバグっているのに。DBってシステムの命だと思うんですが、ね。SQLでデータ違うもの表示したら、マズ過ぎですよね

    2016年5月23日 10:30

回答

  • 自己レスで恐縮です!

    原因が、わかりました。文章にすると意外と気づくことがありまして(汗)

    先週、Viewで参照しているテーブルに、1列追加しました。

    その影響で、Viewで取得している内容がズレたと思われます。

    でも、再構築が必要です的なメッセージもないわけですし、

    例えばOracleとか?だったら、Table定義を変更したらViewに警告マークついて、一回開けば勝手に再構築されますよね、うろ覚えですが。

    Azureには警告マークは無く、何度もViewは開いているので、勝手にView定義再コンパイルされてもいいはず。

    なのにしてない。

    そもそも、追加した列は全く関係ないはず。なのに、Viewで、正しい物理名を使っても違う値が取れるって、

    やはり致命的におかしい

    自力でなんとかここまで原因は調べたので、後はMS様の中の方、よろしくお願いします

    要約すると、

    Viewで参照する元テーブルに列を追加したら、Viewの再構築を促すか、次の参照時に勝手に再構築してください

    2016年5月23日 10:56