Linux+データベース構築 勉強会より、構築のナレッジを共有します。

2017年 2/4,2/18,¾,3/18 の全4回、弊社ではLinuxを使ったOralceデータベース(以降、「OracleDB」という)の構築を行いました。

参加者は、大澤さん、岩崎さん、佐々木さんと私(鈴木)の4名です。

勉強会の趣旨は次のとおり。
Linuxを使ったことが無くとも、操作はWindows,Macでほぼ大差が無いことを知ってもらうこと。
・viエディタ等の基本的なコマンドラインの操作を体得すること。+ (LPIC Level1)
・OracleDBの導入は、条件さえ整えることができれば、さほど難しいものではないことを知ってもらうこと。(OracleBronze DBA 12c)

全員、最後まで特に大きなトラブルなく進めることができましたが、実際に自分の手で構築を行ってみたことで収穫は大きかったようです。

下記に勉強会で実施した構築の一連の流れを記載いたしました。 これからオラクルマスターの勉強を始められる方、知識として身につけておきたいと考えている方は、是非ご自身で試してみてください。


◆主に使用したソフトウェア

Oracle VirtualBox 5.1
・CentOS7.3
・OracleDB12c EnterpriseEdition
・JDK8
・ファイル転送ソフト
 WINSCP:Windows
 Filezilla:Mac

●主なソフトウェアのリンク先
Oracle VM VirtualBox
CentOS Project
日本オラクル | Integrated Cloud Applications and Platform Services


VirtualBoxのインストール
①インストールは標準構成で問題ありません。

仮想マシンを新規に作成します。
 メモリは2~4GB程度、ハードディスクは32GB以上を確保してください。

仮想マシンの作成が済んだら、[設定]→[ネットワーク]でアダプターを2つ有効にします。
割当ては次のとおり行ってください。
1つ目:NAT
2つ目:ホストオンリーアダプタ

Windowsでは、VirtualBoxをインストールすれば、ホストマシンと仮想マシンを接続する専用のネットワークアダプタ「ホストオンリーアダプタ」は自動的に構成されますが、Macでは手動で構成する必要がありますのでご注意ください
参考:http://qiita.com/boscoworks/items/56d2ab2a9c5b1b100ce6


◆CentOS7.3のインストールコンポーネント

ISOメディアをVirtualBoxにマウントして、インストールを実施してください。 「GNOME Desktop」(アドオンなし)を使用。
OracleDBの導入はGUIで行うため、もっとも基本的なコンポーネントを選択しています。
KDEでもGUIを使用できるのですが、GNOMEよりもCPU・メモリ・ディスク容量等のリソースを消費し、パフォーマンスへの影響を考えて、勉強会では選択から外しています。


◆Swap領域の変更

自動設定のできる項目ですが、OracleDBのインストール条件として搭載メモリの1.5倍以上を確保していることが前提です。そのため、OSの導入時にSwap領域に割り当てる領域を修正しています。

参考値
仮想マシンへの割当てメモリ3GBの場合:Swap領域の割当て4.5GB
仮想マシンへの割当てメモリ4GBの場合:Swap領域の割当て6GB

 ※公式には、OracleDB 12c インストールの最低条件として1GB以上のメモリと1.5GB以上のSwap領域が必要となっています。


◆ネットワークの構成
NIC1
VirtualBoxの設定で、割当てを[NAT]としたアダプタです。DHCPを有効においてください。
NIC2
ホストマシンと仮想マシンを繋ぐ専用のNICを構成。ターミナル(Teraterm等)からSSH接続で設定を行うために使います。

●すべてのNICは共通の設定
・この接続が利用可能になったときは自動的に接続する:ON
・全ユーザがこのネットワークに接続可能とする:ON

NIC毎の設定
・NIC1:NAT(IP設定不要)
・NIC2:ホストオンリアダプタ
手動でIPを割当てる:勉強会では[192.168.56.101]を割当てています。接続できない場合は、VirtualBoxの環境設定をご確認ください。


◆パッケージの最新化・SELINUXの無効化
パッケージを最新化(インターネットに接続されている必要があります)
[ yum -y update ]

SELINUXの無効化
viエディタで[ config ]ファイル内を修正します。 [ vi /etc/selinux/config ]

●修正前
SELINUX=enforcing

●修正後
SELINUX=disabled


VirtualBox GuestAdditionsToolsのインストール前提の調整

CentOSでは、gcc等のいくつかのパッケージの導入と、ディレクトリを準備しなければ、GuestAdditionsToolsのインストールが失敗します。

①必要なパッケージのインストールコマンドを明記します。
[ yum install -y bzip2 gcc make kernel-devel kernel-headers dkms gcc-c++ ]

ディレクトリの作成
[ cd /media ]
[ mkdir VirtualBoxGuestAdditions ]

