Amazon Web Services ブログ

Amazon RDS for Oracle における UTL_FILE 問題の解決



データベースと各種アプリケーションサーバー間でファイルを転送するための一般的な手法として、Oracle の機能である UTL_FILE があります。UTL_FILEを使うと、クライアントサーバーが POSIX 対応のディレクトリにファイルをコピーし、その後そこからファイルを読み取ることを可能にします。さらに、データベースが PL/SQL ルーチンを使用して、これらの同じファイルに対する読み取りと書き込みを行うことも可能にします。

しかし Amazon RDS 上のOracle Databaseへの移動時には、UTL_FILEを用いたファイル転送において問題が生じます。データベースはサーバ上のファイルの読み取りと書き込みを実行できるのですが、これらのディレクトリは外部システムに公開されていないため、外部システムはそれらにアクセスできません。この問題は、多くの組織にとって Amazon RDS for Oracle を導入する妨げとなっています。

このブログ記事では、この問題を解決するプロセスについて順を追って説明していきます。このプロセスは、Oracle PL/SQL ルーチンを使用して Amazon S3 バケットに Oracle RDS インスタンスを統合することによって問題を解決します。こうすることで、現在 UTL_FILE によって提供されている機能性に似た外部ファイル転送メカニズムが提供されます。

このブログ記事では、Amazon RDS for Oracle インスタンスの変更プロセスのみを取り上げます。追加の参照情報は、以下のドキュメントトピックで見つけることができます。これらは、RDS for Oracle インスタンスを作成して、そのインスタンスにアクセスするためのプロセスを説明しています。

また、以下のドキュメントトピックにも追加の参照情報があります。これらには、このプロセスをテストするための S3 バケットの作成プロセスが説明されています。

S3 バケットと Oracle インスタンスは、いずれの場合も Amazon VPC に対してプライベートです。このソリューションにパブリックアクセスは必要がありません。

前提条件

RDS for Oracle に S3 インターフェイスを作成する前に、以下にリストされている前提条件を満たす必要があります。

このブログ記事では、これらのステップを実行する方法は説明しません。

  • 適切なバケットを有する S3 環境が必要です。これはパブリックバケットではなく、プライベートバケットにするようにしてください。
  • S3 バケットへのファイルのコピー、およびバケットからのファイルのコピーを行うためのメカニズムが必要です。これを行うための最も簡単な方法は、AWS CLI です。
  • Amazon RDS for Oracle インスタンスが必要です。
    • このインスタンスは、少なくとも Oracle 12cR1 のバージョンとすること。
    • インスタンスが APEX オプションを含むオプショングループに関連付けられていること。
    • データベースは、Standard Edition にすることも可能。
  • Amazon RDS for Oracle インスタンスに接続できる外部環境が必要です。
    • Oracle Instant Client がこれを実現するための最も簡単な方法です。以下のコンポーネントが必要です。
      • basic
      • sqlplus
      • tools
      • jdbc
      • odbc
      • sdk
  • オプションで、必要な Oracle Wallet を作成できるようにするためのフルバージョンの(Instant Clientではない) Oracle 12c クライアント環境が必要です。用意することが不可能の場合は、この目的のために使用できる事前に作成されたウォレットが、このブログに記載されているコードに含まれていますので利用できます。

従来のデータベースでのシンプルなファイルコピーから始める

このセクションでは、従来のデータベースで実行されるシンプルな UTL_FILE ルーチンを実行してみます。このルーチンの結果を RDS for Oracle からS3へレプリケートすることになります。

これらのコマンドは、ご自分で自由に実行してみてください。ソリューションをこのブログ記事で説明された通りに完了する必要はありません。

今回は、これらの例のすべてにデータベースユーザー「mike」を使っており、簡略化のために、DBA 権限をこのユーザーに付与しました。

最初のステップは、使用するディレクトリの作成です。

$ sqlplus mike/<password>

CREATE OR REPLACE DIRECTORY FILE_COPY AS '/data/file-copy';

EXIT;

次に、シンプルなコードをいくつか実行して、このディレクトリ内のファイルにデータを投入します。

$ touch /data/file-copy/test-file

$ sqlplus mike/<password>

DECLARE

  fHandle  UTL_FILE.FILE_TYPE;

