0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OracleDBインスタンスを1から作成して、アプリと連携する

Last updated at Posted at 2021-02-14

はじめに

普段、業務でSQLを作成してデータを引っ張ってきたりテーブル作ったりしてきたが、実際DB自体の理解が乏しく、
インスタンスなんてものも最近初めて知った。
以外と周りの人で、DB構築はできないだとかインスタンスって存在はしっているけど
何のパラメータがあって、何をいじればどう変わるのかが自分を含めて説明できないなと感じて
勉強がてらに構築した手順をメモとして上げる。

※構築にあたって、DBCAを使用して構築するのが主流だと思いますが、簡単に完了して、構築に何が必要かが見逃してしまいそうなので1から作成していきます!

環境

  • VMWare Ver16
  • CentOs8.2.2004
  • Oracle database 12c release2 for Linux (12.2.0.1.0)
  • アプリ(WinForms C#)

構築前にインスタンについて

インスタンスとは

一時的に使用するメモリ(SGA + プロセス群)のこと。

ざっくり図で表すとこんな感じ
image.png
基本的には、アプリなどのユーザから問い合わせがあれば、直接データベースを操作するのではなく、
インスタンスを介して操作を行う。
なので、普段何気なく行っているINSERT分などは、高速なメモリ(インスタンス)に一時的に反映した後
データベースに反映をしている。

インスタンスの構成

1.システムグローバル領域(SGA)

Oracleサーバが稼働するPCのメインメモリ内に生成される共有メモリ領域のこと。
⇒実行したSQLを再利用するために格納したり、REDOログ情報などが格納される

  • 領域内に構成されているものは以下6つのものがある。

【データベースバッファキャッシュ、共有プール、JAVAプール、ラージプール、ストリームプール、REDOログバッファ】
それぞれがなにかについては、下記サイトの表5-2参照
Oracle doc

基本的には、自動管理機能があるためあまり気にしなくてよいことが多いが、
場合によって「バッファキャッシュヒット率・ライブラリキャッシュヒット率やディクショナリキャッシュヒット率」
の低下などを個別に調整する場合に気にする必要がある。

2.バックグラウンドプロセス

ざっくりいうと、インスタンス障害のリカバリだったりリソース解放などのクリーンアップなど
DBの裏側を支えている大事なプロセスのこと。

プロセスの種類に関しては、Oracleのバージョンによって異なり、必須プロセスや動的に起動する必要のあるプロセスが左右される。
代表的なものでは「LGWRやCKPT、SMON」などがあげられる。

構築

1.DBサーバ環境の用意

下記サイトから入手したものでセットアップ
VMWareのダウンロード先
CentOsのisoファイル
image.png

2.Oracle導入

Oracleの入手
上記サイトからOracleをインストールする
image.png

入手したらWinSCPなどで、仮想環境へ送る
※直接仮想環境からインストールした場合は不要
image.png

仮想環境に行って、インストールしたものを解凍

unzip linuxx64_12201_database.zip

解凍
image.png

3.カーネルパラメータの設定

カーネルの個々の機能やドライバが解釈して、振る舞いを変更できるようにするためのもの(パラメータ名=値の形で設定)
カーネルパラメータの変更箇所は2種類のうち①を対象にしていく

①/etc/sysctl.conf・・・設定ファイルに記述することで、恒久的に設定が維持される
②「/proc」以下・・・ファイル単位で扱いファイル=設定となる。再起動すると初期化されるため一時的の設定となる

パラメータ名
semmsl 250
semmns 32000
semopm 100
semmni 128
shmail 128
shmall 物理メモリーサイズの40%(単位:ページ)
shmmax 物理メモリー最右の半分(単位:バイト)
smmni 4096
file-max 6815744
panic_on_oops 1
aio-max-nr 1048576
ip_local_port_range 最小:9000 最大:65500
rmen_default 262144
rmem_max 4194304
wmem_default 262144
wmem_max 1048576

以下コマンドでカーネルパラメータをチェックしていく

sysctl -a | grep sem
sysctl -a | grep shm
sysctl -a | grep file-max
sysctl -a | grep ip_local_port_range
sysctl -a | grep rmem
sysctl -a | grep wmem
sysctl -a | grep aio-max-nr

修正箇所がある場合は、修正

vi /etc/sysctl.conf

物理メモリについて

free -mt

image.png
物理メモリーサイズの半分以上でよいため、私の場合は設定した1GBから計算して
1 * 1024 * 1024 * 1024 / 2 = 536,870,912
となる。

私の場合はこんな感じでした
image.png

修正
image.png

反映

sysctl -p

image.png

4.OSグループの設定

次のOS認証に必要なグループを設定していく

グループ名 グループID 備考
oinstall 54321 Oracle Inventory グループ
dba 54322 Database 用 OSDBA グループ
oper 54323 Database 用 OSOPER グループ
backupdba 54324 Database 用 OSBACKUPDBA グループ
dgdba 54325 Database 用 OSDGDBA グループ
kmdba 54326 Database 用 OSKMDBA グループ
racdba 54327 OSRACDBA グループ
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

追加されているか確認

cat  /etc/group

image.png

5.Oracleユーザ作成

項目名
ユーザ名 oracle
ユーザID 1200
プライマリ・グループ oinstall
セカンダリ・グループ dba,oper,backupdba,dgdba,kmdba,racdbahome
ディレクトリ /home/oracle
useradd -u 1200 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba -d /home/oracle oracle

任意のパスワードを設定(覚えておいてください)

passwd oracle

6.インストール・ディレクトリの作成

$ORACLE_BASEに設定するディレクトリの作成

mkdir -p /opt/app/oracle
chown oracle:oinstall /opt/app/oracle
chmod -R 775 /opt/app/oracle

インベントリディレクトリの作成

mkdir -p /opt/app/oraInventory
chown oracle:oinstall /opt/app/oraInventory
chmod -R 775 /opt/app/oraInventory

7.リソース権限の設定

vi /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
リソース権限の説明 フォーマットとしては`   `となっており ぞれぞれ、`<ユーザ名> <リミットやデフォルトの最大値> <制限項目> <閾値>`である 上の設定で例を出すと `oracle soft nproc 2047` この場合はoracleユーザの最大プロセス数は2047までで、それ以上は強制的に停止される. __ただし、その次の`oracle hard proc 16384`は`ulimitコマンド`で最大16384までプロセス最大数を増やせる__ - itemの説明 memlock:占有可能なメモリスペース(KB) nofile:開くことができる最大ファイル数 stack:スタック(メモリ)最大サイズ (KB) nproc: 最大プロセス数
### 8.レスポンスファイルの作成 インストーラをサイレント・モードまたはレスポンス・ファイル・モードで使用する際に必要になります
su oracle
vi database/response/db_install.rsp

下記の内容で修正

db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.1.0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/app/oraInventory
SELECTED_LANGUAGES=ja,en
ORACLE_BASE=/opt/app/oracle
ORACLE_HOME=/opt/app/oracle/product/12.1.0/dbhome_1
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.BACKUPDBA_GROUP=backupdba
oracle.install.db.DGDBA_GROUP=dgdba
oracle.install.db.KMDBA_GROUP=kmdba
DECLINE_SECURITY_UPDATES=true

※上記で設定したフォルダパスは、存在しなければ作成してください。

9.インストールに必要なものを準備

●Java
下記サイトからrpmをインストール
Javaのrpmインストール
仮想環境に配置して、配置した場所を指定して下記コマンド実行

rpm -ihv /root/jdk-8u271-linux-x64.rpm
java -version

パスが通っていたらOK
image.png
●libnsl.so.1のインストール
※CentOS8だと存在しない? ←環境によっては存在する可能性があるので、不要かもしれない

yum install libnsl 

10.インストール

/home/oracle/database/runInstaller -ignoreSysPrereqs -waitforcompletion -silent -responseFile /home/oracle/database/response/db_install.rsp

・各パラメータ

項目名 説明
ignoreSysPrereqs システムの前提条件チェックを無視します。
waitforcompletion インストーラーがフォアグランドで動きます。インストールが完了するまでコンソールは戻りません。
silent サイレントモードでインストールを指定する。
responseFile レスポンスファイルを絶対パスで指定する。
インストールが成功
image.png

インストールメッセージに記述があるシェルを実行する

/opt/app/oraInventory/orainstRoot.sh
/opt/app/oracle/product/12.2.0/dbhome_1/root.sh

image.png

インストールを確認

ls /opt/app/oracle/product/12.2.0/dbhome_1

いろいろインストールされている
image.png

※インストール実行後、以下のエラーが発生した場合
容量が足りていないので、追加してください。
私の場合は、/sda3にメモリを20G追加して成功しました
image.png

11.環境変数・サーバパラメータファイルの作成

環境変数の設定

vi .bash_profile

以下を追記
※ORACLE_SIDはインスタンス名なので好きなものを設定する

umask 022
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=/opt/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 ORACLE_SID=mydb
環境変数の説明 `umask 022`はアクセス権のことです. 設定する種類は[ここを参照](https://docs.oracle.com/cd/E19683-01/816-3967/secfiles-62/index.html) `LANG`:OS言語の設定 `NLS_LANG`:クライアント側の言語設定

保存したら即時反映

source ~/ .bash_profile

サーバパラメータファイルの作成
既にインストールによって、用意されているテンプレートを、命名インスタンス用にコピー

cp $ORACLE_HOME/dbs/init.ora $ORACLE_HOME/dbs/init【インスタンス名】.ora

作成したパラメータファイルを修正

vi $ORACLE_HOME/dbs/init【インスタンス名】.ora

修正箇所はとdb_nameのみ

インスタンス名.ora
db_name='mydb'
memory_target=1G
processes = 150
audit_file_dest='/opt/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/opt/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/app/oracle/'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on
# devices
control_files = (ora_control1, ora_control2)
compatible ='11.2.0'

※設定したフォルダパスが存在しない場合は、作成してください。
重要な項目についての意味

項目名 説明
memory_target 11g以降追加された項目で、SGAとPGAのメモリー管理が自動化される。自動化することで、「DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZEを、システム負荷などに応じて、Oracleが自動で効果的にメモリを割り当ててくれる
processes 200 + 全OP数7 + 同時接続EE数3 で設定する
db_block_size サイズを大きくすると、ディスクとメモリーのI/O効率が向上する
db_domain DBが作成されるネットワーク・ドメインの指定
db_recovery_file_dest 高速リカバリ領域の場所
db_recovery_file_dest_size 高速リカバリ領域で使用される最大層バイト数
undo_tablespace UNDOデータを格納するためのUNDO表領域
control_files 制御ファイルの指定
compatible DB互換性レベルの指定

サーバパラメータファイルの作成

sqlplus / as sysdba
CREATE SPFILE FROM PFILE;

image.png

spfile【インスタンス名】.oraファイルが作成されていたらOK

ls -l $ORACLE_HOME/dbs

12.インスタンスの起動

インスタンスの起動

sqlplus / as sysdba
STARTUP NOMOUNT

image.png
※インスタンスの起動失敗で以下のメッセージが出た場合
image.png

失敗したので調べてみると、どうやら、MEMORY_MAX_TARGET を設定する際、
MEMORY_MAX_TARGET に割り当てる物理メモリサイズよりも大きな領域を
/dev/shmに割り当てておかなければならないという仕様
現在の設定では、MEMORY_TARGETは1G のうち、/dev/shmが以下の通り
image.png
とりあえず__3G__ に拡張して成功しました
image.png

13.データベースの作成

ログファイル、DBファイルを格納するためのディレクトリを作っておく

mkdir -p $ORACLE_HOME/oradata/【インスタンス名】

データベースを作成
CREATE DBに関しての情報は公式を参照

CREATE DATABASE 【データベース名】
   USER SYS IDENTIFIED BY sys_password
   USER SYSTEM IDENTIFIED BY system_password
   LOGFILE GROUP 1 ('/opt/app/oracle/product/12.2.0/dbhome_1/oradata/mydb/redo01.log') SIZE 100M,
           GROUP 2 ('/opt/app/oracle/product/12.2.0/dbhome_1/oradata/mydb/redo02.log') SIZE 100M,
           GROUP 3 ('/opt/app/oracle/product/12.2.0/dbhome_1/oradata/mydb/redo03.log') SIZE 100M
   MAXLOGHISTORY 1
   MAXLOGFILES 16
   MAXLOGMEMBERS 3
   MAXDATAFILES 1024
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/opt/app/oracle/product/12.2.0/dbhome_1/oradata/mydb/system01.dbf'
     SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
   SYSAUX DATAFILE '/u01/app/oracle/oradata/mydb/sysaux01.dbf'
     SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
   DEFAULT TABLESPACE users
      DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/users01.dbf'
      SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/temp01.dbf'
      SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
   UNDO TABLESPACE undotbs1
      DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
   USER_DATA TABLESPACE usertbs
      DATAFILE '/opt/app/oracle/product/12.1.0/dbhome_1/oradata/mydb/usertbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

テーブル表領域とインデックス表領域作成
CREATE TABLESPACEに関しては公式を参照

-- テーブル表領域
CREATE TABLESPACE apps_tbs LOGGING 
     DATAFILE '/opt/app/oracle/product/12.2.0/dbhome_1/oradata/mydb/apps01.dbf' 
     SIZE 500M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED 
     EXTENT MANAGEMENT LOCAL;
-- インデックス表領域
CREATE TABLESPACE indx_tbs LOGGING 
     DATAFILE '/opt/app/oracle/product/12.2.0/dbhome_1/oradata/mydb/indx01.dbf' 
     SIZE 100M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED 
     EXTENT MANAGEMENT LOCAL;

スクリプトの実行
データ・ディクショナリ、ビュー、シノニム、PL/SQLなどの有効化を行う

@$ORACLE_HOME/rdbms/admin/catalog.sql
@$ORACLE_HOME/rdbms/admin/catproc.sql
@$ORACLE_HOME/sqlplus/admin/pubbld.sql

アプリで連携

ネットワークの設定

ファイアウォールを起動し、自動起動をON

systemctl start firewalld
firewall -cmd --state
systemctl enable firewalld

ポートの確認

firewall-cmd --list -all

image.png

5500と1521のポート穴あけ

firewall-cmd --zone=public --add-port=5500.tcp --permanent
firewall-cmd --zone=public --add-port=1521.tcp --permanent

image.png

反映(portの場所に設定されていたらOK)

firewall-cmd --reload
firewall-cmd --list-all

リスナー設定

ログイン用のユーザ作成__(好きな名前とパスワードで)__

 CREATE USER developer INDENTIFIED BY pass12 ACOUNT UNLOCK;

作成したユーザに権限を振っておきます

grant create session,create table,create view,create sequence,create trigger,create synonym,unlimited tablespace to developer 2 ;

リスナー起動

lsnrctl start

image.png
sqldevなどのツールで確認したところ接続できたのでOK
image.png

アプリと連携

あとは好きな環境で、接続した結果を表示
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?