[Docker] MONDAY SPOTLIGHT:Announcing the Oracle Container Registry

原文はこちら。
https://blogs.oracle.com/linux/entry/monday_spotlight_announcing_the_oracle

Oracle Container Registryの一般提供を発表できうれしく思います。Container RegistryはOracle製品をDockerコンテナで使う上でシンプルにアクセスできるようにデザインされています。
Oracle Container Registryから利用できる製品は以下の通りです。
  • Oracle Linux 7、6、5
  • Oracle JDK 8 (Server JRE)
  • Oracle WebLogic Server 12、Tuxedo、CoherenceおよびFusion Middleware Web Tier
  • Oracle Database 12c Standard Edition 2およびEnterprise Edition
  • MySQL 5.7 Community Edition
Oracleは今後、製品を追加してリストを拡張していく予定です。
現時点では、Oracle Container RegistryへのアクセスはUS、UK、オーストラリアのお客様に限定しています。

How do I login to the Oracle Container Registry?

ブラウザで以下のURLを開きます。
Oracle Container Registry
https://container-registry.oracle.com
初めてこのサイトを訪れる場合、お持ちのOracle SSO資格証明との関連付けもしくは新規アカウントを作成する必要があります。[Register]をクリックして、以下のいずれかを選択します。
  • [I Already Have an Oracle Single Sign On Account] (既にOracle Single Sign Onアカウントを持っている)ため、既存のアカウントと関連付ける 
  • [I Don't Have an Oracle Single Sign On Account] (Oracle Single Sign Onアカウントを持っていない)ため、アカウントを新規作成する
アカウントを作成、もしくは既存アカウントとの関連付けが済めば、ログインボタンをクリックしてContainer Registryにログインします。ライセンス契約条項を読んで受諾するよう表示が出てきます。Dockerコマンドラインツールを使ってイメージをダウンロードする際には、ライセンス契約条項を受け入れる必要があること、ライセンス契約条項の受諾は8時間のみ保持されることにご注意ください。
ライセンス契約条項を受け入れた後、利用可能な製品カテゴリや、Dockerクライアントを使ってレジストリからPullする対象のイメージをチェックすることができます。

How do I pull images using the Docker client?

Web画面でライセンスを受諾すれば、Dockerクライアントを使ってログインし、イメージをPullできます。
まず、docker loginコマンドを使ってContainer Registryにログインします。
$ docker login container-registry.oracle.com
Web画面で登録し、ライセンス契約条項を受け入れた際に利用したOracle SSO資格証明と同じものを使う必要があります。ログインに成功すると、イメージをPullできます。
$ docker pull container-registry.oracle.com/java/serverjre:8
各イメージにはドキュメントがあり、Container RegistryのWeb画面で確認できます。

How do I store images locally?

ローカルのDockerレジストリを配備して、Oracle Container Registryとローカルで作成および拡張されたイメージの両方を格納することを推奨します。これにより、インターネット経由で毎回ダウンロードせずに、ローカルでサーバーにイメージを配信できます。
Oracle Linux Docker User Guideには、ローカル・レジストリの設定方法が記載されています。
Oracle® Linux Docker User's Guide
http://docs.oracle.com/cd/E52668_01/E75728/html/index.html

How do I adapt and extend these images?

Oracleは、お客様やユーザーがOracle製品をDockerコンテナ内で触ってみる上で便利な方法を提供する目的で、これらのイメージを提供しています。
しかしながら、Oracle Docker Images GitHubリポジトリも提供しております。こちらには、基本製品のDockerfilesだけでなく、これらのイメージを拡張し、各製品のカスタムコンテナを作成するためのサンプルが含まれています。
Official source for Docker configurations, images, and examples of Dockerfiles for Oracle products and projects
https://github.com/oracle/docker-images
このGitHubリポジトリファイルを使って再作成したり、オンプレミスの要件に合わせてベースイメージを適合させることもできます。

Support

DockerのサポートはOracle Linux BasicもしくはPremier Support Subscriptionsをお持ちのお客様であれば追加費用は必要ありません。
有償サポートをご契約でない場合は、Oracle Communityフォーラムでピア・サポート(Peer Support:同じような立場の人からの支援)を受けることができます。
Oracle Community Forum
https://community.oracle.com/

[Java] JAX-RS 2.1 Reactive Client API

原文はこちら。
https://blogs.oracle.com/PavelBucek/entry/jax_rs_2_1_reactive

Marekに代わって、JAX-RSの共同Spec leadに選ばれたことを発表できうれしく思っています。ってわけで、この先数ヶ月間、おおよそJavaOne 2017までの間に関するエントリを記載します。

様々な仕様における議論をフォローしているのであれば、昨年のJAX-RSの議論は非常に閑散としたものだったことにお気づきかもしれません。しかし、変わりつつあります。いや、既に変わりました。Expert Group (EG) はアップデートされたスケジュールで、主として以下の3件について作業をしています。
  • Reactive Client API
  • Server Sent Events
  • Non-blocking I/O
最初の2件は、既に提案済みではあるものの、まだExpert Groupから祝福されてはいませんでした。そのため、(必要であれば)アップデートし、レビューの上、そのコメントを反映する必要がありますが、実際にReactive Client APIで発生しましたので、このエントリではその内容をまとめます。

JAX-RS Reactive Client API

まず、この機能の目的は、クライアント側でのリアクティブスタイルのプログラミングのサポートを含めることであって、それ以外のことはありません。また、別のクライアントを作成したくはありません。既存のものは既に同期および非同期のリクエスト実行をサポートしており、これをリアクションスタイルで拡張したいと考えています。
簡単な例を見てみましょう。
CompletionStage<Response> csResponse = ClientBuilder.newClient()
                                       .target("http://oracle.com")
                                       .request()
                                       .rx()
                                       .get();
何か新しいものがあることに気付かれたことでしょう。戻り型がjavax.ws.rs.Responseでも、(rx()がasync()に置き換えられた場合には)Future <Response>でもなく、Client fluent API呼び出しチェーンにある新しいメソッド、rx()です。
javax.ws.rs.Response
http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Response.html 
CompletionStageは、Java 8で導入された新しいインターフェースです。これはプラットフォームに組み込まれた唯一のリアクティブ標準です(詳細は後で)。今回、rx() メソッドが追加されたことにより、SyncInvoker/AsyncInvokerから、新しいRxInvokerに切り替えることができるようになりました。
Interface SyncInvoker
https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/SyncInvoker.html
Interface AsyncInvoker
https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/AsyncInvoker.html
RxInvokerは他のメソッドと同じメソッドを定義しますが、同じ方法で指定された戻り値の型は持ちません。CompletionStageRxInvokerという、現在提案中のAPIで実施しているように、CompletionStageに対してサブクラスを作成し、再定義することができます。
CompletionStageRxInvoker.java
https://github.com/jax-rs/api/blob/master/jaxrs-api/src/main/java/javax/ws/rs/client/CompletionStageRxInvoker.java
rx() メソッドにはいくつかのバリエーションがあります。1つはExecutorServiceの提供に関連し、もう1つはRxInvokerクラスの提供に関するものです。
ExecutorService
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html 
前者は簡単に説明ができます。つまり、リアクティブな呼び出しは本質的に非同期であって、スレッドプールやExecutorServiceを指定できるようにしたい、ということです(例えば、後で再度呼び出されたり、クライアント全体にわたる非同期executorサービス構成を許可することによって削除されたりする可能性があります)。後者は拡張性に関するものです。

Reactive Extensions

リアクティブなアプリケーションをJavaで実装する場合、さまざまなフレームワークが提供する他のデータ型を知っていることがほとんどでしょう。Guava、RxJavaなどといった、これらのフレームワークは、CompletionStageと同様の機能を提供しますが、APIが異なります。特に、他の非標準フレームワークを使って作成されたアプリケーションを有していて、JAX-RSができるだけ簡単に使用できるようにしたい場合は、これらを使用すると便利です。 コード例を見てみましょう。
Client client = ClientBuilder.newClient();
client.register(FlowableProvider.class);

Flowable<Response> csResponse = client.target("http://oracle.com")
                                .request()
                                .rx(FlowableInvoker.class)
                                .get();
ここで、JAX-RSのResponseを取得する際に、RxJava2のFlowableを利用できることがわかります。
Flowable
http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html 
FlowableProvider、FlowableInvokerとも、第三者が提供しています。たとえば、RxJava2の開発者コミュニティのJAX-RSが十分に重要と考える場合、これらのクラスを含む拡張モジュールがリリースされる可能性があります。また、いつものように、任意のJAX-RS実装は機能を選択でき、同様のプロバイダを実装の一部として提供することができます。
変更される可能性があるため、詳細に入ることは避けますが、現時点では、これが拡張性の提供に関する最善の方法であるとの結論に達したようです。議論の経緯を知りたい方は、JAX-RS仕様のExpert Groupメーリングリストをご覧ください。

新たに提案されたAPIを気に入ってもらえることを願っています。何かコメントがありましたら、JAX-RSプロジェクトのユーザーメーリングリストに投稿してください。

Links, mailing lists, etc.

[Database] Release Dates Oracle Database 12.2.0.1 on-prem - Extended Support Waiving for Oracle 11.2.0.4 / 12.1.0.2

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/release_dates_oracle_database_12

(原文執筆時点での)昨晩最も重要なMOS Note: 742060.1がアップデートされ、オンプレミス版Oracle Database 12.2.0.1のリリース予定日が追加されました。
さらに、Oracle Database 11.2.0.4および12.1.0.2の Waived Extended Support(無償Extended Support)の日付も延長および追加されました。

詳細は以下のURLをご覧ください。
Release Schedule of Current Database Releases (Doc ID 742060.1)
https://support.oracle.com/rs?type=doc&id=742060.1
要約すると、
  • Exadata および SuperCluster 向けOracle Database 12.2.0.1 はまもなくリリースされる予定
  • Exadata/SuperCluster 向けOracle Database 12.2.0.1がリリースされた後、Intel Linux x86(訳注:原文ではx86と記載していますが、当然ながらx86-64です)およびSolarisプラットフォーム(SPARC、Intelとも) 向けOracle Database 12.2.0.1がリリースされる予定(詳細の日付は、先ほどのMy Oracle Supportのドキュメントをご覧ください)
  • Oracle Database 11.2.0.4の無償Extended Support期間が2018年12月末まで延長(これまでは2017年5月末が期限でした)
  • Oracle Database 12.1.0.2の無償Extended Support期間は2019年7月末日まで
Oracle 12.2 12.1 11.2.0.4 Release Map

[Database] Having fun with PDB LOCKDOWN PROFILES

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/having_fun_with_pdb_lockdown

Oracle Database 12.2(現時点ではOracle Database Cloud Serviceでご利用いただけます)には、PDBロックダウンプロファイルと呼ばれる新機能があります。実のところ、このパラメータはOracle Database 12.1.0.2に存在してはいたもののドキュメントに記載がなく、機能しませんでした。
New (some undocumented) Parameters in Oracle 12.1.0.2
https://blogs.oracle.com/UPGRADE/entry/new_undocumented_parameters_in_oracle

PDB Lockdown Profiles

PDB Lockdown Profilesは、主に高度に共有された環境でデータベースを使用しながらもセキュリティを必要とする場合に、アクセスの制限や有効化を細かく制御する方法です。このアイデアは、グラントの上に制限を埋め込む、すなわち特定のグラントを取り除く、というものです。たとえば、ALTER SYSTEMを実行しているときに、特定のPDBにログインしたユーザーのみに対しoptimizer_modeおよびcursor_sharingパラメータを変更できるように許可することができます。
データベース概要の用語集のページには以下のような説明があります。
A security mechanism to restrict operations that are available to local users connected to a specified PDB.
指定されたPDBに接続中のローカル・ユーザーが使用可能な操作を制限するためのセキュリティ・メカニズム
概要はConcept Guideに、詳細はSecurity Guideに記載があります。
Oracle® Database Concepts 12c Release 2 (12.2)
Overview of PDB Lockdown Profiles
http://docs.oracle.com/database/122/CNCPT/overview-of-the-multitenant-architecture.htm#CNCPT-GUID-1F6D3E4F-786A-47A0-A36C-83BAB75FCDAE
Oracle® Database概要 12cリリース2 (12.2)
PDBロックダウン・プロファイルの概要
http://docs.oracle.com/cd/E82638_01/CNCPT/overview-of-the-multitenant-architecture.htm#GUID-1F6D3E4F-786A-47A0-A36C-83BAB75FCDAE
Oracle® Database Security Guide 12c Release 2 (12.2)
Using PDB Lockdown Profiles to Restrict Operations on PDBs
http://docs.oracle.com/database/122/DBSEG/configuring-privilege-and-role-authorization.htm#DBSEG-GUID-AB5E62DB-7E2A-4B5A-BA96-A2BD2DF15275
Oracle® Databaseセキュリティ・ガイド 12cリリース2 (12.2)
PDBロックダウン・プロファイルを使用したPDBでの操作の制限
http://docs.oracle.com/cd/E82638_01/DBSEG/configuring-privilege-and-role-authorization.htm#GUID-AB5E62DB-7E2A-4B5A-BA96-A2BD2DF15275

How-to-Lockdown-Profile

新規作成したPDBを使って始めます。
SQL> create pluggable database PDB2 admin user adm identified by adm file_name_convert=('/oradata/CDB2/pdbseed', '/oradata/CDB2/pdb2');
まず、ロックダウンプロファイルを作成する必要があります。
SQL> create lockdown profile P1;
続いて、プロファイルを変更し、ALTER SYSTEMを使ってoptimizer_modeとcursor_sharingだけを変更できるようにします。
SQL> alter lockdown profile P1 disable statement=('ALTER SYSTEM') clause=('SET') OPTION ALL EXCEPT=('optimizer_mode','cursor_sharing');
最後に、PDBロックダウンプロファイルを有効化する必要があります。
SQL> alter system set PDB_LOCKDOWN=P1;
確認しましょう。
SQL> show parameter pdb_l

NAME          TYPE    VALUE
------------- ------- ------
pdb_lockdown  string  P1

Where the fun begins ...

では、デフォルトのSYSユーザーで接続しましょう。定義により、SYSは共通ユーザーです。PDB2に切り替えます。
$> sqlplus / as sysdba

SQL> alter session set container=PDB2;

SQL> alter system set sql_trace=TRUE;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ほう。では、試してみましょう。
SQL> alter system set cursor_sharing='FORCE';
System altered.

SQL> alter system set optimizer_mode='FIRST_ROWS_10';
System altered.
OK、動きましたね。でもまだSQL_TRACEをセッションレベルで変更できるでしょうか?もちろんできます。
SQL> alter session set SQL_TRACE=TRUE;
Session altered.
ALTER SYSTEM だけを制限したのであって、ALTER SESSIONを制限してはいませんから、理に適っていますね。
では、同様にこちらもやってみましょう。
SQL> alter session set container=cdb$root;
Session altered.

SQL> alter lockdown profile P1 disable statement=('ALTER SESSION') clause=('SET') OPTION ALL EXCEPT=('optimizer_mode','cursor_sharing')
Lockdown Profile altered.
ドキュメントにはこんな例があります。
CREATE LOCKDOWN PROFILE medium;
ALTER LOCKDOWN PROFILE medium DISABLE STATEMENT=('ALTER SYSTEM');
ALTER LOCKDOWN PROFILE medium ENABLE STATEMENT=('ALTER SYSTEM') CLAUSE=('FLUSH SHARED POOL');
Oracle® Database Concepts 12c Release 2 (12.2)
Example 19-6 Creating a PDB Lockdown Profile
http://docs.oracle.com/database/122/CNCPT/overview-of-the-multitenant-architecture.htm#CNCPT-GUID-B964031E-8ACE-4603-8F1E-DD173BE5BA01
Oracle® Database概要 12cリリース2 (12.2)
例19-6 PDBロックダウン・プロファイルの作成
http://docs.oracle.com/cd/E82638_01/CNCPT/overview-of-the-multitenant-architecture.htm#GUID-1F6D3E4F-786A-47A0-A36C-83BAB75FCDAE__GUID-AD907A15-AC08-4765-AE35-EFF48AE4014E
これはALTER SYSTEMを使う場合、ALTER SYSTEM  FLUSH SHARED POOLコマンドのみを許可します。
SQL> alter system set pdb_lockdown='MEDIUM';
  alter system set pdb_lockdown='MEDIUM'
*
ERROR at line 1:
ORA-01031: insufficient privileges

SQL> alter system set sql_trace=true;
alter system set sql_trace=true
*
ERROR at line 1:
ORA-01031: insufficient privileges
もちろん、既存のプロファイルに追加して、特定の機能を無効化することもできます。
SQL> alter session set container=cdb$root;
Session altered.

SQL> ALTER LOCKDOWN PROFILE medium DISABLE FEATURE=('XDB_PROTOCOLS');
Lockdown Profile altered

Which profiles do exist and what's defined?

まず第1に、PDB_LOCKDOWNパラメータはPDBレベルで変更可能です。つまりこれは異なるPDBごとに異なるプロファイルを持つことができます。しかしテストした限りでは、PDBで1個のプロファイルのみがアクティブで有効化することはできません。

既存のプロファイルとその内容を検索できるでしょうか。
SQL>  select profile_name, rule_type, rule, clause, clause_option, status from DBA_LOCKDOWN_PROFILES order by 1;
PROFILE_NAME   RULE_TYPE  RULE           CLAUSE     CLAUSE_OPTION   STATUS
-------------- ---------- -------------- ---------- --------------- -------
MEDIUM         STATEMENT  ALTER SYSTEM                              DISABLE
MEDIUM         FEATURE    XDB_PROTOCOLS                             DISABLE
P1             STATEMENT  ALTER SESSION  SET        CURSOR_SHARING  ENABLE
P1             STATEMENT  ALTER SYSTEM   SET        OPTIMIZER_MODE  ENABLE
P1             STATEMENT  ALTER SYSTEM   SET        CURSOR_SHARING  ENABLE
P1             STATEMENT  ALTER SESSION  SET        OPTIMIZER_MODE  ENABLE
P1             STATEMENT  ALTER SESSION  SET                        DISABLE
P1             STATEMENT  ALTER SYSTEM   SET                        DISABLE
PRIVATE_DBAAS                                                       EMPTY
PUBLIC_DBAAS                                                        EMPTY
SAAS                                                                EMPTY

11 rows selected.

Summary

これは非常に強力な機能ですが、将来的には、特定のことがうまく動かない理由を調べるのが難しいかもしれません。ORA-1031のエラーが、常に正しいガイドをしてくれるでしょう。

ちょっと困るところ
常に物事を簡素化し、管理を容易にすることについて話していますが、PDB Lockdown Profilesを使うと、非常に物事が複雑になり得ますし、同僚を苛立たせる可能性があります(しないでくださいね)。 あまり物事を複雑にしないでくださいね。

[Database] New SPFILE parameters in Oracle Database 12.2.0.1

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/new_spfile_parameters_in_oracle

Oracle Database 12.2.0.1はOracle Cloudでご利用いただけます。
そして、このリストは、Oracle Database 12.1.0.2と比較して新しいinit.ora/spfileのパラメータ46個をまとめたものです。これには可能な限りOracle Database 12.2リファレンスのドキュメントへのリンクを含めています。
パラメータリンク 説明
allow_global_dblinks 英語
日本語
データベース・リンクのLDAP参照をデータベースに許可するかどうか
allow_group_access_to_sga 英語
日本語
UNIXプラットフォームで共有メモリーへのgroupアクセスを制御
approx_for_aggregation 英語
日本語
集計問合せのための正確な問合せ処理を近似問合せ処理に置き換え
approx_for_count_distinct 英語
日本語
COUNT (DISTINCT expr)問合せを自動的にAPPROX_COUNT_DISTINCT問合せに置き換え
approx_for_percentile 英語
日本語
完全パーセンタイル関数をそれに対応する近似パーセンタイル関数に変換
asm_io_processes 英語
日本語
Oracle ASMのIOServerインスタンスで開始されるI/Oワーカー・プロセスの数を指定
autotask_max_active_pdbs 英語
日本語
PDBの最大値を指定し、同時に自動メンテナンス・タスクをスケジュール可能
awr_pdb_autoflush_enabled 英語
日本語
CDB内のすべてのPDBまたはCDB内の個々のPDBに対して、自動ワークロード・リポジトリ(AWR) のスナップショットを有効にするか無効にするかを指定
cdb_cluster 記載無し TRUEの場合、CDBクラスタモードで起動
cdb_cluster_name 記載無し CDBクラスタ名
clonedb_dir 英語
日本語
CloneDBビットマップ・ファイルを作成し、アクセスされるディレクトリ・パスを設定
containers_parallel_degree 英語
日本語
containers()を含む問合せの並列度を制御する。containers_parallel_degreeの値を設定した場合、containers()問合せのデフォルトのDOPをオーバーライドする。
cursor_invalidation 英語
日本語
DDL文のデフォルトで、遅延カーソル無効化を使用するか、即時カーソル無効化を使用するかを制御
data_guard_sync_latency 英語
日本語
Oracle Data Guardの同期REDO転送モード接続で、最初のレスポンス以降のログ・ライター(LGWR)プロセスの待機秒数を制御
data_transfer_cache_size 英語
日本語
RMAN RECOVER...NONLOGGED BLOCKコマンドの実行中にインスタンスによって消費されるデータ・ブロックの受信(通常はOracle Data Guard環境のプライマリ・データベースから)に使用されるデータ転送キャッシュのサイズ(バイト)
default_sharing 英語
日本語
アプリケーション・ルートにオブジェクトを作成する文の共有句の値
disable_pdb_feature 記載無し PDB機能の無効化
enable_automatic_maintenance_pdb 英語
日本語
CDB内のすべてのPDBまたはCDB内の個別のPDBに対して、自動メンテナンス・タスクの実行を制御
enable_dnfs_dispatcher 英語
日本語
Oracle Direct NFSクライアントのディスパッチャ・サポートを有効化
enabled_PDBs_on_standby 英語
日本語
Oracle Data Guardスタンバイ・データベースでレプリケートするプラガブル・データベース(PDB)リスト
encrypt_new_tablespaces 英語
日本語
新しく作成されたユーザー表領域を暗号化するかどうかを指定
exafusion_enabled 英語
日本語
Exafusion高速化キャッシュ・フュージョン・プロトコル機能を制御
external_keystore_credential_location 英語
日本語
TDEキーストアの資格証明を格納した外部キーストアの場所
inmemory_adg_enabled 英語
日本語
インメモリー・キャッシュ・サイズに加え、Active Data Guardのインメモリーが有効かどうかを指定
inmemory_expressions_usage 英語
日本語
どのインメモリー式(IM式)をインメモリー列ストア(IM列ストア)に移入して、問合せで使用可能にするかを制御
inmemory_virtual_columns 英語
日本語
どのユーザー定義仮想列がインメモリー仮想列(IM列)として格納されるかを制御
instance_abort_delay_time 英語
日本語
致命的なプロセスの異常終了や回復不能なインスタンス・エラーの発生時など、内部で起動されたインスタンスの中止までの遅延時間(秒)を指定
instance_mode 英語
日本語
インスタンスがread-write、read-only、read-mostlyのいずれかを示す
long_module_action 英語
日本語
より長い長さをモジュールおよびアクションに使用可能にする
# Oracle Database 12cリリース2 (12.2.0.1)より前のOracle Databaseリリースでは、モジュールの長さは48バイトで、アクションの長さは32バイト
max_datapump_jobs_per_pdb 英語
日本語
PDBごとの同時Oracle Data Pumpジョブの最大数
max_idle_time 英語
日本語
セッションがアイドル状態にしておける最大分数
max_iops 英語
日本語
1つのプラガブル・データベース(PDB)に対して、1秒当たりに発行できるI/Oの最大数
max_mbps 英語
日本語
1つのプラガブル・データベース(PDB)に対して、1秒当たりに発行できるI/Oの最大数(MB)
max_pdbs 英語
日本語
CDBまたはアプリケーション・ルートで作成可能なプラガブル・データベース(PDB)数の制限
ofs_threads 英語
日本語
Oracleファイル・システムのリクエストに対するサービスを開始できるOracleファイル・システム(OFS)スレッドの最大数
one_step_plugin_for_pdb_with_tde 記載無し TDE暗号化データを持つPDBのための1ステッププラグインを容易にする
optimizer_adaptive_plans 英語
日本語
適応可能なプラン(adaptive plans)を制御
optimizer_adaptive_statistics 英語
日本語
適応統計(adaptive statistics)を制御
outbound_dblink_protocols 英語
日本語
データベース内のアウトバウンド・データベース・リンク用の通信に許可されたネットワーク・プロトコル
remote_recovery_file_dest 英語
日本語
プラガブル・データベース(PDB)のリフレッシュ操作中にソースが使用できない場合に、アーカイブ・ログ・ファイルの読取り元となるディレクトリ
resource_manage_goldengate 英語
日本語
データベース内でのOracle GoldenGate適用プロセスが管理対象のリソースかどうかを判定
sga_min_size 英語
日本語
プラガブル・データベース(PDB)に保証されたSGAサイズ
shrd_dupl_table_refresh_rate 英語
日本語
重複した表のリフレッシュ・レート(秒)
standby_db_preserve_states 英語
日本語
読取り可能なフィジカル・スタンバイ・データベースをプライマリ・データベースに変換するときに、インスタンスのユーザー・セッションおよびその他の内部状態を保持するかどうかを制御
target_pdbs 記載無し CDBの属性を調整するためのヒント
uniform_log_timestamp_format 英語
日本語
Oracle Databaseトレース(.trc)ファイルで共通タイムスタンプ書式を使用することを指定

[Database] Obsolete SPFILE Parameters in Oracle Database 12.2.0.1

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/obsolete_spfile_parameters_in_oracle

このエントリは、Oracle Database 12.2.0.1のinit.ora/SPFILEパラメータに関する一連のエントリの第2弾です。
廃止されたパラメータは159個です(これらはV$OBSOLETE_PARAMETERSにあります)。
  • _app_ctx_vers
  • _average_dirties_half_life
  • _aw_row_source_enabled
  • _compatible_no_recovery
  • _data_transfer_cache_size
  • _db_no_mount_lock
  • _dlm_send_timeout
  • _dtree_bintest_id
  • _dtree_compressbmp_enabled
  • _evolve_plan_baseline_report_level
  • _fast_start_instance_recovery_target
  • _fic_max_length
  • _fic_outofmem_candidates
  • _idl_conventional_index_maintenance
  • _kgl_latch_count
  • _kks_free_cursor_stat_pct
  • _kspptbl_mem_usage
  • _lm_direct_sends
  • _lm_multiple_receivers
  • _lm_rcv_buffer_size
  • _lm_statistics
  • _log_archive_buffer_size
  • _log_io_size
  • _max_log_write_io_parallelism
  • _module_action_old_length
  • _optimizer_adaptive_plans
  • _optimizer_choose_permutation
  • _oracle_trace_events
  • _oracle_trace_facility_version
  • _plan_verify_local_time_limit
  • _plsql_conditional_compilation
  • _px_async_getgranule
  • _px_slaves_share_cursors
  • _seq_process_cache_const
  • _spr_use_hash_table
  • _sqlexec_progression_cost
  • _use_hidden_partitions
  • _very_large_partitioned_table
  • allow_partial_sn_results
  • always_anti_join
  • always_semi_join
  • arch_io_slaves
  • b_tree_bitmap_plans
  • backup_disk_io_slaves
  • cache_size_threshold
  • cell_partition_large_extents
  • cleanup_rollback_entries
  • close_cached_open_cursors
  • complex_view_merging
  • db_block_checkpoint_batch
  • db_block_lru_extended_statistics
  • db_block_lru_latches
  • db_block_lru_statistics
  • db_block_max_dirty_target
  • db_file_simultaneous_writes
  • dblink_encrypt_login
  • ddl_wait_for_locks
  • delayed_logging_block_cleanouts
  • discrete_transactions_enabled
  • distributed_recovery_connection_hold_time
  • distributed_transactions
  • drs_start
  • enqueue_resources
  • exclude_seed_cdb_view
  • fast_full_scan_enabled
  • freeze_DB_for_fast_instance_recovery
  • gc_defer_time
  • gc_files_to_locks
  • gc_latches
  • gc_lck_procs
  • gc_releasable_locks
  • gc_rollback_locks
  • hash_join_enabled
  • hash_multiblock_io_count
  • instance_nodeset
  • job_queue_interval
  • job_queue_keep_connections
  • large_pool_min_alloc
  • lgwr_io_slaves
  • lm_locks
  • lm_procs
  • lm_procs
  • lm_ress
  • lock_sga_areas
  • log_block_checksum
  • log_files
  • log_parallelism
  • log_simultaneous_copies
  • log_small_entry_max_size
  • logmnr_max_persistent_sessions
  • max_commit_propagation_delay
  • max_rollback_segments
  • max_transaction_branches
  • mts_circuits
  • mts_dispatchers
  • mts_listener_address
  • mts_max_dispatchers
  • mts_max_servers
  • mts_multiple_listeners
  • mts_servers
  • mts_service
  • mts_sessions
  • ogms_home
  • ops_admin_group
  • ops_interconnects
  • optimizer_adaptive_features
  • optimizer_max_permutations
  • optimizer_percent_parallel
  • optimizer_search_limit
  • oracle_trace_collection_name
  • oracle_trace_collection_path
  • oracle_trace_collection_size
  • oracle_trace_enable
  • oracle_trace_facility_name
  • oracle_trace_facility_path
  • parallel_automatic_tuning
  • parallel_broadcast_enabled
  • parallel_default_max_instances
  • parallel_degree_level
  • parallel_io_cap_enabled
  • parallel_min_message_pool
  • parallel_server
  • parallel_server_idle_time
  • parallel_server_instances
  • parallel_transaction_resource_timeout
  • partition_view_enabled
  • plsql_compiler_flags
  • plsql_native_c_compiler
  • plsql_native_library_dir
  • plsql_native_library_subdir_count
  • plsql_native_linker
  • plsql_native_make_file_name
  • plsql_native_make_utility
  • push_join_predicate
  • remote_archive_enable
  • row_cache_cursors
  • row_locking
  • sequence_cache_entries
  • sequence_cache_hash_buckets
  • serializable
  • shared_pool_reserved_min_alloc
  • snapshot_refresh_interval
  • snapshot_refresh_keep_connections
  • snapshot_refresh_processes
  • sort_direct_writes
  • sort_multiblock_read_count
  • sort_read_fac
  • sort_spacemap_size
  • sort_write_buffer_size
  • sort_write_buffers
  • spin_count
  • sql_version
  • standby_preserves_names
  • temporary_table_locks
  • text_enable
  • transaction_auditing
  • undo_suppress_errors
  • use_indirect_data_buffers
  • use_ism

[Database] Deprecated Parameters in Oracle Database 12.2.0.1

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/deprecated_parameters_in_oracle_database

Oracle Database 12.2.0.1のパラメータに関する一連のエントリの第3弾です。
以下は、Oracle Database 12.2.0.1でDEPRECATED(廃止予定)とされているパラメータです。
  • O7_DICTIONARY_ACCESSIBILITY
  • active_instance_count
  • asm_preferred_read_failure_groups
  • background_dump_dest
  • buffer_pool_keep
  • buffer_pool_recycle
  • commit_write
  • cursor_space_for_time
  • db_block_buffers
  • fast_start_io_target
  • instance_groups
  • lock_name_space
  • log_archive_start
  • parallel_adaptive_multi_user
  • plsql_debug
  • plsql_v2_compatibility
  • rdbms_server_dn
  • remote_os_authent
  • resource_manager_cpu_allocation
  • sec_case_sensitive_logon
  • serial_reuse
  • sql_trace
  • standby_archive_dest
  • unified_audit_sga_queue_size
  • user_dump_dest
  • utl_file_dir
太字のものは、Oracle Database 12.2.0.1で新たに廃止予定(DEPRECATED)とされたものです。それ以外は12.2.0.1以前に既に廃止予定とされているものです。
V$PARAMETERISDEPRECATED列も確認してください。

[Database] Default Changes SPFILE Parameters - Oracle 12.2

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/default_changes_of_init_parameters

Parameters in Oracle Database 12.2.0.1 - part 4 of the series:
Royと筆者はデフォルトの各バージョンのパラメータ設定を比較しました。比較したものは、Oracle Database 11.2.0.4、Oracle Database 12.1.0.2、Oracle Database 12.2.0.1です。ある変化が極めて興味深いものです。当然ながらメモリドリブンのパラメータはこのリストからは除外しています。
赤でマークしているものが、リリース間で違いがあるものです。
データベースは全てOracle Linux 6.8のファイルシステム上に構成しています(ASMではありません)。従って、ASM上に構築した場合や他のOS上で構築した場合では、値が異なることがあります。
Parameter Oracle 11.2.0.4 Oracle 12.1.0.2 Oracle. 12.2.0.1
audit_sys_operations FALSE TRUE TRUE
compatible 11.2.0.4 12.1.0.2.0 12.2.0
control_file_record_keep_time 7 7 30
db_securefile PERMITTED PREFERRED PREFERRED
dml_locks 616 1416 2076
filesystemio_options NONE NONE setall
job_queue_processes 1000 1000 4000
object_cache_optimal_size 102400 102400 10240000
optimizer_features_enable 11.2.0.4 12.1.0.2 12.2.0.1
parallel_max_servers 48 80 80
parallel_min_servers 0 8 8
parallel_servers_target 64 32 32
parallel_adaptive_multi_user TRUE TRUE FALSE
pre_page_sga FALSE TRUE TRUE
resource_limit FALSE TRUE TRUE
sec_max_failed_login_attempts 10 3 4
sec_protocol_error_trace_action CONTINUE TRACE LOG
spatial_vector_acceleration FALSE FALSE TRUE
sql92_security FALSE FALSE TRUE

[Java] JSON-P 1.1 (JSR 374) in Public Review

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/json_p_1_1_jsr2

JSON-P 1.1 (JSR 374) がPublic Previewという重要な期間に入りました。
JSR 374: JavaTM API for JSON Processing 1.1
https://jcp.org/en/jsr/detail?id=374
このPublic Reviewは、Proposed Final Draftに至る前の最後のJCP マイルストンです。そのため、出来るだけ速く皆さんからのコメントを得ることが重要なのです。期限は2017年2月16日です。

そんなわけですから、ぱっぱとフィードバックしてしまいましょう。ドラフト仕様をご覧になって、フィードバックをお寄せ下さい。
JSR-000374 JavaTM API for JSON Processing 1.1
https://jcp.org/aboutJava/communityprocess/pr/jsr374/index.html
json-processing-spec usersメーリングリスト
https://java.net/projects/json-processing-spec/lists/users/archive

[Java] Java SE 8 Update 121 and More

原文はこちら。
https://blogs.oracle.com/java/java-se-8-update-121-and-more

Java SE 8u121(Java SE 8 update 121)がご利用いただけるようになりました。
Java SE Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html
このアップデートには重要なセキュリティの修正が含まれているため、Java SEをご利用の方がアップグレードされることをOracleは強く推奨します。新機能やバグの修正に関する情報はこのリリースに含まれていますので、リリースノートをご覧ください。
Java Development Kit 8 Update Release Notes
http://www.oracle.com/technetwork/java/javase/8u-relnotes-2225394.html
[注意]
2017年4月18日(PDT)に予定しているCritical Patch Updateから、全てのバージョンのJREはMD5を使って署名されたJARは署名されていないものとして取り扱います。詳細とテスト方法については、以下のエントリをご覧下さい。
Oracle JRE will no longer trust MD5-signed code by default
https://blogs.oracle.com/java-platform-group/entry/oracle_jre_will_no_longer
[Java, Security] Oracle JRE will no longer trust MD5-signed code by default
https://orablogs-jp.blogspot.jp/2016/10/oracle-jre-will-no-longer-trust-md5.html
 Oracle Java SE Embedded Version 8 Update 121もご利用いただけるようになりました。
Oracle Java SE Embedded Downloads
http://www.oracle.com/technetwork/java/embedded/embedded-se/downloads/index.html
JRECreateツールを使ってカスタマイズしたJREを作成できます。まずは、対象とするプラットフォームに適したeJDK バンドルをダウンロードした上で、以下のURLの手順に従い、アプリケーション要件に適うJREを作成してください。
Java Platform, Standard Edition (Java SE) 8
Oracle Java SE Embedded: Developer's Guide
Create Your JRE with jrecreate
http://docs.oracle.com/javase/8/embedded/develop-apps-platforms/jrecreate.htm#JEMAG270
その他、Java SE 7u131、Java SE 6u141もリリースしましたが、これらは両方ともOracle Java SE Supportの範囲でご利用いただけます。これらのリリースに関する情報は、以下のリリースノートをご覧ください。
Oracle Java SE Support
http://www.oracle.com/us/technologies/java/standard-edition/support/overview/index.html
Java™ SE Development Kit 7, Update 131 (JDK 7u131)
http://www.oracle.com/technetwork/java/javaseproducts/documentation/javase7supportreleasenotes-1601161.html#R170_131
Java™ SE Development Kit 6, Update 141 (JDK 6u141)
http://www.oracle.com/technetwork/java/javase/overview-156328.html#R160_141

[Support, Security] January 2017 Critical Patch Update Released

原文はこちら。
https://blogs.oracle.com/security/entry/january_2017_critical_patch_update

Oracleは本日2017年1月のCritical Patch Update (CPU) をリリースしました。
Oracle Critical Patch Update Advisory - January 2017
http://www.oracle.com/technetwork/security-advisory/cpujan2017-2881727.html
このCPUは、Oracle Database Server、Oracle Enterprise Manager Grid Control、Oracle E-Business Suite、Oracle Industry Applications、Oracle Fusion Middleware、Oracle Sun製品、Oracle Java SE、Oracle MySQLといった幅広い製品群の修正を提供するものです。
OracleはこのCPUをできる限り速やかに適用されることを推奨します。このCPUのサマリおよび分析は以下のMy Oracle Supportのドキュメントに記載があります(My Oracle Supportのアカウントが必要です)。
January 2017 Critical Patch Update: Executive Summary and Analysis (Doc ID 2220314.1)
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=2220314.1

[Cloud] Microservices messaging on Oracle Cloud using Apache Kafka

原文はこちら。
https://community.oracle.com/community/cloud_computing/oracle-cloud-developer-solutions/blog/2017/01/05/microservices-messaging-on-oracle-cloud-using-apache-kafka

この記事は2部構成の第1部です。Oracle Cloud Platformと幅広く使われているオープンソーステクノロジーを組み合わせ、サンプルアプリケーション(ソースコードはこちら)を使って、マイクロサービス間を疎結合の非同期メッセージベースで連携する方法を紹介します。
Cloud Developer Portal Solutions
https://cloud.oracle.com/developer/solutions
第1部では、以下の内容を取り扱います。
  • 個々のマイクロサービスの開発
  • 非同期メッセージングを利用した疎結合連携
  • Oracle Cloud Serviceのセットアップおよびデプロイ
第2部ではマイクロサービスのスケールについて取り扱います。

利用するコンポーネント

Oracle Cloud

以下のOracle Cloud Serviceを使います。

Description
Application Container CloudJava SEマイクロサービスをデプロイ可能な、スケーラブルなプラットフォーム
Compute CloudKafka クラスタ (broker) をホストするために利用

オープンソース

以下のオープンソーステクノロジーを使ってサンプルアプリケーションを構築します。

Description
Apache KafkaスケーラブルなPub-Subメッセージハブ
JerseyRESTおよびSSEサービスを実装するために利用。(プラガブル)ランタイム/コンテナとしてGrizzlyを利用
Mavenassemblyプラグインとともに)標準のJavaビルドツールとして利用。

