コーソル DatabaseエンジニアのBlog へようこそ

コーソル DatabaseエンジニアのBlogでは、 コーソル所属のDatabaseエンジニアである 渡部がOracle Databaseを中心としたDatabaseに関わる技術情報を発信しています。

コーソルでは、Oracle Databaseをはじめとするデータベース全般に関わるサービス(コンサルティング、設計、構築など)、オラクル製品のプロダクトサポートサービスを提供しています。 また、不定期で無償の技術セミナーを開催しています。


コーソルでは、Oracle Databaseスペシャリストになりたいエンジニア、 Oracle Database技術を活かして働きたいエンジニアを絶賛募集中です。

hiring.png

コーソルについて知るためには・・・

エンジニアのスキル向上を支援する各種施策については・・・

コーソルのエンジニアの多くが従事する、「Oracle Database サポートエンジニアの仕事」の利点について知るためには・・・。

コーソルで働くことに興味を持たれた方は・・・

2016年8月17日

Database Lounge Tokyo #2 で講演とパネルディスカッションします(LTスピーカ募集中!)

db tech showcase Tokyo 2016での講演「バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い」をきっかけにして、 Database Lounge Tokyoにお誘いいただきました(ほんとうに光栄です!)。

  • 2016/09/09(金) 19:15 - 21:30
  • 株式会社アシスト 東京都千代田区九段北4-2-1 市ヶ谷東急ビル

講演は、db tech showcase Tokyo 2016で使った資料を若干修正してお話しする予定です。

パネルディスカッションは、それぞれの製品に詳しいパネラー同士が質問をやりとりすることで、RDBMS製品の機能の違い、一般的な運用方法の違いについて、みなさんに理解していただけるようにしたいと考えています。 ご興味がある方は、ぜひお申込みくださいませ。

また、Lightning Talkのスピーカを募集しているようです。 スピーカになれば、抽選をパスしてイベントに参加できるはず ですので、エントリしてみてはいかがでしょうか?

2016年8月10日

2016年も2名がOracle OpenWorldへ!

コーソルは、2012年からUSのOracle OpenWorldにエンジニアを送り出しています。 2013年2014年2015年に引き続き、今年もエンジニア2名がOracle OpenWorldへ行くことになりました!

Oracle OpenWorldの様子(とサンフランシスコ小旅行の様子)は例年同様のコーソル 公式 Twitterアカウントより、写真を交えながらお伝えします! OOW開催期間中だけでよいので(笑)是非フォローしてみてください!

ちなみに今年のAppreciation Eventは・・・

Billy Joel! いいなぁ・・・

2016年7月 6日

JPOUG Oracle Database入学式 2016を開催しました

2016年6月8日(水)にJPOUG Oracle Database入学式 2016を開催しました。

このイベント、実は当初2016年4月26日(火)に開催予定でしたが、講師である私の体調不良により 日および場所を変えて改めて6月8日(水)に実施することになった経緯があります。 日程変更によりご迷惑をおかけした方にお詫びします。

当日参加された方には、資料をご提供しました。なお、抜粋版の資料は、以下で公開しています。

開催レポートは以下の通りです。会場のご提供ならびに丁寧なレポートをまとめていただいた21cafeのみなさん、本当にありがとうございます :-)

アンケートの満足率(よい+とても良い)は89%で、多くの方に満足いただけたようです。

若干意外だったのは、質問のレベルが高かったことです。純粋なOracle Database初学者というよりも、日々のシステム開発においてOracle Databaseに触れてはいるが、データベース専任担当ではなく、Oracle Databaseに関してまとまった学習する時間がないような立場の方が多かったのでは?と推測しています。

セミナー資料は、Oracle Database初学者に向けて作成していたため、狙いからはズレた形になりますが、満足いただけたことは「よし!」と考えたいと思います。Oracle Database初学者=ほやほやエンジニアの方は、そもそも勉強会へのアンテナを張るまでには至っていないことも多いでしょうから、もしかすると、Oracle Database初学者の方にはイベントの存在をお伝えること自体が難しいのかもしれません。

