Firebird V3での仕様変更によるエラー
ここでは、Firebird V3系について、特にV2系からのプログラム作成上の変更点について見ていく。
UPDATE operation is not allowed for system table RDB$DATABASE
既存のプログラムを実行すると、以下のようなエラーが発生する(ここではJava用のJaybirdドライバを使用している)。
Caused by: java.sql.SQLSyntaxErrorException: UPDATE operation is not allowed for system table RDB$DATABASE [SQLState:42000, ISC error code:335545030]
at org.firebirdsql.gds.ng.FbExceptionBuilder$Type$1.createSQLException(FbExceptionBuilder.java:527)
at org.firebirdsql.gds.ng.FbExceptionBuilder.toFlatSQLException(FbExceptionBuilder.java:302)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.readStatusVector(AbstractWireOperations.java:138)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.processOperation(AbstractWireOperations.java:202)
これは、How change a column type in firebird3で説明されている。
つまり、Firebird3では、もはやシステムテーブルの直接的更新はサポートいないという。これはデータ不整合につながるからだそうだ。システムテーブルを変更するには、通常のDDLを用いるしかない。
当方の既存のプログラムでこれを行っているのは、データベース作成後に、キャラクタセットを指定している部分である。
UPDATE rdb$database SET rdb$character_set_name='UNICODE_FSS';
これをどう変えればいいのか?–>この問題は結構根深い。別投稿とする。
Incompatible wire encryption levels requested on client and server
以下のエラーになる。jaybird-3.0.3 + Firebird-3.0.3.32900_0_x64の組み合わせ。
java.sql.SQLException: Incompatible wire encryption levels requested on client and server [SQLState:28000, ISC error code:335545064]
at org.firebirdsql.gds.ng.FbExceptionBuilder$Type$1.createSQLException(FbExceptionBuilder.java:498)
at org.firebirdsql.gds.ng.FbExceptionBuilder.toFlatSQLException(FbExceptionBuilder.java:299)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.readStatusVector(AbstractWireOperations.java:135)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.processOperation(AbstractWireOperations.java:199)
Error on connect Firebird 3 #2424に議論がある。
クライアント・サーバ側での暗号化状態が一致していない
サーバ側の暗号化を解除する。「C:\Program Files\Firebird\Firebird_3_0\firebird.conf」の中に以下を書き加える。
WireCrypt = Disabled
この後で、WindowsのコントロールパネルからFirebirdサービスを再起動する。
Jaybirdが暗号化をサポートしているのは、3.0.4以上
Jaybird and Firebird 3という書き込みがある。
Jaybird 3.0.4 and higher support Firebird 3 wire encryption
Jaybird 3.0 versions earlier than 3.0.4 do not support the new wire encryption. To get Jaybird to work with Firebird 3, >either upgrade to Jaybird 3.0.4 or higher, or change the WireCrypt setting from its default Required to Enabled (or >Disabled, but that is not advisable as that will also disable it for clients that do support wire encryption).
たしかに3.0.4にすると、firebird.confを変更せずともこのエラーは発生しなくなる。