上記を参考に 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
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
# 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) で入手します。
ブラウザで 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
# 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 ?????? ???
日本語入力すると「????」で文字化けしますが、
そのうち、気が向いたら調べます。
- python + cx_Oracle による接続テスト
Oracle Instant Client + cx_Oracle による python3 on centos7 から、oracle 12cへ接続 - end0tknr's kipple - web写経開発
↑こちらに書いている通りです。
import cx_Oracle
import random
import string
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():
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, '¿¿¿¿¿¿', '¿¿¿')]