また時間を作って類似または後続のセミナーを実施したいと考えていますので、もしお近くにOracle Database初学者の方がいれば、イベントをご紹介いただけば嬉しいです。

db tech showcase Tokyo 2016で講演します(しかも3枠・・・)

db tech showcase Tokyo 2016で講演します。もし内容にご興味があるようでしたら、聴講くださいませ。

担当セッションは以下の2つ(3枠)です。

  • 2016/7/13 (水) 15:00-15:50 + 16:00-16:50 100分で速習!OSS-DB Exam Silver試験ポイント解説 (前編+後編)
  • 2016/7/15 (金) 16:00-16:50 バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い

100分で速習!OSS-DB Exam Silver試験ポイント解説

過去に実施した以下のセミナーの内容をベースに、PostgreSQLの最新バージョンを踏まえて修正した内容です。

バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い

バックアップと障害復旧の観点から、Oracle Database, MySQL, PostgreSQLの考え方の違いについて少しお話しようかと思います。 雑感的な内容ですので、ゆるい感じでご参加いただければ幸いです。セミナー中にどんどん質問を受け付けるような、ざっくばらんなスタイルでできたらと考えています。

当日までに修正される可能性がありますが、資料は事前に公開しています。参考にしてくださいませ。

2016年5月13日

【祝】 ORACLE MASTER Platinumダブルで累計No.1!

コーソルのみんなの頑張りのおかげで、

  • ORACLE MASTER Platinum Oracle Database 12c
  • ORACLE MASTER Platinum Oracle Database 11g

の両方で、資格取得者数 累計No.1を達成することができました!

上記一覧に未反映の合格者や、それなりに多数の受験予定者がおりますので、 数字は今後も増えてゆきますが、とりあえず現時点で記念のスクリーンショット :-)

ocm20160513_1.png

ocm20160513_2.png

2016年3月26日

Oracle Magazineにインタビュー記事が掲載されました

Oracle MagazineのCOMMUNITY: Peer-to-Peerにインタビュー記事が掲載されました。

COMMUNITY: Peer-to-Peerは、全世界のOracle ACEを紹介するOracle Magazineの1コーナーです。

つたない英語で恥ずかしいですが、動画もあります。

JPOUGのTシャツを着て、JPOUGを世界にアピールしてみました。 :-)

2016年3月 1日

Oracle Database 10gの資格がINACTIVE(失効)に

2016年3月1日(本日)を持って、Oracle Database 10gの資格が失効しましたよ。というシンプルなエントリです。 :-)

  • Oracle Recertification Policy | Certification | Oracle http://education.oracle.com/pls/webprod-plq-dad/dbpages.getpage?page_id=770

    重要:最新保有バージョンが Oracle Database 10g の方は、 2015年3月1日が当該資格の終了日となりますので、「Oracle が認める最新バージョン(*1) 」へのアップグレード試験配信が保障されている2016年2月29日までに、「Oracle が認める最新バージョン(*1) 」の資格にアップグレードされることを推奨しています。2016年2月29日までに資格のアップグレードが完了しない場合は、Oracle Database 10g データベース管理資格の CertView のステータスが一旦失効(Inactive)になります。

2015年12月14日

UTL_HTTPでHTTPS通信 / ORA-29024の回避

Oracle Databaseで定義済みPL/SQLパッケージに、HTTP通信を行うUTL_HTTPパッケージがあります。 エントリ オンプレミスのOracle DatabaseからOracle Database Cloud Serviceを作成する では、UTL_HTTPを用いて、Oracle Database Cloud ServiceのREST APIエンドポイントにアクセスし、Oracle Database Cloud Serviceインスタンスを作成しました。

Oracle Database Cloud ServiceのREST APIエンドポイントは、HTTPSを用いています。 このため、UTL_HTTPでHTTPSしたいわけですが・・・

SQL> declare
  2    ORACLECLOUD_USER      VARCHAR2(4000) := 'ryota.watabe@cosol.jp';
  3    ORACLECLOUD_PWD       VARCHAR2(4000) := 'password_string';
  4    ORACLECLOUD_IDDOMAIN  VARCHAR2(4000) := 'jpcosolxxxx';
    :
 78  end;
 79  /
