Edited at

【Oracle 12Cのお勉強】varchar2の最大サイズを4000バイト→32767バイトに拡張

More than 1 year has passed since last update.


内容

12cより、以下の作業を行うことで、varchar2の最大サイズを4000バイトから32767バイトに拡張できる。

※一度拡張すると、元に戻せないので注意。


  • 初期化パラメータmax_string_sizeをEXTENDに設定。

  • utl32k.sqlを実行。


検証

▼初期化パラメータ"max_string_size"の確認

SQL> show parameter max_string_size;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string STANDARD

▼4000バイト以上のサイズを指定して、テーブルを作成してみる

SQL> create table ts (v varchar2(4001));

create table ts (v varchar2(4001))
*
1でエラーが発生しました。:
ORA-00910: 指定した長さがデータ型に対して長すぎます

▼初期化パラメータmax_string_sizeの値をextendedに変更

SQL> shutdown immediate

プラガブル・データベースがクローズされました。

SQL> startup upgrade
プラガブル・データベースがオープンされました。

SQL> select status from v$instance;
STATUS
------------
OPEN MIGRATE

SQL> alter system set max_string_size=extended;
システムが変更されました。

▼utl32k.sqlスクリプトの実行

SQL> @?/rdbms/admin/utl32k.sql

セッションが変更されました。

DOC>#######################################################################
DOC>#######################################################################
DOC> The following statement will cause an "ORA-01722: invalid number"
DOC> error if the database has not been opened for UPGRADE.
DOC>
DOC> Perform a "SHUTDOWN ABORT" and
DOC> restart using UPGRADE.
DOC>#######################################################################
DOC>#######################################################################
DOC>#

レコードが選択されませんでした。

DOC>#######################################################################
DOC>#######################################################################
DOC> The following statement will cause an "ORA-01722: invalid number"
DOC> error if the database does not have compatible >= 12.0.0
DOC>
DOC> Set compatible >= 12.0.0 and retry.
DOC>#######################################################################
DOC>#######################################################################
DOC>#

PL/SQLプロシージャが正常に完了しました。

セッションが変更されました。

1行が更新されました。

…(省略)…

パッケージが変更されました。

パッケージが変更されました。

▼再起動

SQL> shutdown immediate

プラガブル・データベースがクローズされました。
SQL> startup
プラガブル・データベースがオープンされました。

▼再度、4000バイト以上のサイズを指定して、テーブルを作成してみる

SQL> create table ts (v varchar2(4001));

表が作成されました。

拡張できた。