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

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

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


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

hiring.png

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

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

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

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

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 、おおのさん、よろしくおねがいします!

2015年12月11日

Oracle Linux 6で初docker

RHEL6およびCentOS 6でDockerがサポートされていないという情報を見かけて、ぬぬぬと思っていたところ、

Installation on Oracle Linux

Docker is supported Oracle Linux 6 and 7.

を見つけて、元気がでてきたので初挑戦。

dockerのyumリポジトリを追加

# tee /etc/yum.repos.d/docker.repo <<-EOF
> [dockerrepo]
> name=Docker Repository
> baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/6
> enabled=1
> gpgcheck=1
> gpgkey=https://yum.dockerproject.org/gpg
> EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/6
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

dockerをyumでインストール

パッケージ名はdocker-engineでした。

# yum install docker
Loaded plugins: security, ulninfo
Setting up Install Process
dockerrepo                                               | 2.9 kB     00:00
dockerrepo/primary_db                                    | 6.1 kB     00:00
No package docker available.
Error: Nothing to do

# yum install docker-engine
Loaded plugins: security, ulninfo
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package docker-engine.x86_64 0:1.9.1-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package              Arch          Version             Repository         Size
================================================================================
Installing:
 docker-engine        x86_64        1.9.1-1.el6         dockerrepo        8.1 M

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 8.1 M
Installed size: 35 M
Is this ok [y/N]: y
Downloading Packages:
docker-engine-1.9.1-1.el6.x86_64.rpm                     | 8.1 MB     00:00
warning: rpmts_HdrFromFdno: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
Retrieving key from https://yum.dockerproject.org/gpg
Importing GPG key 0x2C52609D:
 Userid: "Docker Release Tool (releasedocker) <docker@docker.com>"
 From  : https://yum.dockerproject.org/gpg
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : docker-engine-1.9.1-1.el6.x86_64                             1/1
  Verifying  : docker-engine-1.9.1-1.el6.x86_64                             1/1

Installed:
  docker-engine.x86_64 0:1.9.1-1.el6

Complete!

dockerを起動してサンプルを動かしてみる

# service docker start
Starting docker:        .                                  [  OK  ]
# ps -ef | grep docker
root      6758     1  0 10:20 pts/0    00:00:00 /usr/bin/docker daemon
root      6796  6758 10 10:20 pts/0    00:00:00 mkfs.ext4 -E nodiscard,lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/docker-252:0-656137-base
root      6800 10488  0 10:20 pts/0    00:00:00 grep docker
# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b901d36b6f2f: Pull complete
0a6ba66e537a: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

# docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
0bf056161913: Pull complete
1796d1c62d0c: Pull complete
e24428725dd6: Pull complete
89d5d8e8bafb: Pull complete
Digest: sha256:a2b67b6107aa640044c25a03b9e06e2a2d48c95be6ac17fb1a387e75eebafd7c
Status: Downloaded newer image for ubuntu:latest
root@1924455023e5:/# uname -a
Linux 1924455023e5 3.8.13-16.2.1.el6uek.x86_64 #1 SMP Thu Nov 7 17:01:44 PST 2013 x86_64 x86_64 x86_64 GNU/Linux
root@1924455023e5:/#

無事動いたようです。 :-)

2015年12月10日

bkup_apiコマンドのバックアップ対象

bkup_apiコマンドは、RMANのバックアップ対象であるデータファイルや制御ファイルなどのデータベース構成ファイルだけではなく、ウォレットやOracle Net構成ファイルなどのファイルもバックアップします。

RMANには、これらのファイルをバックアップする機能はありません。このため、bkup_apiコマンドはtarコマンドを使用してこれらのファイルをtar.gz形式でアーカイブし、Oracle Storage Cloudにバックアップします。

なお、バックアップ対象のファイルは

  • /home/oracle/bkup/dbcfg.spec : DB設定ファイル
  • /home/oracle/bkup/oscfg.spec : OS設定ファイル

にリストアップされています。