declare
*
行1でエラーが発生しました。:
ORA-29273: HTTPリクエストに失敗しました ORA-06512:
"SYS.UTL_HTTP", 行1130
ORA-29024: 証明書の検証に失敗しました ORA-06512:
行48


SQL>

「ORA-29024: 証明書の検証に失敗しました」で実行に失敗してしまいました。

実は、UTL_HTTPでHTTPSを使用するには、接続先サーバのSSLサーバ証明書を検証するためのルートCA証明書が必要になります。

このプロシージャは、Secure Sockets Layer(SSL)、つまりHTTPSを経由するHTTP要求すべてに使用するOracle Walletを設定します。UTL_HTTPパッケージがSSLを介してHTTPサーバーと通信する場合、HTTPサーバーは認証局が署名したデジタル証明書をUTL_HTTPパッケージに示し、身分を証明します。Oracle Walletには、UTL_HTTPパッケージのユーザーが信頼する認証局のリストが含まれています。Oracle Walletは、HTTPS要求を作成するために必要です。

このため、以下の手順を実行します。

  1. orapki wallet createコマンドで(空の)Oracleウォレットを作成する
  2. ルートCA証明書cacert.pemを入手する
  3. cacert.pemをOracleウォレットにインポート可能な形式に変換する
  4. orapki wallet add -trusted_cert -cert コマンドでOracleウォレットにルートCA証明書を追加する
  5. OracleウォレットをOPENして、UTL_HTTPでHTTPSアクセスする

1. Oracleウォレットを作成する

orapki wallet createコマンドで(空の)ウォレットを作成します。

$ ORACLE_WALLET_PATH=/var/tmp/wallet
$ ORACLE_WALLET_PWD=WalletPasswd123
$
$ mkdir -p ${ORACLE_WALLET_PATH}
$ orapki wallet create -wallet ${ORACLE_WALLET_PATH} -pwd ${ORACLE_WALLET_PWD} -auto_login
Oracle PKI Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.

$

2. ルートCA証明書cacert.pemを入手する

Mozilla.orgで配布している(おそらくFirefoxに組み込まれている)ルートCA証明書を変換したファイルが http://curl.haxx.se/ca/cacert.pem にあるため、これをダウンロードします。

$ wget http://curl.haxx.se/ca/cacert.pem
--2015-12-11 12:03:46--  http://curl.haxx.se/ca/cacert.pem
Resolving curl.haxx.se... 80.67.6.50, 2a00:1a28:1200:9::2
Connecting to curl.haxx.se|80.67.6.50|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 256338 (250K)
Saving to: `cacert.pem.1'

100%[======================================>] 256,338      144K/s   in 1.7s

2015-12-11 12:03:48 (144 KB/s) - `cacert.pem.1' saved [256338/256338]

$

3. cacert.pemをOracleウォレットにインポート可能な形式に変換する

ダウンロードしたcacert.pemは、複数のルートCA証明書が結合された形式です。 この形式ままOracleウォレットにインポートしようとすると、先頭のルートCA証明書しかインポートされないため、 ウォレットにインポート可能な形式に変換します。具体的には、結合された複数のルートCA証明書を、別々のファイルに分解します。

