2021年4月28日水曜日

JA16SJISのデータベースにOracle APEXをインストールする

 表題の件を聞かれたので試してみました。AL32UTF8のデータベースと異なるところはなく、同じようにインストールできます。

以下、確認した手順です。Oracle APEXというよりは、そもそも確認のためにJA16SJISのデータベースを用意しないといけないので、そこからです。確認するために使用したデータベースは、無料で使えるOracle Database 18c Express Edition (XE) です。macOS上のVirtualBoxのOracle Linux 7の環境にインストールしています。

非CDB構成ではなく、AL32UTF8で作成したCDBにJA16SJISのPDBをプラグします。プラグしたJA16SJISのPDBにOracle APEXをインストールします。

最初にJA16SJISのPDBを作成します。JA16SJISのPDBだけを作成することはできないため、CDBを含めて新規にデータベースを作成します。

dbcaを実行します。データベースの作成を選んで、データベースの作成を開始します。次へ進みます。

拡張構成を選びます。標準構成でもよいのですが、なぜかNullPointerExceptionが発生して解消しませんでした。次へ進みます。


XEでは選択できるデータベースのタイプはひとつしかないので、そのまま次へ進みます。


グローバル・データベース名SIDともにxeとします。PDB名xepdb1とします。それ以外はデフォルトの設定のまま、標準的なCDB構成でPDBを1つ作成します。次へ進みます。


記憶域オプションはこうしないといけない、というのはないのですが、データベース記憶域属性に次を使用、を選んで、ファイルシステムの位置(デフォルトのまま)を指定します。Oracle Managed Filesは使用しません。OMFを使うか使わないかで、PDBをアンプラグ、プラグするコマンドが若干変わります。次へ進みます。


高速リカバリ・オプションもこうしないといけない、というのはないのですが、高速リカバリ領域の指定チェックを入れ、サイズの指定をすこし増やしています。アーカイブ有効化のチェックは入れません。次へ進みます。


画面では既存のリスナーを指定しています。新規の場合は、新規リスナーの作成チェックを入れます。次へ進みます。


Oracle Database Vaultの構成、および、Oracle Label Securityの構成は行いません。チェックは入れずに、次へ進みます。


構成オプションの指定の画面からキャラクタ・セットのタブを開き、データベース文字セットとしてJA16SJIS - Shift-JIS16ビット日本語を選択します。利用可能なリソースが限られているExpress Editonなので、それ以外に変更が必要な構成はありません。次へ進みます。


Enterprise Manager Database Expressの構成は行いません。チェックを外して、次へ進みます。


すべてのアカウントに同じ管理パスワードを使用を選択し、パスワードを設定します。(もちろん、SYS、SYSTEM、PDBADMINそれぞれにパスワードを設定してもかまいません)次へ進みます。


複雑さが足りないパスワードの場合、警告が表示されます。そのまま進む場合は、はいをクリックします。


データベースの作成チェックを入れます。次へ進みます。


サマリーが表示されます。終了をクリックすると、データベースの作成が開始します。進行状況が表示されます。


データベースが作成されたら、閉じるをクリックして、dbcaを閉じます。


作成されたデータベースに接続し、PDBをアンプラグします。名前がXEPDB1のPDBを、クローズした後アンプラグします。アンプラグされたPDBは、/home/oracle/xepdb1.pdbというファイルになっています。

$ export ORACLE_SID=xe

$ sqlplus / as sysdba


SQL*Plus: Release 18.0.0.0.0 - Production on Wed Apr 28 18:47:25 2021

Version 18.4.0.0.0


Copyright (c) 1982, 2018, Oracle.  All rights reserved.



Connected to:

Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0


SQL> alter pluggable database xepdb1 close;


Pluggable database altered.


SQL> alter pluggable database xepdb1 unplug into '/home/oracle/xepdb1.pdb';


Pluggable database altered.


SQL> exit

Disconnected from Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0

$ ls -l /home/oracle/xepdb1.pdb

-rw-r--r--. 1 oracle oinstall 164218265  4月 28 18:48 /home/oracle/xepdb1.pdb

$ 


dbcaを起動し、データベースの削除を選択します。次へ進みます。


削除するデータベースとしてxeを選択します。SYSのパスワードを指定し、次へ進みます。


Enterprise Manager (EM) Cloud Controlからの登録解除は不要なので、そのままにして次へ進みます。


サマリーが表示されます。終了をクリックします。


確認を求められるので、はいをクリックします。データベースの削除が開始します。


後は進行状況ページが表示されます。


削除が完了したら、閉じるをクリックして、dbcaを終了します。


まったく同じ手順で、今度はAL32UTF8のデータベースを作成します。構成オプションのキャラクタ・セットとして、Unicode(AL32UTF8)を使用を選択します。