③再起動後にGuestAdditionsToolsのインストールを、GUI上からrootユーザで実施してください。

VirtualBoxCentOSの組み合わせで、[ shutdown -r now ]コマンドを実施すると再起動時に正常に起動しない事象が確認されています。
この場合、[ shutdown -h now ]等で電源OFFにしてから起動してみてください。

f:id:ars_suzuki:20170402224100p:plain


◆OracleDB12cに必要なパッケージの導入

以下にコマンドを明記します。

[ yum install -y “compat-libcap1” ]
[ yum install -y “compat-libstdc++-33” ]
[ yum install -y “gcc” ]
[ yum install -y “gcc-c++” ]
[ yum install -y “glibc” ]
[ yum install -y “glibc-devel” ]
[ yum install -y “ksh” ]
[ yum install -y “libgcc” ]
[ yum install -y “libstdc++” ]
[ yum install -y “libstdc++-devel” ]
[ yum install -y “libaio” ]
[ yum install -y “libaio-devel” ]
[ yum install -y “libXext” ]
[ yum install -y “libXtst” ]
[ yum install -y “libX11” ]
[ yum install -y “libXau” ]
[ yum install -y “libxcb” ]
[ yum install -y “libXi” ]
[ yum install -y “make” ]
[ yum install -y “sysstat” ]


◆ホスト名の変更 
Oracleでは、アンダースコア( _ )は使用禁止文字であるため、使用しないようご注意ください。インストールを続行できなくなります。

ホスト名の設定コマンドを次に示します。

①ホスト名をstudy-linuxに設定
[ hostnamectl set-hostname study-linux ]

②ホスト名の確認
[ hostnamectl ]


◆hostsの設定
①ホスト名を名前解決できるようhostsファイルを編集します。
[ vi /etc/hosts ]

②3行目に前項で設定したホスト名とNIC3(業務IP)に割り当てたIPを追記します。
 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
 192.168.1.101 study-linux


◆OracleJDKの導入設定
事前にOracleJDKをダウンロードしてください。下記説明では、[jdk-8u102-linux-x64]をダウンロードしたと仮定し記述しています。
ダウンロードしたJDKファイルは、WINSCP等のファイル転送ソフトを使用し、[ /tmp ]などの適当なディレクトリに保存します。

JDKファイルの展開
●ファイル種別がrpmの場合
[ cd /tmp ]
[ rpm -ivh jdk-8u102-linux-x64.rpm ]

●ファイル種別がtar,gzの場合
[ cd /usr ]
[ mkdir java ]
[ cd java ]
[ tar -xzvf jdk-8u102-linux-x64.tar.gz ]

②展開したJDKjavaのパスを確認
[ find /usr -name java ]
<実行結果例>
/usr/java/jdk1.8.0_102/bin/java
/usr/java/jdk1.8.0_102/jre/bin/java (★)

③alternatives 登録前確認
[ alternatives –config java ]

<実行結果例>
 2 プログラムがあり ‘java’ を提供します。
  選択 コマンド
 ———————————————–
  1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111-2.6.7.2.el7_2.x86_64/jre/bin/java
 + 2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-1.b14.el7_2.x86_64/jre/bin/java

javaのalternativesへの登録
 ダウンロードしたOracleJDKを、alternativesに登録する方法
 書式:[ alternatives –install $1 $2 $3 $4 ]

f:id:ars_suzuki:20170402224401p:plain

上記の書式に合わせて登録を行う場合は次のようになります。

[ alternatives –install /usr/bin/java java /usr/java/jdk1.8.0_102/bin/java 180102 ]

※スペースが全角の場合、正しく認識されないのご注意ください。

alternatives 登録後確認
[ alternatives –config java ]
<実行結果例>
 3 プログラムがあり ‘java’ を提供します。

選択 コマンド
———————————————–
1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111-2.6.7.2.el7_2.x86_64/jre/bin/java

+ 2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-1.b14.el7_2.x86_64/jre/bin/java
3 /usr/java/jdk1.8.0_102/bin/java

 Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

3を選択し、再度確認を行うと次のようになります。


[ alternatives –config java ]
<実行結果例>
3 プログラムがあり ‘java’ を提供します。

選択 コマンド
———————————————–
1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111-2.6.7.2.el7_2.x86_64/jre/bin/java
* 2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-1.b14.el7_2.x86_64/jre/bin/java
+ 3 /usr/java/jdk1.8.0_102/bin/java

 Enter を押して現在の選択 [+] を保持するか、選択番号を入力し ます:

Javaバージョンを確認します。
[ java -version ]
<実行結果例>
java version “1.8.0_102”
Java™ SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot™ 64-Bit Server VM (build 25.102-b14, mixed mode)

導入したJDKのバージョンが表示されればOracleDJKの導入は完了です。