BEGIN

  fHandle := UTL_FILE.FOPEN('FILE_COPY', 'test-file', 'w');

  UTL_FILE.PUT_LINE(fHandle, 'This is the first line' );
  UTL_FILE.PUT_LINE(fHandle, 'This is the second line');
  UTL_FILE.PUT_LINE(fHandle, 'This is the third line' );

  UTL_FILE.FCLOSE(fHandle);

END;
/
EXIT;

$ cat /data/file-copy/test-file
This is the first line
This is the second line
This is the third line

これは、多くのお客様が使用するプロセスの簡易版です。このプロセスは、RDS 環境のセキュリティが原因で RDS for Oracle から外部へレプリケートすることが困難です。このセキュリティはインフラストラクチャへのアクセスを妨げています。

さてこれは、RDS でファイル転送を実行するために使用するコード例です。

APEX オプショングループを作成する

データベースを作成する前に、使用するオプショングループを作成する必要があります。この場合、命名規則に VPC、オプション、およびデータベースバージョンを含めておくと便利だと思います。

APEX オプションを追加する

必要となるオプションは APEX オプションのみで、APEX-DEV は必要ありませんが、最新のバージョン (ブログ記載時では 5.1.4 v1) を選択することをお勧めします。

RDS for Oracle インスタンスを作成する

このブログ記事では、Oracle Standard Edition 2 インスタンスを作成します。これは RDS 無料利用枠内で使用できるものです。

このブログ記事のソリューションには SHA2 暗号化が必要であるため、Oracle 12.1 データベースを作成しなければなりません。

データベースに名前を付けます。この記事では、file-test という名前を使用しました。

注意: マスターユーザー名に対するパスワードは、従来のデータベースにおける SYS パスワードに似たものです。パスワードの管理には厳格な基準を設定して運用されることをお勧めします。

データベースオプションを設定します。今回は、先ほど作成した APEX オプションが含まれるグループを選択しなくてはならないオプショングループを除いて、デフォルトとしました。

データベースが作成されたら、エンドポイントを記録して、それを踏み台ホストからデータベースへの接続に使用します。その代わりにパブリックアクセスが可能なデータベースを作成することもできますが、お勧めしません。

tnsnames.ora ファイルを編集して、先ほど作成したデータベースに適切なエントリを追加します。私のデータベースは、tnsnames エントリと同じく、file-test と呼ばれています。

RDS for Oracle データベースで UTL_FILE コードをテストする

最初のステップは、使用するディレクトリの作成です。すべてのテストで、データベースの作成時に指定した admin ユーザーを使用します。

注意: RDS for Oracle の構文における違いに注意してください。

$ sqlplus mike/<password>@file-test

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

BEGIN

  RDSADMIN.RDSADMIN_UTIL.CREATE_DIRECTORY('FILE_COPY');

END;
/
EXIT;

次に、シンプルなコードをいくつか実行して、このディレクトリ内のファイルにデータを投入します。これは、前に従来のデータベースで使用したコードと同じものです。

$ sqlplus mike/<password>@file-test

DECLARE

  fHandle  UTL_FILE.FILE_TYPE;

BEGIN

  fHandle := UTL_FILE.FOPEN('FILE_COPY', 'test-file', 'w');

  UTL_FILE.PUT_LINE(fHandle, 'This is the first line' );
  UTL_FILE.PUT_LINE(fHandle, 'This is the second line');
  UTL_FILE.PUT_LINE(fHandle, 'This is the third line' );

  UTL_FILE.FCLOSE(fHandle);

END;
/

PL/SQL procedure successfully completed.
EXIT;

ここで問題になるのは、PL/SQL コードが完全に実行されたとはいえ、たった今作成したファイルのコンテンツはどのように確認すればよいのかということです。

ファイルを S3 バケットに書き込む

この問題に対する解決策は、UTL_FILE ルーチンによって作成されたファイルを S3 バケットにコピーすることです。これによって、どの外部システムからでもファイルにアクセスできるようになります。

Oracle ディレクトリを作成する

まず、S3 アクセスに必要な Oracle Wallet を保存するための Oracle ディレクトリを作成します。その後、後ほど使用するために作成されたディレクトリ名を抽出します。

$ sqlplus mike/<password>@file-test

BEGIN

  RDSADMIN.RDSADMIN_UTIL.CREATE_DIRECTORY('SSL_WALLET_DIR');

END;
/

SELECT  directory_path
FROM    all_directories
WHERE   directory_name = 'SSL_WALLET_DIR'
/

DIRECTORY_PATH
--------------------------------------------------------------------------
/rdsdbdata/userdirs/02

