Thứ Ba, 28 tháng 2, 2023

Tham Số MAX_STRING_SIZE Trong Oracle Database 12c

Tham số này đã được giới thiệu trong Oracle 12c. MAX_STRING_SIZEkiểm soát kích thước tối đa của kích thước chuỗi trong cơ sở dữ liệu Oracle.
Chúng ta có thể đặt nó thành STANDARDhoặcEXTENDED, mặc định làSTANDARD

MAX_STRING_SIZE = STANDARD có nghĩa là kích thước tối đa của chuỗi4000 bytesdành choVARCHAR2NVARCHAR2

MAX_STRING_SIZE = EXTENDED có nghĩa là kích thước tối đa có thể lên tới32767 byte, do vậy với các kiểu varchar2, nvarchar2 > 4000 byte chúng ta sẽ không cần phải dùng kiểu CLOB rất tốn kém dung lượng (có thể giảm dung lượng được 1000 lần khi chuyển từ CLOB sang max_string_size=extended)

Chúng ta có thể thay đổi giá trị của MAX_STRING_SIZEtừ STANDARDthành EXTENDEDNhưng không phải từ EXTENDEDđến STANDARD.

Với MAX_STRING_SIZEthiết lập là STANDARD, nếu chúng ta cố gắng thiết lập độ dài của cột lớn hơn 4000, thì nó sẽ báo lỗi ORA-00910.

SQL> SHOW PARAMETER MAX_STRING_

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string STANDARD
SQL>


SQL> create table UNIVERSITY ( COLLEGE_NAME VARCHAR2(8000));
create table UNIVERSITY ( COLLEGE_NAME VARCHAR2(8000))
*
ERROR at line 1:
ORA-00910: specified length too long for its datatype 

CÁC BƯỚC để chuyển đổi MAX_STRING_SIZE thành EXTENDED:

1. Khởi động cơ sở dữ liệu ở chế độ nâng cấp:

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL>STARTUP UPGRADE

ORACLE instance started.

Total System Global Area 1.4663E+10 bytes
Fixed Size 15697000 bytes
Variable Size 1.1878E+10 bytes
Database Buffers 2717908992 bytes
Redo Buffers 51404800 bytes
Database mounted.
Database opened. 

2. Thay đổi giá trị thành EXTENDED

SQL> alter system set MAX_STRING_SIZE='EXTENDED' SCOPE=BOTH;

System altered.

SQL> show parameter MAX_STRING_SIZE

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string EXTENDED 

3.Chạy tập lệnh utl32k.sql:

@?/rdbms/admin/utl32k.sql

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

Session altered.




DOC>#######################################################################
DOC>#######################################################################
DOC> Câu lệnh sau sẽ gây ra lỗi  "ORA-01722: invalid number"
DOC> nếu cơ sở dữ liệu chưa được mở để UPGRADE.
DOC>
DOC> Thực hiện "SHUTDOWN ABORT" và
 DOC> startup UPGRADE.
DOC>#######################################################################
DOC>#######################################################################
DOC>#

no rows selected

DOC>#######################################################################
DOC>#######################################################################
DOC> Câu lệnh sau sẽ gây ra lỗi "ORA-01722: invalid number"
DOC> Lỗi nếu cơ sở dữ liệu không tương thích >= 12.0.0
DOC>DOC> Set compatible >= 12.0.0 và thử lại 
 DOC>#######################################################################
DOC>#######################################################################
DOC>#

PL/SQL procedure successfully completed.


Session altered.


1524 rows updated.


Commit complete.


System altered.


PL/SQL procedure successfully completed.


Commit complete.


System altered.


Session altered.


Session altered.


Table created.


Table created.


Table created.


Table truncated.


0 rows created.


PL/SQL procedure successfully completed.

no rows selected

DOC>#######################################################################
DOC>#######################################################################
DOC> Câu lệnh sau sẽ gây ra lỗi "ORA-01722: invalid number"
DOC> lỗi nếu chúng tôi gặp lỗi trong khi sửa đổi một cột thành 
DOC> Tài khoản cho thay đổi độ dài loại dữ liệu do kích hoạt hoặc bỏ kiểu 32k. 
DOC> Liên hệ với bộ phận hỗ trợ của Oracle để được hỗ trợ. 
DOC>#######################################################################
DOC>#######################################################################
DOC>#

PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


Commit complete. 

4.Khởi động lại cơ sở dữ liệu:

shutdown immediate;
startup


SQL> show parameter max_string

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string EXTENDED

Hãy tạo một bảng có độ dài hơn 4000.

SQL> create table UNIVERSITY ( COLLEGE_NAME VARCHAR2(8000));

Table created. 

CÁC VẤN ĐỀ CHUNG:

1. Nếu bạn cố khởi động lại cơ sở dữ liệu mà không chạy tập lệnhutl32k.sql, sẽ gặp lỗi bên dưới.

Database dismounted.
ORACLE instance shut down.
SQL> ORACLE instance started.

Total System Global Area 1.4663E+10 bytes
Fixed Size 15697000 bytes
Variable Size 1.1878E+10 bytes
Database Buffers 2717908992 bytes
Redo Buffers 51404800 bytes
Database mounted.
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-14695: MAX_STRING_SIZE migration is incomplete
Process ID: 18669
Session ID: 401 Serial number: 16419 

Vì vậy, hãy khởi động lại cơ sở dữ liệu trong chế độ UPGRADE và thực thi tập lệnhutlk32.sql.

2. Nếu bạn cố đặt giá trị thành EXTENDED , khi cơ sở dữ liệu không ở chế độ UPGRADE .

SQL> alter system set MAX_STRING_SIZE=EXTENDED;
alter system set MAX_STRING_SIZE=EXTENDED
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migration 

Vì vậy, trước khi chạy câu lệnh thay đổi này, hãy khởi động cơ sở dữ liệu ở chế độUPGRADE.

KẾT LUẬN: Khi max_string_size được thay đổi thành EXTENDED, Chúng ta không thể quay về giá trị STANDARDban đầu. Vì vậy, trước khi thay đổi giá trị trong cơ sở dữ liệu product hoặc quan trọng, Vui lòng kiểm tra kỹ lưỡng, vì bạn có thể gặp phải các lỗi không mong muốn.

 

LƯU Ý:  

Nếu bạn có các mục trong thùng rác khi chạy utl32k.sql, bạn sẽ nhận được:

DECLARE

*

ERROR at line 1:

ORA-38301: can not perform DDL/DML over objects in Recycle Bin

ORA-06512: at line 121


Disconnected from Oracle Database 12c Standard Edition Release 12.1.0.2.0 – 64bit Production

With the Automatic Storage Management option

Cách khắc phục đơn giản, xóa thùng rác và chạy lại utl32k.sql:

$ sqlplus / as sysdba


SQL*Plus: Release 12.1.0.2.0 Production on Tue May 12 13:24:55 2020


Copyright (c) 1982, 2014, Oracle. All rights reserved.


Connected to:

Oracle Database 12c Standard Edition Release 12.1.0.2.0 – 64bit Production

With the Automatic Storage Management option


SQL> purge dba_recyclebin;

@?/rdbms/admin/utl32k

Tham khảo thêm:

Hy vọng hữu ích cho bạn.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master