●登録を削除する場合は[ –remove ]オプションを付けてを実行してください。
 alternatives –remove java /usr/java/jdk1.8.0_102/bin/java


◆ファイアーウォールの確認
①現在のファイアーウォールの動作状態を確認します。
[ firewall-cmd –state ]
<実行結果例>
 running ファイアーウォール実行中
 not running ファイアーウォール停止中

②開始・停止は次のコマンドを実行します。
[ systemctl firewalld ]

③ファイアーウォール ゾーン情報の確認
[ firewall-cmd –list-all ]

<実行結果例>

public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8 enp0s9
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

④EM Expressのために5500番ポートを開放する
[ firewall-cmd –zone=public –add-port=5500/tcp –permanent ]

●設定を削除する場合
[ firewall-cmd –zone=public –remove-port=5500/tcp –permanent ]

EM Expressに既定値の5500番ポートを使う場合、ファイアーウォールが有効の状態ではポートを開放しなければ、ブラウザから確認できないのでご注意ください。

⑤設定のリロード
[ firewall-cmd –reload ]
 ※リロードを行わないと設定が反映されませんので必ず実施してください。

⑥ファイアーウォール ゾーン情報の確認
[ firewall-cmd –list-all ]
<実行結果例>
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8 enp0s9
sources:
services: dhcpv6-client ssh
ports: 5500/tcp ★5500番ポートが追加された
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

これで5500番ポートの開放が完了しました。


カーネルパラメータの追加
①OracleDBの動作に必要なカーネルパラメータを編集します。
[ vi /etc/sysctl.conf ]

次の値を追記します。 値はお使いの環境によって適宜変更してください。
特段の要件が無い限りは、kernel.shmmax以外は、変更しなくても問題ありません。

kernel.shmall = 1638400
kernel.shmmax = 2147483648 ●物理メモリの半分以上
kernel.shmmni = 4096 ●PAGE_SIZEが4KBを表す
kernel.sem = 250 32000 100 128
fs.file-max = 6815744 ●カーネルが割り当てるファイルの最大数を指定
fs.aio-max-nr = 1048576 ●この値は同時未処理リクエストを制限するもので、I/Oサブシステムの障害を防ぐために設定する必要があります)
net.ipv4.ip_local_port_range = 9000 65500 ●TCP/IP送信用ポート範囲を変更する
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

②次のコマンドを実行し、①で追加したカーネルパラメータの設定をロードします。
[ sysctl -p ]


◆OracleDBに必要なグループの作成
次のコマンドでグループを作成します。
 [ groupadd -g 54321 oinstall ]
 [ groupadd -g 54322 dba ]
 [ groupadd -g 54323 backupdba ]
 [ groupadd -g 54324 oper ]
 [ groupadd -g 54325 dgdba ]
 [ groupadd -g 54326 kmdba ]

※結果は /etc/group に反映されます。


◆OracleDBに必要なOSユーザの作成
①次のコマンドでユーザを作成します。
[ useradd -u 1200 -g oinstall -G dba,oper,backupdba,dgdba,kmdba -d /home/oracle oracle ]

②[ oracle ]ユーザパスワードを設定します。
[ passwd oracle ]


◆OracleDBインストールディレクトリの作成
Oracleデータベースディレクトリツリーのルートの作成
[ mkdir -p /u01/app/oracle ]

②所有者の変更
[ chown oracle:oinstall /u01/app/oracle ]

③インベントリディレクトリの作成
[ mkdir -p /u01/app/oraInventory ]

④所有者の変更
[ chown oracle:oinstall /u01/app/oraInventory ]

⑤アクセス権を再帰的に変更
[ chmod -R 775 /u01 ]


環境変数とリソース制限の設定
①リソース制限を設定します。

[ vi /etc/security/limits.conf ]

②次の6行を追加します。

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768

