株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

RPMベースのOracle Databaseインストール – (全部俺)某Oracle書籍を25日後に脱稿するXX歳のAdvent Calendar 2021 10日目

Oracle ACEの渡部です。

この記事は(全部俺)某Oracle書籍を25日後に脱稿するXX歳の Advent Calendar 2021の10日目の記事です。9日目の記事は19c新機能 リカバリカタログ使用時のPDB接続 - (全部俺)某Oracle書籍を25日後に脱稿するXX歳のAdvent Calendar 2021 9日目でした。

つい「カッと」なって(全部俺)某Oracle書籍を25日後に脱稿するXX歳の Advent Calendar 2021を作ってしまいました。

オラクルマスター教科書 Bronze DBA Oracle Database Fundamentalsオラクルマスター教科書 Silver DBA Oracle Database Administration Iに続く「某Oracle書籍」を執筆中のOracle ACE 渡部が、12月25日のドラフト脱稿目指して1日1記事頑張って投稿してゆきたいと思います!

(注意点) 一連の投稿について

  • 「某Oracle書籍」執筆中に実施した下調べの内容や、「某Oracle書籍」のターゲットを超える内容、内容的に関連するセミナー資料の抜粋などを記載する予定です。

  • 2021年12月時点で「某Oracle書籍」の発売時期は未定です。もう少々お待ちを。

  • 万が一、関係者から怒られたら途中でやめるかも(たぶん大丈夫だと思うのだけど)

  • 執筆中の「某Oracle書籍」の記載内容と、一連の投稿の記載内容は異なります

    • そもそも、同じ内容を投稿したら「問題」になる!
  • 「某Oracle書籍」の記載と、一連の投稿は品質が全く異なります

    • 「某Oracle書籍」の記載は、十分に推敲を重ねた、図や表を用いた丁寧なものです。一方、一連の投稿はメモ書きの延長のレベルで、概して推敲が不十分で図や表はあまり使っていません。
    • 「某Oracle書籍」の記載は、先頭から読んでいけばスンナリ理解できるように工夫された完結性・完備性が高いものです。一方、一連の投稿は特定の観点やトピックにのみ関連するものです。内容を理解するには前提知識が求められます。

[宣伝] これまでに渡部が執筆した書籍の一覧

2022/3/25 追記

12月中の脱稿には失敗してしまいましたが、その後鋭意執筆を進め、2022年5月27日に「オラクルマスター教科書 Gold DBA Oracle Database Administration II」を販売開始します。詳細は以下をご覧ください。

ORACLE MASTER Bronze DBA 2019試験対策本の発売日が決定しました

18c新機能 RPMベースのOracle Databaseインストール

Oracle 18cから、一般的なLinuxツールと同様に、RPMファイルを使ってrpmコマンドやyumコマンドでOracle Databaseをインストールできるようになりました。

Oracle 19c用のRPMファイルを前提にしたときの、大枠の手順は以下のとおりです。

  • rootユーザーで実行する

    1. rpmコマンドまたはyumコマンドで oracle-database-ee-19c-1.0-1.x86_64.rpm をインストール → /opt/oracle 以下にソフトウェアが導入される
    2. /etc/init.d/oracledb_ORCLCDB-19c configure を実行し、サンプルデータベースを作成 → /etc/sysconfig/oracledb_ORCLCDB-19c.conf の設定に従いデータベースが作成される

oracle-database-ee-19c-1.0-1.x86_64.rpm をインストール

2.6Gバイトとなかなか大きいファイルサイズのRPMファイルですが、ともあれ、通常のRPMファイルのように rpmコマンドでインストールできます。

[oracle@ol79n23 tmp]$ ls -hl /var/tmp/oracle-database-ee-19c-1.0-1.x86_64.rpm
-rw-r--r--. 1 oracle oinstall 2.6G Nov 13  2021 /var/tmp/oracle-database-ee-19c-1.0-1.x86_64.rpm
[oracle@ol79n23 tmp]$ sudo rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm
warning: oracle-database-ee-19c-1.0-1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-database-ee-19c-1.0-1     ################################# [100%]
[INFO] Executing post installation scripts...
[INFO] Oracle home installed successfully and ready to be configured.
To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure
[oracle@ol79n23 tmp]$

導入ファイル

ORACLE_HOMEは決め打ちで、/opt/oracle/product/19c/dbhome_1 です。

従って、当然 /opt/oracle/product/19c/dbhome_1 以下に大量のファイルが導入される形になるわけですが、 /opt/oracle/product/19c/dbhome_1 以外にも以下のファイルが導入されます。

[oracle@ol79n23 tmp]$ rpm -ql $rpmpkg | grep -v /opt/oracle/product
/etc/init.d/oracledb_ORCLCDB-19c
/etc/sysconfig/oracledb_ORCLCDB-19c.conf

インストール時の実行スクリプト