Microservicesにおけるメッセージング

マイクロサービスベースのシステムは複数のアプリケーション(サービス)から構成されており、これらのサービスは、通常システム全体の特殊な側面(ビジネスシナリオ)にフォーカスしています。個々のサービスは、相互に連携せず独立して機能することもできますが、実際のところサービスは孤立して機能することはできず、お互いに通信して仕事を終わらせる必要があります。マイクロサービス間の通信を実装する上で複数の戦略を使うことができ、同期 vs 非同期スタイル、コレオグラフィ vs オーケストレーション、REST(HTTP)vs メッセージングといったくくりで分類されることがよくあります。

サンプルアプリケーションのアーキテクチャ

この記事のサンプルアプリケーションのユースケースはシンプルで、ランダムに生成されたデータ(Producerマイクロサービス)を別のエンティティ(Consumerマイクロサービス)が受け取り、最終的にはリアルタイムでユーザーが確認できるようにします。


第1部では、高可用性の設定を考慮しておらず、1個のKafkaノードです。つまり、Kafkaクラスタに1個のサーバのみ存在し、ProducerとConsumerマイクロサービス(両方とも1インスタンスのみ)をApplication Container Cloudにデプロイします。

上図で図示されている個々のコンポーネントを見ていきましょう。

Apache Kafka

