What is "Built-In UDT"?

oninit

2007年12月13日 22:28

先日、IDS 9から10/11への移行時の注意事項についての記事を書きました。
http://oninit.ti-da.net/e1864915.html
その時、"Built-In UDT"という表記があり、それが何なのか謎でした。マニュアルを始めとする色々な情報源を見ると、IDS 9/10/11では、LVARCHAR, CLOB, BLOGなどのデータ型はユーザー定義データ型と同じような実装方法で実現されていることがわかりました。

そこで、上記の注意事項に戻りますが、この問題は、LVARCHAR, CLOB, BLOB等のデータ型の列にインデックスを作成してあった場合に、IDS9からIDS10へのコンバージョン後その表への更新や挿入などができなくなる、というものです。

IDS 9で、
CREATE DATABASE db;
CREATE TABLE t1 ( col1 INTEGER, col2 LVARCHAR(20) );
CREATE INDEX ix1 ON t1 ( col2 );
INSERT INTO t1 VALUES ( 1, "One" );

した後、このデータベースを含むインスタンスをIDS 10にコンバージョンします。IDSのバージョンが10.00.xC1/xC2の場合には、コンバージョン終了後に、
INSERT INTO t1 VALUES ( 2, "Two" );

などを実行すると失敗します。インデックスを再作成すれば解決できますが、IDS 10.00.xC3以降では、コンバージョン後、このようなデータベースを開いた時に自動的に対策が行われるようコードが追加されたようです。
ただし、この自動的な対策がアプリケーション運用後に動き出すとアプリケーションの運用に問題が出る可能性があります。従って、コンバージョン後クライアントアプリケーションの運用が始まる前に、すべてのデータベースをOpen/Closeしておきましょう、と言うのがリリース・ノートに書いてある注意書きです。

関連記事