| Oracle Real Application Clustersインストレーション・ガイド 11gリリース1(11.1)for Linux and UNIX Systems E05832-04 |
|
![]() 戻る |
![]() 次へ |
ここでは、Oracle Real Application Clusters(Oracle RAC)ソフトウェアのインストールが終了した後、Oracle Application Expressの構成で実行する必要がある作業について説明します。
この章の内容は次のとおりです。
以前インストールしたOracle Application Expressが存在する場合、Oracle RACのインストールが完了した後で、リスナーなど、インストールを開始する前に停止したOracle Application Expressプロセスを再起動する必要があります。また、Oracle HTTP Serverを再起動します。
Oracle Application Express 3.0をすでに実行している場合、次のURLにあるOracle Technology Network(OTN)の「Oracle Application Express」ページで、Oracle Application Expressのパッチ・セットのリリースまたは新しいバージョンについての情報を確認してください。
http://www.oracle.com/technology/products/database/application_express/index.html
Oracle Database 11gにアップグレードしても、Application Express 3.0インスタンスにパッチが適用されてApplication Express 3.0.1にアップグレードされるわけではありません。
Oracle Application Expressは、埋込みPL/SQLゲートウェイにアクセスするか、またはOracle HTTP Serverとmod_plsqlにアクセスする必要があります。次に示す情報を参照して、HTTPサーバーを選択してください。
この項の内容は次のとおりです。
Oracle HTTP Serverを使用すると、1つのHTTPサーバーがすべてのノードにアクセスできるように、サービス名形式で接続を指定できます。そのため、modplsqlとともにOracle HTTP Serverを使用することをお薦めします。この項では、このHTTPサーバーを構成する方法について説明します。
Oracle RACインストールでは、埋込みPL/SQLゲートウェイ・オプションを選択しないことをお薦めします。埋込みPL/SQLゲートウェイでは、データベース・インスタンスに組み込まれたHTTPサーバーが使用されるため、Oracle RACの共有アーキテクチャが利用されません。
HTTPサーバーとしてRACで埋込みPL/SQLゲートウェイを使用するには、各ノードで埋込みPL/SQLゲートウェイを構成したうえで、Oracle Application Expressのユーザーが、アクセスするノードをURLで指定する必要があります。ノードに障害があると、埋込みPL/SQLゲートウェイにも障害が発生し、サービスは動作可能なノードにフェイルオーバーされません。
Oracle HTTP Serverでは、mod_plsqlプラグインを使用して、Oracle Database内のOracle Application Expressエンジンと通信が行われます。mod_plsqlは、Oracle Database内でWebサーバーとOracle Application Expressオブジェクトとの間の通信ブローカとして機能します。具体的には、mod_plsqlは、SQL*Net接続を介して、ブラウザの要求をデータベースのストアド・プロシージャ・コールにマップします。
この構成は、Webブラウザ、Oracle HTTP Server(ohs)とmod_plsql、およびOracle Application Expressが含まれるOracle Databaseという3層アーキテクチャからなります。
新しいインストールをロードしているか、以前のリリースからアップグレードしているかにかかわらず、$ORACLE_HOME/apexディレクトリの最上位から、ファイル・システム上でOracle HTTP ServerのOracleホームが含まれる場所に、imagesディレクトリをコピーする必要があります。
この項の内容は次のとおりです。
アップグレード中は、既存のimagesディレクトリを上書きする必要があります。アップグレードを開始する前に、以前のバージョンに戻せるように、イメージのリリース番号(images_2_0など)を指定してOracle Application Expressの既存のimagesディレクトリのコピーを作成しておくことをお薦めします。
ファイル・システムのimagesディレクトリのパスを調べるには、既存のリリースに応じて、次のいずれかのファイル内でテキストalias /i/を確認します。
Oracle9i HTTP Serverリリース2: httpd.confファイルを確認します。
Oracle HTTP Server 11g: dads.confファイルを確認します。
Oracle Application Server 10g: marvel.confファイルを確認します。
imagesディレクトリのパスを確認したら、既存のimagesディレクトリをバックアップ場所にコピーすることをお薦めします。これによって、必要に応じて以前のリリースに戻すことができるようになります。
既存のimagesディレクトリをコピーしたら、次のコマンド構文を使用して、Oracle Database 11gホームから既存のimagesディレクトリ・パスへapex\imagesディレクトリをコピーし、既存のイメージを上書きします。
既存のOracle Application Server 10g:
cp -rf ORACLE_BASE/ORACLE_HOME/apex/images\ ORACLE_BASE/ORACLE_HTTPSERVER_HOME/Apache
既存のOracle HTTP Server 11g:
cp -rf ORACLE_BASE/ORACLE_HOME/apex/images\ ORACLE_BASE/ORACLE_HTTPSERVER_HOME/ohs
前述の構文例の意味は次のとおりです。
ORACLE_BASEは、Oracleホーム・ディレクトリがインストールされるOracleソフトウェアのベース・ディレクトリです(u01/app/oracleなど)。
ORACLE_HTTPSERVER_HOMEは、既存のOracle Application ServerまたはOracle HTTP ServerのOracleホームです。
ORACLE_HOMEは、Oracle Database 11gのOracleホームです。
次に例を示します。
cp -rf u01/app/oracle/10_2/db_1/apex/images \ u01/app/oracle/OAS_11_0/ohs
インストールの実行後、次のようなコマンドを使用して、ディレクトリapex/imagesをコピーします。
cp -rf ORACLE_BASE/ORACLE_HOME/apex/images\ ORACLE_BASE/ORACLE_HTTPSERVER_HOME/ohs
この項では、新しいインストールで様々なバージョンのOracle HTTP Serverとmod_plsqlを構成する方法について説明します。
内容は次のとおりです。
HTTP要求でパスワードなどの機密データがクリア・テキストで送信されないように、Secure Sockets Layer(SSL)を構成して使用することをお薦めします。SSLを使用しないと、パスワードが公開されて、Application Expressインスタンスのセキュリティが損なわれる可能性があります。
SSLは、認証、暗号化およびデータの整合性を提供するために、RSA公開鍵による暗号化と対称鍵による暗号化を組み合せて使用する業界標準のプロトコルです。
Oracle HTTP Serverリリース9.0.3では、ファイルwdbsvr.appに、Oracle Application Expressにアクセスするためのデータベース・アクセス記述子(DAD)についての情報が含まれています。DADは、Oracle HTTP ServerコンポーネントmodplsqlがHTTP要求を処理するためにデータベース・サーバーに接続する方法を指定する値の集合です。
ADMINアカウントのパスワードを変更するには、次の手順を実行します。
作業ディレクトリを$ORACLE_HOME/apexに変更します。
SQL*Plusを起動して、Oracle Application ExpressがインストールされているデータベースにSYSユーザーで接続します。次に例を示します。
$ sqlplus sys/SYS_password as sysdba
次のコマンドの後に新しいパスワードを続けて入力します。
@apxxepwd.sql password
たとえば、パスワードをapex1234に変更するには、次のコマンドを入力します。
@apxxepwd.sql password apex1234
DADファイルにパスワードを指定してデータベース・ユーザーAPEX_PUBLIC_USERのパスワードを変更するには、次の手順を実行します。
SQL*Plusを起動して、Oracle Application ExpressがインストールされているデータベースにSYSユーザーで接続します。次に例を示します。
$ sqlplus sys/SYS_password as sysdba
次のSQL文を入力します。PASSWORDは新しいパスワードです。
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY PASSWORD
DADを作成するには、ファイルwdbsvr.appを変更して、Oracle Application Expressのエントリを追加します。
wdbsvr.appファイルを変更するには、次の手順を実行します。
テキスト・エディタを使用して、パスORACLE_BASE/ORACLE_HTTPSERVER_HOME/modplsql/cfg/のファイルwdbsvr.appを開きます。
次の構文を使用して、Oracle Application Expressのエントリを追加します。イタリック体で示す設定のみを変更します。
[DAD_htmldb] connect_string = localhost:1521:orcl password = apex username = apex_public_user default_page = apex document_table = wwv_flow_file_objects$ document_path = docs document_proc = wwv_flow_file_mgr.process_download reuse = Yes enablesso = No stateful = STATELESS_RESET nls_lang = American_America.AL32UTF8
各要素の意味は次のとおりです。
connect_stringは、ホストID、ポート番号、およびOracle Application ExpressがインストールされたOracle9iデータベースを表します。host:port:sidという形式を使用します。
Oracle9iバージョンのOracle HTTP Serverを使用し、これがOracle Application Expressで使用するように指定したデータベースと同じOracleホームにインストールされている場合、このパラメータは空白のままにします。
passwordは、「APEX_PUBLIC_USERデータベース・ユーザーのパスワードの変更」で指定したOracle Application ExpressのADMINアカウントのパスワードです。
nls_langは、DADの言語設定を決定します。nls_lang値のキャラクタ・セット部分は、データベース・キャラクタ・セットがAL32UTF8であるかどうかにかかわらず、常にAL32UTF8に設定する必要があります。
NLS設定の地域または言語のいずれかの部分に空白が含まれる場合、次の例に示すとおり、値を二重引用符で囲む必要があります。
nls_lang = "ENGLISH_UNITED KINGDOM.AL32UTF8"
次の例に示すとおり、ビューNLS_DATABASE_PARAMETERSを問い合せることで、データベースのNLS設定に関する情報を参照できます。
SELECT parameter,value FROM nls_database_parameters WHERE PARAMETER = 'NLS_CHARACTERSET';
ユーザー名の設定など、他の設定は、前述の例に示す値のままにします。
wdbsvr.appファイルを保存して閉じます。
httpd.confファイルを変更して、images ディレクトリをコピーしたファイル・システム・パスを指すエイリアスをファイルに含める必要があります。また、SQL Workshopをサポートするために、httpd.confファイルを変更して、2つの新しいMIMEタイプを追加する必要がある場合があります。
httpd.confファイルを変更するには、次の手順を実行します。
テキスト・エディタを使用して、次のファイルを開きます。
ORACLE_BASE/Apache/Apache/conf/httpd.conf
imagesディレクトリをコピーしたファイル・システム・パスを指すエイリアスのエントリを追加します。次に例を示します。
alias /i/ "/home/oracle/OraHome1/Apache/Apache/images/"
次の行がhttpd.confファイルに存在しない場合は、追加します。
AddType text/xml xbl AddType text/x-component htc
Oracle HTML DB 2.0からアップグレードしている場合、これらのMIMEタイプはファイル内ですでに定義済です。
httpd.confファイルを保存して閉じます。
変更したDAD設定を使用してOracle HTTP Serverを再起動します。
Oracle HTTP Serverを停止して再起動するには、次の構文を使用してコマンドを入力します。ORACLE_BASEはOracleベース・ディレクトリのパスです。
ORACLE_BASE/Apache/Apache/bin/apachectl stop ORACLE_BASE/Apache/Apache/bin/apachectl start
|
注意: Oracle HTTP Serverがポート1024以下でリスニングするように設定されている場合、rootなど、権限を付与されたユーザーで停止および起動コマンドを実行する必要があります。 |
|
参照: 『Oracle HTTP Server管理者ガイド』 |
Oracle Application Expressは、Oracle HTTP Serverとmod_plsqlにアクセス可能である必要があります。 次のいずれかの条件に該当する場合は、この項に示すインストール後の手順を実行します。
Oracle HTTP Server 11gまたはOracle Application Server 10gを実行している。
Oracle HTTP ServerがOracleホームにインストールされている。
Oracle Application Expressと動作するようにOracle HTTP Serverを構成していない。
Oracle HTTP Serverリリース9.0.3を実行している場合、この項の指示は適用されません。Oracle HTTP Serverリリース9.0.3の構成の詳細は、「新しいインストールでのOracle HTTP Serverの構成」を参照してください。
この項の指示が適用される場合は、次の手順を実行します。
|
注意: この項の説明では、Apacheホーム・ディレクトリ(ORACLE_HTTPSERVER_HOME)は、Oracle HTTP Serverがインストールされている場所です。 |
Oracle Application ExpressのADMINアカウントのパスワードを変更する必要があります。
ADMINアカウントのパスワードを変更するには、次の手順を実行します。
作業ディレクトリを$ORACLE_HOME/apexに変更します。
SQL*Plusを起動して、Oracle Application ExpressがインストールされているデータベースにSYSユーザーで接続します。次に例を示します。
$ sqlplus sys/SYS_password as sysdba
次の構文を使用して、新しいパスワードを入力します。
> @apxxepwd.sql password
たとえば、パスワードをapex1234に変更するには、次のコマンドを入力します。
> @apxxepwd.sql apex1234
新しいインストールにOracle Application ExpressのOracle HTTP Serverを構成する際は、データベース・ユーザーAPEX_PUBLIC_USERアカウントをロック解除しておく必要があります。データベース・ユーザーAPEX_PUBLIC_USERのアカウントをロック解除するするには、次の手順を実行します。
SQL*Plusを起動して、Oracle Application ExpressがインストールされているデータベースにSYSユーザーで接続します。次に例を示します。
$ $ORACLE_HOME/bin/sqlplus
SQL> CONNECT SYS as SYSDBA
Enter password: SYS_password
次のコマンドを実行します。
SQL> ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK
DADファイルにパスワードを指定してデータベース・ユーザーAPEX_PUBLIC_USERのパスワードを変更するには、次の手順を実行します。
SQL*Plusを起動して、Oracle Application ExpressがインストールされているデータベースにSYSユーザーで接続します。次に例を示します。
$ sqlplus sys/SYS_password as sysdba
次のSQL文を入力します。PASSWORDは新しいパスワードです。
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY PASSWORD
Oracle Application Expressを新しくインストールする場合、dads.confファイルを編集する必要があります。
dads.confファイルを編集するには、次の手順を実行します。
テキスト・エディタを使用して、ご使用のリリースのdads.confファイルを開きます。
Oracle Application Server 10g:
ORACLE_HTTPSERVER_HOME/Apache/modplsql/conf/dads.conf
次に例を示します。
$ vi /u01/product/oas/Apache/modplsql/conf/dads.conf
Oracle HTTP Server 11g:
ORACLE_HTTPSERVER_HOME/ohs/modplsql/conf/dads.conf
次に例を示します。
$ vi /u01/product/oas/ohs/modplsql/conf/dads.conf
次のコード・テキストをdads.confファイルにコピーします。
テキスト内の変数$ORACLE_HOME、host、port、service_nameおよびapex_public_user_passwordには、ご使用のシステムに応じた適切な値を指定します。apex_public_user_passwordは、「APEX_PUBLIC_USERデータベース・ユーザーのパスワードの変更」で定義したパスワードです。
Alias /i/ "ORACLE_BASE/ORACLE_HTTPSERVER_HOME/ohs/images" AddType text/xml xbl AddType text/x-component htc <Location /pls/apex> Order deny,allow PlsqlDocumentPath docs AllowOverride None PlsqlDocumentProcedure wwv_flow_file_mgr.process_download PlsqlDatabaseConnectString host:port:service_name ServiceNameFormat PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8 PlsqlAuthenticationMode Basic SetHandler pls_handler PlsqlDocumentTablename wwv_flow_file_objects$ PlsqlDatabaseUsername APEX_PUBLIC_USER PlsqlDefaultPage apex PlsqlDatabasePassword apex_public_user_password Allow from all </Location>
PlsqlNLSLanguageが含まれる行を確認します。
PlsqlNLSLanguage設定は、DADの言語設定を決定します。PlsqlNLSLanguage値のキャラクタ・セット部分は、データベース・キャラクタ・セットがAL32UTF8であるかどうかにかかわらず、AL32UTF8に設定する必要があります。次に例を示します。
PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8
dads.confファイルを保存して閉じます。
Oracle HTTP Serverを停止して再起動するには、次のコマンドを実行します。
ORACLE_HTTPSERVER_HOME/opmn/bin/opmnctl stopproc ias-component=HTTP_Server ORACLE_HTTPSERVER_HOME/opmn/bin/opmnctl startproc ias-component=HTTP_Server
Oracle Application Expressインタフェースは、ドイツ語、スペイン語、フランス語、イタリア語、日本語、韓国語、ポルトガル語(ブラジル)、簡体字中国語および繁体字中国語に翻訳されています。1つのOracle Application Expressインスタンスを、1つ以上の翻訳バージョンとともにインストールできます。実行時、各ユーザーのWebブラウザの言語設定によって、特定の言語バージョンが決定されます。
Oracle Application Expressの翻訳バージョンは、その特定の言語をサポートできるキャラクタ・セットが存在するデータベースにロードする必要があります。Oracle Application Expressの翻訳バージョンを、その言語の文字コードがサポートされていないデータベースにインストールしようとすると、インストールが失敗するか、または翻訳されたOracle Application Expressインスタンスを実行したときに適切に表示されない場合があります。データベース・キャラクタ・セットAL32UTF8は、Oracle Application Expressのすべての翻訳バージョンをサポートしています。
SQL*Plusを使用して、Oracle Application Expressの翻訳バージョンを手動でインストールできます。インストール・ファイルは、AL32UTF8でエンコードされています。
|
注意: ターゲット・データベースのキャラクタ・セットに関係なく、Oracle Application Expressの翻訳バージョンをインストールするには、SQL*Plusの起動前に環境変数NLS_LANGのキャラクタ・セット値をAL32UTF8に設定する必要があります。 |
次に、Oracle Application Expressの翻訳バージョンをロードするための有効なNLS_LANG設定の例を示します。
American_America.AL32UTF8 Japanese_Japan.AL32UTF8
はじめてインストールする場合も、以前のリリースからアップグレードする場合も、Oracle Application Expressの翻訳バージョンを実行するには、スクリプトload_lang.sqlを実行する必要があります。
Oracle Application Expressの翻訳バージョンをインストールするには、次の手順を実行します。
キャラクタ・セットがAL32UTF8に設定されるように、環境変数NLS_LANGを設定します。次に例を示します。
BourneまたはKornシェル
$ NLS_LANG=American_America.AL32UTF8$ export NLS_LANG
Cシェル
% setenv NLS_LANG American_America.AL32UTF8
SQL*Plusを起動して、ターゲット・データベースにSYSユーザーで接続します。
次の文を実行します。
> ALTER SESSION SET CURRENT_SCHEMA = FLOWS_03000;
言語固有の適切なスクリプトを実行します。次に例を示します。
> @load_de.sql
インストール・スクリプトは、解凍されたディストリビューション$ORACLE_HOME/apex/builderの言語コードによって識別されるサブディレクトリに格納されています。たとえば、ドイツ語バージョンは$ORACLE_HOME/apex/builder/de、日本語バージョンは$ORACLE_HOME/apex/builder/jaに格納されています。これらの各ディレクトリには、言語コードによって識別される言語ロード・スクリプトが含まれています(load_de.sqlやload_ja.sqlなど)。
JOB_QUEUE_PROCESSESは、同時実行ジョブの最大数を決定します。Oracle Application Expressリリース3.0では、トランザクション・サポートおよびSQLスクリプトでジョブが必要です。JOB_QUEUE_PROCESSESが有効化されて適切に機能していないと、スクリプトを正常に実行できません。
この項の内容は次のとおりです。
次のいずれかの方法を使用してJOB_QUEUE_PROCESSESの数を参照できます。
Oracle Application Expressリリース3.0をインストールするか、またはOracle Application Expressリリース3.0にアップグレードした後、インストール・ログ・ファイルでJOB_QUEUE_PROCESSESの数を参照できます。
「Application Expressのバージョン情報」ページでJOB_QUEUE_PROCESSESの数を参照できます。「Application Expressのバージョン情報」ページを表示するには、次の手順を実行します。
Oracle Application Expressにログインします。
「管理」リストで、「Application Expressのバージョン情報」をクリックします。
ページ下部にJOB_QUEUE_PROCESSESの現在の数が表示されます。
SQL*Plusで次のSQL文を実行すると、JOB_QUEUE_PROCESSESの数を参照できます。
> SELECT VALUE FROM v$parameter WHERE NAME = 'job_queue_processes'
SQL*PlusでSQL文を実行すると、JOB_QUEUE_PROCESSESの数を変更できます。次の手順を実行します。
SQL*Plusを使用して、SYSDBAでデータベースにログインします。
SQL*Plusで次のSQL文を実行します。ここで、変数numberは、設定するプロセス数を表します。
> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = number
たとえば、ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 20という文を実行すると、JOB_QUEUE_PROCESSESは20に設定されます。
パラメータPlsqlDatabasePasswordは、データベースにログインするためのパスワードを指定します。ユーティリティdadTool.plを使用すると、dads.confファイルのパスワードを不明瞭化できます。
dadTool.plユーティリティは、次のディレクトリに格納されています。
ORACLE_HTTPSERVER_HOME/ohs/modplsql/conf
Oracle Application ExpressのホームページにはWebブラウザでアクセスできます。Oracle Application Expressアプリケーションを参照または開発するには、WebブラウザでJavaScript、HTML 4.0規格およびCSS 1.0規格がサポートされている必要があります。
この項の内容は次のとおりです。
Oracle Application Express開発環境では、ユーザーは、作業領域という共有作業場所にログインします。ユーザーは、4つの主なロールに分類されます。
作業領域管理者: ユーザー・アカウントの管理、作業領域のアクティビティの監視、ログ・ファイルの参照など、作業領域固有の管理者作業を実行するユーザーです。
開発者: アプリケーションを作成および編集するユーザーです。開発者は、自分の作業領域を持つか、作業領域を共有できます。
エンド・ユーザー: 開発権限を持っていないユーザーです。エンド・ユーザーとして定義されたユーザーは、外部認証スキームを使用しないアプリケーションにアクセスできます。
Oracle Application Express管理者: Application Express管理サービス・アプリケーションを使用して、ホストされたインスタンス全体を管理するスーパーユーザーです。
Oracle Application Expressの設定方法は、ユーザー・ロールに応じて異なります。ホストされた開発環境にアクセスしている開発者である場合、作業領域に対するアクセス権を管理者から付与される必要があります。Oracle Application Express管理者である場合、次の手順を実行する必要があります。
Oracle Application Express管理サービスにログインします。Oracle Application Express管理サービスは、Oracle Application Expressインスタンス全体を管理するための個別のアプリケーションです。インストール・プロセスで作成またはリセットしたADMINアカウントおよびパスワードを使用してログインします。
プロビジョニング・モードを指定します。Oracle Application Express管理サービスで、開発環境において作業領域の作成(プロビジョニング)を行う方法を決定する必要があります。
作業領域を作成します。作業領域とは、複数のユーザーが、自身のオブジェクト、データおよびアプリケーションを自分専用にしたまま、同じOracle Application Expressインストールで作業を行うことができる仮想プライベート・データベースです。各作業領域は、一意のIDおよび名前を持ちます。Oracle Application Express管理者は、作業領域を手動で作成するか、ユーザーに要求を発行させることができます。
作業領域にログインします。Oracle Application Express管理サービスで作業領域を作成したら、Oracle Application Expressの「ログイン」ページに戻り、作成した作業領域にログインします。
|
参照: 『Oracle Database 2日でApplication Express開発者ガイド』または『Oracle Database Application Expressユーザーズ・ガイド』のクイック・スタートに関する項を参照してください。 |
Oracle Database 11gリリース1(11.1)では、ネットワーク・サービスと交信する機能はデフォルトで無効になっています。Oracle Database 11gリリース1(11.1)でOracle Application Expressを使用するには、新しいDBMS_NETWORK_ACL_ADMINパッケージを使用して、FLOWS_03000データベース・ユーザーのホストに接続権限を付与する必要があります。この権限を付与しないと、次の操作で問題が発生します。
Oracle Application Expressでのアウトバウンド・メールの送信
ユーザーは、APEX_MAILパッケージからメソッドをコールできますが、アウトバウンド電子メールを送信する際に問題が発生します。
Oracle Application ExpressのWebサービスの使用
PDFまたはレポートの印刷
オンライン・ヘルプでのコンテンツの検索(「検索」リンクの使用)
次の例では、FLOWS_03000データベース・ユーザーのホストに接続権限を付与する方法を示します。
|
注意: 次の例を実行するには、データベースのCOMPATIBLE初期化パラメータを11.1.0.0.0以上に設定しておく必要があります。このパラメータは、Oracle 11g Databaseでは、あらかじめデフォルトで設定されています。ただし、以前のバージョンからOracle 11g Databaseにアップグレードしている場合は、このパラメータを設定する必要があります。 |
|
参照: COMPATIBLE初期化パラメータの変更については、『Oracle Database管理者ガイド』のOracle Databaseの作成および構成に関する項を参照してください。 |
SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
-- Before checking the privilege, make sure that the ACL is valid
-- (for example, does not contain stale references to dropped users).
-- If it does, the following exception will be raised:
--
-- ORA-44416: Invalid ACL: Unresolved principal 'FLOWS_03000'
-- ORA-06512: at "XDB.DBMS_XDBZ", line ...
--
SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
FROM XDB.XDB$ACL A, PATH_VIEW P
WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND
EQUALS_PATH(P.RES, ACL_PATH) = 1;
DBMS_XDBZ.ValidateACL(ACL_ID);
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'FLOWS_03000',
'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
'FLOWS_03000', TRUE, 'connect');
END IF;
EXCEPTION
-- When no ACL has been assigned to '*'.
WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
'ACL that lets power users to connect to everywhere',
'FLOWS_03000', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;
エラー「ORA-44416: 無効なACL」を受け取った場合、次の問合せを使用して、無効なアクセス制御リスト(ACL)を特定します。
REM Show the dangling references to dropped users in the ACL that is assigned
REM to '*'.
SELECT ACL, PRINCIPAL
FROM DBA_NETWORK_ACLS NACL, XDS_ACE ACE
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL AND
NACL.ACLID = ACE.ACLID AND
NOT EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);
無効なACLを特定したら、次のスクリプトを実行してACLを修正します。
DECLARE
ACL_ID RAW(16);
CNT NUMBER;
BEGIN
-- Look for the object ID of the ACL currently assigned to '*'
SELECT ACLID INTO ACL_ID FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
-- If just some users referenced in the ACL are invalid, remove just those
-- users in the ACL. Otherwise, drop the ACL completely.
SELECT COUNT(PRINCIPAL) INTO CNT FROM XDS_ACE
WHERE ACLID = ACL_ID AND
EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);
IF (CNT > 0) THEN
FOR R IN (SELECT PRINCIPAL FROM XDS_ACE
WHERE ACLID = ACL_ID AND
NOT EXISTS (SELECT NULL FROM ALL_USERS
WHERE USERNAME = PRINCIPAL)) LOOP
UPDATE XDB.XDB$ACL
SET OBJECT_VALUE =
DELETEXML(OBJECT_VALUE,
'/ACL/ACE[PRINCIPAL="'||R.PRINCIPAL||'"]')
WHERE OBJECT_ID = ACL_ID;
END LOOP;
ELSE
DELETE FROM XDB.XDB$ACL WHERE OBJECT_ID = ACL_ID;
END IF;
END;
/
REM commit the changes.
COMMIT;
ACLが修正されたら、この項の最初のスクリプトを実行して、ACLをFLOWS_03000ユーザーに適用します。「接続権限の付与」を参照してください。