sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

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 の左のメニューに↓のようなのがあると思います。
f:id:nasrinjp1:20170217095646p:plain

コマンド履歴から、「コマンド実行」を押します。とりあえず、現時点で Windows Update で適用できるパッチ一覧を確認してみましょう。コマンドのドキュメントで、AWS-FindWindowsUpdates を選びます。 f:id:nasrinjp1:20170217100144p:plain

対象のインスタンス ID と、Update Level を選びます。 f:id:nasrinjp1:20170217100751p:plain

AWS のコンソールから確認できる結果は2500文字までなので、長くなることを想定して、S3 に結果を保存するためにバケット名を指定します。実行結果によってメール等で通知させたい場合は、SNS の ARN 等も指定します。 f:id:nasrinjp1:20170217100806p:plain

これで「実行」を押すと、数分後には実際にパッチ一覧を出してくれます。 f:id:nasrinjp1:20170218213501p:plain

「結果の表示」リンクをクリックすると、こんな感じでKBがリストアップされます。日本語は文字化けしましたが、S3 に保存されている結果テキストは日本語表示されていました。 f:id:nasrinjp1:20170218213641p:plain

 

実際に KB を適用してみよう!

今度はドキュメントで「AWS-InstallMissingWindowsUpdates」を選んで、先ほどと同じ感じで内容を入れて実行します。 f:id:nasrinjp1:20170218214254p:plain

実行した結果(S3 のもの)です。先ほど Find で出力された KB だけがインストールされました。 f:id:nasrinjp1:20170218214402p:plain

実際に RDP でログインして Windows Update の画面を見ると、同じ KB がインストールされていることがわかります。 f:id:nasrinjp1:20170218214943p:plain

 

ものすごい雑な感じで流れを見てきましたが、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 がおかしくなっているのかな。とりあえずワークアラウンドが見つかったので、良しとしよう。