2025年6月13日金曜日

Oracle REST Data ServicesのBatch Loadを呼び出し表にCSVをアップロードする

Oracle REST Data Servicesで表のAutoRESTを有効にすると、Batch LoadというCSVファイルをアップロードする機能が使えます。

Oracle REST Data Services Developer's Guide Release 25.1

公式のドキュメント以外では、以下のブログ記事でBatch Loadが紹介されています。

Move Large Volumes of Data Over REST with APEX & ORDS

Bulk Load an Oracle Table from CSV via REST
Batch Loading CSV to Oracle Database, Again, via REST APIs
Batch Loadは手元のCSVファイルの内容を、AutoRESTを有効にしたデータベースの表にアップロードする機能です。SQLclのLOADコマンドやその他の方法と比較して特別に速いというわけではありませんが、curlコマンドが実行できればデータのロードができるという手軽さがあります。

以下より、Batch Loadを実際に試してみます。

APEXの対話モード・レポートからダウンロードしたCSVファイルを、AutoRESTを有効にした表にアップロードしてみます。

対話モード・レポートのページを持つAPEXアプリケーションを作成します。

アプリケーション・ビルダーよりアプリケーションの作成を開始します。

名前Car Accidentsとして、ファイルからのアプリケーションの作成をクリックします。


コピー・アンド・ペーストを選択し、サンプルのCSVデータとして車両速度を選択します。Posted Speed, Vehical Speed, Date of Incedent, License Plate, Location, Stateといったデータが貼り付けられます。Vehical、Incedentはスペルが間違っていますが、列名は後で日本語にするので、そのまま作業します。

へ進みます。


データをロードする表名CAR_ACCIDENTSとします。

データのロードをクリックします。


610行のデータが表CAR_ACCIDENTSに保存されます。

アプリケーションの作成をクリックします。


アプリケーション作成ウィザードが起動します。

今回はCar Accidentsレポートの対話モード・レポートのページだけを使用します。その他のページは削除します。


ページをCar Accidentsレポートだけにして、アプリケーションの作成をクリックします。


アプリケーションCar Accidentsが作成されます。

ダウンロードされるCSVファイルの文字エンコーディングを設定します。

アプリケーション定義を開きます。


グローバリゼーションを開きます。

アプリケーションのプライマリ言語日本語(ja)の場合、自動CSVエンコーディングオンにするとダウンロードするCSVファイルの文字エンコーディングはShift-JISになります。オフの場合はUTF-8です。

今回はORDSにアップロードします。CSVファイルの文字エンコーディングはUTF-8が都合が良いため、自動CSVエンコーディングオフにして変更を適用します。


CSVファイルをダウンロードするのに使用する対話モード・レポートのページを編集します。


ダウンロードするCSVファイルの名前を設定します。

リージョンCar Accidents属性タブを開き、ダウンロードファイル名に以下を設定します。

car_accidents-&SYSDATE_YYYYMMDD.

この設定により、対話モード・レポートからダウンロードしたCSVファイルのファイル名はcar_accidents-20250613.csvのようになります。

ファイル名が設定されていないと、リージョンの識別名前がファイル名として使用されます。今回の例ではCar Accidents.csvとなります。ファイル名に空白が含まれることになり、扱いにくくなります。


対話モード・レポートのヘッダーが、ダウンロードされるCSVファイルの列名になります。

POSTED_SPEEDヘッダー制限速度とします。


同様に列VEHICAL_SPEED車両速度、列DATE_OF_INCEDENT事故発生日、列LICENSE_PLATEナンバープレート、列LOCATION場所、列STATEとします。

以上を設定してアプリケーションを実行します。

対話モード・レポートのヘッダーは、以下のように日本語で表示されます。


ページ・デザイナに戻り、列IDタイププレーン・テキストに変更します。

タイプ非表示の場合、ダウンロードするCSVファイルに列として含めることができなくなります。


対話モード・レポートの作成後に表示可能にした列は、最初はレポート上で非表示になります。

ダウンロードの対象にするには、列を表示する必要があります。

