
※本ページは、“Introducing Oracle Database 21c”の翻訳です
Oracle Database 21c:参考情報
- [プレスリリース] オラクル、Oracle Database 21cによってデータベース分野におけるリーダーシップを拡充
- [マニュアル] Oracle Database 21c マニュアル:英語|日本語
- [セルフ・ハンズオン] Database 21c New Features Workshop(英語)
2021年8月、Oracle Database 21c (21.3)がリリースされ、従来のOracle Cloud Infrastructureに加え、オンプレミスのExadataを含むLinuxプラットフォームで利用可能になりました。
https://www.slideshare.net/slideshow/embed_code/key/t6KbpPUsttrFQB
Oracle Database 21c データ・ドリブン時代をリードする コンバージド・データベースの最新型
世界で最も人気のあるデータベースの最新InnovationリリースであるOracle Database 21cは、Oracle Cloud Database Service の Virtual Machine(RAC用とシングル・インスタンス用)とBare Metal Service(シングル・インスタンス用)で「クラウド・ファースト」でご利用いただけます。また、Ashburn(IAD)、Phoenix(PHX)、Frankfurt(FRA)、London(LHR)リージョンのAutonomous Database Always Free Serviceでも利用可能です。オンプレミス・プラットフォーム(Exadata、Linux、Windowsを含む)向けのOracle Database 21cのリリースは、2021年を予定しています。
データドリブンな未来を実現する
オラクルは一貫して、データを複数の単一目的エンジンに分割して利用するよりも、集約型のコンバージド・データベースにデータを格納して管理する方が効率的で生産性が高いというアプローチをとってきました。簡単に言えば、コンバージド・データベースとは、マルチモデル、マルチテナント、マルチワークロードのデータベースのことです。Oracle Databaseは、様々なデータ・モデルとアクセス方法を完全にサポートし、分離性を確保しながら統合を簡素化し、運用と分析の両方の典型的なデータベース・ワークロードのユースケースに優れています。以下の画像をクリックすると、オラクルのコンバージド・データベースの紹介ビデオをご覧いただけます。

したがって、オラクルのコンバージド・データベース21cは、すべてのデータ・タイプ(リレーショナル、JSON、XML、空間、グラフ、OLAPなど)をサポートし、業界をリードする高いパフォーマンス、スケーラビリティ、可用性、セキュリティを、オペレーショナル、アナリティクス、その他の混合ワークロードで実現します。オラクルのコンバージド戦略は、開発者がOracle Database 21cのすべての主要機能(ACIDトランザクション、読み取りの一貫性、並列スキャンやDML処理、オンライン・バックアップなど)を活用して、データの永続性を気にすることなくアプリケーションの開発に集中できるようにします。
Oracle Database 21cの新機能
この最新のInnovationリリースには、データベースのユースケースをさらに拡げ、開発者、アナリスト、データ・サイエンティストの生産性を向上させ、クエリ・パフォーマンスを向上させる多くの新機能と機能強化が導入されています。 以下は、Oracle Database 21cの新機能の一部です。より包括的なレビューについては、『新機能ガイド』または『Database Features & Licensing App』を参照してください。または、オンライン・ハンズオン「Oracle LiveLabs」の新機能ワークショップでOracle Database 21cのツアーに参加することもできます。
ブロックチェーン表
ブロックチェーンは、トランザクションの安全性にまつわる様々な問題を解決するため、技術的な検証を可能にしています。この技術の企業への導入はかなり前進しつつある一方で、まだいくつか課題が存在しています。最も大きい課題は、分散型台帳をサポートするアプリケーションの構築が複雑であることです。Oracle Database 21cでは、ブロックチェーン表を導入し、この課題に対処しています。この表は通常のヒープテーブルと同じように動作しますが、大きく異なる点がいくつかあります。最も注目すべき点は、テーブルに挿入された行が暗号化されハッシュ化されることで、後から行を変更できないようになっていることです。