※最下行[ # End of file ]の記述の上に記述します。

③PAM設定の追記
[ vi /etc/pam.d/login ]
[ set nu ]※行番号を表示

15行目に[ session required pam_limits.so ]を追記します。

14 session required pam_namespace.so
15 session required pam_limits.so
16 session optional pam_keyinit.so force revoke


◆ユーザ環境変数の追記
①[ oracle ]ユーザへスイッチします。
[ su - oracle ]

②viエディタで[ .bash_profile ]を編集します。
[ vi .bash_profile ]

umask以下に必要な値を追記しています。

umask 022 ex:アクセス権の既定値を設定 dir:755・file:644

export LANG=“ja_JP.UTF-8” (oracleユーザの文字コードUTF-8に指定)
export TMP=/tmp
export TMPDIR=/tmp

export ORACLE_BASE=/u01/app/oracle (インストールディレクトリ構造のベース)
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 (Oracleソフトウェアのホーム)
export ORACLE_SID=orcl (インスタンス識別子(DBインストール時に指定))
export NLS_LANG=Japanese_Japan.AL32UTF8 (DBとアプリケーション間文字コード解釈(UTF8に対応))
export JDK_HOME=/usr/java/latest (alternativesの切替えが反映させるようにしている)
export JRE_HOME=$JDK_HOME/jre
export JAVA_HOME=$JDK_HOME/jre
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin:$PATH:$JDK_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/jdbc/lib/ojdbc7.jar

③[ oracle ]ユーザからログアウトします。


◆共有フォルダマウント
①オラクル社のWEBサイトよりダウンロードした"Oracleデータベース12c Enterprise Edition"のZIPファイルを任意の場所に展開してください。
※当説明では、"Z:\IT-Tools\OracleDB12c_EE2"ディレクトリに展開した想定で説明します。
f:id:ars_suzuki:20170402224755p:plain

②起動中のVirtualBox仮想マシンのファイルメニューより、次の順番で項目を開く。
 [ デバイス ] → [ 共有フォルダー ] → [ 共有フォルダー設定 ]

f:id:ars_suzuki:20170402224807p:plain

③画面の右上の [ + ]マークをクリックします。

f:id:ars_suzuki:20170402224818p:plain

④共有フォルダーの追加が表示されるため、項目毎に次の説明に従い設定します。設定後は[ 完了 ]をクリックします。
●フォルダーのパス:ZIPファイルを展開したディレクトリを指定します。[ Z:\IT-Tools\OracleDB12c_EE2 ]
●フォルダー名 :上記[ フォルダーのパス ]を入力すると自動的に指定されるが、もしも空白の場合は、[ OracleDB12c_EE2 ]を指定します。
チェックボックス:すべてONにします。

f:id:ars_suzuki:20170402224829p:plain

⑤[ 名前・パス・自動マウント・アクセス権 ]がフォルダーリストに追加されたことを確認し[ OK ]をクリックします。

f:id:ars_suzuki:20170402224839p:plain

⑥共有フォルダのマウント
[ ls -l /mnt ]
[ mkdir /mnt/OracleDB12c_EE2 ]
[ mount -t vboxsf OracleDB12c_EE2 /mnt/OracleDB12c_EE2 ]
[ ls -l /mnt/OracleDB12c_EE2 ]

<実行結果例>次のように表示された場合、マウントが正常に完了しています。

合計 17
 drwxrwxrwx 1 root root 4096 5月 28 23:32 install
 drwxrwxrwx 1 root root 0 5月 28 23:32 response
 drwxrwxrwx 1 root root 0 5月 28 23:32 rpm
 -rwxrwxrwx 1 root root 8533 7月 7 2014 runInstaller
 drwxrwxrwx 1 root root 0 5月 28 23:32 sshsetup
 drwxrwxrwx 1 root root 4096 5月 28 23:34 stage
 -rwxrwxrwx 1 root root 500 2月 6 2013 welcome.html


◆以上でOracleデータベースの導入準備は終了です。


Oracleデータベース12cのインストール
GUIから[ oracle ]ユーザでログインします。
②端末アプリケーションを起動します。[ アプリケーション ]→[ ユーティリティ ]→[ 端末 ]

f:id:ars_suzuki:20170402225146p:plain

③次のコマンドを実行し、[ /mnt/OracleDB12c_EE2/ ]にディレクトリを移動します。
[ cd /mnt/OracleDB12c_EE2/ ]

Oracleインストーラを起動します。
[ ./runInstaller -jreLoc /usr/java/jdk1.8.0_102/jre ]

※オプション(-jreLoc)にalternativesに登録したjavaの[ jre ]ディレクトリを指定していますが、文字化けを回避するための設定です。オプションを指定しない場合は文字化けします。
正常に起動した場合、次のメッセージが表示されます。

<実行結果例>
Oracle Universal Installerを起動中です…

一時領域の確認中: 500MBを超えている必要があります. 実際 15483MB 問題なし
スワップ領域の確認中: 150MBを超えている必要があります. 実際 2047MB 問題なし
モニターの確認中: 少なくとも256色表示するよう設定されている必要があります. 実際 16777216 問題なし
Oracle Universal Installerの起動を準備中 /tmp/OraInstall2016-10-16_12-43-16AM. お待ちください…
Java HotSpot™ 64-Bit Server VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0

⑤OUI(Oracle universal Installer)が起動しますので、適宜インストールを進めてください。
勉強会では設定した主な項目は次のとおりです。
●インストール・オプション  :「データベース・ソフトウェアのみインストール」を選択。
●Gridインストール・オプション:「単一インスタンス・データベースのインストール」を選択。
●データベース・エディション :「Enterprise Edition」を選択。

インストールの場所の指定は、oracleユーザの環境変数に設定した値が参照されるため、確認してインストールを進めてください。


●セキュリティ・アップデートの構成
f:id:ars_suzuki:20170402233736p:plain

●電子メールアドレス指定の警告
f:id:ars_suzuki:20170402233752p:plain

●インストール・オプションの選択
f:id:ars_suzuki:20170402233759p:plain

●Gridインストール・オプション
f:id:ars_suzuki:20170402233807p:plain

●製品言語の選択
f:id:ars_suzuki:20170402233816p:plain

●データベース・エディションの選択
f:id:ars_suzuki:20170402233822p:plain

●インストール場所の指定
f:id:ars_suzuki:20170402233834p:plain

●インベントリの作成
f:id:ars_suzuki:20170402233841p:plain

●権限のあるオペレーティング・システム・グループ
f:id:ars_suzuki:20170402233853p:plain

●前提条件チェックの実行
f:id:ars_suzuki:20170402233901p:plain

●サマリー
f:id:ars_suzuki:20170402233910p:plain

●製品のインストール
f:id:ars_suzuki:20170402233920p:plain

●構成スクリプトの実行
f:id:ars_suzuki:20170402233944p:plain
rootユーザで実行する必要があるため、OUIを起動したターミナルとは別に端末を起動し、rootユーザへスイッチ[ su - ]して実行してください。
実行方法は、<スクリプトの場所>に記述された値をそのまま実行するのみです。

[ /u01/app/oraInventory/orainstRoot.sh ]

<実行結果例>
f:id:ars_suzuki:20170402234044p:plain

[ /u01/app/oracle/product/12.1.0/dbhome_1/root.sh ]

<実行結果例>
f:id:ars_suzuki:20170402234053p:plain

●終了
f:id:ars_suzuki:20170402234135p:plain


◆DBCA(Oracle Database Configration Assistant)によるデータベース作成(rootユーザで対応)
①次のコマンドを実行し、dbcaスクリプトを確認します。
ターミナルからSSH接続し、root権限でログインし文字化け回避のための対応を実施します。 [ cd /u01/app/oracle/product/12.1.0/dbhome_1/bin ]
[ cat -n dbca | grep JRE_DIR= ]
<実行結果例>

70 JRE_DIR=/u01/app/oracle/product/12.1.0/dbhome_1/jdk/jre


上記設定のままでは文字化けを起こすため、OUIのオプションに使用したjre[ -jreLoc /usr/java/jdk1.8.0_102/jre ]に修正する必要があります。

●文字化けしている画面
f:id:ars_suzuki:20170402234801p:plain

②viエディタで dbca を編集します。
[ vi dbca ]

変更前:70 JRE_DIR=/u01/app/oracle/product/12.1.0/dbhome_1/jdk/jre
変更後:70 JRE_DIR=/usr/java/jdk1.8.0_102/jre


◆DBCAの起動
GUIから[ oracle ]ユーザでログインします。
②端末アプリケーションを起動します。
[ アプリケーション ]→[ ユーティリティ ]→[ 端末 ]
③端末の画面から、DBCAによるデータベースの作成を開始します。
[ /u01/app/oracle/product/12.1.0/dbhome_1/bin/dbca ]

Java1.8を使用している場合、次の警告メッセージが出ることがあるが、処理を続行して問題はなし。
Java HotSpot™ 64-Bit Server VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0>

④OUI(Oracle universal Installer)が起動しますので、適宜インストールを進めてください。
 勉強会では設定した主な項目は次のとおりです。記載のない項目は既定値を使用しました。

●データベース操作    :データベースの作成
●作成モード       :拡張モード
●データベーステンプレート:汎用またはトランザクション処理
●データベース識別情報  :
 ・グローバルデータベース名:orcl
 ・SID :orcl
 ・コンテナデータベースとして作成:ON
 ・1つ以上のPDBを含むコンテナデータベースを作成:ON
  ※PDB(プラガブル・データベース)を作成するためONにしています。
 ・PDBの数:2
 ・PDBの接頭辞:pdb_orcl
●データベース資格証明:すべてのアカウントに同じ管理パスワードを使用
●記憶域の場所
 ・高速リカバリ領域:ON
 ・アーカイブ有効化:ON

●データベース操作
f:id:ars_suzuki:20170402234843p:plain

●作成モード
f:id:ars_suzuki:20170402234910p:plain

●データベース・テンプレート
f:id:ars_suzuki:20170402234936p:plain

●データベース識別情報
f:id:ars_suzuki:20170402235003p:plain

●管理オプション
f:id:ars_suzuki:20170402235026p:plain

●データベース資格証明
f:id:ars_suzuki:20170402235054p:plain

●ネットワーク構成
f:id:ars_suzuki:20170402235112p:plain

●記憶域の場所
f:id:ars_suzuki:20170402235139p:plain

●データベース・オプション
f:id:ars_suzuki:20170402235159p:plain

●初期化パラメータ
 ・メモリー
f:id:ars_suzuki:20170402235225p:plain

 ・サイズ指定
f:id:ars_suzuki:20170402235233p:plain

 ・キャラクタセット
f:id:ars_suzuki:20170402235334p:plain

 ・接続モード
f:id:ars_suzuki:20170402235355p:plain

●作成オプション
f:id:ars_suzuki:20170402235412p:plain

●前提条件チェック
f:id:ars_suzuki:20170402235434p:plain

●サマリー
f:id:ars_suzuki:20170402235444p:plain

●進行状況ページ
f:id:ars_suzuki:20170402235507p:plain

●終了
f:id:ars_suzuki:20170402235520p:plain

●パスワードの管理
f:id:ars_suzuki:20170402235614p:plain


GoogleChromeのインストール(rootユーザで対応)
ターミナルからSSH接続し、root権限でログインし対応してください。

①インターネットから、GoogleChromeのインストールシェルを取得します。
[ wget http://chrome.richardlloyd.org.uk/install_chrome.sh ]

GoogleChromeのインストールシェルに実行権限を付ける。
[ chmod u+x install_chrome.sh ]

GoogleChromeのインストールシェルを実行します。
[ ./install_chrome.sh ]

インストールが正常に終了することを確認します。


◆EM Expressの起動・確認
GUIから[ oracle ]ユーザでログインします。
GoogleChromeを起動します。
[ アプリケーション ]→[ インターネット ]→[ GoogleChrome ]
③EM ExpressのURLにアクセスします。
[ https://study-linux:5500/em ]

「この接続ではプライバシーが保護されません」と表示されますが、「詳細設定」の文字をクリック → [study-linuxにアクセスする(安全ではありません)]をクリックして進めます。
EM Expressが起動することを確認します。

f:id:ars_suzuki:20170402235708p:plain

④SYSまたはSYSTEMユーザでログインします。

パスワードは、DBCAのデータベース資格証明で設定したものです。
SYSユーザでログインする場合は、[SYSDBA権限]にチェックを入れます。

ログイン後、各コンテンツにアクセスができることを確認してください。

f:id:ars_suzuki:20170402235723p:plain

f:id:ars_suzuki:20170402235729p:plain


インスタンスとリスナーの停止
EM Expressは、インスタンスが起動していないと見ることができません。
つまり、DBCAでデータベースの作成した後は、インスタンスが起動された状態となっています。
ここではインスタンスとリスナーの起動・停止方法を説明します。

インスタンスの停止
①ターミナルから[ oracle ]ユーザでログインします。
②sqlplusを起動します。
 [ sqlplus / as sysdba ]

<実行結果例>

SQL*Plus: Release 12.1.0.2.0 Production on 日 10月 16 22:13:35 2016
Copyright © 1982, 2014, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。


インスタンスを停止します。
[ SQL> shutdown ]

<実行結果例>

データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。


インスタンスを開始する場合は、次のようにします。
[ SQL> startup ]

④sqlplusからexitします。
[ SQL> exit ]

<実行結果例>
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsとの接続が切断されました。


●リスナーの停止
①ターミナルから[ oracle ]ユーザでログインします。
②リスナーを停止します。
[ lsnrctl stop ]

<実行結果例>
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-10月-2016 22:35:43
Copyright © 1991, 2014, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=study-linux)(PORT=1521)))に接続中
コマンドは正常に終了しました。