アクションを開きます。


表示しないにあるIDレポートに表示に移動し、適用をクリックします。


レポート上にID、制限速度、車両速度、事故発生日、ナンバープレート、場所、州が表示されます。


対話モード・レポートに一覧されているデータを、CSVファイルにダウンロードします。

アクションダウンロードを開きます。


レポート形式としてCSVを選択し、ダウンロードをクリックします。


結果として以下の内容を含むファイルが、car_accidents-20250613.csvのような日付付きのファイル名でダウンロードされます。

ID,制限速度,車両速度,事故発生日,ナンバープレート,場所,州

473,25,23,2025/05/30,6EFE807,School Road,VA

483,25,27,2025/05/14,E80455B2,School Road,VA

488,25,21,2025/05/31,EFE80456,School Road,VA

494,25,43,2025/05/18,E804564,School Road,VA

497,25,20,2025/05/13,EFE80455,School Road,VA

506,25,33,2025/05/16,E063A15D6,School Road,VA

522,25,22,2025/05/13,2EDF6E2,School Road,DC


[略]


このCSVファイルのアップロード先となる表を作成します。

表の名前はCAR_ACCIDENTS_JAとします。以下のDDLを実行します。

主キー列のIDはデータのインサート時に値を設定できるようにby default on nullを付けます。列名はCSVのヘッダーに一致するように日本語にします。
create table car_accidents_ja
(
    "ID"             number generated by default on null as identity not null,
    "制限速度"        number,
    "車両速度"        number,
    "事故発生日"      date,
    "ナンバープレート" varchar2(50),
    "場所"           varchar2(50),
    "州"             varchar2(50),
    primary key ("ID") using index enable
);


作成した表CAR_ACCIDENTS_JAのAutoRESTを有効にします。

プロシージャORDS.ENABLE_OBJECTを実行します。
begin
    ords.enable_object(
        p_enabled => true
        ,p_schema => '表CAR_ACCIDENTS_JAがあるスキーマ'
        ,p_object => 'CAR_ACCIDENTS_JA'
        ,p_object_type => 'TABLE'
        ,p_object_alias => 'car_accidents_ja'
        ,p_auto_rest_auth => false
    );
end;
今回は検証ということで、p_auto_rest_authfalseとしています。実際はtrueを設定し、必ずAutoRESTの呼び出しを保護します。


表CAR_ACCIDENTS_JAのAutoRESTに関する設定を確認します。

select * from user_ords_objects where parsing_object = 'CAR_ACCIDENTS_JA'


ダウロードしたCSVファイルを、Batch Loadを呼び出して表CAR_ACCIDENTS_JAにアップロードします。

Batch Loadのエンドポイントは以下の形式になります。

https://[ホスト名]/ords/[ワークスペース名]/[オブジェクト別名]/batchload

このエンドポイントはSQL Developer Webを開いて確認することができます。


SQLワークシートナビゲータより対象の表でコンテキスト・メニューを開き、RESTからcURLコマンド...を実行します。


AutoRESTとして呼び出せる操作と、それに対応したcURLコマンドの例が表示されます。


以下のcurlコマンドを実行します。オプションとしてbatchRows=100およびdateFormat=YYYY/MM/DDを与えています。Batch Loadのオプションについては、ドキュメントを参照してください。

curl -H"Content-Type: text/csv" --data-binary @[CSVファイル名] 'https://[ホスト名]/ords/[ワークスペース名]/car_accidents_ja/batchload?batchRows=100&dateFormat=YYYY/MM/DD'

% curl -H"Content-Type: text/csv" --data-binary @car_accidents-20250613.csv 'https://*********-apexdev.adb.us-ashburn-1.oraclecloudapps.com/ords/apexdev/car_accidents_ja/batchload?batchRows=100&dateFormat=YYYY/MM/DD'

#INFO Number of rows processed: 610

#INFO Number of rows in error: 0

#INFO Last row processed in final committed batch: 610

SUCCESS: Processed without errors

% 