$ awk '
>   split_after == 1 {n++;split_after=0}
>   /-----END CERTIFICATE-----/ {split_after=1}
>   {print > "cert" n ".pem"}' < cacert.pem
$ ls cert*.pem
cert100.pem  cert124.pem  cert148.pem  cert33.pem  cert57.pem  cert80.pem
cert101.pem  cert125.pem  cert149.pem  cert34.pem  cert58.pem  cert81.pem
cert102.pem  cert126.pem  cert14.pem   cert35.pem  cert59.pem  cert82.pem
cert103.pem  cert127.pem  cert150.pem  cert36.pem  cert5.pem   cert83.pem
cert104.pem  cert128.pem  cert151.pem  cert37.pem  cert60.pem  cert84.pem
cert105.pem  cert129.pem  cert152.pem  cert38.pem  cert61.pem  cert85.pem
cert106.pem  cert12.pem   cert15.pem   cert39.pem  cert62.pem  cert86.pem
cert107.pem  cert130.pem  cert16.pem   cert3.pem   cert63.pem  cert87.pem
cert108.pem  cert131.pem  cert17.pem   cert40.pem  cert64.pem  cert88.pem
cert109.pem  cert132.pem  cert18.pem   cert41.pem  cert65.pem  cert89.pem
cert10.pem   cert133.pem  cert19.pem   cert42.pem  cert66.pem  cert8.pem
cert110.pem  cert134.pem  cert1.pem    cert43.pem  cert67.pem  cert90.pem
cert111.pem  cert135.pem  cert20.pem   cert44.pem  cert68.pem  cert91.pem
cert112.pem  cert136.pem  cert21.pem   cert45.pem  cert69.pem  cert92.pem
cert113.pem  cert137.pem  cert22.pem   cert46.pem  cert6.pem   cert93.pem
cert114.pem  cert138.pem  cert23.pem   cert47.pem  cert70.pem  cert94.pem
cert115.pem  cert139.pem  cert24.pem   cert48.pem  cert71.pem  cert95.pem
cert116.pem  cert13.pem   cert25.pem   cert49.pem  cert72.pem  cert96.pem
cert117.pem  cert140.pem  cert26.pem   cert4.pem   cert73.pem  cert97.pem
cert118.pem  cert141.pem  cert27.pem   cert50.pem  cert74.pem  cert98.pem
cert119.pem  cert142.pem  cert28.pem   cert51.pem  cert75.pem  cert99.pem
cert11.pem   cert143.pem  cert29.pem   cert52.pem  cert76.pem  cert9.pem
cert120.pem  cert144.pem  cert2.pem    cert53.pem  cert77.pem  cert.pem
cert121.pem  cert145.pem  cert30.pem   cert54.pem  cert78.pem
cert122.pem  cert146.pem  cert31.pem   cert55.pem  cert79.pem
cert123.pem  cert147.pem  cert32.pem   cert56.pem  cert7.pem
$

4. OracleウォレットにルートCA証明書を追加する

orapki wallet add -trusted_cert -cert コマンドでOracleウォレットにルートCA証明書を追加します。

$ for i in /var/tmp/cert*.pem ; do
> orapki wallet add -wallet ${ORACLE_WALLET_PATH} -trusted_cert -cert \
>   "$i" -pwd ${ORACLE_WALLET_PWD}
> done
Oracle PKI Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
  :
Oracle PKI Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
$

5. OracleウォレットをOPENして、UTL_HTTPでHTTPSアクセスする

ルートCA証明書を追加したOracleウォレットをOPENしてから、HTTPSのURLにアクセスします。

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on 金 12月 11 12:11:11 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。
SQL> define ORACLE_WALLET_PATH=/var/tmp/wallet
SQL> define ORACLE_WALLET_PWD=WalletPasswd123
SQL> define url=https://support.oracle.com
SQL>
SQL> EXEC UTL_HTTP.SET_WALLET('file:&ORACLE_WALLET_PATH', '&ORACLE_WALLET_PWD');

PL/SQLプロシージャが正常に完了しました。

SQL> SELECT UTL_HTTP.REQUEST('&url') FROM DUAL;

旧   1: SELECT UTL_HTTP.REQUEST('&url') FROM DUAL
新   1: SELECT UTL_HTTP.REQUEST('https://support.oracle.com') FROM DUAL

UTL_HTTP.REQUEST('HTTPS://SUPPORT.ORACLE.COM')
--------------------------------------------------------------------------------
<HTML>
<HEAD>
<title>Oracle Configuration Support Manager</title>
<meta http-equiv="REFRESH" content="0;url=/epmos/faces/MosIndex.jspx"></HEAD>
<BODY>
</BODY>
</HTML>

SQL>

HTTPSでアクセスできました。 :-)

参考

