RDS for Oracle でデータポンプが利用可能に (2) EC2上にOracleインスタンスを作成する

データポンプの転送元となるEC2上のDBを作成します。
この手間が今回の検証の9割方の労力ですね。

参考にしたサイトと手順やパス等が違う部分もありますので、手順として全文記載しておきます。

1. EC2を起動してログイン

AMI(ami-72bf0873)を指定してローンチ

$ ssh -i xxx.pem root@ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com

2. EBSをアタッチする

  • インストーラーの格納用(10GB程度):/dev/sdf をアタッチしてフォーマットして /mnt/data にマウント
# mkdir -p /mnt/data
# mkfs -t ext3 /dev/sdf
# mount /dev/sdf /mnt/data
  • Oracleデータファイル用(必要なだけ、今回は10GB):/dev/sdg をアタッチしてフォーマットして /opt/oracle/oradata にマウント
# mkdir -p /opt/oracle/oradata
# mkfs -t ext3 /dev/sdg
# mount /dev/sdg /opt/oracle/oradata
# chown -R oracle:oinstall /opt/oracle

3. /mnt/data にインストーラを格納する

ゴニョゴニョして格納します。

4. unzipする

# cd /mnt/data
# unzip linux.x64_11gR2_database_1of2.zip
# unzip linux.x64_11gR2_database_2of2.zip
# chown -R oracle:oinstall /mnt/data

5. oraInst.locファイルを作成する

# vi /etc/oraInst.loc

---- 以下を記載する
inventory_loc=/opt/oracle/oraInventory
inst_group=oinstall
----

# chown oracle:oinstall /etc/oraInst.loc
# chmod 664 /etc/oraInst.loc

6. レスポンスファイルを編集用にコピーする

# mkdir /mnt/data/cui
# cp /mnt/data/database/response/*.rsp /mnt/data/cui/.

7. レスポンスファイルを編集する

# vi /mnt/data/cui/db_install.rsp

---- 以下のように編集する
oracle.install.option=INSTALL_DB_AND_CONFIG
ORACLE_HOSTNAME=localhost.localdomain
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/oracle/oraInventory
SELECTED_LANGUAGES=ja,en
ORACLE_HOME=/opt/oracle/product/11.2
ORACLE_BASE=/opt/oracle
oracle.install.db.InstallEdition=SE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=ec2db.localdomain
oracle.install.db.config.starterdb.SID=ec2db
oracle.install.db.config.starterdb.memoryLimit=512
oracle.install.db.config.starterdb.password.SYS=****
oracle.install.db.config.starterdb.password.SYSTEM=****
oracle.install.db.config.starterdb.password.SYSMAN=****
oracle.install.db.config.starterdb.password.DBSNMP=****
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/opt/oracle/oradata
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
----

8. 環境変数を設定してインストール実行

# su - oracle
$ vi ~/.bash_profile

---- 以下を追記する
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2
----

$ source ~/.bash_profile
$ env | grep ORA
$ cd /mnt/data/database
$ ./runInstaller -silent -responseFile /mnt/data/cui/db_install.rsp
  〜インストーラーが実行されてOracleインストールとDBの作成が行われる〜
  〜/opt/oracle/product/11.2/root.sh を実行するように促されたらOK〜
# su - root
# /opt/oracle/product/11.2/root.sh

9. 環境変数に追加

# su - oracle
$ vi ~/.bash_profile

---- 以下を追加
export ORACLE_SID=ec2db
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib  
----

$ source ~/.bash_profile

10. EMの状態確認

$ emctl status dbconsole

  ※EMの開始|終了|ステータス確認:emctl start|stop|status dbconsole

11. リスナーの状態確認

$ lsnrctl status

  ※リスナーの開始|終了|ステータス確認:lsnrctl start|stop|status

12. 自動起動設定をする

# vi /etc/oratab

---- 以下のように変更
  ec2db:/opt/oracle/product/11.2:Y
----
  
# vi /etc/rc.d/init.d/oracle

---- 以下のように記載
#!/bin/bash

# oracle: Start/Stop Oracle Database 11g R2
#
# chkconfig: 345 90 10
# description: The Oracle Database is an Object-Relational Database Management System.
#
# processname: oracle

. /etc/rc.d/init.d/functions

LOCKFILE=/var/lock/subsys/oracle
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2
export ORACLE_USER=oracle

case "$1" in
'start')
   if [ -f $LOCKFILE ]; then
      echo $0 already running.
      exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $LOCKFILE
   ;;
'stop')
   if [ ! -f $LOCKFILE ]; then
      echo $0 already stopping.
      exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
   rm -f $LOCKFILE
   ;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ -f $LOCKFILE ]; then
      echo $0 started.
      else
      echo $0 stopped.
   fi
   ;;
*)
   echo "Usage: $0 [start|stop|status]"
   exit 1
esac

exit 0
----

# chmod 755 /etc/rc.d/init.d/oracle  
# /etc/rc.d/init.d/oracle start
# chkconfig --add oracle
# chkconfig oracle on
# chkconfig --list oracle

13. 転送元データ用のユーザ・スキーマを作成する

$ sqlplus / as sysdba
SQL> CREATE USER "USR1" IDENTIFIED BY "****" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
SQL> GRANT UNLIMITED TABLESPACE TO "USR1";
SQL> GRANT "CONNECT" TO "USR1";
SQL> GRANT "DATAPUMP_EXP_FULL_DATABASE" TO "USR1";
SQL> GRANT "DATAPUMP_IMP_FULL_DATABASE" TO "USR1";
SQL> GRANT "RESOURCE" TO "USR1";
SQL> exit

14. 作成したスキーマにテーブルを作成してデータをinsertする

$ sqlplus usr1/****
SQL> create table test (ID number, QTY number);
SQL> begin
 2 for j in 1 .. 100 loop
 3 for i in 1 .. 1000 loop
 4 insert into test values(i, 100);
 5 commit ;
 6 end loop;
 7 end loop;
 8 end;
 9 /
SQL> select count(*) from test;

---- 結果10万件入ってることが分かる


今回はここまで。

次回はRDS for Oracleの起動、EC2DBのtnsnames.oraの編集、双方のデータベース・リンクの作成、そして実際のデータ・ポンプ・インポート作業の予定です。

参考:
http://d.hatena.ne.jp/KNOPP/20120706/1341591598: Oracle RAC on Amazon EC2 (2012 7月版)/KNOPPの日記
http://blog.suz-lab.com/2011/04/ec2oracle.html: 東京リージョンのEC2にOracleをインストール/suz-lab - blog
http://www.lovebug.jp/index.php?cmd=read&page=Oracle%2F11g%2F%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%EF%BC%88%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9FCUI%E3%81%A7%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%EF%BC%89: Oracle 11g Release 2のインストール(レスポンスファイルを利用したCUIでのインストール)/lovebug.jp

※2012.10.10追記:レスポンスファイルをインストーラー用のEBS(/dev/sdf)ごと使い回せるように配置場所を変えました。また、自動起動スクリプトの一部に誤りがあったため修正いたしました。