4 クラウド・ストレージの使用

SQLclリリース21.2以降、DBMS_CLOUDパッケージを認証に使用して、クラウド・ストレージ内のオブジェクトにアクセスできます。

OCIまたはDBMS_CLOUDを使用して、次の処理を実行できます。
  • クラウド・ストレージでオブジェクトを配置、取得、削除およびピークします。
  • クラウド・ストレージ内のオブジェクトからデータベース・オブジェクトをロードします。
  • データベース表をクラウド・ストレージ内のオブジェクトにアンロードします。

表4-1 クラウド・ストレージへのアクセス

OCIを使用 DBMS_CLOUDを使用
オンプレミス・データベースとクラウド・データベースにアクセスできます クラウド・データベースのみにアクセスできます
デフォルトのクラウド・ストレージURLを設定し、コンパートメント、バケットおよびオブジェクトをリストし、クラウド・ストレージ内のオブジェクトの内容の一部を表示します デフォルトのクラウド・ストレージURLを設定し、オブジェクトをリストし、クラウド・ストレージ内のオブジェクトの内容の一部を表示します
認証およびアクセス用のOCIプロファイルを前提条件ステップとして作成します 認証は既存のOCIまたはSwift資格証明を使用して実行されます

クラウド・ストレージ(cs)コマンドを使用して、デフォルトのクラウド・ストレージURIを設定し、コンパートメント、バケットおよびオブジェクトをリストし、クラウド・ストレージ内のオブジェクトの内容の一部を表示します。

トピック

4.1 認証でのDBMS_CLOUDの使用

クラウド・ストレージには、DBMS_CLOUD Credentialコマンドを使用してアクセスできます。現在、DBMS_CLOUD CredentialはOracle Cloudデータベースをサポートしています。

DBMS_CLOUD Credentialコマンド(dbcc)を使用すると、次のことができます。
  • Swift、OCI資格証明または既存のOCIプロファイルを使用して資格証明を作成します。
  • 資格証明を有効化、無効化、更新および削除します。
  • 資格証明をリストします。
  • デフォルトの資格証明を設定します。

資格証明の作成

Swift資格証明を使用して認証を作成するには、次のコマンドを使用します。

dbcc create <new-credential-name> user <username> pass <password>

OCI資格証明を使用して認証を作成するには、次のコマンドを使用します。

dbcc create <new-credential-name> fingerprint <fingerprint> user_ocid <user-id> tenancy_ocid <tenancy-id> private_path <path-to-private-key>

OCIプロファイルを使用して認証を作成するには、次のコマンドを使用します。

dbcc create <new-credential-name> profile <oci-profile-name>

資格証明の有効化、無効化、更新および削除

資格証明を有効にするには、次のコマンドを使用します。

dbcc enable <credential-name>

資格証明を無効にするには、次のコマンドを使用します。

dbcc disable <credential-name>

資格証明を更新するには、次のコマンドを使用します。

dbcc update <credential-name> <attribute> <value>

ここで、<attribute> : [user_ocid] [tenancy | tenancy_id] [key_path | private_key_path] [print | fingerprint]

資格証明を削除するには、次のコマンドを使用します。

dbcc drop <credential-name>

資格証明のリスト

使用可能な資格証明のリストを表示するには、次のコマンドを使用します。

dbcc list

デフォルトの資格証明の設定

mycredをデフォルトの資格証明として設定するには、次のコマンドを使用します。

dbcc mycred

dbccコマンドのヘルプを検索するには、次のコマンドを使用します。

help dbccred

DBMS_CLOUD資格証明を作成して設定する例

次の例では、様々なタイプのDBMS_CLOUD資格証明を作成して設定するステップを詳しく説明します。


--Set the path to the Wallet zip file on your system
SQL> set cloudconfig <path-to-Wallet-file>
Operation is successfully completed.

--Supply the database user name, password and the database service name provided in the tnsnames.ora
SQL> connect admin/<password>@adw20200526_high
Connected.

--Set Cloud Storage URL to the bucket
SQL> cs https://objectstorage.us-ashburn-1.example.com/n/test/b/example
DBMS_CLOUD Credential: Not Set
OCI Profile: Not Set
Transer Method: Not Set
URI as specified: https://objectstorage.us-ashburn-1.example.com/n/test/b/example

--create CREDENTIAL using Swift authentication
SQL> dbcc create swiftcred user <username> pass <password>
Credential SWIFTCRED created.
DBMS_CLOUD Credential set to SWIFTCRED.
Transfer method set to DBMS_CLOUD.