◆リスナーファイルの確認
①findコマンドで、[ listener.ora ]のパスを確認します。
[ find $ORACLE_BASE -name listener.ora ]

<実行結果例>
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/samples/listener.ora
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora ★


★マークの付いている adminディレクトリ配下のlistener.oraが実態です。
存在しない場合は、GUIから[ oracle ]ユーザでログインし、端末アプリケーションから、[ netca ]コマンドを実行し、NetCAから「リスナー構成」を選択し、作成してください。

② ①で見つかった[ listener.ora ]ファイル★マークの内容を確認します。
[ cat /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora ]

<実行結果例>
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
 LISTENER =
  (DESCRIPTION_LIST =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = study-linux)(PORT = 1521))
   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)


※SIDの設定が含まれていないため、このままリスナーを起動すると次のように表示されます。
「リスナーはサービスをサポートしていません」

③リスナーを起動してみましょう。
[ lsnrctl start ]

<実行結果例>
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-10月-2016 22:37:05

Copyright © 1991, 2014, Oracle. All rights reserved.

/u01/app/oracle/product/12.1.0/dbhome_1/bin/tnslsnrを起動しています。お待ちください…

TNSLSNR for Linux: Version 12.1.0.2.0 - Production
システム・パラメータ・ファイルは/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.oraです。
ログ・メッセージを/u01/app/oracle/diag/tnslsnr/study-linux/listener/alert/log.xmlに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=study-linux)(PORT=1521)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=study-linux)(PORT=1521)))に接続中
リスナーのステータス
————————
別名 LISTENER
バージョン TNSLSNR for Linux: Version 12.1.0.2.0 - Production
開始日 16-10月-2016 22:37:05
稼働時間 0 日 0 時間 0 分 0 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
ログ・ファイル /u01/app/oracle/diag/tnslsnr/study-linux/listener/alert/log.xml
リスニング・エンドポイントのサマリー…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=study-linux)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。


