コンテンツにスキップ

Oracle19c 初期設定

環境

  • RHEL 8.x
  • OracleDB 19c

インストール

OSユーザー/グループ作成

# oinstallグループとdbaグループを作成
groupadd oinstall
groupadd dba

# oracleユーザーの作成(作成済みグループに所属させる)
useradd -m oracle -g oinstall -G dba -s /bin/bash
passwd oracle # パスワード設定 今回は'oracle'を入力

# 作成できているか確認
cat /etc/group | grep -E 'oinstall|dba'
cat /etc/passwd | grep -E 'oracle'

環境変数設定

  • linuxでは~/.bash_profileとかに記載すればいい感じ。
  • ORACLE_SID には存在しないSIDを記載し、sqlplusする前に明示的に指定したほうがいい(って有識者が言ってた)
  • $ORACLE_HOME/bin にはdbcaなどのコマンドの実体があるので、パスを通しておくといいかも。
# oracleユーザーの .bash_profile に環境変数を追記
cat << '__EOF__' >> /home/oracle/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
__EOF__

cat /home/oracle/.bash_profile # ⇒確認

ディレクトリ作成

# ORACLE_HOMEに指定したディレクトリを作成し、所有者変更
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown -R oracle.oinstall /u01
ls -l / | grep u01 # ⇒確認

必要パッケージ

以下を参考にインストール
x86-64でサポートされているRed Hat Enterprise Linux 8のディストリビューション

dnf install -y \
bc binutils elfutils-libelf elfutils-libelf-devel \
fontconfig-devel glibc glibc-devel ksh libaio \
libaio-devel libXrender libX11 libXau libXi libXtst \
libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb \
libibverbs make policycoreutils policycoreutils-python-utils \
smartmontools sysstat

19c インストール

# 転送したzipファイルの展開
cd /u01/app/oracle/product/19.3.0/dbhome_1
unzip LINUX.X64_193000_db_home.zip

# エラー回避のための環境変数設定(インストール時のみ)
export LANG=C
export CV_ASSUME_DISTID=OL7

# OUI(Oracle Universal Installer)起動
./runInstaller  # ⇒GUIのインストール画面が起動します

GUI

※ 「Package: compat-libcap1-1.10」が解消しないのは、Oracleの不具合の模様。

Oracle Database 19cのLinuxに影響する問題

インスタンスの自動起動

  • やっておかないと、サーバー起動の度にDB/リスナーを起動しなければいけなくてとてもだるい。
  • リスナーも自動で起動するみたい

SE Linux 設定

# permissiveに変更
sed -i -e "s/^SELINUX=.*$/SELINUX=permissive/g" /etc/selinux/config
# 確認
cat /etc/selinux/config | grep -e '^SELINUX=' 

# 一時的に無効化 -> Permissive
setenforce 0

/etc/oratab

orcl:/u01/app/oracle/product/19.3.0/dbhome_1:N
↓
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y

service作成

/etc/systemd/system/oracledb.service 新規作成

[Unit]
Description=Oracle Database service
After=network.target

[Service]
Type=forking
TimeoutStopSec=5min
Environment=ORACLE_BASE=/u01/app/oracle
Environment=ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
Environment=ORACLE_SID=orcl
ExecStart=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart $ORACLE_HOME
ExecStop=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbshut $ORACLE_HOME
User=oracle

[Install]
WantedBy=multi-user.target

# 再読み込み
systemctl daemon-reload

# 自動起動 許可
systemctl enable oracledb.service
systemctl start oracledb.service

参考

補足: タイムゾーン

DBタイムゾーンはUTCになっているが、変更不要(らしい)。

-- セッションタイムゾーン
SELECT SESSIONTIMEZONE FROM DUAL;

    -- SESSIONTIMEZONE
    -- ---------------------------------------------------------------------------
    -- +09:00


SELECT DBTIMEZONE FROM DUAL;

    -- DBTIME
    -- ------
    -- +00:00

補足: 検証用設定

systemユーザーのPW変更

SQL Developerで使いたいので、とりあえずsystemだけ変更しておく。 なお、SQL Developerでログインする際、systemのロールは「デフォルト」

-- systemのパスワードを変更 ※ 一般ユーザー
ALTER USER system IDENTIFIED BY system;

firewall設定

# リスナーポートを許可
firewall-cmd --add-port=1521/tcp --permanent
# 再読み込み
firewall-cmd --reload
# 設定確認
firewall-cmd --list-all

表領域 作成

検証で雑に使用できるよう、defaulttbs という名前の表領域を作成する

-- 表領域 作成
CREATE TABLESPACE usertbs
  DATAFILE '/u01/app/oracle/usertbs.dbf'
  SIZE 100M AUTOEXTEND ON;

-- 表領域 確認
SELECT TABLESPACE_NAME, CONTENTS FROM DBA_TABLESPACES;

ユーザー作成

-- ユーザー作成(パスワード dbuser)
CREATE USER dbuser
  IDENTIFIED BY dbuser
  DEFAULT TABLESPACE usertbs
  TEMPORARY TABLESPACE temp
  QUOTA 10M ON usertbs
  PROFILE default;

-- ユーザー一覧表示
set linesize 400;
column USERNAME format a40;
column DEFAULT_COLLATION format a40;
SELECT USERNAME, DEFAULT_COLLATION FROM dba_users ORDER BY username;

-- このままでは権限不足で接続やテーブル作成が行えない。別途権限付与をする必要がある。
-- 今回は、雑にDBA権限を付与。(接続、テーブル作成権限 含む)
GRANT DBA TO dbuser;

