原文はこちら。
https://blogs.oracle.com/opal/node-oracledb-20-with-pre-built-binaries-is-on-npm
全ての変更は変更履歴をご覧ください。
ODPI-Cは、node-oracledbを拡張するための強固な基盤を形成します。また、ODPI-CをベースにしたPython cx_Oracle 6のユーザーは、利用可能な詳細のOracle機能を理解しています。これらの機能の多くは、node-oracledbユーザーからも要求されてきました。他のオープンソースプロジェクトと同様に、node-oracledbのためのしっかりした保証はありませんが、私たちが向けるべき一般的な方向とご理解いただいて結構です。プルリクエストは大歓迎です。
気付かないかもしれませんが、Oracle Databaseの次期メジャーリリースをテストしています(作成を手助けしています)。そのため、node-oracledbの作業から離れて、Oracle Database全体にあわせて動く必要があったこともあります。クライアントおよびサーバーのいずれの場合でも、今後のリリースでは素晴らしいものをお届けできると思っています。
https://blogs.oracle.com/opal/node-oracledb-20-with-pre-built-binaries-is-on-npm
Release announcement:
Oracle Database用のNode.jsアドオンであるnode-oracledb 2.0.15がnpmからご利用頂けるようになりました。node-oracledb
https://www.npmjs.com/package/oracledb
Top features: Pre-built binaries, Query fetch improvements
変化を起こす時がやってきました。node-oracledb version 1は安定していましたが、node-oracledb 2をご提供できることを誇りに思っています。コードとドキュメント全体を改善し、このリリースはよいものになっています。現在、3000を超える機能テストと、Oracle社内テストインフラストラクチャの下さまざまな環境で実行するストレステストを実施してきました。全ての変更は変更履歴をご覧ください。
Change Lognode-oracledb 1.13から2.0への移行は、以下のURLをご覧ください。
https://github.com/oracle/node-oracledb/blob/master/CHANGELOG.md
Migrating from node-oracledb 1.13 to node-oracledb 2.0
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#migratev1v2
node-oracledb v2 highlights
- node-oracledb 2.0は、便利のために既製バイナリを持つ最初のリリースです。特にWindowsユーザーの方々にとってかなり簡単になっています。
Node.js 4、6、8、9のバイナリは、Windows 64ビット、macOS 64ビット、およびLinux 64ビット(Oracle Linux 6上に構築)で使用できます。
package.jsonの依存関係にoracledbを追加するか、手動で以下のコマンドでインストールしてください。
(もちろんOracle Clientはまだ別途必要です。これらは全て重労働です)。npm install oracledb
バイナリが利用できないときにはエラーメッセージが表示され、
で失敗したときにメッセージが改善されましたが、古いglibcライブラリを持つLinuxユーザの場合、Linuxランタイムエラーが発生する可能性がありますので、この場合は以前と同様ソースからnode-oracledbをビルドする必要があります。以下を参照してください。require('oracledb')
独自の内部Webサーバーにバイナリパッケージをホスティングするためのサポートがあります。これは、多数のデプロイメントを持つユーザーに最適です。以下のREADMEをご覧ください。node-oracledb/package/README.md
node-oracledb 2.0は、Pythonのcx_Oracle 6.x APIや他の言語のサードパーティ製APIでも使用されているODPI-C抽象化レイヤーを使用する最初のリリースです。
https://github.com/oracle/node-oracledb/blob/master/package/README.mdOracle Database Programming Interface for Drivers and Applications
このODPIの利用がnode-oracledb 2.0バイナリを配布できる主な変更です。ODPI-C利用の別の結果として、任意のnode-oracledb 2バイナリは、再コンパイルを必要とせずにOracleクライアント11.2,12.1または12.2ライブラリのいずれかで実行できます。これにより、マシン間でnode-oracledbビルドをコピーするときの移植性が向上します。利用可能なOracleの機能はOracle Client(およびOracle Database!)のバージョンによって異なるため、意図したデプロイメント環境を使用してアプリケーションをテストすることが重要です。
https://github.com/oracle/odpi - 必要であれば、ソースコードからドライバを構築できます。コンパイルはバージョン1より簡単になりました。Oracleヘッダー・ファイルは不要になり、環境変数OCI_INC_DIRまたはOCI_LIB_DIRも不要です。
ソースからビルドする場合、GitHubブランチまたはタグからコードを取得する必要があります。一般に、必要なのは最新のリリースタグです。node-oracledb Releases
Python 2.7、 gitユーティリティ、コンパイラがあることを確認し、package.jsonの依存関係にoracle/node-oracledb.git#v2.0.15を追加するか、手動でインストールを実行します。
https://github.com/oracle/node-oracledb/releases
gitを有していないユーザーや、ODPIサブモジュールコードをpullしない古いバージョンのNodeのユーザーは、ソースパッケージを使用できます。npm install oracle/node-oracledb.git#v2.0.15
コンパイル開始前にGitHubがソースをダウンロードするのが少し遅くなる可能性があることがわかりました。npm install https://github.com/oracle/node-oracledb/releases/download/v2.0.15/oracledb-src-2.0.15.tgz
- クエリ処理の改善
- 直接フェッチを拡張して無制限の行数をフェッチできるようにしたり、このデフォルト・メソッドが取得する行数のデフォルト行数を無制限に変更できるようにしました。大量の行数を取り扱う場合において今なお既存のResultSetやStreamingメソッドの利用を推奨します。
- ODPI-Cが内部的に「プリフェッチ」の代わりに「配列フェッチ」を使用しています(どちらも、バッファリングが行われる場所のみが異なるバッファリング/チューニングのための基礎となるメソッドで、どちらもアプリケーションには透過的です)ため、prefetchRowsを新しい同等のプロパティfetchArraySizeで置き換えました。
- より良いパフォーマンスを得るために、getRow()のバッファリングや行をJavaScriptに移動しました。もはや、より低いレイヤーへの頻繁な呼び出しは不要です。
Node-oracledb v2 Query Methods and Fetch Tuning
https://blogs.oracle.com/opal/node-oracledb-v2-query-methods-and-fetch-tuning
https://orablogs-jp.blogspot.jp/2018/01/node-oracledb-v2-query-methods-and.html - 直接フェッチを拡張して無制限の行数をフェッチできるようにしたり、このデフォルト・メソッドが取得する行数のデフォルト行数を無制限に変更できるようにしました。大量の行数を取り扱う場合において今なお既存のResultSetやStreamingメソッドの利用を推奨します。
- アプリケーションがリソースリークしないように、リソース処理を強化しました。LOBまたはResultSetが開いているときに誤って接続をクローズしようとすると、新しいエラーDPI-1054が送出されます。
- LOBのfetchAsStringおよびfetchAsBufferの問合せ、およびLOBバインドにおけるnode-oracledbのサイズ制限ですが、node-oracledb version 1では、Oracle 11gR2クライアントライブラリが使用されている場合にこれらの値が特に低いため、Oracleクライアントを更新していない人にとってはこれは歓迎されることでしょう。Node.jsおよびV8ではサイズが制限されるため、引き続きラージLOBに対してStreamインタフェースを使用します。
- ROWIDとUROWIDをサポートするようになりました。データは文字列として取得します。
- LONG(String型としてデータを取得)およびLONG RAW(Buffer型としてデータを取得)型の列をサポートするようになりました。
- TIMESTAMP WITH TIME ZONEの日付型をサポートするようになりました。これらはLOCAL TIME ZONEを使ってnode-oracledbのDateオブジェクトにマップされます。TIME ZONEコンポーネントは、Dateオブジェクトでは使用できません。
- NCHAR、NVARCHAR2、NCLOB 列のクエリサポートを追加しました。Database Character SetとDatabase National Character Setによっては、DMLとのバインドはデータを正しくインサートしない可能性があります。
Plans for Version 1
これまでに言明した計画では、Node.js 4のLTS保守が2018年4月で終了すると、バージョン1の正式サポートを中止するとしていました。Node-oracledb 1.x and 2.x: Plans for 2017 #6011.13.1がしばらく安定していたことを嬉しく思っており、例外的な状況が発生しない限り、node-oracledb 1リリースを追加する必要はないと考えています。
https://github.com/oracle/node-oracledb/issues/601
Plans for Version 2
現在、Node.js 4、6、8、9でテストしています。新しいnode.jsのバージョンがリリースされると、このリストはもちろん変更されます。既製バイナリも変更され、可用性は保証されません。ODPI-Cは、node-oracledbを拡張するための強固な基盤を形成します。また、ODPI-CをベースにしたPython cx_Oracle 6のユーザーは、利用可能な詳細のOracle機能を理解しています。これらの機能の多くは、node-oracledbユーザーからも要求されてきました。他のオープンソースプロジェクトと同様に、node-oracledbのためのしっかりした保証はありませんが、私たちが向けるべき一般的な方向とご理解いただいて結構です。プルリクエストは大歓迎です。
気付かないかもしれませんが、Oracle Databaseの次期メジャーリリースをテストしています(作成を手助けしています)。そのため、node-oracledbの作業から離れて、Oracle Database全体にあわせて動く必要があったこともあります。クライアントおよびサーバーのいずれの場合でも、今後のリリースでは素晴らしいものをお届けできると思っています。
Resources
node-oracledbのインストール手順Installing node-oracledb Version 2node-oracledbのドキュメント
https://github.com/oracle/node-oracledb/blob/master/INSTALL.md
node-oracledb 2.0 Documentation for the Oracle Database Node.js Add-onnode-oracledbの変更履歴
https://github.com/oracle/node-oracledb/blob/master/doc/api.md
Change Lognode-oracledb 1.13から2.0への移行は、以下のURLをご覧ください。
https://github.com/oracle/node-oracledb/blob/master/CHANGELOG.md
Migrating from node-oracledb 1.13 to node-oracledb 2.0node-oracledbに関する問題や質問はGitHubにお寄せください。
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#migratev1v2
node-oracledb - issues最後に、node-oracledbへの貢献は大歓迎です。以下のURLをご覧ください。
https://github.com/oracle/node-oracledb/issues
Contributing to node-oracledb
https://github.com/oracle/node-oracledb/blob/master/CONTRIBUTING.md