RHEL6.9にOracle12cR2をインストール

RHEL6.9にOracle12cR2をインストールする。

# 参考ドキュメント
https://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/sidb12201-inst-linux-x64-ja-v10-3627443-ja.pdf

# 前提条件
RHEL6.9はインストール済
ネットワークは使えること(yumが使えること)

# 1.事前準備
## 1-1.ファイアウォールを無効化
```shell
#/etc/rc.d/init.d/iptables stop
#chkconfig iptables off
```

## 1-2.必要なソフトウェアのインストール
ここから
 binutils     x86_64     2.20.51.0.2-5.48.el6      rhel-6-server-rpms     2.8 M
 compat-libcap1       x86_64       1.10-1        rhel-6-server-rpms        17 k
 compat-libstdc++-33    x86_64    3.2.3-69.el6      rhel-6-server-rpms    183 k
 compat-libstdc++-33     i686     3.2.3-69.el6     rhel-6-server-rpms     189 k
 e2fsprogs          x86_64     1.41.12-24.el6      rhel-6-server-rpms     554 k
 ksh       x86_64       20120801-37.el6_9        rhel-6-server-rpms       761 k
 libstdc++       i686       4.4.7-23.el6         rhel-6-server-rpms       303 k
 libstdc++-devel      i686      4.4.7-23.el6      rhel-6-server-rpms      1.6 M
 libaio       i686       0.3.107-10.el6          rhel-6-server-rpms        21 k
 libaio-devel     x86_64     0.3.107-10.el6        rhel-6-server-rpms      13 k
 libaio-devel      i686      0.3.107-10.el6       rhel-6-server-rpms       13 k
 libXtst        i686        1.2.3-1.el6         rhel-6-server-rpms         19 k
 nfs-utils      x86_64      1:1.2.3-78.el6        rhel-6-server-rpms      336 k
ここまで

```shell:x86_64ではなくi686をインストールする場合は
yum install compat-libstdc++-33.i686
```
とする必要がある。
glibcはgcc4.8.5をインストール済のため、既に入っていた
e2fsprogsのバージョンが1.42では無いが大丈夫か不明。
libsはlibssの間違い？e2fsprogsをインストールする際に一緒に入った。
libstdc++は64bit版は入っていたが、32bit版が入っていなかった。
libstdc++-devel、 libaio、libXtstも同様。

## 1-3.カーネルパラメータの設定
「/etc/sysctl.conf」ファイルを編集する
変更後は「/sbin/sysctl -p」を実行する。

###変更前
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

### 変更後
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.panic_on_oops = 1

## 1-4.ユーザー・グループの作成
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 racdba
useradd -u 1200 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba -d /home/oracle oracle
パスワードを設定する
passwd oracle

## 1-5.インストールディレクトリの準備
mkdir -p /u01/app/oracle
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01

## 1-6.リソースの制限
/etc/security/limits.conf
以下を追加する。
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768

# 2.インストール
##2-1. oraInventoryの書き込みに失敗
フォルダを作成し、所有者をoracle:oraInstにすることにより解決。

##2-2./.bash_profile
```sh
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
```
# 3.インストール後の設定

## 起動方法
```sql
sqlplus system/<パスワード> as sysdba
show con_name　←①
show pdbs ←②
alter pluggable database orclpdb open; ←③
```
①「CDB$ROOT」になっていればOK
②PDBの一覧を表示し、OPEN MODEの値が「MOUNTED」になっている場合は③を実行
![image.png](https://qiita-image-store.s3.amazonaws.com/0/187121/5d9a0660-f7c4-7983-fe41-8d9fdb724293.png)


http://infra-tech-platinum.hatenablog.jp/entry/2015/02/14/213322

## ODBC
### file not found
isqlで接続した際に以下のようなエラーが発生する場合がる。
[oracle@localhost Debug]$ isql ORA -v
[01000][unixODBC][Driver Manager]Can't open lib '/u01/app/oracle/product/12.2.0/dbhome_1/lib/libsqora.so.12.1' : file not found
原因はODBCドライバが他のライブラリを使用しており、それが見つからないため。
以下の2つの方法で対応が可能。
1.LD_LIBRARY_PATHを設定。(bash_profileで説明済み)
2.必要なライブラリを調べ、/lib64/か/usr/lib64/にファイルをコピーする。

```sh
[oracle@localhost Debug]$ cd /u01/app/oracle/product/12.2.0/dbhome_1/lib/
[oracle@localhost lib]$ ldd libsqora.so.12.1 
ldd: warning: you do not have execution permission for `./libsqora.so.12.1'
	linux-vdso.so.1 =>  (0x00007fff911fc000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fdd8c820000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fdd8c59c000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdd8c37e000)
	libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fdd8c165000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fdd8bf5d000)
	libaio.so.1 => /lib64/libaio.so.1 (0x00007fdd8bd5b000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fdd8bb41000)
	libclntsh.so.12.1 => not found
	libclntshcore.so.12.1 => not found
	libodbcinst.so.2 => /usr/lib64/libodbcinst.so.2 (0x00007fdd8b92f000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fdd8b59b000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fdd8b384000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003877a00000)
	libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fdd8b17b000)
```
「ldd」コマンドは、「共有ライブラリへの依存関係を表示する」コマンド

```sh
[root@localhost lib]# cp libclntsh.so.12.1 /lib64/libclntsh.so.12.1
[root@localhost lib]# cp libclntshcore.so.12.1 /lib64/libclntshcore.so.12.1
```
当初は以下のようにリンクファイルを作成したがうまく認識してくれなかった。
ln -s libclntsh.so.12.1 /lib64/libclntsh.so.12.1

## プラガブルデータベースへの接続
alter session set container = orclpdb;

#4.エラー対応
### ORA-01033
インスタンス起動処理実行中または停止処理中などにおいて、データベースへの接続を行った場合に発生。
http://www.cosol.jp/tech/detail/ot0007_ora01033.shtml
PDBが起動しているか確認する。

### ORA-12162
http://tazakazushi.net/sqlplus_ora_12162.html
環境変数ORACLE_SIDがセットされていない場合に発生する。

### ORA-12154
tnsnames.ora構成ファイルに指定されたネット・サービス名を検出できないことを示すエラー。
http://www.cosol.jp/tech/detail/ot0015_ora12154.shtml
sqlplusで「<ユーザ名>/<パスワード>@<IPアドレス>:<ポート番号>/<サービス名>」のサービス名に誤字が無いか確認すること。

### ORA-12514
リスナーがクライアントからの接続要求を受け付けた時に、接続先となるサービスを認識していない時に発生する。
http://www.cosol.jp/tech/detail/ot0053_ora12514.shtml
DB(CDB、PDB)が起動しているか確認すること。

### ORA-65096
http://cosol.jp/tech/detail/ora-65096.shtml
コンテナデータベースにユーザーを作成しようとしている。プラガブルデータベースにユーザーを作成する必要がある。

# 5.その他
## ツールのインストール
https://dl.fedoraproject.org/pub/epel/6/x86_64/Packages/r/rlwrap-0.42-1.el6.x86_64.rpm
wgetで取得し、rpmでインストール
参考URL:http://www.intellilink.co.jp/article/column/oracle-yam05.html