Hinweis:

Erweiterte Datentypfunktion für Oracle-Datenbanken aktivieren

Einführung

In Oracle Database 12c wurde der Parameter MAX_STRING_SIZE eingeführt, der die maximale Größe der Datentypen VARCHAR2, NVARCHAR2 und RAW steuert. Wenn der Parameter MAX_STRING_SIZE auf EXTENDED gesetzt wird, wird die Datentypgröße auf 32767 Byte begrenzt. Beim Setzen von MAX_STRING_SIZE auf den Wert EXTENDED muss der Initialisierungsparameter COMPATIBLE der Datenbank 12.0.0.0 oder höher sein.

In diesem Tutorial werden die Aufgaben beschrieben, mit denen Oracle Database die neuen erweiterten Datentypen nutzen kann, für die bestimmte Upgradeaktionen erforderlich sind.

Ziele

Voraussetzungen

Aufgabe 1: Erweitern Datentyp auf einer Nicht-Containerdatenbank festlegen

  1. Führen Sie den folgenden Befehl aus.

    SQL> SHOW PARAMETER MAX_STRING_
    
    | NAME            | TYPE   | VALUE    |
    | --------------- | ------ | -------- |
    | max_string_size | string | STANDARD |
    
  2. Starten Sie die Datenbank im Upgrade-Modus.

    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.
    
  3. Ändern Sie den Wert MAX_STRING_SIZE in 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 |
    
  4. Führen Sie das Skript utl32k.sql aus: @?/rdbms/admin/utl32k.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.
    
    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> The following statement will cause an "ORA-01722: invalid number"
    DOC> error if we encountered an error while modifying a column to
    DOC> account for data type length change as a result of enabling or
    DOC> disabling 32k types.
    DOC>
    DOC> Contact Oracle support for assistance.
    DOC>#######################################################################
    DOC>#######################################################################
    DOC>#
    
    PL/SQL procedure successfully completed.
    
    PL/SQL procedure successfully completed.
    
    Commit complete.
    
  5. Starten Sie die Datenbank neu.

    shutdown immediate;
    startup
    
    SQL> show parameter max_string
    
    | NAME            | TYPE   | VALUE    |
    | --------------- | ------ | -------- |
    | max_string_size | string | EXTENDED |
    

Aufgabe 2: Erweitern Datentyp in einer Containerdatenbank festlegen (CDB$ROOT)

  1. Führen Sie die folgenden Befehle aus.

    [oracle@vm4 ~]$ sqlplus "/ as sysdba"
    
    SQL*Plus: Release 12.2.0.1.0 Production on Thu Sep 7 13:26:41 2023
    
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
    
    SQL> SHOW PARAMETER MAX_STRING_
    
    | NAME            | TYPE   | VALUE    |
    | --------------- | ------ | -------- |
    | max_string_size | string | STANDARD |
    
    SQL> show pdbs;
    
    | CON_ID | CON_NAME    | OPEN MODE  | RESTRICTED |
    | ------ | ----------- | ---------- | ---------- |
    | 2      | PDB$SEED    | READ ONLY  | NO         |
    | 3      | RATPRD_PDB1 | READ WRITE | NO         |
    
    [oracle@vm4 ~]$ cd $ORACLE_HOME/rdbms/admin
    [oracle@vm4 admin]$ pwd
    /u01/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin
    [oracle@vm4 ~]$  mkdir -p /home/oracle/mydir/utl32k_cdb_pdbs_output
    [oracle@vm4 ~]$ sqlplus "/ as sysdba"
    
    SQL*Plus: Release 12.2.0.1.0 Production on Thu Sep 7 13:30:18 2023
    
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
    
    SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;
    
    Session altered.
    
  2. Ändern Sie den Wert MAX_STRING_SIZE in EXTENDED.

    SQL> ALTER SYSTEM SET MAX_STRING_SIZE=extended SCOPE=SPFILE;
    
    System altered.
    
  3. Starten Sie die Datenbank im Upgrade-Modus.

    SQL> shutdown;
    
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    
    SQL> startup upgrade;
    
    ORACLE instance started.
    
    Total System Global Area 3.2749E+10 bytes
    Fixed Size                 12351112 bytes
    Variable Size            4160751992 bytes
    Database Buffers         2.8387E+10 bytes
    Redo Buffers              188973056 bytes
    
    Database mounted.
    Database opened.
    
    SQL> exit
    
  4. Führen Sie das Skript catcon.pl aus.

    Hinweis: Mit dem Skript catcon.pl können Sie das Skript rdbms/admin/utl32k.sql in der Root und in allen PDBs in der CDB ausführen, um die maximale Größe der Spalten VARCHAR2, NVARCHAR2 und RAW zu erhöhen. Mit der Option -force_pdb_mode "UPGRADE" wird sichergestellt, dass alle PDBs, einschließlich Anwendungs-Root-Klone, im Migrationsmodus geöffnet werden. Geben Sie das SYS-Kennwort ein, wenn Sie dazu aufgefordert werden.

    [oracle@vm4 ~]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS --force_pdb_mode 'UPGRADE' -d $ORACLE_HOME/rdbms/admin -l '/home/oracle/mydir/utl32k_cdb_pdbs_output' -b utl32k_cdb_pdbs_output utl32k.sql
    catcon: ALL catcon-related output will be written to [/home/oracle/mydir/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output_catcon_88242.lst]
    catcon: See [/home/oracle/mydir/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output*.log] files for output generated by scripts
    catcon: See [/home/oracle/mydir/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output_*.lst] files for spool files, if any
    Enter Password:    -> enter sys password
    catcon.pl: completed successfully
    [oracle@vm4 ~]$ sqlplus "/ as sysdba"
    
    SQL*Plus: Release 12.2.0.1.0 Production on Thu Sep 7 13:48:56 2023
    
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
    
    SQL> startup;
    
    ORA-01081: cannot start already-running ORACLE - shut it down first
    
    SQL> shut immediate;
    
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    
    SQL> startup;
    
    ORACLE instance started.
    
    Total System Global Area 3.2749E+10 bytes
    Fixed Size                 12351112 bytes
    Variable Size            4160751992 bytes
    Database Buffers         2.8387E+10 bytes
    Redo Buffers              188973056 bytes
    
    Database mounted.
    Database opened.
    
    SQL> show parameter max_string_size;
    
    | NAME            | TYPE   | VALUE    |
    | --------------- | ------ | -------- |
    | max_string_size | string | EXTENDED |
    