REST APIを用いてOracle Database Cloud Serviceインスタンスを作成する

Oracle Database Cloud ServiceにはRESTのAPIが提供されており、情報の取得や操作を実行できます。

Alphabetical Listing of Endpoints in the REST API - Using Oracle Database Cloud - Database as a Service

REST APIとは、端的にいうと、HTTPリクエスト1発でキックできる処理のエンドポイントです。 サービスにREST APIが用意されていると、サービスに関する処理をプログラム可能になります。また、処理を、HTTPリクエストを発行できるコマンド(curlコマンドなど)を用いて簡単に実行でできるようになります。

というわけで、REST APIを用いてOracle Database Cloud Serviceインスタンスをさくっと作成してみましょう。 手順は以下の通りです。

  1. インスタンスに関する設定を記載したJSONファイルを用意する
  2. Oracle Database Cloud Serviceのエンドポイントに対して、curlコマンドでHTTPリクエストを発行する

1. JSONファイルを用意する

Request Body - Create a Service Instanceの記載にしたがって、設定値を記述したJSONファイルを用意します。

JSONファイルは、REST API処理で一般的に使用されるファイル形式です。詳細は JavaScript Object Notation - Wikipediaを参照ください。

以下は、Oracle Database 12.1.0.2のOracle Database Cloud Serviceインスタンスに対応するJSONファイルです。

{
  "serviceName": "DB12c-EE-EP",
  "version": "12.1.0.2",
  "level": "PAAS",
  "edition": "EE_EP",
  "subscriptionType": "HOURLY",
  "description": "created by REST API",
  "shape": "oc3",
  "parameters": [
    {
      "type": "db",
      "usableStorage": "15",
      "adminPassword": "Oracle123_",
      "sid": "PROD",
      "pdb": "PDB1",
      "failoverDatabase": "no",
      "backupDestination": "DISK",
    }
  ],
  "vmPublicKeyText": "ssh-rsa xxxx(snip)xxxx"
}

各項目の意味については、Request Body - Create a Service Instanceを参照いただきたいのですが、注意すべき項目について触れておきます。

  • "serviceName" : アイデンティティドメインで一意にする必要があるようです。
  • "level" : "PAAS" = Oracle Database Cloud Service Automated です。
  • "pdb" : "version"に12.1.0.2を選択した場合は、指定が必須のようです。
  • "backupDestination" : バックアップの取得先を指定します。"BOTH"を指定すると、ローカルディスクとOracle Storage Cloudにバックアップを取得します。
  • "vmPublicKeyText" : ssh公開鍵を文字列として指定します。作成したインスタンスには、このssh公開鍵に対応するssh秘密鍵を使ってアクセスします。

2. curlコマンドでHTTPリクエストを発行する

Oracle Database Cloud Serviceのエンドポイントに対して、 1.で作成したJSONファイルをcurlコマンドのデータ(--data)に指定して、 HTTPリクエストを発行します。

ORACLECLOUD_USER='ryota.watabe@cosol.jp'
ORACLECLOUD_PWD='password_string'
ORACLECLOUD_IDDOMAIN=jpcosolxxxx
CREATEDB_JSON_FILENAME=createdbcs1.json

ENDPOINT_PATH=/paas/service/dbcs/api/v1.1/instances/${ORACLECLOUD_IDDOMAIN}

curl --include --request POST \
  --user ${ORACLECLOUD_USER}:${ORACLECLOUD_PWD} \
  --header "X-ID-TENANT-NAME:${ORACLECLOUD_IDDOMAIN}" \
  --header "Content-Type:application/json" \
  --data @${CREATEDB_JSON_FILENAME} \
  https://dbaas.oraclecloud.com/${ENDPOINT_PATH}

留意点は以下の通りです。

  • curlの--userオプションで、Oracle Cloudの認証情報(ユーザー名:パスワード)を与えています。
  • curlの--headerオプションで、HTTPヘッダーX-ID-TENANT-NAMEを与えています。これには、Oracle Cloudのアイデンティティドメインを指定します。
  • 同様に、HTTPヘッダー "Content-Type:application/json" を指定しています。
  • curlの--dataオプションで、1.で作成したJSONファイルのコンテンツをHTTPリクエストに含めるデータとして指定しています。

