I am not going to post how to convert to extended data type since there are many blogs on that already.
Just a reminder, there’s no going back; hence have backup and possibly minimize changes during testing to be able to restore (which is ideal and may not be feasible).
Before reverting to MAX_STRING_SIZE=STANDARD, columns affected by extended data type need to be identified.
From Oracle documentation, MAX_STRING_SIZE controls the maximum size of VARCHAR2, NVARCHAR2, and RAW data types in SQL.
STANDARD means that the length limits for Oracle Database releases prior to Oracle Database 12c apply
(for example, 4000 bytes for VARCHAR2 and NVARCHAR2, and 2000 bytes for RAW).
EXTENDED means that the 32767 byte limit introduced in Oracle Database 12c applies.
Test case:
[05:41]oracle@arrow:test:/media/sf_working/sql
$ sysdba @max_string_size.sql
SQL*Plus: Release 12.1.0.2.0 Production on Wed Aug 24 05:41:22 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
OWNER TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH CHAR_LENGTH C
-------------------- ---------------------------------------- ------------------------- ---------- ----------- ----------- -
MDINH T NAME VARCHAR2 5000 5000 B
MDINH T2 T2 RAW 2555 0
MDINH T3 ID VARCHAR2 24000 6000 C
SYS DBA_ADDM_FINDINGS FINDING_NAME VARCHAR2 32767 32767 B
SYS DBA_ADDM_FINDINGS IMPACT_TYPE VARCHAR2 32767 32767 B
SYS DBA_ADDM_FINDINGS MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADDM_FINDINGS MORE_INFO VARCHAR2 32767 32767 B
SYS DBA_ADDM_TASKS ERROR_MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADDM_TASKS STATUS_MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADDM_TASK_DIRECTIVES DESCRIPTION VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_ACTIONS MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_DEF_PARAMETERS DESCRIPTION VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_EXECUTIONS ERROR_MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_EXECUTIONS STATUS_MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_EXEC_PARAMETERS DESCRIPTION VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_FINDINGS FINDING_NAME VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_FINDINGS IMPACT_TYPE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_FINDINGS MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_FINDINGS MORE_INFO VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_FINDING_NAMES FINDING_NAME VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_PARAMETERS DESCRIPTION VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_RATIONALE IMPACT_TYPE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_RATIONALE MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_RECOMMENDATIONS BENEFIT_TYPE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_TASKS ERROR_MESSAGE VARCHAR2 32767 32767 B
SYS DBA_ADVISOR_TASKS STATUS_MESSAGE VARCHAR2 32767 32767 B
SYS DBA_REGISTRY OTHER_SCHEMAS VARCHAR2 32767 32767 B
SYS DBA_SCHEDULER_CHAIN_RULES ACTION VARCHAR2 32767 32767 B
SYS DBA_SCHEDULER_CHAIN_RULES CONDITION VARCHAR2 32767 32767 B
SYS DBA_SCHEDULER_JOBS PROGRAM_NAME VARCHAR2 16000 16000 B
SYS DBA_SCHEDULER_JOBS PROGRAM_OWNER VARCHAR2 16000 16000 B
SYS DBA_SCHEDULER_JOBS RAISE_EVENTS VARCHAR2 32767 32767 B
SYS DBA_SCHEDULER_JOBS SCHEDULE_NAME VARCHAR2 16000 16000 B
SYS DBA_SCHEDULER_JOBS SCHEDULE_OWNER VARCHAR2 16000 16000 B
SYS DBA_SCHEDULER_JOB_RUN_DETAILS ERRORS VARCHAR2 32767 32767 B
SYS DBA_SCHEDULER_JOB_RUN_DETAILS OUTPUT VARCHAR2 32767 32767 B
SYS DBA_SCHEDULER_WINDOWS SCHEDULE_NAME VARCHAR2 16000 16000 B
SYS DBA_SCHEDULER_WINDOWS SCHEDULE_OWNER VARCHAR2 16000 16000 B
SYS DBA_VIEWS TEXT_VC VARCHAR2 32767 32767 B
SYS INT$DBA_VIEWS TEXT_VC VARCHAR2 32767 32767 B
40 rows selected.
test:(SYS@test):PRIMARY> show parameter max_string
NAME TYPE VALUE
------------------------------------ ------------------------------ ------------------------------
max_string_size string EXTENDED
test:(SYS@test):PRIMARY> desc mdinh.t
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
ID VARCHAR2(1000)
NAME VARCHAR2(5000)
test:(SYS@test):PRIMARY> desc mdinh.t2
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
T2 RAW(2555)
test:(SYS@test):PRIMARY> desc mdinh.t3
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
ID VARCHAR2(6000 CHAR)
test:(SYS@test):PRIMARY> @nls.sql
PARAMETER SESSION DATABASE INSTANCE
------------------------------ ------------------------------ ------------------------------ ------------------------------
NLS_COMP BINARY BINARY BINARY
NLS_SORT BINARY BINARY
NLS_CALENDAR GREGORIAN GREGORIAN
NLS_CURRENCY $ $
NLS_LANGUAGE AMERICAN AMERICAN AMERICAN
NLS_TERRITORY AMERICA AMERICA AMERICA
NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS DD-MON-RR
NLS_TIME_FORMAT HH.MI.SSXFF AM HH.MI.SSXFF AM
NLS_CHARACTERSET AL32UTF8
NLS_ISO_CURRENCY AMERICA AMERICA
NLS_DATE_LANGUAGE AMERICAN AMERICAN
NLS_DUAL_CURRENCY $ $
NLS_RDBMS_VERSION 12.1.0.2.0
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR HH.MI.SSXFF AM TZR
NLS_NCHAR_CONV_EXCP FALSE FALSE FALSE
NLS_LENGTH_SEMANTICS CHAR BYTE BYTE
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM DD-MON-RR HH.MI.SSXFF AM
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NUMERIC_CHARACTERS ., .,
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR DD-MON-RR HH.MI.SSXFF AM TZR
20 rows selected.
test:(SYS@test):PRIMARY>
Now it’s evident as to why there is no going back since SYS objects seem to be modified too.
That’s the easy part. Next is to create the database with identical components installed and hopefully full export/import will work.
Some useful information if you are thinking about migrating to extended data type.
12c Indexing Extended Data Types Part I (A Big Hurt)
12c Indexing Extended Data Types Part II (15 Steps)