EXIT;

Amazon S3 パッケージをダウンロードして更新する

次に、この AWS GitHub リポジトリにある必要な AWS_RDS_TO_S3_PKG コードをダウンロードする必要があります。

ダウンロードしたら、お使いの環境に対して動作するように、Amazon S3 パッケージの環境固有の変数を変更しなくてはなりません。

希望のエディタを使って、パッケージボディスクリプト、AWS_RDS_TO_S3_PKG.pkb を編集して、以下の文字列を検索します。

注意: これらすべての値は、ウォレットパスを除き、必要に応じて AWS_RDS_TO_S3_PKG を使ってランタイム時にすべて設定することができます。

$ vi AWS_RDS_TO_S3_PKG.pkb

AWS_ACCESS_KEY          VARCHAR2(20) := 'AKIAIOSFODNN7EXAMPLE';
AWS_REGION              VARCHAR2(16) := 'eu-west-2';
AWS_SECRET_KEY          VARCHAR2(64) := 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY';
TIME_ZONE               VARCHAR2(64) := 'UTC';
WALLET_PASSWORD         VARCHAR2(32) := 'S3-Oracle';
WALLET_PATH    CONSTANT VARCHAR2(32) := 'file:/rdsdbdata/userdirs/02/';
  • アクセスキーとシークレットキーは、AWS Identity and Access Management (IAM) ユーザー用のセキュリティ認証情報です。IAM ユーザーは、ファイルを書き込む S3 バケットにプログラム的にアクセスできます。
  • AWS リージョンは S3 バケットがある場所です。
  • タイムゾーンは変更しなくてもよいはずですが、必要な場合は、お使いの AWS リージョンに合わせて調整できます。
  • ウォレットパスワードは、GitHub のウォレットのパスワードです。独自のウォレットを使用する予定の場合は、このパスワードも変更する必要があります。
  • ウォレットパスは、Oracle ディレクトリの作成時に作成されます。以前ディレクトリの作成に使用したコマンドの出力を使用してください。

データベースのアクセスコントロールリスト (ACL) を作成する

データベースが S3 バケットと正常に通信できるようにするには、アクセスを許可するようにデータベースのファイアウォールを開く必要があります。これは、データベース ACL 管理コマンドを使用して実行できます。

注意: アクセス権は、ここで作成しているデータベースパッケージの所有者ではなく、APEX パッケージの所有者に付与されます。

注意: VPC 環境に、必要な対応する AWS ネットワークセキュリティグループとネットワーク ACL を作成する必要もあります。

$ sqlplus mike/<password>@file-test

BEGIN
    DBMS_NETWORK_ACL_ADMIN.append_host_ace
    (
        host       => '*.amazonaws.com',
        lower_port => 443,
        upper_port => 443,
        ace        => xs$ace_type
                      (
                        privilege_list =>  xs$name_list('http'),
                        principal_name => 'APEX_050100',
                        principal_type =>  xs_acl.ptype_db
                      )
    );

END;
/

Oracle Wallet を作成する

データベースが S3 バケットに正常に接続できるように、SSL 証明書を Oracle Wallet に保存します。後ほど、このウォレットを先ほど作成した Oracle ディレクトリにコピーします。

以下のコマンドを発行して、Amazon S3 バケットにアクセスするために必要な証明書を識別します。確認するのは、返されたスタックの初めにある情報です。

$ openssl s_client -connect s3.eu-west-2.amazonaws.com:443

CONNECTED(00000003)
depth=2 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Baltimore CA-2 G2
verify return:1
depth=0 C = US, ST = Washington, L = Seattle, O = Amazon.com Inc., CN = *.s3.eu-west-2.amazonaws.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Washington/L=Seattle/O=Amazon.com Inc./CN=*.s3.eu-west-2.amazonaws.com
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Baltimore CA-2 G2
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Baltimore CA-2 G2
   i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
---

このスタックトレースから、以下の 2 つの証明書が必要であることがわかります。

  • DigiCert Baltimore CA-2 G2
  • Baltimore CyberTrust Root

これらは、以下のアドレスの Digicert ウェブサイトからダウンロードできます。

これらの証明書をダウンロードしたら、公開鍵基盤 (PKI) 要素を管理するための Oracle ユーティリティ(orapki)を実行します。orapki は Oracle のフルインストールのみでしか使用できません。従って、ウォレットは RDS とは別のデータベース環境で作成される必要があります。

