S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

開発用サーバの構築(Oracle Database)

開発用サーバの構築(OSからTomcatまで) - S_a_k_Uの日記みたいなDB
の続き。
Oracle Database 12c Enterprise Edition
CentOSにインストール。

Oracle Database 12c Enterprise Editionのインストール

インストーラ(linuxamd64_12102_database_1of2.zipとlinuxamd64_12102_database_2of2.zip)は別途Webページからダウンロードしておく。
cifsをインストールして、共有フォルダにあるインストーラを取得。

# yum install cifs-utils
# mkdir /mnt/share
# mount -t cifs -o user= password= //host/share /mnt/share
# cp /mnt/share/linuxamd64_12102_database_*.zip *.*

unzipをインストールして、zipファイルを解凍。

# yum install unzip
# unzip linuxamd64_12102_database_1of2.zip
# unzip linuxamd64_12102_database_2of2.zip
# ./databse/runInstaller

ここでインストーラGUIであることに気が付く。
CUIでのインストールはレスポンスファイルを作成すればいいらしいが、素人さんにはハードルが高いので、CentOSにデスクトップをインストールしてGUIでインストールを行うことに。

  • デスクトップとVNCのインストール
# yum groupinstall "X Window System" "Desktop" "General Purpose Desktop"

リモートで操作したくなるのでVNCをインストール。
CentOS-6.6-x86_64-bin-DVD1.isoの中から/Pakages/xorg-x11-fonts-misc-7.2-9.1.el6.noarch.rpmと/Pakages/tigervnc-server-1.1.0-16.el6.x86_64.rpmをコピーしてインストールし、VNCのユーザー設定と自動起動

# rpm -ihv xorg-x11-fonts-misc-7.2-9.1.el6.noarch.rpm
# rpm -ihv tigervnc-server-1.1.0-16.el6.x86_64.rpm
# vi /etc/sysconfig/vncservers
VNCSERVERS="1:user_1"
VNCSERVERARGS[1]="-geometry 1024x768"
…
VNCSERVERS="n:user_n"
VNCSERVERARGS[1]="-geometry 1024x768"

各ユーザーでログインしてパスワード設定

# vncpasswd

ファイアウォールのユーザー分のポートを開ける。

# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
…
-A INPUT -m state --state NEW -m tcp -p tcp --dport 590n -j ACCEPT
# /etc/rc.d/init.d/iptables restart

VNCの起動と自動起動を設定

# /etc/rc.d/init.d/vncserver start
# chkconfig vncserver on

再度インストーラを実行

# ./databse/runInstaller

画面が出てきたら、インストーラのウィザードに沿ってパラメータを入力。
前提条件のチェックで引っかかって、画面で表示された修正スクリプトをrootで実行。

# /tmp/CVU_12.1.0.2.0_oracle/runfixup.sh 

今度は依存するパッケージをインストールしろと。

# yum install glib*
# yum install compat-libcap1
# yum install compat-libstdc++-33
# yum install libstdc++-devel
# yum install sysstat
# yum install gcc-c++
# yum install ksh
# yum install libaio
# yum install libaio-devel

やっと進んで、今度は画面で表示された構成スクリプトをrootで実行。

# /home/oracle/app/oraInventory/orainstRoot.sh

グローバル・データベース名は「orcl.domain」でシステム識別子(SID)は「orcl」

自動起動するインスタンスの設定。

# vi /etc/oratab
orcl:/home/oracle/app/oracle/product/12.1.0/dbhome_1:Y

各種環境変数の設定。

# vi /etc/profile
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1
export ORACLE_SID=orcl
export NLS_LANG=American_Japan.UTF8
export PATH=$PATH:$ORACLE_HOME/bin

自動起動スクリプト作成と設定。

# vi /etc/rc.d/inid.d/dbora
# chown oracle /etc/rc.d/init.d/dbora
# chmod 705 /etc/rc.d/init.d/dbora
# chkconfig --add dbora
# chkconfig dbora on
# /etc/rc.d/init.d/dbora start

/etc/rc.d/init.d/dboraの中身

#!/bin/bash
#
# chkconfig: - 99 10
# description: Oracle Database Server
# processname: ora_

SUBSYS=/var/lock/subsys/dbora
ORACLE_HOME=/home/oracle/app/oracle/product/12.1.0/dbhome_1
ORACLE_OWNER=oracle

if [ "`id -un`" != "root" ]; then
    MSG="ERROR Executing user isn't super-user."
    echo "[ORA-CONTROL] $MSG"
    logger -p user.warn -t "[ORA-CONTROL]" "$MSG"
    exit 1
fi

case "$1" in
start)
    if [ -f "$SUBSYS" ]; then
      echo $0 already started.
      exit 1
    fi
      echo -n $"Starting Oracle database: "
      su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
      su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"
      touch $SUBSYS
    ;;
stop)
    if [ ! -f "$SUBSYS" ]; then
      echo $0 already stopped.
      exit 1
    fi
      echo -n $"Stopping Oracle database: "
      su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
      su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut"
      rm -f $SUBSYS
    ;;
restart)
    $0 stop
    $0 start
    ;;
status)
    if [ -f "$SUBSYS" ]; then
      echo $0 started.
    else
      echo $0 stopped.
    fi
    ;;
 *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
esac

exit 0

ファイアウォールの設定。

# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
# /etc/rc.d/init.d/iptables restart

各開発者用にスキーマを作成しようとして問題発覚。
というか、12cになって「マルチテナント・アーキテクチャ」ということで、マルチテナント・コンテナ・データベース(CDB)と呼ばれる管理領域と、プラガブル・データベース(PDB)と呼ばれる実際のデータ領域があって、CDBに複数PDBを持つような構造になっているらしい。
ということで、PDBに接続する方法を確認。
まずPDB自動起動を設定。

# .$ORACLE_HOME/bin/sqlplus / as sysdba
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;        ←PDBの起動
SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;  ←PDBの自動起動
SQL> show con_name;                         ←CDBに接続してることを確認
CDB$ROOT
SQL> alter session set container=pdborcl;  ←PDBに接続
SQL> show con_name;             ←PDBに接続してることを確認
PDBORCL
SQL> startup

次にSQL*plusでPDBへ接続して、ユーザーを作成。
と思ったけど、接続先のサービス名が判らないので、lsnrctlで確認。

# lsnrctl status

Services Summaryとして、「orcl.domain」「orclXDB.domain」「pdborcl.domain」ってのがサービスとして表示されたので、それっぽい「pdborcl.domain」で接続してみた。

# .$ORACLE_HOME/bin/sqlplus system/pass@hostname:1521/pdborcl.domain
SQL> create user devuser identified by devuser default tablespace USERS temporary tablespace TEMP;
SQL> grant dba to devuser;

これでSQL*plusで各ユーザーのスキーマに接続できるようになった。

# .$ORACLE_HOME/bin/sqlplus devuser/pass@hostname:1521/pdborcl.domain

またSQL DevloperでもJDBCでも、サービス名「pdborcl.domain」で接続ができた。

一旦PDBを停止し、制限モードで起動し、ユーザーを削除。
制限モードを停止し、再起動する。
PDBを停止するため、この操作の間は他のユーザーも接続できなくなる。

# $ORACLE_HOME/bin/sqlplus / as sysdba
SQL> alter session set container=pdborcl;
SQL> shutdown immediate
SQL> startup restrict
SQL> drop user devuser cascade;
SQL> shutdown immediate
SQL> startup