表CAR_ACCIDENTSに保存されている行数が610なので、#INFO Number of rows processed: 610と返されれば、すべての行がアップロードできています。

確認のためアップロードしたデータをダウンロードします。AutoRESTのGET ALLを呼び出し、JSON形式でファイルに保存します。ページングをせずに全行を取得するためlimit=1000を指定します。

curl -o car_accidents.json 'https://[ホスト名]/ords/[ワークスペース名]/car_accidents_ja/limit=1000'

% curl -o car_accidents.json 'https://**********-apexdev.adb.us-ashburn-1.oraclecloudapps.com/ords/apexdev/car_accidents_ja/?limit=1000'                     

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  176k    0  176k    0     0   142k      0 --:--:--  0:00:01 --:--:--  142k

% 


ダウンロードしたJSONをjqコマンドでCSV形式に変換します。

jq -r ' .items[] | [ .id, ."制限速度", ."車両速度", ."事故発生日", ."ナンバープレート", ."場所", ."州" ] | @csv ' car_accidents.json > result.csv

% jq -r ' .items[] | [ .id, ."制限速度", ."車両速度", ."事故発生日", ."ナンバープレート", ."場所", ."州" ] | @csv ' car_accidents.json > result.csv

% 


生成したCSVファイルresult.csvの内容を確認します。行数は610になります。

wc -l result.csv
head -10 result.csv

% wc -l result.csv

     610 result.csv

% head -10 result.csv 

160,55,48,"2025-05-30T00:00:00Z","EDF6E06","Highway 5","VA"

162,55,52,"2025-05-28T00:00:00Z","FE80443","Highway 5","VA"

166,55,55,"2025-05-13T00:00:00Z","EDF6E0631","Highway 5","VA"

169,55,63,"2025-06-06T00:00:00Z","76EFE8045","Highway 5","VA"

170,55,53,"2025-05-18T00:00:00Z","4422ED8","Highway 5","VA"

171,55,51,"2025-06-03T00:00:00Z","063A15D7","Highway 5","VA"

172,55,50,"2025-06-07T00:00:00Z","24EDF6E8","Highway 5","VA"

174,55,59,"2025-05-30T00:00:00Z","E804424","Highway 5","VA"

175,55,48,"2025-06-08T00:00:00Z","6EFE80446","Highway 5","VA"

177,55,57,"2025-06-09T00:00:00Z","E063A158","Highway 5","PA"

% 


AutoRESTを保護した場合、つまりORDS.ENABLE_OBJECTの実行時にp_auto_rest_authにtrueを指定した場合は、p_schemaに指定したスキーマをユーザー名、そのスキーマのパスワードをパスワードとして、REST呼び出しを認証します。
begin
    ords.enable_object(
        p_enabled => true
        ,p_schema => '表CAR_ACCIDENTS_JAがあるスキーマ'
        ,p_object => 'CAR_ACCIDENTS_JA'
        ,p_object_type => 'TABLE'
        ,p_object_alias => 'car_accidents_ja'
        ,p_auto_rest_auth => true
    );
end;
curlコマンドでは-uまたは--userオプションでユーザー名、パスワードを指定します。結果としてREST APIとして発行されるHTTPリクエストにBasic認証が設定されます。

curl -u スキーマ名:パスワード  ....

OAuth2のクライアントクリデンシャル認証でも保護できますが、その場合はcurlコマンドで簡単にBatch Loadを呼び出すということは難しくなります。そのため、実際にはBatch LoadでCSVファイルをアップロードする表は、それ用のスキーマを作成して最小権限で運用することになりそうです。

今回の記事は以上になります。

2025年6月12日木曜日

GeoSPARQLで問い合わせたデータをAPEXのマップに表示する

Oracle DatabaseはRDF Graphをサポートしています。また、GeoSPARQLもサポートしています。これらの機能については、Oracle Database 23aiの以下のドキュメントで説明されています。

Graph Developer's Guide for RDF Graph

先日、以下の記事にてSPARQLクエリをOracle REST Data Services APIより呼び出すアプリケーションについて紹介しています。