AL32UTF8のデータベースが作成されたら、JA16SJISで作成したPDBをプラグします。AL32UTF8で作成したデータベースにあるPDB - XEPDB1を削除し、JA16SJISのPDBをXEPDB1としてプラグします。

$ sqlplus / as sysdba


SQL*Plus: Release 18.0.0.0.0 - Production on Wed Apr 28 19:18:56 2021

Version 18.4.0.0.0


Copyright (c) 1982, 2018, Oracle.  All rights reserved.



Connected to:

Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0


QL> show pdbs


    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED   READ ONLY  NO

3 XEPDB1   READ WRITE NO

SQL> alter pluggable database xepdb1 close;


Pluggable database altered.


SQL> drop pluggable database xepdb1 including datafiles;


Pluggable database dropped.


SQL> create pluggable database xepdb1 using '/home/oracle/xepdb1.pdb' file_name_convert = ('/home/oracle','/opt/oracle/oradata/XE/xepdb1');


Pluggable database created.


SQL> alter pluggable database xepdb1 open;


Pluggable database altered.


SQL> show pdbs


    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED   READ ONLY  NO

4 XEPDB1   READ WRITE NO

SQL> exit

Disconnected from Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0

$ 


後は以前に書いた記事、Oracle APEXの簡単なインストール手順に沿って、作業を実施します。

今回はAPEX 20.2を使います。$HOME/apex以下にapex_20.2.zipが展開済みの状態から始めます。NLS_LANGは必ずAmerican_America.AL32UTF8を設定します。APEXのメディアがAL32UTF8でエンコードされているためです。

接続先はPDBであるxepdb1、SYSDBAで接続します。

$ cd $HOME/apex

$ export NLS_LANG=American_America.AL32UTF8