--create CREDENTIAL using OCI authentication
SQL> dbcc create ocicred fingerprint ec:98:83:**:**:**:b5 
     user_ocid ocid1.user.oc1......**g4xoca 
     tenancy_ocid ocid1.tenancy.oc1.....a**3n3a 
     private_path C:\\Users\\test\\.oci/freedb_api_key.pem
Credential OCICRED created.
DBMS_CLOUD Credential set to OCICRED.
Transfer method set to DBMS_CLOUD.

--create CREDENITAL using an existing OCI profile called freedb
--If profile name is not passed as a parameter, it takes the default 
   OCI profile details which is already set.
SQL> dbcc create profcred profile [freedb]      
Credential PROFCRED created.
DBMS_CLOUD Credential set to PROFCRED.
Transfer method set to DBMS_CLOUD.

4.2 OCI認証用のOCIプロファイルの作成

OCI認証方式を使用するには、まずOCIプロファイルを設定する必要があります。

必要なSSHキーの設定方法およびOracle Cloud Infrastructureソフトウェア開発キットの構成方法の詳細は、Oracle Cloud Infrastructureドキュメント設定および前提条件を参照してください。

次の点に注意してください:

  • RSAキー・ペアを、PEM形式(2048ビット以上が必要)およびパスフレーズなしで生成します。このkey_fileをプロファイルで使用します。

  • 相対パスはSQLclの起動ディレクトリに基づいて解決されるため、構成ファイル内で相対パスを使用しないでください。使用した場合、key_fileが見つからない可能性があります。

  • Windowsでkey_fileのパスを指定するには、単一の円記号(\)のかわりに二重の円記号(\\)を使用します。

OCI構成ファイル(~/.oci/config)に含まれるプロファイルのリストを表示するには、次のコマンドを使用します。

oci profile

プロファイルにdemoを設定するには、次のコマンドを使用します。

oci profile demo

4.3 クラウド・ストレージ・コマンドのオプション

SQLclでcloudstoragecloud_storageまたはcsを使用して、クラウド・ストレージ・コマンドを起動できます。

Cloud Storageコマンドは、次の目的のCloud Storage関数を提供します。
  • デフォルトのクラウド・ストレージURIを設定および表示します
  • 転送方法、プロファイルおよび資格証明を設定および表示します
  • クラウド・ストレージのコンパートメント、バケットおよびオブジェクトをリストします
  • クラウド・ストレージ・オブジェクトを取得、配置、削除およびピークします。

SQLclのCloud Storageコマンドのオプションのリストを表示するには、次のように入力します。

help cs
コマンド・オプションは次のとおりです。
  • cs [ uri ] <uri>: デフォルトのクラウド・ストレージURIを設定します。URIには、ホストとオプションでネームスペース、バケットおよびオブジェクトが含まれている必要があります。

    Example:
    --host
    cs https://objectstorage.us-ashburn-1.oraclecloud.com
    --namespace 
    cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test
    –-bucket
    cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example
    --object 
    cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/employees.csv
  • cs oci [<profile>]: デフォルトの転送をOCIに設定します。オプションで、使用するプロファイルを指定します。

  • cs {DBC | DBMS_CLOUD} [<credential>]: デフォルトの転送をDBMS_CLOUDに設定します。オプションで、使用する資格証明を指定します。
  • cs clear: URIおよび転送のオプションを含むクラウド・ストレージの設定をクリアします。

  • cs show: 現在のデフォルトのクラウド・ストレージURI、転送方法、プロファイルおよび資格証明を表示します。

  • cs listc [ <compartment> ]: 指定されたコンパートメント内のコンパートメントをリストします。コンパートメントが指定されていない場合は、プロファイルで指定されているネームスペース内のコンパートメントをリストします。(OCIのみ)

  • cs listb <compartment>: コンパートメント内のバケットをリストします。(OCIのみ)

  • cs listo [ <bucket> ]: バケット内のオブジェクトをリストします。バケットは、URIまたはlistoコマンドで指定する必要があります。

  • cs delete [<qualifier>]: オブジェクトをクラウド・ストレージから削除します。
  • cs get [<qualifier>]: オブジェクトをクラウド・ストレージから取得します。
  • cs PUT [file-to-send-as-body] <qualifier>: ファイルをクラウド・ストレージにコピーします。
  • cs peek [ <qualifier> ] [ { pos | position} <position> ] [ size <size> ]: オブジェクトの内容を表示します:

    qualifierはオブジェクトの名前で、オプションでネームスペースおよびバケットによって修飾されます。修飾された名前と指定されたデフォルトURIの組合せによって、オブジェクトURIが完全に識別される必要があります。

    positionは、オブジェクト内での表示の開始位置です。

    sizeは、表示する文字数です。省略した場合、2000文字が表示されます。