Oracle REST Data ServicesのRDF Graph APIを呼び出してSPARQLを実行する

今回の記事では、Matt Perryさんの以下の記事を参考にOracle DatabaseでGeoSPARQLの問合せを実行できる環境を作成し、APEXのアプケーションから実行してみます。

Exploring GeoSPARQL 1.1 Features in Oracle Database 23ai
https://medium.com/oracledevs/exploring-geosparql-1-1-features-in-oracle-database-23ai-c58085190b07

Matt Perryさんの記事ではAutonomous DatabaseにRDF Graphを作成して、主にDatabase ActionsのSQLワークショップからGeoSPARQLの問い合わせを行っています。本記事ではAutonomous DatabaseにRDF Graphを作成するところは同じですが、ネットワークやモデルの作成、データのインポートおよびSPARQLクエリの実行を、Oracle REST Data Services APIを呼び出して実行します。

作成したAPEXアプリケーションは以下のように動作します。自然言語の問合せより生成AI(OpenAI GPT-4.1)を呼び出し、GeoSPARQLのクエリを生成しています。その後、生成されたクエリを実行しています。

クエリの実行結果をAPEXアプリケーションのマップ上に表示しています。


上記のAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sparql-operations-for-geo.zip

以前の記事「Oracle REST Data ServicesのRDF Graph APIを呼び出してSPARQLを実行する」で作成したアプリケーションに、以下の2つのページを追加しています。
  • Upload - RDF GraphにN-Triplesをアップロードする画面
  • Map - 生成AIでGeoSPARQLクエリを生成し、そのクエリの検索結果をマップに表示するページ(GIF動画のページ)

以下より、APEXアプリケーションに追加した機能とAPEXアプリケーションを使用するにあたって必要な作業を紹介します。

APEXアプリケーションをインポートすると作成されるリモート・サーバーおよびWeb資格証明を更新します。

ワークスペース・ユーティリティリモート・サーバーを開くと、RDF Graph ORDS Endpointが作成されています。

これを開きます。


一般エンドポイントURLを、ORDS Data Services APIのRDF Graphを呼び出すエンドポイントに変更します。エンドポイントURLは一般に以下の形式になります。

https://[ホスト名]/ords/[ワークスペース名]/_/db-api/stable


ワークスペース・ユーティリティWeb資格証明を開きます。


最初にRDF Graph Credを開きます。

クライアントIDまたはユーザー名に、RDF Graphを作成するスキーマ名を設定します。クライアント・シークレットまたはパスワードは、そのスキーマのパスワードを設定します。


次にopenai api keyの資格証明を開きます。

資格証明シークレットにAuthorizationヘッダーに設定する値、つまりBearerに空白で区切ってOpenAIのAPIキーを繋げた値を設定します。以下の形式になります。

Bearer [OpenAIのAPIキー]


以上でAPEXアプリケーションを使用するに当たって必要な設定ができました。

ホーム・ページを開いて、RDFネットワークを作成します。

Network NameRDF_NETWORKNetwork OwnerはRDFネットワークを保存するスキーマの名前です。Tablespace NameはRDFグラフを保存する表領域の名前です。Autonomous Databaseでは、通常これはDATAになります。

以上を設定し、ボタンCreate RDF networkをクリックします。


RDF networkが作成されました。と表示されれば、RDFネットワークRDF_NETWORKが作成されています。


Model NameGEO_DATAを入力し、ボタンCreate RDF modelをクリックします。

RDF modelが作成されました。と表示されるとRDFモデルGEO_DATAがRDFネットワークRDF_NETWORKに作成されています。


RDFモデルGEO_DATAにロードするデータを手元にダウンロードします。このデータはMatt Perryさんの記事でロードしているデータと同じものを使用します。



ダウンロードしたファイル2015–11–02-SportThing.node.sorted.nt.bz2はbzip2で圧縮されているので、これを解凍します。macOSではbzip2コマンドを使用しました。

bzip2 -d 2015-11-02-SportThing.node.sorted.nt.bz2