RPMインストール時の実行スクリプト(scriptlet)は、一般に rpm -q --scripts で確認できます。 Oracle RPMファイルも同様です。

[oracle@ol79n23 tmp]$ RPMNAME=oracle-database-ee-19c-1.0-1.x86_64.rpm
[oracle@ol79n23 tmp]$ rpm -qp  --scripts ${RPMNAME}
warning: oracle-database-ee-19c-1.0-1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
preinstall scriptlet (using /bin/sh):
#!/bin/sh
#execute pre install validations

#Create the corresponding log for the RPM installation
RPM_LOG_LOCATION=/var/log/oracle-database-ee-19c/results
RPM_LOG_FILE=$RPM_LOG_LOCATION/oraInstall.log

  (略)

postinstall scriptlet (using /bin/sh):
RPM_LOG_FILE=/var/log/oracle-database-ee-19c/results/oraInstall.log;
INVENTORY_SETUP_ALREADY=false;
if [ -f '/etc/oraInst.loc' ]; then
    INVENTORY_LOC=`cat /etc/oraInst.loc | grep -o ^inventory_loc=.* | sed -e 's/^inventory_loc=//'`;
    /bin/echo [INFO] Inventory located at: ${INVENTORY_LOC} >> $RPM_LOG_FILE;
    INVENTORY_SETUP_ALREADY=true;

  (略)

preuninstall scriptlet (using /bin/sh):
RPM_LOG_FILE=/var/log/oracle-database-ee-19c/results/oraInstall.log;
/bin/echo [PRE-UNINSTALL] >> $RPM_LOG_FILE;
/bin/echo [INFO] Performing uninstall actions on Oracle home... >> $RPM_LOG_FILE;
/bin/echo $(date +%x-%r) >> $RPM_LOG_FILE;
TMP_FOLDER='/tmp';
FOLDER_NAME_FRM=deinstall_rsp_;

  (略)

postuninstall scriptlet (using /bin/sh):
#!/bin/sh

if [ -f '/etc/oraInst.loc' ]; then
   #Existing inventory found!!
   INVENTORY_LOCATION=`cat /etc/oraInst.loc | grep -o ^inventory_loc=.* | sed -e 's/^inventory_loc=//'`;
   INVENTORY_FILE=${INVENTORY_LOCATION}/ContentsXML/inventory.xml;
   #First validate if the inventory is already empty
   if `grep -q '<HOME *NAME=' $INVENTORY_FILE`; then

  (略)

実行スクリプトとしては以下の4つがありました。

  • preinstall scriptlet
  • postinstall scriptlet
  • preuninstall scriptlet
  • postuninstall scriptlet

preinstall scriptlet

ファイル展開前に実行される処理ですが、主なものとしては以下がありました。

  • OSユーザーの作成 : \'oracle\'
  • OSグループの作成 : \'oinstall\' \'dba\' \'oper\' \'backupdba\' \'dgdba\' \'kmdba\' \'racdba\'
  • ORACLE_HOMEの準備 : /opt/oracle/product/19c/dbhome_1
  • メモリサイズのチェック
  • Docker環境かどうかのチェック

postinstall scriptlet

ファイル展開後に実行される処理ですが、主なものとしては以下がありました。

  • ORACLE_HOME_NAMEの決定
  • runInstaller.sh -silent -detachHomeの実行
  • runInstaller.sh -silent -attachHomeの実行
  • rootスクリプトの実行: orainstRoot.sh, root.sh

runInstaller.shを実行している該当部分を抜粋します。

su -c "/opt/oracle/product/19c/dbhome_1/oui/bin/runInstaller.sh -silent -ignoreSysPrereqs -detachHome ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 ORACLE_BASE=/opt/oracle ORACLE_HOME_NAME=${NEW_ORA_HOME_NAME} INVENTORY_LOCATION=${INVENTORY_LOC} " >> /dev/null -m oracle
su -c "/opt/oracle/product/19c/dbhome_1/oui/bin/runInstaller.sh -silent -ignoreSysPrereqs -attachHome ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 ORACLE_BASE=/opt/oracle ORACLE_HOME_NAME=${NEW_ORA_HOME_NAME} INVENTORY_LOCATION=${INVENTORY_LOC} " >> /dev/null -m oracle

oracleユーザーで、runInstaller.shをサイレントモード実行していることがわかります。

注意点

実行される処理から、以下の点を注意すべきであることがわかります。

  • Oracleインストール要件の一部のみ(OSユーザー、OSグループ、ディレクトリ)が実行されます。 すべてが実行されるわけではありません。 Oracleインストール要件の構成を簡単に実行したい場合は、preinstall rpmを使用するのがよいでしょう。
  • 多くの部分が決め打ちになっています。特に ORACLE_HOME は /opt/oracle/product/19c/dbhome_1 で決め打ちです。