これで(課金のことを心配しなければ :-P)さくさくOracle Database Cloud Serviceインスタンスが作成できます。 :-)

オンプレミスのOracle DatabaseからOracle Database Cloud Serviceを作成する

このエントリは、JPOUG Advent Calendar 2015 の 14日目の記事です。

昨日の記事は Kenichi Mihara さん の 実行計画を実行順に表示させてみる | サイクル&オラクル でした。 実行計画の実行順序は、実行計画で実行されている処理の意味を理解するために重要なポイントであるにも関わらず、適切な説明が少ないと感じていました。 実行計画の実行順序を正確に理解することは重要ですので、ぜひ参考にされてはどうでしょうか。

さて、私の記事はと言いますと・・・、全世界のOracle Cloudブログエントリの中でもっとも役に立たない記事だと思います。:-P スミマセン 。

オンプレミス環境のOracle DatabaseからOracle Database Cloud Serviceを作成してみました。

SQL> set serveroutput on
SQL> declare
  2    ORACLECLOUD_USER      VARCHAR2(4000) := 'ryota.watabe@cosol.jp';
  3    ORACLECLOUD_PWD       VARCHAR2(4000) := 'password_string';
  4    ORACLECLOUD_IDDOMAIN  VARCHAR2(4000) := 'jpcosolxxxx';
  5    PUBSSHKEY_TEXT        VARCHAR2(4000) := 'ssh-rsa ... (snip) ...';
  6
  7    ORACLECLOUD_INSTNAME varchar2(4000) := 'The-Most-Useless-DBCS-Example';
  8    ORACLE_DB_ADMIN_PWD varchar2(4000) := 'Oracle123_';
  9
 10    ORACLE_WALLET_PATH varchar2(100) := 'file:/var/tmp/wallet';
 11    ORACLE_WALLET_PWD  varchar2(100) := 'WalletPasswd123';
 12    req UTL_HTTP.REQ;
 13    res UTL_HTTP.RESP;
 14
 15    url varchar2(4000) := 'https://dbaas.oraclecloud.com/paas/service/dbcs/api/v1.1/instances/'
 16       || ORACLECLOUD_IDDOMAIN;
 17    name varchar2(4000);
 18    value VARCHAR2(1024);
 19    buffer varchar2(4000);
 20
 21    createdb_json varchar2(4000) := '
 22  {
 23    "serviceName": "' || ORACLECLOUD_INSTNAME || '",
 24    "version": "12.1.0.2",
 25    "level": "PAAS",
 26    "edition": "EE_EP",
 27    "subscriptionType": "HOURLY",
 28    "description": "created by REST API",
 29    "shape": "oc3",
 30    "parameters": [
 31      {
 32      "type": "db",
 33      "usableStorage": "15",
 34      "adminPassword": "' || ORACLE_DB_ADMIN_PWD || '",
 35      "sid": "ORCL",
 36      "pdb": "PDB1",
 37      "failoverDatabase": "no",
 38      "backupDestination": "DISK"
 39      }
 40    ],
 41    "vmPublicKeyText": "' || PUBSSHKEY_TEXT || '"
 42  }
 43  ';
 44
 45  begin
 46    -- DBMS_OUTPUT.PUT_LINE(createdb_json);
 47
 48    UTL_HTTP.set_wallet(ORACLE_WALLET_PATH, ORACLE_WALLET_PWD);
 49    req := UTL_HTTP.BEGIN_REQUEST(url, 'POST',' HTTP/1.1');
 50    UTL_HTTP.SET_AUTHENTICATION(req, ORACLECLOUD_USER, ORACLECLOUD_PWD);
 51    UTL_HTTP.SET_HEADER(req, 'user-agent', 'mozilla/4.0');
 52    UTL_HTTP.SET_HEADER(req, 'content-type', 'application/json');
 53    UTL_HTTP.SET_HEADER(req, 'X-ID-TENANT-NAME', ORACLECLOUD_IDDOMAIN);
 54    UTL_HTTP.SET_HEADER(req, 'Content-Length', length(createdb_json));
 55
 56    UTL_HTTP.WRITE_TEXT(req, createdb_json);
 57    res := UTL_HTTP.GET_RESPONSE(req);
 58
 59    -- handle HTTP respose
 60    DBMS_OUTPUT.PUT_LINE('HTTP response status code: ' || res.status_code);
 61    DBMS_OUTPUT.PUT_LINE('HTTP response reason phrase: ' || res.reason_phrase);
 62    FOR i IN 1..UTL_HTTP.GET_HEADER_COUNT(res) LOOP
 63      UTL_HTTP.GET_HEADER(res, i, name, value);
 64      DBMS_OUTPUT.PUT_LINE(name || ': ' || value);
 65    END LOOP;
 66
 67    begin
 68      loop
 69        UTL_HTTP.READ_LINE(res, buffer);
 70        DBMS_OUTPUT.PUT_LINE(buffer);
 71      end loop;
 72      UTL_HTTP.END_RESPONSE(res);
 73    exception
 74      when UTL_HTTP.END_OF_BODY
 75      then
 76        UTL_HTTP.END_RESPONSE(res);
 77    end;
 78  end;
 79  /