Uploadページを開きます。Fileとして解凍したファイル2015-11-02-SportThing.node.sorted.ntを選択します。Batch Linesはデフォルトの1000から変更は不要です。

以上でUpload Fileをクリックします。


ボタンUpload Fileをクリックすると、以下のコードがプロセスとして実行されます。

APEX_APPLICATION_TEMP_FILESにアップロードされたファイルをBatch Linesで指定した行数毎にまとめて、APEXコレクションNTRIPLESのメンバーにCLOB(列としてはCLOB001)として保存します。

N001(分割数=1000行単位の数)を降順でソートすると、N001の最大値が1226、列N002(これは行数)が338なので、ファイル2015–11–02-SportThing.node.sorted.ntに1225338の行が含まれていることが確認できます。


ボタンUpload Serverをクリックすると、APEXコレクションのメンバごとにN-TriplesをINSERT DATA { } で囲んでSPARQLのINSERT文にし、ORDS RDF Graph APIのSPARQL Updateを呼び出します。

大量のREST API(データのアップロードで1226回)を発行することになります。APEXの管理サービスのインスタンスの管理セキュリティより、最大Webサービス・リクエストを十分大きい値に変更しておく必要があります。


ボタンUpload Serverをクリックし、N-Triplesのデータのアップロードを開始します。アップロード処理はバックグラウンドで実行します。


データのアップロードの経過を対話モード・レポートに表示しています。

Totalworkはすべてのデータをアップロードするために必要なREST APIの発行回数、Sofarは現在までに成功したREST APIの呼び出し回数です。SofarがTotalworkの値に達するとデータのアップロードは完了です。

ボタンRefresh Reportをクリックすると、バックグラウンド処理の状況が更新されます。


ボタンUpload Serverが実行するプロセスに、以下のコードを記述しています。APEXコレクションに分割して保存されたN-TriplesのデータをINSERT DATA { }で囲んでREST APIを呼び出しています。REST APIの呼び出しが完了するごとに、APEX_BACKGROUND_PROCESS.SET_PROGRESSを呼び出して、進捗を更新しています。


環境に依存すると思いますが、REST API経由でのデータのアップロードに2時間超の時間がかかります。

Matt Perryさんの記事ではデータ・ファイルをオブジェクト・ストレージにアップロードし、それを外部表にしてsem_apis.load_into_staging_tableを呼び出してRDFモデルにN-Triplesをロードしています。多分、速度の面では圧倒的にアドバンテージがあると思います。大量にデータをロードする場合は、sem_apis.load_into_staging_tableの利用を検討することをお勧めします。

データのアップロードが途中で中断したときは、中断した時点でのSofarの値+1Start Partに設定した上でボタンUpload Serverをクリックすると、中断した時点からアップロードが再開されます。


StatusExecuted SuccessfullyになりSofarTotalworkが同じ数値になると、データのロードは完了です。


データのアップロードが完了した後に索引を作成します。DBA権限のあるユーザーで以下のコマンドを実行します。
BEGIN
  sem_apis.add_datatype_index(
    'http://www.opengis.net/ont/geosparql#wktLiteral',
    options=>'MATERIALIZE=T TOLERANCE=0.1 SRID=4326 DIMENSIONS=((LONGITUDE,-180,180) (LATITUDE,-90,90))',
    network_owner=>'Network Ownerのスキーマ名', 
    network_name=>'RDF_NETWORK');
END;
/
Autonomous Databaseの場合、管理者ユーザーADMINにてDatabase ActionsSQLワークシートで実行します。


続けて統計情報をアップデートします。
BEGIN
    sem_perf.gather_stats(network_owner=>'Network Ownerのスキーマ名', network_name=>'RDF_NETWORK');
END;
/

以上でGeoSPARQLの問合せができるようになりました。

Mapのページを開き、GeoSPARQLの問合せを発行します。