-- 確認
column GRANTEE format a40;
column GRANTED_ROLE format a40;
SELECT * FROM dba_role_privs WHERE GRANTED_ROLE = 'DBA';

    -- GRANTEE                                  GRANTED_ROLE                             ADM DEL DEF COM INH
    -- ---------------------------------------- ---------------------------------------- --- --- --- --- ---
    -- DBUSER                                   DBA                                      NO  NO  YES NO  NO
    -- SYS                                      DBA                                      YES NO  YES YES YES
    -- SYSTEM                                   DBA                                      NO  NO  YES YES YES

接続できることを確認

sqlplus dbuser/dbuser

DEFAULTプロファイル

-- default プロファイルのパスワードを無期限に変更
ALTER PROFILE DEFAULT LIMIT password_life_time UNLIMITED;

-- DEFAULTプロファイルのパスワード有効期限を確認
column PROFILE format a40;
column RESOURCE_NAME format a40;
column LIMIT format a40;
SELECT PROFILE, RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_LIFE_TIME' AND PROFILE = 'DEFAULT';

基本操作

インスタンス起動

起動の流れは以下の通り

  1. SHUTDOWN: インスタンスが停止し、DBが稼働していない状態
  2. NOMOUNT: 初期パラメーターファイル読み込み ---> 、インスタンス起動
  3. MOUNT: 初期パラメータ情報を元に制御ファイルをオープン
  4. OPEN: 制御ファイルの情報をもとにREDOログファイルデータファイルをオープン
-- SHUTDOWN のインスタンスを起動(openまで)
startup;

-- SHUTDOWN のインスタンスを、MOUNT状態に
startup mount;

-- インスタンスを 変更 (現在の状態が SHUTDOWN 以外)
alter database mount;
alter database open;

-- インスタンスをシャットダウン(immediate)
shutdown immediate;

-- 現在のインスタンスの状態を確認 (現在の状態が SHUTDOWN 以外)
select instance_name, status from v$instance;

    -- NOMOUNT の場合  STARTED
    -- MOUNT の場合    MOUNTED
    -- OPEN の場合     OPEN

インスタンス停止

停止の種類

コマンド 内容
shutdown すべてのセッションが切断されるまで待機
shutdown normal すべてのセッションが切断されるまで待機
shutdown transactional 現行トランザクションの終了まで待機
shutdown immediate ★ 現行トランザクションをすべてロールバックして停止
shutdown abort 強制終了 immediateで止まらない場合に使用
次回データベース起動時にインスタンス・リカバリが自動で走る

リスナーの起動停止

その他

既存DB確認

起動していないDBはこの辺りを確認。 spfile<ORACLE_SID>.ora など、ファイル名にSIDが含まれるファイルから確認する。

[oracle@oracle19c ~]$ ls -l $ORACLE_HOME/dbs/
    :
-rw-r-----. 1 oracle oinstall     3584 Jul 10 11:19 spfileorcl.ora
-rw-r-----. 1 oracle oinstall     3584 Jun 18 05:41 spfiletest01.ora

起動しているDBはpsコマンドをgrepすることで確認。

[oracle@oracle19c ~]$ ps -ef | grep ora_pmon
oracle    145709       1  0 Jun11 ?        00:01:38 ora_pmon_orcl
oracle    311864    2378  0 Jun18 ?        00:01:19 ora_pmon_test01
oracle    726601  726430  0 02:42 pts/1    00:00:00 grep --color=auto ora_pmon

Oracle Client

インストール

ダウンロードはここから。

Oracle Database 19c Download for Linux x86-64 | Oracle 日本
Oracle Database 19c Client (19.3) for Linux x86-64 -> LINUX.X64_193000_client.zip

# oinstallグループとdbaグループを作成
groupadd oinstall
groupadd dba

# oracleユーザーの作成(作成済みグループに所属させる)
useradd -m oracle -g oinstall -G dba -s /bin/bash
passwd oracle # パスワード設定 今回は'oracle'を入力

# 作成できているか確認
cat /etc/group | grep -E 'oinstall|dba'
cat /etc/passwd | grep -E 'oracle'

# oracleユーザーの .bash_profile に環境変数を追記
cat << '__EOF__' >> /home/oracle/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/client_1
export PATH=$ORACLE_HOME/bin:$PATH
__EOF__

# ORACLE_HOMEに指定したディレクトリを作成し、所有者変更
mkdir -p /u01/app/oracle/product/19.3.0/client_1
chown -R oracle.oinstall /u01

# 必要パッケージのインストール
dnf install -y \
bc binutils elfutils-libelf elfutils-libelf-devel \
fontconfig-devel glibc glibc-devel ksh libaio \
libaio-devel libXrender libX11 libXau libXi libXtst \
libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb \
libibverbs make policycoreutils policycoreutils-python-utils \
smartmontools sysstat

# 転送したzipファイルの展開
unzip LINUX.X64_193000_db_home.zip

# エラー回避のための環境変数設定(インストール時のみ)
export LANG=C
export CV_ASSUME_DISTID=OL7

# OUI(Oracle Universal Installer)起動
./runInstaller  # ⇒GUIのインストール画面が起動します

接続 (簡易接続ネーミング)

# データベースサーバにリモート接続(簡易接続ネーミング)
sqlplus user01/password01@10.0.0.68:1521/orcl

接続 (ローカルネーミング)

tnsnames.ora設定
ネットサービス名が確認ポイント(以下の例では netservice01)

NETSERVICE01 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.68)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
接続 sqlplus ユーザー名/パスワード@ネットサービス名

# データベースサーバにリモート接続(ローカルネーミング)
sqlplus user01/password01@netservice01