22.1.16での変更点
トピック
新機能
- 単一パーティションからなる小さいスタンドアロンのストア・インスタンスをプログラムで作成および制御できる、新しいクラスを追加しました。主要なクラスを次に示します。
- KVLocal: ストア・インスタンスを表します
- KVLocalConfig: KVLocalインスタンスの構成が可能です
KVLocalは、TCP/IP接続を使用するように構成できます。または、Java 16以上を使用している場合は、Unixドメイン・ソケットを使用するように構成できます。
KVLocalのサポートにおいては、単一パーティションのストア(KVLocalによって管理されるものなど)の場合は、KVStore.executeとTableAPI.executeに渡されるOperationリストとTableOperationリストで指定されているすべてのキーでそれぞれ同じメジャー・パスまたはシャード・キーを共有するという要件が緩和されています。
[KVSTORE-1064]
- タイムスタンプに関して算術演算を実行するための新しいSQL関数を3つ追加しました。
-
timestamp(9) timestamp_add(timestamp, string)
タイムスタンプ値に期間を追加し、新しいタイムスタンプを返します。期間は、[-]<n> (<UNIT>)+という書式の文字列です。ここで、<UNIT>はYEAR、MONTH、DAY、HOUR、MINUTE、SECOND、MILLISECOND、NANOSECONDまたはこれらのキーワードの複数形(例: YEARS)です。UNITキーワードでは大文字と小文字が区別されません(例: 1 day 12 hours)。
-
long timestamp_diff(timestamp, timestamp)
2つのタイムスタンプ値の間のミリ秒数(timestamp1 - timestamp2)を返します。
-
string get_duration(long)
指定されたミリ秒数を期間文字列に変換します。
[KVSTORE-1338]
-
- SQL問合せで、タイムスタンプ値を長整数値にキャストできます。この長整数値は、1970年1月1日00:00:00 GMTからのミリ秒数です。
[KVSTORE-1247]
- 複数リージョン表に子表のサポートを追加しました。子表は必ず、関連する最上位レベルの表にあるリージョンを継承するため、ユーザーは、子表の作成時にリージョンを指定することも、子表に対してリージョンを明示的に追加または削除することもできません。
[KVSTORE-1114]
- スキーマレスJSONフィールド内でMR_COUNTERデータ型を使用できるように、JSONでのMRCounterのサポートを追加しました。JSON列のMR_COUNTERフィールドを宣言する構文を次に示します。
field-name AS field-type MR_COUNTER
JSON MR_COUNTERは、他のMR_COUNTER列と同じ方法で更新できます。
[KVSTORE-1223]
- makebootconfigまたはsecurityconfigユーティリティで作成されるデフォルトのセキュリティ構成のキーストアおよびトラストストアのタイプをPKCS12に切り替えました。
デフォルトのセキュリティ構成においてNoSQL Databaseサーバーで使用されるキーストアとトラストストアは、PKCS12パスワードで保護されたストアとして作成されます。デフォルトのセキュリティ構成においてクライアント・アプリケーションで使用されるトラストストア(client.trust)は、PKCS12パスワード不要ストアとして作成されます(構成ユーティリティの実行に使用されるJavaのバージョンでその機能がサポートされている場合)。サポートされていない場合は、client.trustにパスワードが指定されていないと、ユーティリティによってJKSストアの作成にフォール・バックされます。
セキュリティ構成の作成のために、次の2つの新しいオプション・フラグが導入されています。-
-kstype <JKS | PKCS12>
セキュリティ構成においてPKCS12またはJKSストア(デフォルトはPKCS12)としてキーストアおよびトラストストアを作成します。
-
-ctspwd <client.trust password>
指定されたパスワードを使用して、パスワードで保護されたPKCS12ストアとしてclient.trustを作成します。
このリリースにアップグレードしても、以前のリリースで作成された既存のキーストアまたはトラストストアのストア・タイプが自動的にPKCS12に変換されることはありません。既存の構成のストア・タイプを切り替えるために、securityconfigユーティリティに次の新しいコマンドが追加されています。securityconfig config update -secdir security -kstype PKCS12
パスワードで保護されたPKCS12ストアとしてclient.trustを作成する場合にclient.trustのパスワードを構成するための新しいクライアント・セキュリティ・プロパティを2つ追加しました。-
oracle.kv.ssl.trustStorePassword
-
oracle.kv.ssl.trustStorePasswordAlias
client.trustのパスワードは、
oracle.kv.ssl.trustStorePassword
を介して直接指定するか、パスワード・ストアに保持できます。後者の場合は、oracle.kv.ssl.trustStorePasswordAlias
パラメータを使用してパスワード・ストア内のパスワードの別名を指定します。NoSQL Databaseドライバによって自動的にパスワード・ストアからパスワードが取得されます。securityconfigユーティリティ内のmerge-trustコマンドを更新しました。このコマンドでは、PKCS12ストアを使用して作成されたセキュリティ構成をJKSストアを使用して作成されたセキュリティ構成にマージする場合は、信頼できる証明書がすべてマージされた後に、トラストストアのストア・タイプがPKCS12に自動変換されます。ただし、このコマンドでは、両方のセキュリティ構成がJKSストアを使用して作成されておりそれらの信頼できる証明書をマージする場合は、ストア・タイプは変換されません。
[KVSTORE-60]
-
バグとパフォーマンスの修正
- 複数リージョン表に対してdescribe tableを実行するとNullPointerExceptionが発生する可能性があるという不具合を修正しました。
[KVSTORE-1426]
- 複数リージョン表に対するリージョンの追加または削除はストアの負荷が高いときには正しく実行されない場合があるという不具合を修正しました。
[KVSTORE-1374]
- キー専用表を後で変更してアイデンティティ列を追加した場合にその変更前に挿入されたキー専用行を読み取ろうとするとエラーが発生するという不具合を修正しました。
[KVSTORE-1370]
- 文字列をJSONデータから取得した場合にその文字列からタイムスタンプへの暗黙的なキャストが機能しないという不具合を修正しました。
[KVSTORE-1477]
- 内部JEパラメータpreHeartbeatTimeoutMsのデフォルト値が正しい値に設定されないという不具合を修正しました。この不具合が原因で、まれに、ストアで障害からのリカバリやマスター転送に1時間以上かかることがあります。
[KVSTORE-1384]
- キー専用のMR表が列の新規追加によって進化するときに、リモート・リージョンへのレプリケート中に、その新規追加された列が失われる可能性があるという不具合を修正しました。
[KVSTORE-1333]
- リリース20.2以前で記述されたSTRING型の同種のJSON配列を含む行をリリース20.3以降でデシリアライズできないという問題を修正しました。この問題は、get()の結果または問合せの結果にない行について、値をデシリアライズする必要がある場合に発生します。データはそのまま残りますが、アクセスできません。
[KVSTORE-1347]
- 表に自動生成されたIDまたはUUID列がありVALUES句の前に列リストが使用されている場合のSQL INSERTにおける不具合を修正しました。この場合は例外がスローされますが、これは想定されている動作ではありません。
[KVSTORE-1371]
- WHERE句でpartition()関数が使用されている場合の問合せの不具合を修正しました。次の例でこの不具合を示します。
select id, partition($f) as part from foo $f where $f.address.state = "MA" and partition($f) = 2
前述の問合せは、実行のために、パーティション2を含むRN(レプリケーション・ノード)に送信されます。address.stateに索引がある場合は、問合せによって、そのRNでその索引が使用されます。通常、索引には、RNに格納されている複数のパーティションからのエントリが含まれます。この不具合では、索引のスキャン中に、パーティション2に属さないエントリがフィルタで除外されません。
[KVSTORE-1334]
- UUID列がある表をスキーマ進化後に変更できなくなる(スキーマ進化前に挿入された行がスキーマ進化後にデシリアライズされない)という不具合を修正しました。
[KVSTORE-1357]
- 問合せの結果タイプの計算における不具合を修正しました。具体的には、結果タイプ内のフィールドのNULL可能性フラグが誤ってfalseに設定される可能性があります。これは、そのフィールドに対応するSELECT句式でNULLが返されず空の結果が返された場合に起こります。この場合はSELECT句によってEMPTYがNULLに変換されるためNULL可能性フラグはtrueに設定される必要があります。
[KVSTORE-1342]
- 管理者が再起動した後にAPPROVED状態のプランが実行されないという不具合を修正しました。
[KVSTORE-1194]
- ストリームAPIで、ストア拡張中に作成された新しいシャードへの書込みが失われる可能性があるという不具合を修正しました。
[KVSTORE-1336]
- XRegionエージェントによる複数リージョン表の新規作成中に以前はリモート・リージョンになかった複数リージョン表が検出されると発生する可能性がある問題を修正しました。この場合は、エージェントによってそのリモート・リージョンを表に追加できず、ローカル表にそのリモート・リージョンからの更新が届きません。
[KVSTORE-1300]
- プロキシベースの問合せのサーバー側実行計画をデシリアライズする際の互換性の問題を修正しました。次の2つのケースに関連する問題を修正しました。
- サーバーより新しいkvclientで問合せが準備されます。
- バージョンV1のkvclientで問合せが準備されます。準備された問合せがアプリケーションによってキャッシュされます。その後、kvclientとkvserverがV2にアップグレードされます。アプリケーションによって、キャッシュされた問合せが再び実行されます。この場合には、サーバーによって、V1ではなくV2を使用して問合せ計画のデシリアライズが試行されます(失敗します)。
[KVSTORE-1363]
- ネットワークまたはリモート・リージョンの障害があると複数リージョン表の追加に失敗する可能性があるという不具合を修正しました。XRegionエージェントに、障害解決時に表が追加されるようにする再試行メカニズムが備わりました。
また、ストリームAPIサブスクリプションがストアに再接続したときに想定より後の位置からそのサブスクリプションが再開される場合があるという不具合を修正しました。この問題は、ストリームAPIと複数リージョン表の両方に影響する可能性があります。
[KVSTORE-1265]
- パフォーマンスJSONファイル(rnOp*.JSONなど)内に20.3で導入した互換性のない変更を修正しました。互換性のない変更とは、以前浮動小数点数であったレイテンシ・メトリック(たとえば、AllSingleKeyOperations_Interval_Avg)を整数値に変更したことです。この変更により、ミリ秒未満のレイテンシ値がゼロとして表示されるようになりました。浮動小数点数の使用に戻すように修正しました。
[KVSTORE-1289]
- リリース19.5より前に作成された一度も変更されていないデータがある表に対して問合せを実行すると「modification time not available」というエラーで失敗する可能性があるという問題を修正しました。
[KVSTORE-1234]
- 問合せをネスト解除して不具合を修正しました。問合せでネスト解除索引が使用されておらず、その問合せ内で指定されている配列またはマップのネスト解除中にバッチ・サイズに到達すると、問合せ結果が失われます。
[KVSTORE-1228]
- 問合せをネスト解除して不具合を修正しました。
count(*)
が指定されている問合せで、その問合せよりも深いレベルでネスト解除されたネスト解除索引が誤って使用されていました。[KVSTORE-1292]
- 問合せタイムアウトに関連する2つの不具合を修正しました。1つ目は、問合せがドライバでタイムアウトしてもRNで実行され続けるという問題です。2つ目は、問合せで一般的な(索引ベースではない)ソートまたはグループ化が実行された場合に問合せタイムアウトが考慮されないという問題です。
[KVSTORE-353]
- 管理ストレージ・ディレクトリ・パスを表示するshow admins管理CLIコマンドの出力を変更しました。また、管理ストレージ・ディレクトリのサイズを表示するpingコマンドの出力を変更しました。
[KVSTORE-102]
- makebootconfigまたはsecurityconfigユーティリティで作成されるセキュリティ構成のデフォルトのTLSプロトコルにTLSv1.3を追加しました。セキュリティ構成のデフォルトのTLSプロトコルは、TLSv1.3、TLSv1.2になりました。なお、この新しいプロトコルは、前述のユーティリティで新しいセキュリティ構成を作成するときにのみ使用されます。このリリースにアップグレードしても、実行中のストアの既存のセキュリティ構成が自動的に更新されることはありません。TLSv1.3プロトコルを使用するように既存のストアをアップグレードすることをお薦めします。Oracle NoSQL Databaseのセキュリティ・ガイドで「TLSv1.3プロトコルの有効化のガイドライン」を参照してください。
[KVSTORE-263]
- makebootconfigおよびsecurityconfigユーティリティで2048バイトのRSAキーが生成されるようになりました。なお、更新されたキーは、前述のユーティリティで新しいセキュリティ構成を生成するときにのみ作成されます。このリリースにアップグレードしても、実行中のストアで使用される既存の秘密キーが自動的に更新されることはありません。新しい秘密キーを使用するように(2048バイトのRSAキーを使用するように)既存のストアをアップグレードすることをお薦めします。Oracle NoSQL Databaseのセキュリティ・ガイドで「SSLキーおよび証明書の更新のガイドライン」を参照してください。
[KVSTORE-932]
- 表が複数リージョンである場合に複数リージョン表情報を含めるようにDDLコマンドdescribe tableからの出力を変更しました。
[KVSTORE-1155]
- リモート・リージョンにない複数リージョン表がローカル・リージョン内および他のリモート・リージョン内の既存の複数リージョン表の妨げにならないように変更しました。この修正により、リモート・リージョン内にMR表がないかMR表の非互換スキーマがある場合は、エージェントによって、特定の表が定期的にチェックされ、同時に、そのMR表がある他のリモート・リージョンに対しては処理が続行されるようになります。問題となっている表が再びそのリモート・リージョン内で使用可能になると(不足していた表が再作成された場合や、互換性のないスキーマが修正された場合など)、エージェントによって、その表が含まれるようになり、使用可能な他のMR表と同様にそれに対して処理が実行されます。
[KVSTORE-395]
- キー専用の複数リージョン表が正しく動作しないという不具合を修正しました。
[KVSTORE-1302]
- ストア拡張度操作中にユーザー・データをシャード間で移動するための基本的メカニズムである、パーティション移行に関するいくつかの不具合を修正しました。次の問題を修正しました。
- レコード変更時間が誤って移行される可能性があり、それにより、複数リージョン表に問題が発生する
- 一部のエッジ・ケースで、移行終了時にクライアント書込みが失われる可能性がある
- 特定のRNレプリケーション状態が変わった後に移行サービスを利用できない場合がある
[KVSTORE-1250] [KVSTORE-1244] [KVSTORE-1221]
- ストレージ・ノードに接続しているときに発生するネットワーク接続問題への対応において、Javaダイレクト・ドライバの堅牢性が向上しました。
[KVSTORE-1423]
- アップグレードでストア・バージョンが完全には更新されなかった場合は短期間のうちにレプリケーション・ノードがクラッシュすることやレプリケーション・ノードのメタデータが破損することがあるという不具合を修正しました。この不具合により、UUIDまたはMRCounterがある表が新規追加された場合、または既存の表が変更されてUUIDまたはMRCounterフィールドが追加された場合、短期間のうちに、レプリケーション・ノードがクラッシュする可能性がありました。UUIDがある表の場合、短期間のうちにレプリケーション・ノードがクラッシュしますが、ストア・バージョンを更新するとその問題が解決します。MRCounterがある表の場合は、この不具合によって永続的なメタデータ破損が発生する可能性があり、それにより、レプリケーション・ノードは再起動してもクラッシュし続ける可能性があります。
[KVSTORE-1361]
APIの変更点
Row.getExpirationTime()
で、基礎となる行メタデータを取得できなくても例外がスローされなくなりました。かわりに、有効期限がないことを示す0が返されます。TTLがないか、TTL機能の導入前に書き込まれた行の有効期限は0ですまた、1970年1月1日以降の行の最終変更時間をミリ秒数で返す
Row.getLastModificationTime()
を追加しました。行が最後に変更された際にリリース19.5より前のバージョンのシステムを使用していた場合、その変更時間は取得できず、0が返されます。[KVSTORE-1234]
IndexKeySizeLimitException
クラスは非表示としてマークされました。これは内部使用専用です。[NOSQL-408]