-bash-4.1# cat /home/oracle/bkup/dbcfg.spec
### Oracle_Home configuration files.
#
# Doc Spec
dbcfg.spec
# DB id
dbid
#
# Directories
/u01/app/oracle/product/12.1.0/dbhome_1/admin/ORCL/xdb_wallet
/u01/app/oracle/admin/ORCL/xdb_wallet
/u01/app/oracle/admin/ORCL/opc_wallet
# Note: tde_wallet must be backed up in a different location than DATA bkup.
/u01/app/oracle/admin/ORCL/tde_wallet
/u01/app/oracle/admin/ORCL/cat_wallet
#/u01/app/oracle/product/12.1.0/dbhome_1/dbs
#/u01/app/oracle/product/12.1.0/dbhome_1/network/admin
#/u01/app/oraInventory
#
# Single files
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/opcORCL.ora
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapworcl
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/env_rdbms.mk
/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/ins_rdbms.mk
#
# Creg
/var/opt/oracle/creg.ini
#


-bash-4.1# cat /home/oracle/bkup/oscfg.spec
## OS Configuration Files
#
# Doc Spec
oscfg.spec
#
# Directories
/etc/rc.d
/home/oracle/bkup
#
# Single files
/home/oracle/.bashrc
/etc/crontab
/etc/sysctl.conf
/etc/passwd
/etc/group
/etc/oraInst.loc
/etc/oratab
/etc/fstab
-bash-4.1#

bkup_apiコマンドによるデータベースバックアップ

bkup_api bkup_startを実行して、バックアップ処理を行うと、内部的にRMANが実行され、データベースがバックアップされます。

先のエントリでご説明したとおり、RMANはすでにディスクバックアップに加えて、Oracle Storage Cloudへのバックアップ設定が行われています。

[oracle@testbk01 ~]$ rman target /

Recovery Manager: Release 12.1.0.2.0 - Production on Sun Dec 6 07:50:11 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1425502718)

RMAN>show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;←★
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 5 BACKUP TYPE TO BACKUPSET;←★
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' MAXPIECESIZE 2 G FORMAT   'cloudstorage_%d_%U' PARMS  'SBT_LIBRARY=libopc.so, ENV=(OPC_PFILE=/u01/app/oracle/product/12.1.0/dbhome_1/dbs/opcORCL.ora)';←★
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 2 G;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/12.1.0/dbhome_1/dbs/snapcf_ORCL.f'; # default

なお、RMANのデフォルトのバックアップ先デバイスはディスクに設定されていますが("CONFIGURE DEFAULT DEVICE TYPE TO DISK")、Oracle Database Cloud Serviceインスタンス作成時の「バックアップの保存先」に、「クラウド・ストレージおよびブロック・ストレージ」を指定した場合、bkup_api bkup_startでは、ディスクとOracle Storage Cloudの両方にバックアップが取得されるようです。 以下のステータス出力からも、primary backupにおいてディスク(local storage)に、secondary backupにおいてOracle Storage Cloud(cloud storage)にバックアップが取得されていることがわかります。

-bash-4.1# /var/opt/oracle/bkup_api/bkup_api bkup_status

########### DBAAS BACKUP API ######################
* Action:  bkup_status
* log:  /var/opt/oracle/bkup_api/bkup_api.log
* Current backup settings:
  catalog: no
  type: diskoss
* DBAAS utility logfile: /home/oracle/bkup/log/obkup.log
* Last registered Bkup: 12-07 09:31 API::1928:: Starting dbaas backup process
* Bkup state: finished

**************************************************
* API History: API steps
  12-07 09:31 API:: NEW PROCESS 1928
  12-07 09:31 API:: Starting dbaas backup process
  12-07 09:31 API:: Requesting the number of backups in your system ....
  12-07 09:31 API:: Your system has 1 backups
  12-07 09:31 API:: Running the following command:  /home/oracle/bkup/obkup
  12-07 09:55 API:: The dbaas backup process is completed
  12-07 09:55 API:: Searching for the new dbaas backup tag:
  12-07 09:55 API:: Multiple new dbaas backups were created
  12-07 09:55 API:: * TAG20151207T094129
  12-07 09:55 API:: * TAG20151207T094906
  12-07 09:55 API:: * TAG20151207T094924
  12-07 09:55 API:: Your new dbaas backup tag is TAG20151207T095506
  12-07 09:55 API:: BKUP COMPLETE YOUR BKUP TAG TAG20151207T095506
