リリース12cR1.2.1.8 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デプロイの更新に関する項を参照してください。
新しい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.(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
[#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] 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