開発用サーバの構築(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
# /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」
- Oracleの各種設定
# 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