12cR1.3.0.9での変更点

Oracle NoSQL Database 12cR1.3.0.9で次の変更が行われました。

新機能

  1. 管理CLIのコマンドライン履歴がファイルに保存されるように修正され、再起動後に使用できるようにしました。この機能を無効にする場合は、runadminの実行中に次のJavaプロパティを設定する必要があります。

    java -Doracle.kv.shell.jline.disable=true -jar KVHOME/kvstore.jar runadmin -host <hostname> -port <portname>
    

    CLIは、KVHOME/.jlineoracle.kv.impl.admin.client.CommandShell.historyファイルに履歴を保存するよう試みます。このファイルは、自動的に作成およびオープンされます。デフォルトで保存される履歴は500行です。履歴ファイルを開けない場合、警告なしで失敗し、CLIは保存済履歴なしで実行されます。

    デフォルトの履歴ファイルのパスは、Javaプロパティoracle.kv.shell.history.file=pathを設定することでオーバーライドできます。

    ファイルに保存されるデフォルトの行数は、Javaプロパティoracle.kv.shell.history.size=int_valueを設定することで変更できます。[#22690]

  2. 管理CLIのaggregateコマンドを修正して、キー/値の入力用のサブコマンドを使用できるようにしました。aggregate tableサブコマンドは表の数値フィールドに対する単純なデータ集計操作を実行し、aggregate kvサブコマンドはキーに対する集計操作を実行します。[#23258]

バグとパフォーマンスの修正

  1. 弱参照を使用するように索引イテレータの実装を修正し、ガベージ・コレクタが未使用の索引イテレータに関連付けられたリソースを削除できるようにしました。[#23306]

  2. メタデータ伝播の処理およびその他の内部操作を改善しました。[#23355], [#23368], [#23385]

  3. 外部表の統合を修正して、同時処理の負荷をプロセス間により均等に配分するようにしました。[#23363]

  4. 索引のあるストアのトポロジ再配分の際に実行されたパーティション移行中の失敗により、移行が再開されたときにSecondaryIntegrityExceptionsがスローされるという問題を修正しました。[#23392]

  5. FieldRange.setEndDateメソッドを削除し、既存のsetEndメソッドを使用するようにしました。[#23399]

  6. 異なるタイプを使用する古いフィールドを復活させる可能性がある変更を避けるために、スキーマ展開を修正しました。このような変更により、現行の表で古いデータが読取り不可になることがあります。この修正は、以前の定義に厳密に一致しないかぎり、フィールド名の復活を回避します。[#23403]

  7. ネットワーク・タイムアウトの処理の問題を修正し、タイムアウトの発生時にRequestTimeoutではなく、KVStore操作からFaultExceptionがスローされることがないようにしました。次にスタック・トレースの例を示します。[#23411]

    Caused by: oracle.kv.FaultException: Problem during unmarshalling (12.1.2.1.24)
    Fault class name: java.rmi.UnmarshalException
        at oracle.kv.impl.api.RequestDispatcherImpl.faultIfWrite(RequestDispatcherImpl.java:968)
        at oracle.kv.impl.api.RequestDispatcherImpl.handleRemoteException(RequestDispatcherImpl.java:883)
        at oracle.kv.impl.api.RequestDispatcherImpl.handleDispatchException(RequestDispatcherImpl.java:736)
        at oracle.kv.impl.api.RequestDispatcherImpl.execute(RequestDispatcherImpl.java:572)
        at oracle.kv.impl.api.RequestDispatcherImpl.execute(RequestDispatcherImpl.java:1031)
        at oracle.kv.impl.api.KVStoreImpl.executeRequest(KVStoreImpl.java:1251)
        at oracle.kv.impl.api.KVStoreImpl.putIfVersion(KVStoreImpl.java:990)
        at oracle.kv.impl.api.KVStoreImpl.putIfVersion(KVStoreImpl.java:968)
        [...]
        ... 41 more
    Caused by: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is:
        java.net.SocketException: Socket closed
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:228)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
        at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
        at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
        at com.sun.proxy.$Proxy21.execute(Unknown Source)
        at oracle.kv.impl.api.RequestHandlerAPI.execute(RequestHandlerAPI.java:94)
        at oracle.kv.impl.api.RequestDispatcherImpl.execute(RequestDispatcherImpl.java:560)
        ... 46 more
    Caused by: java.net.SocketException: Socket closed
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:121)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
        at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1822)
        at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:718)
        at sun.rmi.transport.StreamRemoteCall.releaseOutputStream(StreamRemoteCall.java:114)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:212)
        ... 52 more
  8. 表の反復を修正して、すべての一致するエントリが1つのシャードに含まれる場合のパフォーマンスを最適化しました。[#23412]

  9. 別のシャードからのレコードと等価のレコードがある場合に、索引スキャン・イテレータがシャードからレコードを返すことに失敗する問題を修正しました。この状況は、ストアに複数のシャードがあり、指定された索引と等価の索引エントリが両方のシャードにある場合に発生します。これは、索引の反復で予想より少ない行が返される症状です。[#23421]

  10. 表パッケージにいくつかのインタフェースを追加しました。

    • List<String>IndexKey.getFields()は、索引の定義に使用されるフィールドを返します。

    • List<String>PrimaryKey.getFields()は、主キーの定義に使用されるフィールドを返します。

    • List<String>RecordValue.getFields()は、レコードの定義に使用されるフィールドを宣言順に返します。

    • Map<String, FieldValue> MapValue.getFields()は、マップの不変のビューを返します。

    関連するJavadocも、これら(および類似のインタフェース)から返されるリストおよびマップが不変であることを示すように更新されました。[#23433]

  11. データ・コマンドライン・インタフェース(CLI)には、JSON記法によるファイルから表の行を入力するメソッドがあります。この入力メソッドには、空白行が原因で入力パスに無限ループが発生する問題がありました。これは、空白行およびコメント行(最初の非空白文字が"#"の行)をサイレントにスキップする方法で修正されました。[#23449]

  12. 索引付きフィールドおよびIndexKeyのnull値の処理を修正しました。これまで、索引付きフィールドのnull値はサーバー側の例外の原因となっていました。putの間、索引付きフィールドのnull値が原因で、そのフィールドが参加する索引に対する索引エントリがなくなります。さらに、IndexKeyインスタンスではnull値が許可されていません。IndexKeyにnull値を設定しようとすると、IllegalArgumentExceptionがスローされます。[#23588]

  13. ホスト上のすべてのインタフェースをリッスンするように管理サービスを修正しました。この変更により、異機種間ネットワーク環境におけるKVStoreのデプロイメントが可能になりました。この場合、ホスト名を異なるIPアドレスに解決し、使用可能なネットワーク・ハードウェアを最大限に利用できます。[#23524]