Dの小部屋

忘れやすい私のメモ帳

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

内容

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));
表が作成されました。

拡張できた。