User Promptに「ニューヨーク市のテニスができる施設を一覧してください。」と入力し、ボタンGenerateをクリックします。SPARQL QueryにOpenAI GPT-4.1が生成した以下のレスポンスが設定されます。LLMのレスポンスなので、毎回同じになるとは限りません。
以下が「ニューヨーク市のテニスができる施設」を一覧するGeoSPARQLクエリです。
(与えられた例と同様、POLYGONはニューヨーク市の領域です。変更点はFILTER中の?sportの値のみです)

```sparql
PREFIX geovocab: <http://geovocab.org/geometry#>
PREFIX lgd: <http://linkedgeodata.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX ogc: <http://www.opengis.net/ont/geosparql#>
PREFIX ogcf: <http://www.opengis.net/def/function/geosparql/>

SELECT ?s ?sport ?label ?geom
WHERE {
  ?s geovocab:geometry/ogc:asWKT ?geom ;
     lgd:featuresSport ?sport ;
     rdfs:label ?label .
  FILTER(ogcf:sfWithin(?geom,
    "POLYGON((-74.2557 40.4961, -73.7004 40.4961, -73.7004 40.9153, -74.2557 40.9153, -74.2557 40.4961))"^^ogc:wktLiteral))
  FILTER (?sport = dbpedia:Tennis)
}
ORDER BY ?label
```

このクエリは、ニューヨーク市ポリゴン内で、スポーツ種別が`dbpedia:Tennis`である施設(?s)・その種別(?sport)・ラベル(?label)・WKTジオメトリ(?geom)を一覧表示します。


ボタンGenerateでは、APEXが標準で提供しているアクションAIによるテキストの生成を呼び出しています。

生成AI構成としてGenerate GeoSPARQL Queryを作成し、それを生成AI構成に設定しています。入力値はページ・アイテムP4_USER_PROMPTレスポンスの使用はページ・アイテムP4_SPARQL_QUERYです。

OpenAIのChat Completions APIの呼び出しとしては、構成Generate GeoSPARQL Queryにシステム・プロンプトが設定されていて、P4_SPARQL_QUERYがroleがuserのcontentになり、そのレスポンスであるcontentがP4_SPARQL_QUERYに設定されるという、単純な呼び出しが行われています。


生成AI構成Generate GeoSPARQL Queryでは、システム・プロンプトとして以下を設定しています。都市と運動施設の種別を検索条件とするGeoSPARQLクエリを生成するように指示しています。

問合せからGeoSPARQLのクエリを生成してください。PREFIXは以下です。
—
PREFIX geovocab: <http://geovocab.org/geometry#>
PREFIX lgd: <http://linkedgeodata.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX ogc: <http://www.opengis.net/ont/geosparql#>
PREFIX ogcf: <http://www.opengis.net/def/function/geosparql/>
—
選択するのは以下の?s ?geom ?sport ?labelです。

?s 
geovocab:geometry/ogc:asWKT ?geom
lgd:featuresSport ?sport
rdfs:label ?label

GeoSPARQLのクエリの例です。ニューヨーク市の領域をPOLYGONで与えて、そのPOLYGONに含まれる野球ができる施設の一覧です。

PREFIX geovocab: <http://geovocab.org/geometry#>
PREFIX lgd: <http://linkedgeodata.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX ogc: <http://www.opengis.net/ont/geosparql#>
PREFIX ogcf: <http://www.opengis.net/def/function/geosparql/>

SELECT ?s ?sport ?label ?geom
WHERE {
  ?s geovocab:geometry/ogc:asWKT ?geom ;
     lgd:featuresSport ?sport ;
     rdfs:label ?label .
  FILTER(ogcf:sfWithin(?geom,
    "POLYGON((-74.2557 40.4961, -73.7004 40.4961, -73.7004 40.9153, -74.2557 40.9153, -74.2557 40.4961))"^^ogc:wktLiteral))
  FILTER (?sport = dbpedia:Baseball)
}
ORDER BY ?label

ボタンUpdateをクリックし、生成AIのレスポンスに含まれているSPARQLを実行し、結果をマップと対話モード・レポートに表示します。