Apache Kafkaは、「メッセージングシステムまたは分散コミットログとして実装されたストリーミングプラットフォーム」として広く知られています。もっと簡単な説明があればいいのですが。
  • 基本
    KafkaはJVM上で動作するScalaで記述された、Publish-Subscribeベースのメッセージングシステムで、パブリッシャ(Publisher)がトピック(Topic)にデータを書き込み、コンシューマ(Consumer)がこれらのトピックをポーリングしてデータを取得します。
  • 分散指向
    コンポーネント(broker、パブリッシャ、コンシューマ)はスケールアウト可能なように設計されています。
  • マスタ・スレーブアーキテクチャ
    トピック内のデータはクラスタ内の複数ノード間に(レプリケーション・ファクタに基づいて)分散されます。1個のノードのみが特定データのマスタとして機能し、0個以上のノードがそのデータのコピーを持つ、つまりフォロワーとして動作することができます。
  • パーティション
    トピックはさらにパーティション(Partition)に分割され、各パーティションは基本的にデータ(Key-Valueのペア)を格納するコミット・ログ(commit log)として振る舞います。データは不変で、厳密に順序付け(オフセットが各データエントリに割り当てられます)された上で、(構成に基づいて)永続化され、ディスクに保持されます。
  • 適した領域
    Kafkaは大容量の高速なリアルタイムストリーミングデータの処理に適しています。
  • JMSではない
    JMSと似てはいますが違います。JMS仕様を実装したものではなく、JMSベースのソリューションを置き換えるようなものではありません。
