2021年3月4日木曜日

Autonomous Databaseでのデフォルト・エディションの変更

 Autonomous Databaseでデフォルト・エディションを変更した場合、どの程度の時間で変更が反映されるか確認してみました。

確認に使用したSQLは以下です。

select 
  o.object_name edition_name,
  s.sid,
  s.username,
  s.logon_time
from v$session s join dba_objects o
  on s.session_edition_id = o.object_id
order by s.logon_time;

SQL Developer WebにユーザーADMINでサインインして作業しました。

Oracle APEXでアプリケーション・ビルダーを開き、SQLコマンドから以下のSQLを実行できるようにしておきます。

select sys_context('USERENV', 'SESSION_EDITION_NAME') from dual;

デフォルト・エディションをED02へ変更します。SQL Developer Webで以下のALER文を実行します。

alter database default edition = ed02;

以下のような結果になりました。

新しく生成された接続には、設定されたデフォルト・エディションが適用されますが、以前のセッションも残っています。

APEX側でのSQLコマンドの実行結果を見ても、コネクション・プールから取得される接続に依存して、結果がORA$BASEだったりED02だったりします。

これでは開発できません。APEXのSQLコマンドで以下のPL/SQLスクリプトを実行します。

begin
   dbms_session.set_edition_deferred('ED02');
end;

何度か繰り返すことで以前からの接続についても、セッション・エディションをED02に変更することができました。

Oracle APEXのアプリケーションに関してはセッション・エディションの変更の影響は受けないため、上記の対応を行うことによりページ・デザイナが参照するエディションを指定することができます。