HTTP response status code: 202
HTTP response reason phrase: Accepted
Date: Fri, 11 Dec 2015 05:28:47 GMT
Server: Oracle-Application-Server-11g
Location:
https://dbaas.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/jpcosolxxxx/status/create/job/759758
Content-Length: 0
X-ORACLE-DMS-ECID: (snip)
X-ORACLE-DMS-ECID: (snip)
X-Frame-Options: DENY
Service-URI:
https://dbaas.oraclecloud.com:443/paas/service/dbcs/api/v1.1/instances/jpcosolxxxx/The-Most-Useless-DBCS-Example
Vary: Accept-Encoding,User-Agent
Retry-After: 60
Content-Language: en
Connection: close
Content-Type: application/json

PL/SQLプロシージャが正常に完了しました。

SQL>

create_dbcs_using_rest_api.png

技術的な解説は別記事に。:-P

JPOUG Advent Calendar 2015の15日目は、おおの たかし さんです。私と違って、役に立つ内容であるはず :-P 、おおのさん、よろしくおねがいします!

プロフィール

Ryota WATABE / 渡部 亮太

100x100.jpg

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

  • Oracle ACE
  • AWS Certified Solutions Architect - Associate
  • Oracle Database 12c Administrator Certified Master (ORACLE MASTER Platinum Oracle Database 12c)
  • Oracle Database 11g Certified Master (ORACLE MASTER Platinum Oracle Database 11g)
  • Oracle Database 11g Data Warehousing Certified Implementation Specialist
  • Oracle Database 11g Security Certified Implementation Specialist
  • Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid Infrastructure Administrator
  • Oracle Certified Expert, Oracle Exadata X3 Administrator
  • Oracle Exadata 11g Certified Implementation Specialist
  • Oracle Database 10g Certified Master (ORACLE MASTER Platinum Oracle Database 10g) <INACTIVE>
  • Oracle Database 10g Managing Oracle on Linux Certified Expert <INACTIVE>
  • Oracle Database 10g: Real Application Clusters Administrator Certified Expert <INACTIVE>
  • Oracle PL/SQL Developer Certified Associate
  • Oracle Certified Professional, MySQL 5.6 Database Administrator
  • Oracle Certified Professional, MySQL 5 Database Administrator
  • Cisco Certified Network Associate (CCNA) <INACTIVE>
  • Cisco Certified Network Associate Security (CCNA Security) <INACTIVE>
  • OSS-DB Gold (PostgreSQL 9)
  • OSS-DB Silver (PostgreSQL 9)
  • Oracle Linux 6 Certified Implementation Specialist
  • LPIC 301 Core (Linux)
  • Oracle Certified Java Programmer, Silver SE 7
  • Oracle WebLogic Server 12c Certified Implementation Specialist

カテゴリー