Oracle Databaseでの変更点

Oracle Database 23aiの『SecureFilesおよびラージ・オブジェクト開発者ガイド』での変更点を次に示します。

リリース23aiでの新機能

Oracle Databaseリリース23ai用の『SecureFilesおよびラージ・オブジェクト開発者ガイド』での新機能を次に示します。

自動SecureFiles縮小

自動SecureFiles縮小では、適切なSecureFiles LOBセグメントが自動的に選択され、選択されたセグメントがバックグラウンドで縮小されます。

自動SecureFiles縮小では、DDL文およびDML文を同時に実行しながら、時間の経過ととも縮小操作が少しずつ段階的にユーザーが意識することなく実行されます。手動による方法では、セグメント・アドバイザなどのツールを使用して縮小するLOBセグメントを決定し、DDL文を使用して縮小操作を実行する必要があります。手動による方法は時間がかかるため、非常に大きいLOBセグメントでは実行できない場合があります。

自動SecureFiles縮小により、このプロセスが自動化されて管理者の業務が簡素化され、時間を節約できます。「自動SecureFiles縮小」を参照してください。

分散環境およびシャード環境でのサポート対象のLOBタイプの増加

以前は、永続LOBと一時LOBが、分散環境とシャード環境でサポートされていました。

分散環境とシャード環境で、インラインLOB、値LOBおよびすべての一時LOBを使用できるようになりました。一時LOBの使用時のパフォーマンス、スケーラビリティおよびガベージ・コレクションが向上します。分散LOBを参照してください。

重複除外によって保存された領域の見積り

重複除外を有効にする前に、GET_LOB_DEDUPLICATION_RATIO関数を使用して、既存のLOBに対してこの機能を有効にすることで節約できる領域を見積ります。

これにより、重複除外を有効にするために情報に基づいた決定を行うことができます。「拡張LOB重複除外を使用したALTER TABLE」を参照してください。

LOB書込みのパフォーマンスの向上

LOBの読取りおよび書込みパフォーマンスが向上します。

次の機能拡張により、LOBの読取りおよび書込みパフォーマンスが向上します。

  • 1つのトランザクションに複数のLOBが同時にバッファリングされます。これにより、単一のトランザクション内で書込み中にLOB間の切替えを使用するとパフォーマンスが向上します。
  • 様々な機能拡張により(圧縮されたLOBの追加や圧縮ユニットのキャッシングが高速化されるなど)、圧縮されたLOBへの読取りと書込みのパフォーマンスが向上します。
  • 入力出力バッファのサイズは、NOCACHEオプションを使用したLOBへの大きい書込みの入力データに基づいて変更されます。これにより、DBFSおよびOFS上のファイル・システムへの書込みなどの大規模な直接書込みのパフォーマンスが向上します。

インラインLOBの最大サイズが8000

実際のLOB値は、表の行(表内)または表の行の外(表外)に格納されます。

現在の、インラインLOBの最大サイズは8000です。以前は、最大サイズは4000でした。これにより、LOB列の処理中に入出力のパフォーマンスが向上します。全表スキャン、レンジ・スキャン、DMLなどの操作の実行中に、そのパフォーマンスの向上がわかるでしょう。SecureFiles LOB用のCREATE TABLE LOB記憶域パラメータの概要を参照してください。

SecureFiles移行ユーティリティを使用したBasicFile LOBの移行

SecureFiles移行ユーティリティを使用して、BasicFiles LOBセグメントのSecureFiles LOBセグメントへの移行および圧縮を簡略化します。

以前は、SecureFile LOBへの移行対象のBasicFile LOBを特定し、LOBを圧縮するかどうかを決定するのが困難でした。これは、多数のスキーマ、表、セグメントを持つ多数のデータベースを持つ組織に特に当てはまります。SecureFiles移行ユーティリティは、以前に手動で実行した複数のステップを自動化します。また、移行および圧縮するBasicFile LOBの決定に役立つ複数のレポートも生成されます。これは、BasicFile LOBデータをSecureFile記憶域に移行するために推奨される方法です。「SecureFiles移行ユーティリティを使用したLOBの移行」を参照してください。

LOBセグメントの名前変更

リリース23ai以降では、ALTER TABLE RENAME LOB文を使用して、パーティション表のLOBセグメント、パーティションおよびサブパーティションの名前を変更できます。