*************************************************
* Backup steps
  API:: Oracle database state is up and running
  API:: Performing backup to local storage (primary backup)←★★★
  API:: Executing rman instructions
  API:: ...... OK
  API:: Backup to local storage is completed←★★★
  API:: Clean MOTD.
  API:: Performing backup to cloud storage (secondary backup)←★★★
  API:: Executing rman instructions
  API:: ......OK
  API:: Backup to cloud storage is completed←★★★★
  API:: Clean MOTD.
  API:: Validating the backup repository:
  API::      All backup pieces are ok
  API:: Starting backup of config files
  API:: at time: 2015-12-07:09:55:40
  API:: Creating directories to store config files
  API:: Determining the oracle database id
  API::  DBID: 1425569508
  API:: Compressing config files into tar files
  API:: .... OK
  API:: Uploading config files to cloud storage
  API:: Completed at time: 2015-12-07:09:55:46
  API:: Config files backup ended successfully
  API:: All requested tasks are completed
*
* RETURN CODE:0
##################################################
-bash-4.1#

bkup_apiコマンドによるバックアップ取得

Database as a Service - Automated は、"Automated"という名称のとおり、いくつかのオペレーションを自動化できる仕組みが用意されています。

  • 自動バックアップ
  • パッチ適用
  • アップグレード
  • ポイント・イン・タイム・リカバリ(PITR)

データベースにおいて、もっとも重要なオペレーションであるバックアップについては、自動的に実行される仕組みがあります。その基本となるのが、bkup_apiコマンドです。

bash-4.1# /var/opt/oracle/bkup_api/bkup_api --help
Usage: bkup_api [options]

Backup  [bkup_start, bkup_status, bkup_stop, bkup_chkcfg, bkup_chgcfg]
Recover [recover_start, recover_status, recover_stop, recover_list]
Delete  [bkup_delete]                    Tag     [get_tag]
Wallet  [update_wallet]                    Clean   [clean_archlogs]

Options:
  -h, --help            show this help message and exit
  --rargs="-option args string"
                        Paremeters for the Recovery tool, they must be in
                        format "-pitr TAG20140117T061554 -data"
  -k, --keep            takes a long-term retetion backup
  --tag=--tag=DBAAS or JAAS
                        generates a retore point with the specified tag
  -b --bkup=JAAS20140805T2121, --bkup=--bkup=JAAS20140805T2121
                        Backup tag to be deleted only long term retetion
                        backups can be deleted [JAAS]
  -r 15, --retention_days=15
                        The recovery windows that it will be used
  -c 7, --bkup_cycle=7  Backup policy days
  -p *******, --password=*******
                        User password for oss connection
bash-4.1#

バックアップの実行は簡単で、rootユーザーでbkup_api bkup_startを実行するだけです。

-bash-4.1# /var/opt/oracle/bkup_api/bkup_api bkup_start

########### DBAAS BACKUP API ######################
* Action:  bkup_start
* log:  /var/opt/oracle/bkup_api/bkup_api.log
-bash-4.1# ** process started with PID: 1928
** see log file for monitor progress
-------------------------------------
-bash-4.1#

バックアップ完了前にコマンドはリターンし、プロンプトが返ります。

バックアップの状態を確認するにはbkup_api bkup_statusを実行します。

-bash-4.1# /var/opt/oracle/bkup_api/bkup_api bkup_status

########### DBAAS BACKUP API ######################
* Action:  bkup_status
* log:  /var/opt/oracle/bkup_api/bkup_api.log
* Current backup settings:
  catalog: no
  type: diskoss
* DBAAS utility logfile: /home/oracle/bkup/log/obkup.log
* Last registered Bkup: 12-07 09:31 API::1928:: Starting dbaas backup process
* Bkup state: running

**************************************************
  API:: Oracle database state is up and running
  API:: Performing backup to local storage (primary backup)
  API:: Executing rman instructions
*
* RETURN CODE:0
##################################################

-bash-4.1# /var/opt/oracle/bkup_api/bkup_api bkup_status

########### DBAAS BACKUP API ######################
* Action:  bkup_status
* log:  /var/opt/oracle/bkup_api/bkup_api.log
* Current backup settings:
  catalog: no
  type: diskoss
