内容
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));
表が作成されました。
拡張できた。