ボタンUpdateをクリックしたときに、プロセスとして以下のコードを実行します。SPARQLクエリのレスポンスとして受け取ったJSONを、APEXコレクションSPORTS_FACILITIESに入れています。マップおよび対話モード・レポートはこのAPEXコレクションSPORTS_FACILITIESをソースとして、マップのレイヤやレポートを表示しています。



東京都でも検索できたのは驚きました。


今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。

2025年6月9日月曜日

Oracle Autonomous Database Freeのコンテナに含まれるOracle Estate Explorerを実行する

更新: 2026年2月9日 - Oracle Estate Expoloer v5.0に対応

Oracle Autonomous Database Free Container Image Documentationを読んでいると、このコンテナ・イメージにはOracle Estate Explorerが含まれているとの記載がありました。

https://container-registry.oracle.com/ords/ocr/ba/database/adb-free

Oracle Estate Explorerは以下のリンクで紹介されているとおり、Autonomous Databaseへの移行を事前に評価するためのツールです。Oracle APEXで作成されていて、無料で使用できます。ただし、アプリケーションをダウンロードする方法が一般に公開されていません。

https://docs.oracle.com/ja/learn/unveiling-oracle-estate-explorer-autonomous-db/index.html

ADB Free Container Imageに入っているとのことなので、コンテナを実行して確認してみました。行った作業はOracle Estate Explorerを実行するところまでです。Oracle Estate Explorerの使い方については、また、機会があったら勉強しようと思います。

以下より、ADB FreeにインストールされているOracle Estate Explorerの実行手順を紹介します。

Autonomous Database Freeの実行手順については、以下の記事を参考にしてください。x86_64とARM 64-bit、Oracle AI Database 23aiおよびOracle Database 19cのどれにも、Oracle Estate Explorer v5.0が含まれています。

Autonomous Database Free Container Imageを実行する

ブラウザで以下のURLにアクセスします。


最初にスキーマMPACK_OEEのパスワードを更新します。

SQL Developer Webを開きます。Goをクリックします。


SQL Developer WebにユーザーADMINでサインインします。パスワードはコンテナ作成時に環境変数ADMIN_PASSWORDに設定した値です。


起動パッドが開きます。開発SQLを開きます。


以下のコマンドを実行しデータベース・ユーザーMPACK_OEEにパスワードを設定します。

ALTER USER MPACK_OEE IDENTIFIED BY <PASSWORD>

ユーザーMPACK_OEEは、Oracle Estate ExplorerのAPEXアプリケーションが含まれるワークペースMPACK_OEEの管理者ユーザです。Autonomous Databaseなので、データベース・ユーザーのパスワードがワークスペースへサインインする際のパスワードになります。


APEXのワークスペースMPACK_OEEにサインインします。以下のURLにアクセスします。


ワークスペース名MPACK_OEEユーザー名MPACK_OEEパスワードは直前のALTER USER文で設定した値を入力します。

以上でサインインします。


APEXの開発ツールのホーム・ページが開きます。AdministrationManage Users and Groupsを開き、APEXアカウントとしてのユーザーMPACK_OEEのパスワードを更新します。


ユーザーMPACK_OEEが登録されているので、それを開きます。


Password (For authentication against workspace user account repository only)PasswordConfirm Passwordを設定します。ALTER USER MPACK_OEE文で設定したパスワードは、APEXのワークスペースへのサインインに使用するパスワードです。ここで設定するパスワードは、Oracle Estate Explorerのアプリケーションのサインインに使用します。

Apply Changesをクリックし、変更を確定します。


Oracle Estate Explorerを実行します。

App Builderを開き、Oracle Estate Explorerを開きます。


Run Applicationを実行します。


Oracle Estate Explorerの画面が開きます。ユーザーMPACK_OEE、パスワードをはワークスペースに設定したものを入力します。

Sign Inをクリックします。


My Oracle Database Estateをクリックします。


Oracle Estate Explorerの画面が開きます。


Helpタブ以下より、Oracle Estate Explorerのドキュメントやサンプルにアクセスできます。


HelpAdditional Resourcesからは、カタログに登録するデータを抽出するスクリプトなどがダウンロードできます。


今回の記事は以上になります。