ฐานข้อมูลออราเคิล 12c เราสามารถควบคุมขนาดของ VARCHAR2, NVARCHAR2, และ RAW ด้วยพารามิเตอร์ MAX_STRING (เปลี่ยนค่าในพารามิเตอร์นี้ ใน Upgrade โหมด นะครับ)
Syntax MAX_STRING_SIZE = { STANDARD | EXTENDED }การเปลี่ยนแปลงค่า MAX_STRING_SIZE สามารถเปลี่ยนจาก STANDARD => EXTENDED แต่ไม่สามารถเปลี่ยนจาก EXTENDED => STANDARD
ดังนั้นควรพิจารณาให้ดีเสียก่อน!
การเปลี่ยนค่า MAX_STRING_SIZE ทำได้โดยการ startup ฐานข้อมูลที่ "UPGRADE" โหมด จากนั้น "ALTER SYSTEM" ตามด้วยรัน "utl32k.sql"... เมื่อเรียบร้อยก็ restart ฐานข้อมูลเข้าสู่โหมดปกติ
ตัวอย่าง
SQL> show user;หวังว่าตัวอย่างสามารถทำให้เพื่อนๆ เข้าใจได้ง่ายขึ้นนะครับ.
USER is "DEMO"
SQL>
SQL> show parameter max_string_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string STANDARD
SQL>
SQL> create table mytest (a varchar2(32767));
create table mytest (a varchar2(32767))
*
ERROR at line 1:
ORA-00910: specified length too long for its datatype
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup upgrade
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2287864 bytes
Variable Size 452986632 bytes
Database Buffers 788529152 bytes
Redo Buffers 8859648 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> show parameter MAX_STRING_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string STANDARD
SQL> alter system set max_string_size=EXTENDED;
System altered.
SQL>
SQL>
SQL> @?/rdbms/admin/utl32k.sql
Session altered.
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>#
no rows selected
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 procedure successfully completed.
Session altered.
.
.
.
SQL> select INSTANCE_NAME,STATUS from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
noncdb OPEN MIGRATE
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2287864 bytes
Variable Size 452986632 bytes
Database Buffers 788529152 bytes
Redo Buffers 8859648 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> select INSTANCE_NAME,STATUS from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
noncdb OPEN
SQL>
SQL> conn demo
Enter password:
Connected.
SQL>
SQL>
SQL> show user
USER is "DEMO"
SQL>
SQL> show parameter max_string_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string EXTENDED
SQL>
SQL>
SQL> create table mytest (a varchar2(32767));
Table created.
SQL> desc mytest
Name Null? Type
----------------------------------------- -------- ----------------------------
A VARCHAR2(32767)
อ่านเพิ่มเติมได้ที่ Oracle Documents (Oracle Database Reference 12C) นะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น