※リスナーは起動したが、クライアントアプリケーションとオラクルデータベースを繋ぐサービス(orcl)がサポートされていない。
理由は、リスナーにSIDの設定が存在しないため。

④リスナーを停止します。
[ lsnrctl stop ]

<実行結果例>
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-10月-2016 22:35:43
Copyright © 1991, 2014, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=study-linux)(PORT=1521)))に接続中
コマンドは正常に終了しました。


◆リスナーファイルの修正
①viエディタで、リスナーファイルを編集します。
[ vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora ]

●修正前*****************************************************************************
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = study-linux)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

●修正後*****************************************************************************
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC = (SID_NAME = orcl)
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = study-linux)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
USE_SID_AS_SERVICE_LISTENER = ON ※1
※1レガシーアプリから12cのPDBに接続すると、SIDが違うと言われる場合があるための対策


②リスナーを起動して動作を確認します。
[ lsnrctl start ]

<実行結果例>
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-10月-2016 23:04:23
Copyright © 1991, 2014, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=study-linux)(PORT=1521)))に接続中
リスナーのステータス
————————
別名 LISTENER
バージョン TNSLSNR for Linux: Version 12.1.0.2.0 - Production
開始日 16-10月-2016 23:04:06
稼働時間 0 日 0 時間 0 分 16 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
ログ・ファイル /u01/app/oracle/diag/tnslsnr/study-linux/listener/alert/log.xml
リスニング・エンドポイントのサマリー…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=study-linux)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
サービスのサマリー…
サービス"orcl"には、1件のインスタンスがあります。
インスタンス"orcl"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります…
コマンドは正常に終了しました。