または、orapki ユーティリティは Oracle JDeveloper Studio Edition にも含まれています。これは、ダウンロードサイズはやや大きいものの、無料で使用できる製品です。

最後に、これらのオプションのいずれも適切ではない場合のために、必要なウォレットのコピーを GitHub リポジトリに含めておきました。

これらのステップは、独自のウォレットを作成する場合に実行する必要があるステップです。

$ orapki wallet create -wallet -pwd S3-Oracle -auto_login

$ orapki wallet add    -wallet -trusted_cert -cert BaltimoreCyberTrustRoot.crt -pwd S3-Oracle

$ orapki wallet add    -wallet Wallet/ -trusted_cert -cert DigiCertBaltimoreCA-2G2.crt -pwd S3-Oracle

$ orapki wallet display -wallet
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates.All rights reserved.

Requested Certificates: 
User Certificates:
Trusted Certificates: 
Subject:    CN=DigiCert Baltimore CA-2 G2,OU=www.digicert.com,O=DigiCert Inc,C=US
Subject:    CN=Baltimore CyberTrust Root,OU=CyberTrust,O=Baltimore,C=IE

RDS for Oracle の Oracle Wallet ディレクトリにウォレットをコピーする

次は Oracle Wallet ディレクトリへのウォレットのコピーです。ご存知のように、RDS 環境の基盤となるファイル構造にはアクセスできません。

推奨される方法は、S3 を使用し、HTTP を使ってファイルをダウンロードすることですが、S3 における SHA-2 への最近のセキュリティアップグレードのため、この方法は動作しなくなりました。

代替法は、Perl スクリプトの使用です。この記事のために適切な Perl スクリプトが GitHub ディレクトリに含まれています。

このスクリプトには、ファイルをお使いの環境で使用する前に変更すべき 2 つの変数があります。希望のエディタを使用して、スクリプトに以下の変更を行ってください。

$ vi Copy-eWallet.pl

...
my $dirname="SSL_WALLET_DIR";
...
my $filename="ewallet.p12";
...
  • SSL_WALLET_DIR は、前に作成した Oracle ディレクトリの名前です。
  • p12 は orapki ユーティリティを使用して作成したウォレットの名前です。

このアプローチを行う上での最も大きな課題は、RDS for Oracle に接続するために使用している環境を変更して、それが Oracle データベースに対して Perl を実行できるようにすることです。

これらは、この目的のために私が使用したステップです。これらのステップは Oracle Instant Client を使用し、RHEL 6.9 と最新の Amazon Machine Image (AMI) で実行されています。

# install necessary packages

$ su -
$ yum install -y perl-DBI
$ yum install -y cpan

# configure environment variables for root

$ export ORACLE_BASE=/usr/lib/oracle
$ export ORACLE_HOME=$ORACLE_BASE/12.2/client64
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
$ export TNS_ADMIN=$ORACLE_HOME/lib/network/admin
$ export PERL_MM_USE_DEFAULT=1
$ export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH

# copy a make file into the client area

$ cp /usr/share/oracle/12.2/client64/demo/demo.mk /usr/share/oracle/12.2/client64/demo.mk

#Install Necessary cpan components

$ cpan IO::Tee
$ cpan DBD::Oracle
  • 環境変数は、お使いの Oracle 環境をポイントする必要があります。私の場合は、Oracle Instant Client の場所になります。
  • cpan を実行すると、特に初めて cpan を使用する場合には、通常多数の設定質問を受けます。すべての場合においてデフォルトを選択し、多くの警告が表示されるとは思いますが、それらは無視します。

次のステップは、Perl スクリプトを使用してウォレットを RDS for Oracle ディレクトリにコピーすることです。

$ ./Copy-eWallet.pl \
  --USER mike \
  --PASSWD <password> \
  --TNS file-test \
  --LDIR /home/oracle/Wallet

Uploading file ewallet.p12
Files uploaded successfully
02/ size: 4096 bytes
ewallet.p12 size: 2360 bytes
  • USER はマスターユーザー名です。
  • PASSWD はマスターユーザー名用のパスワードです。
  • TNS は、TNS_NAMES エントリを使用することによる RDS for Oracle データベースのアクセスポイントです。
  • LDIR は、ウォレットがあるローカルディレクトリのフルパスです。

Amazon S3 データベースパッケージをロードする

このプロセスの最後のステップは、先ほど変更した Amazon S3 データベースパッケージのインストールです。