Kafka brokerはKafkaサーバプロセス(ノード)以外の何者でもありません。複数のノードで、分散された、フォールトトレラントおよび水平方向にスケール可能なメッセージハブとして機能するクラスタを構成することができます。

Producerマイクロサービス

Producerマイクロサービスは、Kafka Java APIとJersey (JAX-RS参照実装)を使います。リアルタイムデータのPub-Subパイプラインを紹介するため、このマイクロサービスはハイペースでサンプルイベントを発行します。

サンプルデータ

Producerが生成したデータをメトリックのモデルとします。今回は、特定のマシンのCPU使用率であり、単純なキーと値のペア(名前、使用率など)と見做すことができます。 以下はその例です(属性Partitionは無視してください)
: Partition 0
event: machine-2
id: 19
data: 14%

: Partition 1
event: machine-1
id: 20
data: 5%

Consumerマイクロサービス

このシステムの2個目のマイクロサービスです。Producerと同様に、JerseyとKafkaのJava (Consumer) APIを使っています。このサービスで利用しているJerseyコンポーネントの中で注目すべきは、Server Sent Eventsモジュールです。このモジュールを使うと、サンプルアプリケーションで必要なsubscribe-and-broadcastセマンティクスを実装が容易になります(詳細は後で説明します)。
両マイクロサービスは個別のアプリケーションとしてApplication Container Cloud Serviceにデプロイされ、独立して管理、スケールすることができます。