例 - コマンド構文

ALTER TABLE RENAME LOB (<column_name>) <oldsegment_name> to <newsegment_name>;
ALTER TABLE RENAME LOB (<column_name>) partition <oldsegment_name> to newsegment_name;
ALTER TABLE RENAME LOB (<column_name>) subpartition <oldsegment_name> to newsegment_name;

セグメントに指定する新しい名前がデータベース内で一意であることを確認してください。競合が発生した場合、データベースはORA-64223またはORA-64223を返します。既存のセグメントの名前を確認するには、all_lobsall_lobs_partitionall_lob_subpartitionsなどのLOBビューを問い合せます。

「ALTER TABLE BNF」を参照してください。

パラレル・ファイル・システム操作のパフォーマンスのチューニング

多数のPDBが含まれ、複数のDBMS_FSリクエストをパラレルに処理する必要がある環境でパフォーマンスをチューニングします。

OFS_THREADSの数を更新して、パラレルに実行されるDBMS_FSリクエストの数を増やすことができます。これにより、Oracleデータベース内のOracleファイル・システムでmake、mount、unmountおよびdestroy操作を実行しているワーカー・スレッドの数が増加します。

OFS_THREADSの値を増やすと、複数のPDBを含む環境でパラレル・ファイル・システム・リクエストの実行にかかる時間が大幅に短縮されます。V$OFS_THREADSビューを問い合せると、実行中のすべてのOFSスレッドをリストし、様々なOFSスレッドに関する詳細を取得できます。「OFSのビュー」を参照してください。

値LOBによりSQL問合せでのLOB値の読取りを最適化

値LOBとは、SQLフェッチ期間に有効な、一時LOBのサブセットです。

値LOBを使用すると、SQL問合せのコンテキストにおけるLOB値の読取りが最適化されます。多くのアプリケーションでは、中規模オブジェクト(サイズが数MB程度)の格納にLOBが使用されるため、SQL問合せのコンテキストにおいてのみLOB値を読み取る必要があります。

値LOBは、自律型で、読取り専用であり、より高パフォーマンスです。値LOBは、ほとんどの場合、参照LOBよりもパフォーマンスが高速です。アプリケーションでSQL問合せの一部として読取りのためにLOBがフェッチされ、そのカーソルに対して次のフェッチが実行される前にそのLOBデータが使用される場合は、値LOBを使用することをお薦めします。

カーソルに対して次のフェッチが実行されると、値LOBが自動的に解放されます。これにより、一時LOBの蓄積を防ぐことができ、問合せのパフォーマンスとスケーラビリティが向上します。一時LOBの場合、アプリケーションでそれに対する処理が完了したときのその一時LOBの解放は、ユーザーが実行する必要があります。

JSONのSQL関数は、値LOBを返すこともできます。値LOBを参照してください。

リリース23aiでの非推奨になった機能

Oracle Databaseリリース23ai用の『SecureFilesおよびラージ・オブジェクト開発者ガイド』での非推奨になった機能を次に示します。

mkstore Wallet管理ツールの非推奨

mkstoreウォレット管理コマンドライン・ツールは、Oracle Database 23aiで非推奨になり、将来のリリースで削除される可能性があります。

エンタープライズ・ユーザー・セキュリティ(EUS)の非推奨

エンタープライズ・ユーザー・セキュリティ(EUS)はOracle Database 23aiでは非推奨です。

Oracle JDBC独自BLOB/CLOBオープン・メソッドおよびクローズ・メソッドの非推奨

OracleBlobOracleClobおよびOracleBfileでのOracle JDBCメソッドopen()close()およびisClosed()は、Oracle Database 23aiでは、削除されるため非推奨となっています。

これらのメソッドは非推奨になっており、openLob()closeLob()およびisClosedLob()に置き換えられています。メソッドclose()は、インタフェース・タイプjava.lang.Autocloseableと競合します。独自メソッドclose()を削除すると、将来java.lang OracleBlobjava.lang.OracleClobおよびjava.lang.OracleBfileでAutocloseableインタフェースを拡張できるようになります。open()およびisClosed()メソッドは、これらのメソッドの合理的な名前を維持するために、将来のリリースで削除され、置き換えられます。