Oracleエラー対応(ORA-00439):「機能は有効ではありません」の対処方法について

現役DBAが解説-Oracleエラー対応

Enterprise Editon(以下、EE)の機能をStandard Edition2(以下、SE2)で使用するとORA-00439が発生します。
いくつかのケースについて、原因および解決策をご紹介します。

1. エラーメッセージ

ORA-00439: 機能は有効ではありません:<機能名>

2. 事象・原因・対策

本記事ではORA-00439が発生するケースの中で代表的なものを3つご紹介します。

①オンラインでのテーブルの表領域移動とインデックスリビルド

テーブルの表領域移動、インデックスリビルドにオンライン実行の機能がありますが、いずれもEEのみの機能となります。
そのため、SE2でオンライン実行しようとするとORA-00439が発生します。
(テーブルの表領域移動でも、エラーメッセージはOnline Index Buildと出力されます)

SQL> ALTER INDEX INDREB_IND REBUILD ONLINE ;
ALTER INDEX INDREB_IND REBUILD ONLINE
*
行1でエラーが発生しました。:
ORA-00439: 機能は有効ではありません: Online Index Build
SQL> ALTER TABLE MOVETS MOVE TABLESPACE USERS ONLINE ;
ALTER TABLE MOVETS MOVE TABLESPACE USERS ONLINE
*
行1でエラーが発生しました。:
ORA-00439: 機能は有効ではありません: Online Index Build

SE2でも表領域移動、インデックスリビルドを行うことは可能ですが、ONLINE句はつけずに実行する必要があります。
(オンラインではないため、作業中は当該オブジェクトに対するDML操作ができなくなります)

SQL> ALTER INDEX INDREB_IND REBUILD;
索引が変更されました。
SQL> ALTER TABLE MOVETS MOVE TABLESPACE USERS ;
表が変更されました。

②ビットマップインデックスの作成

ビットマップインデックス(列の値として取り得る値の種類が少ないときに有効とされるインデックス)はEEのみの機能となります。
そのためSE2では、作成しようとするとORA-00439が発生します。

SQL> CREATE BITMAP INDEX BITIND ON INDREB(COL2);
CREATE BITMAP INDEX BITIND ON INDREB(COL2)
*
行1でエラーが発生しました。:
ORA-00439: 機能は有効ではありません: Bit-mapped indexes

SE2ではビットマップではない通常のインデックスを使用する必要があります。

SQL> CREATE INDEX NORMALIND  ON INDREB(COL2);
索引が作成されました。

③Flashback Tableの実行

特定のテーブルの中身のみを指定した時点に戻すFlashback TableはEEのみの機能となります。

SQL> SELECT * FROM FLASHTAB;
VARCOL      DATCOL
----------      -------------------
RECORD 1   2021/12/01 10:05:21
RECORD 2   2021/12/01 10:08:21
RECORD 3   2021/12/01 10:17:39
SQL> FLASHBACK TABLE FLASHTAB TO TIMESTAMP TO_TIMESTAMP('2021/12/01 10:25:00' , 'YYYY/MM/DD HH24:MI:SS');
FLASHBACK TABLE FLASHTAB TO TIMESTAMP TO_TIMESTAMP('2021/12/01 10:25:00' , 'YYYY/MM/DD HH24:MI:SS')
*
行1でエラーが発生しました。:
ORA-00439: 機能は有効ではありません: Flashback Table

特定の指定時刻時点の内容をSELECTするFlashback QueryはSE2でも使用可能です。

SQL> SELECT * FROM FLASHTAB AS OF TIMESTAMP TO_TIMESTAMP('2021/12/01 20:10:00','YYYY/MM/DD HH24:MI:SS');
VARCOL      DATCOL
----------      -------------------
RECORD 1   2021/12/01 10:05:21
RECORD 2   2021/12/01 10:08:21

Flashback QueryとCREATE TABLE AS SELECT を使用することにより、Flashback Tableと類似した処理を実行することは可能です。

SQL> CREATE TABLE FLASHTAB_BACK AS SELECT * FROM FLASHTAB AS OF TIMESTAMP TO_TIMESTAMP('2021/12/01 20:10:00','YYYY/MM/DD HH24:MI:SS');

表が作成されました。

SQL> SELECT * FROM FLASHTAB_BACK;

VARCOL      DATCOL
----------      -------------------
RECORD 1   2021/12/01 20:05:21
RECORD 2   2021/12/01 20:08:21

3. 類似エラーコードについて

ORA-00439ではありませんが、EE(およびオプションライセンス)が必要な機能をSE2で使用しようとしたことによるエラーコードを2つご紹介します。

①ORA-65010:最大数のプラガブル・データベースが作成されました

Oracle 19cから、SE2でもプラガブル・データベース(PDB)を3つまで作成できるようになりました。
SE2で4つ目を作成しようとするとエラーになります。

SQL> conn / as sysdba
接続されました。
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------        ---------- ----------
         2 PDB$SEED                              READ ONLY  NO
         3 ORA19SP                                READ WRITE NO
         4 ORA19SQ                                MOUNTED
         5 ORA19SR                                MOUNTED
SQL>
SQL> CREATE PLUGGABLE DATABASE ORA19ST FROM ORA19SP
  2  FILE_NAME_CONVERT = ('/ora19s/oradata/ORA19SC/ora19sp/', '/ora19s/oradata/ORA19SC/ora19st/');
CREATE PLUGGABLE DATABASE ORA19ST FROM ORA19SP
                          *
行1でエラーが発生しました。:
ORA-65010: 最大数のプラガブル・データベースが作成されました

4つ以上のPDBを作成したい場合は、EE + Oracle Multitenantのライセンスが必要です。

②RMAN-06909:警告:パラレル化にはEnterprise Editionが必要です

RMANにおいて、PARALLELISM句を使用して並列バックアップを使用する場合はEEである必要があります。
SE2で設定を行うと、以下のようなエラーとなり無視されます。

$ rman target / nocatalog
RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/ora19s/backup/channel1/%U';
RMAN> CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/ora19s/backup/channel2/%U';
RMAN> CONFIGURE DEVICE TYPE disk PARALLELISM 2;
RMAN> show all;
db_unique_name ORA19SCのデータベースにおけるRMAN構成パラメータ:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
RMAN-06908: 警告: 操作は割り当てられたチャネルでパラレルに実行しません
RMAN-06909: 警告: パラレル化にはEnterprise Editionが必要です
DISKチャネル2の構成が無視されます
  <以下略>

PARALLELISM句を使用した並列バックアップにはEEライセンスが必要です。

関連記事 : Oracleバックアップの速度改善(Oracle Recovery Manager 編)

4. 最後に

ORA-00439および関連エラーに対する説明は以上となります。
各種機能を使用する際には、その機能に必要となるライセンスに留意する必要があります。