Oracle Compute CloudへのApache Kafkaの構築

複数の方法でApache KafkaをOracle Compute Cloud (IaaS)上に構築できます。

Oracle Cloud Marketplaceの利用

マーケットプレイスのApache KafkaのBitnamiイメージを使います。詳細ドキュメントは以下のURLをご覧ください。
Oracle® Cloud
Using Oracle Compute Cloud Service (IaaS)
Creating an Instance from Oracle Cloud Marketplace
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-D7CE3F3E-CC1B-443B-BAF9-E0F6B4FD7762.htm#STCSG-GUID-D7CE3F3E-CC1B-443B-BAF9-E0F6B4FD7762


Oracle Compute CloudのVMを使う

お好みのOSが動作するCompute CloudのVMをプロビジョニングするところから始めましょう。以下のドキュメントが役にたつことでしょう。
Oracle® Cloud
Using Oracle Compute Cloud Service (IaaS)
Workflow for Creating Your First Instance
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-DD966FCF-624B-45A3-88AF-8EC123CCBCFC.htm#STCSG-GUID-DD966FCF-624B-45A3-88AF-8EC123CCBCFC

VMへのSSHアクセスの有効化

構成を進める上で、まずOracle Compute Cloud VMへのSSHアクセスを有効化(セキュリティポリシーやセキュリティルールを作成)する必要があります。Oracle LinuxやOracle SolarisベースのVMに対する手順はそれぞれ以下を確認してください。
Oracle® Cloud
Using Oracle Compute Cloud Service (IaaS)
Accessing an Oracle Linux Instance Using SSH
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-D947E2CC-0D4C-43F4-B2A9-A517037D6C11.htm#STCSG-GUID-D947E2CC-0D4C-43F4-B2A9-A517037D6C11
Accessing an Oracle Solaris Instance Using SSH
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-C72CC64D-73C7-4150-8B5A-EB39D7F72327.htm#STCSG-GUID-C72CC64D-73C7-4150-8B5A-EB39D7F72327


