AWSとOracleとElastic IP

 

(旧ブログから移行したので情報が古い。もうOracleのRDSまで出るもんなあ。AWSの機能追加・改善のスピードにはいつも驚かされる)

Amazon Web Services上でOracle用のインスタンスをlaunchして、Elastic IPを割り振った後、何点かハマったのでメモ。

インスタンス起動すると、listener.oraのHOSTが古いままなんですけど

症状:
AWSのインスタンスは、起動する度にホスト名が変わってしまう。
listener.oraは、こんな感じになっているのだが、


$ cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
(ADDRESS = (PROTOCOL = TCP)(HOST = domU-XX-XX-XX-XX-XX-XX)(PORT = 1521))
)
)

HOSTの文字列が更新されない。ちなみに、tnsnames.oraのHOSTも同じ。

どうしよう:
参考:[TechDay] 第6回 Amazon Elastic Compute Cloud (Amazon EC2)
http://builder.japan.zdnet.com/member/u502383/blog/2008/10/25/entry_27017395/

上記サイトを参考に、Oracleの起動スクリプトを書き換える。上記サイトではOracle XEをベースに解説されているが、Enterprise Editionの場合は/etc/init.d/dboraを書き換える。ポイントとしては、元の起動スクリプトだと、/root/firstrunがないとlistener.oraの更新がされないようになっていたので、条件文コメントアウトした。

インスタンス起動すると、環境変数ORACLE_HOSTNAMEが古いままなんですけど

症状:
oracleユーザの環境変数ORACLE_HOSTNAMEも、前回起動していたインスタンスのホスト名が割り当てられたまま。

どうしよう:
参考:Thread: How to use the db installed on Amazon EBS (Elastic Block Storage)?
http://forums.oracle.com/forums/thread.jspa?threadID=720265&start=15&tstart=0

これもOracleの起動スクリプトを書き換える。元の# Get Public DNS Hostnameセクションをコメントアウトして、以下だけにしてみた。例外処理できてませんけど・・・。


echo "Getting Public DNS for this Instance" | logger -t "dbora"
METADATA_URI=http://169.254.169.254/latest/meta-data/public-hostname
export ORACLE_HOSTNAME="`wget -q -O - ${METADATA_URI}`"
echo "Setting ORACLE_HOSTNAME in .bash_profile" | logger -t "dbora"
echo "export ORACLE_HOSTNAME=${ORACLE_HOSTNAME}" >> /home/oracle/.bash_profile

EM起動しないんですけど・・・

症状:
Enterprise Manager起動しようとすると、


$ emctl start dbconsole
Starting EM Database Control
OC4J Configuration issue. /u01/app/oracle/product/11.1.0/db_1/oc4j/j2ee/OC4J_DBConsole_昔のホスト名.compute-1.internal_awsdb01 not found.

と怒られ、起動できない。

どうしよう:

参考:Getting started with Oracle on AWS
http://www.toadworld.com/Portals/0/GuyH/Articles/Getting%20started%20with%20Oracle%20on%20AWS.pdf

EMのレポジトリが壊れているので、一回drop。


$ emca -deconfig dbcontrol db -repos drop -SID awsdb01 -PORT 1521 \
> -SYSMAN_PWD sysmanのパスワード -SYS_PWD sysのパスワード

レポジトリ再作成。


$ emca -config dbcontrol db -repos create -SID awsdb01 -PORT 1521 \
> -SYSMAN_PWD sysmanのパスワード -SYS_PWD sysのパスワード -DBSNMP_PWD dbsnmpのパスワード

結果、EM起動してログインできるようになった。

Oracleさんにはこのあたり、「意外と簡単!? Oracle Database 11g – Amazon Web Services 版 – 」としてまとめて公開してほしいところ。