4.4

この項では、いくつかの例を示します。

表へのクラウド・ストレージ・ファイルのロード

次の例は、クラウド・ストレージ・ファイルをデータベース表にロードする方法を示しています。

ユースケース1: DBMS_CLOUD認証方式を使用している場合、DBMS_CLOUD資格証明が設定され、転送方法がdbms_cloudに設定されます。

--Set the DBMS_CLOUD credential
SQL> cs dbc swiftcred

--Set Cloud Storage URI to the bucket
SQL> cs https://objectstorage.us-ashburn-1.example.com/n/test/b/example

DBMS_CLOUD Credential: SWIFTCRED                 
OCI Profile: Not Set
Transfer Method: dbms_cloud
URI as specified: https://objectstorage.us-ashburn-1.example.com/n/test/b/example

ユース・ケース2: OCIプロファイル認証方式を使用している場合、OCIプロファイルが設定され、転送方法がociに設定されます。

--Set the OCI profile
SQL> cs oci demo
--Set Cloud Storage URI to the bucket

SQL> cs https://objectstorage.us-ashburn-1.example.com/n/test/b/example

DBMS_CLOUD Credential: Not Set            
OCI Profile: Demo
Transfer Method: oci
URI as specified: https://objectstorage.us-ashburn-1.example.com/n/test/b/example

--Create Table "locations"
SQL> create table locations(location_id NUMBER(5),location_name VARCHAR2(40));
Table LOCATIONS created

--Load data from LOCATIONS_DATA_TABLE.csv in cloud storage into "locations" table of the schema for the current user
SQL> load locations cs /o/LOCATIONS_DATA_TABLE.csv

format csv

column_names on
delimiter ,
enclosure_left "
enclosure_right "
encoding UTF8
row_limit off
row_terminator default
skip_rows 0
skip_after_names

--Number of rows processed: 50
--Number of rows in error: 0
--Last row processed in final committed batch: 50
0 - SUCCESS: Load processed without errors

SQL> select count(*) from locations;

COUNT(*)
–--------
50

--Load data from LOCATIONS_DATA_TABLE.csv in your current local folder into "locations" table 
  of the schema for the current user
SQL> load locations cs LOCATIONS_DATA_TABLE.csv

クラウド・ストレージへの表データのアンロード

次の例は、locations表からクラウド・ストレージにデータをアンロードする方法を示しています。データはクラウド・ストレージの場所にアンロードされ、LOCATIONS_DATA_TABLE.csvという名前が付けられます。

--Set Cloud Storage URI to the bucket
SQL> cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example

–-Specify delimiter as | and terminator as <eol>
SQL> set loadformat delimiter | term <eol> csv

--Unload locations table into cloud storage
SQL> unload locations cs

DBMS_CLOUD Credential: SWIFTCRED            --Using DBMS_CLOUD authentication
OCI Profile: Not Set
Transfer Method: dbms_cloud
URI as specified: https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/
Final URI: https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/

format csv

column_names on
delimiter |
enclosure_left "
enclosure_right "
encoding UTF8
row_terminator <eof>

** UNLOAD Start ** at 2020.09.10-17.08.34
Export Separate Files to https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example
DATA TABLE LOCATIONS
File Name: LOCATIONS_DATA_TABLE.csv
Number of Rows Exported: 23
** UNLOAD End ** at 2020.09.10-17.08.39

-- Show file contents
SQL> cs peek /o/LOCATIONS_DATA_TABLE.csv

"LOCATION_ID"|"LOCATION_NAME"<eof>01|"California"<eof>02|"Alaska<eof>03|"Florida"<eof>04|"Texas"<eof>05|"Virginia"<eof>
06|"Louisiana"<eof>07|"Massachusetts"<eof>08|"Arkansas"<eof>09|"Oregon"<eof>10|"Hawaii"<eof>11|"Maryland"<eof>
12|"Pennsylvania"<eof>13|"Colorado<eof>14|"Michigan"<eof>15|"Minnesota"<eof>16|"Ohio"<eof>17|"Maine"<eof>18|"Arizona"<eof>
19|"Missouri"<eof>20|"Vermont"<eof>21|"Kansas"<eof>22|"Nevada"<eof>23|"Illinois"

