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ライセンスが必要です。
4. 最後に
ORA-00439および関連エラーに対する説明は以上となります。
各種機能を使用する際には、その機能に必要となるライセンスに留意する必要があります。