$ sqlplus mike/<password>@file-test @AWS_RDS_TO_S3_PKG.pks

Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production


Package created.

SQL> @AWS_RDS_TO_S3_PKG.pkb

Package body created.

SQL> exit;

プロセスをテストする

環境がセットアップされたところで、アカウント内のすべての S3 バケットをリストするシンプルなテストを実行できます。

$ sqlplus mike/<password>@file-test

SET SERVEROUT ON SIZE 20000
SET LINESIZE          132
SET PAGESIZE           64

DECLARE
    blBucketList    AWS_RDS_TO_S3_PKG.BUCKET_LIST;
BEGIN
    blBucketList := AWS_RDS_TO_S3_PKG.getBucketList;

    FOR i IN 1 .. blBucketList.count
    LOOP
        DBMS_OUTPUT.PUT('Bucket: ');
        DBMS_OUTPUT.PUT( blBucketList(i).bucket_name );
        DBMS_OUTPUT.PUT(' Created on: ');
        DBMS_OUTPUT.PUT_LINE( blBucketList(i).creation_date );
    END LOOP;
END;
/

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

Bucket: db-freedom Created: 16-JUL-18
Bucket: demos.revittmk.aws.co.uk Created on: 05-JUN-18
Bucket: ec2-config.revittmk.aws.co.uk Created on: 29-JUN-18
Bucket: file-test.revittmk.aws.co.uk Created on: 27-JUL-18
Bucket: labs.revittmk.aws.co.uk Created on: 31-MAY-18

PL/SQL procedure successfully completed.

EXIT;

ここで、このテスト用に作成した S3 バケットの内容をチェックしましょう。

$ sqlplus mike/<password>@file-test

SET SERVEROUT ON SIZE 20000
SET LINESIZE          132
SET PAGESIZE           64

DECLARE
    olObjectList     AWS_RDS_TO_S3_PKG.OBJECT_LIST;
    bAllFiles        BOOLEAN;
BEGIN
    
    AWS_RDS_TO_S3_PKG.getObjectList
    (
        pBucket          => 'file-test.revittmk.aws.co.uk',
        pFilesRemaining  =>  bAllFiles,
        pObjectList      =>  olObjectList
    );

    for i in 1 .. olObjectList.count loop
        dbms_output.put('Object: ');
        dbms_output.put( olObjectList(i).key);
        dbms_output.put(' Size Bytes: ');
        dbms_output.put( olObjectList(i).size_bytes);
        dbms_output.put(' Modified on: ');
        dbms_output.put_line( olObjectList(i).last_modified);
    end loop;
 END;
/

PL/SQL procedure successfully completed.

EXIT;

このバケットにはまだ何もコピーされていないので、データは返されないはずです。

いよいよ本番のテストです。コンテンツを確認してからバケットリストチェックを返すことができるように、S3 バケットにファイルをコピーしましょう。

$ sqlplus mike/<password>@file-test

BEGIN

    AWS_RDS_TO_S3_PKG.copyFile
    (
        'FILE_COPY',
        'test-file',
        'file-test.revittmk.aws.co.uk'
    );
END;
/

REM re-run AWS_RDS_TO_S3_PKG.getObjectList, you should now see the file

Object: test-file Size Bytes: 70 Modified on: 27-JUL-18

PL/SQL procedure successfully completed.

S3 に API コールを実行する方法は多数あります。今回は、ファイルを確認するために AWS CLI を使用します。

$ aws s3 cp s3://file-test.revittmk.aws.co.uk/test-file . --profile mike
download: s3://file-test.revittmk.aws.co.uk/test-file to ./test-file

$ cat test-file
This is the first line
This is the second line
This is the third line

これで完了です。Oracle にファイルを投入し、私の PC からこのファイルにアクセスしました。

ではここで、ファイルを変更し、それを Oracle データベースに再度コピーして遊んでみましょう。

$ echo 'This is the fourth line' >> test-file
$ echo 'This is the fifth line'  >> test-file
$ echo 'This is the sixth line'  >> test-file

$ cat test-file
This is the first line
This is the second line
This is the third line
This is the fourth line
This is the fifth line
This is the sixth line

$ aws s3 cp test-file s3://file-test.revittmk.aws.co.uk/ --profile mike
upload: ./test-file to s3://file-test.revittmk.aws.co.uk/test-file

$ sqlplus mike/<password>@file-test

