はじめに
Autonomous Databaseでは、表やクエリに対してPAR URLを生成して外部に公開できます。
Autonomous Databaseの新機能として、この生成したPAR URLに対して外部表を作成できるようになったので、その手順と動作を検証してみました。
1. 表に対するPAR URLの生成
Autonomous Databaseに接続します。
このAutonomous Databaseは東京リージョン(ap-tokyo-1)にあります。
[oracle@oracle23ai ~]$ sqlplus admin/Demo#1Demo#1@atp23aitokyo
SQL*Plus: Release 23.0.0.0.0 - Production on Fri Feb 7 07:54:39 2025
Version 23.4.0.24.05
Copyright (c) 1982, 2024, Oracle.  All rights reserved.
Last Successful login time: Thu Feb 06 2025 23:05:33 +09:00
Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
Version 23.7.0.25.02
SQL>
PAR URL生成の対象となる表の構造を確認します。
ここでは、movieという表に対してPAR URLを生成します。
SQL> desc movie
 Name					                   Null?    Type
 ----------------------------------------- -------- ----------------------------
 MOVIE_ID				                   NOT NULL NUMBER(38)
 TITLE						                        VARCHAR2(100)
 RELEASE_DATE					                    DATE
 GENRE						                        VARCHAR2(50)
 DIRECTOR_ID					                    NUMBER(38)
SQL>
PAR URL生成の対象となる表の内容を確認します。
SQL> col title for a25
SQL> col genre for a20
SQL> SELECT * FROM movie;
  MOVIE_ID TITLE		             RELEASE_D GENRE		        DIRECTOR_ID
---------- ------------------------- --------- -------------------- -----------
	     1 The Proposal 	         01-JAN-09 Romance			              3
	     2 The Hangover 	         05-JUN-09 Comedy			              2
	     3 Inglourious Basterds      21-AUG-09 War			                  4
	     4 Up in the Air	         04-DEC-09 Drama			              5
	     5 District 9		         14-AUG-09 Science Fiction		          1
