リリース12cR1.3.3.4 Enterprise Edition
管理者ガイドの既存のOracle NoSQL Databaseデプロイの更新に関する項を参照してください。
リリース3.3はJava SE 7以降との互換性があり、Oracle JDK 7u67に対してテストおよび認証されています。最新の不具合修正およびパフォーマンス改善を利用するために、最新のJavaリリースにアップグレードすることをお薦めします。
Java 7より前のバージョンのJavaとともにこのリリースを使用しようとすると、次のようなエラー・メッセージが表示されます。
Exception in thread "main" java.lang.UnsupportedClassVersionError: oracle/kv/impl/util/KVStoreMain : Unsupported major.minor version 51.0
次にあげる表固有の新しい一連の権限を使用すると、ユーザーはAPIと管理コマンドライン・インタフェース(管理CLI)の両方を通じて、表レベルのアクセス・チェックを強制的に実行できます。
| 権限 | 説明 |
| READ_ANY_TABLE | kvstoreの任意の表から読み込み |
| DELETE_ANY_TABLE | kvstoreの任意の表からデータを削除 |
| INSERT_ANY_TABLE | kvstoreの任意の表に対してデータを挿入および更新 |
| READ_TABLE | kvstoreの特定の表から読み込み |
| DELETE_TABLE | kvstoreの特定の表からデータを削除 |
| INSERT_TABLE | kvstoreの特定の表に対してデータを挿入および更新 |
| CREATE_ANY_TABLE | kvstoreで任意の表を作成 |
| DROP_ANY_TABLE | kvstoreで任意の表を削除 |
| EVOLVE_ANY_TABLE | kvstoreで任意の表を展開 |
| CREATE_ANY_INDEX | kvstoreの任意の表で任意の索引を作成 |
| DROP_ANY_INDEX | kvstoreの任意の表で任意の索引を削除 |
| EVOLVE_TABLE | 特定の表を展開 |
| CREATE_INDEX | 特定の表で索引を作成 |
| DROP_INDEX | 特定の表で索引を削除 |
ユーザーは、新しいロールを作成して、権限または他のロールをまとめてグループ化できるようになりました。これで、所定の権限のグループをユーザーに付与することができます。ロールの作成と削除をサポートし、他のロールに対して権限またはロールを付与したり取り消したりするために、新しいロール管理コマンドが追加されました。
すべてのセキュリティ操作に宣言インタフェースを提供するために、データ定義言語(DDL)が変更されました。言語リファレンスは、『Oracle NoSQL Databaseセキュリティ・ガイド』を参照してください。言語には、APIを介して、あるいは管理CLIで"execute"コマンドを実行してアクセスできます。
パスワードに有効期間が導入され、指定した有効期間を超えると失効するようになります。新しいユーザーを追加するとき、または既存のユーザーのプロファイルを変更することによって、パスワードを明示的に失効させることもできます。ユーザーは、失効したパスワードを更新すると、ストアにログインできるようになります。[#23951]
以前のリリースでセカンダリ・ゾーンに作成された管理サービスは、タイプが正しくなりません(プライマリ)。この不一致は、verify configurationコマンドで違反として報告されます。この状態は、plan repair-topologyコマンドを実行して修正できます。
管理サービスのタイプの動作が変更されたことに加え、管理サービスのデプロイメントに関して新しいルールが導入されています。一般的に、管理サービスはデータ・ノードと同じルールに従うこと、具体的には1つのゾーンにおける管理サービスの数がゾーンのレプリケーション・ファクタに一致することが推奨されます。[#23985][#24182]
show adminsコマンドではCLIが読取り専用で接続していることも示されます。
管理CLIに再接続の機能が追加され、管理ノードで障害が発生した場合のCLIの堅牢さが向上しました。[#23943]
oracle.kv.KVStore.executeとoracle.kv.KVStore.executeSyncが追加されたため、oracle.kv.table.TableAPI.executeとoracle.kv.table.TableAPI.executeSyncのメソッドは非推奨となりました。これは、ユーザーやロールなど、1つの表の範囲を超えたオブジェクトを管理する新しいDDL文が導入されたためです。同様に、oracle.kv.ExecutionFutureとoracle.kv.StatementResultが追加されたために、oracle.kv.table.ExecutionFutureとoracle.kv.table.StatementResultは非推奨になりました。[#23937]
oracle.kv.table.RecordValueに新しいメソッドが追加されました。これまで、JSONを使用して行全体を指定することはできましたが、行の一部は指定できませんでした。RecordValueでの複合型に、次の6つのJSON入力メソッドが追加されます。[#24069]
RecordValue putRecordAsJson(String fieldName, String jsonInput, boolean exact);RecordValue putRecordAsJson(String fieldName, InputStream jsonInput, boolean exact);RecordValue putArrayAsJson(String fieldName, String jsonInput, boolean exact);RecordValue putArrayAsJson(String fieldName, InputStream jsonInput, boolean exact);RecordValue putMapAsJson(String fieldName, String jsonInput, boolean exact);RecordValue putMapAsJson(String fieldName, InputStream jsonInput,boolean exact);
oracle.kv.ExecutionFuture.toByteArray()は、Futureインスタンスを再作成するために後からoracle.kv.KVStore.getFuture(byte[])に渡すことができるフューチャをシリアライズした形で返します。[#24228]
oracle.kv.StatementResultを介して返されます。これまでのリリースでは、戻り値も実行ステータスもStatementResult.getInfo(), StatementResult.getInfoAsJson()で返されていました。このリリースでは、結果は新しいメソッドStatementResult.getResult()を介して返され、ステータスはStatementResult.getInfo(), getInfoAsJsonを介して返されます。[#24277]
plan deploy-adminは、管理が常駐しているゾーンと同じタイプ(プライマリまたはセカンダリ)で管理としてデプロイされます。これまで、管理は常にプライマリとして作成されていました。
plan repair-topologyは、常駐しているゾーンのタイプに一致するように、管理のタイプを変更します。
verify configurationは、次の内容をレポートします。
-exactフラグが追加されました。trueの場合、コマンドに指定した入力json文字列またはファイルには、表のすべての列の値が含まれる必要があり、無関係なフィールドを含めることはできません。
たとえば、次のコマンドは1行で入力する必要がありました。
kv-> execute "create table users(name string, address string, primary key (name))"または
kv-> execute "create table users \
-> (name string, \
-> address string, \
-> primary key (name))"
このリリースでは、次のように入力できます。
kv-> execute "create table users
-> (name string,
-> address string,
-> primary key (name))";
また、複数のコマンドはセミコロンを終止記号として次のように入力できます。
kv-> show table -name users; get table -name users;[#24119]
新しいユーティリティは次の方法で起動します。
java jar -kvstore.jar disable-services -root ROOT_DIRECTORY [-config CONFIG_FILE][#23988]
verify configurationコマンドの出力が改善され、管理CLIと、最上位バージョンのpingコマンドの両方で、次のようになります。
-jsonフラグを指定すると、出力にはJSON形式が使用されます。
[#23981]
java -jar kvstore.jar diagnostics verify -help
Usage: verify -checkLocal |
-checkMulti
kv-> show events -type stat or kv-> show events \ > -type stat
java -jar kvstore.jar diagnostics diagnostics-> help Oracle NoSQL Database Diagnostic Utility Commands: setup collect exit help diagnostics->
oracle.kv.table.TableAPI.execute(String)およびoracle.kv.table.TableAPI.executeSync(String)が追加されました。
TableAPIに対する新しい文実行メソッドの結果を処理する新しいインタフェースoracle.kv.table.StatementResultおよびoracle.kv.table.ExecutionFutureが追加されました。
oracle.kv.table.MapValue.putNull(String)および定数oracle.kv.table.MapValue.ANONYMOUSが追加されました。
FieldRangeインスタンスを作成するoracle.kv.table.Index.createMapKeyFieldRange(String)およびoracle.kv.table.Index.createMapValueFieldRange(String)が追加されました。
oracle.kv.table.TableAPI.execute(List<TableOperation>, WriteOptions)は、oracle.kv.OperationExecutionExceptionをスローしていました。一方、OperationExecutionExceptionは、oracle.kv.tableの表APIではなくoracle.kvパッケージのキー値APIに適用される情報を提供します。メソッドは、表APIに適した情報を提供する新しい例外oracle.kv.table.TableOpExecutionExceptionをスローするように変更されました。
これは非互換のAPI変更です。TableAPI.execute(List<TableOperation>, WriteOptions)を呼び出したアプリケーションは、OperationExecutionExceptionではなくTableOpExecutionExceptionを処理するように変更する必要があります。
java -jar kvstore.jar loadユーティリティは、操作でエラーが発生した場合に正しいフィードバックを提供せず、間違ってLoad succeededを返しました。現在は、エラーが見つかった場合のゼロ以外のステータス・コードと正確なステータス・メッセージの両方を返します。[#23681]
get kv -allコマンドを使用している場合に発生することがあります。
kv-> get kv -all Error handling command get kv -all: Failed to iterate records : Parallel storeIterator Request Queue take timed out. (12.1.3.1.3) Timeout: 5000ms
StoreIteratorConfigを提供するKVStore.storeIteratorまたはstoreKeysIteratorメソッド・オーバーロードを使用してスキャンがAPIを介して実行された場合、この問題が原因でメソッド・コールがRequestTimeoutExceptionをスローすることがありました。これらすべてのケースで、繰返しは要素を返さなくなりました。[#23881]
KVStoreロギング・システムは、セキュリティの影響を受けるイベントをログに記録するように拡張されました。SEC_WARNINGおよびSEC_INFOという2つの新しいロギング・レベルが導入されています。SEC_WARNINGレベルでログに記録されたメッセージは、CLIでクリティカル・イベントを生成します。失敗したログイン試行や不正な操作などの上位レベルのセキュリティ・イベントは、SEC_WARNING KVStoreイベントとして記録されます。sysadminまたはdbadminロールを必要とするCLIコマンドの実行は、SEC_INFOイベントとして記録されます。セキュリティの影響を受けるすべてのイベントのロギング・メッセージには、grepとフィルタリングを簡単にするための接頭辞として"timestamp KVAuditInfo"があります。[#23423]
サポートされるJava環境では、ヒープ・サイズが特定のサイズ(現在は実装に応じて25から32GBの間)より小さい場合に圧縮済オブジェクト参照を使用できます。圧縮済参照により節約される領域は大きいため、より大きなヒープ・サイズを使用すると、ヒープ・サイズが圧縮済参照をサポートする最大サイズよりも50%以上大きい場合を除き、通常は使用可能領域が少なくなります。
memoryMBストレージ・ノード・パラメータの値により、圧縮済参照をサポートするには大きすぎるが使用可能領域を増やすほどには大きくないヒープ・サイズが生成される場合、システムはレプリケーション・ノードのヒープ・サイズを自動的に削減するようになりました。アプリケーションで、非圧縮参照または最大ヒープ・サイズを明示的に指定するjavaMiscParamsレプリケーション・ノード・パラメータが指定される場合、ヒープ・サイズは削減されません。memoryMBパラメータが明示的に指定されていないか、ゼロに設定されている場合、システムにより、ホストで使用可能な物理メモリー量に設定され、memoryMBがゼロ以外の値に明示的に設定されている場合と同じようにヒープ・サイズを削減します。[#22695]
Direction.UNORDEREDのみがサポートされているため、パブリック・メソッドoracle.kv.hadoop.KVInputFormatBase.setDirection(Direction)は非推奨になりました。
oracle.kv.KVStoreおよびoracle.kv.table.TableAPIインタフェースのJavadocが更新され、外部的に同期していないかぎり、これらのインタフェースにより返されるイテレータが一度に1つのスレッドでのみ安全に使用できることが明確化されました。[#23799]
kv-> verify upgrade Unknown Exception: class oracle.kv.impl.rep.admin.RepNodeAdminFaultException RepNode is not RUNNING, current status is STARTING (12.1.3.1.2) oracle.kv.impl.rep.admin.IllegalRepNodeServiceStateException: RepNode is not RUNNING, current status is STARTINGこれは修正されました。[#23859]
com.sleepycat.persist.evolve.IncompatibleClassException: (JE 6.2.5) Changes to the fields or superclass were detected when evolving class:
oracle.kv.impl.admin.plan.task.StopAdmin version: 1 to class: oracle.kv.impl.admin.plan.task.StopAdmin version:
1 Error: A new higher version number must be assigned
---
(Note that when upgrading an application in a replicated environment, this exception may indicate that the Master was mistakenly upgraded
before this Replica could be upgraded, and the solution is to upgrade this Replica.)
at com.sleepycat.persist.impl.PersistCatalog.init(PersistCatalog.java:512)
at com.sleepycat.persist.impl.PersistCatalog.initAndRetry(PersistCatalog.java:268)
at com.sleepycat.persist.impl.PersistCatalog.<init>(PersistCatalog.java:228)
at com.sleepycat.persist.impl.Store.<init>(Store.java:202)
at com.sleepycat.persist.EntityStore.<init>(EntityStore.java:190)
at oracle.kv.impl.admin.Admin.initEstore(Admin.java:2126)
oracle.kv.coherenceパッケージのjavadocを参照してください。[#23350]
com.sleepycat.je.rep.UnknownMasterException: Transaction -XXX cannot execute write operations because this node is no longer a master[#23580]
change-policy -params "javaMiscParams=-XX:CMSInitiatingOccupancyFraction=77" plan change-parameters -all-rns -params "javaMiscParams=-XX:CMSInitiatingOccupancyFraction=77"[#23652]
Task 23/DeployNewRN on sn1(slc06tyu:5000) ended in state ERROR oracle.kv.impl.fault.RNUnavailableException: Security metadata database is not opened yet.
Insufficient access rights : client host: xx.xxx.xxx.xx: attempt to call RepNodeAdmin.updateMetadata(MetadataInfo,AuthContext,short)
ProcessMonitor: java.lang.NullPointerException ProcessMonitor: at oracle.kv.impl.api.rgstate.RepNodeState$ReqHandlerRef.resolve(RepNodeState.java:649) ProcessMonitor: at oracle.kv.impl.api.rgstate.RepNodeState$ReqHandlerRef.get(RepNodeState.java:709)
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]
aggregateコマンドを修正して、キー/値の入力用のサブコマンドを使用できるようにしました。aggregate tableサブコマンドは表の数値フィールドに対する単純なデータ集計操作を実行し、aggregate kvサブコマンドはキーに対する集計操作を実行します。[#23258]
SecondaryIntegrityExceptionがスローされるという問題を修正しました。[#23392]
FieldRange.setEndDateメソッドを削除し、既存のsetEndメソッドを使用するようにしました。[#23399]
RequestTimeoutではなく、KVStore操作からFaultExceptionがスローされることがないようにしました。次にスタック・トレースの例を示します。
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
[#23411]
List<String>IndexKey.getFields()は、索引の定義に使用されるフィールドを返します。List<String>PrimaryKey.getFields()は、主キーの定義に使用されるフィールドを返します。List<String>RecordValue.getFields()は、レコードの定義に使用されるフィールドを宣言順に返します。Map<String, FieldValue> MapValue.getFields()は、マップの不変のビューを返します。表および索引は、管理CLIを使用して定義され、プログラムAPIを介してアクセスされます。データCLIが拡張され、表および索引に対しても操作を実行できるようになりました。APIについてはOracle NoSQL Database javadocで説明されており、主にoracle.kv.tableパッケージ内にあります。
NoSQL DBリリース2を使用して作成されたデータが、準拠するAvroスキーマを使用して作成されたものである場合、このデータをオーバーレイする表を定義できます。準拠するリリース2のデータで2次索引を作成するには、このオーバーレイが必要です。
既存のキー/値インタフェースは引き続き使用可能です。
-store-security)が新しく追加されている、makebootconfigに対する変更は除きます。新機能の使用を希望するユーザーは、次の変更領域に注意する必要があります。
-store-securityが用意されました。これは、新しいKVStoreデプロイメントに対するセキュリティを有効化するのに使用されます。また、-store-securityフラグは、非セキュアなデプロイメントを有効化するためにも使用され、実際にそのような場合にも必須となります(-store-security none)。
setSecurityProperties()getSecurityProperties()KVStoreFactory.getStore(KVStoreConfig、LoginCredentials、ReauthenticateHandler)この新しいメソッドでは、新しいインタフェースが使用されます
LoginCredentialsReauthenticateHandler
これは、新しいクラスPasswordCredentialsの場合も同様です。
login()logout()UnauthorizedExceptionAuthenticationFailureExceptionAuthenticationRequiredExceptionユーザーは、セキュリティ・プロパティ・ファイルについてもよく理解している必要があります。これらのファイルは、セキュアなストアに対してKVStoreコマンドライン・ユーティリティ・プログラムを使用する際に必要であり、セキュアなストアに対してアプリケーションを実行する際にも役立つ場合があります。
この機能は、『Oracle NoSQL Databaseセキュリティ・ガイド』や管理者ガイドおよび製品のJavadocでさらに詳しく説明されています。
"datacenter"という単語が含まれるコマンドは非推奨となり、"zone"という単語を使用したコマンドに置き換わりました。このリリースでは、以前のコマンドもそのまま機能します。新しいコマンドは、次のとおりです。
plan deploy-zone
plan remove-zone
show zones
ゾーンを指定するコマンド・フラグは、ゾーンIDの場合は-znに、ゾーン名の場合は-znnameに変更されました。以前の-dcおよび-dcnameフラグは非推奨となりましたが、このリリースではそのまま機能します。また、ゾーンIDはzn接頭辞を使用して指定できるようになりましたが、以前のdc接頭辞も現在サポートされています。
管理GUIが、この新しい「ゾーン」という用語を使用するように変更されました。[#22878]
show planコマンドで、移行の完了時間の見積りが示されるようになりました。次に例を示します。
Plan Deploy Topo (12) State: RUNNING Attempt number: 1 Started: 2014-01-14 17:35:09 UTC Ended: 2014-01-14 17:35:27 UTC Total tasks: 27 Successful: 12 Incomplete: 15 Incomplete tasks 3 partition migrations queued 1 partition migrations running 11 partition migrations succeeded, avg migration time = 550164 ms. Estimated completion: 2014-01-14 19:57:37 UTC[#22183]
oracle.kv.Consistency.NONE_REQUIRED_NO_MASTERを使用して、目的の読取り操作が必ずマスターではなくレプリカによって処理されるよう指定できるようになりました。読取りの負荷が高いアプリケーション(分析など)の場合、マスターに対する負荷を軽減するために、読取り要求を分離し、これらがマスターではなくレプリカに対してのみ実行されるようにした方がよい場合があります。この種の読込みの分離を実現する上で望ましいメカニズムが、新しいセカンダリ・ゾーン機能です。この目的のためにはこの機能を採用することをお薦めします。ただし、セカンダリ・ゾーンの使用が望ましくない場合や現実的でない場合は、oracle.kv.Consistency.NONE_REQUIRED_NO_MASTERを使用すると、セカンダリ・ゾーンの場合に必要となる可能性があるリソースの追加なしで同様の効果を上げることができます。[#22338]
KVStoreConfig.setReadZones()KVStoreConfig.getReadZones()これらのメソッドを使用すると、指定したゾーン内にあるノードについてのみ読取り操作が実行されるよう要求できるようになります。
-runadminコマンドライン引数がオプションとして用意されました。これを使用すると、-adminの値が0に設定されている場合でもSNAでブートストラップ管理を強制的に起動できます。
管理CLI内のplan deploy-adminのオプション-portが変更され、管理Webサービスの起動を制御できるようになりました。デプロイで-portが0に設定されている場合、管理のWebサービスは起動されません。
ユーザーは、管理CLIのplan change-paramコマンドを介してデプロイメント後に管理のHTTPポートを変更し、管理によるWebサーバーの実行の有無に関する設定を変更することもできます。[#22344]
topology redistributeコマンドでストレージ・ディレクトリの設定が無視される原因であった問題を修正しました。[#23161]
InputStream.skipに対するコールによってゼロ以外の値が返されるかぎり、入力ストリームを開始位置に配置するためにこのコールを必要に応じて繰り返すようLOB実装を変更しました。コールによってストリームが必要な開始位置に移動されない場合、IllegalArgumentExceptionがスローされます。
KVStore.appendLOB()では、既存のLOB (ラージ・オブジェクト)への追加が許可されるようになりました。この変更の一環として、メソッドPartialLOBException.isPartiallyDeleted()が非推奨となり、新しいメソッドPartialLOBException.getPartialState()が推奨となります。この新機能の詳細な説明は、これらの新しいメソッドに付属のJavadoc、およびインタフェースKVLargeObjectに関して更新されたドキュメントを参照してください。
このリリースには、以前のリリースで作成されたLOBに対する下位互換性があります。ただ、これには1つの例外があり、これ以降のリリースで作成されるLOBのみが追加操作をサポートします。以前のリリースで作成されたLOBに対して追加操作を使用しようとすると、メソッドによりUnsupportedOperationExceptionがスローされます。
このリリースで作成されたLOBは、以前のリリースを使用しているクライアントから読取りや削除を行うことはできません。通常、このような操作は失敗し、ConcurrentModificationExceptionがスローされます。新しいLOBを作成する前にすべてのクライアントをこのリリースに更新するようにしてください。[#22876]
KVROOT/<storename>/logディレクトリ(NoSQLに関するすべてのロギング情報用の標準の場所)に配置されるようになりました。このデフォルトの動作は、JDKリリース1.7以降のリリースを使用している場合のみ適用されます。これは、GCログのローテーションは最新のJDKでのみサポートされるためです。ロギングによるリソースのオーバーヘッドは最小限です。これらのログ・ファイルを即座に使用できるようにしておくことは、本番Javaアプリケーションのデプロイメントに関するベスト・プラクティスに準拠しています。これにより、必要な場合に、GC問題をより簡単に診断できるようになります。[#22858]
StoreIteratorConfigの引数チェックの不具合が修正されました。[#23010]
KVStore.storeIterator()およびKVStore.storeKeysIterator()の新たなオーバーロードには、パラレル・スキャンが導入されています。その他のstoreIterator()メソッドでは、すべてのシャードとレプリケーション・ノードをシリアルにスキャンします。新しいパラレル・スキャン・メソッドでは、レプリケーション・ノードをパラレルにスキャンする際に使用するクライアント側のスレッド数を指定できます。[#22146]
kvshell-> put -key /test -value ./emp.insert -file -json Employee Could not create JSON from input: Unable to serialize JsonNode現在は、次のような有用な応答が生成されます。
kvshell-> put -key /test -value ./emp.insert -file -json Employee Exception handling command put -key /test -value ./emp.insert -file -json Employee: Could not create JSON from input: Expected Avro type STRING but got JSON value: null in field Address of Employee[#22791]
2014-03-28 12:13:34.544 UTC SEVERE [sn2] MasterRebalanceThread thread exiting due to exception.
null (12.1.2.1.24) java.lang.NullPointerException
at oracle.kv.impl.sna.StorageNodeAgentImpl$27.execute(StorageNodeAgentImpl.java:838)
at oracle.kv.impl.sna.StorageNodeAgentImpl$27.execute(StorageNodeAgentImpl.java:831)
at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:119)
at oracle.kv.impl.sna.StorageNodeAgentImpl.getMDInfo(StorageNodeAgentImpl.java:829)
at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
...
at com.sun.proxy.$Proxy1.getMDInfo(Unknown Source)
at oracle.kv.impl.sna.StorageNodeAgentAPI.getMDInfo(StorageNodeAgentAPI.java:492)
at oracle.kv.impl.sna.masterBalance.RebalanceThread.orderMSCNs(RebalanceThread.java:580)
at oracle.kv.impl.sna.masterBalance.RebalanceThread.candidateTransfers(RebalanceThread.java:485)
at oracle.kv.impl.sna.masterBalance.RebalanceThread.run(RebalanceThread.java:301)
2014-03-28 12:13:34.546 UTC INFO [sn2] Master balance manager shutdown
2014-03-28 12:13:34.546 UTC INFO [sn2] MasterRebalanceThread thread exited.
[#23419]
java.lang.IllegalStateException: Transaction 30 detected open cursors while aborting
at com.sleepycat.je.txn.Txn.abortInternal(Txn.java:1190)
at com.sleepycat.je.txn.Txn.abort(Txn.java:1100)
at com.sleepycat.je.txn.Txn.abort(Txn.java:1073)
at com.sleepycat.je.Transaction.abort(Transaction.java:207)
at oracle.kv.impl.util.TxnUtil.abort(TxnUtil.java:80)
at oracle.kv.impl.api.RequestHandlerImpl.executeInternal(RequestHandlerImpl.java:469)
at oracle.kv.impl.api.RequestHandlerImpl.access$300(RequestHandlerImpl.java:122)
at oracle.kv.impl.api.RequestHandlerImpl$2.execute(RequestHandlerImpl.java:301)
at oracle.kv.impl.api.RequestHandlerImpl$2.execute(RequestHandlerImpl.java:290)
at
oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:135>
[#22152]
plan deploy-topologyコマンドに保護手段が追加され、トポロジのバランス再調整とプランの再配分における信頼性が向上しました。レプリケーション・ノードを別のストレージ・ノードに移動する場合、操作を行う前に、操作対象のストレージ・ノードが起動され実行中であることをコマンドによってチェックするようになりました。[#22850]
plan deploy-topologyコマンドを使用してストアのトポロジを変更すると、次のエラーが発生することがあります。ストア状態の整合性が失われておらず、コマンドを手動で再試行できるとしても、コマンドは通信の不調からより速やかに回復できる必要があります。
... [admin1] Task 2/RelocateRN ended in state ERROR with java.lang.RuntimeException: Time out while waiting for rg4-rn1 to come up on sn1 and become consistent with the master of the shard before deleting the RepNode from its old home on sn4 2/RelocateRN failed. java.lang.RuntimeException: Time out while waiting for rg4-rn1 to come up on sn1 and become consistent with the master of the shard before deleting the RepNode from its old home
コマンドの待機時間が調整され、再試行が適切に行われるようになり、レプリケーション・ノードの移動が完了したかどうかを確認できるようになりました。[#22596]
java -jar kvstore.jar pingコマンドを使用すると、ストア内で有効ではなくなったコンポーネントに関する疑似メッセージが生成される場合がありました。
Failed to connect to service commandService
Connection refused to host: 10.32.17.12; nested exception is:
java.net.ConnectException: Connection refused
SNA at hostname:localhost registry port: 6000 has no available
Admins or RNs registered.
これらのメッセージは特に、デプロイされた管理サービスをホストしていないストレージ・ノードのブートストラップ管理に対して発生します。ストアの整合性はとれているため、混乱をまねくエラー・メッセージは削除されました。[#22639]
plan deploy-topologyコマンドが誤って失敗する可能性がありました。これは修正されました。
... INFO [rg1-rn1] Failed pushing entire topology push to rg1-rn3
updating from topo seq#: 0 to 1001 Problem:Update to topology seq#
1001 failed ... oracle.kv.impl.fault.OperationFaultException:
Update to topology seq# 1001 failed
at oracle.kv.impl.rep.admin.RepNodeAdminImpl$6.execute(RepNodeAdminImpl.java:261)
at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:169)
at oracle.kv.impl.rep.admin.RepNodeAdminFaultHandler.execute(RepNodeAdminFaultHandler.java:117)
...INFO [rg1-rn3] Topology update skipped. Current seq #: 1001 Update seq #: 1001
[#22678]
plan deploy-topologyコマンドを実行する場合に適用されます。ストレージ・ノードに対するレプリケーション・ノードの状態の通知が遅れると、マスター職責の最適な配分が保てなくなります。[#22689]
plan deploy-topologyコマンドを実行すると管理サービスが応答しなくなるバグを修正しました。この間、管理サービスのプロセスはアイドル状態になり、時折1~2秒のCPU時間を消費するだけで、管理CLIを使用して新しい接続を試みても応答しませんでした。この問題は、数百コンポーネントが含まれるような大規模なクラスタでのみ発生すると考えられます。[#22694]
plan deploy-topologyでトポロジが変更されると、レプリケーション・ノードが別のストレージ・ノードに移動します。この際に一時的なネットワーク障害が発生した場合の回復方法が改善されました。移動に関連するシャードとストレージ・ノードが使用可能で変更を受け入れる準備ができていることを確認するための事前チェック追加されました。移動の途中でネットワーク障害が発生した場合に、再試行のためにシステム管理者が発行するコマンドが使いやすくなりました。[#22722]
INFO [sn1] rg2-rn2: ProcessMonitor: startProcess
INFO [sn1] rg2-rn2: ProcessMonitor: stopProcess
SEVERE [sn1] rg2-rn2: ProcessMonitor: Unexpected exception in
MonitorThread:
java.lang.NullPointerExceptionjava.lang.NullPointerException
at oracle.kv.impl.sna.ProcessMonitor$MonitorThread.run(ProcessMonitor.java:404)
[#22830]
新しいCLIコマンドは、アップグレード・プロセスをサポートする管理者ツールとなります。これらのコマンドを使用した汎用のアップグレード手順は次のとおりです。
verify prerequisiteコマンドを使用し、ストア全体がアップグレード対象として適切なソフトウェア・バージョンであることを確認します(すべてがNoSQL DBバージョン2.0であれば前提条件として適格です)。
show upgrade-orderコマンドを使用して、アップグレードするノードの順序付きリストを取得します。
verify upgradeコマンドを使用して、進行状況を監視し、アップグレードが成功したことを確認します。
アップグレード手順を中断した場合は、必要に応じて手順4から6を繰り返してアップグレードを完了してください。
verify prerequisite [-silent] [-sn snX]*
このコマンドは、ストアの一連のストレージ・ノードが現行バージョンへのアップグレードに必要な前提条件を満たしていることを確認し、前提条件を満たしていないコンポーネントや接続できないコンポーネントを表示します。また、インストールされているソフトウェアが現行バージョンより新しいマイナー・リリースであるという無効なダウングレード状況でないこともチェックしてレポートします。このコマンドで、現行バージョンとはコマンドライン・インタフェースを実行しているソフトウェアのバージョンのことです。ストレージ・ノードが指定されていない場合は、ストア内のすべてのノードがチェックされます。
verify upgrade [-silent] [-sn snX]*
このコマンドは、ストアの一連のストレージ・ノードが現行バージョンに正常にアップグレードされたことを確認し、まだアップグレードされていないコンポーネントや接続できないコンポーネントを表示します。このコマンドで、現行バージョンとはコマンドライン・インタフェースを実行しているソフトウェアのバージョンのことです。ストレージ・ノードが指定されていない場合は、ストア内のすべてのノードがチェックされます。
show upgrade-order
このコマンドは、ストアの可用性を維持するためにアップグレードする必要がある順序で、ストレージ・ノードのリストを表示します。このコマンドは、1つ以上のストレージ・ノードを1行に表示します。1行に複数のストレージ・ノードが表示される場合、スペースで区切られます。1行に複数のストレージ・ノードが表示されている場合、そのノードをまとめて安全にアップグレードできます。複数のノードをまとめてアップグレードする場合、すべてのノードのアップグレードが完了してからでなければ、リストの次のノードはアップグレードできません。
verify [-silent]コマンドは非推奨となり、verify configuration [-silent]に置き換えられます。verify [-silent]コマンドは、このリリースでも引き続き動作します。
WriteOperations (examplesディレクトリにあります)によって提供されるサンプル・コードに、ラージ・オブジェクト(LOB、KVLargeObjectを参照)に対する書込み操作を実行するメソッドが追加されました。このリリースで追加された新しいユーティリティ・メソッドは、 FaultExceptionが発生したときに、関連するLOB操作を正しく再試行します。このリリースより前には、WriteOperationsユーティリティはラージ・オブジェクトでないオブジェクトに対してしか再試行メソッドを提供していませんでした。[#21966]
java.net.InetAddress.getLocalHost() returned loopback address:<hostname> and no suitable address associated with network interfaces.これは修正されました。[#22252]
RequestTimeoutExceptionがクライアントに伝播されるようになり、基底となる永続ストアからの当初の例外は原因としてラップされるようになります。この例外が発生したときに採用する戦略を含めた詳細は、RequestTimeoutExceptionのJavadocを参照してください。
これは修正されました。[#21210]
hideUserDataをtrueに設定すると(これがデフォルトです)、サーバー側のログに出力される、またはCLIコマンドを通じて表示されるエラー・メッセージは、キー/値を"[hidden]"という文字列に置き換えます。エラーで実際のレコードの内容を見るには、パラメータをfalseに設定してください。[#22376]
plan deploy-topologyコマンドの結果として発生したエラーに関する情報は、NoSQL DBログ内部でしか表示されないことがあり、インストール時のトラブルシューティングを難しくしていました。このリリースでは、このような起動エラーを管理CLIのshow plan -id <id>コマンドで表示できるようになっています。[#22101]
examples.hadoop.CountMinorKeysサンプルを実行すると、そのサンプルによって開始されるMapReduceジョブがIncompatibleClassChangeErrorのために失敗していました。これは、Hadoop 1.xとHadoop 2.xの間でorg.apache.hadoop.mapreduce.JobContextに発生した非互換性が原因です。このエラーは、Hadoop 1.xとHadoop 2.xのどちらを基準にしてサンプルのコンパイルとビルドを行っても発生します。本製品のカスタマ・ベースで使用されているのはほとんどHadoop 2.xのみなので、このリリースではHadoop 1.xではなくHadoop 2.xをサポートしました。今後のリリースでは、Hadoopの両方のバージョン・パスが再度サポートされる可能性もありますが、その場合にはコードベースとそれに伴うリリース・アーチファクトのリファクタリングが必要となり、現在のビルド・プロセスについても大きな変更が必要になります。
Hadoop 2.x (CDH4)のサポートを追加しました。[#22157]
plan remove-admin -admin <adminId>
1つの管理インスタンスのみが構成されている場合、その唯一の管理を削除することはできません。
可用性と永続性の理由から、少なくとも3つの管理インスタンスを常に維持しておくことをお薦めします。そのため、削除の結果として3つを下回るような削除を行おうとした場合、-forceフラグを指定しないかぎりコマンドは失敗します。
現在マスターである管理を削除しようとすると、マスター権限は別の管理に移動します。プランが中断され、後から新しいマスター管理で再実行できます。中断されたプランを再実行するには、次のコマンドを使用します。
plan execute -id <planId>
show perfコマンド、.perfファイルと.csvファイル、そしてKVStore..getStatsによって返されるクライアント側統計です。ただし、95%から99%の値に対する修正はクライアント側統計には適用されません。これらの値はクライアント側APIには出現しないからです。
Op Type列に「multi」と表記され、そこにレイテンシ情報が表示されます。以前の定義は「操作ごとのミリ秒当たりのレイテンシ」で、新しい定義は「要求ごとのミリ秒当たりのレイテンシ」です。つまり、「マルチ」操作要求の場合、レイテンシは各操作ではなく要求全体に適用されるということです。「単一」操作要求の場合、レイテンシの定義は変わっていません。
TotalReqが、すべてのレイテンシ情報表示に追加されています。これは、クライアント側統計で新しいOperationMetrics.getTotalRequestsメソッドを使用しても利用可能です。「マルチ」操作要求の場合、要求の合計数は操作の合計数(TotalOps列)より小さくなるのが普通です。「単一」操作要求の場合、要求の合計数と操作の合計数は等しくなります。
Exception in thread "main" com.sleepycat.je.EnvironmentFailureException: (JE
5.0.XX) ... last LSN=.../... LOG_INTEGRITY: Log information is incorrect,
problem is likely persistent. Environment is invalid and must be closed.
at com.sleepycat.je.recovery.RecoveryManager.traceAndThrowException(RecoveryManager.java:2793)
at com.sleepycat.je.recovery.RecoveryManager.undoLNs(RecoveryManager.java:1097)
at com.sleepycat.je.recovery.RecoveryManager.buildTree(RecoveryManager.java:587)
at com.sleepycat.je.recovery.RecoveryManager.recover(RecoveryManager.java:198)
at com.sleepycat.je.dbi.EnvironmentImpl.finishInit(EnvironmentImpl.java:610)
at com.sleepycat.je.dbi.DbEnvPool.getEnvironment(DbEnvPool.java:208)
at com.sleepycat.je.Environment.makeEnvironmentImpl(Environment.java:246)
at com.sleepycat.je.Environment.<init>(Environment.java:227)
at com.sleepycat.je.Environment.<init>(Environment.java:170)
...
Caused by: java.lang.NullPointerException
at com.sleepycat.je.log.entry.LNLogEntry.postFetchInit(LNLogEntry.java:406)
at com.sleepycat.je.txn.TxnChain.<init>(TxnChain.java:133)
at com.sleepycat.je.txn.TxnChain.<init>(TxnChain.java:84)
at com.sleepycat.je.recovery.RollbackTracker$RollbackPeriod.getChain(RollbackTracker.java:1004)
at com.sleepycat.je.recovery.RollbackTracker$Scanner.rollback(RollbackTracker.java:477)
at com.sleepycat.je.recovery.RecoveryManager.undoLNs(RecoveryManager.java:1026)
... 10 more
[#22052]
KVStore.storeIteratorまたはKVStore.storeKeysIteratorを使用するときのみでした。[#21973]
lib/kvstore.jar lib/kvclient.jar
この変更により、JARファイルの名前がリリースごとに変わらなくなるため、新しいリリースへの切替えに要する作業負荷が減ります。インストール・ディレクトリの名前には、引き続きリリース・バージョン番号が含まれます。[#22034]
121215 13:48:57:480 SEVERE [...] Average cleaner backlog has grown from 0.0 to 6.4. If the cleaner continues to be unable to make progress, the JE cache size and/or number of cleaner threads are probably too small. If this is not corrected, eventually all available disk space will be used.キャッシュ・サイズを適切に設定してこのような問題を回避する方法の詳細は、管理者ガイドのノード当たりのキャッシュ・サイズの決定に関する項を参照してください。[#21111]
oracle.kv.lobパッケージにより、音声ファイルや動画ファイルなどのラージ・オブジェクト(LOB)を読み書きできるようになります。一般に、1MBを超えるオブジェクトはすべてLOBとして表すことができます。LOB APIでは、このようなオブジェクトの読取りと書込みにストリーミングAPIを提供することにより、値全体をマテリアライズせずに大きな値にアクセスできます。
ストレージ・ノードが誤って構成されており、デプロイできない場合。[#20530]
ストレージ・ノードが以前はNoSQL Databaseの一部だったが、migrate-storagenodeコマンドですべてのコンポーネントがそこから移行され、ストレージ・ノードの停止が必要になった場合。
oracle.kv.avroパッケージについては、Javadocで説明されています。Avro形式を使用することをお薦めします。今後のNoSQL DBは、追加の機能を導入するためにAvroを利用する予定です。[#21213]
KVInputFormatクラスのサポートを追加しました。新しいoracle.kv.hadoop.KVAvroInputFormatクラスは、AvroのIndexedRecordをコール元に返します。このクラスをOracle Loader for Hadoopと組み合せて使用すると、HDFSにデータを格納するMap-Reduceジョブを暫定的に使用することなく、OLHを使用してNoSQL Databaseから直接データを読み込むことができます。[#21157]
oracle.kv.exttabパッケージのJavadocと、 examples/externaltablesディレクトリにあるcookbookサンプルを参照してください。[#20981]
KVStoreConfig.setOpenTimeout()KVStoreConfig.getOpenTimeout()KVStoreConfig.setReadTimeout()KVStoreConfig.getReadTimeout()前述のAPIをクライアントで使用するには、このリリースに付属しているアップグレード・ドキュメントの説明に従って、R1のインストールでストレージ・ノード上のソフトウェアがアップグレードされていることを確認する必要があります。[#20997]
rnRHSOBacklog (デフォルトは1024)、rnMonitorSOBacklog (デフォルトは0)、rnAdminSOBacklog (デフォルトは0)、rnAdminSOBacklog (デフォルトは0)、snAdminSOBacklog (デフォルトは0)、snMonitorSOBacklog (デフォルトは0)およびsnRegistrySOBacklog (デフォルトは1024)です。[#21322]
Key.isPrefixをコールすると、特定のケースでIndexOutOfBoundsExceptionが発生していました。これは修正されました。
KeyRange()コンストラクタは、最初のKeyが最後のKeyがより小さいかどうかをチェックします。これは最初と最後の両方が指定されている場合であり、指定されていない場合にはIllegalArgumentExceptionがスローされます。KeyRangeにも、KeyRangeインスタンスのエンコードとデコードに使用するtoString()とfromString()の2つのメソッドがあります。これはKeyの同じメソッドに似ています。[#21470]
データセンターは、#またはdc#と表せるようになります。joinPool myStorageNodePool 17 show repnode-params 5,3
上に示したコマンドは現在も有効ですが、次のように表すこともできます。
[#21099]joinPool myStorageNodePool sn17 show repnode-params rg5-rn3
Key.createKeyメソッドのJavadocが更新され、パラメータとして渡されるListインスタンスはメソッドのコール後にKeyオブジェクトによって所有されるという警告が追記されました。予期しない結果を避けるために、これは変更しないでください。[#20530]
snapshot createコマンドの速度が大幅に向上しました。以前のバージョンでは、大量のデータがあるストアで実行すると数分間かかっていました。これが秒単位に短縮されています。[#20772]
bin/run-kvlite.shおよびbin/kvctlは、java -jar lib/kvstore-M.N.P.jarコマンドに置き換えられます。これにより、Windowsを含むすべてのJavaプラットフォームの移植性が実現します。2つのスクリプトは非推奨となりましたが、少なくとも1リリース・サイクルの間はサポートされます。
古いスクリプト・コマンドから新しい-jarコマンドへの変換は、次のとおりです。
| 古いスクリプト・コマンド | 新しい-jarコマンド |
|---|---|
bin/run-kvlite.sh args... |
java -jar lib/kvstore-M.N.P.jar kvlite args... |
bin/kvctl command args... |
java -jar lib/kvstore-M.N.P.jar command args... |
新旧のコマンドには、注意が必要な相違点がいくつかあります。
nohupは、必要な場合には明示的に指定する必要があります。bin/kvctlスクリプトでは、nohupは自動的にstartおよびrestartコマンドに追加されていました。等価のコマンドを追加するには、次のコマンドを使用します。
nohup java -jar lib/kvstore-M.N.P.jar start args... > /dev/null < /dev/null 2<&1 &
kvliteのロギング構成ファイルは、標準のJava構文で指定するようになります。以前は、-loggingをrun-kvlite.shスクリプトに渡すとき、examples/logging.properties構成ファイルが自動的に追加されていました。新しいコマンドで等価の構文は次のとおりです。
java -Djava.util.logging.config.file=examples/logging.properties -jar lib/kvstore-M.N.P.jar kvlite args...
以前は、kvctlスクリプトを実行すると、-host引数がデフォルトでローカルのマシン名(`hostname`コマンドより)になりました。現在は、どの制御コマンドでもデフォルトのホスト名は使用されず、-host引数を明示的に指定する必要があります。この変更には2つの理由があります。1つ目の理由は一貫性で、portと他の引数には制御コマンドのデフォルト値がありませんでした。2つ目の理由は安全性で、明示的なホスト名を指定すると偶発的なエラーの対策になります。
以前は、run-kvlite.shスクリプトを実行すると、-host引数がデフォルトでlocalhostになりました。現在は、(文字どおりの)localhostではなくローカル・マシン名がデフォルトです。kvliteコマンドは、制御コマンドと異なり、どの引数にもデフォルト値があります。これは、単独のマシン上での開発時にkvliteコマンドを使いやすくするためです。kvliteを、本番またはパフォーマンス・テストでは使用しないでください。
以前は、java -jar lib/kvstore-M.N.P.jarを実行すると、引数の有無にかかわらず製品バージョンが出力されていました。現在は、引数を指定しない場合には使用方法のメッセージが出力されます。バージョンを出力する場合は、次のようにversionコマンドを使用してください。
java -jar lib/kvstore-M.N.P.jar version