リリース12cR1.2.1.54 Enterprise Edition
Oracle NoSQL Database 2.0は管理バージョン2に移行しました。これはオンディスク形式の変更であり、管理サービスによって格納される内部データに影響します。この変更は上位互換であり、2.0を使用してデプロイされた管理サービスは、旧リリースによって作成されたデータを読み込むことができます。この変更は下位互換ではないため、新しいリリースでデプロイされた管理サービスを、旧リリースのNoSQLで再起動することはできません。既存のストアをリリース2.1にアップグレードするには、2.0リリースでストアを実行する必要があります。2.0以前のリリースで作成されたストアでリリース2.1を使用する場合には、2.1リリースにアップグレードする前にストアを2.0リリースにアップグレードしてください。
管理者ガイドの既存のOracle NoSQL Databaseデプロイの更新に関する項を参照してください。
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]
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]
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ファイル、そして.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.[#22052](Environment.java:227) at com.sleepycat.je.Environment. (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. (TxnChain.java:133) at com.sleepycat.je.txn.TxnChain. (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
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] Javadoc
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