M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

Frankie Bagnardiほか『入門 React』

だいぶ今更の感はありますが『入門 React ―コンポーネントベースのWebフロントエンド開発』を読みました。

対象読者には、JavaScriptの挙動についてきちんと理解していること、DOMの直接操作やjQueryのような(今にしてみれば)ごくごくローレベルのAPIを提供するライブラリの利用に慣れていることが期待されています。

内容としては、Reactの基本概念から利用方法の「あるべき」、典型的アンチパターン、代表的なサードパーティ製ツールとの組み合わせ方など、Reactのエコシステムの概観までを含んだ内容になっています。

一方でこの手の参考書でよくある開発環境のセットアップ方法や"Hello World"については巻末の「付録」にさらっとまとめられているだけ。
ReactがAngularのようなフルスタックなSPAフレームワークではなく、あくまでもビュー(View)に特化した生のJavaScript(≠TypeScriptのようなトランスパイル言語)による利用を想定した、ようするによくもわるくもシンプルで世代的には少し以前のフレームワークである点を考慮しても、これは面白い構成だなと感じました。
この点私としてはデメリットとは感じておらず、Reactというフレームワークとその周辺を眺めわたすのに好都合と感じています。

JavaScriptやTypeScriptについて若干の知見があって、これまで触ったことのなかったReactについてひとまず足がかりを得たい、という方には良書ではないかと思います。

Oracle.ManagedDataAccess v12.1.022でOracleDB 12.1.0.2.0に接続しORA-12570

オンプレ環境に配備されていたOracleDB 12cからOCI(Oracle Cloud Infrastructure)に構築されたOracleDB 12cへ移行しようとしたときに確認されたエラーです。

前提

  • DBに接続するアプリケーションはC#で実装さてている。
  • DB接続のためのドライバにはOracle.ManagedDataAccess v12.1.022(あるいはそれ以下)を利用している。
  • 移行先のOracleDBは v12.1.0.2.0である。

事象

アプリケーションから移行先のOracleDBに接続を試みたところ、「ORA-12570: ネットワーク・セッション: 予期しないパケット読み取りエラーが発生しました」というエラーが発生。

回避策

使用するDB接続ドライバを Oracle.ManagedDataAccess v12.1.24*にマイナーアップグレードする。
これに伴い依存するOracle.ManagedDataAccess.EntityFrameworkもアップグレードされる。

そもそも v12.1.022は非production版であり本来は製品利用はしてはならないものとされている。しかし問題のアプリケーションは納品時からこのバージョンを利用していた。幸いにもv12.1.022は非production版の中で最後のバージョンであり、production版との間で行われた修正は暗号化方式の強化やORAファイルの検索パスの強化など非機能的なものに限られていた。

MVリフレッシュでORA-01435エラー発生

オンプレに配備されているOracleDBからOCI(Oracle Cloud Infrastructure)に構築されたOracleDBに移行する作業中に見つかった問題。
現時点でも根本原因は不明だが回避策はわかったもの。

前提

事象

移行先のOracleDBのPDB B(移行元のインスタンスBに相当)側でMVリフレッシュを行ったところ、以下のようなエラーが発生。

行1でエラーが発生しました。:
ORA-01435: ユーザーが存在しません。
ORA-06512: "SYS.DBMS_SNAPSHOT_UTL", 行364
ORA-06512: "SYS.DBMS_SNAPSHOT_UTL", 行446
ORA-06512: "SYS.DBMS_SNAPSHOT", 行2821
ORA-06512: "SYS.DBMS_SNAPSHOT", 行3058
ORA-06512: "SYS.DBMS_SNAPSHOT", 行3017
ORA-06512: 行1

MVの定義情報を引き出して確認すると、このMVの定義で用いされているDBLINKには問題なし。DBLINK定義時に指定される認証情報は正しく、DBLINKにより参照されるユーザースキーマとそのオブジェクトも健在。手でクエリを実行すれば参照は可能。

原因

不明。
ただおそらく「前提」で述べた移行元DBにおける洗い替えの運用により、データディクショナリのデータ不整合が生じている模様。

回避策

PDB B側で、dba_snapshotsテーブルを参照。
dba_snapshots.master_ownerカラムの内容がMVの定義情報(のクエリに含まれるDBLINK経由の参照先)と不一致になっているものを抽出。
「前提」でも述べた「不要なユーザースキーマ」としてdropしていたものに該当していたので、このスキーマPDB A(インスタンスAに相当)に新規作成、さらにそのスキーマ内にMVから参照されるのと同名のテーブルを新規作成。
この状態でMVリフレッシュをトライしたところ成功。
この新規作成するテーブルのカラムや制約、索引などはでたらめで問題ない。