/etc/init.d/oracledb_ORCLCDB-19c configure によるサンプルデータベースの作成

RPMインストール時のメッセージからわかるとおり、

[oracle@ol79n23 tmp]$ sudo rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm
warning: oracle-database-ee-19c-1.0-1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-database-ee-19c-1.0-1     ################################# [100%]
[INFO] Executing post installation scripts...
[INFO] Oracle home installed successfully and ready to be configured.
To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure
[oracle@ol79n23 tmp]$

サンプルデータベースを作成するには /etc/init.d/oracledb_ORCLCDB-19c configure を実行する必要があります。

[root@ol79n23 ~]# /etc/init.d/oracledb_ORCLCDB-19c configure
Configuring Oracle Database ORCLCDB.
Prepare for db operation
8% complete
Copying database files
31% complete
Creating and starting Oracle instance
32% complete
36% complete
40% complete
43% complete
46% complete
Completing Database Creation
51% complete
54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/ORCLCDB.
Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.

Database configuration completed successfully. The passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.
[root@ol79n23 ~]#

/etc/init.d/oracledb_ORCLCDB-19c configure の処理内容

/etc/init.d/oracledb_ORCLCDB-19cから該当する箇所を抜粋します。

# Entry point to configure the DB
configure()
{
    check_for_configuration
    RETVAL=$?
    if [ $RETVAL -eq 0 ]
    then
        echo Oracle Database instance $ORACLE_SID is already configured.
        exit 1
    fi
    read_config_file
    check_port_availability
    check_em_express_port_availability
    configure_perform
}

# To call DBCA to configure the DB
configure_perform()
{
    # Unset the proxy env vars before calling dbca
    unset_proxy_vars

    echo Configuring Oracle Database $ORACLE_SID.

    $SU -s /bin/bash  $ORACLE_OWNER -c $DBCA -silent -createDatabase -gdbName $ORACLE_SID -templateName $TEMPLATE_NAME -characterSet $CHARSET -createAsContainerDatabase $CREATE_AS_CDB -numberOfPDBs $NUMBER_OF_PDBS -pdbName $PDB_NAME -createListener $LISTENER_NAME:$LISTENER_PORT -datafileDestination $ORACLE_DATA_LOCATION -sid $ORACLE_SID -autoGeneratePasswords -emConfiguration DBEXPRESS -emExpressPort $EM_EXPRESS_PORT

    RETVAL=$?

    echo
    if [ $RETVAL -eq 0 ]
    then
        echo Database configuration completed successfully. The passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.
        return 0
    else
        echo Database configuration failed.
        exit 1
    fi
}

DBCAが呼び出されていることがわかります。DBCAコマンドの部分を改行で整理すると以下のようになります。

$DBCA 
    -silent 
    -createDatabase 
    -gdbName $ORACLE_SID 
    -templateName $TEMPLATE_NAME 
    -characterSet $CHARSET 
    -createAsContainerDatabase $CREATE_AS_CDB 
    -numberOfPDBs $NUMBER_OF_PDBS 
    -pdbName $PDB_NAME 
    -createListener $LISTENER_NAME:$LISTENER_PORT 
    -datafileDestination $ORACLE_DATA_LOCATION 
    -sid $ORACLE_SID 
    -autoGeneratePasswords 
    -emConfiguration DBEXPRESS 
    -emExpressPort $EM_EXPRESS_PORT

注意点

  • サンプルデータベースという位置づけから、必ずしも /etc/init.d/oracledb_ORCLCDB-19c configure を用いてデータベースを作成する必要は無いはずです。 通常通りDBCAを実行してデータベースを作成することも許されると考えています。
  • 1521ポートを使用するリスナーを作成します。
  • /etc/sysconfig/oracledb_ORCLCDB-19c.conf を編集することでサンプルデータベースの構成を変更できます。 しかし、構成変更したいなら通常どおりDBCAを使ってデータベースを作成すればよい気もします。
  • 物理メモリが小さい場合ORA-04031の発生に注意が必要です。

    • 内部的にdatapatchが実行されるため、比較的大きなサイズの共有プールを必要とします。
  • /etc/hosts に自ホストのIPアドレスが未登録の場合、[FATAL] [DBT-06103] The port (1,521) is already in use. で失敗します。
[oracle@ol79n23 tmp]$ sudo /etc/init.d/oracledb_ORCLCDB-19c configure
Configuring Oracle Database ORCLCDB.
[FATAL] [DBT-06103] The port (1,521) is already in use.
   ACTION: Specify a free port.

Database configuration failed.

2022/3/25 追記

12月中の脱稿には失敗してしまいましたが、その後鋭意執筆を進め、2022年5月27日に「オラクルマスター教科書 Gold DBA Oracle Database Administration II」を販売開始します。詳細は以下をご覧ください。

ORACLE MASTER Bronze DBA 2019試験対策本の発売日が決定しました

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