※クライアントアプリケーションとオラクルデータベースを繋ぐサービス(orcl)がサポートされました。

以上でリスナーの修正は終了。


◆コンテナデータベース(CDB)への接続における ORA-20840対策

①viエディタで[ sqlnet.ora ]ファイルを編集します。
こちらもレガシーアプリから12cのPDBに接続すると、SIDが違うと言われる場合があるための対策になります。
[ vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora ]

②次の構文を最下行に追加してください。
[ SQLNET.ALLOWED_LOGON_VERSION=8 ]


◆コンテナデータベースへの接続確認
前提条件として、sysdbaユーザで、停止したインスタンスを開始する必要があります。

SQL*Plus <systemユーザ> でコンテナデータベース(CDB)への接続します。
[ sqlplus system/password@localhost:1521/orcl ]

<実行結果例>
SQL*Plus: Release 12.1.0.2.0 Production on 日 10月 23 01:39:12 2016
Copyright © 1982, 2014, Oracle. All rights reserved.
最終正常ログイン時間: 日 10月 16 2016 15:24:39 +09:00

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
に接続されました。

②コマンドでの接続しているDBを確認
[ SQL>show con_name; ]

<実行結果例>
CON_NAME
——————————
CDB$ROOT

上記のように表示されていれば、CDBに接続されてます。

③SQLPLUSからEXITします。
[ SQL>exit ]


◆プラガブル・データベース(PDB)の状態を確認します。
SQL*Plus <sysdbaユーザ> でコンテナデータベース(CDB)への接続します。
[ sqlplus / as sysdba ]

②-1:プラガブル・データベース(PDB)の状態を確認します。<確認方法1>
[ SQL>select name, open_mode from v$pdbs; ]

<実行結果例>

NAME
——————————————————————————–
OPEN_MODE
——————————
PDB$SEED
READ ONLY

PDB_ORCL1
MOUNTED

PDB_ORCL2
MOUNTED

※MOUNTEDは停止状態。PDB_ORCL1とPDB_ORCL2の両方ともに停止状態であることを確認します。

②-2:プラガブル・データベース(PDB)の状態を確認します。<確認方法2>
[ SQL>show pdbs; ]

<実行結果例>

CON_ID CON_NAME OPEN MODE RESTRICTED
——————————————————–
2 PDB$SEED READ ONLY NO
3 PDB_ORCL1 MOUNTED
4 PDB_ORCL2 MOUNTED


