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を変更せずともこのエラーは発生しなくなる。