これにより、基本的には挿入のみのテーブルが作成され、ユーザーはブロックチェーン表の行を更新したり削除したりすることができません。さらに、ユーザーはデータの切り捨ても、パーティションの削除やブロックチェーン表の削除も、一定の時間内に行うことができないようになっています。これらの重要な機能は、ブロックチェーン表に保持されているデータがイベントの正確な記録であることを他のユーザーが信頼できることを意味します。
ネイティブJSONデータ型
Oracleは、Oracle Database 12cでJSONのサポートを導入し、JSONデータをVARCHAR2またはLOB(CLOBまたはBLOB)として保存しました。これにより、開発者はOracle Databaseのすべての機能を備えたスキーマレス設計モデルの柔軟性を備えたアプリケーションを構築できるようになりました。たとえば、ユーザーは標準SQLを使用してJSONドキュメントの問合せをしたり、高度な分析を利用したり、個々の属性またはドキュメント全体に索引を作成したり、何十億ものJSONドキュメントを並行して処理したりすることができます。また、オラクルは、JSON文書を構成する属性を発見し、コレクションの上にリレーショナル・ビューを簡単に作成するためのツールも提供していました。また、Java、Node.js、Python、C、RESTで利用可能なSODA(Simple Object Data API)APIを使用してOracle Databaseにアクセスすることで、開発者はOracle DatabaseをNoSQLデータベースのように扱うことができました。
Oracle Database 21cでは、ネイティブ・データ型である「JSON」を提供することで、JSONのサポートがさらに強化されています。これは、読み取り時や更新時にJSONをパースする必要がもはやなく、パースは挿入時にのみ行われ、JSONは内部バイナリ形式で保持されるため、アクセスが大幅に高速化されることを意味します。これにより、読み取りや更新操作が4~5倍速くなり、非常に大きなJSON文書への更新が20~30倍速くなります。
CREATE TABLE j_order
(
id INTEGER PRIMARY KEY,
po_doc JSON
);
Oracle Database 21cで導入されたJSONの変更点は、新しいデータ型だけではありません。Oracleは新しいJSON関数JSON_TRANSFORMも追加しました。これにより、1回の操作でドキュメント内の複数の属性を更新したり削除したりすることがより簡単になりました。
UPDATE j_order SET po_doc = JSON_TRANSFORM( po_doc,
SET '$.address.city' = 'Santa Cruz',
REMOVE'$.phones[*]?(@.type == "office")'
)
WHERE id = 555;
あわせて、Data PumpやGoldenGateなどの統合ドライバやユーティリティでも新しいJSONデータ型の互換性を追加しました。
Oracle Database内部でJavaScriptを実行する
JavaScript はユビキタスなスクリプト言語であり、多くの用途がありますが、ウェブアプリケーションやモバイルアプリケーションでのリッチなユーザーインタラクションを実現します。Web ブラウザで動作する数少ない言語の 1 つであり、クライアントサイドとサーバーサイドの両方のコードを開発するのに利用されています。複雑なプログラムを実装するための既存の JavaScript ライブラリが多数あり、JavaScript は JSON や REST などの一般的な開発技術と連携して動作します。
Oracle Database 21cでは、開発者はデータが存在するデータベース内でJavaScriptのコードスニペットを実行できるようになりました。これにより、データをアプリケーション層やブラウザに転送させることなく、短い処理タスクをJavaScriptで簡単に表現し実行できるようになりました。Oracle Database 21cのMultilingual Engine(MLE)は、JavaScriptのデータ型をOracle Databaseのデータ型に自動的にマッピングし、その逆も同様にマッピングするため、開発者はデータ型の変換を自分で行う必要がありません。さらに、JavaScriptコード自体は、JavaScript組込みモジュールを介してPL/SQLやSQLを実行することができます。これにより、APEX開発者はPL/SQLやSQLのパワーを犠牲にすることなく、APEXアプリ内でJavaScriptを最優先の言語として利用できます。ここでは、DBMS_MLE PL/SQL パッケージを使用して JavaScript コードを実行するサンプルコードを紹介します。
set serveroutput on;
DECLARE
ctx dbms_mle.context_handle_t;
source CLOB;
greeting VARCHAR2(100);
BEGIN
ctx := dbms_mle.create_context(); -- Create execution context for MLE execution
dbms_mle.export_to_mle(ctx, 'person', 'World'); -- Export value from PL/SQL
source := q'~
var bindings = require("mle-js-bindings");
var person = bindings.importValue("person"); // Import value previously exported from PL/SQL
var greeting = "Hello, " + person + "!";
bindings.exportValue("greeting", greeting); // Export value to PL/SQL
~';
dbms_mle.eval(ctx, 'JAVASCRIPT', source); -- Evaluate the source code snippet in the execution context
dbms_mle.import_from_mle(ctx, 'greeting', greeting); -- Import value previously exported from MLE
dbms_output.put_line('Greetings from MLE: ' || greeting);
dbms_mle.drop_context(ctx); -- Drop the execution context once no longer required
END;
/
SQLマクロ
結合の数が増えたり、取得したデータに対する操作が複雑になったりすると、SQL文が複雑になることは珍しくありません。また、開発者がストアドプロシージャやテーブル関数を使用して、このようなよくある操作を単純化することで、この課題に対応しようとすることも珍しくありません。この方法はコードを単純化するのには非常に有効ですが、SQLエンジンがPL/SQLエンジンとコンテキストを切り替えるため、パフォーマンスが犠牲になる可能性があります。Oracle Database 21cでは、SQLマクロがこの問題を解決します。SQL式とテーブル関数を、実行したいSQLに挿入する文字列リテラルを返すストアド・プロシージャの呼び出しに置き換えることができます。これは非常にシンプルな概念で、CやRustのプログラマーには馴染みのあるものです。以下のちょっとした例は、それが実際に動作する様子を示しています。
まず、テーブルを作成して、いくつかの行を挿入してみましょう。
CREATE TABLE line_items
(
id NUMBER,
name VARCHAR2(30),
item_type VARCHAR2(30),
price FLOAT
);
INSERT INTO line_items VALUES (1, '赤ワイン', '食品', 1580);
INSERT INTO line_items VALUES (2, '保温マグカップ', '雑貨', 2390);
INSERT INTO line_items VALUES (3, 'ニューヨークバーガー', '食品(店内)', 700);
COMMIT;
以下のSQLは、LINE_ITEMSテーブルの行の品目毎に消費税を計算します。
SELECT id,
CASE
WHEN item_type = '食品' THEN ROUND(1.08 * price, 0)
WHEN item_type = '食品(店内)' THEN ROUND(1.10 * price, 0)
WHEN item_type = '雑貨' THEN ROUND(1.10 * price, 0)
ELSE price
END AS total_price_with_tax
FROM line_items;
しかし、Oracle Database 21cでは、新しいSQL_MACROキーワードで関数を作成して文字列を返すことで単純化することができます。関数を作成します。
CREATE OR REPLACE FUNCTION total_price_with_tax(the_price FLOAT, the_item_type VARCHAR2)
RETURN VARCHAR2 SQL_MACRO(SCALAR) IS
BEGIN
RETURN q'[CASE
WHEN the_item_type = '食品' THEN ROUND(1.08 * the_price, 0)
WHEN the_item_type = '食品(店内)' THEN ROUND(1.10 * the_price, 0)
WHEN the_item_type = '雑貨' THEN ROUND(1.10 * the_price, 0)
ELSE the_price END]';
END;
/
開発者は、select文の中でSQLマクロを参照するだけです。実行される SQL は元の SQL ステートメントと全く同じですが、この関数を実行するため行がフェッチされるたびに起きるコンテキスト スイッチのオーバーヘッドはありません。
SQL> SELECT id, total_price_with_tax(price, item_type) AS total_price_with_tax
FROM line_items;
ID TOTAL_PRICE_WITH_TAX
---------- --------------------
1 1706
2 2629
3 770
また、開発者がパラメータ化されたビューやポリモーフィック テーブルを作成する際にも、同じアプローチを使用できることも注目に値します。
インメモリ機能の強化
データを分析する場合は列モデルを使用すると、行ベースのモデルを使用した場合と比較して、大幅なパフォーマンスの向上が期待できます。しかし、行で保持されたデータを使用した方が、データの更新が大幅に高速です。Oracle Database In-Memoryは、ユーザーが両方のアプローチのメリットを同時に享受できるという点でユニークです。しかも、ユーザーはアプリケーションを変更せずにこの機能を利用できます。Oracle Database In-Memoryは列型ストアをメンテナンスし、非常に高速なリアルタイム分析問合せをサポートします。Oracle Database In-Memory Blogは、この強力なテクノロジーの詳細を知るのに素晴らしい情報源です。
Oracle Database 21cで、Oracle Database In-Memoryを使用する際のパフォーマンスと使いやすさを向上させるために行った、大きな改善点を3つ紹介します。
- Database In-Memory Vector Join:新しく強化されたDeep Vectorization SIMDフレームワークを使用することで、Oracle Database In-Memoryは、インメモリ列ストア内の列に対するハッシュ結合などの操作を高速化することができます。ハッシュ結合の場合、結合はより小さな操作に分解され、ベクトルプロセッサに渡すことができます。使用されるキー値テーブルはSIMDに最適化されており、結合の左側と右側の行をマッチさせるために使用されます。このアプローチにより、従来の方法と比較して最大10倍の結合性能の向上が期待できます
- インメモリ列ストアの自己管理:Oracle Database In-Memoryが最初にリリースされたとき、ユーザーはどの列をインメモリ列ストアに格納するかを明示的に宣言しなければなりませんでした。これにより、メモリが逼迫している場合には、ユーザーには巧みな調整が求められました。Oracle Database 18cでは、アクティブに使用されている場合は自動的にオブジェクトを列ストアに配置し、使用されていない場合は削除する機能が導入されました。しかし、ユーザーはインメモリ化の検討対象とするオブジェクトを指定する必要がありました。Oracle Database 21c では INMEMORY_AUTOMATIC_LEVEL を HIGH に設定することで、すべてのオブジェクトが検討対象となります
- インメモリ ハイブリッド 列スキャン:メモリが限られているため、すべての表のすべての列を列ストアに配置することはできません。多くの場合、これは問題ではありませんが、たまに、列ストアからのデータと行ストアでしか利用できないデータを必要とするクエリが発生することがあります。Oracle Database In-Memory の以前のリリースでは、このようなクエリは単に行ストアだけを利用して実行されていました。Oracle Database 21cでは、ユーザーは両方を使用できるようになりました。オプティマイザは、インメモリ列ストアをスキャンし、必要に応じて行ストアから投影された列の値をフェッチします。これにより、パフォーマンスが大幅に向上する可能性があります