コンパートメント、バケットおよびオブジェクトのリスト

次の例は、クラウド・ストレージ内のコンパートメント、バケットおよびオブジェクトをリストする方法を示しています。

ノート:

DBMS_CLOUD資格証明を使用する場合、バケット内のオブジェクトのみをリストできます。DBMS_CLOUDの転送方法は、コンパートメントおよびバケットのリストをサポートしていません。
cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test

--Lists the compartments in the namespace
SQL> cs listc

COMP_APEX
dbtst
old
ords
pdf-fn-compartment
sandbox
sqldev

--Lists the compartments in the compartment sqldev
SQL> cs listc sqldev

sqldev1

--Lists the buckets in the compartment sqldev
SQL> cs listb sqldev

example
test 

--Lists the objects in the bucket transfer
SQL> cs listo /b/example

COUNTRIES_DATA_TABLE.csv
DEPARTMENTS_DATA_TABLE.csv
REGIONS_DATA_TABLE.csv
LOCATIONS_DATA_TABLE.csv

--Displays the first 2000 characters of LOCATIONS_DATA_TABLE file
SQL> cs peek /o/LOCATIONS_DATA_TABLE.csv
 

PUTコマンドを使用したクラウド・ストレージへのローカル・ファイルのロード

次の例は、CS PUTコマンドおよびCloud Storageコマンドを使用して、ローカル・ファイルをクラウド・ストレージにロードする方法を示しています。

--Set Cloud Storage URI to the bucket
SQL> cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example

--Put an object from local directory into cloud storage
SQL> cs put C:\\Users\\JDOE\\EMPLOYEES_DATA_TABLE.csv /o/myemployees.csv

Put C:\\Users\\JDOE\\EMPLOYEES_DATA_TABLE.csv copied
        to https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/myemployees.csv

--List the objects in the bucket
SQL> cs listo

COUNTRIES_DATA_TABLE.csv
DEPARTMENTS_DATA_TABLE.csv
REGIONS_DATA_TABLE.csv
LOCATIONS_DATA_TABLE.csv
myemployees.csv

GETコマンドを使用したクラウド・ストレージからのファイルの取得

次の例は、CS GETコマンドとCloud Storageコマンドを使用してクラウド・ストレージからファイルを取得する方法を示しています。

--Set Cloud Storage URI to the bucket
SQL> cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/

--Set the local directory
SQL> cd C:\\Users\JDOE\\TempCS

--Get the myemployees.csv file from cloud storage
SQL> cs get /o/myemployees.csv

Get Object https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/myemployees.csv
copied to C:\Users\JDOE\TempCSemployees.csv

DELETEコマンドを使用したクラウド・ストレージ内のファイルの削除

次の例は、CS DELETEコマンドとCloud Storageコマンドを使用してクラウド・ストレージ内のファイルを削除する方法を示しています。

--Set Cloud Storage URI to the bucket
SQL> cs https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/

--Set the local directory
SQL> cd C:\\Users\JDOE\\TempCS

--Delete the myemployees.csv file in cloud storage
SQL> cs delete /n/test/b/example/o/myemployees.csv

Deleted Object
https://objectstorage.us-ashburn-1.oraclecloud.com/n/test/b/example/o/myemployees.csv 

別のユーザーへのDBMS_CLOUD資格証明の付与

次の例は、DBMS_CLOUD資格証明を作成して別のユーザーに付与する方法を示しています。


-- Create a DBMS_CLOUD credential using oci-profile
SQL> dbcc create jdoecred profile freedb

DBMS_CLOUD Credential: JDOECRED
OCI Profile: Not Set
Transfer Method: dbms_cloud
URI as specified: https://objectstorage.us-ashburn-1.example.com/n/test/b/example

-- Grant jdoecred to user jdoe
SQL> grant all on jdoecred to jdoe;

-- Connect to the Cloud instance as jdoe
SQL> connect jdoe/********@adw20200526_high

-- Create a synonym for jdoecred
SQL> create synonym mycred for admin.jdoecred;

-- Set the transfer method using the synonym mycred
SQL> cs dbc mycred

-- User can now list the objects in the Cloud Storage 'test' bucket 
because jdoe.mycred exists (as synonym)
SQL> cs listo