SSJ Tech Lab - Oracle Database テクニカルラボ

MAX_STRING_SIZE -VARCHAR2,NVARCHAR2,RAWの拡張

2014-12-10記事公開

Oracle Database 12cR1からVARCHAR2/NVARCHAR2/RAWの拡張が以下のように可能となっています。

通常
VARCHAR2/NVARCHAR2(最大4000バイト)
RAW(最大2000バイト)
拡張後
VARCHAR2/NVARCHAR2(最大32767バイト)
RAW(最大32767バイト)

パラメータ説明

初期化パラメータ: MAX_STRING_SIZE

項目
パラメータ・タイプ 文字列
構文 MAX_STRING_SIZE = { STANDARD | EXTENDED }
デフォルト値 STANDARD
Oracle RAC 適用 複数インスタンスには、同じ値を使用する必要がある。
オンライン変更 不可
パラメータ値の説明
  • ・STANDARD 通常のバイト数制限
  • ・EXTENDED 拡張されたバイト数制限

変更手順

SQL*Plusにログイン後、以下のコマンドを実行します。

制限事項

VIEWの最大サイズ列が増加しないことがあるようです。

utl32k.sqlスクリプトによって、必要な場合に、VARCHAR2、NVARCHAR2およびRAW列の最大サイズが増やされます。
一部のビューのSQLのリライト方法が原因で、これらのビューのVARCHAR2、NVARCHAR2およびRAW列の最大サイズが増加しない場合があります。

Oracle(R) Databaseリファレンス 12c リリース1 (12.1)
B71292-05
https://docs.oracle.com/cd/E57425_01/121/REFRN/refrn10321.htm

標準のバイト数を超える対象列に対するINDEXは作成できません。

既にINDEXが作成されているテーブルの列を、標準のバイト数を超えて拡張しようとした場合はエラーとなります。

MAX_STRING_SIZEをEXTENDEDからSTANDARDに戻すことはできません。

一度MAX_STRING_SIZEをEXTENDEDに設定し、タイプの拡張を行った場合元に戻すことはできません。

コメント

本機能はデータが通常の制限値を超える場合、LOB(ラージオブジェクト)に格納することで機能を実現しています。
機能自体は便利ではあるのですが、デフォルト値がSTANDARD(拡張しない)であることと、単純な拡張ではないため、バグや制限等のリスクを考えれば、使用が必須でない限り少なくとも12cR2までは使用をしないほうがよさそうです。

また、未検証かつ、マニュアルの注意書きや説明にはありませんが、DBLINKを使用して、STANDARDの設定となっているデータベースからEXTENDEDとなっているデータベースのデータを取得する場合にも制限がありそうです。4000バイトが制限のデータベースで4000バイトを超えるデータをDBLINKを通じて取得可能ではないように思われます。

データ保存の基本的な部分の変更なので、通常運用に加え、RMAN/DataPump等の機能検証をきっちり行った上で実装することを推奨いたします。


関連記事

関連記事が存在しません