その他の注目すべき機能強化
完全な(長い)リストについては、『Oracle Database 21c New Features Guide』を参照してください。ここでは、DBA、開発者、アナリスト、データサイエンティストが興味を持ちそうな、より注目すべき機能強化をいくつか紹介します。
- 式に基づく init.ora パラメータ:データベースパラメータ (init.ora) を、システムの構成上の計算式に基づいて設定することができるようになりました。 例えば、データベースパラメータのCPU_COUNTをオペレーティングシステムで利用可能なCPUの数の半分に設定する、等です
- 自動ゾーン・マップ:Oracle Database 21c on Exadataでは、問合せで使用される述語(WHERE句やHAVING句)に基づいてゾーン・マップを自動的に作成できるようになりました。これまでは、手作業でデータがどのようにアクセスされるかをユーザーが理解する必要がありました。自動ゾーンマップにより、スキャンが必要なブロック数を大幅に削減できます
- インデータベース機械学習(ML)アルゴリズムはOracle Databaseに組込み済みで、データサイエンティストはOracle Databaseのパワーを活用して、既存のデータベース上の表にあるデータで直接実行される予測モデルを(30以上のMLアルゴリズムを使用して)構築することができます。ファイル・システムや専用データベースにデータを抽出して「サンドボックス」分析を行う手間はありません。MLアルゴリズムを元となるデータ上で直接実行するというオラクルのアプローチは、データの移動を最小限に抑え、スケーラビリティを実現し、データ・セキュリティを維持し、予測型分析のモデル展開までの時間を短縮し簡素化します。Oracle Database 21cでは、MSET-SPRTおよびXGBoostアルゴリズム、およびニューラル・ネットワーク・アルゴリズムのアダム最適化ソルバーが追加でサポートされています
- AutoML:Oracle Database 21cは、データベースへのPython機械学習インターフェースを提供し、データサイエンティストやアナリストがデータベース内の機械学習をより活用しやすくします。この新しいクライアント・ツールは、すでに利用可能な既存のRおよびSQLインターフェースを補完します。AutoMLは、正確なモデルを構築するために必要なモデル選択、特徴の選択、パラメータ調整のプロセスを自動化することで、予測機械学習モデルの開発を簡素化します
- 最適化されたグラフ・モデル:グラフは数百万から数十億もの辺と頂点で構成されることがあるため、Oracle Database 21cリリースではグラフ機能のストレージを最適化し、モデルのスペースとパフォーマンスが大幅に向上します
- シャーディングの機能強化:Oracle Shardingは、SQLの柔軟性を維持しながら、ハイパースケール・アプリケーションのための線形スケーラビリティ、障害の分離、および地理的分散を可能にします。Oracle Shardingに対応したJavaアプリケーションの開発を容易にするために、新しいJavaデータソースを導入しました。これにより、シャーディングキーを定義したり、接続キーを明示的に管理しなくても、接続を簡単に確立することができます。また、実行中に作業中のシャードに障害が発生した場合、自動的に代替のシャードを探すことで、より耐障害性の高いシャーディングを実現しました
- 永続メモリ(PMEM)のサポート:Oracle Database 21cには、SSDや回転ディスクを使用する従来のファイル・システムよりも大幅にレイテンシと帯域幅を改善できるPMEMファイル・システムのサポートが含まれています。しかし、PMEMファイルシステムを使用するアプリケーションは、PMEMファイルシステムへの安全な書き込み方法と、他のOSリソースと組み合わせて使用する最も効率的な方法を理解しておく必要があります。Oracle Database 21cの実装は、アトミック書き込みをサポートしており、予期せぬ停電時に書き込みが途中で終わるリスクから安全にガードします。また、メモリコピーを使用した高速I/O操作も提供します。さらに、データベースのバッファキャッシュの利用を効率的にバイパスし、PMEMストレージから直接読み出しします
InnovationリリースとLong Term(長期)リリース
Oracle Database 21cはInnovationリリースで、お客様がより迅速に革新を行うのに新しい機能や強化された機能を活用し、ワークロードのユースケースやアプリケーションにメリットをもたらします。Long Termリリースとは異なり、Innovationリリースのサポート期間は限られています(通常は2年間)。したがって、ビジネスの継続性を維持するために、旧リリース(11gR2、12cR1、12cR2、18cなど)をまだ使用しているお客様は、2027年4月までサポートされている現在のLong TermリリースであるOracle Database 19cにアップグレードすることをお勧めします。
すべてのオンプレミス・プラットフォーム(Exadataを含む)およびOracle Cloud(Autonomous Database Servicesを含む)における最新のOracle Database 21cのリリース時期とサポート期間については、My Oracle Support(MOS)ノート742060.1を参照してください。