2009-08-20 4 views
0

DB2データベースに対して開発していますが、新しい列を追加しようとするとエラーコード "-670"が表示されます。 エラーコードは、テーブルスペースのサイズが不十分であることを示しています。とにかく、DESCRIBEコマンドを実行したところ、テーブルの幅が17Kを超えていないと推測します( "Length"とにかく、私はBLOBカラムがたくさんあるので、その推定値はわかりません。テーブル幅に関する正確な情報を取得するために使用できるSQLコマンド(またはDB2コマンドラインユーティリティ)がありますか?プログラムで新しい列を追加すると、DB2エラーコード-670が返されます

答えて

0

このスクリプトは自分自身に質問をしてくれます。

select SUM(300) from sysibm.syscolumns where tbname = 'MY_TABLE' and (typename = 'BLOB' or typename = 'DBCLOB') 
select 2 * SUM(length) from sysibm.syscolumns where tbname = 'MY_TABLE' and typename = 'VARGRAPHIC' 
select SUM(length) from sysibm.syscolumns where tbname = 'MY_TABLE' and typename != 'BLOB' and typename != 'DBCLOB' and typename != 'VARGRAPHIC' 
1

DESCRIBE TABLEコマンドの出力のLENGTH値の合計は、BLOB、CLOB、またはLONG​​ VARCHARの列をカウントしない場合は、かなり正確な行幅のゲージです列のそのレポートには表示されないオーバーヘッドバイトは少量ですが、通常はテーブルの重要な部分ではありません。 DB2は歴史的に大きなオブジェクトを別々に保管していたため、表の残りのデータの管理性とパフォーマンスが向上しました。 DB2は最近、圧縮とバッファリングを使用するために大きなオブジェクトをインラインで格納することをサポートしていますが、広く使用されているとは思われていません。

大きなページ・サイズの表スペースにテーブルを再配置するようになったようです。すでに32Kページを超えていない限り、表をより大きなバッファー・プールと表スペースに移行することでページ・サイズを2倍にすることができます。古いテーブルからデータを保持する必要がある場合は、同じデータベース内のあるテーブルから別のテーブルに大量のデータを簡単にコピーできます。もう1つの選択肢は、テーブルの内容をフラットファイルにエクスポートして、より広いテーブルスペース内のテーブルを削除して再作成できるようにすることです。

+0

実際には、私たちは既に32Kの限界に達しています(これは私たちが現在推測しているものです)。 DB2のマニュアルで見ることができるように、BLOB記述子の最大サイズは約300バイトです。このサイズを考えると、20K未満でなければなりませんが、カラムが作成されているので特定のAPI呼び出し時にサードパーティのアプリケーションによって、インラインでコンテンツが追加されている可能性があります。そのため、テーブルの幅の制限がなくなります。コンテンツがインラインで追加されているかどうかを知る方法があるかどうかは分かりますか? 以前の回答はかなり良かったです、ありがとう! –

関連する問題