VMへのKafkaのインストール

このセクションではOracle LinuxベースのVMを前提としています。
以下のコマンドを使います。
sudo yum install java-1.8.0-openjdk
sudo yum install wget
mkdir -p ~/kafka-download
wget "http://redrockdigimark.com/apachemirror/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz" -O ~/kafka-download/kafka-binary.tgz
mkdir -p ~/kafka-install && cd ~/kafka-install
tar -xvzf ~/kafka-download/kafka-binary.tgz --strip 1

Kafkaのリスナーポートをオープン

Oracle Application Container Cloudにデプロイされたマイクロサービスのため、Kafka brokerサービスへのアクセス(今回の場合は9092/tcp)を許可する必要があります。以下のドキュメントにユースケースの形ですばらしいリファレンスが提供されています。
Oracle® Cloud
Using Oracle Compute Cloud Service (IaaS)
Setting Up Firewalls and Opening Ports for a Sample Scenario
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-DE568AAF-39CE-462C-B605-B96AE4036825.htm#OCSUG292 
Security Applicationを作成し、プロトコルと対応するポートを指定します。詳細は以下のドキュメントをご覧ください。
Oracle® Cloud
Using Oracle Compute Cloud Service (IaaS)
Creating a Security Application
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-4B073EF2-0D7C-4AD8-A40A-585C4E2F938C.htm#OCSUG183