SQL> 
DBMS_DATA_ACCESS.GET_PREAUTHENTICATED_URLプロシージャを使用して、表に対するPAR URLを作成します。
DBMS_DATA_ACCESS.GET_PREAUTHENTICATED_URLプロシージャの詳細は、こちらのマニュアルに記載があります。
SQL> set serveroutput on
SQL> DECLARE
  2      status CLOB;
  3  BEGIN
  4      DBMS_DATA_ACCESS.GET_PREAUTHENTICATED_URL(
  5          schema_name => 'ADMIN',
  6          schema_object_name => 'MOVIE',
  7          service_name => 'HIGH',
  8          result => status
  9      );
 10      DBMS_OUTPUT.PUT_LINE(status);
 11  END;
 12  /
{"status":"SUCCESS","id":"EfoLtHT73g_UgD2YJ5Uv5PTLPts6CRJoiTHS6_3ul6_TsQiGrQUYCy
4wjvYEpyL1","preauth_url":"https://dataaccess.adb.ap-tokyo-1.oraclecloudapps.com
/adb/p/2e6uaFy2AyQ7WjKcAVx9yfI3KoTlxT8_Lgi6M_Iqn_k6xIdX68Hs6lbJ2lm19OmwjUpw9hsSg
7M/data","expiration_ts":"2025-05-19T23:08:20.167Z","expiration_count":null}
PL/SQL procedure successfully completed.
SQL>
表示された実行結果内のpreauth_urlの値が、生成されたPAR URLです。
また、expiration_tsがPAR URLの有効期限(デフォルトは生成から90日間)です。
なお、PAR URLの有効期限は、DBMS_DATA_ACCESS.EXTEND_URLプロシージャで延長することができます。
curlコマンドで生成されたPAR URLにアクセスしてみます。
[opc@oracle23ai ~]$ curl https://dataaccess.adb.ap-tokyo-1.oraclecloudapps.com/adb/p/2e6uaFy2AyQ7WjKcAVx9yfI3KoTlxT8_Lgi6M_Iqn_k6xIdX68Hs6lbJ2lm19OmwjUpw9hsSg7M/data
{"items":[{"MOVIE_ID":1,"TITLE":"The Proposal","RELEASE_DATE":"2009-01-01T00:00:00","GENRE":"Romance","DIRECTOR_ID":3},{"MOVIE_ID":2,"TITLE":"The Hangover","RELEASE_DATE":"2009-06-05T00:00:00","GENRE":"Comedy","DIRECTOR_ID":2},{"MOVIE_ID":3,"TITLE":"Inglourious Basterds","RELEASE_DATE":"2009-08-21T00:00:00","GENRE":"War","DIRECTOR_ID":4},{"MOVIE_ID":4,"TITLE":"Up in the Air","RELEASE_DATE":"2009-12-04T00:00:00","GENRE":"Drama","DIRECTOR_ID":5},{"MOVIE_ID":5,"TITLE":"District 9","RELEASE_DATE":"2009-08-14T00:00:00","GENRE":"Science Fiction","DIRECTOR_ID":1}],"hasMore":false,"limit":1000,"offset":0,"count":5,"links":[{"rel":"self","href":"https://dataaccess.adb.ap-tokyo-1.oraclecloudapps.com/adb/p/2e6uaFy2AyQ7WjKcAVx9yfI3KoTlxT8_Lgi6M_Iqn_k6xIdX68Hs6lbJ2lm19OmwjUpw9hsSg7M/data"}]}
[opc@oracle23ai ~]$ 
PAR URLにアクセスすると、movie表の内容がJSON形式で返されることがわかります。
2. PAR URLに対する外部表の作成
Autonomous Databaseに接続します。
このAutonomous Databaseは大阪リージョン(ap-osaka-1)にあります。
[oracle@oracle23ai admin]$ sqlplus admin/Demo#1Demo#1@atp23aiosaka
SQL*Plus: Release 23.0.0.0.0 - Production on Wed Feb 19 08:11:50 2025
Version 23.4.0.24.05
Copyright (c) 1982, 2024, Oracle.  All rights reserved.
Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
Version 23.7.0.25.02
SQL>
DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、PAR URLに対する外部表を作成します。
table_nameには作成する外部表の名前を、file_uri_listにはPAR URLを指定します。
SQL> BEGIN
  2      DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
  3          table_name => 'ext_tab_parurl_movie',
  4          file_uri_list => 'https://dataaccess.adb.ap-tokyo-1.oraclecloudapps.com/adb/p/2e6uaFy2AyQ7WjKcAVx9yfI3KoTlxT8_Lgi6M_Iqn_k6xIdX68Hs6lbJ2lm19OmwjUpw9hsSg7M/data'
  5      );
  6  END;
  7  /
PL/SQL procedure successfully completed.
SQL>
PAR URLに対する外部表が作成できました。
作成したPAR URLを元にした外部表の構造を確認します。
SQL> desc ext_tab_parurl_movie
 Name					                   Null?    Type
 ----------------------------------------- -------- ----------------------------
 MOVIE_ID					                        NUMBER
 TITLE						                        VARCHAR2(100)
 RELEASE_DATE					                    DATE
 GENRE						                        VARCHAR2(50)
 DIRECTOR_ID					                    NUMBER
SQL>
作成したPAR URLを元にした外部表の内容を確認します。
SQL> col title for a25
SQL> col genre for a20
SQL> SELECT * FROM ext_tab_parurl_movie;
  MOVIE_ID TITLE		             RELEASE_D GENRE		        DIRECTOR_ID
---------- ------------------------- --------- -------------------- -----------
	     1 The Proposal 	         01-JAN-09 Romance			              3
	     2 The Hangover 	         05-JUN-09 Comedy			              2
	     3 Inglourious Basterds      21-AUG-09 War			                  4
	     4 Up in the Air	         04-DEC-09 Drama			              5
	     5 District 9		         14-AUG-09 Science Fiction		          1
SQL>
PAR URLを元にした外部表を作成して、別のリージョンにあるAutonomous Databaseの表に簡単にアクセスできることが確認できました。
参考情報
・Query Data that Uses Pre-Authenticated Request (PAR) URL Source
・DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャ
・DBMS_DATA_ACCESS.GET_PREAUTHENTICATED_URLプロシージャ
・DBMS_DATA_ACCESS.EXTEND_URLプロシージャ