- https://dbalone.com/oracle-db-12c-r2-ee-install
- CentOS 7 : Oracle Database 12c : インストール環境の設定 : Server World
上記を参考に centos7 へ oracle database 12c を install。
これまで、mysqlやpostgresを利用することが多かった私にとってポイント?は以下
- oracle 12cのinstallにGUI(GNOME Desktop)要
- OSカーネルパラメータを変更
- oracle 12cの download サイトが、独特
- 参考urlはver.12.2を使用してますが、12.1にした影響か文字化けしてます...
目次
今回のエントリは、長いので珍しく目次を付けました
- 1. centos7 を virtual box へ install
- 2. oracle installの前準備
- 3. oracle database 12c の入手
- 4. oracle database 12c の install
- 5. Netリスナー追加
- 6. データベースの作成 ( = CREATE DATABASE)
- 7. 自動起動
- 8. sqlplus による接続テスト
1. centos7 を virtual box へ install
oracle 12cのinstallには GUI要な為、 centos7 minimal install後、GNOME を 追加installしました。
また、oracle 12c の installは、oracleユーザで行う為、 centos7 minimal install の中で ユーザ追加(oracle)しました。
(参考) 以下はGNOMEのinstallコマンドと、GUIの起動コマンドです
$ sudo yum groups install "GNOME Desktop" $ startx
2. oracle installの前準備
私の場合、centos7 install時にユーザ:oracleを作成しましたが、基本的には https://dbalone.com/oracle-db-12c-r2-ee-install に記載の通りです。
私がよく利用するmysqlやpostgresのinstallでは、OSリソース制限変更までは 実施していなかったこともあり、内容は理解していません。
OSグループ作成
# 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 54330 racdba
OSユーザ修正
# usermod -g oinstall -G dba,backupdba,dgdba,kmdba,racdba,oper oracle # id oracle uid=1000(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper), 54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
oracle install 先の mkdir
# mkdir -p /u01/app/oracle # mkdir /u01/app/oraInventory # chown -R oracle:oinstall /u01/app/oracle # chown -R oracle:oinstall /u01/app/oraInventory # chmod -R 775 /u01
oracleユーザの .bash_profile 変更
# vi /home/oracle/.bash_profile umask 022 ## ADD export ORACLE_HOSTNAME=cent7.a5.jp ## ADD ★注意 export ORACLE_BASE=/u01/app/oracle ## ADD
OSリソース制限変更
# vi /etc/security/limits.conf oracle soft nproc 2047 ## ADD oracle hard nproc 16384 ## ADD oracle soft nofile 1024 ## ADD oracle hard nofile 65536 ## ADD oracle soft stack 10240 ## ADD oracle hard stack 32768 ## ADD # vi /etc/pam.d/login session required pam_limits.so ## ADD
依存libraryのyum install
https://dbalone.com/oracle-db-12c-r2-ee-install で記載の内容に加え、 後で実施する oracleインストーラのチェックにより、 gcc-c++ の不足が指摘されましたので、これを追加しています。
# yum install bc.x86_64 binutils.x86_64 compat-libcap1.x86_64 \ compat-libstdc++-33.i686 compat-libstdc++-33.x86_64 glibc.x86_64 \ glibc-devel.x86_64 glibc.i686 glibc-devel.i686 ksh.x86_64 \ libaio.x86_64 libaio.i686 libaio-devel.i686 libaio-devel.x86_64 \ libgcc.x86_64 libgcc.i686 libstdc++.x86_64 libstdc++-devel.x86_64 \ libstdc++.i686 libstdc++-devel.i686 libxcb.x86_64 libxcb.i686 \ libX11.x86_64 libX11.i686 libXau.x86_64 libXau.i686 libXi.x86_64 \ libXi.i686 libXtst.x86_64 libXtst.i686 libXrender.x86_64 \ libXrender.i686 libXrender-devel.i686 libXrender-devel.x86_64 \ make.x86_64 net-tools.x86_64 nfs-utils.x86_64 smartmontools.x86_64 \ sysstat.x86_64 # yum install gcc-*
カーネルパラメータの変更
以下のconfファイルを新規作成し、その後 sysctl コマンドにて反映
# vi /etc/sysctl.d/97-oracle-database-sysctl.conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 858993 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
# sysctl --system
/etc/hosts へ 自身を追加
# vi /etc/hosts 192.168.63.3 cent7.a5.jp ## ADD
3. oracle database 12c の入手
oracle 12c の download
最新の oracle database は、以下の1)で配布されていますが、 古い oracle 12c は、2) で入手します。
- 1) https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html
- 2) https://edelivery.oracle.com/osdc/faces/Home.jspx
ブラウザで 2)へアクセスし、「oracle database 12c」で検索すると、 「Oracle_SSN_DLM_12262356.exe」のようなファイル名のダウンローダを入手できますので、 このダウンローダにて、oracle dababase 12c の zip をダウンロードします。
以下は、2)へアクセスした後からの画面遷移です。
oracle12c installerの解凍
$ pwd /home/oracle/tmp $ ls -lh -rwxr--r-- 1 oracle oinstall 1.6G Dec 27 09:40 V46095-01_1of2.zip -rwxr--r-- 1 oracle oinstall 968M Dec 27 09:40 V46095-01_2of2.zip $ unzip V46095-01_1of2.zip $ unzip V46095-01_2of2.zip
4. oracle database 12c の install
installerの起動
ここから先は、GUI環境で行います
$ startx
で、GNOME Desktop を起動し、ターミナルにて以下を実行
$ cd /home/oracle/tmp/database $ ./runInstaller
installer ウィザードの各画面
メールアドレスは空欄でOK
DBは後で作成しますので、「install database software only」を選択
「Single instance database installation」を選択
defaultのEnglishに 「Japapanese」を追加
「Enterprise Edition」を選択
「Oracle base」や「Software location」はdefaultのまま
★これらのdirは、このエントリの序盤で mkdir したものです
「Inventory(目録?) Directory」や「orainventory Group Name」はdefaultのまま
★ 「oinstall」は、このエントリの序盤で「# groupadd -g 54321 oinstall」したものです
この画面もdefaultのままです
「Perform Prerequisite Checks」の画面で「OS Kernel Parameters」のWarningsが 複数ありましたが、「Warnings」であり「Error」でなないので、「Ignore All」で先に進みました
その後、install処理完了まで、数分待ちます。
しばらくすると、rootユーザで sh を実行するよう促されますので、これを実行します
以下は、上記 root用 scriptの実行結果です。
# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read,write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete. # /u01/app/oracle/product/12.1.0/dbhome_1/root.sh Performing root user operation. The following environment variables are set as: ORACLE_OWNER= oracle ORACLE_HOME= /u01/app/oracle/product/12.1.0/dbhome_1 Enter the full pathname of the local bin directory: [/usr/local/bin]: Copying dbhome to /usr/local/bin ... Copying oraenv to /usr/local/bin ... Copying coraenv to /usr/local/bin ... Creating /etc/oratab file... Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created Finished running generic part of root script. Now product-specific root actions will be performed.
以上で、インストール自体は完了です
5. Netリスナー追加
次にNetリスナーを追加しますので、GUI を起動した状態で、 netca コマンドにより、ウィザード画面を表示させます。
$ startx
$ netca
以降、defaultのまま、画面を進み、完了すると、 listener.ora が生成され、host名やport=1521等が定義されていることが分かります
$ cat /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = cent7.a5.jp)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
Netリスナー追加後、「ss -napt」で port:1521のlistenや「tnsping localhost」による 応答を確認してください。
$ ss -napt State Recv-Q Send-Q Local Address:Port Peer Address:Port : LISTEN 0 128 [::]:1521 [::]:* users:(("tnslsnr",pid=14836,fd=9)) $ tnsping localhost TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 27-DEC-2020 13:29:36 : Used HOSTNAME adapter to resolve the alias Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=)) (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))) OK (0 msec) $
6. データベースの作成 ( = CREATE DATABASE)
データベースの作成
データベース作成も GUIで実施しますので、dbca コマンドで、 ウィザードを起動してください。
$ dbca
「Create Database」を選択
defaultと異なり「Advanced Mode」を選択
「Global Database Name」「sid」は自身で入力
defaultと異なり「SYSTEM」「SYS」のパスワードは、同じものを設定 (手間なので)
この画面は、タブ分けにより以降、更に4画面があります。
この画面は、よく分かりませんでしたが、 「Default Language=Japanese」「Default Territory=Japan」としました。
database 作成により、tnsnames.ora が作成
この tnsnames.ora 内にある記載内容で、databaseへ接続できます
$ cat /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = cent7.a5.jp)(PORT = 1521)) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = cent7.a5.jp)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.a5.jp) ) )
接続用設定 その他
# su - oracle $ vi /etc/oratab orcl:/u01/app/oracle/product/12.1.0/dbhome_1:Y ## CHANGE N->Y $ vi ~/.bash_profile export ORACLE_SID=orcl ## ADD $ source ~/.bash_profile
データベースへの簡易接続確認
$ sqlplus /nolog SQL*Plus: Release 12.1.0.2.0 Production on Sun Dec 27 18:43:47 2020 Copyright (c) 1982, 2014, Oracle. All rights reserved. SQL> connect / as sysdba Connect. SQL> select instance_name, host_name, version, startup_time from v$instance; INSTANCE_NAME ---------------- HOST_NAME ---------------------------------------------------------------- VERSION STARTUP_ ----------------- -------- orcl cent7.a5.jp 12.1.0.2.0 20-12-27
7. 自動起動
# vi /etc/sysconfig/orcl.oracledb ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 ORACLE_SID=orcl
# vi /usr/lib/systemd/system/orcl@lsnrctl.service [Unit] Description=Oracle Net Listener After=network.target [Service] Type=forking EnvironmentFile=/etc/sysconfig/orcl.oracledb ExecStart=/u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl start ExecStop=/u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl stop User=oracle [Install] WantedBy=multi-user.target
# vi /usr/lib/systemd/system/orcl@oracledb.service [Unit] Description=Oracle Database service After=network.target lsnrctl.service [Service] Type=forking EnvironmentFile=/etc/sysconfig/orcl.oracledb ExecStart=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbstart $ORACLE_HOME ExecStop=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbshut $ORACLE_HOME User=oracle [Install] WantedBy=multi-user.target
# systemctl daemon-reload # systemctl enable orcl@lsnrctl orcl@oracledb
8. sqlplus による接続テスト
$ sqlplus /nolog
SQL> connect system/sasa24ki; SQL> create table TEST_TBL_1 ( num_1 NUMBER(10), num_2 NUMBER(10), str_1 VARCHAR2(10), str_2 VARCHAR2(10), PRIMARY KEY (num_1) ); SQL> insert into TEST_TBL_1 values (1,10,'HOGE','FOO'); SQL> insert into TEST_TBL_1 values (2,10,'ほげ','風'); SQL> commit; SQL> select * from TEST_TBL_1; NUM_1 NUM_2 STR_1 STR_2 ---------- ---------- ---------- ---------- 1 10 HOGE FOO 2 10 ?????? ???
日本語入力すると「????」で文字化けしますが、 そのうち、気が向いたら調べます。
↑こちらに書いている通りです。
#!/usr/bin/python3 # -*- coding: utf-8 -*- import cx_Oracle import random import string # 接続情報(ID/PW, HOST, SERVICE NAME)は、以下の tnsnames.ora の通りです。 # /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/tnsnames.ora db_user_pw_host_port_service = "system/PWはないしょ@localhost:1521/orcl.a5.jp" def main(): db_conn, db_cursor = connect_db() db_cursor.execute('select * from TEST_TBL_1') res = db_cursor.fetchall() print(res) db_conn.commit() db_cursor.close() db_conn.close() def connect_db(): # print(cx_Oracle.clientversion()) connect = cx_Oracle.connect(db_user_pw_host_port_service) cursor = connect.cursor() # カーソルを取得 return connect,cursor if __name__ == '__main__': main()
↑こう書くと、↓こう表示されます
$ ./foo.py [(1, 10, 'HOGE', 'FOO'), (2, 10, '¿¿¿¿¿¿', '¿¿¿')]