※MOUNTEDは停止状態。PDB_ORCL1とPDB_ORCL2の両方ともに停止状態であることを確認します。


PDB_ORCL1の起動
SQL*Plus <sysdbaユーザ>で実施します。

①[ pdb_orcl1 ]を起動します。
[ SQL>alter pluggable database pdb_orcl1 open; ]
※すべてのpdbを起動する場合は、"pdb_orcl1"→"all"にします。

<実行結果例>

プラガブル・データベースが変更されました。

②プラガブル・データベース(PDB)の状態を確認します。
SQL>show pdbs;

<実行結果例>
CON_ID CON_NAME OPEN MODE RESTRICTED
———————————————————–
2 PDB$SEED READ ONLY NO
3 PDB_ORCL1 READ WRITE NO
4 PDB_ORCL2 MOUNTED

[ pdb_orcl1 ]のOPEN MODEが [ READ WRITE ]に変更されたことを確認します。
[ pdb_orcl2 ]は使用予定がないため、停止させたままにしている。

●停止したい場合、次のコマンドで停止可能
[ SQL>alter pluggable database pdb_orcl1 close immediate; ]
※すべてのpdbを停止する場合は、"pdb_orcl1"→"all"にします。

PDB自動起動設定します。
[ SQL>alter pluggable database pdb_orcl1 save state; ]
※すべてのpdb自動起動にする場合は、"pdb_orcl1"→"all"にします。

<実行結果例>
プラガブル・データベースが変更されました。


インスタンスを再起動し、PDB自動起動するかを確認します。
SQL>shutdown immediate
SQL>startup
SQL>show pdbs;

<実行結果例>
CON_ID CON_NAME OPEN MODE RESTRICTED
———————————————————–
2 PDB$SEED READ ONLY NO
3 PDB_ORCL1 READ WRITE NO
4 PDB_ORCL2 MOUNTED

PDB_ORCL1が<READ WRITE>であるため、インスタンス起動時に自動起動したことが確認できる


◆プラガブル・データベース [ pdb_orcl1 ] へのOracle Net サービス名を定義するため、[ tnsnames.ora ]ファイルに設定を追記します。
①viエディタで[ tnsnames.ora ]ファイルを編集します。
[ vi $ORACLE_HOME/network/admin/tnsnames.ora ]

●<修正前>
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

 ORCL =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = study-linux)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = orcl)
  )
  )


●<修正後>
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = study-linux)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

pdb_orcl1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = study-linux)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb_orcl1)
)
)


SQL*Plus から pdb_orcl1 へ Netサービス名を使用して接続できることを確認します。
[ sqlplus system/password@study-linux/pdb_orcl1 ]
※この接続方法を簡易接続ネーミングと呼びます。
データベースを使用するアプリケーションがある場合、簡易接続ネーミングで接続する方法が一般的です。


補足 ■インスタンスに関して
・OS起動後にデータベースを利用する場合は、インスタンスとリスナーの両方を起動してください(順不同)
・OSを電源オフする場合、再起動する場合は、インスタンスを必ず停止してください。


■リスナーの起動・停止方法
ターミナルから[ oracle ]ユーザでログインし、次のコマンドを実行します。
起動  :lsnrctl start
停止  :lsnrctl stop
状態確認:lsnrctl status
サポート対象のサービス確認:lsnrctl services

インスタンスの起動・停止方法
①オラクルユーザで、SQLPLUSを起動します。
[ sqlplus / as sysdba ]

②起動と停止は次のとおり
起動:SQL>startup
停止:SQL>shutdown

インスタンスの起動状態の確認方法
[ SQL>select STATUS from v$instance; ]

<実行結果例>
1.インスタンスが起動している場合
STATUS
————————————
OPEN

2.インスタンスが停止している場合
行1でエラーが発生しました。:
ORA-01034: ORACLE not available

■データベースの文字コードについて DBCAの[ 初期化パラメータ ]の項目で、データベース・キャラクタ・セットに選択した文字コードによって、oracleユーザの環境変数 [NLS_LANG]を適宜修正してください。

[SJIS]を選択した場合
export NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE

[ EUC ]を選択した場合、
export NLS_LANG=Japanese_Japan.JA16EUCTILDE

[AL32UTF8]を選択した場合
export NLS_LANG=Japanese_Japan.AL32UTF8

NLS_LANGは、DBとアプリケーション間の文字コード解釈を指定します。

指定を誤った状態で、CREATE TABLE等のSQL文を実行すると正しく処理されませんのでご注意ください。

以上、データベースの構築から接続の確認までの説明となります。

ブログという特性から、説明をしづらい部分もあり、不要な部分は省略して書いていますが、 実際にこの記事みてOracleDBの構築はできるのではないかと思います。

これからDBの勉強を始められる方の一助になりましたら嬉しく思います。