テーブル名を入力しても候補が表示されないのに、同じウィンドウで SELECT 文は問題なく実行される。この組み合わせこそが手がかりであり、接続は機能しているがエディターの補完状態は機能していない。SSMS は独自のキャッシュと、そのウィンドウがどのデータベースとアカウントを使っているかについての独自の認識を保持している。ネットワーク設定を変更する前に、その状態をトンネルとは別物として扱うこと。

ウィンドウは独自の接続状態を持つ

各クエリ ウィンドウは、接続、データベース、承認コンテキストを保持している。Object Explorer が別のサーバーやデータベースに接続していることも、別のタブが別のアカウントで実行されていることもある。他の何かと比較する前に、影響を受けているウィンドウ自身の状態を確認すること。VPN が起動する前に開いたウィンドウは、すでに存在しない接続に結び付いていることもあるため、その状態はタイトル バーが示す以上に重要だ。

VPN の中断により、アプリケーションは生きているように見えても、そのウィンドウが切断されたままになることがある。通常の SSMS ワークフローで再接続し、データベース セレクターが期待どおりのデータベースを表示していることを確認すること。

ローカル キャッシュを強制的に再構築する

Microsoft の IntelliSense トラブルシューティング ガイド には、サポートされている更新手順として 編集 → IntelliSense → ローカル キャッシュの更新、または Ctrl+Shift+R が記載されている。接続を確認した後に使い、特にウィンドウを開いたままオブジェクトが変更された場合に有効だ。更新はローカルの一覧を作り直すが、消えたネットワーク パスを復元することはできない。

また、エディターで IntelliSense が有効になっていること、インストールされている SSMS のバージョンがこれから書く文をサポートしていることも確認すること。補完の動作はバージョンによって異なり、すべての製品やスクリプト形式を網羅しているわけではない。ショートカットが何も起こさない場合は、VPN の症状ではなくエディターの状態の症状として扱うこと。グレーのままのメニュー項目や、別のキー割り当てに奪われたショートカットは、どちらもエディター側の事実であり、トンネルを疑う前に記録する価値がある。

欠けている名前は権限であることもある

補完一覧に表示されるのは、接続中のアカウントが見られるオブジェクトだけだ。そのため、同僚からコピーしたスクリプトが、あなたのセッションでは解決を許可されていない名前を参照していることがある。管理者の無関係なセッションではなく、意図したアカウントの可視性と比較すること。権限のために名前が欠けている場合、エディターを直しても表示されるようにはならない。

データベース所有者に、タスクに必要な最小限の権限を求め、その付与を具体的に保つこと。候補一覧を埋めるために与えられる広範な管理者権限は、小さな利便性と大きな露出を交換している。

実際にどちらの障害なのかを判断する

二つの障害はキーボードから見ると似ているが、担当が異なる。同じウィンドウで通常の文も失敗するなら、その接続の名前解決、トランスポート、認証を調べること。文は実行され候補だけが欠けているなら、証拠はエディター側にある。見たのがどちらなのかを書き留めておくこと、なぜなら二つの報告は別のチームに渡り、混ざった説明は両方を遅らせるからだ。

インストールされている SSMS のバージョン、選択中のデータベース、アカウント、そしてツール担当への報告用に小さな非機密の例を一つ保管すること。失敗する正確な名前の記録や一覧は、IntelliSense が壊れているという一言より役に立つ。その後、キャッシュ更新後と再接続後に再試行すること、この二つの操作がほとんどのケースを切り分けるからだ。

関連記事