先ほど作成したSecurity Applicationを参照し、Security Ruleを作成します。この設定で、(ルールで定義したように)パブリック・インターネットから9092/tcpへのトラフィックを(Security Application構成毎に)許可します。詳細は以下のドキュメントを参照してください。
Oracle® Cloud
Using Oracle Compute Cloud Service (IaaS)
Creating a Security Rule
http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-630622EC-160B-4523-88AD-F7B46463A0BE.htm#GUID-A3BEB363-C262-4F1E-909D-AA73AF2D65C9


以下のような構成になるはずです。


Kafka brokerの構成

Compute Cloud環境用にKafkaサーバのプロパティファイル(<KAFKA_INSTALL>/config/server.properties)中の以下の属性を編集します。

Compute CloudインスタンスのパブリックDNS

パブリックIPが140.44.88.200であれば、パブリックIPに対応するFQDNはoc-140-44-88-200.compute.oraclecloud.comになります。

属性
listenersPLAINTEXT://<oracle-compute-private-IP>:<kafka-listen-port>
(例) PLAINTEXT://10.190.210.199:9092
advertised.listenersPLAINTEXT://<oracle-compute-public-DNS>:<kafka-listen-port>
(例) PLAINTEXT://oc-140-44-88-200.compute.oraclecloud.com:9092

以下はserver.propertiesファイルのスナップショットです。


KAFKA_INSTALL/bin/zookeeper-server-start.sh config/zookeeper.propertiesを実行して、Zookeeperを起動します。


KAFKA_INSTALL/bin/kafka-server-start.sh config/server.propertiesを実行して、Kafka Brokerを起動します。


Zookeeper起動前にKafka brokerを起動しないでください。

ソリューション概要

イベントフロー・シーケンス

これらのコンポーネントが協調してどのようにユースケース全体をサポートするのかを説明します。

ProducerがKafka brokerにイベントをPush