Aufgabe 3: Erweiterten Datentyp in PDB festlegen

  1. Führen Sie die folgenden Befehle aus, um die Datenbank zu ändern.

    SQL> alter session set container = RATPRD_PDB1;
    
    Session altered.
    
    SQL> show pdbs
    
    | CON_ID | CON_NAME    | OPEN MODE  | RESTRICTED |
    | ------ | ----------- | ---------- | ---------- |
    | 3      | RATPRD_PDB1 | READ WRITE | NO         |
    
    SQL> ALTER PLUGGABLE DATABASE RATPRD_PDB1 CLOSE IMMEDIATE;
    
    Pluggable database altered.
    
    SQL>  show pdbs
    
    | CON_ID | CON_NAME    | OPEN MODE | RESTRICTED |
    | ------ | ----------- | --------- | ---------- |
    | 3      | RATPRD_PDB1 | MOUNTED   |
    
  2. Öffnen Sie die PDB RATPRD_PDB1 im Upgrademodus, die zum Ändern des Parameters max_string_size erforderlich ist.

    SQL> ALTER PLUGGABLE DATABASE RATPRD_PDB1 OPEN UPGRADE;
    
    $
    Pluggable database altered.
    
    SQL>  show pdbs;
    
    | CON_ID | CON_NAME    | OPEN MODE | RESTRICTED |
    | ------ | ----------- | --------- | ---------- |
    | 3      | RATPRD_PDB1 | MIGRATE   | YES        |
    
  3. Führen Sie utl32k.sql aus, um die maximale Größe der Spalten VARCHAR2,NVARCHAR2 und RAW in PDB RATPRD_PDB1 zu ändern.

    SQL> @$ORACLE_HOME/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.
    
    0 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.
    
    STARTTIME :
    
    09/07/2023 14:32:06.790646000
    
    PL/SQL procedure successfully completed.
    
    No errors.
    
    PL/SQL procedure successfully completed.
    
    Session altered.
    
    Session altered.
    
    0 rows created.
    
    no rows selected
    
    no rows selected
    
    DOC>#######################################################################
    DOC>#######################################################################
    DOC> The following statement will cause an "ORA-01722: invalid number"
    DOC> error if we encountered an error while modifying a column to
    DOC> account for data type length change as a result of enabling or
    DOC> disabling 32k types.
    DOC>
    DOC> Contact Oracle support for assistance.
    DOC>#######################################################################
    DOC>#######################################################################
    DOC>#
    
    PL/SQL procedure successfully completed.
    
    PL/SQL procedure successfully completed.
    
    Commit complete.
    
    Package altered.
    
    Package altered.
    
    SQL> show pdbs;
    
    | CON_ID | CON_NAME    | OPEN MODE | RESTRICTED |
    | ------ | ----------- | --------- | ---------- |
    | 3      | RATPRD_PDB1 | MIGRATE   | YES        |
    
    SQL> ALTER PLUGGABLE DATABASE RATPRD_PDB1 CLOSE IMMEDIATE;
    
    Pluggable database altered.
    
  4. Prüfen Sie, ob der Parameterwert max_string_size in EXTENDED geändert wurde.

    SQL> ALTER PLUGGABLE DATABASE RATPRD_PDB1 open ;
    
    Pluggable database altered.
    
    SQL>  show pdbs;
    
    | CON_ID | CON_NAME    | OPEN MODE  | RESTRICTED |
    | ------ | ----------- | ---------- | ---------- |
    | 3      | RATPRD_PDB1 | READ WRITE | NO         |
    
    SQL> show parameter max_string_size;
    
    | NAME            | TYPE   | VALUE    |
    | --------------- | ------ | -------- |
    | max_string_size | string | EXTENDED |
    

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.