* DBAAS utility logfile: /home/oracle/bkup/log/obkup.log
* Last registered Bkup: 12-07 09:31 API::1928:: Starting dbaas backup process
* Bkup state: running

**************************************************
  API:: Oracle database state is up and running
  API:: Performing backup to local storage (primary backup)
  API:: Executing rman instructions
  API:: ...... OK
  API:: Backup to local storage is completed
  API:: Clean MOTD.
  API:: Performing backup to cloud storage (secondary backup)
  API:: Executing rman instructions
*
* RETURN CODE:0
##################################################

-bash-4.1# /var/opt/oracle/bkup_api/bkup_api bkup_status

########### DBAAS BACKUP API ######################
* Action:  bkup_status
* log:  /var/opt/oracle/bkup_api/bkup_api.log
* Current backup settings:
  catalog: no
  type: diskoss
* DBAAS utility logfile: /home/oracle/bkup/log/obkup.log
* Last registered Bkup: 12-07 09:31 API::1928:: Starting dbaas backup process
* Bkup state: finished

**************************************************
* API History: API steps
  12-07 09:31 API:: NEW PROCESS 1928
  12-07 09:31 API:: Starting dbaas backup process
  12-07 09:31 API:: Requesting the number of backups in your system ....
  12-07 09:31 API:: Your system has 1 backups
  12-07 09:31 API:: Running the following command:  /home/oracle/bkup/obkup
  12-07 09:55 API:: The dbaas backup process is completed
  12-07 09:55 API:: Searching for the new dbaas backup tag:
  12-07 09:55 API:: Multiple new dbaas backups were created
  12-07 09:55 API:: * TAG20151207T094129
  12-07 09:55 API:: * TAG20151207T094906
  12-07 09:55 API:: * TAG20151207T094924
  12-07 09:55 API:: Your new dbaas backup tag is TAG20151207T095506
  12-07 09:55 API:: BKUP COMPLETE YOUR BKUP TAG TAG20151207T095506
*************************************************
* Backup steps
  API:: Oracle database state is up and running
  API:: Performing backup to local storage (primary backup)
  API:: Executing rman instructions
  API:: ...... OK
  API:: Backup to local storage is completed
  API:: Clean MOTD.
  API:: Performing backup to cloud storage (secondary backup)
  API:: Executing rman instructions
  API:: ......OK
  API:: Backup to cloud storage is completed
  API:: Clean MOTD.
  API:: Validating the backup repository:
  API::      All backup pieces are ok
  API:: Starting backup of config files
  API:: at time: 2015-12-07:09:55:40
  API:: Creating directories to store config files
  API:: Determining the oracle database id
  API::  DBID: 1425569508
  API:: Compressing config files into tar files
  API:: .... OK
  API:: Uploading config files to cloud storage
  API:: Completed at time: 2015-12-07:09:55:46
  API:: Config files backup ended successfully
  API:: All requested tasks are completed
*
* RETURN CODE:0
##################################################
-bash-4.1#

なお、バックアップはcrontabに登録されているため、毎日01:01頃に実行されます。

-bash-4.1# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

01 01 * * * root /var/opt/oracle/bkup_api/bkup_api bkup_start←★

15 03 * * 6 oracle /var/opt/oracle/cleandb/cleandblogs.pl
-bash-4.1#

ただし、確認した限り、Oracle Database Cloud ServiceのCompute Node(Oracle Linux)のタイムゾーン設定はUTCのようでした。このため、日本時間で運用していると、(おそらく)想定外の時間にバックアップが実行されることに注意が必要です。Compute Node(Oracle Linux)のタイムゾーン設定をJSTにすればOKだと思いますが、気になる方はサポートに確認してみてください。

2015年12月 9日

Oracle Cloudトライアルサブスクリプションでのリソース制限

同時使用可能なCPU数やディスクサイズなどに制限があるようです。

調子に乗って(?)インスタンスを多数作成していたら、以下のメールが届きました。

trial_suspended.png

なお、インスタンスを削除すると、制限は解除されるようです。 trial_resumed.png

プロフィール

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

カテゴリー