BEGIN

    AWS_RDS_TO_S3_PKG.copyFile
    (
        'file-test.revittmk.aws.co.uk',
        'test-file',
        'FILE_COPY'
    );
END;
/

シンプルな SQL ステートメントによって、Oracle ディレクトリ内のファイルのコンテンツを読み取ることが可能になります。

$ sqlplus mike/<password>@file-test

SET SERVEROUT ON SIZE 20000
SET LINESIZE          132
SET PAGESIZE           64

DECLARE

    fHandle  UTL_FILE.FILE_TYPE;
    vcText   VARCHAR2(132);

BEGIN

    fHandle := UTL_FILE.FOPEN('FILE_COPY', 'test-file', 'r');

    LOOP
        UTL_FILE.GET_LINE(fHandle, vcText );
        DBMS_OUTPUT.PUT_LINE( vcText );
    END LOOP;

    UTL_FILE.FCLOSE(fHandle);

    EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        UTL_FILE.FCLOSE(fHandle);
END;
/
This is the first line
This is the second line
This is the third line
This is the fourth line
This is the fifth line
This is the sixth line
date
Mon  6 Aug 2018 10:24:52 BST

PL/SQL procedure successfully completed.

EXIT;

これで、S3 バケットでのファイルの作成、変更、および削除のための UTL_FILE 機能性のすべてが実現されました。これに加えて、Oracle ディレクトリと S3 バケットの間でファイルをコピーすることもできます。

トラブルシューティング

時折、このようなソリューションの実装時に何かが機能しない場合があります。このセクションでは、テスト中に特定された最も一般的な問題に対処していきます。

デバッグ

コードは、問題を特定するために有効化できるデバッグステートメントが埋め込まれた状態で提供されています。

注意: デバッグモードの CONN および VERBOSE を実行できるのはパッケージの所有者のみです。

以下は、デバッグコマンドのサンプルです。

$ sqlplus mike/<password>@file-test

SET SERVEROUT ON SIZE 20000
SET LINESIZE          132
SET PAGESIZE           64

DECLARE

    aBucketList	aws_s3_pkg.BUCKET_LIST;

BEGIN

--  AWS_RDS_TO_S3_PKG.setDebugOn( AWS_RDS_TO_S3_PKG.DEBUG_VERBOSE );
--  AWS_RDS_TO_S3_PKG.setDebugOn( AWS_RDS_TO_S3_PKG.DEBUG_CONN );
    AWS_RDS_TO_S3_PKG.setDebugOn( AWS_RDS_TO_S3_PKG.ON );

    aBucketList := AWS_RDS_TO_S3_PKG.getBucketList;

    FOR i IN 1 .. aBucketList.count loop
        dbms_output.put('Bucket: ');
        dbms_output.put( aBucketList(i).bucket_name);
        dbms_output.put(' Created: ');
        dbms_output.put_line( aBucketList(i).creation_date);
    END LOOP;
END;
/

ウォレット問題

以下のエラーが表示されたとします。

ORA-29273: HTTP request failed
ORA-28759: failure to open file
ORA-06512: at "SYS.UTL_HTTP", line 368
ORA-06512: at "SYS.UTL_HTTP", line 1118

この場合、Oracle Wallet を読み取ることができない可能性が高くなります。これはおそらく、以下の変数が誤って設定されていることが原因であると考えられます。

  • WALLET_PASSWORD
  • WALLET_PATH

パスワードが正しいことを確認してください。また、ウォレットパスが前の「Oracle ディレクトリを作成する」セクションでディレクトリを作成したときに得た値と同一であることも確認してください。

 


著者について

IT 業界で 30 年以上の経験を積んできた Mike Revitt は、AWS のグローバルデータベーススペシャリストで、アデレードで CAD-CAM に 3 年を費やした後、イギリスに移住して 30 年近くデータベースと Oracle テクノロジーを扱う仕事に携わっています。Mike は、1990 年代半ばからグリッドテクノロジー、そして後にクラウドテクノロジーにも取り組んでおり、2008 年からはコンバージドインフラストラクチャを扱っています。

AWS に加わる前、Mike は AWS のパートナーのひとつで Global Head of Oracle Managed PaaS を務め、そのハイブリッドクラウド製品のオーナーとして、クラウドサービスとコンバージドインフラストラクチャに基づく PaaS および IaaS ソリューションの技術面と商業的側面のすべてにおける責任を担っていました。