Windows Update を RDP せずに実行する [cloudpack OSAKA blog]
ナスです。
皆さんは Windows Server で何か作業される時、リモートデスクトップ(RDP)でログインして作業してますか? その時、オペミス等でヒヤリとしたことや、実際に何かやっちゃった!ってことないですか? 私は何回もあります…
オペミスでなくても、Windows なら作業中にサーバの負荷が高くて画面が遷移しない!とか、何か実行したけど画面に何も出なくてちゃんと操作できたかどうかわからない!なんて経験をされた方も多いと思います。
もし、RDP せずに Windows Server の操作ができたら楽だし、オペミスも少なくなるので安心だと思いませんか? 思いますよね??
そこで今回は、EC2 Systems Manager というサービスを使って、Windows Server に対して RDP で入らずに操作する方法をご紹介します。EC2 Systems Manager って何?って方は、↓をみてください。
aws.amazon.com
とりあえず KB 検索からやってみよう!
まずは AWS のコンソールにアクセスしましょう。EC2 の左のメニューに↓のようなのがあると思います。
コマンド履歴から、「コマンド実行」を押します。とりあえず、現時点で Windows Update で適用できるパッチ一覧を確認してみましょう。コマンドのドキュメントで、AWS-FindWindowsUpdates を選びます。
対象のインスタンス ID と、Update Level を選びます。
AWS のコンソールから確認できる結果は2500文字までなので、長くなることを想定して、S3 に結果を保存するためにバケット名を指定します。実行結果によってメール等で通知させたい場合は、SNS の ARN 等も指定します。
これで「実行」を押すと、数分後には実際にパッチ一覧を出してくれます。
「結果の表示」リンクをクリックすると、こんな感じでKBがリストアップされます。日本語は文字化けしましたが、S3 に保存されている結果テキストは日本語表示されていました。
実際に KB を適用してみよう!
今度はドキュメントで「AWS-InstallMissingWindowsUpdates」を選んで、先ほどと同じ感じで内容を入れて実行します。
実行した結果(S3 のもの)です。先ほど Find で出力された KB だけがインストールされました。
実際に RDP でログインして Windows Update の画面を見ると、同じ KB がインストールされていることがわかります。
ものすごい雑な感じで流れを見てきましたが、RDP でわざわざ Windows Server にログインしなくても作業ができることがお分かりいただけたと思います。定型作業や不定期実行だけど決まった動作の作業等は、この Systems Manager を使うことでオペミスすることなく、しかもログが保存されるので画面ショットを撮るといった煩わしい行為もする必要がなくなります。
ちなみに、Systems Manager は、オンプレミスのサーバにも使えますので、AWS 使ってないから関係ないや、ではなく、ぜひ一度使ってみてください。この便利さがお分かりいただけると思います。
Oracle のロックされているテーブルのセッションを知りたい [cloudpack OSAKA blog]
ナスです。
RDS for Oracle (v11.2.0.4) のテーブルでずっとロックがかかっているものがあったので、調べたことを備忘録として書きます。
最初に試したのはこのクエリ。
SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN ( SELECT SID FROM V$LOCK WHERE TYPE IN ('TM','TX') );
実行してみると、全く反応が返ってこない…なぜだ…
そもそも V$LOCK の count だけでも反応が返ってこない。なぜだ…
仕方なく、V$LOCK を使うのをやめて、隣に座っている Oracle に詳しい師匠に聞いて下記のクエリに変えてやってみたら、1秒くらいで結果が返ってきました。
SELECT object_name, oracle_username, s.sid, s.serial#, to_char(s.logon_time,'YYYY/MM/DD HH24:mi:SS DAY'), s.program, sql_address FROM v$locked_object l, dba_objects o, v$session s WHERE l.OBJECT_ID = o.OBJECT_ID AND l.SESSION_ID = s.SID AND object_name = 'テーブル名' ;
なんだろう。V$LOCK がおかしくなっているのかな。とりあえずワークアラウンドが見つかったので、良しとしよう。