Consumer側では…

  • アプリケーションはデータ取得のためKafka brokerをポーリングします(KafkaではPoll/Pullモデルが使われています。よく見られるPushモデルではありません)
  • (ブラウザやHTTPクライアントといった)クライアントはシンプルなHTTP GETリクエストを特定のURL(例:https://<acc-app-url>/metrics)に送信してイベントをサブスクライブします。アプリケーション内でイベントが発生したときにクライアントがイベントを取得するという、1回のサブスクライブ後、クライアントはいつでも切断することができます。


非同期+疎結合
Consumerがメトリックデータを生成します。あるConsumerがブラウザベースのクライアント用のリアルタイムフィードを利用可能にしますが、同じデータに関する異なるビジネスロジックが実装されている複数のConsumer(例えば、処理や分析用途のためにメトリックデータを永続データストアにプッシュする)が存在する可能性があります。

Server Sent Events (SSE)について

SSEは、HTTPとWebSocketの中間的なものです。クライアントは接続リクエストを送信し、接続が確立すると接続は開いたままになり、サーバからデータを引き続き受信できます。
  • これは、サーバーのポーリングを回避できるため、単一のリクエストごとにHTTPリクエスト/レスポンスを張る方式に比べて効率的です。
  • 全二重であるWebSocketとは異なります。具体的には、クライアントとサーバは、接続が確立された後はいつでもメッセージを交換することができるますが、SSEでは、クライアントはリクエストを1回だけ送信します。
このモデルは、クライアントが接続してデータが到着するのを待つだけなので、今回のサンプルアプリケーションに適しています(サブスクリプションした後は、サーバーと対話する必要がないためです)。

その他の着目すべきポイント
  • SSEはW3Cで正式な仕様です。
    Server-Sent Events
    W3C Working Draft 08 February 2011
    https://www.w3.org/TR/2011/WD-eventsource-20110208/
  • データに対する具体的なメディアタイプが定められています。
  • ほとんどのブラウザでJavaScript実装があります。

スケーラビリティ

高いスループットとパフォーマンスを維持するために、このシステムのすべての部分がステートレスで水平方向にスケール可能であることに注意する必要があります。第2部では、スケーラビリティの側面をさらに深く理解し、Application Container Cloud Serviceで簡単にスケールさせる方法について説明します。

コード

このセクションでは、このサンプルで使った両方のマイクロサービスのコードの概要と重要なポイントを紹介します。

Producer マイクロサービス

アプリケーションのブートストラップ、イベント生成などを処理するクラスで構成されています。
ClassDetails
ProducerBootstrap.javaアプリケーションのエントリポイント。
Grizzlyコンテナを起動する。
Producer.java専用スレッドで動作。
イベント生成の中核ロジックを含む。
ProducerManagerResource.javaproducerプロセスの開始・停止のためのHTTP(s)エンドポイントを公開。
ProducerLifecycleManager.javaExecutorServiceを使いProducerスレッドを管理するロジックを実装(ProducerManagerResourceが内部で利用)。

Consumer マイクロサービス

ClassDetails
ConsumerBootstrap.javaアプリケーションのエントリポイント。
Grizzlyコンテナを起動してConsumerプロセスを呼び出す。
Consumer.java専用スレッドで動作。
イベント消費の中核ロジックを含む。
ConsumerEventResource.javaエンドユーザーがイベント消費するためのHTTP(s)エンドポイントを公開。
EventCoordinator.javaイベントサブスクリプションおよびブロードキャスティングを実装するためのJersey SSEBroadcasterのラッパー(ConsumerEventResourceが内部で利用)。

以下の理由で、Jersey SSE Broadcaster を使っています。
  • クライアントの統計情報を追跡する
  • クライアント接続が切断されると自動的にサーバーリソースを破棄する
  • スレッドセーフである

Oracle Application Container Cloudへのデプロイ

ここまででアプリケーションについて情報を得たので、ビルド、パッケージング、デプロイについて見ていきます。

まずソースコード (zipファイル) をダウンロードしてください。このエントリの最初(原文からダウンロードする場合は最後)にリンクがあります。

Metadata files

manifest.json: 

このファイルはいじらずにそのまま使うことができます。

deployment.json

Kafka brokerに対応する環境変数が含まれています。値はデプロイ前にユーザーが埋めるためにプレースホルダーとして残してあります。
{
    "environment": {
        "KAFKA_CLUSTER":"<as-configured-in-kafka-server-properties>"
    }
}
この値(Oracle Compute CloudインスタンスのパブリックDNSのFQDN)は、Kafkaの server.properties ファイル中の属性 advertised.listeners で構成した値と一致する必要があります。

metadataファイルの詳細は、以下のドキュメントをご覧ください。
Oracle® Cloud Developing for Oracle Application Container Cloud Service
Creating Metadata Files
http://docs.oracle.com/en/cloud/paas/app-container-cloud/dvcjv/creating-meta-data-files.html

Build & zip

manifest.json ファイルだけを使ってJARをビルドしてZipで圧縮し、クラウドにデプロイできるアーティファクトを生成します。

Producerアプリケーション

cd <download_dir>/producer // mavenプロジェクトの展開場所
mvn clean install
zip accs-kafka-producer.zip manifest.json target/accs-kafka-producer.jar //you can also use tar to create a tgz file

Consumerアプリケーション

cd <download_dir>/consumer //mavenプロジェクトの展開場所
mvn clean install
zip accs-kafka-consumer.zip manifest.json target/accs-kafka-consumer.jar

アプリケーションのzipファイルをOracle Storage cloudへアップロード

まずOracle Storage Cloudに先ほど作成したアプリケーションのZipファイルをアップロードした上で、後続の手順でそのZipファイルを参照していきます。以下は必要なcURLコマンドです。
(まだ作成していない場合は)Oracle Storage Cloudにコンテナを作成する
curl -i -X PUT -u <USER_ID>:<USER_PASSWORD> <STORAGE_CLOUD_CONTAINER_URL>  
(例) curl -X PUT –u jdoe:foobar "https://domain007.storage.oraclecloud.com/v1/Storage-domain007/accs-kafka-consumer/"  
Zipファイルをコンテナにアップロード(ZipファイルはStorage Cloudのオブジェクトにすぎません)
curl -X PUT -u <USER_ID>:<USER_PASSWORD> <STORAGE_CLOUD_CONTAINER_URL> -T <zip_file> "<storage_cloud_object_URL>" //template
(例) curl -X PUT –u jdoe:foobar -T accs-kafka-consumer.zip "https://domain007.storage.oraclecloud.com/v1/Storage-domain007/accs-kafka-consumer/accs-kafka-consumer.zip"
Producerマイクロサービスについても同じ手順を繰り返してください。

Application Container Cloudへのデプロイ

Zipファイルのアップロードが完了したら、アプリケーションをデプロイするために利用するApplication Container Cloud REST APIを使って当該ZipファイルのOracle Storage Cloudにおけるパスを参照することができます。以下はREST APIを使うcURLコマンドの例です。
curl -X POST -u joe@example.com:password \    
-H "X-ID-TENANT-NAME:domain007" \    
-H "Content-Type: multipart/form-data" -F "name=accs-kafka-consumer" \    
-F "runtime=java" -F "subscription=Monthly" \    
-F "deployment=@deployment.json" \    
-F "archiveURL=accs-kafka-consumer/accs-kafka-consumer.zip" \    
-F "notes=notes for deployment" \    
https://apaas.oraclecloud.com/paas/service/apaas/api/v1.1/apps/domain007  
Producerマイクロサービスについても同じ手順を繰り返してください。

デプロイ後

Container Cloudコンソ―ルのApplicationsセクションの下にマイクロサービスを確認できるはずです。


特定のアプリケーションの詳細情報を見ると、環境変数も存在するはずです。

アプリケーションのテスト

Producer

accs-kafka-producer マイクロサービスのために、Kafka Producerプロセス(スレッド)をユーザーが開始する必要があります(これは単に柔軟性を提供するためです)。下表に記載の適切なコマンドを(cURLPostmanなどを使って)発行し、Producerプロセスを管理します。

ActionHTTP verbURI
開始GEThttps://<ACCS-APP-URL>/producer
(例)https://accs-kafka-producer-domain007.apaas.us.oraclecloud.com/producer
停止DELETE上と同様

Producerを開始した後は、停止するまでイベントを発行し続けます。

Consumer

accs-kafka-consumer マイクロサービスでは、Kafka Consumerプロセスはアプリケーションとともに起動します。つまりメトリック収集のためにKafka brokerへのポーリングを開始します。前述の通り、Consumerアプリケーションは、リアルタイムにメトリックデータを見るための(Server Sent Eventsを使った)HTTP(s)エンドポイントを提供しています。
下図のようなリアルタイムデータストリームを確認できるはずです。属性eventはマシン名とID、属性dataはCPU使用率を表します。
属性Partitionは無視してください。これはスケーラビリティや負荷分散といった第2部で説明予定です。


参考資料

第2部はまた後ほど。

[Database] Password Resets No Longer Require a Thick Connection (OracleClient) in SQL Developer

原文はこちら。
http://www.thatjeffsmith.com/archive/2017/01/password-resets-no-longer-require-a-thick-connection-oracle-client-in-sql-developer/

(訳注)
原文では4.2以後というような表現になっていますが、4.1.5で試したところ、特に問題なくパスワードリセットできます。JDBCドライバとDatabaseのバージョン依存ですね。

Oracle Database 12c JDBCドライバのアップデートのおかげで、パスワードのアップデートがデータベースへの接続を確立した状態でなくても可能になりました。
4.2 EA2以前のバージョンでは、接続済みであること、もしくはOracle Clientが利用可能になっている必要がありました。

以前紹介したエントリは、このサイトで最も読まれたエントリの一つです。期限が切れたパスワードを有していて、以前のパスワードをリセットする必要があるユーザーがどれほどあるのかが想像できます。
Resetting Your Oracle User Password with SQL Developer
http://www.thatjeffsmith.com/archive/2012/11/resetting-your-oracle-user-password-with-sql-developer/
以前のリリースでは、デスクトップ管理者は、SQL Developerを停止するだけでなく、互換性のあるOracle Clientをも配置する必要があり、しかもSQL Developerを構成する必要がありました。もちろん、ユーザーはDBAに電子メールでヘルプを依頼することもできますけれど。

でも、もうそんなことは必要ありません。非常に簡単になりました。
単に Version 4.2 (現時点ではEarly Adopter 2ですが、リリース後はGA版を使ってください)をインストールし、接続を右クリック、これだけです。

Oracle Clientの構成は不要です。

では、(接続で定義済みのユーザーに対する)パスワードをリセットするため、当該接続を右クリックしましょう。

こんな感じのダイアログが現れますので、旧パスワードと新パスワードを入力します。

正しく動作すれば、OKをクリックしてダイアログを閉じてください。うまく動作しない場合は、エラーメッセージを確認してください。

(TIPS)
操作時に、接続プロパティのパスワード文字列を自動的にアップデートします。そのため、データベースのパスワードを変更後、接続で設定したパスワードを変更する必要はありません(もちろん、パスワードを保存することを選択した場合に限ります)。

Curious to what JDBC driver your connection is actually using?


(WindowsやLinuxの場合は)F5を押して、SHOW JDBCと打ち込んでください。