25.3.21での変更点
Oracle NoSQL Databaseリリース25.3.21 Enterprise Editionでは次の変更が行われました。
トピック
新機能
- Streams APIに変更前イメージのサポートが追加されました。ユーザーは、ストリーミング操作の変更前イメージを含めるようにサブスクリプション・ストリームを構成できます。たとえば、サブスクライブされた表に対する更新操作をストリーミングする場合、サブスクリプションには、現在のイメージ(更新操作)と変更前イメージ(更新前に表示されていた行)の両方が含められます。
[KVSTORE-2394]
- Streams APIにトランザクションによるストリーミングのサポートが追加されました。ユーザーは、個々のput操作とdelete操作ではなく、トランザクションをストリームするようにサブスクリプション・ストリームを構成できるようになりました。たとえば、サブスクライブされた表に対して1つのトランザクションで複数の行を更新または削除する操作の場合、サブスクリプションはトランザクション全体を単一のストリーミング・イベントとして配信します。トランザクション内の操作には、そのストリーミング・イベント内からアクセスできます。
[KVSTORE-2341]
- ユーザー指定の行メタデータの実験的なバージョンのサポートが追加されました。ユーザーは書込み操作中に、行インタフェースの新しいAPIを使用するか、SQLで問合せを記述する場合はExecuteOptionsを使用して、任意の行に独自のメタデータを追加できます。行メタデータには、オブジェクト、配列、文字列、数値、ブールまたはnullのJSONコンストラクトを指定できます。このメタデータは、表APIまたは新しいSQL row_metadata関数を介して取得できます。ユーザー指定のメタデータは、Streams APIでも使用できます。詳細は、リリース・ノートの既知の問題を参照してください。
[KVSTORE-2627]
バグの修正とパフォーマンスの向上
- 管理CLIで複数のコマンドを実行する際に、runadminの終了コードが常にゼロであったというバグを修正しました。修正後、runadminは最後に実行されたadminコマンドの終了コードを返すようになりました。
[KVSTORE-2582]
- すべてのストリーム・フィーダおよびサービス・ディスパッチャをサポートするように1つのStreamAuthenticatorが構成されたバグを修正しました。多数のリージョンが構成されている場合、セキュリティ・チェックの失敗が発生する可能性があります。修正後は、複数のStreamAuthenticatorが構成されます。
[KVSTORE-2808]
- ハード・ロールバックの処理方法が変更されました。
以前は、マスター・レプリカ同期で完了したトランザクションのロールバックが必要な場合、ロールバックはSEVEREメッセージとして記録されていました。TXN_ROLLBACK_DISABLEDがtrueに構成されている場合、またはTXN_ROLLBACK_LIMITに設定されたトランザクションよりも多くのトランザクションがロールバックされた場合、システムは再起動を試行し、RollbackProhibitedExceptionをスローします。ロールバックと再起動が常に実行されるようになりました。非永続トランザクションのみがロールバックされると、ロールバックはINFOレベルで記録されます。永続トランザクションがロールバックされると、ロールバックはSEVEREレベルで記録されます。
この変更の結果、RollbackProhibitedException例外は非推奨になり、TXN_ROLLBACK_DISABLEDおよびTXN_ROLLBACK_LIMITの構成は無効および非推奨になりました。
[KVSTORE-2636] [KVSTORE-2686]
- マスターの変更後に永続トランザクションがロールバックされることがあるケースを修正しました。
マスターの変更後、定足数で新しいレコードが認識されるまで、JEはDTVLSNを進めなくなります。ノードがマスターになった後、アプリケーション自体が永続トランザクションを作成するのを待たずに、前の期間での障害発生時に処理中であった非永続トランザクションが新しい期間で永続的になるように、NullTxnをコミットするようになりました。つまり、NULLトランザクションの認識によってDTVLSNが進むため、これらの非永続トランザクションが早く最終状態になります。https://raft.github.io/raft.pdfの5.4.2の項を参照してください。
[KVSTORE-2657]
- 1つのノードで障害が発生した場合に、アービタで定足数が失われる可能性がある問題を修正しました。クラスタが2つのレプリケーション・ノードと1つのアービタで起動され、1つのレプリケーション・ノードが分離されて、もう1つのレプリケーション・ノードへの書込みが試行された場合、アービタがレプリカ・フィーダのハンドシェイクを時間内に開始できないため、書込みが失敗しました。
[KVSTORE-2654]
- 特定の状況下(繰り返しのネットワーク接続など)で内部スレッド・プールによって過剰なスレッドが作成されることがある問題を修正しました。この問題は、CPU使用率が高いと確認される場合があります。通常、スレッド・ダンプには、名前パターンが「NioEndpointGroup.backup」の多くのスレッドが表示されます。
[KVSTORE-2719]
- パーティション・スキャンの完了(およびこの事実の永続化)後、ソース・シャードでパーティションがターゲット・シャードによって所有されていると認識されるバグを修正しました。ただし、この障害によってEODが送信されないため、ターゲット・シャードで転送が完了しません。この障害によって、ソースは移行を取り消しますが、パーティションをリストアするアクションは実行されず、パーティションが長時間使用できなくなります。ソースで障害が発生しても、ターゲットで移行エラー状態にはなりませんでした。ターゲットでは、単に移行を中止し、ターゲット移行状態==保留中で再スケジュールしていました。ソースの監視スレッドは、ターゲット移行の状態がエラーの場合にのみアクションを実行します。
修正前のパーティション移行状態フロー:
保留中-->実行中-->保留中
ソースによって最後のレコードが処理されたことをLAST_RECORD_MARKERがアサートする問題を修正しました。ターゲット・シャードでEODが受信されず、LAST_RECORD_MARKERがターゲットによって受信された場合、移行が取り消され、ターゲットの移行状態がエラーになるように、MigrationTargetが変更されました。
TargetMonitorExecutorでは、ターゲットの状態がエラーと認識され、失敗したメソッドがコールされます。失敗したメソッドは、manager.removeRecordをコールして、ソース移行レコードを削除し、ローカル・トポロジを更新して、パーティションの所有権をソース・シャードにロールバックします。
修正後のパーティション移行状態フロー:
保留中-->実行中-->エラー
[KVSTORE-456]
- 再認証後も、KVStore.execute()を介したDDL操作の実行がAuthenticationRequiredExceptionで繰り返し失敗することがある問題を修正しました。この障害では、スタック・トレースに次のような例外がスローされます:
oracle.kv.AuthenticationRequiredException: Authentication required for access at oracle.kv.impl.security.AccessCheckerImpl.checkAccess(AccessCheckerImpl.java:216) at oracle.kv.impl.security.ExecutionContext.create(ExecutionContext.java:159) at oracle.kv.impl.security.SecureProxy$CheckingHandler$1.execute(SecureProxy.java:561) at oracle.kv.impl.security.SecureProxy$CheckingHandler$1.execute(SecureProxy.java:552) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:147) at oracle.kv.impl.security.SecureProxy$CheckingHandler.invoke(SecureProxy.java:550) at oracle.kv.impl.security.SecureProxy.invokeNonObject(SecureProxy.java:109) at oracle.kv.impl.util.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:107) at jdk.proxy2.$Proxy13.canHandleDDL(Unknown Source)[KVSTORE-2679]
- 移行ツールによってファンクション索引のDDLがSQLシェルからの「DDLの表示」出力に誤って生成されるバグを修正しました。
[KVSTORE-2702]
- DESC AS JSON TABLEの出力でファンクション索引をより適切にサポートするように、表スキーマの索引のJSON表現が改善されました。
[KVSTORE-2724]
- NUMBER値のシリアライズのバグを修正しました。負のNUMBER値で連続する2つのゼロバイトが(小数点以下の1桁目から数えて)偶数の位置に含まれていた場合(-2.0001など)、正しくシリアライズされなかったため、ソート順序が間違っていた可能性があります。
たとえば、次のようになります。
create table foo(id integer, n number, primary key(id)); insert into foo values(1, -2.001); insert into foo values(2, -2.0001); insert into foo values(3, -2); select * from foo order by n返される結果:
{"id":1,"n":-2.001} {"id":3,"n":-2} {"id":2,"n":-2.0001}予期される結果:
{"id":1,"n":-2.001} {"id":2,"n":-2.0001} {"id":3,"n":-2}この修正により、シリアライズ・ロジックが更新されますが、ストア内の既存のデータは変更されません。影響を受ける値を修正するには、アプリケーションで対応する行をリライトする必要があります。または、移行ツールを使用してデータをエクスポートおよび再インポートし、更新されたシリアライズを適用することもできます。
この修正は、問題のあるNUMBER値(つまり、連続する2つのゼロ・バイトが偶数の位置に含まれている負の値)にのみ適用されます。そのような値がデータに存在しない場合は、アクションは必要ありません。
[KVSTORE-2514]