$ sqlplus sys/********@localhost/xepdb1 as sysdba


SQL*Plus: Release 18.0.0.0.0 - Production on Wed Apr 28 19:30:12 2021

Version 18.4.0.0.0


Copyright (c) 1982, 2018, Oracle.  All rights reserved.



Connected to:

Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0


SQL> @apexins SYSAUX SYSAUX TEMP /i/


NLS_LANGさえ適切に設定されていれば、後はSQL*Netのライブラリがデータベースのキャラクタ・セットに合わせてエンコーディングを変換してくれます。

APEXのインストールが完了したら、日本語リソースをインストールします。

...null1.sql

SYS> @load_trans JAPANESE


しばらく待ちますが、特に問題なく終了します。続けて、データベースへの接続に関する設定を行います。

Adjust instance settings


PL/SQL procedure successfully completed.


SYS> @apxchpwd

...set_appun.sql

================================================================================

This script can be used to change the password of an Application Express

instance administrator. If the user does not yet exist, a user record will be

created.

================================================================================

Enter the administrator's username [ADMIN] 

User "ADMIN" does not yet exist and will be created.

Enter ADMIN's email [ADMIN] 

Enter ADMIN's password [] **********

Created instance administrator ADMIN.


SYS> alter user apex_public_user identified by oracle account unlock;

SYS> @apex_rest_config


Enter a password for the APEX_LISTENER user              [] ********

Enter a password for the APEX_REST_PUBLIC_USER user              [] ********

...set_appun.sql

...setting session environment

...create APEX_LISTENER and APEX_REST_PUBLIC_USER users

SYS> exit

Disconnected from Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production

Version 18.4.0.0.0

$ 


ORDSのインストールを行います。使用するORDSは20.4.3です。/home/oracle/ords以下にZIPファイルを展開済みとします。

ORDSのインストール手順も、以前の記事と同じです。

$ java -jar ords.war install

このOracle REST Data Servicesインスタンスはまだ構成されていません。

次のプロンプトを完了してください



構成データを格納する場所を入力してください: conf

データベース・サーバーの名前を入力してください [localhost]:

データベースのリスニング・ポートを入力してください [1521]:

データベース・サービス名を指定するには1を、データベースSIDを指定するには2を入力してください [1]:

データベース・サービス名を入力してください:xepdb1

ORDS_PUBLIC_USERのデータベース・パスワードを入力してください:********

パスワードの確認:********

管理者権限でログインし、Oracle REST Data Servicesスキーマを確認する必要があります。


管理者ユーザー名を入力してください:sys

SYS AS SYSDBAのデータベース・パスワードを入力してください:********

パスワードの確認:********

データベース・ユーザー: SYS AS SYSDBA URL: jdbc:oracle:thin:@//localhost:1521/xepdb1に接続しています


情報の取得中.

PL/SQLゲートウェイを使用する場合は1を、このステップをスキップする場合は2を入力してください

Oracle Application Expressを使用しているかmod_plsqlから移行する場合は、1を入力する必要があります [1]:

APEX_PUBLIC_USERのデータベース・パスワードを入力してください:********

パスワードの確認:********

Application Express RESTfulサービスのデータベース・ユーザー(APEX_LISTENER, APEX_REST_PUBLIC_USER)にパスワードを使用するには1を、このステップをスキップするには2を入力してください [1]:2

番号を入力して、有効化する機能を選択してください:

   [1] SQL Developer Web (すべての機能を有効化)

   [2] REST対応SQL

   [3] データベースAPI

   [4] REST対応SQLとデータベースAPI

   [5] なし

選択 [1]:

2021-04-28T12:03:25.700Z INFO        reloaded pools: []

Oracle REST Data Servicesバージョン20.4.3.r0501904をインストールしています

... ログ・ファイルが/home/oracle/ords_install_core_2021-04-28_210327_00002.logに書き込まれました

... データベース前提条件を確認しました

... Oracle REST Data Servicesプロキシ・ユーザーを作成しました

Warning: Nashorn engine is planned to be removed from a future JDK release

... Oracle REST Data Servicesスキーマを作成しました

... Oracle REST Data Servicesに権限を付与しました

... Oracle REST Data Servicesデータベース・オブジェクトを作成しました

... ログ・ファイルが/home/oracle/ords_install_datamodel_2021-04-28_210519_00022.logに書き込まれました

... ログ・ファイルが/home/oracle/ords_install_apex_2021-04-28_210528_00010.logに書き込まれました

Oracle REST Data Servicesバージョン20.4.3.r0501904のインストールが完了しました。経過時間: 00:02:11.675 


スタンドアロン・モードで起動するには1を、終了するには2を入力してください [1]:

APEX静的リソースの場所を入力します:/home/oracle/apex/images/

HTTPを使用する場合は1を、HTTPSを使用する場合は2を入力してください [1]:

2021-04-28T12:08:32.233Z INFO        HTTP and HTTP/2 cleartext listening on host: localhost port: 8080

2021-04-28T12:08:32.399Z INFO        Disabling document root because the specified folder does not exist: /home/oracle/ords/conf/ords/standalone/doc_root

2021-04-28T12:08:39.713Z INFO        Configuration properties for: |apex||

database.api.enabled=true

db.connectionType=basic

db.hostname=localhost

db.port=1521

db.servicename=xepdb1

feature.sdw=true

restEnabledSql.active=true

security.requestValidationFunction=wwv_flow_epg_include_modules.authorize

security.validationFunctionType=plsql

db.password=******

db.username=APEX_PUBLIC_USER

resource.templates.enabled=true


2021-04-28T12:08:39.716Z WARNING     *** 構成|apex||のjdbc.MaxLimitで10の値を使用しています。この設定は製品環境には十分なサイズではない可能性があります ***

2021-04-28T12:08:39.716Z WARNING     *** 構成|apex||のjdbc.InitialLimitで3の値を使用しています。この設定は製品環境には十分なサイズではない可能性があります ***

2021-04-28T12:08:46.914Z INFO        Configuration properties for: |apex|pu|

database.api.enabled=true

db.connectionType=basic

db.hostname=localhost

db.port=1521

db.servicename=xepdb1

feature.sdw=true

restEnabledSql.active=true

security.requestValidationFunction=wwv_flow_epg_include_modules.authorize

security.validationFunctionType=plsql

db.password=******

db.username=ORDS_PUBLIC_USER

resource.templates.enabled=true


2021-04-28T12:08:46.915Z WARNING     *** 構成|apex|pu|のjdbc.MaxLimitで10の値を使用しています。この設定は製品環境には十分なサイズではない可能性があります ***

2021-04-28T12:08:46.921Z WARNING     *** 構成|apex|pu|のjdbc.InitialLimitで3の値を使用しています。この設定は製品環境には十分なサイズではない可能性があります ***

2021-04-28T12:09:06.628Z INFO        Oracle REST Data Services initialized

Oracle REST Data Services version : 20.4.3.r0501904

Oracle REST Data Services server info: jetty/9.4.35.v20201120


ORDSが起動します。プロトコルとしてHTTPを選んでいるので、デフォルトの8080番ポートからアクセスできます。

サインインのページに日本語の選択が表示されています。


ワークスペースを構成し、サンプル・データセットのEMP/DEPTからアプリケーションを作成しました。

試していませんが、データベースのキャラクタ・セットがJA16SJISなので、データセットの言語としてEnglishとJapanese以外を選んだら、エラーが発生するはずです。


サンプル・データセットのインストールから、アプリケーションの作成を実行します。


アプリケーションの動作を確認できます。


ヘルプの情報から、データベースのキャラクタ・セットを確認できます。


一番下にNLS_CHARCTERSETの情報が含まれています。


以上で確認作業は完了です。