SlideShare a Scribd company logo
New Features for
Administrators
(Oracle8i)




      April, 2001



       CloudBox


    Jang Kyung Sang
Oracle8i New Features                                                http://www.ggola.com/




Oracle8i New Features for Administrators


Course

                        1.   Java in the database

                        2.   Optimizer and Query Improvements

                        3.   Summary Management

                        4.   Indexes and Index-Organized Tables

                        5.   Basic Partition

                        6.   Partition Maintenance

                        7.   Composite Partitioning

                        8.   Added New Features for partition

                        9.   Universal Installer Migration and Upgrade

                        10. Tablespace Management

                        11. Database Resource Manager

                        12. Manageability Features

                        13. Availability and Recoverability

                        14. Features of Net8

                        15. SQL*Plus, PL/SQL and National Language Support

                        16. Database Security

                        17. Partial addition for Oracle8i




jkspark@hanafos.com                             -2-
Oracle8i New Features                                                     http://www.ggola.com/




1. Java in the database


What does Oracle8i support for java?


                                                                                   .

                            Open, portable, productive, internet computing language

                            Oracle8i enterprise class java server
                            - Java Virtual Machine integrated with Database
                            - use java anywhere PL/SQL used
                            - productive programming tools
                            - industry standard components

                            Oracle8i java application          server platform
                                   application                             java solution
                                    .

                        Supported three products for building java database application

                        -   standards-compliant JDBC drivers to access Oracle from JAVA
                            applications

                        -   precompiler(SQLJ) for embedding SQL in java applications

                        -   Oracle JDeveloper (JDBC, SQLJ, complete development
                            environment)

                        CF. Oracle8i                                               JVM(Java
                        virtual machine)                   .         EJB(Enterprise java bean)
                        transaction server                                CORBA clients
                                 .

                        Five major components that integrated JVM with Oracle8i

                        -   Oracle JVM       Javasoft JDK specification                    Oracle
                            architecture                    optimizing                 .

                        -   Embedded JDBC Driver  JVM                        server
                            locally SQL and PL/SQL   access                                .

                        -   SQL and PL/SQL     Inter-Language Method Services
                                   mechanism          JAVA call                .
                                   SQL PL/SQL call
                            C     language              external procedure ‘call
                            out’                standard mechanism       .
                              ,       calling mechanism               Oracle8i
                            SQL and PL/SQL     Java call                     .



jkspark@hanafos.com                             -3-
Oracle8i New Features                                                     http://www.ggola.com/




                        -   Net8               java program               SQL
                            ‘publishes’                SQL         Java     access
                                                     .

                        -                          CORBA IIOP(Internet Inter-ORB
                            Protocol)            .        RDBMS access        second
                            protocol      (        Net8(      SQL*Net) first
                            protocol                    )                     Oracle8i
                            java        CORBA2.0-compliant object request broker
                            embed                                CORBA
                            RDBMS call in and call out                      .
                            CF. java stored program ORB ‘published’
                            clients   RDBMS         java program   access     alternate
                            mechanism                .

                        Major components of JVM

                        -   SQLJ Translator : JAVA and SQL                    program
                                           .

                        -   Object Memory Management : allocate and free memory in
                            standard chunks called object memories.

                        -   Memory manager/Garbage collector : Oracle database
                            environment                      manager      JVM memory
                            heaps, allocating and collecting object memories
                                         manage         .

                        -   Java class loader : Standard “.class” format and in a
                            compressed form            Oracle VM other systems
                            java binaries interchange                          . (both export
                            and import)

                        -   Bytecode compiler : “.class” java binary      standard java
                            program translate           .

                        -   Interpretation/run-time : execute standard java binaries.

                        -   Native compilation : C language               java program
                            execution performance                  .

                        -   Library manager : java program      manage         .

                        -   Standard library : java API specification(java.lang, java.io,
                            java.math, and java.util)         standard libraries Oracle
                            Java VM           support     .

                        CF. The java interpreters and compilers are based on the JDK 1.1.6
                        standards




jkspark@hanafos.com                            -4-
Oracle8i New Features                                                  http://www.ggola.com/




Using JAVA

                        Integrated Java, SQL, and PL/SQL

                        -   Integration :        Java SQL and PL/SQL             call            ?
                                                 SQL and PL/SQL Java             call            ?

                        Java call SQL and PL/SQL

                        -   Java standard JDBC interface              database          SQL
                            and PL/SQL CALL              .

                        -   Java VM     OCI thin JDBC drivers                    interface
                                      standard JDBC driver embed                    .

                        -          , outside database                 JDBC
                            java application                   code
                            Oracle Java VM                               .

                        -           architecture outside or within RDBMS
                            java and SQL            same interface
                            application partitioning flexibility and efficiency
                                     .


                        SQL and PL/SQL call java

                        -   SQL and PL/SQL       java   call           SQL
                            PL/SQL call                        mechanism                     .

                        -           Oracle8i java stored procedure     PL/SQL
                                    automatic dependency-checking mechanisms
                                                         java call           .

                        -   Oracle8i new DDL extensions              “create
                            procedure as java”         java stored procedure,
                            function, and triggers                      .

                        -   Oracle8i PL/SQL                namespace                    java
                            stored procedure                      any PL/SQL
                                            .




jkspark@hanafos.com                            -5-
Oracle8i New Features                                                   http://www.ggola.com/




What is JDBC?

                        JDBC(Java Database Connectivity)

                        -   JDBC java RDB access
                            standard set of java classes .

                        -   JDBC javasoft                                   SQL92 syntax
                            and types                     .        mechanisms          java
                            client database           automatic data streaming       .

                        -   JDBC           Oracle      performance improvement
                            array interface                      vendor-specific
                            extensions                           .

                        JDBC drivers

                        -   JDBC Thin driver : web browser                 applets
                                   . (means thin client)      driver    RDBMS directly
                            communicating        java sockets
                                  client installation                    .

                        -   JDBC OCI :    driver Oracle Call Interface
                            Net8          RDBMS engine    communicating
                            client OCI library          .

                        -   JDBC KPRB :   driver         java stored procedure
                            server side OCI                 Oracle KPRB      library
                                       .

                        -        drivers      the same syntax and APIs and oracle
                            extensions                         java application very
                            portable     .     , connect string         minor
                            modification                    application 3
                                             .

                        Features in JDBC Drivers

                        -      3       JDBC drivers Javasoft JDBC 1.22
                            specification                        JDBC 2.0 specification
                                           . , JDBC 2.0 specification client side
                            XA       support              .
                            CF.        server side driver XA specification
                                          JDBC 2.0 specification                 .

                        -   Oracle JDBC drivers standard JDBC driver Oracle
                            specification extensions          important features              .
                            1. access to Oracle7 types (like ROWIDs and REFCURSORs)
                            2. access to Oracle8i object-relational extensions, REFs, Lobs,
                            and BFILEs




jkspark@hanafos.com                             -6-
Oracle8i New Features                                                   http://www.ggola.com/




                            3. performance enhancement with operation to prefetch rows
                            and the array interface
                            4. access to PL/SQL stored procedures with Oracle7 and 8
                            5. access to java stored procedures with Oracle8i
                            6. access across all Net8 certified firewalls



SQLJ

                            SQLJ Oracle         Pro*C       precompilers
                            Java application       embedded SQL
                                .

                            Preprocessor embedded SQL statements                  SQLJ
                            Java code(with JDBC call) translate .

                            SQLJ     generated code        100% compliant with Javasoft
                            JDBC specification   .

                        Improve developer productivity

                        -   smaller, cleaner, simpler code than JDBC

                        -   SQL syntax errors and identification of SQL/Java type
                            mismatches                     detection            code
                            quality improvement

                        -   JDeveloper Java tool      integration

                        -   Standard language specification, compatible translators

                        -   Oracle Translator      standard compliant

                        -   SQLJ applications    binary portability
                                  (property) platforms      different vendor’s database
                                     portable      .

                        SQLJ supports

                        -   SQLJ    JDBC                      application programs
                                         . (concise more than JDBC.          easier to write
                            or maintain)

                        -           3                  SQLJ                   .
                            1. JDBC                                     (character string,
                            prepare and execute statements, and bind and define
                            variables)                  directly embed SQL statements
                                     .
                            2. SQL statements      Java bind variables and expressions
                                           .




jkspark@hanafos.com                             -7-
Oracle8i New Features                                                     http://www.ggola.com/




                            3. application simple                         default connection
                            and other syntactic elements            features           .

                        -   During the translation phase, SQLJ detects SQL semantic
                            errors and Java and SQL type mismatches.

                        -   SQLJ provides strong typed queries through the use of SQLJ
                            Iterators.(first-class java types for cursors)

                        -   SQLJ SQL precompilation techniques                         run-
                            time execution more efficient  .                  precompiling
                                  Oracle SQLJ executions                             .

                        Code example JDBC VS SQLJ

                        -   JDBC
                        Java.sql.CallableStatement stmt;
                        Connection conn;
                        ResultSet results;

                        Conn = DriverManager.getConnection 9”jdbc:default”);
                        stmt = conn.prepareStatement
                               (“select ename from emp where sal > ? and deptno = ?”);
                        stmt.setInteger(1, salparm);
                        stmt.setInteger(2, deptnoparm);
                        results = stmt.executeQuery();


                        -   SQLJ
                        ResultSet results ;

                        #sql results =
                         { select ename from emp
                           where sal > :salparm and deptno = :deptnopark} ;




                        Using SQLJ with Oracle

                        -   SQLJ JDBC             run-time environment         deployed
                            configuration              deployed    .
                            CF. SQLJ run-time : Java + JDBC driver

                        -   SQLJ applications deploy                              JDBC
                            driver              .               Oracle or users
                            JDBC/OCI/thin JDBC driver                         .

                        -   Oracle8i   Java VM embedded SQLJ translator
                                          Oracle    SQLJ                                  java
                            stored procedures and triggers        .

                        -   Write program in SQLJ --> SQLJ translator : converts to java +
                            JDBC --> run the program




jkspark@hanafos.com                             -8-
Oracle8i New Features                                                            http://www.ggola.com/




Java program

                             Java stored programs
                              -   open alternative complementing PL/SQL

                              -   java is fully functional. PL/SQL                         Java
                                                .

                              -   PL/SQL SQL-intensive                  SQLJ      java stored
                                  procedure                                                 .

                              -   Java stored procedures 3               run-time contexts
                                                   .
                                  1. stored functions and procedures (java program        SQL
                                                              )
                                  2. all triggers java                    .
                                  3. java object-relational methods                     .

                             Developing

                             1.   write java stored programs

                             2.   Java VM       load java code. Java classes
                                            load            .
                                  - SQL*Plus      “create java ddl”command
                                  - standard Oracle utility “LOADJAVA”

                             3.   publish the java procedure to SQL.
                                  - expose the top-level java entrypoint
                                  - map parameters and SQL and PL/SQL datatypes
                                  - set up appropriate user privileges

                             4.   SQL or PL/SQL       call java program
                                  CF. Oracle  PL/SQL call                                   SQL or
                                  PL/SQL      java program call                       syntax
                                          .


                             Example (java installation                           . Refer to page 11)

                 create or replace java source named "NewJava" as public class JavaMaster {
                          static public String Msg(String guys) { return "Good morning " + guys ; } }
                 /
                 create or replace function JavaFunc (str varchar2) return varchar2 as
                 language java name 'JavaMaster.Msg (java.lang.String) return java.lang.String' ;
                 /
                 SQL> select JavaFunc('girls') from dual ;
                 JAVAFUNC('GIRLS')
                 --------------------------------------------------------------------------------
                 Good morning girls




jkspark@hanafos.com                                    -9-
Oracle8i New Features                                                   http://www.ggola.com/




Components

                        Develop server-side business logic as distributed components
                        -    components improve developer productivity in following
                             ways.

                        1.   reuse server-side business logic

                        2.   improve application design as reusable modules

                        3.   simplify deployment in a multitier environment

                        Support java component programming models

                        -    Oracle8i     traditional CORBA servers   Java
                             implemented      .        , ORB  Java VM                  java
                             applications               .

                        -             EJB(the industry standard enterprise javabeans)
                             component model database               java
                                             .
                             Simple declarative transaction        commit or rollback
                             transaction operations            .

                        CF. Java or EJBs  implemented           CORBA servers
                                Oracle8i MTS                     .

                        Server-side ORB (on MTS)

                        -    IIOP listener : Oracle8i      standard CORBA/IIOP binding
                             protocol                     extended      .(Net8)

                        -    IIOP dispatcher : Oracle8i      IIOP-based method
                             invocations                    extened      .

                        -    Oracle8i integrates a CORBA 2.0 ORB.

                        -    MTS platforms : Java VM      MTS                      .
                             MTS                                            .

                        Enterprise JavaBeans (EJBs)

                        -    EJBs is a server-oriented component model for Java.
                             Oracle8i EJBs transaction server platforms                       EJB
                             1.0 specification            .

                        -    Significant advantages using EJBs
                             1. developers             advanced system programming
                             skills                  .
                             2. Pure Java definition          D/COM, CORBA



jkspark@hanafos.com                             - 10 -
Oracle8i New Features                                                            http://www.ggola.com/




                                             dependency                                       .
                            3. platform vendors         EJB
                                         .



Java Configuration

                        Java VM classes installation

                        -   Java VM      manually initialize                               script
                                .

                        -   $ORACLE_HOME/javavm/install/initjvm.sql
                            (user by “SYS”)
                            CF. test     1                                                   .

                        -       script             4000                    java classes
                            initial                   package                       .

                        -   DBMS_JAVA package
                                        only used internally by Oracle                        .

                        -   Needed initial parameter values for executing initjvm.sql :
                            shared_pool_size 50M
                            java_pool_size 50M
                            rollback segment 100M

                        Java-related initial parameter

                        -   shared_pool_size : static java variables                                UGA
                            space

                        -   java_pool_size : shared java objects
                            space            java class   loading                           .
                                        large java application system                   50M
                                      java stored procedure                              20M
                                    .

                        -   java_soft_sessionspace_limit :                size            user’s
                            session java memory usage                        RDBMS trace file
                                   . default 1M.

                        -   java_max_sessionspace_size :                  size                     out-of-
                            memory failure        session          kill          . Default        4G
                                       invisible                                      java
                            programs      memory usage
                                                         .

                        CF. java-related memory         application system          java
                                        setting                           .




jkspark@hanafos.com                            - 11 -
Oracle8i New Features                                                     http://www.ggola.com/




Internet File System

                            iFS Windows                       OS    directories
                            database access                    .

                            Oracle8i                 Oracle8i Java VM                      Java
                            application     .


                        Oracle iFS    several different protocols       access             .

                        -   SMB : MS windows95, 98, NT                               protocol

                        -   HTTP : Web browser and network computer

                        -   FTP : FTP clients            command line

                        -   SMTP, IMAP4, POP3 : e-mail protocol

                        Data integration

                        -   iFS                   application developers             3
                            APIs     , Java, CORBA, and PL/SQL                             .

                        -   iFS document             system       document
                            automatically decompose(parse)
                            document                    recompose(render)  .

                        -   XML(Extended markup language)                        .

                        CF. iFS                     application
                                                .




jkspark@hanafos.com                             - 12 -
Oracle8i New Features                                                  http://www.ggola.com/




2. Optimizer and Query Improvements


Stored Outline

                        Optimizer plan stability

                        -   Optimizer              feature Oracle8i
                                     well-tuned applications SQL hints
                                        (good access path)      SQL
                                                        .

                        -   Plan Equivalence :            plan
                            1. SQL Statement text must match
                            2. Plans are maintained through :
                               - new oracle versions
                               - new statistics on objects
                               - init.ora parameter changes
                               - database reorganization
                               - schema changes

                        CF. table     index               stored outline             index
                                        .

                        Creating stored outlines

                        -   Outline oracle automatic or SQL
                            creation            rule-based or cost-based
                            optimizers                 .
                                    oracle outline                cost-based optimize
                                     .

                        -   Session       init.ora parameter      create_stored_outlines
                            parameter true               default category
                            category name                category stored
                            outlines   .

                        -             Test     initial parameter                database
                            restart    error                        parameter
                                           create_stored_outlines

                            SVRMGRL> show parameter
                            SQL> select name from v$parameter
                                             .    Oracle8.1.5 Reference
                            parameter                                session level
                            test           .

                        CF. system user       “create any outline” privilege        outline
                                user    grant          .




jkspark@hanafos.com                             - 13 -
Oracle8i New Features                                                                                 http://www.ggola.com/




                                 -            Session
                                       category name                                             default
                                            category name                                          .

                      SQL> alter session set create_stored_outlines = true ;
                      Session altered.
                      SQL> select d.dname, e.ename from emp e, dept d
                          2 where e.deptno = d.deptno ;
                      DNAME                      ENAME
                      --------------            ----------
                      RESEARCH12                 SMITH
                      SALES12                    ALLEN
                      ..............
                      ACCOUNTING12 MILLER
                      14 rows selected.………..
                      SQL> alter session set create_stored_outlines = false ;
                      SQL> select * from user_outlines ;
                      NAME                                              CATEGORY USED TIMESTA VERSION
                      SQL_TEXT
                      ----------------------------------------------------------------------------------------------------------------
                      SYS_OUTLINE_0107311031050000 DEFAULT                                   UNUSED 31Jul01 8.1.6.2.0
                      select d.dname, e.ename from emp e, dept d where e.deptno = d.deptno

                      SQL> alter session set create_stored_outlines = cat_emp ;
                      Session altered.
                      SQL> select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno ;
                      ENAME               LOC
                      -------------- ----------
                      SMITH              DALLAS189
                      ALLEN              CHICAGO189
                      ..............
                      MILLER             NEW YORK189
                      14 rows selected.………..
                      SQL> select * from user_outlines ;
                      NAME                                              CATEGORY USED TIMESTA VERSION
                      SQL_TEXT
                      -------------------------------------------------------------------------------- -------------------------------
                      SYS_OUTLINE_0107311031050000 DEFAULT                                   UNUSED 31Jul01 8.1.6.2.0
                      select d.dname, e.ename from emp e, dept d where e.deptno = d.deptno
                      SYS_OUTLINE_0107311026420001 CAT_EMP                                   UNUSED 31Jul01 8.1.6.2.0
                      select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno
                      SYS_OUTLINE_0107311024590000 CAT_EMP                                   UNUSED 31Jul01 8.1.6.2.0
                      select * from user_outlines
                      SQL> alter session set create_stored_outlines = false ;


                                 -             category                                     DEFAULT
                                                                               category
                                                                                  .      outline name
                                                                             system default
                                                 .

                                 -     Outline parameter false                            select * from outlines
                                                                             stored outline                                        .

                                 -                   outline category   shared_pool                    pinning
                                                           execution plan                                 .




jkspark@hanafos.com                                                - 14 -
Oracle8i New Features                                                                                 http://www.ggola.com/




                                 -                                     stored outline                             .

                      SQL> create or replace outline emp_join for category cat_emp
                               on select /*+ FULL(DEPT) */ d.dname, e.ename from emp e, dept d
                               where e.deptno = d.deptno order by 1, 2 ;
                      Outline created.
                      SQL> select * from user_outlines ;
                      NAME                                              CATEGORY USED TIMESTA VERSION
                      SQL_TEXT
                      ----------------------------------------------------------------------------------------------------------------
                      SYS_OUTLINE_0107311031050000 DEFAULT                                   UNUSED 31Jul01 8.1.6.2.0
                      select d.dname, e.ename from emp e, dept d where e.deptno = d.deptno
                      SYS_OUTLINE_0107311026420001 CAT_EMP                                   UNUSED 31Jul01 8.1.6.2.0
                      select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno
                      SYS_OUTLINE_0107311024590000 CAT_EMP                                   UNUSED 31Jul01 8.1.6.2.0
                      select * from user_outlines
                      EMP_JOIN                                           CAT_EMP             UNUSED 31Jul01 8.1.6.2.0
                      select /*+ FULL(DEPT) */ d.dname, e.ename from emp e, dept d
                      where e.deptno = d.deptno order by 1, 2

                                 -     outline name                                              outline        sys
                                                                              name                    .           category
                                                                 .

                                       category                                                       .


                                 Using stored outlines

                                 -     outline                                                  command                          .

                                 SQL> alter session set use_stored_outlines = true or category_name ;

                                 -     create                            category name                                true
                                                      outline                         .

                                 -     Category                 category
                                       default category       text match                                                             .
                                           ,         category      match                          outline
                                       default category        outline                                   outline
                                                .

                                 -     To determine a SQL statement’s execution plan
                                       1. shared pool     matching text and outline category
                                       2. 1             data dictionary    outline query
                                       3. 2                   SQL outline                execution
                                       plan           .
                                       4. 2             normal methods(non-outline)              .

                                 -     ,                              outline        hints     outline
                                 user_outlines                                               user_outline_hints
                                                                                     view
                                           .




jkspark@hanafos.com                                                  - 15 -
Oracle8i New Features                                                       http://www.ggola.com/




                                  Maintaining stored outlines
                                  -   Package ‘OUTLN_PKG’
                                      1. drop_unused : drop unused outline
                                      2. drop_by_cat : drops categories of outlines
                                      3. update_by_cat : rename categories

                                  -   ALTER OUTLINE outline_name command
                                      1. rename to new_outline_name ; (outline name     )
                                      2. rebuild ; (outline execution path       )
                                      3. change category to new_category_name ; (category           )

Database creation automatically   -   Stored outlines in tables in schema OUTLN
            schema OUTLN              1. OL$ : outline name, category, timestamp, statement text
tables outlines           .           2. OL$HINTS : hints for the outlines in OL$
(system tablespace     )
                                  -   Data dictionary view
                                      1. DBA/ALL/USER_OUTLINES
                                      2. DBA/ALL/USER_OUTLINE_HINTS



        DBMS_STATS

                                      This package enables you to generate and manage statistics for
                                      cost-based optimization. The statistics can reside in the data
                                      dictionary or in a table created in the user’s schema. Only
                                      statistics stored in the dictionary itself will have an impact on
                                      the cost-based optimizer. (but cannot gather cluster statistics)

                                  Generating statistics
                                  -   Gathering sub-procedure
                                      1. gather_index_stats : index
                                      2. gather_table_stats : table, column and index
                                      3. gather_schema_stats : all objects in a schema
                                      4. gather_database_stats : all objects in a database

                                  -   usage for table statistic
                                      DBMS_STATS.GATHER_TABLE_STATS (
                                       schema, table, partition, sample size(%), block sample?(or row),
                                       columns, parallelism degree, table and all partitions,
                                       cascade to indexes) ;

                                  -   How can you gather the statistics ?
                                      1. statistics serially or in parallel                        index
                                      statistics     only serially
                                      2. random sampling or computed
                                      3. block sampling faster than row sampling
                                      4. column lists
                                      5. table              index statistics
                                      6. statistics tables can hold statistics to enable you to
                                      experiment with different sets of statistics.




         jkspark@hanafos.com                              - 16 -
Oracle8i New Features                                                        http://www.ggola.com/




                        Moving statistics

                                       scott   emp table                            export
                        file dump                database import                 statistic
                        import        source database target database
                                                                .

                        1.                     table             statistics               .
                             usage : dbms_stats.
                             gather_table_stats(schema, table, partition, sample size(%), block
                             sample?(or row), columns, parallelism degree, table and all partitions,
                             cascade to indexes)
                             meaning : table     statistic            . (index statistics
                                        cascade to indexes TRUE            )
                             example :
                             SQL> exec dbms_stats.gather_table_stats( 'SCOTT', 'EMP',
                             NULL, 20, FALSE, 'FOR ALL COLUMNS', 4, 'DEFAULT',
                             TRUE) ;

                        2.   Statistics           table schema              .
                             usage : dbms_stats.
                             create_stat_table(‘SCOTT’, ’stat_tab_name’, ’tablespace_name’)
                             meaning : data dictionary       statistics export
                             table                   .
                             example :
                             SQL> exec dbms_stats.create_stat_table('SCOTT',
                             'STAT_SCOTT', 'USERS') ;

                        3.   Statistics data          table copy      .
                             usage : dbms_stats.
                             export_table_stats(‘SCOTT’, ‘EMP’, NULL(partition          ),
                             ‘stat_tab_name’, ‘stat_id’(ID    ), TRUE(index stat) ) ;
   Source Database           meaning : statistics           user’s table export       .
                                       table    export backup or copy                    .
                             example :
                             SQL> exec dbms_stats.export_table_stats('SCOTT', 'EMP',
                             NULL, 'STAT_SCOTT', 'Stat 20010731', TRUE) ;
   File dump exp/imp
                        4.               database                   table file dump
            OR               export                   table   import            database
   Database link copy        link         copy                        table ,
                                     stat_scott table             database
                                                          data data dictionary
                                                  .
                             usage : dbms_stat.
   Target Database           import_table_stat (export_table_stas          argument)
                             meaning :            schema table data dictionary
                                      .
                             example :
                             SQL> exec dbms_stats.import_table_stats('SCOTT', 'EMP',
                             NULL, 'STAT_SCOTT', 'STAT 20010731', TRUE) ;




jkspark@hanafos.com                               - 17 -
Oracle8i New Features                                                      http://www.ggola.com/




                        5.                                    user schema                table
                             drop     .
                             usage : dbms_stats.
                             drop_stat_table(‘SCOTT’, ‘stat_tab_name’)
                             meaning :              table drop         .
                             example :
                             SQL> exec dbms_stats.drop_stat_table ('SCOTT',
                             'STAT_SCOTT') ;



Top-N SQL

                             Now Oracle8i supports ordering of views and in-line views.

                        Sorts only the required number of rows

                        -                                    Oracle8i     in-line view
                             order by                                     .

                        -                               Oracle       rownum < 3
                                  2        value      memory                      rows
                                                                 2      value                    .

                        -    Example : order by
                             SQL> select * from
                                 (select empno, deptno, hiredate from emp
                                  order by hiredate desc)
                                 where rownum < 3 ;

                                  EMPNO            DEPTNO HIREDAT
                                   ----------      ---------- -------
                                   7876              20       12Jan83
                                   7788              20       09Dec82

                             SQL> select * from
                                 (select empno, deptno, hiredate from emp)
                                 where rownum < 3 ;

                                  EMPNO            DEPTNO HIREDAT
                                   ----------      ---------- -------
                                   7369              20       17Dec80
                                   7499              30       20Feb81


                        -    Query (searching for the top few values) run considerably
                             faster in Oracle8i.




jkspark@hanafos.com                                - 18 -
Oracle8i New Features                                                          http://www.ggola.com/




ROLLUP and CUBE

                        Aggregate operators

                                     group by       rollup and cube
                        crosstab report                          .

                                     1              2            3               Total
                                              1             2              3              6
                                              1             2              3              6
                            Total             2             4              6             12

                        Rollup operation

                        SQL> select    ,     , sum(year) from emp
                            group by rollup(     ,    );

                        -                  group by      total   grand total
                                .

                                                                       sum(year)

                                                     1                    1
                                                     2                    2
                                                     3                    3
                                                                          6
                                                     1                    1
                                    ………………..
                                    ………………..
                                                                          6
                                    ………………..
                                                                         12


                        -       function data result rows            n types(     )          m
                            status(     ) ROLLUP                         group by                (n X
                            (m+1)) + 1 = ?     rows                           .

                        -                         (2 X (3+1)) + 1 = 9 rows               .




jkspark@hanafos.com                             - 19 -
Oracle8i New Features                                                         http://www.ggola.com/




                        Cube operation

                        SQL> select    ,          , sum(year) from emp
                            group by cube(           ,   )
                            order by     ,             ;
                                                                        sum(year)

                                                      1                   1
                                                      2                   2
              ROLLUP                                  3                   3
                                                                          6
                                                      1                   1
                                                      2                   2
                +                                     3                   3
                                                                          6
              CUBE                                    1                   2
                                                      2                   4
                                                      3                   6
              GRAND                                                      12


                        -       function data result rows          n types(         )        m
                            status(     ) CUBE                     group by                   ((n+1) X
                            (m+1)) + 1 = ?     rows
                                                                                             .

                        -                                                                .
                               , (type + 1) X (status + 1)                              .
                            (2 + 1) X (3 + 1) = 12                  .

                        Grouping function

                        Rollup and cube                            total      value              null
                                .           data value            null
                        null                                           .
                        new function grouping     .

                        -   grouping(column_name)                       decode                          0
                                 value null   1              rollup or cube
                            null    .

                        -         ,                                          .
                            decode(grouping(column),1,’null of total’,’value’)




jkspark@hanafos.com                              - 20 -
Oracle8i New Features                                                            http://www.ggola.com/




TRIM

                             New function trim               ltrim   rtrim              .

                             ANSI               .

                        Using function
                        SQL> select last_name, trim(leading ‘X’ from last_name)
                             as trimmed
                             from emp where last_name like ‘X%’ ;

                        -   TRIM(leading ‘X’ from column) : LTRIM

                        -   TRIM(trailing ‘X’ from column) : RTRIM

                        -   TRIM(both ‘X’ from column) : L + R (default)

                        -   TRIM( ‘X’ from column) : both                        .

                        -   TRIM(last_name) : character
                            space trim characters                            .

                        CF. trim                                       character                 .
                           trim     character       only one character     .



New and Obsolete

                             Obsolete parameter :
                              sort_direct_writes, sort_write_buffers,
                              sort_write_buffer_size, sort_read_fac

                             New parameter :
                               sort_multiblock_read_count
                             this parameter define the number of blocks read from
                             temporary segments during sorts.
                             (db_multiblock_read_count              )




jkspark@hanafos.com                                 - 21 -
Oracle8i New Features                                                  http://www.ggola.com/




3. Summary Management


Materialized Views

                            In general, this will be used for Data Warehouse, Distributed
                            Computing, Mobile Computing

                        Summary and aggregate data

                        -   View view           base table data view
                              , summary and aggregate data(pre-computed)
                                          data segment              view         .

                        -          , expensive and complex joins              view     .

                                Create materialized view day_of_booking as
                                Select bkg_no, sum(amt) as total_amount
                                From booking
                                Where bkg_dt = sysdate
                                Group by bkg_no ;

                        -   M-View                             SQL              base
                            table                       M-View
                                    .(                       query rewrite        )
                            CF. The process of modifying a query to use the view rather
                            than the base table is called a query rewrite.

                        -   Create materialized view is synonym for create snapshot.

                        -   M-View
                            SQL> create materialized view view_name build deferred
                            refresh …. as select …..
                                                “build” clause           M-View
                                                         . Build clause “immediate or
                            deferred” option                      .
                            1. immediate
                            2. deferred refresh                     .
                            CF. build clause                         default “build
                            immediate”       .

                        CF. remote tables                          .

                        CF. M-View        order by clause
                              creation
                        refresh                    . ,                 order by
                        clause M-View query definition                     .
                        query performance                    order by clause
                                   column M-View select list                 column
                                index             recommend     .



jkspark@hanafos.com                           - 22 -
Oracle8i New Features                                                         http://www.ggola.com/




                        Materialized view refresh option

                        Base table                        M-View        base table              sync
                                               .        ‘Refresh’          .

                        -   Complete : Base table
                                        M-View
                                  M-View query
                            data                 .

                        -   Fast : last refresh
                            1. M-View log
                            2.Direct loader log        (direct loads              new rows
                            rowid               M-Views refresh)

                        -   Force :                                                         .
                            complete fast                           .
                            (This is default refresh type.)

                        -   Never : Refresh                   .

                        CF. M-View                      system user                  user          grant
                        ‘create materialized view’ privilege                  .


                        Refresh mode : Refresh                            .

                        -   ON DEMAND
                            Manually DBMS_MVIEW package
                            procedure                   .
                            1 …REFRESH(‘BOOKING’,PARALLELISM => 3);
                               >> specified M-View
                            2 …REFRESH_DEPENDENT(VN_FAIL_CNT, ‘EMP’) ;
                              >> M-Views on based 1       base tables
                                (number_of_failures   out variable    )
                            3 …REFRESH_ALL_MVIEWES ;
                              >> all M-Views

                        -   Automatic Refresh
                            1. ON COMMIT         ( synchronous) : base table
                                   commit                    .
                            2. START WITH-NEXT(asynchronous) : specified time
                                      supported complete mode only. (must initiate job
                            processes)

                        CF. , ON COMMIT              M-View join or aggregate
                        views                    Oracle8.1.5 manual
                                         only join view single table aggregate
                               .(                       Nested M-View
                                join and aggregate view fast on commit
                            )




jkspark@hanafos.com                            - 23 -
Oracle8i New Features                                                       http://www.ggola.com/




                        Materialized view types (UNION              set operation           )

                        -   joins and aggregates
                                  type M-View                       fast refresh
                                     new data direct path method add                    fast
                            refresh                    . The where clause can contain inner
                            equi-joins only.(no outer joins)
                            1. group by      column             select list                  .
                            2. function : sum, count(x), count(*), count(distinct x), avg,
                            variance, stddev, min, max

                        -   single table aggregate
                            M-View log                 fast refresh                 count
                            sum                   count           count or sum
                            group function                     count sum
                                            .       count(*)                               where
                            clause                   .
                            1. function : count, sum, avg, variance, stddev

                        -   only joins : fast refresh
                            1. each detail tables           M-View log
                            2. select list       detail table rowid                       .
                            3. outer join                      inner table          column
                            unique constraint                     .
                            CF. M-View log                  rowid           column
                                     speed up refresh            M-View                 rowid
                            column                index                 recommend       .
                            CF. detail tables rowid                          tables
                                tables DML                     fast refresh                 .


                        Test                               M-View

                        -   Test           Oracle8.1.6.2        M-View
                                             . Oracle            Manual

                                                                     .

                        -       ,                                         Oracle version
                            Oracle9i         fixed                               Test
                                                                          .

                        -   Refresh        complete                                    .
                                                      dbms_mview package              refresh

                                                               M-View
                                                               .

                        -   Refresh fast                   on commit     on demand
                            M-View log                             Test
                                                                     Query Rewrite Usage
                                       .




jkspark@hanafos.com                               - 24 -
Oracle8i New Features                                                         http://www.ggola.com/




                            Example
                            -     complete on demand (joins and aggregates)
                            SQL> sho user
                            USER is "SYSTEM"

                            SQL> grant create materialized view to scott ;
                            Grant succeeded.

                            SQL> conn scott/tiger
                            Connected.

                            SQL> set timing on
                            SQL> set serveroutput on

                            SQL> create materialized view mv_emp_sales refresh complete on demand
                              2 as select e.empno, d.deptno, sum(sal) from emp e, dept d
                              3 where e.deptno = d.deptno group by e.empno, d.deptno ;
                            Materialized view created.
                            Elapsed: 00:00:46.95

                            SQL> select * from mv_emp_sales ;
                                      EMPNO              DEPTNO SUM(SAL)
                                        ---------- ---------- ----------
                                        7369                20 52428800
                            ....................
                                        9022                95       6553600
                            21 rows selected.

EMPNO SAL          update   SQL> update emp set sal = 10 where empno = 9022;
                            256 rows updated.
               .
                            SQL> commit ;                                                      MV creation
                            Commit complete.                                             refresh
                            SQL> select * from mv_emp_sales ;
                                                                                                    .
                                      EMPNO              DEPTNO SUM(SAL)
                                        ---------- ---------- ----------
                                        7369                20 52428800
                            ....................
                                        9022                95       6553600
                            21 rows selected.
Refresh procedure
                            SQL> exec dbms_mview.refresh('MV_EMP_SALES') ;
                            PL/SQL procedure successfully completed.
          .                 Elapsed: 00:00:48.04

                            SQL> select * from mv_emp_sales ;

                                      EMPNO              DEPTNO SUM(SAL)
                                        ---------- ---------- ----------
                                        7369                20 52428800
                            ....................
                                        9022                95         655360
                            21 rows selected.


                            CF. M-View           performance                    M-View
                            partitioning           parallel operation
                                     .




    jkspark@hanafos.com                                   - 25 -
Oracle8i New Features                                                                     http://www.ggola.com/




                                         SQL> update emp set sal = 100 where empno = 9022 ;
                                         256 rows updated.

                                         SQL> commit ;
                                         Commit complete.

refresh_dependent procedure              SQL> declare
                                           2 vn_fail_cnt         BINARY_INTEGER;
                                           3 begin
                                           4 dbms_mview.refresh_dependent(vn_fail_cnt, 'EMP');
         .                                 5 dbms_output.put_line(vn_fail_cnt);
                                           6 end;
                                           7 /
                                         0

                                         PL/SQL procedure successfully completed.
                                         Elapsed: 00:00:47.74

                                         SQL> select * from mv_emp_sales ;

                                                   EMPNO              DEPTNO SUM(SAL)
                                                     ---------- ---------- ----------
                                                     7369                20 52428800
                                         ....................
                                                     9022                95       6553600
                                         21 rows selected.


                                             -    fast on commit (single table aggregate)
                                         SQL> create materialized view log on emp
                                           2 with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno)
                                           3 including new values ;
                                         Materialized view log created.

                                         SQL> create materialized view mv_emp_sales refresh fast on commit
                                           2 as select count(*), empno, sum(sal), count(sal)
                                           3 from emp
             log                   M-      4 group by empno ;
 View                         .   base   Materialized view created.
 table                                   SQL> select * from mv_emp_sales ;
              refresh                        COUNT(*)                 EMPNO SUM(SAL) COUNT(SAL)
 commit                       refresh                ---------- ---------- ---------- ----------
                   data                                256            7369          204800       256
                                         ...........................
                          .                            256            9022           25600       256
                                         21 rows selected.

                                         SQL> update emp set sal = 10 where empno = 9022 ;
                                         256 rows updated.

                                         SQL> commit;
                                         Commit complete.

                                         SQL> select * from mv_emp_sales ;
                                             COUNT(*)                 EMPNO SUM(SAL) COUNT(SAL)
                                                     ---------- ---------- ---------- ----------
                                                       256            7369          204800       256
                                         ...........................
                                                       256            9022             2560      256
                                         21 rows selected.




             jkspark@hanafos.com                                          - 26 -
Oracle8i New Features                                                                  http://www.ggola.com/




                                         -     fast on demand (single table aggregate)

                                      SQL> drop materialized view log on emp ;
                                      Materialized view log dropped.

                                      SQL> drop materialized view mv_emp_sales ;
                                      Materialized view dropped.

                                      SQL> create materialized view log on emp
                                        2 with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno)
                                        3 including new values ;
                                      Materialized view log created.

                                      SQL> create materialized view mv_emp_sales refresh fast on demand
                                        2 as select count(*), empno, sum(sal), count(sal)
                log                     3 from emp
 MV                    . base table     4 group by empno ;
                                      Materialized view created.

 refresh procedure                    SQL> select * from mv_emp_sales ;
              MV
                                          COUNT(*)               EMPNO SUM(SAL) COUNT(SAL)
                                      ---------- ---------- ---------- ----------
 data                       .                       256         7369          204800  256
                                      .........................
                                                    256         9022             2560 256
                                      21 rows selected.

                                      SQL> update emp set sal = 1000 where empno = 9022 ;
                                      256 rows updated.

                                      SQL> commit;
                                      Commit complete.

                                      SQL> exec dbms_mview.refresh('MV_EMP_SALES') ;
                                      PL/SQL procedure successfully completed.

                                      SQL> select * from mv_emp_sales ;

Test         join and                     COUNT(*)               EMPNO SUM(SAL) COUNT(SAL)
                                      ---------- ---------- ---------- ----------
aggregate M-View                                    256         7369          204800 256
      M-View log                      .........................
error      fast refresh                             256         9022          256000 256
                                      21 rows selected.
      refresh
                     data                CF.                   M-View                table
                 .                                prebuilt table M-View         .
                                         query rewrite                  . (start with-next refresh
                                         M-View          query rewrite               )

                                         CF. Nested Materialized Views : M-View        fact(/detail/base)
                                         table        M-View                      user           request
                                                                  Nested Materialized View           .
                                                                            join only M-View base
                                         table         single-table aggregate M-View                   refresh
                                         fast on commit                   join and aggregate M-View
                                         performance                                           .       ,
                                                   space                        .




         jkspark@hanafos.com                                        - 27 -
Oracle8i New Features                                                      http://www.ggola.com/




Query Rewrite

                             M-View            base table
                             performance                                     .
                             Oracle8i M-View                            statement    ‘Query
                             Rewrite’    mechanism                   M-View
                             query                query                                        .

                        Query Rewrite Attributes

                        -   M-View                          index            transparent to
                            applications       .

                        -   Base table             privileges            M-View
                                                                M-View        enable,
                            disable          M-View                   control         .

                        -   Initial parameter : QUERY_REWRITE_ENABLED=TRUE
                            ”QUERY REWRITE” privilege M-View enable                                .
                            DBMS_OLAP package has options to use M-Views

                        CF. Query Rewrite                : grant query rewrite to username ;
                           “global query rewrite” for outside schema
                           “explicit select privilege” for M-View using different schema

                        Usage :
                         create materialized view mview_name
                         tablespace ts_name --> skip         user default tablespace
                         parallel (degree 4) --> option
                         build immediate/deferred --> skip            default immediate
                         refresh complete/fast/force/never --> skip default force
                         on demand/on commit/start with .… next ….
                         enable/disable query rewrite --> query rewrite
                         as select count(*), count(sal), sum(sal) from emp; --> query
                        restriction : join equip only              aggregate
                        operator outermost part                  . (AVG(AVG(x))
                                                 ) sequence, user, sys owner objects,
                        subquery order by, remote table, pl/sql function, having,
                        connect by, inline views, nested subquery, sysdate, rownum,
                        bind variable, raw or long raw                     .

                        case 1) select count(*), count(sal), sum(sal) from emp ; ==>
                                           Oracle                       M-View
                                   mview_name                  execution plan
                                     performance                      .

                        case 2) select /*+ NOREWRITE */ count(),count(sal),sum(sal) from
                        emp ; ==>                Case 1                   norewrite hint
                                 M-View                 base table          execution
                        plan               full table scan              .




jkspark@hanafos.com                                - 28 -
Oracle8i New Features                                                                 http://www.ggola.com/




                                             Example
                                             -    Creation materialized view for query rewrite
                                       SQL> create materialized view mv_emp_sales tablespace users
                                         2 parallel(degree 4) build immediate
start and next time         10           3 refresh complete start with sysdate+1/6/24 next sysdate+1/6/24
                          query          4 enable query rewrite as select e.empno, d.deptno, sum(sal) from emp e, dept d
rewrite       enable                     5 where e.deptno = d.deptno group by e.empno, d.deptno ;
MV                                     Materialized view created.
                                       Elapsed: 00:01:02.80
         user_jobs
last date, next date          10       SQL> select job, what, last_date, next_date from user_jobs ;
                                         JOB WHAT
                                       ----           -----------------------------------------------
     .
                                         243            dbms_refresh.refresh('"SCOTT"."MV_EMP_SALES"');
                                       LAST_DATE                           NEXT_DATE
                                       -----------------                   -----------------
                                       20010802 14:35:31                    20010802 14:45:31
                                       SQL> select sysdate from dual ;
                                       SYSDATE
                                       -----------------
                                       20010802 14:36:41
                                       SQL> select * from mv_emp_sales ;
                                                 EMPNO              DEPTNO SUM(SAL)
         14          36                ---------- ---------- ----------
empno 9022          sal       10                   7369                20 52428800
                                       ................
  update                  .                        9022                95        6553600
MV    query                            21 rows selected.

                                       SQL> update emp set sal = 10 where empno = 9022 ;
          .          user_jobs
                                       256 rows updated.
              next date                SQL> commit ;
                           .           Commit complete.

                                       SQL> select * from mv_emp_sales ;
                                                 EMPNO           DEPTNO SUM(SAL)
                                       ---------- ---------- ----------
                                                   7369             20 52428800
                                       ................
                                                   9022             95  6553600
                    38
                                       21 rows selected.
      refresh                          SQL> select sysdate from dual ;
             . 45                      SYSDATE
refresh                                -----------------
      MV                               20010802 14:38:20
                      ( 1          )
46       40          query             SQL> select sysdate from dual ;
                                       SYSDATE
                     data
                                       -----------------
                      .                20010802 14:46:41
  , refresh
           MV    query                 SQL> select * from mv_emp_sales ;
“no rows selected” return                        EMPNO           DEPTNO SUM(SAL)
           .                           ---------- ---------- ----------
                                                   7369             20 52428800
                                       ................
                                                   9022             95   655360
                                       21 rows selected.




              jkspark@hanafos.com                                       - 29 -
Oracle8i New Features                                                             http://www.ggola.com/




                                      -    Query rewrite
                                 SQL> select e.empno, d.deptno, sum(sal) from emp e, dept d
                                     2 where e.deptno = d.deptno group by e.empno, d.deptno ;
                                           EMPNO           DEPTNO SUM(SAL)
                                 ---------- ---------- ----------
MV             SQL                           7369             20 52428800
                                 ................
                                             9022             95   655360
                     .   ,
                                 21 rows selected.
query rewrite                .
                                 Elapsed: 00:00:00.08
             hint
       query rewrite             SQL> select /*+ NOREWRITE */
                                     2 e.empno, d.deptno, sum(sal) from emp e, dept d
           .                         3 where e.deptno = d.deptno group by e.empno, d.deptno ;
                                           EMPNO           DEPTNO SUM(SAL)
                                 ---------- ---------- ----------
                                             7369             20 52428800
                                 ................
                                             9022             95        655360
                                 21 rows selected.
                                 Elapsed: 00:00:49.50
                                 SQL> explain plan for select e.empno, d.deptno, sum(sal) from emp e, dept d
                                     2 where e.deptno = d.deptno group by e.empno, d.deptno ;
                                 Explained.
                                 SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options
                                     2 ||' '||object_name,1,79) "Plan View"
                                     3 from plan_table
                                     4 start with id=0
                                     5 connect by prior id = parent_id
                                     6 order by id;
                                 Plan View
                                 -------------------------------------------------------------------------------
                                 SELECT STATEMENT
                                     TABLE ACCESS FULL MV_EMP_SALES
                                 SQL> delete plan_table;
              plan
                                 2 rows deleted.
     query rewrite               SQL> commit;
        MV     execution         Commit complete.
plan               hint          SQL> explain plan for select /*+ NOREWRITE */
                                     2 e.empno, d.deptno, sum(sal) from emp e, dept d
execution plan                       3 where e.deptno = d.deptno group by e.empno, d.deptno ;
                     .           Explained.
                                 SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options
                                     2 ||' '||object_name,1,79) "Plan View"
                                     3 from plan_table
                                     4 start with id=0
                                     5 connect by prior id = parent_id
                                     6 order by id;
                                 Plan View
                                 -------------------------------------------------------------------------------
                                 SELECT STATEMENT
                                     SORT GROUP BY
                                         NESTED LOOPS
                                             TABLE ACCESS FULL EMP
                                             INDEX RANGE SCAN XPKDEPT




          jkspark@hanafos.com                                    - 30 -
Oracle8i New Features                                                    http://www.ggola.com/




                        Control Rewrite

                        -   optimizer mode      cost-based only      . (rule base      )

                        -   QUERY_REWRITE_ENABLED : FALSE                 setting       query
                            rewrite                      .          dynamically       instance
                            level(initial parameter) or session level(alter session
                            command)                          .

                        -   QUERY_REWRITE_INTEGRITY : this parameter reset
                            dynamically for instance and session level.
                            1. ENFORCED(default) : consistency
                            query rewrite              . (updated M-view and validated
                            constraints only)
                            2. TRUSTED : All updated M-Views and dimensions and
                            constraints with RELY flag are used for query rewrites.
                            (RELY flag          constraint new features
                                          invalid constraint valid
                                                           )
                            3. STALE_TOLERATED : last DML and relationships(are
                            declared) refresh                all M-Views
                            rewrite             .(data           M-View validate       )

                        CF.    register M-View
                        QUERY_REWRITE_INTEGRITY parameter value
                                         .

                        Support utility & System privileges

                        -   SQL*Loader : Rowid range                M-View
                            reference     table        direct path loading
                            HWMK        data         incremental refresh
                                   .

                        -   Export/Import :
                            1. M-View definition export & import (full mode or user mode)
                            2. MVDATA=Y export & import data in M-Views
                               MVDATA=N table ROWS=N                             .
                               ( ,                 M-View data segment
                            object     )
                            3. MVBUILDDEFERRED=Y
                               export all M-Views definition and created for deferred
                            refresh

                        -   M-Views                    privileges
                            . create materialized view
                            . create/drop/alter any materialized view
                            . query rewrite (enable and disable of own schema)
                            . global query rewrite (enable and disable of in the grantee’s
                            schema for query rewrite)




jkspark@hanafos.com                             - 31 -
Oracle8i New Features                                                    http://www.ggola.com/




                        Registration of an Existing Materialized View

                        -   Data Warehouse system                            ordinary user
                            tables summary and aggregate            data           tables
                                         .      tables                 table
                                                                   build cost
                                     .     ,                    data                  .

                        -        table     Query Rewrite
                            incremental refresh                                      tables
                            M-View                                               .

                        -   M-View                       base table
                            M-View                   .( name table name         )
                            SQL> create materialized view ….name on prebuilt table …

                        -   prebuilt table                   M-View               query
                            rewrite                     parameter query_rewrite_integrity
                                    “TRUSTED”                 set         .

                        -   QUERY_REWRITE_INTEGRITY : (Oracle 8.1.6          )
                            enforced : M-View data relationship
                            query rewrite              .
                            trusted : prebuilt table M-View data and RELY constraint
                            (17 constraints         ) correct     trust     query
                            rewrite              .
                            stale_tolerated : M-View valid            query rewrite
                                    maximum rewrite capability    . ,           query
                            rewrite wrong result                        .
                            CF. Oracle 8.1.5 enforce/no_enforce/use_stale             .

                        -     , prebuilt table M-View       drop                table
                            drop               .

                        Data dictionary for M-Views
                        -   ALL_REFRESH_DEPENDENCIES :
                            dependent or container tables in the current schema

                        -   DBA_MVIEW_AGGREGATES :
                            grouping functions in an aggregated M-Views

                        -   DBA_MVIEW_ANALYSIS : M-Views information

                        -   DBA_MVIEW_DETAIL_RELATIONS :
                            the named detail relations (base(fact) tables information)

                        -   DBA_MVIEW_JOINS : information about the joined columns
                            of base tables

                        -   DBA_MVIEW_KEYS : detail columns information about the
                            relations of DBA_MVIEW_DETAIL_RELATIONS




jkspark@hanafos.com                            - 32 -
Oracle8i New Features                                                     http://www.ggola.com/




Dimension

                               Additional query rewrites are possible if summaries are
                               created at the lowest level of aggregation, supported with
                               dimensions.

                        What is a Dimension ?
                        -     data dictionary structures that define hierarchical relationship
                              between pairs of columns and column sets. based on existing
                              columns(M-View         segment                          )

                        -     dimension optional              highly recommended
                              1. enable additional query rewrite possibilities
                                 (without use of constraints, M-Views            )
                              2. hierarchies(      ) summary                   .
                              3. can be used by OLAP tools (        DBMS_OLAP      )

                        -     level         dimension             .             date
                              month     month quarter quarter          year
                                                 level                          query
                              rewrite                    .
                              CF. create dimension           attribute               level
                                                   level         value          column
                                              .(           “    ”         level
                              “       ”                                 )

                            SQL> conn system/manager
                            Connected.

                            SQL> grant create dimension to dimuser ;
                            Grant succeeded.

                            SQL> conn dimuser/dimuser
                            Connected.

                            SQL> create table emp (
                              2 hiredate       date,
                              3 month            varchar2(2),
                              4 month_name varchar2(10),
                              5 quarter        varchar2(1),
                              6 year            varchar2(4)) ;
                            Table created.

                            SQL> Create dimension emp_dim
                              2 Level hiredate is emp.hiredate
                              3 Level month is emp.month
                              4 Level qtr is emp.quarter
                              5 Level yr is emp.year
                              6 Hierarchy calendar_rollup (
                              7 Hiredate child of
                              8 Month child of
                              9 Qtr child of yr )
                             10 Attribute month determines month_name ;
                            Dimension created.




jkspark@hanafos.com                                 - 33 -
Oracle8i New Features                                                           http://www.ggola.com/




                        -            3                   multiple hierarchies                time
                              dimension                     .
                            SQL> create table sales (
                              2 sal_date        date,
                              3 month             varchar2(2),
                              4 quarter         varchar2(1),
                              5 year             varchar2(4),
                              6 season           varchar2(6),
                              7 week              varchar2(1),
                              8 dayweek_name varchar2(3),
                              9 month_name varchar2(3)) ;

                            Table created.

                            SQL> create dimension sales_dim
                              2 level sal_date is sales.sal_date
                              3 level month        is sales.month
                              4 level quarter is sales.quarter
                              5 level year        is sales.year
                              6 level season      is sales.season
                              7 level week         is sales.week
                              8 hierarchy cal_rollup (
                              9 sal_date child of
                             10 month        child of
                             11 quarter child of
                             12 year )
                             13 hierarchy week_rollup (
                             14 sal_date child of
                             15 week )
                             16 hierarchy season_rollup (
                             17 sal_date child of
                             18 season )
                             19 attribute sal_date determines sales.dayweek_name
                             20 attribute month        determines sales.month_name ;

                            Dimension created.

                            SQL> select * from user_dimensions ;

                            OWNER               DIMENSION_NAME INVALID REVISION
                            ---------- -------------------- - ----------
                            DIMUSER             EMP_DIM                  N 1
                            DIMUSER             SALES_DIM                N 1


                        CF.                   time level, category level, location level
                                             .(    ,           ,              )




jkspark@hanafos.com                                 - 34 -
Oracle8i New Features                                                     http://www.ggola.com/




                        -     Based on multiple tables : 2             table
                              1. Keys and attributes correspond to columns
                              2. All attributes and keys for one level must belong to one table
                              3.           child             columns      FK        define
                                                 .
                                 Create dimension nation_dim
                                   Level goo_cd is goo.goo_cd
                                   Level city_cd is city.city_cd
                                   Level do_cd is dochung.do_cd
                                 Hierarchy nation_analysis (
                                   Goo_cd child of
                                   City_cd child of
                                   Do_cd
                                     Join key goo.city_cd references city.city_cd
                                     Join key city.do_cd references do_cd)
                                 Attribute city_cd determines (city.city_name,
                                           city.city_mayor) ;

                        Query Rewrite Situations

                        -     Exact match : selected columns and join conditions match

                        -     Aggregate rollup : summary grouping “lower than” query
                              grouping

                        -     Aggregate to all : more dimensions in summary

                        -     Summary joinback : a column not in summary, but derivable
                              used by query

                        CF.       exact match                             dimension
                                    query rewrite              .

                        Data dictionary for Dimensions

                        -     DBA_DIMENSIONS : dimension objects

                        -     DBA_DIM_LEVELS : dimension levels

                        -     DBA_DIM_LEVEL_KEY : column and position of dimension
                              level

                        -     DBA_DIM_ATTRIBUTES : relationships between a dimension
                              level and a functionally dependent column

                        -     DBA_DIM_HIERARCHIES : dimension hierarchies

                        -     DBA_DIM_CHILD_OF : hierarchical relationships (a pair of
                              levels in a dimension)

                        -     DBA_DIM_JOIN_KEY : information between two dimension
                              tables




jkspark@hanafos.com                              - 35 -
Oracle8i New Features                                                   http://www.ggola.com/




DBMS_OLAP

                        Verifying relationships in a dimension
                        Satisfy the 1:n relationships along each hierarchy.

                        DBMS_OLAP.VALIDATE_DIMENSION

                        -   Argument : dimension, owner, check rows, check level

                        -               (‘TIME_DIM’, ’SCOTT’, FALSE, TRUE)
                                                      .
                            1. dimension name ‘TIME_DIM’
                            2. dimension owner ‘SCOTT’
                            3. checking all rows
                            4. check that levels are all non-NULL

                        -   3   TURE      : check rows stored by direct path loads
                            4   FALSE       : no check levels

                        -   It will update MVIEW$_EXECPTIONS with type of
                            relationship and rowids of violating rows

                        Evaluate the use of summaries

                        DBMS_OLAP.EVALUATE_UTILIZATION ;

                        -   uses hypothetical workload statistics
                            (                             )

                        -   MVIEW$_EVALUTAIONS                                   .

                        DBMS_OLAP.EVALUATE_UTILIZATION_W ;

                        -   uses workload statistics collected through Oracle Trace in
                            WORK$_IDEAL_MVIEW, WORK$_MVIEW_USAGE

                        -   MVIEW$_EVALUTAIONS                                   .

                        MVIEW$_EVALUTAIONS :

                        -   summary name, storage used by summary in bytes

                        -   frequency of use, rank based on cost-benefit ratio

                        -   cumulative benefit computed by adding the benefit or net
                            reduction factor

                        -   benefit to cost ratio computed as the cumulative benefit to
                            storage in bytes




jkspark@hanafos.com                            - 36 -
Oracle8i New Features                                                      http://www.ggola.com/




                            Obtaining summary recommendations

                            M-Views                                      . (summary advisor)

                            DBMS_OLAP.RECOMMEND_MV_W

                            -   Argument : table, M-Views         bytes
                                maximum, retain M-View list, retention percent(cumulative
                                space this percent threshold          retain        .)

                            -                          (‘SALES’,102400000, NULL, 80)
                                1.           table SALES
                                2. maximum 100M for storing M-view
                                3. retain M-Views
                                4. cumulative space 80%                 .

                            -              MVIEW$_RECOMMENDATIONS
                                                   action                          .

                      Select recommended_action, mview_name, group_by_columns,
                      measures_list
                      From mview$_recommendations ;

                      RECOMM       MVIEW_NAME               GROUP_BY             MEASURE
                      RETAIN       SALES_SUM
                      DROP         GRP_SUM
                      RETAIN       BRANCH_SUM,
                      …..
                      ….
                      CREATE                                EMPNO,PRO_CD        SUM(SALARY)



                            Estimating storage requirements for a summary or M-Views
                            DBMS_OLAP.ESTIMATE_SUMMARY_SIZE (space requirement)

                            -   Argument : statement id(in), query(in), estimated rows(out),
                                estimated bytes(out)

                            -                            (‘TRY1’, ‘select * from emp where
                                dept_id = 7843’, erows, ebytes)
                                1. statement id for explain : TRY1
                                2. query emp
                                3. estimated rows erows return
                                4. estimated bytes    ebytes return

                            -   out argument erows, ebytes
                                            print          storage requirements
                                              .

                            -   Query               query
                                string                                      .




jkspark@hanafos.com                                - 37 -
Oracle8i New Features                                                          http://www.ggola.com/




       4. Indexes and Index-Organized Tables


       Bitmap Index

                                   Improvement

                                   -   The bitmap is compressed before it is stored in the index.

                                   -   compression          : value change            uncompress and
                                       change bitmap and compress                        .

                                   -   ”alter table table_name minimize records_per_block” this
                                       command        block             records
                                       (nominimize                       . This is default)
                                       bitmap index                     compress                         .
                                          ,             empty table     IOT          nested table
                                                                        bitmap index
                                                                  .

                                   -   Local Index                   bitmap index   partition
                                           .

                                   Example

                                   -   bitmap index and normal index
                                SQL> sho user
                                USER is "SCOTT"
                                SQL> select count(*) from emp ;
                                   COUNT(*)
                                ----------
                                      172032

                                SQL> create index xakemp_deptno on emp (deptno) ;
                                Index created.

                                SQL> select sum(bytes)/1024/1024,sum(blocks) from user_extents
                                   2 where segment_name = 'XAKEMP_DEPTNO' ;
                                SUM(BYTES)/1024/1024 SUM(BLOCKS)
                                -------------------- -----------
2.5M          339block                          2.6484375        339

     index     bitmap index     SQL> drop index XAKEMP_DEPTNO ;
                                Index dropped.
             storage
                                SQL> create bitmap index xakemp_deptno on emp (deptno) ;
.           bitmap index        Index created.
    compress
               .                SQL> select sum(bytes)/1024/1024,sum(blocks) from user_extents
                                   2 where segment_name = 'XAKEMP_DEPTNO' ;
                                SUM(BYTES)/1024/1024 SUM(BLOCKS)
0.3M          45block           -------------------- -----------
                                                  .3515625       45



        jkspark@hanafos.com                                 - 38 -
Oracle8i New Features                                                                              http://www.ggola.com/




                                SQL> drop index XAKEMP_DEPTNO ;
                                Index dropped.

                                SQL> alter table emp minimize records_per_block ;
                                Table altered.
Minimize command
                       .        SQL> create bitmap index xakemp_deptno on emp (deptno) ;
           data                 Index created.
compress
                            .   SQL> select sum(bytes)/1024/1024,sum(blocks) from user_extents
                                   2 where segment_name = 'XAKEMP_DEPTNO' ;
                                SUM(BYTES)/1024/1024 SUM(BLOCKS)
                                -------------------- -----------
                                                  .3515625       45



      New Index

                                    Reverse-Key Indexes (Oracle8 New Features                                     )

                                    -     Last leaf block                                                                 .

                                    -        , data                   10, 11, 12, 13, 14….
                                                            delete                         leaf block
                                                                          . (skewed index)
                                          reverse index                  .       alter command
                                                        . (01, 11, 21, 31, 41….                       )

                                    -     cannot support bitmap index and IOT

                                    -     “=”                             index range scan
                                                                           index full scan                            .

                                    -     Example

                                SQL> create index xakemp_empno_rvs on emp (empno) reverse ;
                                Index created.

                                SQL> explain plan for select /*+ INDEX(EMP) */ distinct empno, ename
                                from emp
                                   2 where empno > 7800 and empno < 7900 ;
                                Explained.

                                SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options
                                  2 ||' '||object_name,1,79) "Plan View"
                                  3 from plan_table
                                  4 start with id=0
“=”                               5 connect by prior id = parent_id
             Range Scan           6 order by id;
             Index Full Scan
             .                  Plan View
                                -------------------------------------------------------------------------------
                                SELECT STATEMENT
                                   SORT UNIQUE
                                      TABLE ACCESS BY INDEX ROWID EMP
                                         INDEX FULL SCAN XAKEMP_EMPNO_RVS



      jkspark@hanafos.com                                             - 39 -
Oracle8i New Features                                                                            http://www.ggola.com/




                                  SQL> delete plan_table;
                                  2 rows deleted.
                                  SQL> commit;
                                  Commit complete.

                                  SQL> select /*+ INDEX(EMP) */ distinct empno, ename from emp
                                     2 where empno > 7800 and empno < 7900 ;
                                          EMPNO ENAME
                                  ---------- ----------
                                           7839 KING
                                           7844 TURNER
                                           7876 ADAMS

                                  SQL> alter index xakemp_empno_rvs rebuild noreverse ;
                                  Index altered.

                                  SQL> explain plan for select /*+ INDEX(EMP) */ distinct empno, ename
                                  from emp
                                     2 where empno > 7800 and empno < 7900 ;
                                  Explained.

                                  SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options
                                    2 ||' '||object_name,1,79) "Plan View"
                                    3 from plan_table
                                    4 start with id=0
                                    5 connect by prior id = parent_id
                                    6 order by id;
rebuild                   index
             Range Scan           Plan View
              .                   -------------------------------------------------------------------------------
                                  SELECT STATEMENT
                                     SORT UNIQUE
                                        TABLE ACCESS BY INDEX ROWID EMP
                                           INDEX RANGE SCAN XAKEMP_EMPNO_RVS

                                  SQL> delete plan_table;
                                  2 rows deleted.
                                  SQL> commit;
                                  Commit complete.




          jkspark@hanafos.com                                           - 40 -
Oracle8i New Features                                                                     http://www.ggola.com/




                                          Function-Based Indexes

                                          -   Index                                                 where
                                                                                    dramatic performance
                                                                       .

                                          -       , “ salary – tax “                function based index

                                              select acct_cd from tax_org where (salary – tax) > 100000 ;
                                                                          data
                                                                           .

                                          -   Enabling Function-Based Indexes
                                              alter session set query_rewrite_enabled = TRUE ;
                                              alter session set query_rewrite_integrity = TRUSTED ;

                                          -   Example
                                     SQL> set timing on
                                     SQL> select sum(sal-comm) from emp where (sal-comm) > 3000 ;
                                     SUM(SAL-COMM)
                                     -------------
                                           391577600
                                     Elapsed: 00:00:03.46
Function based index
                                     SQL> create index xakemp_salcnt_fnc on emp ( sal - comm ) ;
                                     Index created.
query rewrite                        SQL> select sum(sal-comm) from emp where (sal-comm) > 3000 ;
                                     SUM(SAL-COMM)
                                     -------------
    .          data                        391577600
        performance                  Elapsed: 00:00:00.55
                                     SQL> alter session set query_rewrite_enabled=false ;
         .
                                     Session altered.
                                     SQL> select sum(sal-comm) from emp where (sal-comm) > 3000 ;
                                     SUM(SAL-COMM)
                                     -------------
                                           391577600
                                     Elapsed: 00:00:03.18


                                          Descending Indexes

                                          -                     order               index
                                                        .

                                          -                     city       city                      index
                                                            ,                   deptno
                                                                  descending index                           sort
                                                                         .

                                          -   Index : create index city_margin_dsc on emp (city asc, (revenue
        index                     order       – cost) desc ) ;
  by clause                       .           Query : select city, deptid, ordid, (revenue – cost) margin
                                              from emp
                                              order by city , margin desc ;




          jkspark@hanafos.com                                              - 41 -
Oracle8i New Features                                                           http://www.ggola.com/




                                   -   Example

                                SQL> select ename, sum(sal-comm) from emp where ename like 'K%'
                                  2 and sal-comm > 3000 group by ename
                                  3 order by 1 asc, 2 desc ;

                                ENAME                SUM(SAL-COMM)
                                ---------- -------------
ename            sal-comm
                                KANG                      39321600
                  index         KIM                      80281600
             . , function       KING                     32768000
based index          index
          order by              Elapsed: 00:00:06.27
                  index
                                SQL> create index xakemp_name_salcnt_desc on emp
                        .
                                  2 (ename asc, (sal - comm) desc) ;
                                Index created.

2       data            order   SQL> select ename, sum(sal-comm) from emp where ename like 'K%'
                                  2 and sal-comm > 3000 group by ename
by desc                           3 order by 1 asc, 2 desc ;
 order by               .  ,
   order by clause       2      ENAME                SUM(SAL-COMM)
             asc       order    ---------- -------------
by 1, 2                         KANG                      39321600
     .                          KIM                      80281600
                                KING                     32768000
                                Elapsed: 00:00:00.94




        Rebuild and compute index

                                   Rebuild and Create Index Online

                                   -   Oracle8i        index rebuild or create          online option
                                            DML                                  .                          lock
                                       time                  DML
                                                                .                                       .

                                   -   Parallel                            rebuild
                                       index    2              space                             .

                                   -   PREPARE : create index structure and place entries in the data
                                       dictionary             lock time           . (very short
                                       locking)

                                   -   BUILD : index rebuild           changes       journal table
                                               . (no locking)

                                   -   MERGE : rebuild index journal table       merge
                                                      .     , journal table
                                                               (commit or rollback
                                             )       table     lock           journal




        jkspark@hanafos.com                                 - 42 -
Oracle8i New Features                                                         http://www.ggola.com/




                               table and index online              .
                               (waiting for transaction and locking for merge)

                           -   Index online        DML     transaction
                               journal table          index            online option
                                                        parallel DML                   ,
                               bitmap/cluster/IOT secondary index                    .

                           -   Index block                  block
                               Oracle8i coalesce command                   coalesces leaf blocks
                               within the same branch of the tree                free block    free
                               lists                 .

                           -   Example

                        SQL> alter index xakemp_name_salcnt_desc rebuild online ;
                        Index altered.

                        SQL> create index xakemp_mgr on emp (mgr) online ;
                        Index created.

                        SQL> alter index XAKEMP_NAME_SALCNT_DESC coalesce ;
                        Index altered.


                           Computing statistics on indexes

                           -   statistics generation        create index and alter index
                               rebuild       analyze                      .
                               create index …… compute statistics ;
                               alter index …….. rebuild compute statistics ;

                           -   non-partitioned index : gather table, column, and index
                               statistics
                               concatenated index : refer only to the first column
                               (index composite           leading column               )
                               partitioned index : only index statistics             .

                           -   Example

                        SQL> alter index xakemp_name_salcnt_desc rebuild compute statistics ;
                        Index altered.

                        SQL> create index xakemp_mgrdept on emp (mgr, deptno)
                          2 compute statistics ;
                        Index created.




                           CF.                                           test      Index build or
                           rebuild    online option         compute statistics option
                                             .

                           CF. rebuild reverse option online option
                           8108 error return       . (… noreverse online ;                      )




jkspark@hanafos.com                                - 43 -
Oracle8i New Features                                                                            http://www.ggola.com/




         Index-Organized Tables

                                             Basic concept           Oracle8 New Features


                                      IOT & Logical ROWIDs(Oracle8i New Features)

                                      -     IOT    index             table          , PK index value +
                                            non-key value                        permanent physical
                                            rowid               . (leaf block row header, key column,
                                            nonkey column                   )             Oracle8
                                            secondary index                        Oracle8i
                                            Logical Rowid concept                                      .
                                            CF. PK index                     rowid                   .
                                                , PK value                   index               .

                                  SQL> create table emp_iot (
                                    2 empno number not null,
                                    3 ename varchar2(10),
                                    4 deptno number,
7.       table     default          5 emp_desc varchar2(20),
organization heap                   6 constraint xpkemp_iot primary key (empno))
8. 1 block     1 row     30%        7 organization index tablespace tools
                    nonkey          8 pctthreshold 30
                                    9 overflow tablespace users ;
column data       overflow
                                  Table created
9. pctthreadshold
data            tablespace        SQL> select segment_name, segment_type, tablespace_name
                   (                2 from user_segments
      user default tablespace       3 where segment_name like ('%IOT%') ;
          .
                                  SEGMENT_NAME                        SEGMENT_TYPE TABLESPACE_NAME
                                  ---------------------------------------------------------------------------------------------
                                  SYS_IOT_OVER_40973 TABLE                                   USERS
                                  XPKEMP_IOT                        INDEX                    TOOLS


                                      -            user_segments view
                                            table name emp_iot segment                                                            .
                                                 , pctthreshold           overflow
                                            SYS_IOT               table type    overflow segment
                                                                    .

                                      -     Secondary Index :
                                            PK column                column           index
                                                      data                ?                    IOT
                                            permanent physical rowid                        index
                                                      physical rowid                         rowid
                                                       .       secondary index   PK values
                                                           8i NF ‘Universal Rowid’ , Urowid
                                            index              .




          jkspark@hanafos.com                                           - 44 -
Oracle8i New Features                                                                     http://www.ggola.com/




                                     -    Data search using secondary index :
                                          Physical Guess : indexing    index statistics
                                          physical rowid                                     physical
                                          rowid access             .
                                          Without guess or after incorrect guess : PK values
                                                    logical rowid access              .
                                          CF. UROWID                    compatible 8.1             .
                                          CF. PL/SQL fully supports the ‘UROWID’ datatype.
                                 SQL> explain plan for select ename from emp_iot
                                   2 where deptno = 10 ;
                                 Explained.

                                 SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options
                                    2 ||' '||object_name,1,79) "Plan View"
                                    3 from plan_table
                                    4 start with id=0
                                    5 connect by prior id = parent_id
                                    6 order by id;
                                 Plan View
                                 -------------------------------------------------------------------------------
                                 SELECT STATEMENT
                                    INDEX FAST FULL SCAN XPKEMP_IOT

                                 SQL> create index xakempiot_deptno on emp_iot (deptno) ;
Secondary index                  Index created.
       execution plan            SQL> explain plan for select ename from emp_iot
               .                   2 where deptno = 10 ;
                                 Explained.

                                 SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options
                                    2 ||' '||object_name,1,79) "Plan View"
                                    3 from plan_table
                                    4 start with id=0
                                    5 connect by prior id = parent_id
                                    6 order by id;
                                 Plan View
                                 -------------------------------------------------------------------------------
                                 SELECT STATEMENT
                                    INDEX UNIQUE SCAN XPKEMP_IOT
                                       INDEX RANGE SCAN XAKEMPIOT_DEPTNO

                                     -    Unchanged Restrictions :
                                          1. must have a primary key
                                          2. cannot use unique constraints               Snapshot
                                          3. cannot be clustered                         M-View
                                          4. cannot contain LONG columns                             .
                                          5. cannot support distribution and replication
                                          6. cannot support object types
                                          7. can contain LOB columns and nested table types(varray), but
                                          only if the table is not partitioned
                                          8. IOT           rowid datatype         (rowid             )
                                          9. (like index rebuild command) can use move command for
                                          reorganizing data(not overflow segment)
                                          CF. IOT PK index rebuild                          secondary
                                          index      rebuild               .




         jkspark@hanafos.com                                       - 45 -
Oracle8i New Features                                                       http://www.ggola.com/




          5. Basic Partition


          HASH Partition

                                          Oracle8     New Features range                range
                                          partition       Oracle8i   range partition
                                          hash partition           .    concept Oracle8
                                                    .

                                                                         tablespace   (ts_emp1 ~ 6)
                                          create tablespace command                          .


                                     Partitioned key            update

                                     -   update command               partition key
                                         (    partition range value ) row movement
                                                 .

                                     -             : alter table table_name ENABLE row movement ;
                                         default value DISABLE                partitioned key update
                                                 ENABLE               setting            .

                                     -   Example

                                  SQL> create table emp_part (
                                    2 EMPNO NUMBER(4) not null,
                                    3 ENAME VARCHAR2(10),
                                    4 JOB VARCHAR2(9),
                                    5 MGR NUMBER(4),
                                    6 HIREDATE DATE,
                                    7 SAL NUMBER(7,2),
                                    8 COMM NUMBER(7,2),
                                    9 DEPTNO NUMBER(2))
                                   10 partition by range (hiredate)
                                   11 ( partition p_emp_1980 values less than
                                   12     (to_date('01-JAN-1981','DD-MON-YYYY')) tablespace ts_emp1,
ts_emp1 ~6              6          13 partition p_emp_1981 values less than
tablespace                         14     (to_date('01-JAN-1982','DD-MON-YYYY')) tablespace ts_emp2,
hiredate      range       6        15 partition p_emp_1982 values less than
                                   16     (to_date('01-JAN-1983','DD-MON-YYYY')) tablespace ts_emp3,
    partition         partition
                                   17 partition p_emp_1983 values less than
table                    emp       18     (to_date('01-JAN-1984','DD-MON-YYYY')) tablespace ts_emp4,
table          data   insert       19 partition p_emp_1984 values less than
     .                             20     (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp5,
                                   21 partition p_emp_1985 values less than
                                   22     (MAXVALUE) tablespace ts_emp6 ) ;
                                  Table created.

                                  SQL> insert into emp_part select * from emp ;
                                  162034 rows created.

                                  SQL> commit ;
                                  Commit complete.



          jkspark@hanafos.com                                 - 46 -
Oracle8i New Features                                                       http://www.ggola.com/




                                  SQL> select distinct(to_char(hiredate, 'YYYY-MM-DD'))
                                     2 from emp_part partition(p_emp_1980) ;
                                  (TO_CHAR(H
Partition    select1              ----------
data     partition                1980-12-17
insert
  .                               SQL> select distinct(to_char(hiredate, 'YYYY-MM-DD'))
                                     2 from emp_part partition(p_emp_1985) ;
                                  (TO_CHAR(H
                                  ----------
                                  1985-10-01

                                  SQL> update emp_part partition(p_emp_1985)
                                    2 set empno = 0, hiredate = to_date('19801231', 'YYYYMMDD')
                                    3 where rownum = 1 ;
                                  update emp_part partition(p_emp_1985)
                                         *
                                  ERROR at line 1:
                                  ORA-14402: updating partition key column would cause a partition change

Partition key         update      SQL> alter table emp_part enable row movement ;
                  enable row      Table altered.
movement            partition
key update                        SQL> update emp_part partition(p_emp_1985)
   select                            2 set empno = 0, hiredate = to_date('19801231', 'YYYYMMDD')
                                     3 where rownum = 1 ;
    .
                                  1 row updated.

                                  SQL> commit ;
                                  Commit complete.

                                  SQL> alter session set nls_date_format = 'YYYYMMDD' ;
                                  Session altered.

                                  SQL> select empno, ename, hiredate from emp_part partition(p_emp_1980)
                                    2 where empno = 0 ;
                                      EMPNO ENAME HIREDATE
                                        ---------- ---------- --------
                                            0 LEE                 19801231


                                     Hash function

                                     -   table data                                       hash function
                                                 partition              . ( , I/O
                                                         )

                                     -   It controls the physical placement of data across a fixed
                                         number of partitions and gives you a highly tunable method of
                                         data placement.

                                     -   Does not support LONG, LONG RAW, ROWID, UROWID,
                                         LOB datatypes

                                     -   Hash partition key       column list   16                    .




           jkspark@hanafos.com                                - 47 -
Oracle8i New Features                                                        http://www.ggola.com/




                                        Hash partition

                                        -            partition        data                             .
                                               , Number of partitions should be a power of 2 (2, 4, 6, …)
                                            (2                            )
                                            CF. test          2                           error
                                                                                  .      ,2
                                                                          data
                                                                          .
                                            CF. 2                  partition        tablespace
                                                          tablespace partition
                                                   .

                                        -   parallel DML        performance                          .

                                        -                 deptno column value                  6
                                            tablespace       12      partition                  data
                                                                               .             tablespace
                                            2      partition                             .

                                     SQL> create table emp_hash_part (
                                       2 EMPNO NUMBER(4) not null,
                                       3 ENAME VARCHAR2(10),
                                       4 JOB VARCHAR2(9),
                                       5 MGR NUMBER(4),
                                       6 HIREDATE         DATE,
                                       7 SAL NUMBER(7,2),COMM NUMBER(7,2),
                                       8 DEPTNO NUMBER(2))
                                       9 storage ( initial 64k next 64k pctincrease 0)
                                      10 partition by hash (deptno) partitions 12
                                      11 store in (ts_emp1, ts_emp2, ts_emp3, ts_emp4, ts_emp5, ts_emp6) ;
                     storage
                                     Table created.
       partition
hash partition           disk        SQL> set pagesize 100
stripping        tablespace          SQL> col table_name for a15
     ,                       .       SQL> col partition_name for a15
                                     SQL> col tablespace_name for a10
                                     SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                                        2 from user_tab_partitions
Hash partition     name                 3 where table_name like '%HASH%'
                 default                4 order by tablespace_name ;
SYS_Pnn                          .   TABLE_NAME                   PARTITION_NAME TABLESPACE
                                     --------------- --------------- ----------
                                     EMP_HASH_PART                 SYS_P19      TS_EMP1
                                     EMP_HASH_PART                 SYS_P13      TS_EMP1
                                     EMP_HASH_PART                 SYS_P14      TS_EMP2
                                     EMP_HASH_PART                 SYS_P20      TS_EMP2
                                     EMP_HASH_PART                 SYS_P15      TS_EMP3
                                     EMP_HASH_PART                 SYS_P21      TS_EMP3
                                     EMP_HASH_PART                 SYS_P16      TS_EMP4
                                     EMP_HASH_PART                 SYS_P22      TS_EMP4
                                     EMP_HASH_PART                 SYS_P17      TS_EMP5
                                     EMP_HASH_PART                 SYS_P23      TS_EMP5
                                     EMP_HASH_PART                 SYS_P18      TS_EMP6
                                     EMP_HASH_PART                 SYS_P24      TS_EMP6
                                     12 rows selected.



           jkspark@hanafos.com                                  - 48 -
Oracle8i New Features                                                         http://www.ggola.com/




                           -   Range partition user                    partition
                               hash partition hash method                      Oracle
                                           data            .(no logical meaning to the users)
                                                     select command                        .
                               select * from PARTITION(part_name) where…….. ;
                               CF.              test          partition             select
                                                                       . , hash function
                                     partition             partition               return
                                                                     .
                        SQL> insert into emp_hash_part select * from emp ;
                        162034 rows created.

                        SQL> commit ;
                        Commit complete.

                        SQL> select count(*) from emp_hash_part partition (SYS_P19) ;
                          COUNT(*)
                          ----------
                              46291

                           -           tablespace    partition                          hash
                               partition      naming                       . Storage   range
                               partition         table level
                               storage            partition and tablespace           .

                        SQL> create table emp_name_hash_part (
                           2 EMPNO NUMBER(4) not null,
                           3 ENAME VARCHAR2(10),
                           4 HIREDATE          DATE,
                           5 DEPTNO NUMBER(2))
                           6 storage (initial 32k)
                           7 partition by hash (hiredate)
                           8 ( partition hp_h1 tablespace ts_emp1,
                           9 partition hp_h2 tablespace ts_emp2,
                          10 partition hp_h3 tablespace ts_emp2)
                        Table created.
                        SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                          2 from user_tab_partitions
                          3 where table_name = 'EMP_NAME_HASH_PART'
                          4 order by tablespace_name ;

                        TABLE_NAME                           PARTITION_NAME   TABLESPACE
                        -------------------- --------------- ----------
                        EMP_NAME_HASH_PART                      HP_H1         TS_EMP1
                        EMP_NAME_HASH_PART                      HP_H2         TS_EMP2
                        EMP_NAME_HASH_PART                      HP_H3         TS_EMP2

                           Partitioned index restriction
                           -   Bitmap index on the partitioned table must be local.

                           -   Global Index range partitioned table only.          , hash
                               partitioned table global index                          .




jkspark@hanafos.com                                 - 49 -
Oracle8i New Features                                                          http://www.ggola.com/




          6. Partition Maintenance


          8i New Maintenance Function

                                            Basic Partition Maintenance     Oracle8 New Features
                                                     .

                                       Add hash partition

                                       -   hash partition
                                           CF.                                       partitioned table
                                                                                                  .

                                       -   partition name and tablespace
                                                    partition name SYS_Pnn                 tablespace
                                           table’s default tablespace            .

                                       CF. Other attributes are always inherited from table-level defaults.
                                          (add partition
                                       table                              )

                                       -   Example
                                  SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                                     2 from user_tab_partitions
                                     3 where table_name = 'EMP_NAME_HASH_PART'
                                     4 order by tablespace_name ;
                                  TABLE_NAME                           PARTITION_NAME TABLESPACE
                                  -------------------- --------------- ----------
                                  EMP_NAME_HASH_PART                      HP_H1       TS_EMP1
                                  EMP_NAME_HASH_PART                      HP_H2       TS_EMP2
                                  EMP_NAME_HASH_PART                      HP_H3       TS_EMP2

                                  SQL> insert into emp_name_hash_part
                                    2 select empno, ename, hiredate, deptno from emp ;
                                  162034 rows created.
Hash function
partition     data                SQL> commit ;
    .        SQL                  Commit complete.
                                  SQL> select count(*) from emp_name_hash_part partition(hp_h1) ;
   partition              alias
                                     COUNT(*)
                                  ----------
  .                                        7718
                                  SQL> select count(*) from emp_name_hash_part partition(hp_h2) ;
                                     COUNT(*)
                                  ----------
                                        115728
                                  SQL> select count(a.empno) from emp_name_hash_part partition(hp_h3) a ;
                                  COUNT(A.EMPNO)
                                  --------------
                                          38588




           jkspark@hanafos.com                                 - 50 -
Oracle8i New Features                                                         http://www.ggola.com/




                                     SQL> alter table emp_name_hash_part add partition ;
                                     Table altered.

                                     SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                                       2 from user_tab_partitions
Partition name         tablespace
                                       3 where table_name = 'EMP_NAME_HASH_PART'
      hash partition                   4 order by tablespace_name ;
   tablespace       user default
tablespace     tools                 TABLE_NAME                           PARTITION_NAME   TABLESPACE
partition name       SYS_P42         -------------------- --------------- ----------
                  .                  EMP_NAME_HASH_PART                      SYS_P42       TOOLS
                                     EMP_NAME_HASH_PART                      HP_H1         TS_EMP1
                                     EMP_NAME_HASH_PART                      HP_H2         TS_EMP2
                                     EMP_NAME_HASH_PART                      HP_H3         TS_EMP2

                                     SQL> select count(*) from emp_name_hash_part partition(hp_h1) ;
                                        COUNT(*)
                                     ----------
                                              7718

                                     SQL> select count(*) from emp_name_hash_part partition(hp_h2) ;
                                        COUNT(*)
                                     ----------
                                             84865
Partition hp_h2             data
                                     SQL> select count(*) from emp_name_hash_part partition(hp_h3) ;
      new partition       sys_p42       COUNT(*)
                                     ----------
        .                                   38588
Data
partition                            SQL> select count(*) from emp_name_hash_part partition(SYS_P42) ;
        .                               COUNT(*)
                                     ----------
                                             30863
                                     SQL> alter table emp_name_hash_part add
                                        2 partition hp_h4 tablespace ts_emp4 ;
                                     Table altered.

                                     SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
Partition name       tablespace        2 from user_tab_partitions
                                       3 where table_name = 'EMP_NAME_HASH_PART'
             new partition             4 order by tablespace_name ;
         .
                                     TABLE_NAME                           PARTITION_NAME   TABLESPACE
                                     -------------------- --------------- ----------
                                     EMP_NAME_HASH_PART                      SYS_P42       TOOLS
                                     EMP_NAME_HASH_PART                      HP_H1         TS_EMP1
                                     EMP_NAME_HASH_PART                      HP_H2         TS_EMP2
                                     EMP_NAME_HASH_PART                      HP_H3         TS_EMP2
                                     EMP_NAME_HASH_PART                      HP_H4         TS_EMP4




             jkspark@hanafos.com                                 - 51 -
Oracle8i New Features                                                             http://www.ggola.com/




                                       SQL> select count(*) from emp_name_hash_part partition(hp_h1) ;
                                          COUNT(*)
                                       ----------
                                                  0

                                       SQL> select count(*) from emp_name_hash_part partition(hp_h2) ;
                                          COUNT(*)
                                       ----------
                                              84865
Partition
data               hp_h1               SQL> select count(*) from emp_name_hash_part partition(hp_h3) ;
                                          COUNT(*)
hp_h4
                                       ----------
            . Hash function                   38588

                                       SQL> select count(*) from emp_name_hash_part partition(SYS_P42) ;
  .                                       COUNT(*)
                                       ----------
                                              30863

                                       SQL> select count(*) from emp_name_hash_part partition(hp_h4) ;
                                          COUNT(*)
                                       ----------
                                                7718

                                            -     parallel                       partition                     data
                                                  redistribute                                       .
                                                            data                      overhead
                                                            partition                                       partition
                                                            redistribution             .

                                            -             , data skew                        current partition
                                                  2             hash partition                         .

                                            -     Index       add partition                      .

                                            CF. , 2        hash partition     1                      data
                                            distribution rate 1:1        2:1:1               .          ,
                                                       2                    1:1:1:1                   .

                                            CF.       test                data         hash function

                                                                    .




               jkspark@hanafos.com                                      - 52 -
Oracle8i New Features                                                            http://www.ggola.com/




                                          Merge partition

                                          -   Oracle8                                       partition
                                              merge                   .    ,                        .

                                          -   Range partition                           partition
                                              merge               . (hash partition or IOT       )

                                          -   new tablespace and storage                             table
                                              default         .

                                          -       partition          partition              tablespace
                                                                             partition                   new data
                                              segment                .

                                          CF. new partition segment                          partition
                                          drop                                 tablespace
                                                     data                           .

                                          -   The new index is placed in the default tablespace specified at
                                              the index level. (merge   partition index unusable             )
                                    SQL> create index xakemp_part_hdt on emp_part (hiredate) local ;
                                    Index created.

                                    SQL> select index_name, partition_name, tablespace_name
                                      2 from user_ind_partitions
                                      3 where index_name = 'XAKEMP_PART_HDT'
                                      4 order by tablespace_name ;

                                    INDEX_NAME                      PARTITION_NAME TABLESPACE
                                    ------------------------------ --------------- ----------
                                    XAKEMP_PART_HDT                           P_EMP_1980      TS_EMP1
                                    XAKEMP_PART_HDT                           P_EMP_1981      TS_EMP2
                                    XAKEMP_PART_HDT                           P_EMP_1982      TS_EMP3
                                    XAKEMP_PART_HDT                           P_EMP_1983      TS_EMP4
Test          tablespace
                                    XAKEMP_PART_HDT                           P_EMP_1984      TS_EMP5
              local index
                                    XAKEMP_PART_HDT                           P_EMP_1985      TS_EMP6
        table    index partition
                        table       SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
partition             tablespace      2 from user_tab_partitions
                                      3 where table_name = 'EMP_PART'
                      .               4 order by tablespace_name ;

                                    TABLE_NAME                           PARTITION_NAME TABLESPACE
                                    -------------------- --------------- ----------
                                    EMP_PART                           P_EMP_1980     TS_EMP1
                                    EMP_PART                           P_EMP_1981     TS_EMP2
                                    EMP_PART                           P_EMP_1982     TS_EMP3
                                    EMP_PART                           P_EMP_1983     TS_EMP4
                                    EMP_PART                           P_EMP_1984     TS_EMP5
                                    EMP_PART                           P_EMP_1985     TS_EMP6




             jkspark@hanafos.com                                  - 53 -
Oracle8i New Features                                                          http://www.ggola.com/




                                         SQL> alter table emp_part merge partitions p_emp_1980, p_emp_1982
                                            2 into partition p_emp_1980_2 ;
            (adjacent)                   alter table emp_part merge partitions p_emp_1980, p_emp_1982
partition         merge                                                                *
                                         ERROR at line 1:
                                         ORA-14274: partitions being merged are not adjacent

                                         SQL> alter table emp_part merge partitions p_emp_1980, p_emp_1981
                                           2 into partition p_emp_1980_1 ;
                                         Table altered.

          partition         merge        SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                                            2 from user_tab_partitions
                                            3 where table_name = 'EMP_PART'
                                            4 order by tablespace_name ;
        user default tablespace          TABLE_NAME                           PARTITION_NAME TABLESPACE
                                         -------------------- --------------- ----------
             .                           EMP_PART                           P_EMP_1980_1   TOOLS
                                         EMP_PART                           P_EMP_1982     TS_EMP3
                                         EMP_PART                           P_EMP_1983     TS_EMP4
                                         EMP_PART                           P_EMP_1984     TS_EMP5
                                         EMP_PART                           P_EMP_1985     TS_EMP6

                                         SQL> alter table emp_part merge partitions p_emp_1983, p_emp_1984
                                           2 into partition p_emp_1983_4 tablespace ts_emp2
                                           3 storage ( initial 64k next 64k pctincrease 0 ) ;
                                         Table altered.

Partition merge                          SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                             new           2 from user_tab_partitions
merge partition                            3 where table_name = 'EMP_PART'
 .                                         4 order by tablespace_name ;

                                         TABLE_NAME                           PARTITION_NAME TABLESPACE
                                         -------------------- --------------- ----------
                                         EMP_PART                           P_EMP_1980_1   TOOLS
                                         EMP_PART                           P_EMP_1983_4   TS_EMP2
                                         EMP_PART                           P_EMP_1982     TS_EMP3
                                         EMP_PART                           P_EMP_1985     TS_EMP6

                                         SQL> select index_name, partition_name, tablespace_name
                                           2 from user_ind_partitions
                                           3 where index_name = 'XAKEMP_PART_HDT'
Local index               table            4 order by tablespace_name ;
merge
                                         SQL> select index_name, partition_name, tablespace_name, status
                                   .
                                           2 from user_ind_partitions
                          Index            3 where index_name = 'XAKEMP_PART_HDT'
partition                unusable          4 order by tablespace_name ;
                 .         rebuild
    .                                    INDEX_NAME PARTITION_NAME TABLESPACE STATUS
                                         ------------------------------ --------------- ---------- --------
                                         XAKEMP_PART_HDT P_EMP_1980_1                               TOOLS   UNUSABLE
                                         XAKEMP_PART_HDT P_EMP_1983_4                               TS_EMP2 UNUSABLE
                                         XAKEMP_PART_HDT P_EMP_1982                                 TS_EMP3 USABLE
                                         XAKEMP_PART_HDT P_EMP_1985                                 TS_EMP6 USABLE




                 jkspark@hanafos.com                                   - 54 -
Oracle8i New Features                                                           http://www.ggola.com/




                                     SQL> alter index xakemp_part_hdt rebuild partition
                                       2 p_emp_1980_1 tablespace ts_emp1 ;
                                     Index altered.

                                     SQL> select index_name, partition_name, tablespace_name, status
                                       2 from user_ind_partitions
Rebuild partition command              3 where index_name = 'XAKEMP_PART_HDT'
    index                              4 order by tablespace_name ;

                                     INDEX_NAME                      PARTITION_NAME TABLESPACE STATUS
                                     ------------------------ --------------- ---------- --------
                                     XAKEMP_PART_HDT P_EMP_1980_1                               TS_EMP1 USABLE
                                     XAKEMP_PART_HDT P_EMP_1983_4                               TS_EMP2 UNUSABLE
                                     XAKEMP_PART_HDT P_EMP_1982                                 TS_EMP3 USABLE
                                     XAKEMP_PART_HDT P_EMP_1985                                 TS_EMP6 USABLE

                                     SQL> alter table emp_part modify partition p_emp_1983_4
                                       2 rebuild unusable local indexes ;
                                     Table altered.

                                     SQL> select index_name, partition_name, tablespace_name, status
                                       2 from user_ind_partitions
Modify partition command               3 where index_name = 'XAKEMP_PART_HDT'
    index                              4 order by tablespace_name ;

                                     INDEX_NAME                       PARTITION_NAME TABLESPACE STATUS
                                     ------------------------ --------------- ---------- --------
                                     XAKEMP_PART_HDT P_EMP_1980_1                                 TS_EMP1 USABLE
                                     XAKEMP_PART_HDT P_EMP_1983_4                                 TS_EMP2 USABLE
                                     XAKEMP_PART_HDT P_EMP_1982                                   TS_EMP3 USABLE
                                     XAKEMP_PART_HDT P_EMP_1985                                   TS_EMP6 USABLE

                                          Hash partition coalesce

                                          -   hash partition                 range partition   merge
                                              operation                             . (Removes a single hash
                                              partition and redistributes the data)

                                          -   Hash function          dissolution       partition
                                              drop and redistribution                    .(parallel           )

                                          -   Merge                            local index    rebuild              .
                                     SQL> create index xakempname_hash_hdt
                                        2 on emp_name_hash_part (hiredate) local ;
                                     Index created.
                                     SQL> select index_name, partition_name, tablespace_name, status
Test           local index              2 from user_ind_partitions
       index status                     3 where index_name = 'XAKEMPNAME_HASH_HDT'
                                        4 order by tablespace_name ;
                                     INDEX_NAME                       PARTITION_NAME TABLESPACE STATUS
                                     ------------------------------ --------------- ---------- --------
                                     XAKEMPNAME_HASH_HDT SYS_P42                                 TOOLS    USABLE
                                     XAKEMPNAME_HASH_HDT HP_H1                                    TS_EMP1 USABLE
                                     XAKEMPNAME_HASH_HDT HP_H2                                    TS_EMP2 USABLE
                                     XAKEMPNAME_HASH_HDT HP_H3                                    TS_EMP2 USABLE
                                     XAKEMPNAME_HASH_HDT HP_H4                                    TS_EMP4 USABLE



             jkspark@hanafos.com                                   - 55 -
Oracle8i New Features                                                            http://www.ggola.com/




                                    SQL> alter table emp_name_hash_part add
                                       2 partition hp_h5 tablespace ts_emp5 ;
                                    Table altered.
                                    SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
                                       2 from user_tab_partitions
                                       3 where table_name = 'EMP_NAME_HASH_PART'
                                       4 order by tablespace_name ;
                                    TABLE_NAME                           PARTITION_NAME TABLESPACE
                                    -------------------- --------------- ----------
Hash partition     hp_h5            EMP_NAME_HASH_PART                      SYS_P42     TOOLS
partition                           EMP_NAME_HASH_PART                      HP_H1       TS_EMP1
   coalesce command                 EMP_NAME_HASH_PART                      HP_H2       TS_EMP2
hp_h5 partition                     EMP_NAME_HASH_PART                      HP_H3       TS_EMP2
            . , hash function       EMP_NAME_HASH_PART                      HP_H4       TS_EMP4
          dissolution               EMP_NAME_HASH_PART                      HP_H5       TS_EMP5
partition     hp_h5
                                    SQL> alter table emp_name_hash_part coalesce partition ;
hp_h2 index partition               Table altered.
unusable                   data     SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME
   redistribution     hp_h2            2 from user_tab_partitions
                         .             3 where table_name = 'EMP_NAME_HASH_PART'
                                       4 order by tablespace_name ;
                                    TABLE_NAME                           PARTITION_NAME TABLESPACE
                                    -------------------- --------------- ----------
                                    EMP_NAME_HASH_PART                      SYS_P42     TOOLS
                                    EMP_NAME_HASH_PART                      HP_H1       TS_EMP1
                                    EMP_NAME_HASH_PART                      HP_H2       TS_EMP2
                                    EMP_NAME_HASH_PART                      HP_H3       TS_EMP2
                                    EMP_NAME_HASH_PART                      HP_H4       TS_EMP4

                                    SQL> select index_name, partition_name, tablespace_name, status
                                       2 from user_ind_partitions
                                       3 where index_name = 'XAKEMPNAME_HASH_HDT'
                                       4 order by tablespace_name ;
                                    INDEX_NAME                       PARTITION_NAME TABLESPACE STATUS
                                    ------------------------------ --------------- ---------- --------
                                    XAKEMPNAME_HASH_HDT                          SYS_P42          TOOLS    USABLE
                                    XAKEMPNAME_HASH_HDT                          HP_H1            TS_EMP1  USABLE
                                    XAKEMPNAME_HASH_HDT                          HP_H2 TS_EMP2            UNUSABLE
                                    XAKEMPNAME_HASH_HDT                          HP_H3            TS_EMP2  USABLE
                                    XAKEMPNAME_HASH_HDT                          HP_H4            TS_EMP4  USABLE

                                    SQL> alter index xakempname_hash_hdt rebuild partition hp_h2 ;
                                    Index altered.
                                    SQL> select index_name, partition_name, tablespace_name, status
                                      2 from user_ind_partitions
Rebuild          hp_h2 index          3 where index_name = 'XAKEMPNAME_HASH_HDT'
partition                             4 order by tablespace_name ;

                                    INDEX_NAME                       PARTITION_NAME TABLESPACE STATUS
                                    ------------------------------ --------------- ---------- --------
                                    XAKEMPNAME_HASH_HDT SYS_P42                                TOOLS    USABLE
                                    XAKEMPNAME_HASH_HDT HP_H1                                  TS_EMP1  USABLE
                                    XAKEMPNAME_HASH_HDT HP_H2                                  TS_EMP2  USABLE
                                    XAKEMPNAME_HASH_HDT HP_H3                                  TS_EMP2  USABLE
                                    XAKEMPNAME_HASH_HDT HP_H4                                   TS_EMP4  USABLE




            jkspark@hanafos.com                                    - 56 -
Oracle8i New Features                                                                  http://www.ggola.com/




                                             General operation

                                             -   Oracle8                                                           .

                                       SQL> alter table emp_part rename partition p_emp_1983_4 to p_emp_old ;
                                       Table altered.
Partition rename : table, index
                                       SQL> alter index xakempname_hash_hdt rename
              .
                                         2 partition SYS_P42 to hp_h5 ;
                                       Index altered.

Move partition : partition             SQL> alter table emp_part move partition p_emp_1980_1
    tablespace                           2 tablespace ts_emp1 ;
                                       Table altered.
      .
                                       SQL> alter table emp_part add partition p_emp_1986
                                          2 values less than
Add partition : hash partition            3 (to_date('01-JAN-1987','DD-MON-YYYY')) tablespace ts_emp1 ;
        range partition                alter table emp_part add partition p_emp_1986
    range value                                                                  *
                                       ERROR at line 1:
                                       ORA-14074: partition bound must collate higher than that of the last partition
partition
  .                                    SQL> alter table emp_part split partition p_emp_1985
                     highest             2 at (to_date('01-JAN-1986','DD-MON-YYYY'))
partition  range                         3 into ( partition p_emp_1985 tablespace ts_emp4,
maxvalue              error              4         partition p_emp_1986 tablespace ts_emp5) ;
return
split command                          Table altered.
                               .
                                       SQL> set long 2000
                                       SQL> select table_name, partition_name, high_value
                                         2 from user_tab_partitions
                                         3 where table_name = 'EMP_PART'
                                         4 order by 2 ;

                                       TABLE_NAME                  PARTITION_NAME HIGH_VALUE
Split                                  ----------------------------------------------------------------
p_emp_1986      range                  EMP_PART               P_EMP_1980_1              TO_DATE('1982-01-01 00:00:00'...)
                                       EMP_PART               P_EMP_1982                TO_DATE('1983-01-01 00:00:00'...)
maxvalue
                                       EMP_PART               P_EMP_OLD                 TO_DATE('1985-01-01 00:00:00'...)
     .                                 EMP_PART               P_EMP_1985                TO_DATE('1986-01-01 00:00:00'...)
                                       EMP_PART               P_EMP_1986                MAXVALUE

                                       SQL> select index_name, partition_name, status from user_ind_partitions
                                         2 where INDEX_NAME = 'XAKEMP_PART_HDT' ;
P_EMP_OLD       rename
local index p_emp_1983_4               INDEX_NAME                   PARTITION_NAME STATUS
status                             .   --------------- --------------- --------
                                       XAKEMP_PART_HDT P_EMP_1983_4                USABLE
                                       XAKEMP_PART_HDT P_EMP_1982                 USABLE
                                       XAKEMP_PART_HDT P_EMP_1980_1 UNUSABLE
Move or Split command                  XAKEMP_PART_HDT P_EMP_1985                 UNUSABLE
          local index                  XAKEMP_PART_HDT P_EMP_1986                 USABLE
unusable           .




            jkspark@hanafos.com                                        - 57 -
Oracle8i New Features                                                           http://www.ggola.com/




                                     SQL> alter table emp_part drop partition p_emp_old ;
                                     Table altered.
Drop partition : table partition
   drop              local index     SQL> select index_name, partition_name, status from user_ind_partitions
   p_emp_1983_4        drop            2 where INDEX_NAME = 'XAKEMP_PART_HDT' ;
    . Hash partitioned table
                                     INDEX_NAME                   PARTITION_NAME   STATUS
                         .
                                     --------------- --------------- --------
                                     XAKEMP_PART_HDT P_EMP_1982                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1980_1                  UNUSABLE
                                     XAKEMP_PART_HDT P_EMP_1985                    UNUSABLE
Index partition     drop             XAKEMP_PART_HDT P_EMP_1986                    USABLE
error    return         . ,
table partition drop       local     SQL> alter index xakemp_part_hdt drop partition p_emp_1980_1 ;
index partition      drop            alter index xakemp_part_hdt drop partition p_emp_1980_1
     .       global index                            *
   drop index partition              ERROR at line 1:
                                     ORA-14076: DROP/SPLIT PARTITION may not be applied to a LOCAL
                       highest
                                     index partition
partition     drop             .
                                     SQL> alter table emp_part modify partition p_emp_1986
                                       2 storage ( next 1m ) ;
                                     Table altered.
Modify partition : table or
index partition     storage          SQL> alter index xakemp_part_hdt modify partition p_emp_1980_1
                                       2 storage ( next 1m ) ;
               .
                                     Index altered.
  , index           global or
local partitioned index              SQL> alter index xakempname_hash_hdt modify partition hp_h5
               .                        2 storage ( next 1m ) ;
                                     alter index xakempname_hash_hdt modify partition hp_h5
Hash partition :                                                                             *
        hash partition               ERROR at line 1:
storage    table level               ORA-14192: cannot modify physical index attributes of a Hash index
          modify command             partition
         error    return .


                                          Modify default attributes

                                          -    Table or index default attribute
                                                          partition      attribute                         .

                                          -      ,         partition
                                               partition explicitly          storage   attribute
                                                     default attribute      override    .

                                          -                  manual
                                                                 hash partitioned table            index default
                                               attribute    tablespace
                                                     test     storage clause Oracle8.1.6.2
                                                                       .




             jkspark@hanafos.com                                   - 58 -
Oracle8i New Features                                                          http://www.ggola.com/




                             -
                                  table
                                  table
                                                                                  .
                        SQL> drop table emp_part ;
                        Table dropped.

                        SQL> create table emp_part (
                          2 EMPNO NUMBER(4) not null,
                          3 ENAME VARCHAR2(10),
                          4 JOB VARCHAR2(9),
                          5 MGR NUMBER(4),
                          6 HIREDATE          DATE,
                          7 SAL NUMBER(7,2),
                          8 COMM NUMBER(7,2),
                          9 DEPTNO NUMBER(2))
                         10 partition by range (hiredate)
                         11 ( partition p_emp_1980 values less than
                         12     (to_date('01-JAN-1981','DD-MON-YYYY')) tablespace ts_emp1,
                         13 partition p_emp_1981 values less than
                         14     (to_date('01-JAN-1982','DD-MON-YYYY')) tablespace ts_emp2,
                         15 partition p_emp_1982 values less than
                         16     (to_date('01-JAN-1983','DD-MON-YYYY')) tablespace ts_emp3,
                         17 partition p_emp_1983 values less than
                         18     (to_date('01-JAN-1984','DD-MON-YYYY')) tablespace ts_emp4,
                         19 partition p_emp_1984 values less than
                         20     (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp5,
                         21 partition p_emp_1985 values less than
                         22     (MAXVALUE) tablespace ts_emp6 ) ;
                        Table created.

                        SQL> create index xakemp_part_hdt on emp_part (hiredate) local ;
                        Index created.

                        SQL> drop table emp_name_hash_part     ;
                        Table dropped.

                        SQL> create table emp_name_hash_part (
                          2 EMPNO NUMBER(4) not null,
                          3 ENAME VARCHAR2(10),
                          4 HIREDATE          DATE,
                          5 DEPTNO NUMBER(2))
                          6 storage (initial 32k)
                          7 partition by hash (hiredate)
                          8 ( partition hp_h1 tablespace ts_emp1,
                          9 partition hp_h2 tablespace ts_emp2,
                         10 partition hp_h3 tablespace ts_emp3)
                        Table created.

                        SQL> create index xakempname_hash_hdt
                          2 on emp_name_hash_part (hiredate) local ;
                        Index created.

                        SQL> break on table_name




jkspark@hanafos.com                                   - 59 -
Oracle8i New Features                                                                         http://www.ggola.com/




                                           -                  table      attribute                         modify
                                                                                        .
                                    SQL> select table_name, partition_name, max_extent
                                      2 from user_tab_partitions
                                      3 where table_name in ('EMP_PART', 'EMP_NAME_HASH_PART')
                                      4 order by 1 ;

                                    TABLE_NAME                         PARTITION_NAME MAX_EXTENT
                                    -------------------- --------------- ------------------------------------------------
                                    EMP_NAME_HASH_PART                        HP_H2                               505
                                                                               HP_H3                               505
                                                                               HP_H1                               505
                                    EMP_PART                                   P_EMP_1981                          505
                                                                               P_EMP_1982                          505
                                                                               P_EMP_1980                          505
                                                                               P_EMP_1985                          505
                                                                               P_EMP_1983                          505
                                                                               P_EMP_1984                          505

                                    SQL> alter table emp_part modify default attributes
                                      2 storage ( maxextents 1024 ) ;
Table    default attribute          Table altered.
        maxextents      1024
          .                         SQL> alter table emp_name_hash_part modify default attributes
                                      2 storage ( maxextents 1024 ) ;
                                    Table altered.

                                    SQL> select table_name, partition_name, max_extent
                                      2 from user_tab_partitions
                                      3 where table_name in ('EMP_PART', 'EMP_NAME_HASH_PART')
                                      4 order by 1 ;

                                    TABLE_NAME                           PARTITION_NAME               MAX_EXTENT
                                    -------------------- --------------- ----------
                                    EMP_NAME_HASH_PART                         HP_H2                               505
                                                                                HP_H3                              505
     partition                                                                  HP_H1                              505
max extent                          EMP_PART                                    P_EMP_1981                          505
   .(       505                )                                                P_EMP_1982                          505
                                                                                P_EMP_1980                          505
                                                                                P_EMP_1985                          505
                                                                                P_EMP_1983                          505
                                                                                P_EMP_1984                          505

                                    SQL> alter table emp_part split partition p_emp_1985
                                      2 at (to_date('01-JAN-1987','DD-MON-YYYY'))
                                      3 into ( partition p_emp_1985 tablespace ts_emp1,
                                      4            partition p_emp_1987 tablespace ts_emp2) ;
                                    Table altered.


                                           -    emp_part              p_emp_1985 partition
                                                       .




             jkspark@hanafos.com                                          - 60 -
Oracle8i New Features                                                            http://www.ggola.com/




                                    SQL> select table_name, partition_name, max_extent
                                      2 from user_tab_partitions
Split command                         3 where table_name = 'EMP_PART';
partition
                                    TABLE_NAME                           PARTITION_NAME   MAX_EXTENT
           default attribute        -------------------- --------------- ----------
                  . , split         EMP_PART                        P_EMP_1981             505
        partition   new                                             P_EMP_1982             505
partition                                                           P_EMP_1983             505
             .                                                      P_EMP_1984             505
                                                                    P_EMP_1985             505
                                                                    P_EMP_1980             505
                                                                    P_EMP_1986             505

                                    SQL> alter table emp_part drop partition p_emp_1986 ;
                                    Table altered.
Maxvalue          partition
drop                 new            SQL> alter table emp_part add partition p_emp_1986
partition             hash            2 values less than ( maxvalue ) tablespace ts_emp6 ;
partitioned table    add            Table altered.
partition         new
partition              .            SQL> alter table emp_name_hash_part add partition ;
                                    Table altered.

                                    SQL> select table_name, partition_name, max_extent
                                      2 from user_tab_partitions
                                      3 where table_name in ('EMP_PART', 'EMP_NAME_HASH_PART')
                                      4 order by 1 ;

                                    TABLE_NAME                           PARTITION_NAME   MAX_EXTENT
                                    -------------------- --------------- ----------
                                    EMP_NAME_HASH_PART                      HP_H2                 505
                                                                             HP_H3                505
                                                                             SYS_P47             1024
              partition                                                      HP_H1                505
default attribute                   EMP_PART                                 P_EMP_1981            505
                                                                             P_EMP_1982            505
                    .
                                                                             P_EMP_1986           1024
                                                                             P_EMP_1980            505
                                                                             P_EMP_1985            505
                                                                             P_EMP_1983            505
                                                                             P_EMP_1984            505




             jkspark@hanafos.com                                  - 61 -
Oracle8i New Features                                                                 http://www.ggola.com/




                                 -              index             default attribute      test      extent
                                                                                 .

                                 -                           hash partitioned index
                                                                  .
                           SQL> break on index_name
                           SQL> select index_name, partition_name, next_extent
                             2 from user_ind_partitions
                             3 where index_name in
                             4 ('XAKEMP_PART_HDT','XAKEMPNAME_HASH_HDT')
                             5 order by 1 ;

                           INDEX_NAME                          PARTITION_NAME NEXT_EXTENT
                           ------------------------------ --------------- -----------
                           XAKEMPNAME_HASH_HDT                            HP_H1       40960
                                                                          HP_H2       40960
                                                                          HP_H3       40960
                                                                          SYS_P47     40960
                           XAKEMP_PART_HDT                               P_EMP_1981   40960
                                                                          P_EMP_1982  40960
                                                                          P_EMP_1980  40960
                                                                          P_EMP_1985  40960
                                                                          P_EMP_1983  40960
                                                                          P_EMP_1984  40960
                                                                          P_EMP_1986  40960

                           SQL> alter index xakemp_part_hdt modify default attributes
                             2 maxtrans 10 storage ( next 5M ) ;
       index partition     Index altered.
default attribute
.                          SQL> alter index xakempname_hash_hdt modify default attributes
                             2 maxtrans 10 storage ( next 5M ) ;
                           Index altered.

                           SQL> select index_name, partition_name, next_extent
                             2 from user_ind_partitions
                             3 where index_name in
                             4 ('XAKEMP_PART_HDT','XAKEMPNAME_HASH_HDT')
                             5 order by 1 ;

                           INDEX_NAME                            PARTITION_NAME         NEXT_EXTENT
                           ------------------------------ --------------- -----------
                           XAKEMPNAME_HASH_HDT                            HP_H1                  40960
                                                                          HP_H2                  40960
  partition                                                               HP_H3                  40960
        attribute                                                         SYS_P47                40960
              .            XAKEMP_PART_HDT                               P_EMP_1981              40960
                                                                          P_EMP_1982             40960
                                                                          P_EMP_1980             40960
                                                                          P_EMP_1985             40960
                                                                          P_EMP_1983             40960
                                                                          P_EMP_1984             40960
                                                                          P_EMP_1986             40960




   jkspark@hanafos.com                                       - 62 -
Oracle8i New Features                                                                http://www.ggola.com/




                                    SQL> alter table emp_part drop partition p_emp_1986 ;
                                    Table altered.

                                    SQL> alter table emp_part add partition p_emp_1986
                                      2 values less than ( maxvalue ) tablespace ts_emp6 ;
                                    Table altered.

                                    SQL> alter table emp_name_hash_part add partition ;
                                    Table altered.
Add partition
local index        next extent      SQL> select index_name, partition_name, next_extent
default attribute              5M     2 from user_ind_partitions
                 .                    3 where index_name in
                                      4 ('XAKEMP_PART_HDT','XAKEMPNAME_HASH_HDT')
                                      5 order by 1 ;
partition            default
attribute                           INDEX_NAME                             PARTITION_NAME        NEXT_EXTENT
                .                   ------------------------------ --------------- -----------
                                    XAKEMPNAME_HASH_HDT                            SYS_P48             5242880
                                                                                   HP_H1                 40960
                                                                                   HP_H3                 40960
                                                                                   SYS_P47               40960
                                                                                   HP_H2                 40960
                                    XAKEMP_PART_HDT                               P_EMP_1981             40960
                                                                                   P_EMP_1986           5242880
                                                                                   P_EMP_1980             40960
                                                                                   P_EMP_1985             40960
                                                                                   P_EMP_1982             40960
                                                                                   P_EMP_1983             40960
                                                                                   P_EMP_1984             40960




             jkspark@hanafos.com                                     - 63 -
Oracle8i New Features                                                                http://www.ggola.com/




                                         Unusable local index         data insert

                                         -    local index status     unusable                     partition
                                              data                                       .
                                              data insert                       index
                                                                                 .

                                         -                                        alter session command
                                                                            .

                                         -      ,                       index    unique index
                                                                      index partition         query
                                              error                        .


                                    SQL> col index_name for a15
                                    SQL> col partition_name for a15
                                    SQL> select index_name, partition_name, status
                                      2 from user_ind_partitions
                                      3 where index_name = 'XAKEMP_PART_HDT' ;

                                    INDEX_NAME                   PARTITION_NAME         STATUS
                                    --------------- --------------- --------
                                    XAKEMP_PART_HDT P_EMP_1981                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1982                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1983                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1984                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1985                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1980                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1986                          USABLE

                                    SQL> insert into emp_part select * from emp ;
                                    162034 rows created.

                                    SQL> commit ;
                                    Commit complete.

                                    SQL> alter table emp_part move partition
                                      2 p_emp_1981 tablespace tools ;
                                    Table altered.
Data      insert        data
               partition            SQL> select index_name, partition_name, status
p_emp_1981                            2 from user_ind_partitions
tablespace      move                  3 where index_name = 'XAKEMP_PART_HDT' ;
local index status     unusable
        .                           INDEX_NAME                   PARTITION_NAME         STATUS
                                    --------------- --------------- --------
                                    XAKEMP_PART_HDT P_EMP_1981                          UNUSABLE
                                    XAKEMP_PART_HDT P_EMP_1982                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1983                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1984                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1985                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1980                          USABLE
                                    XAKEMP_PART_HDT P_EMP_1986                          USABLE




             jkspark@hanafos.com                                   - 64 -
Oracle8i New Features                                                           http://www.ggola.com/




                                     SQL> insert into emp_part select * from emp
                                        2 where to_char(hiredate, 'YYYYMMDD') like '1981%'
Move      partition                     3 and rownum = 1 ;
p_emp_1981                  1980     insert into emp_part select * from emp
      data    insert       error     *
                                     ERROR at line 1:
            .
                                     ORA-01502: index 'SCOTT.XAKEMP_PART_HDT' or partition of such
index     unusable                   index is in
    .                                unusable state

                                     SQL> alter session set skip_unusable_indexes = true ;
                                     Session altered.
Alter session command                SQL> insert into emp_part select * from emp
                   data                 2 where to_char(hiredate, 'YYYYMMDD') like '1981%'
insert                                  3 and rownum = 1 ;
  .                                  1 row created.

                                     SQL> commit ;
                                     Commit complete.

                                     SQL> alter table emp_part modify partition
                                       2 p_emp_1981 rebuild unusable local indexes ;
                                     Table altered.

                                     SQL> select index_name, partition_name, status
                                       2 from user_ind_partitions
           index rebuild               3 where index_name = 'XAKEMP_PART_HDT' ;
   index                     .
                                     INDEX_NAME                   PARTITION_NAME   STATUS
                                     --------------- --------------- --------
                                     XAKEMP_PART_HDT P_EMP_1981                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1982                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1983                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1984                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1985                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1980                    USABLE
                                     XAKEMP_PART_HDT P_EMP_1986                    USABLE




             jkspark@hanafos.com                                  - 65 -
Oracle8i New Features                                                          http://www.ggola.com/




                                         Review command

                                         -                    general operation
                                              Oracle8                                partition
                                              Oracle8                                      sample
                                                                            exchange command truncate
                                              command                              .

                                         -                                        table creation
                                                          .
                                    SQL> drop table emp_part ;
                                    Table dropped.

                                    SQL> create table emp_part (
                                      2 EMPNO NUMBER(4) not null,
                                      3 ENAME VARCHAR2(10),
                                      4 JOB VARCHAR2(9),
                                      5 MGR NUMBER(4),
                                      6 HIREDATE          DATE,
                                      7 SAL NUMBER(7,2),
                                      8 COMM NUMBER(7,2),
                                      9 DEPTNO NUMBER(2))
                                     10 partition by range (hiredate)
                                     11 ( partition p_emp_1980 values less than
                                     12     (to_date('01-JAN-1981','DD-MON-YYYY')) tablespace ts_emp1,
                                     13 partition p_emp_1981 values less than
                                     14     (to_date('01-JAN-1982','DD-MON-YYYY')) tablespace ts_emp2,
                                     15 partition p_emp_1982 values less than
                                     16     (to_date('01-JAN-1983','DD-MON-YYYY')) tablespace ts_emp3,
                                     17 partition p_emp_1983 values less than
                                     18     (to_date('01-JAN-1984','DD-MON-YYYY')) tablespace ts_emp4,
                                     19 partition p_emp_1984 values less than
                                     20     (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp5,
                                     21 partition p_emp_1985 values less than
                                     22     (MAXVALUE) tablespace ts_emp6 ) ;
                                    Table created.

                                    SQL> create index xakemp_part_hdt on emp_part (hiredate) local ;
                                    Index created.

Table                      test     SQL> select count(*) from emp ;
                    1981               COUNT(*)
                    data            ----------
                                          162034
           77161             .
      data                          SQL> select count(*) from emp
partitioned table   insert             2 where to_char(hiredate, 'YYYYMMDD') like '1981%' ;
   test               .                COUNT(*)
                                    ----------
                                            77161
                                    SQL> insert into emp_part select * from emp ;
                                    162034 rows created.

                                    SQL> commit ;
                                    Commit complete.




            jkspark@hanafos.com                                    - 66 -
Oracle8i New Features                                                           http://www.ggola.com/




                                      SQL> col table_name for a10
                                      SQL> col index_name for a15
                                      SQL> col partition_name for a10
                                      SQL> col tablespace_name for a10
                                      SQL> set pagesize 100
                                      SQL> select table_name, partition_name, tablespace_name
                                        2 from user_tab_partitions
                                        3 where table_name = 'EMP_PART' ;

                                      TABLE_NAME PARTITION_ TABLESPACE
                                      ---------- ---------- ----------
                                      EMP_PART P_EMP_1981 TS_EMP2
                                      EMP_PART P_EMP_1982 TS_EMP3
                                      EMP_PART P_EMP_1983 TS_EMP4
               data
                                      EMP_PART P_EMP_1984 TS_EMP5
partition p_emp_1981         select   EMP_PART P_EMP_1985 TS_EMP6
      emp      1981                   EMP_PART P_EMP_1980 TS_EMP1

    .           partition             SQL> select count(*) from emp_part partition(p_emp_1981) ;
        .
                                         COUNT(*)
                                      ----------
                                              77161

                                      SQL> col segment_name for a10
                                      SQL> select segment_name, partition_name, extents
                                        2 from user_segments
                                        3 where segment_name = 'EMP_PART' ;

                                      SEGMENT_NA PARTITION_                   EXTENTS
                                      ---------- ---------- ----------
                                      EMP_PART            P_EMP_1981             11
                                      EMP_PART            P_EMP_1982              7
                                      EMP_PART            P_EMP_1983              5
                                      EMP_PART            P_EMP_1984              8
Partition truncate 3                  EMP_PART            P_EMP_1985              7
                        . Truncate    EMP_PART            P_EMP_1980              5
   partition         data
                      .               SQL> alter table emp_part truncate partition p_emp_1981
                                        2 drop storage ;
                                      Table truncated.

                                      SQL> select count(*) from emp_part partition(p_emp_1981) ;

                                         COUNT(*)
                                      ----------
                                                 0

                                      SQL> alter table emp_part truncate partition p_emp_1982
                                        2 reuse storage ;
                                      Table truncated.

                                      SQL> alter table emp_part truncate partition p_emp_1980 ;
                                      Table truncated.




               jkspark@hanafos.com                                   - 67 -
Oracle8i New Features                                                        http://www.ggola.com/




                                    SQL> select segment_name, partition_name, extents
Partition truncate     drop           2 from user_segments
storage                               3 where segment_name = 'EMP_PART' ;
option
                                    SEGMENT_NA PARTITION_                   EXTENTS
extent     1           space        ---------- ---------- ----------
                  reuse option      EMP_PART            P_EMP_1981             1
            p_emp_1982              EMP_PART            P_EMP_1982             7
partition    storage                EMP_PART            P_EMP_1983             5
             .                      EMP_PART            P_EMP_1984             8
                                    EMP_PART            P_EMP_1985             7
                                    EMP_PART            P_EMP_1980             1

                                    SQL> create table emp_history as select * from emp
                                      2 where to_char(hiredate, 'YYYYMMDD') like '1981%' ;
                                    Table created.
Exchange partition     test
         emp table                  SQL> select count(*) from emp_history ;
   emp_history table
    .            table                 COUNT(*)
      data   1981                   ----------
       .                                    77161

                                    SQL> alter table emp_part exchange partition p_emp_1981
                                      2 with table emp_history ;
                                    Table altered.

                                    SQL> select count(*) from emp_history ;

       truncate   p_emp_1981           COUNT(*)
partition     emp_history           ----------
                                               0
exchange           table
partition                           SQL> select count(*) from emp_part partition(p_emp_1981) ;
                .
     , physical     segment            COUNT(*)
                          .         ----------
                                            77161

                                    SQL> select table_name, partition_name, tablespace_name
                                      2 from user_tab_partitions
                                      3 where table_name = 'EMP_PART' ;

                                    TABLE_NAME PARTITION_ TABLESPACE
                                    ---------- ---------- ----------
                                    EMP_PART            P_EMP_1981 TOOLS
                                    EMP_PART P_EMP_1982 TS_EMP3
                                    EMP_PART P_EMP_1983 TS_EMP4
                                    EMP_PART P_EMP_1984 TS_EMP5
                                    EMP_PART P_EMP_1985 TS_EMP6
                                    EMP_PART P_EMP_1980 TS_EMP1




             jkspark@hanafos.com                                   - 68 -
Oracle8i New Features                                                              http://www.ggola.com/




                                    SQL> select segment_name, partition_name, extents
                                      2 from user_segments
                                      3 where segment_name = 'EMP_PART' ;

                                    SEGMENT_NA PARTITION_             EXTENTS
                                    ---------- ---------- ----------
                                    EMP_PART            P_EMP_1981        93
                                    EMP_PART            P_EMP_1982          7
Exchange            data            EMP_PART            P_EMP_1983          5
                                    EMP_PART            P_EMP_1984          8
                                    EMP_PART            P_EMP_1985          7
p_emp_1981 partition                EMP_PART            P_EMP_1980          1
extents              .              SQL> select index_name, partition_name, status
         index     unusable            2 from user_ind_partitions
            .                          3 where index_name = 'XAKEMP_PART_HDT' ;

                                    INDEX_NAME                         PARTITION_NAME STATUS
                                    ------------------- --------------- --------
                                    XAKEMP_PART_HDT                       P_EMP_1981  UNUSABLE
                                    XAKEMP_PART_HDT                      P_EMP_1982   USABLE
                                    XAKEMP_PART_HDT                      P_EMP_1983   USABLE
                                    XAKEMP_PART_HDT                      P_EMP_1984   USABLE
                                    XAKEMP_PART_HDT                      P_EMP_1985   USABLE
                                    XAKEMP_PART_HDT                      P_EMP_1980   USABLE
                                    SQL> alter table emp_part move partition p_emp_1981
                                       2 tablespace ts_emp2 ;
                                    Table altered.
                                    SQL> select table_name, partition_name, tablespace_name
                                       2 from user_tab_partitions
                                       3 where table_name = 'EMP_PART' ;

                                    TABLE_NAME PARTITION_ TABLESPACE
                                    ---------- ---------- ----------
                                    EMP_PART P_EMP_1981 TS_EMP2
                                    EMP_PART P_EMP_1982 TS_EMP3
Partition move     rebuild          EMP_PART P_EMP_1983 TS_EMP4
           partitioned table        EMP_PART P_EMP_1984 TS_EMP5
                        table       EMP_PART P_EMP_1985 TS_EMP6
                          .         EMP_PART P_EMP_1980 TS_EMP1
                                    SQL> alter table emp_part modify partition
                                       2 p_emp_1981 rebuild unusable local indexes ;
                                    Table altered.
                                    SQL> select index_name, partition_name, status
                                       2 from user_ind_partitions
                                       3 where index_name = 'XAKEMP_PART_HDT' ;

                                    INDEX_NAME                                          PARTITION_NAME   STATUS
                                    ------------------------------ --------------- --------
                                    XAKEMP_PART_HDT                                       P_EMP_1981     USABLE
                                    XAKEMP_PART_HDT                                       P_EMP_1982     USABLE
                                    XAKEMP_PART_HDT                                       P_EMP_1983     USABLE
                                    XAKEMP_PART_HDT                                       P_EMP_1984     USABLE
emp_history      drop               XAKEMP_PART_HDT                                       P_EMP_1985     USABLE
                           .        XAKEMP_PART_HDT                                       P_EMP_1980     USABLE

                                    SQL> drop table emp_history ;
                                    Table dropped.



              jkspark@hanafos.com                                   - 69 -
Oracle8i New Features                                                              http://www.ggola.com/




                                        Execution PLAN : ITERATOR and INLIST

                                        -                                               emp_part      data
                                                                                                       .

                                        -                  partitioned table emp_part hiredate
                                                        partition key          .   6    partition
                                            1980             1985         data      key                      .

                                        -              hiredate column         local prefixed index
                                                           .

                                        -        hiredate                         SQL            Oracle8i
                                            execution plan

                                  SQL> truncate table emp_part ;
                                  Table truncated.
                                  SQL> insert into emp_part select * from emp ;
                                  162034 rows created.
                                  SQL> commit ;
                                  Commit complete.
                                  SQL> alter session set nls_date_format = 'YYYYMMDD HH24:MI:SS' ;
                                  Session altered.
                                  SQL> select distinct(hiredate) from emp_part ;
                                  HIREDATE
test    emp table     Oracle      -----------------
        emp table                 19801217 00:00:00
                                  19810220 00:00:00
row
                                  19810222 00:00:00
insert      sample                19810402 00:00:00
   162034 row   hiredate          19810501 00:00:00
15                                19810609 00:00:00
       .                          19810908 00:00:00
                                  19810928 00:00:00
                                  19811117 00:00:00
                                  19811203 00:00:00
                                  19820123 00:00:00
                                  19821209 00:00:00
                                  19830112 00:00:00
                                  19840918 00:00:00
                                  19851001 00:00:00
                                  SQL> set pagesize 100
                                  SQL> set long 2000
                                  SQL> select table_name, partition_name, high_value
                                     2 from user_tab_partitions
                                     3 where table_name = 'EMP_PART'
                                     4 order by 2 ;

                                  TABLE_NAME PARTITION_NAME                          HIGH_VALUE
                                  ----------------------------------------------------------
                                  EMP_PART            P_EMP_1980                 TO_DATE(' 1981-01-01 00:00:00'…
                                  EMP_PART            P_EMP_1981                 TO_DATE(' 1982-01-01 00:00:00'…
                                  EMP_PART            P_EMP_1982                 TO_DATE(' 1983-01-01 00:00:00'…
                                  EMP_PART            P_EMP_1983                 TO_DATE(' 1984-01-01 00:00:00'…
                                  EMP_PART            P_EMP_1984                 TO_DATE(' 1985-01-01 00:00:00'…
                                  EMP_PART P_EMP_1985                            MAXVALUE




           jkspark@hanafos.com                                    - 70 -
Oracle8i New Features                                                                               http://www.ggola.com/




                                    SQL> col operation format a16
                                    SQL> col options format a20
                                    SQL> col start format a12
                                    SQL> col stop format a12
                                    SQL> col distribution format a10
                                    SQL> col object_name format a15
                                    SQL> set numwidth 7


                                    SQL> select distinct ename, hiredate from emp_part
        partition                      2 where hiredate = to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS') ;
data    select         .            ENAME               HIREDATE
                                    ---------- --------
                                    BLAKE               19810501

                                    SQL> explain plan for select distinct ename, hiredate
                                      2 from emp_part
                                      3 where hiredate = to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS') ;
                                    Explained.

                                    SQL> select operation, options, object_name,
                                      2 partition_start "start", partition_stop "stop",
                    Index     2       3 bytes, cardinality as "#"
     partition          data          4 from plan_table
   return           execution         5 order by id ;
plan                  .
                                    OPERATION                    OPTIONS                      OBJECT_NAME                 start stop BYTES #
                                    ------------------------------------------------------------------------------------------------------------------
                                    SELECT STATEMENT                                                                                           16 1
                                    SORT                      UNIQUE                                                                           16 1
                                    TABLE ACCESS BY LOCAL INDEX ROWID EMP_PART                                            2        2          16 1
                                    INDEX               RANGE SCAN                        XAKEMP_PART_HDT 2                          2                1

                                    SQL> select distinct ename, hiredate from emp_part
                                      2 where hiredate in
                                      3   ( to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS'),
                                      4     to_date('19840918 00:00:00', 'YYYYMMDD HH24:MI:SS')) ;

                                    ENAME               HIREDATE
                                    ---------- --------
        partition                   BLAKE               19810501
partition                  data     JANG              19840918
                                    JUN               19840918
select        .
                                    KIM               19840918
                                    LEE               19840918

                                    SQL> delete from plan_table ;
                                    10 rows deleted.

                                    SQL> commit ;
                                    Commit complete.




            jkspark@hanafos.com                                              - 71 -
Oracle8i New Features                                                                                                     http://www.ggola.com/




                                      SQL> explain plan for select distinct ename, hiredate
                                        2 from emp_part
                                        3 where hiredate in
                                        4 ( to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS'),
                                        5 to_date('19840918 00:00:00', 'YYYYMMDD HH24:MI:SS')) ;
                                      Explained.
Execution plan
KEY(INLIST)                           SQL> select operation, options, object_name,
select           “in”                   2 partition_start "start", partition_stop "stop",
       partition                        3 bytes, cardinality as "#"
                       .                4 from plan_table
                                        5 order by id ;
  ,            partition
      partition       access          OPERATION                    OPTIONS                               OBJECT_NAME                         start              stop BYTES              #
       .                              --------------------------------------------------------------------------------------------------------------------------------------------------
                                      SELECTSTATEMENT                                                                                                                             80 5
                                      INLIST ITERATOR
                                      PARTITION RANGE ITERATOR                                                                           KEY(INLIST) KEY(INLIST)
                                      SORT                          UNIQUE                                                                                                         80 5
                                      TABLE ACCESS                   BY LOCAL INDEX ROWID EMP_PART                                       KEY(INLIST) KEY(INLIST) 80 5
                                      INDEX                         RANGE SCAN                           XAKEMP_PART_HDT KEY(INLIST) KEY(INLIST)



                                               -       Oracle8 version                                                   “in”
                                                                 partition 2
                                                                  partition                                                    partition
                                                              range access                                           . Oracle8    Test
                                                                                                                            ITERATOR
                                                       KEY(INLIST)                                  Oracle8i
                                                              .

                                               -                                           full table scan
                                                       (                     hiredate index                 )
                                                       Oracle8         “in”                   partition
                                                       partition     ITERATOR(           )                range
                                                       scan(partition full scan)                    (“in”
                                                                           table full scan                        )
                                                       Oracle8i      INLIST                   partition     full scan
                                                                                  . ,                          full
                                                       scan                             scan
                                                              .




               jkspark@hanafos.com                                                         - 72 -
Oracle8i New Features                                                                   http://www.ggola.com/




                                         Export

                                         -   export         table                   partition export
                                             query                                 data      export
                                                      .

                                         -                filesize option                     export dump file
                                                                                      dump file             import
                                                              .

                                         CF. FILESIZE option             defatul(B:bytes), K(Kbytes), M(Mbytes),
                                         G(Gbytes)                            .

                                         -                                                                       .
                                    SQL> select count(*) from emp_part partition(p_emp_1981) ;

                                    COUNT(*)
emp_part        partition           --------
p_emp_1981 data   77161                  77161
              deptno     20         SQL> select count(*) from emp_part partition(p_emp_1981)
         15441      .                 2 where deptno = 20 ;

                                    COUNT(*)
                                    --------
                                         15441
                                    $ exp scott/tiger file=emp1980_1.dmp tables=emp_part:p_emp_1981
                                    query='"where deptno=20"' filesize=256K
Oracle8i new export option
     partition, query, filesize     Export: Release 8.1.6.2.0 - Production on Mon Aug 13 16:42:28 2001
           export
              .                     (c) Copyright 1999 Oracle Corporation.           All rights reserved.

                                    Connected to: Oracle8i Enterprise Edition Release 8.1.6.2.0 - Production
                                    With the Partitioning option
                                    JServer Release 8.1.6.2.0 - Production
                                    Export done in US7ASCII character set and US7ASCII NCHAR character se
                                    About to export specified tables via Conventional Path ...
                                    . . exporting table                           EMP_PART
                                    . . exporting partition                        P_EMP_1981
             emp1980_1.dmp          Export file: expdat.dmp > emp1980_2.dmp
    256K
interactive mode                    continuing export into file emp1980_2.dmp
export dump filename
     . 256K                 data    Export file: expdat.dmp > emp1980_3.dmp
          export
                                    continuing export into file emp1980_3.dmp
                        .
                                           15441 rows exported
ls command                          Export terminated successfully without warnings.
export file size       256K
                       .            $ ls -l *.dmp
                                    -rw-r--r-- 1 oracle           dba            262144 Aug 13 16:42 emp1980_1.dmp
                                    -rw-r--r-- 1 oracle           dba            262144 Aug 13 16:43 emp1980_2.dmp
                                    -rw-r--r-- 1 oracle           dba            221184 Aug 13 16:43 emp1980_3.dmp




            jkspark@hanafos.com                                         - 73 -
Oracle8i New Features                                                            http://www.ggola.com/




             7. Composite Partitioning


             Subpartition

                                           Composite partition

                                           -   range partition + hash partition

                                           -   Composite partition              range partition    hash
                                               function                     range partition hash partition
                                                                                    .         hash partition
                                               subpartition                       .

                                           -   Range high availability and manageability           data
                                               placement                              performance for
                                               parallel DML and supports partition-wise joins
                                                       . (hash partition             )

                                           -               physical data segment range partition
                                                                subpartition(hash partition)
                                                    .                  partition segment     range
                                               partition   subpartition                        .

                                           CF. range partition 4       subpartition       4    16
                                           subpartition segment                       .

                                           -                                      partition segment               .
                                     SQL> alter session set nls_date_format = 'DD-MON-YYYY' ;
                                     Session altered.

alter session command                SQL> create table emp_comp_part (
                   range               2 EMPNO NUMBER(4) not null,
partition key     date type            3 ENAME VARCHAR2(10),
      partition                        4 JOB VARCHAR2(9),
                                       5 MGR NUMBER(4),
          . Subpartition
                                       6 HIREDATE         DATE,
empno                  4               7 SAL NUMBER(7,2),
             range partition           8 COMM NUMBER(7,2),
tablespace                             9 DEPTNO NUMBER(2))
composite partitioning                10 partition by range (hiredate)
              .                       11 subpartition by hash(empno) subpartitions 4
                                      12 ( partition p_emp_1980 values less than
                                      13                ('01-JAN-1981') tablespace ts_emp1,
                                      14 partition p_emp_1981 values less than
                                      15                ('01-JAN-1982') tablespace ts_emp2,
                                      16 partition p_emp_1982 values less than
                                      17                ('01-JAN-1983') tablespace ts_emp3,
                                      18 partition p_emp_1984 values less than
                                      19                (MAXVALUE) tablespace ts_emp4 ) ;

                                     Table created.



              jkspark@hanafos.com                                  - 74 -
Oracle8i New Features                                                        http://www.ggola.com/




                                      SQL> select segment_name, partition_name, tablespace_name
                                        2 from user_segments
user_segments query                     3 where segment_NAME = 'EMP_COMP_PART'
   tablespace                           4 order by 3 ;
subpartition
                               .      SEGMENT_NAME                   PARTITION_NAME TABLESPACE
4 X 4 = 16 subpartitions              --------------- --------------- ----------
                                      EMP_COMP_PART                 SYS_SUBP94     TS_EMP1
                                      EMP_COMP_PART                 SYS_SUBP95     TS_EMP1
                                      EMP_COMP_PART                 SYS_SUBP93     TS_EMP1
                                      EMP_COMP_PART                 SYS_SUBP96     TS_EMP1
                                      EMP_COMP_PART                 SYS_SUBP97     TS_EMP2
                                      EMP_COMP_PART                 SYS_SUBP98     TS_EMP2
                                      EMP_COMP_PART                 SYS_SUBP99     TS_EMP2
                                      EMP_COMP_PART                 SYS_SUBP100    TS_EMP2
                                      EMP_COMP_PART                 SYS_SUBP101    TS_EMP3
                                      EMP_COMP_PART                 SYS_SUBP102    TS_EMP3
                                      EMP_COMP_PART                 SYS_SUBP103    TS_EMP3
                                      EMP_COMP_PART                 SYS_SUBP104    TS_EMP3
                                      EMP_COMP_PART                 SYS_SUBP105    TS_EMP4
                                      EMP_COMP_PART                 SYS_SUBP106    TS_EMP4
                                      EMP_COMP_PART                 SYS_SUBP107    TS_EMP4
                                      EMP_COMP_PART                 SYS_SUBP108    TS_EMP4

                                      SQL> create table emp_name_comp_part (
                range partition         2     EMPNO NUMBER(4) not null,
                                        3     ENAME VARCHAR2(10),
               subpartition
                                        4     JOB VARCHAR2(9),
attribute                               5     MGR NUMBER(4),
            control                     6     HIREDATE          DATE,
                        .               7     SAL NUMBER(7,2),
                                        8     COMM NUMBER(7,2),
                                        9     DEPTNO NUMBER(2))
                                       10     partition by range (hiredate)
                                       11     subpartition by hash(empno) subpartitions 4
                                       12     store in (ts_emp1, ts_emp2, ts_emp3, ts_emp4)
                                       13     ( partition p_emp_1980 values less than
                                       14                     ('01-JAN-1981') storage(maxextents 512),
                                       15        partition p_emp_1981 values less than
                                       16                     ('01-JAN-1982') pctfree 40,
                                       17        partition p_emp_1982 values less than
                                       18                     ('01-JAN-1983') store in (ts_emp5),
                                       19        partition p_emp_1984 values less than
                                       20                     (MAXVALUE) subpartitions 6 store in (ts_emp6)) ;
                                      Table created.

user_tab_partitions    range          SQL> select table_name, partition_name, tablespace_name
partition query     ,4                  2 from user_tab_partitions
range partition                         3 where table_name = 'EMP_NAME_COMP_PART'
                                        4 order by 3 ;
                     logical
structure                  .          TABLE_NAME                           PARTITION_NAME TABLESPACE
                                      -------------------- --------------- ----------
                                      EMP_NAME_COMP_PART                       P_EMP_1980  TOOLS
                                      EMP_NAME_COMP_PART                       P_EMP_1981  TOOLS
                                      EMP_NAME_COMP_PART                       P_EMP_1982  TOOLS
                                      EMP_NAME_COMP_PART                       P_EMP_1984  TOOLS




              jkspark@hanafos.com                                 - 75 -
Oracle8i New Features                                                              http://www.ggola.com/




                                     SQL> select segment_name, partition_name, tablespace_name
                                       2 from user_segments
user_segments query                    3 where segment_NAME = 'EMP_NAME_COMP_PART'
composite partition                    4 order by 3 ;
emp_name_comp_part table
      18     hash partition          SEGMENT_NAME                           PARTITION_NAME   TABLESPACE
   segment                           -------------------- --------------- ----------
               . , composite         EMP_NAME_COMP_PART SYS_SUBP109                          TS_EMP1
                                     EMP_NAME_COMP_PART                       SYS_SUBP113    TS_EMP1
partition  hash partition
                                     EMP_NAME_COMP_PART SYS_SUBP110                          TS_EMP2
   data             .                EMP_NAME_COMP_PART                       SYS_SUBP114    TS_EMP2
                                     EMP_NAME_COMP_PART SYS_SUBP111                          TS_EMP3
(4 X 2) +                            EMP_NAME_COMP_PART                       SYS_SUBP115    TS_EMP3
    4 +                              EMP_NAME_COMP_PART SYS_SUBP112                          TS_EMP4
    6 = 18 subpartitions             EMP_NAME_COMP_PART                       SYS_SUBP116    TS_EMP4
                                     EMP_NAME_COMP_PART SYS_SUBP117                          TS_EMP5
                                     EMP_NAME_COMP_PART                       SYS_SUBP118    TS_EMP5
                                     EMP_NAME_COMP_PART                       SYS_SUBP119    TS_EMP5
                                     EMP_NAME_COMP_PART                       SYS_SUBP120    TS_EMP5
                                     EMP_NAME_COMP_PART SYS_SUBP121                          TS_EMP6
                                     EMP_NAME_COMP_PART                       SYS_SUBP122    TS_EMP6
                                     EMP_NAME_COMP_PART                       SYS_SUBP123    TS_EMP6
                                     EMP_NAME_COMP_PART                       SYS_SUBP124    TS_EMP6
                                     EMP_NAME_COMP_PART                       SYS_SUBP125    TS_EMP6
                                     EMP_NAME_COMP_PART                       SYS_SUBP126    TS_EMP6

                                     SQL> insert into emp_name_comp_part select * from emp ;
                                     162034 rows created.

                                     SQL> commit ;
emp table          data              Commit complete.
p_emp_1984 partition                 SQL> select count(*)
61721 row      data                     2 from emp_name_comp_part partition(p_emp_1984) ;
   3        hiredate                    COUNT(*)
       . p_emp_1984                  ----------
subpartition sys_subp125                     61721
         hiredate
          .                          SQL> select distinct hiredate
                                        2 from emp_name_comp_part partition(p_emp_1984) ;
                                     HIREDATE
                                     -----------
                                     12-JAN-1983
                                     18-SEP-1984
                                     01-OCT-1985

                                     SQL> select distinct hiredate
                                        2 from emp_name_comp_part subpartition(SYS_SUBP125) ;
                                     HIREDATE
                                     -----------
subpartition         alias           12-JAN-1983
      DML
                                     SQL> update emp_name_comp_part subpartition(SYS_SUBP125) es
    .                                  2 set es.hiredate = sysdate ;
subpartition                         7713 rows updated.
       .




               jkspark@hanafos.com                                  - 76 -
Oracle8i New Features                                                              http://www.ggola.com/




                                     SQL> select distinct hiredate
                                       2 from emp_name_comp_part subpartition(SYS_SUBP125) ;

                                     HIREDATE
                                     -----------
                                     14-AUG-2001

update                               SQL> commit ;
subpartition       hiredate          Commit complete.

range partition p_emp_1984           SQL> select distinct hiredate
hiredate     1983    data              2 from emp_name_comp_part partition(p_emp_1984) ;
        2001     data
                                     HIREDATE
                   .                 -----------
                                     18-SEP-1984
                                     01-OCT-1985
                                     14-AUG-2001

                                     SQL> create table emp_name_sub_part (
                                       2    EMPNO NUMBER(4) not null,
                                       3    HIREDATE          DATE,
                                       4    SAL NUMBER(7,2),
                                       5    DEPTNO NUMBER(2))
                                       6    partition by range (hiredate)
                                       7    subpartition by hash(empno) subpartitions 4
                                       8    store in (ts_emp1, ts_emp2, ts_emp3, ts_emp4)
                                       9    ( partition p_emp_1980 values less than ('01-JAN-1981'),
                                      10       partition p_emp_1981 values less than ('01-JAN-1982'),
                                      11       partition p_emp_1982 values less than (MAXVALUE)
                                      12                   ( subpartition sp_1982_h1 tablespace ts_emp5,
                                      13                      subpartition sp_1982_h2 tablespace ts_emp6)) ;

                                     Table created.
             composite               SQL> select segment_name, partition_name, tablespace_name
partition   hash partition             2 from user_segments
                                       3 where segment_NAME = 'EMP_NAME_SUB_PART'
                     .                 4 order by 3 ;

                                     SEGMENT_NAME                           PARTITION_NAME   TABLESPACE
                                     -------------------- --------------- ----------
                                     EMP_NAME_SUB_PART                       SYS_SUBP127     TS_EMP1
                                     EMP_NAME_SUB_PART                       SYS_SUBP131     TS_EMP1
                                     EMP_NAME_SUB_PART                       SYS_SUBP128     TS_EMP2
                                     EMP_NAME_SUB_PART                       SYS_SUBP132     TS_EMP2
                                     EMP_NAME_SUB_PART                       SYS_SUBP129     TS_EMP3
                                     EMP_NAME_SUB_PART                       SYS_SUBP133     TS_EMP3
                                     EMP_NAME_SUB_PART                       SYS_SUBP130     TS_EMP4
                                     EMP_NAME_SUB_PART                       SYS_SUBP134     TS_EMP4
                                     EMP_NAME_SUB_PART                       SP_1982_H1      TS_EMP5
                                     EMP_NAME_SUB_PART                       SP_1982_H2      TS_EMP6




               jkspark@hanafos.com                                  - 77 -
Oracle8i New Features                                                           http://www.ggola.com/




                                           Composite partitioned indexes

                                           -    composite partitioned indexes always local index
                                               tablespace                    default table subpartition
                                               tablespace           .

                                           -     , composite partitioned table            range partitioned
                                               global index                  .          composite partitioned
                                               global index                    . (hash syntax        .)
                                     SQL> select table_name, partition_name, tablespace_name
                                       2 from user_tab_partitions
                                       3 where table_name = 'EMP_NAME_SUB_PART' ;

      composite partitioned          TABLE_NAME                           PARTITION_NAME   TABLESPACE
table     range partition            -------------------- --------------- ----------
logical structure                    EMP_NAME_SUB_PART                      P_EMP_1980     TOOLS
                                     EMP_NAME_SUB_PART                      P_EMP_1981     TOOLS
       .     table    local
                                     EMP_NAME_SUB_PART                      P_EMP_1982     TOOLS
index              index
                            .        SQL> create index xakempnmsubpt_hdempno
                                       2 on emp_name_sub_part (hiredate, empno) local ;
                                     Index created.

         local index partition       SQL> select index_name, partition_name, tablespace_name, status
   tablespace                          2 from user_ind_partitions
   logical structure                   3 where index_name = 'XAKEMPNMSUBPT_HDEMPNO' ;
         .
        composite partitioned        INDEX_NAME                      PARTITION_NAME TABLESPACE STATUS
                                     --------------------- --------------- ---------- --------
local index      STATUS
                                     XAKEMPNMSUBPT_HDEMPNO P_EMP_1980                           N/A
“N/A”                   .
                                     XAKEMPNMSUBPT_HDEMPNO P_EMP_1981                           N/A
                                     XAKEMPNMSUBPT_HDEMPNO P_EMP_1982                           N/A

                                     SQL> select segment_name, partition_name, tablespace_name
                                       2 from user_segments
                                       3 where segment_NAME = 'XAKEMPNMSUBPT_HDEMPNO'
                                       4 order by 3 ;

     local index                     SEGMENT_NAME                            PARTITION_NAME TABLESPACE
                                     --------------------- --------------- ----------
   underlying table                  XAKEMPNMSUBPT_HDEMPNO SYS_SUBP127                       TS_EMP1
subpartition                         XAKEMPNMSUBPT_HDEMPNO SYS_SUBP131                       TS_EMP1
                                     XAKEMPNMSUBPT_HDEMPNO SYS_SUBP128                       TS_EMP2
                                     XAKEMPNMSUBPT_HDEMPNO SYS_SUBP132                       TS_EMP2
                      .              XAKEMPNMSUBPT_HDEMPNO SYS_SUBP129                       TS_EMP3
                                     XAKEMPNMSUBPT_HDEMPNO SYS_SUBP133                       TS_EMP3
                                     XAKEMPNMSUBPT_HDEMPNO SYS_SUBP130                       TS_EMP4
                                     XAKEMPNMSUBPT_HDEMPNO SYS_SUBP134                       TS_EMP4
                                     XAKEMPNMSUBPT_HDEMPNO SP_1982_H1                        TS_EMP5
                                     XAKEMPNMSUBPT_HDEMPNO SP_1982_H2                        TS_EMP6




              jkspark@hanafos.com                                   - 78 -
Oracle8i New Features                                                               http://www.ggola.com/




                                CF.     user_ind_partitions  index status “USABLE”
                                      “N/A”                      bug       Oracle8.1.7
                                                                Oracle8i
                                dictionary(         )     subpartition
                                                    “N/A”         subpartition
                                        subpartition “UNUSABLE”
                                user_ind_partitions
                                         .

                                CF.    ,                            composite partition
                                           subpartitions             dictionary
                                           .

                      SQL> select index_name, partition_name, subpartition_name, status
                        2 from user_ind_subpartitions
                        3 where index_name = 'XAKEMPNMSUBPT_HDEMPNO' ;

                      INDEX_NAME                           PARTITION_ SUBPARTITION_NA STATUS
                      ----------------------- ---------- --------------- --------
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP127                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP128                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP129                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP130                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP131                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP132                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP133                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP134                         USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1982 SP_1982_H1                          USABLE
                      XAKEMPNMSUBPT_HDEMPNO P_EMP_1982 SP_1982_H2                          USABLE

                      SQL> select table_name, partition_name, subpartition_name, tablespace_name
                        2 from user_tab_subpartitions
                        3 where table_name = 'EMP_NAME_SUB_PART' ;

                      TABLE_NAME                           PARTITION_ SUBPARTITION_NA TABLESPACE
                      -------------------- ---------- --------------- ----------
                      EMP_NAME_SUB_PART                      P_EMP_1980 SYS_SUBP127    TS_EMP1
                      EMP_NAME_SUB_PART                      P_EMP_1980 SYS_SUBP128    TS_EMP2
                      EMP_NAME_SUB_PART                      P_EMP_1980 SYS_SUBP129    TS_EMP3
                      EMP_NAME_SUB_PART                      P_EMP_1980 SYS_SUBP130    TS_EMP4
                      EMP_NAME_SUB_PART                      P_EMP_1981 SYS_SUBP131    TS_EMP1
                      EMP_NAME_SUB_PART                      P_EMP_1981 SYS_SUBP132    TS_EMP2
                      EMP_NAME_SUB_PART                      P_EMP_1981 SYS_SUBP133    TS_EMP3
                      EMP_NAME_SUB_PART                      P_EMP_1981 SYS_SUBP134    TS_EMP4
                      EMP_NAME_SUB_PART                      P_EMP_1982 SP_1982_H1     TS_EMP5
                      EMP_NAME_SUB_PART                      P_EMP_1982 SP_1982_H2     TS_EMP6




                                .




jkspark@hanafos.com                                        - 79 -
Oracle8i New Features                                                        http://www.ggola.com/




                        Different partition maintenance operation

                        -   subpartition         operation                        subpartition
                                                    .

                        -   Alter table modify partition add/coalesce subpartition …
                            Alter table/index modify subpartition …
                            Alter index rebuild subpartition …
                            Alter table modify subpartition…
                            Alter table/index rename subpartition…
                            Alter table move subpartition…
                            Alter table exchange subpartition…
                            Alter table truncate subpartition…
                            Alter table modify subpartition unusable local indexes…
                            Alter table modify subpartition rebuild unusable local
                            indexes.

                        -                      composite partitioned table
                            subpartition        default attributes                .
                            SQL> alter table emp_name_sub_part
                               2 modify default attributes for partition p_emp_1982
                               3 tablespace ts_emp6 ;
                            Table altered.
                            CF.                     partition                       .

                        New dictionary and columns

                        -   DBA/USER/ALL_TAB_SUBPARTITIONS : subpartition
                            information

                        -   DBA/USER/ALL_SUBPART_KEY_COLUMNS : subpartition
                            key information

                        -   DBA/USER/ALL_IND_SUBPARTITIONS : subpartition index
                            information

                        -   DBA/USER/ALL_SUBPART_COL_STATISTICS : subpartition
                            column statistics

                        -   DBA/USER/ALL_SUBPART_HISTOGRAMS : subpartition
                            histogram

                        -              object data dictionary      subpartition
                            columns                 .

                        Others

                        -        partition                    subpartition      subpartition
                            export/import              . (6    export              )

                        -   subpartition        analyze            .
                            SQL> analyze table emp_name_sub_part subpartition
                            (sp_1982_h1) compute statistics ;



jkspark@hanafos.com                           - 80 -
Oracle8i New Features                                                          http://www.ggola.com/




8. Added New Features for partition


Large Objects

                        Partition

                        -                                                            CF

                        Part/Type                     LOB             Object Type              IOT

                        RANGE                           O                  O                    O

                        HASH                            O                  O                    X

                        COMPOSITE                       O                  O                    X

                        CF. collection type                 IOT   partition
                        IOT     partitioning                  partition key    primary key
                        column subset                          .

                        LOB (Large Objects)

                        -   LOB column    partition key                                       LOB
                            column        table partitioning                              .         , LOB
                            data       table partition keys partition                 .

                        -   Lob partition      tablespace
                            “tablespace default”                             table partition
                                    tablespace            .              , table partition
                            tablespace                                table partition     user
                            default tablespace                            lob partition
                                         .

                        -   Lob index                        lob partition
                            tablespace                            .       lob index storage
                                               .

                        -   Alter command                   LOB         storage
                                          tablespace                     move command
                                           . Move command        lob partition
                                                 table partition                         .
                                    table partition     move               lob partition
                                                          .

                        -   Lob data           partitioned table                     tablespace
                            “drop tablespace including contents”                        drop
                                 all table partition            tablespace                             ,
                                 tablespace LOB partition




jkspark@hanafos.com                                - 81 -
Oracle8i New Features                                                          http://www.ggola.com/




                                                  partition drop              .         ,1    table
                                                  partition     drop              tablespace
                                                  tablespace                           ORA-22868 error   return
                                                         .

                                             -                          LOB                partition
                                                          .
                                 SQL> create table emp_lob (
                                   2 EMPNO NUMBER(4) not null,
                                   3 ENAME VARCHAR2(10),
                                   4 HIREDATE         DATE,
                                   5 SAL BLOB,
                                   6 DEPTNO NUMBER(2))
                                   7 partition by range (hiredate)
                                   8 ( partition p_emp_1984 values less than
                                   9    (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp1
                                  10    LOB(sal) store as (tablespace ts_emp6),
                                  11 partition p_emp_1985 values less than
                                  12    (MAXVALUE) tablespace ts_emp2
                                  13    LOB(sal) store as (tablespace ts_emp5)) ;

                                 Table created.

                                 SQL> select table_name, partition_name, tablespace_name
                                   2 from user_tab_partitions
                                   3 where table_name = 'EMP_LOB' ;
LOB column             table
             lob partition       TABLE_NAME PARTITION_NA TABLESPACE
          lob                    ---------- ------------ ----------
   tablespace      lob           EMP_LOB             P_EMP_1984 TS_EMP1
partition                        EMP_LOB             P_EMP_1985 TS_EMP2
           .
                                 SQL> select table_name, partition_name, lob_partition_name, tablespace_name
      Lob partition                2 from user_lob_partitions
system generated name              3 where table_name = 'EMP_LOB' ;
SYS_LOB_Pnn
           .                     TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE
                                 ---------- ------------ ------------ ----------
                                 EMP_LOB             P_EMP_1984 SYS_LOB_P137 TS_EMP6
                                 EMP_LOB             P_EMP_1985 SYS_LOB_P138 TS_EMP5

                                 SQL> create table emp_lob2 (
                                   2 EMPNO NUMBER(4) not null,
                                   3 ENAME VARCHAR2(10),
                                   4 HIREDATE          DATE,
                                   5 SAL BLOB,
Table level         lob            6   DEPTNO NUMBER(2))
                                   7   LOB(sal) store as (tablespace default)
    partition level
                                   8 partition by range (hiredate)
lob                                9 ( partition p_emp_1984 values less than
partitioned table                 10     (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp3
     .                            11     LOB(sal) store as (tablespace ts_emp4),
                                  12 partition p_emp_1985 values less than (MAXVALUE)) ;

                                 Table created.




               jkspark@hanafos.com                                  - 82 -
Oracle8i New Features                                                             http://www.ggola.com/




                                     SQL> select table_name, partition_name, tablespace_name
                                       2 from user_tab_partitions
                                       3 where table_name = 'EMP_LOB2' ;

                                     TABLE_NAME PARTITION_NA TABLESPACE
                                     ---------- ------------ ----------
                                     EMP_LOB2 P_EMP_1984 TS_EMP3
                                     EMP_LOB2 P_EMP_1985 TOOLS

Partition level                      SQL> select table_name, partition_name, lob_partition_name, tablespace_name
         p_emp_1985                    2 from user_lob_partitions
user default tablespace                3 where table_name = 'EMP_LOB2' ;
tools
table level     lob                  TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE
                                     ---------- ------------ ------------ ----------
        tablespace default
                                     EMP_LOB2 P_EMP_1984 SYS_LOB_P141 TS_EMP4
                lob partition        EMP_LOB2 P_EMP_1985 SYS_LOB_P142 TOOLS
   table partition
                        .            SQL> alter table emp_lob2 move partition
                                       2 p_emp_1985 tablespace ts_emp5 ;

                                     Table altered.

                                     SQL> select table_name, partition_name, tablespace_name
                                       2 from user_tab_partitions
                                       3 where table_name = 'EMP_LOB2' ;

                                     TABLE_NAME PARTITION_NA TABLESPACE
                                     ---------- ------------ ----------
                                     EMP_LOB2 P_EMP_1984 TS_EMP3
                                     EMP_LOB2 P_EMP_1985 TS_EMP5

                                     SQL> select table_name, partition_name, lob_partition_name, tablespace_name
                                       2 from user_lob_partitions
Move partition                         3 where table_name = 'EMP_LOB2' ;
partition             lob
partition                 .          TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE
           lob partition             ---------- ------------ ------------ ----------
   move                              EMP_LOB2 P_EMP_1984 SYS_LOB_P141 TS_EMP4
       .                             EMP_LOB2 P_EMP_1985 SYS_LOB_P142 TOOLS

                                     SQL> alter table emp_lob2 move partition p_emp_1985
                                       2 lob(sal) store as (tablespace ts_emp5) ;

                                     Table altered.

                                     SQL> select table_name, partition_name, lob_partition_name, tablespace_name
                                       2 from user_lob_partitions
                                       3 where table_name = 'EMP_LOB2' ;

                                     TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE
                                     ---------- ------------ ------------ ----------
                                     EMP_LOB2 P_EMP_1985 SYS_LOB_P145 TS_EMP5
                                     EMP_LOB2 P_EMP_1984 SYS_LOB_P141 TS_EMP4




               jkspark@hanafos.com                                     - 83 -
Oracle8i New Features                                                             http://www.ggola.com/




                                    SQL> alter table emp_lob2 move partition p_emp_1984
                                      2 tablespace ts_emp1 lob(sal) store as (tablespace ts_emp1) ;
                                    Table altered.

Move partition     table            SQL> select table_name, partition_name, tablespace_name
                                      2 from user_tab_partitions
partition   lob partition
                                      3 where table_name = 'EMP_LOB2' ;
                            .
                                    TABLE_NAME PARTITION_NA TABLESPACE
                                    ---------- ------------ ----------
                                    EMP_LOB2 P_EMP_1984 TS_EMP1
                                    EMP_LOB2 P_EMP_1985 TS_EMP5

                                    SQL> select table_name, partition_name, lob_partition_name, tablespace_name
                                      2 from user_lob_partitions
                                      3 where table_name = 'EMP_LOB2' ;

                                    TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE
                                    ---------- ------------ ------------ ----------
                                    EMP_LOB2 P_EMP_1985 SYS_LOB_P145 TS_EMP5
                                    EMP_LOB2 P_EMP_1984 SYS_LOB_P147 TS_EMP1

                                    SQL> create index xakemplob2_hdtemp on emp_lob2
                                      2 (hiredate, empno) local ;
Index            lob index
                                    Index created.
partition   lob partition
                                    SQL> select table_name, partition_name, lob_partition_name,
   . Lob index partition              2 lob_indpart_name, tablespace_name
name    SYS_IL_Pnn                    3 from user_lob_partitions
                      .               4 where table_name = 'EMP_LOB2';

                                    TABLE_NAME PARTITION_NA LOB_PARTITIO LOB_INDPART_NAM
                                    TABLESPACE
                                    ---------- ------------ ------------ --------------- ----------
                                    EMP_LOB2 P_EMP_1985 SYS_LOB_P145 SYS_IL_P146                    TS_EMP5
Table partition                     EMP_LOB2 P_EMP_1984 SYS_LOB_P147 SYS_IL_P148                    TS_EMP1
        lob partition
   tablespace                       SQL> connect internal
tablespace      drop                Connected.
               tablespace           SQL> drop tablespace ts_emp1 including contents ;
table partition                     drop tablespace ts_emp1 including contents
                                    *
         tablespace     drop
                                    ERROR at line 1:
             .                      ORA-22868: table with LOBs contains segments in different tablespaces

                                              LOB Operation

                                               -   lob partition                              move
                                                   partition           partition               lob
                                                                   .

                                               -     , lob        storage lob                        .
                                                   SQL> alter table emp_lob2 modify lob (sal) (storage (next 1m
                                                   maxextents 512)) ;




              jkspark@hanafos.com                                      - 84 -
Oracle8i New Features                                                    http://www.ggola.com/




                        New/Changed dictionary and columns

                        -     DBA/USER/ALL_PART_LOBS : table level                 lob
                              information

                        -     DBA/USER/ALL_LOB_PARTITIONS : lob partition
                              information (including lob index partition)

                        -     DBA/USER/ALL_LOB_SUBPARTITIONS : lob subpartition
                              information

                        -     DBA/USER/ALL_IND_PARTITIONS, OBJECTS,
                              SEGMENTS : type index name lob information

                        CF. system generated partition name rule comparison
                           table partition : SYS_Pnn
                           table subpartition : SYS_SUBPnn
                           lob partition : SYS_LOB_Pnn
                           lob index partition : SYS_IL_Pnn
                           iot partition : SYS_IOT_TOP_Pnn
                           iot overflow partition : SYS_IOT_OVER_Pnn
                           CF.                        IOT system generated partition
                        name      SYS_…_Pnn ‘P’
                                                  .



Index Organized Table

                        IOT

                        -     Only range partition              partition key
                              IOT primary key subset                   .
                              CF. , overflow segment table partition range                  .
                                 (equipartitioned with the table partition)

                        -     Secondary index      partitioning             local, global
                              index                .

                        -     General IOT            partitioned IOT   LOB or varray type
                                            .

                        -     partition maintenance           partition command
                                               .    , LOB               IOT
                              partition tablespace        ‘move’ command
                                   .

                        -     Tablespace drop LOB                           partition
                              tablespace                               overflow
                              tablespace                drop          table partition
                                           tablespace            error return         .
                              ORA-14404 : partitioned table contains partitions in a different
                              tablespace




jkspark@hanafos.com                              - 85 -
Oracle8i New Features                                                                http://www.ggola.com/




                                                -                            IOT partition

                                     SQL> drop table emp_iot ;
Test
                                     Table dropped.
            IOT     drop.
                                     SQL> alter session set nls_date_format = 'DD-MON-YYYY' ;
                                     Session altered.
Primary key name                     SQL> create table emp_of_iot (
       . including                     2       EMPNO NUMBER(4) not null,
                                       3       ENAME VARCHAR2(10),
           hiredate
                                       4       HIREDATE DATE,
overflow             .                 5       DEPTNO NUMBER(2),
Compress option                        6       constraint xpkemp_of_iot primary key(empno, hiredate))
      PK value                         7       organization index including hiredate
                    . (prefix          8       compress 1
PK columns                PK           9       overflow tablespace ts_emp6
columns       –1             )        10       partition by range(hiredate)
                                      11       ( partition p_iot1 values less than ('01-JAN-1999') tablespace ts_emp1
Default      nocompress
                                      12         overflow tablespace ts_emp5,
   compress      default              13       partition p_iot2 values less than ('01-JAN-2000') tablespace ts_emp2) ;
PK column         –1       .         Table created.

                                     SQL> select table_name, partition_name, tablespace_name
SYS_IOT_OVER_                           2 from user_tab_partitions
      overflow partition                3 where table_name in (select table_name from user_tables
       . EMP_OF_IOT                     4 where iot_name = 'EMP_OF_IOT')
tablespace                              5 or table_name = 'EMP_OF_IOT' ;
      IOT Table                      TABLE_NAME                           PARTITION_NAME      TABLESPACE
         .                           -------------------- -------------------- ----------
Index partition   table              SYS_IOT_OVER_42916 P_IOT2                            TS_EMP6
                                     SYS_IOT_OVER_42916 P_IOT1                            TS_EMP5
partition
                                     EMP_OF_IOT                         P_IOT1
             .                       EMP_OF_IOT                         P_IOT2
P_iot1 partition
tablespace ts_emp5                   SQL> select index_name, partition_name, tablespace_name
                                        2 from user_ind_partitions
              overflow
                                        3 where index_name = 'XPKEMP_OF_IOT' ;
table level                          INDEX_NAME                   PARTITION_NAME        TABLESPACE
ts_emp6                .             --------------- -------------------- ----------
                                     XPKEMP_OF_IOT                P_IOT2             TS_EMP2
                                     XPKEMP_OF_IOT                P_IOT1             TS_EMP1

                                     SQL> select segment_name, segment_type, tablespace_name
                                        2 from user_segments
IOT table                               3 where segment_name in (
storage                                 4 select table_name from user_tables
segment      overflow                   5 where iot_name = 'EMP_OF_IOT'
partition     IOT partition             6 union
       .                                7 select index_name from user_ind_partitions
                                        8 where index_name = 'XPKEMP_OF_IOT')
                                     SEGMENT_NAME                          SEGMENT_TYPE    TABLESPACE
                                     -------------------- ------------------ ----------
                                     SYS_IOT_OVER_42916 TABLE PARTITION                  TS_EMP6
                                     SYS_IOT_OVER_42916 TABLE PARTITION                  TS_EMP5
                                     XPKEMP_OF_IOT                       INDEX PARTITION TS_EMP2
                                     XPKEMP_OF_IOT                       INDEX PARTITION TS_EMP1




               jkspark@hanafos.com                                       - 86 -
Oracle8i New Features                                                              http://www.ggola.com/




                                    SQL> create table emp_of_iot2 (
                                      2     EMPNO NUMBER(4) not null,
                                      3     ENAME VARCHAR2(10),
                                      4     HIREDATE DATE,
                                      5     DEPTNO NUMBER(2),
                                      6     primary key(empno, hiredate))
                                      7     organization index
                                      8     overflow tablespace ts_emp3
                                      9     partition by range(hiredate)
                                     10     ( partition p_iot1 values less than ('01-JAN-1999') tablespace ts_emp1
PK name                              11       overflow tablespace ts_emp4,
IOT              . System            12     partition p_iot2 values less than ('01-JAN-2000') tablespace ts_emp2) ;
generated index name
SYS_IOT_TOP_Pnn                     Table created.
               .
                                    SQL> select index_name, partition_name, tablespace_name
                                      2 from user_ind_partitions
                                      3 where index_name in ( select index_name
                                      4 from user_indexes
                                      5 where table_name = 'EMP_OF_IOT2') ;

                                    INDEX_NAME                          PARTITION_NAME          TABLESPACE
                                    -------------------- -------------------- ----------
                                    SYS_IOT_TOP_42934                 P_IOT1               TS_EMP1
                                    SYS_IOT_TOP_42934                 P_IOT2               TS_EMP2

                                    SQL> select segment_name, segment_type, tablespace_name
                                      2 from user_segments
                                      3 where segment_name in (
                                      4 select table_name from user_tables
        LOB                           5 where iot_name = 'EMP_OF_IOT2'
                                      6 union
                     IOT              7 select index_name from user_indexes
partition       ts_emp2               8 where table_name = 'EMP_OF_IOT2') ;
              drop tablespace
command                             SEGMENT_NAME                          SEGMENT_TYPE          TABLESPACE
overflow partition                  -------------------- ------------------ ----------
ts_emp3, ts_emp4                    SYS_IOT_OVER_42934 TABLE PARTITION                      TS_EMP4
                                    SYS_IOT_OVER_42934 TABLE PARTITION                      TS_EMP3
                                    SYS_IOT_TOP_42934                   INDEX PARTITION     TS_EMP1
drop                   .
                                    SYS_IOT_TOP_42934                   INDEX PARTITION     TS_EMP2
                   IOT
partition       ts_emp1,            SQL> connect internal
ts_emp2                             Connected

error        return                 SQL> drop tablespace ts_emp2 including contents ;
         .                          drop tablespace ts_emp2 including contents
                                    *
                                    ERROR at line 1:
                                    ORA-14404: partitioned table contains partitions in a different tablespace



                                                -    IOT partition maintenance                   partition command
                                                                     .




                  jkspark@hanafos.com                                    - 87 -
Oracle8i New Features                                                                http://www.ggola.com/




              Object Type

                                            Object type partitioning

                                             -          Oracle8i       object table partitioning


                                             -    object type partitioning restriction :
                                                   nested partitioned table                   .
                                                   object type       , REF, nested table or VARRAY              partition
                                                  key                              .

                                             -    VARRAY                          LOB                     tablespace
                                                                            .      VARRAY
                                                  LOB
                                                  tablespace                                .       , table partition
                                                                   .

                                             -                                                  .
                                SQL> create type emp_type as object (
                                  2 empno number(4), ename varchar2(10), hiredate date) ;
                                  3 /
                                Type created.

                                SQL> select type_name, typecode from user_types ;

                                TYPE_NAME                   TYPECODE
                                --------------- ----------
                                EMP_TYPE                   OBJECT
Type
                                SQL> desc emp_type
partitioned object table
                                 Name                 Null? Type
         .                       ------------ ------ -------------
                                 EMPNO                             NUMBER(4)
                                 ENAME                             VARCHAR2(10)
                                 HIREDATE                          DATE

                                SQL> create table emp_obj_tp of emp_type
                                  2 partition by range (empno)
                                  3 (partition p_7000 values less than (8000) tablespace ts_emp1,
                                  4 partition p_8000 values less than (9000) tablespace ts_emp2,
                                  5 partition p_9000 values less than (maxvalue) tablespace ts_emp3) ;
                                Table created.

                                SQL> select table_name, partition_name, tablespace_name
                                  2 from user_tab_partitions
                                  3 where table_name = 'EMP_OBJ_TP' ;

                                TABLE_NAME                   PARTITION_NAME            TABLESPACE
                                --------------- -------------------- ----------
                                EMP_OBJ_TP                 P_7000                 TS_EMP1
                                EMP_OBJ_TP                 P_8000                 TS_EMP2
                                EMP_OBJ_TP                 P_9000                 TS_EMP3




               jkspark@hanafos.com                                      - 88 -
Oracle8i New Features                                                         http://www.ggola.com/




                                 SQL> select object_name, object_type, status
                                   2 from user_objects
                                   3 where object_id in ( select referenced_object_id
                                   4 from public_dependency where object_id in ( select object_id
                                   5 from user_objects where object_name = 'EMP_OBJ_TP')) ;

                                 OBJECT_NAME                          OBJECT_TYPE        STATUS
                                 -------------------- -------------------- -------
Sys user          view           EMP_TYPE                           TYPE              VALID
public_dependency
   object table                  SQL> create type emp_va_php_type as varray(10) of number(15) ;
dependency object type             2 /
                                 Type created.
                .
                                 SQL> select type_name, typecode from user_types ;

                                 TYPE_NAME                     TYPECODE
                                 ---------------- ------------
                                 EMP_TYPE                     OBJECT
                                 EMP_VA_PHP_TYPE COLLECTION

                                 SQL> desc emp_va_php_type
                                  emp_va_php_type VARRAY(10) OF NUMBER(15)

                                 SQL> create type emp_va_profile as varray(1000) of varchar2(4000) ;
                                   2 /
                                 Type created.

                                 SQL> select type_name, typecode from user_types ;
Collection type     varray
                                 TYPE_NAME                     TYPECODE
partitioned object table         ---------------- -----------
             .           type    EMP_TYPE                     OBJECT
   lob                           EMP_VA_PHP_TYPE COLLECTION
               .                 EMP_VA_PROFILE                COLLECTION

                                 SQL> desc emp_va_profile
                                  emp_va_profile VARRAY(1000) OF VARCHAR2(4000)

                                 SQL> create table emp_obj_coll_tp (
                                   2 empno number(4),
                                   3 ename varchar2(10),
                                   4 hiredate date,
                                   5 emp_phone emp_va_php_type,
                                   6 emp_profile emp_va_profile)
                                   7 varray emp_profile store as lob (storage (initial 1m next 1m))
                                   8 partition by range(empno)
                                   9 (partition p_7000 values less than (8000) tablespace ts_emp1
                                  10       varray emp_profile store as lob (storage (maxextents 1024)),
                                  11 partition p_8000 values less than (9000) tablespace ts_emp3
                                  12       varray emp_profile store as lob (storage (maxextents 2048)),
                                  13 partition p_9000 values less than (maxvalue) tablespace ts_emp5) ;

                                 Table created.




               jkspark@hanafos.com                                      - 89 -
Oracle8i New Features                                                               http://www.ggola.com/




                                    SQL> select table_name, partition_name, tablespace_name
                                      2 from user_tab_partitions
                                      3 where table_name = 'EMP_OBJ_COLL_TP' ;

                                    TABLE_NAME                   PARTITION_NAME TABLESPACE
                                    --------------- --------------- ----------
                                    EMP_OBJ_COLL_TP P_8000                     TS_EMP3
                                    EMP_OBJ_COLL_TP P_9000                     TS_EMP5
                                    EMP_OBJ_COLL_TP P_7000                     TS_EMP1

Table partition lob                 SQL> select table_name, partition_name, lob_partition_name, tablespace_name
                                      2 from user_lob_partitions
partition     tablespace
                                      3 where table_name = 'EMP_OBJ_COLL_TP' ;
                     .
dependency                          TABLE_NAME                          PARTITION_NAME              LOB_PARTITION_NAME
table    object type                TABLESPACE
       .                            --------------- --------------- -------------------- ----------
                                    EMP_OBJ_COLL_TP P_7000                               SYS_LOB_P217          TS_EMP1
                                    EMP_OBJ_COLL_TP P_8000                               SYS_LOB_P218          TS_EMP3
                                    EMP_OBJ_COLL_TP P_9000                               SYS_LOB_P219          TS_EMP5

                                    SQL> select object_name, object_type, status
                                      2 from user_objects
                                      3 where object_id in ( select referenced_object_id
                                      4 from public_dependency where object_id in ( select object_id
                                      5 from user_objects where object_name = 'EMP_OBJ_COLL_TP')) ;

                                    OBJECT_NAME                          OBJECT_TYPE          STATUS
                                    -------------------- -------------------- -------
                                    EMP_VA_PHP_TYPE                      TYPE               VALID
                                    EMP_VA_PROFILE                      TYPE                VALID



                                                -    partition maintenance                      partition command
                                                                      .

                                                -    Partitioned table             tablespace              drop
                                                                      partitioned table                 tablespace
                                                          partition                      drop                  ORA-
                                                     14404 error return           .




              jkspark@hanafos.com                                         - 90 -
Oracle8i New Features                                                                            http://www.ggola.com/




Parallel processing

                              Oracle8i                         parallel processing                                   .

                                           basic parallel processing                 Oracle8 New Features

                                                      .

                        Default degree of parallelism

                        -     Oracle         parallel degree
                                       .

                        -     SQL              hint                        parallel degree
                              degree                      .

                        -                                                      table or index
                              parallelism                          .

                        -                                            default degree
                                     .
                              1. Number of CPU X parallel_threads_per_cpu(parameter)
                              2. OPS     number of OPS instances in an MPP system
                              3. Number of partitions to be accessed

                        CF.       , parallel_max_servers                              degree
                              .

                        Enable parallel DML/DDL

                        -     parallel processing              initial parameter                  parallel DML
                                    enabling                                                 .           session
                              level                                    .

                        -     SQL> alter session ENABLE/DISABLE/FORCE parallel
                              DML/DDL (parallel n) ;
                              CF.             parallel query       .
                                  parallel query DML DDL                     .

                        -     FORCE : parallel clause                                                   default
                              parallel degree                                            .

                        -     Oracle8       parallel DML commit or rollback
                              parallel
                                    Oracle8i         parallel DML      object
                              parallel DML                                                                     .
                                , parallel DML                  object                                     read or
                              modify                       .




jkspark@hanafos.com                                       - 91 -
Oracle8i New Features                                                   http://www.ggola.com/




                        Check     Data dictionary

                        -   V$SESSION : PDML_ENABLED column
                                             parallel enabling session level
                                                          .

                        -   V$PQ_SYSSTAT : DML_INITATED             query
                            Select * From V$PQ_SYSSTAT; initialized parallel DML

                        -   V$PQ_SESSTAT : DML_PARALLELIZED              query
                            Select * From V$PQ_SESSTAT; current session parallel


                        Review general restriction of parallel processing

                        -   nonpartitioned table            parallel update or delete
                            (error return                     serially    )

                        -   You cannot read or modify the same tables after modifying it
                            in parallel.

                        -   You cannot read or modify the same tables after a serial direct
                            load INSERT.

                        -   Parallel DML issues exclusive locks.
                            (no lock table or select for update statement can be in the same
                            transaction as the parallel DML statement)

                        -   There is limited integrity constraint support.
                            1. no self-referential integrity
                            2. no delete cascade
                            3. no deferred integrity

                        -   LOB or object type or IOT           table        clustered
                            table          parallel DML                       .

                        -   Replication                         . Trigger enable
                                     Parallel DML statement serially
                            parallel DML                 trigger disable                 .
                                                 trigger              replication
                            functionality                             .

                        -   Distributed transaction                      . (serially
                                   )

                        -   Initial parameter ROW_LOCKING
                                                 .           DML          row     locking
                                                       default     always
                                   default         DML row level lock intent
                                                   table level lock                   .
                                     intent        table lock           parallel DML
                                          serial                     .




jkspark@hanafos.com                            - 92 -
Oracle8i New Features                                                    http://www.ggola.com/




                        Parallel transaction recovery

                        -   parallel DML           rollback parallel                                 .
                            user              rollback recovery                          .       ,
                            parallel           DML rollback parallel
                            transaction                    rollback                          .

                        -                , system or instance recovery large
                            transaction          recovery
                                             . PARALLEL_TRANSACTION_RECOVERY
                                  dynamic initialization                  parallel
                            transaction recovery                     .

                        -   PARALLEL_TRANSACTION_RECOVERY=
                            HIGH/LOW/FALSE (LOW is default)

                        -      parameter LOW or HIGH                           SMON
                            recovery             large transaction
                            parallel recovery    candidate                  .
                            parallel transaction recovery               SMON
                            coordinator        parallel recovery processes slave
                                              .

                        -      parameter      Oracle
                                        BETA release version(8.1.3, 8.1.4)
                                         .
                            CF. 13  Fast-Start parallel rollback                     .

                        -   parallel transaction        failed process recovery Oracle8
                                      .
                            1. Single slave fail          PMON                 rollback
                                              slave                          rollback
                                   .
                            2. Multiple slave fail           PMON serially          rollback
                                            .
                            3. Coordinator process fail           PMON coordinator
                            recover              all slave processes parallel
                                     rollback            .
                            4.          Process recovery time the forward work
                                                                     2
                                                                         .




jkspark@hanafos.com                             - 93 -
Oracle8i New Features                                                           http://www.ggola.com/




Partition-Wise join in parallel

                             Prior Oracle8i, parallel 2 tables join query
                             step pieces         scan and redistributed      join
                             column                       CPU or memory(or temporary
                             tablespace)                         .

                             Oracle8i        join key       partition table
                             join         (redistribution) skip
                             performance                       . ,
                                    temporary storage memory
                                  performance                                                 .(
                                    setting                        Oracle
                                      .)

                                   parallel execution                             .

                        Full partition-wise join

                        -   Equip partitioned tables      join join columns
                            partitioned key          table partition     join
                                   .

                        -          tablespace       equipartition                             local
                            disk                                        .

                        Partial partition-wise join

                        -   join column            table partition
                                     .(              partition table or original table
                                     )

                        -   join column partition key                                 table
                                      redistribution                        .

                        CF. Oracle supports partition-wise joins on range, hash or
                        composite partitioned tables




jkspark@hanafos.com                             - 94 -
Oracle8i New Features                                                    http://www.ggola.com/




Added parallel information

                        New parameter
                        -     PARALLEL_AUTOMATIC_TUNING=TRUE/FALSE
                              parallel execution default degree Oracle
                              automatically control                             ’TRUE’
                              setting            . , Default degree
                              Oracle                                  .
                                  parameter     TRUE
                              1. A load balancing algorithm will be used which will evenly
                              distributed load across nodes in a multi-instance PQ
                              environment.
                              2. Oracle allocates parallel execution buffers from the large
                              pool. (FALSE      allocates memory from the shared pool)

                        -     PARALLEL_ADAPTIVE_MULTI_USER=TRUE/FALSE
                                 parameter     enables adaptive setting of the degree of
                              parallelism.
                                             parallel_automatic_tuning ‘TRUE’
                              parameter ‘TRUE’             system load
                              degree of parallelism             .

                        -     PARALLEL_THREADS_PER_CPU=n
                                parameter default degree of parallelism
                                          parallel adoptive algorithm
                                               .

                        -     Profile                     DEGREE_OF_PARALLELISM
                                        database resource limit                .
                                           user            maximum degree of parallelism
                                                       .(        )

                            Dynamic performance views

                        -     V$PX_PROCESS : running parallel execution session         process
                              information

                        -     V$PX_PROCESS_SYSSTAT : v$px_process           parallel statistic

                        -     V$PX_SESSION : running parallel execution       session
                              information

                        -     V$PX_SESSTAT : v$px_session and v$sesstat table       joined
                              information for parallel execution




jkspark@hanafos.com                               - 95 -
Oracle8i New Features                                                   http://www.ggola.com/




9. Universal Installer Migration and Upgrade


Universal Installer

                                     Oracle8i New Features          .


                        Universal Installer

                        -         platform                     JAVA based installer
                            GUI               install           .

                        -   Any customer can use the Software Packager to create
                            installable third-party components for oracle.

                        -   Performing install from one location to several geographical
                            regions : Web Install Feature

                        Database Configuration Assistant

                        -   Database configuration assistant

                        -   Database creation(remote machine       )     database
                            creation scripts                 easy parameter setting

                        -   This is very useful for creating multiple database with the
                            same configuration.

                        -   Run in silent mode
                             1. GUI       OS command line
                                        batch script
                             2. allows easy creation of multiple identical database

                        -   Hardware detection and interview
                            1. File system, RAM
                            2. number of users,
                            3. database processing environment : OLTP, DSS..



Migration

                                          Oracle8i New Features
                                            Review      .

                        What is changed ?

                        -   migration         upgrade
                            1. modify, add base tables and v$tables : data dictionary and
                            structures




jkspark@hanafos.com                             - 96 -
Oracle8i New Features                                                       http://www.ggola.com/




                             2. modify datafile header blocks
                             3. change rollback segment format
                             4. control file recreation

                        Migration basic step
                        -    Migration type
                             1. export / import
                             2. copy command
                             3. migration utility
                                3.1 command line migration utility
                                3.2 GUI data migration assistant

                        -    Steps
                             1. prepare to migrate :
                                 migration type       , system resource
                             2. secure the required resources : resource
                             3. build a test plan : (OUTLN                    user or role drop)
                                 migration test, minimal test, functional test,
                                 integration test, performance test, volume/load stress test
                             4. preserve the source database :
                                 database normal shutdown
                                 cold backup
                             5. migrate the source database :
                                 Oracle8i install
                                          parameter           or
                                 migration          (         migration type          )
                             6. postmigration task :
                                 shutdown normal
                                 oracle8i cold backup
                                          script      (.sql file, recompile invalid objects )
                                 startup

                        CF. Migration utility      database                           .(
                        database rebuild)

                        CF. $ORACLE_HOME/rdbms/admin/utlrp.sql
                        upgrade             invalid PL/SQL block modules
                        recompile      .

                        Upgrade 8 to 8i
                        1.   8.0.4S --> upgrade 8.0.5 and upgrade 8.1

                        2.   8.0.3, 8.0.4, 8.0.5, 8.0.6 --> upgrade 8.1 directly




jkspark@hanafos.com                               - 97 -
Oracle8i New Features                                                            http://www.ggola.com/




10. Tablespace Management


Extended Rowid

                            Oracle8 New Features                            review             .

                                          files                         rowid
                            (         rowid                   files                        )

                                  1022                     tablespace     1022

                            partition object               data object id

                        Rowid Type

                        -   Restricted : BBBBBBBB.RRRR.FFFF
                                        (Block    Row File)
                            16                      6 bytes

                        -   Extended : OOOOOO.FFF.BBBBBB.SSS
                                 (data Object relative File Block               Slot)
                            64                       10 bytes

                        DBMS_ROWID package check

                        Functions :

                        -   ROWID_TO_EXTENDED : old rowid                       new rowid

                        -   ROWID_TO_RESTRICTED : new rowid                       old rowid

                        -   ROWID_VERIFY :                          old rowid
                            ROWID_TO_EXTENDED                  convert

                        -   ROWID_TYPE : rowid              old type            new type

                        -   ROWID_TO_ABSOLUTE_FNO : relative file number

                        -   ROWID_OBJECT : object id return

                        -   Others : ROWID_RELATIVE_FNO,
                            ROWID_BLOCK_NUMBER, ROWID_ROW_NUMBER

                        Procedures :

                        -   ROWID_INFO : rowid

                        -   ROWID_CREATE : rowid                         test




jkspark@hanafos.com                               - 98 -
Oracle8i New Features                                                 http://www.ggola.com/




Locally-Managed tablespaces

                                       tablespace dictionary managed tablespace
                            extent         DD          .
                                     extent allocation            DD update
                                         system tablespace access  rollback segment
                                            .

                        Locally Managed (Oracle8i New Features)

                        -   tablespace   extent        local datafile
                                         bitmaps               datafile            .
                                    DD          access              (system tablespace
                            access reduced) uniform size               fragmentation
                                              .

                        -   Space management data dictionary          datafile
                            bitmaps                       .
                             1. extent allocation resources DD access     bitmaps
                                             database-wide contention
                             2.           SYSTEM tablespace
                                             system tablespace
                             3. rollback segment

                        -   SYSTEM tablespace                   tablespaces
                               .

                        Locally managed general tablespace

                        SQL> create tablespace ts_local_nis_d datafile
                             '/u01/local/data/nis_fin01.dbf' size 50M
                             extent management local uniform size 2M ;

                        Tablespace created.

                        -   AUTOALLOCATE keyword                          UNIFORM
                                             (                   autoallocate default
                                ) storage          initial size        (initial extent
                            must be at least 64KB)                other extents system
                            automatically size               system-managed space
                                   .

                        CF. Locally             default storage                .
                            , tablespace                        permanent/temporary
                        option temporary option                     .(
                                create temporary tablespace command
                                 )

                        CF. UNIFORM size      default    1M      .




jkspark@hanafos.com                           - 99 -
Oracle8i New Features                                                http://www.ggola.com/




                        Locally managed temporary tablespace
                        SQL> create temporary tablespace ts_temp tempfile
                             ’ /u01/local/temp/nis_temp01.dbf' size 100M
                             extent management local
                             uniform size 1M ;

                        Tablespace created.

                        -   Oracle recommend               locally management
                            tablespace                              temporary
                            tablespace                              .

                        -          temporary tablespace
                            temporary option locally managed temporary tablespace
                                                  ‘create temporary tablespace’
                            command                  . Command       “tempfile”
                            option           .

                        CF.                   tablespace           locally managed
                        tablespace                                    .

                        CF. Oracle 8.1.5 Manual          System tablespace locally
                        managed                   tablespace dictionary managed
                        tablespace               . ,                rollback segment
                                  tablespace         locally managed
                             .( ,               RBS extent                 system
                        tablespace                                       )

                        CF.                            Oracle
                        “Locally managed system tablespaces are simply not yet possible.”




jkspark@hanafos.com                           - 100 -
Oracle8i New Features                                                            http://www.ggola.com/




Data transportation

                        Transportable tablespaces

                        -    OLTP       staging area (or          DW)         DW                    Data
                             marts data                    point-in time recovery,
                             distributed relational data, archive historical data
                                                     .

                        -    Export / Import                       tablespaces       copy             .

                        Procedure
                        1.   tablespace read-only

                        2.   export metadata

                        3.   copy data files

                        4.   transfer export dump file

                        5.   import metadata

                        6.   tablespace read-write (if you want)

                        Checking factors

                        1.   Datafile                   O/S                      .

                        2.   Oracle version 8.1                            .

                        3.   LOB        table                       .

                        4.   Block size and character set                            .

                        5.         tablespace           object            tablespace
                             object                                        move or exchange
                             partition command                    tablespace
                                     .
                             (all partition                   tablespace                        )

                        6.   Table       nested tables or varray                            bitmap
                             index       transport            .

                        Checking availability

                        -    Tablespace         transportable
                             package                         .

                        -    DBMS_TTS.TRANSPORT_SET_CHECK command
                                  . (example  )




jkspark@hanafos.com                                 - 101 -
Oracle8i New Features                                                                       http://www.ggola.com/




                                           Example

                                           -                                           tablespace transportation
                                                                                       .
                               O/S System_A

                               $ sqlplus internal
                               Connected.

                               SQL> create tablespace ts_trans datafile '/u01/trans/ts_trans01.dbf' size 10M ;
                               Tablespace created.

                               SQL> conn scott/tiger
                               Connected.

                               SQL> create table emp_trans tablespace ts_trans
                                 2 as select * from emp where rownum < 100 ;
                               Table created.

                               SQL> select table_name, tablespace_name from user_tables
                                  2 where table_name = 'EMP_TRANS' ;
                               TABLE_NAME                TABLESPACE_NAME
                               ------------------------- ------------------------------
                               EMP_TRANS                  TS_TRANS

                               SQL> select count(*) from emp_trans ;
                                  COUNT(*)
                               ----------
Package          check                    99
tablespace
             .                 SQL> connect internal
                               Connected.

                               SQL> exec dbms_tts.transport_set_check('TS_TRANS',TRUE) ;
                               PL/SQL procedure successfully completed.

                               SQL> select * from transport_set_violations ;
                               no rows selected

                               SQL> alter tablespace ts_trans read only ;
                               Tablespace altered.

                               SQL> exit


                                           -       transport_set_check                tablespace
                                                                   transport_set_violations view
                                                                                       row      session
                                                level                .(    session                      )

                                           VIOLATIONS
                                           --------------------------------------------------------------------------------
                                           Partitioned table SCOTT.EMP_OBJ_COLL_TP is partially
                                           contained in the transportable set: check table partitions by
                                           querying sys.dba_tab_partitions ……..




             jkspark@hanafos.com                                         - 102 -
Oracle8i New Features                                                              http://www.ggola.com/




                                           -          export                  system                   import

                                $ exp file=/u01/trans/exp_tbs_trans.dmp 
                                > log=/u01/trans/exp_tbs_trans.log tablespaces=ts_trans 
                                > transport_tablespace=y

                                Export: Release 8.1.6.2.0 - Production on Thu Aug 23 16:03:31 2001

                                (c) Copyright 1999 Oracle Corporation.    All rights reserved.

                                Username: sys as sysdba
                                Password: change_on_install

                                Connected to: Oracle8i Enterprise Edition Release 8.1.6.2.0 - Production
                                ……..
                                . exporting cluster definitions
                                . exporting table definitions
                                . . exporting table                         EMP_TRANS
                                …….
                                Export terminated successfully without warnings.

                                O/S System_B

                                $ ftp system_A
                                Connected to system_A.
                                ….
                                ftp> bi
                                200 Type set to I.
                                ftp> get exp_tbs_trans.dmp
                                …
                                226 Transfer complete.
                                ftp> get ts_trans01.dbf
                                …
                                226 Transfer complete.
                                ftp> quit
Datafile     export dump        221 Goodbye.
file   ftp
import                   .      $ imp file=exp_tbs_trans.dmp 
                                > log=/u01/trans/imp_tbs_trans.log transport_tablespace=y 
                                > datafiles=/u01/trans/ts_trans01.dbf

                                Import: Release 8.1.6.2.0 - Production on Thu Aug 23 16:17:43 2001

                                (c) Copyright 1999 Oracle Corporation.    All rights reserved.

                                Username: sys as sysdba
                                Password: change_on_install

                                Connected to: Oracle8i Enterprise Edition Release 8.1.6.2.0 – Production
                                …
                                . importing SYS's objects into SYS
                                . importing SCOTT's objects into SCOTT
                                . . importing table                       "EMP_TRANS"
                                Import terminated successfully without warnings.




              jkspark@hanafos.com                                   - 103 -
Oracle8i New Features                                                                     http://www.ggola.com/




                                            -    import                                          .
                                $ sqlplus internal

                                SQL> select tablespace_name, file_name from dba_data_files
                                  2 where tablespace_name = 'TS_TRANS' ;

                                TABLESPACE FILE_NAME
                                ---------- ------------------------------
                                TS_TRANS /u01/trans/ts_trans01.dbf
Import     System B             SQL> conn scott/tiger
   tablespace ts_trans          Connected.
creation
tablespace       object         SQL> select table_name, tablespace_name from user_tables
data          System A            2 where table_name = 'EMP_TRANS' ;
System B
                                TABLE_NAME                  TABLESPACE
             .
                                --------------------------- ----------
                                EMP_TRANS                   TS_TRANS

                                SQL> select count(*) from emp_trans ;

                                   COUNT(*)
                                ----------
                                           99

                                SQL> connect internal
                                Connected.
                                SQL> alter tablespace ts_trans read write ;

                                Tablespace altered.


                                            -                       System B                 emp_trans table
                                                 write                                 tablespace
                                                                                   .

                                            CF. import     fromuser, touser options                         schema that
                                            owns the object in transported tablespace                another schema
                                                         .

                                            Read-Only tablespace

                                            -    read only                              tablespace          active
                                                 transaction
                                                                               .

                                            -      , current transaction                             waiting         read-
                                                 only                 .

                                            CF. shutdown normal                                         .




              jkspark@hanafos.com                                    - 104 -
Oracle8i New Features                                                     http://www.ggola.com/




11. Database resource manager


Resource management

                             DBA     resource management                   resource     control
                                      resource                                   .

                             DBA resource plan                  plan
                             consumer group, resource allocation method, resource plan
                             directives                          resource
                                  .

                                                                      Oracle user   resource
                                                           Oracle8i    New Features    .

                        EX. daytime resource plan

                        Resource consumer group          Allocation method parameters
                        OLTP                             CPU=70%
                                                         Degree of parallelism = 0
                        DW                               CPU=30%
                                                         Degree of parallelism = 18

                        Resource management factors

                        -   resource consumer group : plan                resource
                            user      group

                        -   resource plan : CPU time parallel query resources
                                     .        resource plan       resource plan
                                                .
                            DBA DB shutdown            plan switch             .
                            EX.             daytime plan nighttime plan       switch
                               database restart             .

                        -   resource plan directives :
                            1. assign consumer groups or subplans to resource plans
                            2. allocate resources among consumer groups or subplans

                        Resource allocation method

                        -    CPU usage :
                             1. level 1 to level 8
                             2. percentages specifying how to partition CPU at each level

                        -    Degree of parallelism : maximum degree of parallelism




jkspark@hanafos.com                            - 105 -
Oracle8i New Features                                                     http://www.ggola.com/




                        Resource consumer groups

                        -       session             group               active       .

                        -    Users           consumer groups                     .

                        -    Default group     login              .

                        -    Session level      user or DBA can switch consumer group



Steps in Database Resource Management

                        Steps for database resource management creation
                        1.   create resource plan

                        2.   create resource consumer groups

                        3.   create resource plan directives

                        4.   assign users to consumer groups

                        5.   specify plan to be used by an instance

                        Packages for DB resource manager
                        -    DBMS_RESOURCE_MANAGER :
                             1. define plans and classes, plan entries
                             2. define the default class for a user
                             3. alter the class for currently connected user

                        -    DBMS_RESOURCE_MANAGER_PRIVS
                             1. grant and revoke classes to users
                             2. switch the class for a session

                        Create resource plan
                        -    DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA ;
                             pending area :
                             1. store new resource manager plans, consumer groups and
                             resource plan directives
                             2. changes before they are committed.

                        -    DBMS_RESOURCE_MANAGER.CREATE_PLAN (
                             ’daytime’, ‘from 15 to 19’) ;
                             ==> ‘plan name’, ‘comment for this plan’
                             CF. database creation default SYSTEM_PLAN
                             plan               .




jkspark@hanafos.com                             - 106 -
Oracle8i New Features                                                    http://www.ggola.com/




                        -   Privileges needed to manage resources
                            1. administer_resource_manager :
                               package for dbms_resource_manager
                            2.                           grant_system_privilege and
                            revoke_system_privilege             .
                            EX. DBMS_RESOURCE_MANAGER_PRIVS.
                                 GRANT_SYSTEM_PRIVILEGE(‘scott’, admin_option =>
                            TRUE) ;
                            ==> ‘username’, with ADMIN_OPTION


                        Creating resource consumer groups
                        -   DBMS_RESOURCE_MANAGER.
                            CREATE_CONSUMER_GROUP (‘oltp’, ‘online job working’) ;
                            ==> ‘group name’, ‘comment for group’

                        -   Database                           group
                            1. SYS_GROUP : SYSTEM_PLAN high priority
                                            for ‘SYS’ and ‘SYSTEM’ users
                            2. LOW_GROUP : low priority group in SYSTEM_PLAN
                            3. DEFAULT_CONSUMER_GROUP :
                                            assigned to all users(PUBLIC) by default
                            4. OTHER_GROUPS : a part of every plan
                            group            plan other_groups            directives
                                        .              plan              each top-plan
                                  other_groups          directive           .
                            (                          example             .)

                        Create resource plan directives

                        -   DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE
                            (‘daytime’, ‘olpt’, ‘rule for oltp job’, cpu_p1 => 70,
                            parallel_degree_limit_p1 => 18) ;
                            ==> ‘plan name’, ‘group name’, ‘comment for directive’, ‘CPU
                            level 1’, ‘parallel degree’

                        -   cpu_p2                       multi level    CPU
                                           ?

                        -     ,              level1    OLTP DW                 70:30
                                        level2      DSS Web 40:60
                                  . Level2           CPU
                                         .

                        -         system             load                     cpu     80%
                                                   .           level2               20%
                                              level2            cpu
                                   . , CPU               level                          %
                                   . Priority level             %
                                        .




jkspark@hanafos.com                            - 107 -
Oracle8i New Features                                                     http://www.ggola.com/




                        Confirming resource management

                        -                              resource factors        pending area
                                                          validate and confirm        resource
                            factors                .

                        -          : DBMS_RESOURCE_MANAGER.
                                             VALIDATE_PENDING_AREA ;
                            1. all consumer groups referred to in the plans created or
                            changed exist
                            2. plans have directives that reference other plans or consumer
                            groups
                            3. plans do not reference themselves either directly or
                            indirectly
                            4. the sum of CPU percentages defined for a specific level
                            within a plan do not exceed 100
                            5. a plan that is currently used is not deleted

                        -   implicitly validate and commit :
                            DBMS_RESOURCE_MANAGER.
                                    SUBMIT_PENDING_AREA ;

                        Assign users to consumer groups
                        -   assign user or role to consumer group
                            (    package           user or role       consumer group
                                                 )
                            DBMS_RESOURCE_MANAGER_PRIVS.
                            GRANT_SWITCH_CONSUMER_GROUP
                            (‘scott’, ‘oltp’, FALSE)
                            ==> ‘user or role’, ‘group name’, with GRANT option

                        -             scott user    consumer group              .
                                               user         group
                            session      active group                    . ,
                                                          application
                                                                    DBA Initial
                            consumer group for users (       group assign
                            user            default           group)
                                  session level      group                                    .

                        -              scott user          oltp group
                                        .
                            DBMS_RESOURCE_MANAGER.
                            SET_INITIAL_CONSUMER_GROUP(‘scott’,’oltp’) ;

                        -                  session level               consumer group
                                                               .




jkspark@hanafos.com                                - 108 -
Oracle8i New Features                                                  http://www.ggola.com/




                        Changing consumer group within a session

                        -                                          group           session
                            user                                           .

                        -   user or application level   (PL/SQL block    )
                            DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP
                            (‘oltp’, old_group) ;
                            ==> ‘new group’, old group (output variable)

                        -   DBA
                            DBMS_RESOURCE_MANAGER.
                            SWITCH_CONSUMER_GROUP_FOR_SESS
                            (453, 23412, ‘oltp’) ;
                            ==> sid, serial#, ‘group name’

                        -   DBA             all sessions for a user
                            DBMS_RESOURCE_MANAGER.
                            SWITCH_CONSUMER_GROUP_FOR_USER
                            (‘scott’, ‘oltp’) ;
                            ==> ‘username’, ‘group name’

                        How to set resource plan for an instance

                        -   Specify plan for initial parameter :
                            resource_manager_plan=daytime

                        -   Change plan without shutdown and restart :
                            alter system set resource_manager_plan=nighttime

                        -   Initial parameter   setting plan
                            database open               error return                .
                                          resource plan                          parameter
                                            shutdown and restart               .    parameter
                                default value null      .

                        Data dictionary

                        >> RESOURCE MANAGER INFORMATION

                        -   DBA_RSRC_PLANS : resource plans and status

                        -   DBA_RSRC_PLAN_DIRECTIVES : resource plan directives
                            and status

                        -   DBA_RSRC_CONSUMER_GROUPS : consumer groups and
                            status

                        -   DBA_RSRC_CONSUMER_GROUP_PRIVS : users granted
                            consumer groups

                        -   DBA_USERS : new column ‘initial_rsrc_consumer_group’




jkspark@hanafos.com                            - 109 -
Oracle8i New Features                                                              http://www.ggola.com/




                                               >> CURRENT SETTINGS

                                               -   V$SESSION : new column ‘resource_consumer_group’

                                               -   V$RSRC_PLAN : showing the active resource plan

                                               -   V$RSRC_CONSUMER_GROUP : showing the number of
                                                   active sessions by consumer group and wait/yield statistics

                                               Example

                                               -                                                               plan,
                                                   group, directive     resource management               .
                                    $ sqlplus internal
                                    SQL> select plan, group_or_subplan, type from dba_rsrc_plan_directives ;
                                    PLAN                      GROUP_OR_SUBPLAN                         TYPE
                                    --------------- ------------------------------ --------------
                                    SYSTEM_PLAN SYS_GROUP                                  CONSUMER_GROUP
                                    SYSTEM_PLAN OTHER_GROUPS                               CONSUMER_GROUP
                                    SYSTEM_PLAN LOW_GROUP                                  CONSUMER_GROUP

                                    SQL> select * from dba_rsrc_consumer_group_privs ;
                                    GRANTEE             GRANTED_GROUP                  GRA INI
                                    ---------- ------------------------------ --- ---
                                    PUBLIC            DEFAULT_CONSUMER_GROUP YES NO
                                    PUBLIC            LOW_GROUP                         NO NO
                                    SYSTEM              SYS_GROUP                      NO YES

                                    SQL> exec dbms_resource_manager.create_pending_area ;
                                    PL/SQL procedure successfully completed.

       6                            SQL> exec dbms_resource_manager.create_plan('daytime', 'oltp from 15 to 19') ;
   plan set             .           PL/SQL procedure successfully completed.
Pending area --> Plan -->
Group --> Directive -->             SQL> exec dbms_resource_manager.create_consumer_group('oltp', 'online job
                                    working') ;
Check(validate) -->
                                    PL/SQL procedure successfully completed.
Commit(submit) ;
             plan                   SQL> exec dbms_resource_manager.create_plan_directive('daytime', 'oltp', 'rule
other_groups                        for oltp job', cpu_p1 => 70, parallel_degree_limit_p1 => 18 ) ;
         .                          PL/SQL procedure successfully completed.

                                    SQL> exec dbms_resource_manager.validate_pending_area ;
                                    BEGIN dbms_resource_manager.validate_pending_area ; END;
                                    *
                                    ERROR at line 1:
                                    ORA-29382: validation of pending area failed
                                    ORA-29377: consumer group OTHER_GROUPS is not part of top-plan
                                    DAYTIME
                                    ORA-06512: at "SYS.DBMS_RMIN", line 55
                                    ORA-06512: at "SYS.DBMS_RESOURCE_MANAGER", line 254
                                    ORA-06512: at line 1




              jkspark@hanafos.com                                      - 110 -
Oracle8i New Features                                                               http://www.ggola.com/




                                      SQL> exec dbms_resource_manager.create_plan_directive('daytime',
                                      'other_groups', 'other groups for daytime users', cpu_p1 => 0,
                                      parallel_degree_limit_p1 => 0 ) ;
                                      PL/SQL procedure successfully completed.

                                      SQL> exec dbms_resource_manager.validate_pending_area ;
                                      PL/SQL procedure successfully completed.
                                      SQL> exec dbms_resource_manager.submit_pending_area ;
other_groups                          PL/SQL procedure successfully completed.
            commit
                              .       SQL> select plan, group_or_subplan, type from dba_rsrc_plan_directives ;
       OLTP group                     PLAN                      GROUP_OR_SUBPLAN                            TYPE
other_groups                  .       --------------- ------------------------------ --------------
                                      DAYTIME                  OTHER_GROUPS                       CONSUMER_GROUP
                                      SYSTEM_PLAN SYS_GROUP                                       CONSUMER_GROUP
                                      SYSTEM_PLAN OTHER_GROUPS                                    CONSUMER_GROUP
                                      SYSTEM_PLAN LOW_GROUP                                       CONSUMER_GROUP
                                      DAYTIME                  OLTP                               CONSUMER_GROUP
Grant           scott user
                                      SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group('scott',
          consumer group              'oltp', FALSE) ;
                      .(              PL/SQL procedure successfully completed.

                   .)                 SQL> exec dbms_resource_manager.set_initial_consumer_group('scott', 'oltp') ;
                                      PL/SQL procedure successfully completed.

                                      SQL> select username, initial_rsrc_consumer_group from dba_users
                                         2 where username = 'SCOTT' ;
                                      USERNAME                INITIAL_RSRC_CONSUMER_GROUP
                                      -----------------------------------------
                                      SCOTT                 OLTP                     Scott user
                                                                                         session B                 .
                session B             $ sqlplus scott/tiger
                                                                                     Internal
                                      Connected.
                                                                                     session     A            .
                session A             SQL> select sid, serial#, username, resource_consumer_group
                                         2 from v$session where username= 'SCOTT' ;
                                                 SID        SERIAL# USERNAME RESOURCE_C
                                      ---------- ---------- --------- ----------
                                                  11          18058 SCOTT             OLTP
                session B             SQL> set serveroutput on
                                      SQL> declare
                                         2 v_old_group                 varchar2(30) ;
                                         3 begin
                                         4 dbms_session.switch_current_consumer_group('default_consumer_group',
                                      v_old_group, false) ;
                                         5 dbms_output.put_line(v_old_group) ;
Session         group                    6* end;
                 . Resource              7/
manager        off                    declare
           .                          *
                                      ERROR at line 1:
                                      ORA-29373: resource manager is not on
                                      ORA-06512: at "SYS.DBMS_SESSION", line 74
                                      ORA-06512: at line 4




                jkspark@hanafos.com                                      - 111 -
Oracle8i New Features                                                            http://www.ggola.com/




                                                -    Session level     group           dbms_session package
                                                               error             .

                                                -            initial parameter resource_manager_plan
                                                             resource manager      off                  .
                                                     alter system command plan
                                                         parameter               resource manager on
                                                          .
                                   SQL> select * from v$rsrc_plan ;
              session B
                                   no rows selected

              session A            SQL> SQL> alter system set resource_manager_plan = 'daytime' ;
                                   System altered.

              session B            SQL> select * from v$rsrc_plan ;

Resource manager                   NAME
turned on                          --------------------------------
                                   daytime

                                   SQL> set serveroutput on
                                   SQL> declare                                       New Group Name
                                     2 v_old_group          varchar2(30) ;
                                     3 begin
                                     4 dbms_session.switch_current_consumer_group('default_consumer_group',
Current session
                                   v_old_group, false) ;
consumer group                       5 dbms_output.put_line(v_old_group) ;
              .                      6* end;
                                     7/                                    session
                                                                      group          .
                                   OLTP

                                   PL/SQL procedure successfully completed.

                                   SQL> select sid, serial#, username, resource_consumer_group
              session A               2 from v$session where username= 'SCOTT' ;
                                              SID        SERIAL# USERNAME RESOURCE_C
                                   ---------- ---------- --------- ----------
         group
                                               11          18058 SCOTT        DEFAULT_CONSUMER_GROUP

                                                -
                                                              .

       delete_plan procedure                    1. alter system set resource_manager_plan = ‘’ ;
                   subplan or                   2. dbms_resource_manager_privs.revoke_switch_consumer_group
             consumer groups                    ('scott', 'oltp') ;
                                                3. dbms_resource_manager.create_pending_area ;
                   .
                                                4. dbms_resource_manager.delete_plan_cascade('daytime') ;
       delete_plan_cascade
                                                5. dbms_resource_manager.submit_pending_area ;
       drop       . (plan, directives,
                                                CF. plan drop                                  package
       subplan, consumer group)
                                                update_plan, update_consumer_group, update_plan_directive,
       delete_plan      plan
                                                delete_consumer_group, delete_plan_directive            .
       directives      delete      .




             jkspark@hanafos.com                                       - 112 -
Oracle8i New Features                                                         http://www.ggola.com/




12. Manageability Features


Database limits

                        Oracle8 and Oracle8i database limits

                        -   Oracle8 New Features            review

                        Columns per table                        1,000

                        Columns per index                        32

                        CAHR, NCHAR                              2,000 bytes

                        VARCHAR2, NVARCHAR2                      4,000 bytes

                        CLOB, BLOB, BFILE                        4GB

                        Tablespaces per database                 65,533

                        Datafiles per tablespace                 1,022

                        Datafiles per database                   65,533

                        -   only one LONG column per table

                        -   index      define column                       total size database
                            block           40%                              bitmapped index
                                    index   30                         .

                        -   Tablespace      limit 65,533              tablespace     1
                            datafile                             .

                        -   Tablespace    datafile         O/S               1,022
                                .

                        -   Datafile          initial parameter DB_FILES                         .




jkspark@hanafos.com                              - 113 -
Oracle8i New Features                                                      http://www.ggola.com/




Move Table

                        Relocating and Reorganizing a Table
                        SQL> alter table emp move tablespace ts_new_emp ;

                        -   builds new segments and drops old segments

                        -   used to move table to a different tablespace or reorganize
                            extents

                        -   limits
                            1. non-partitioned table only (partitioned table           error)
                            2. move only select available and no DML
                            3. index, constraints and grant                          data
                                         index status UNUSABLE
                                           .
                            4. new segment                         export and import
                                                table   2 space                 .



Remove Column

                        Marking a column as unused
                        SQL> alter table table_name set unused column column_name ;

                        -   table  column             command     users
                            column                                  data
                                                                               disk space
                                        .

                        -                   unused column                           physically
                            remove              .

                        -   user     unused column                         column
                                            .

                        -   Unused column                 table export    drop and
                            import                           table     unused column
                                                  .

                        SQL> select * from dba_unused_col_tabs ;
                                         unused column information                          .




jkspark@hanafos.com                             - 114 -
Oracle8i New Features                                                         http://www.ggola.com/




                        Removing a column from table
                        SQL> alter table table_name drop column column_name [cascade
                        constraints] ;

                        -      command                          unused mark
                            column drop                    .(   space release)        , large
                            table                           command
                                  .

                        -            column             ‘UNUSED’             mark
                            column                   command                        drop        .

                        -   cascade constraints : drop          column                 all
                            constraints drop      .

                        SQL> alter table table_name drop unused columns ;

                        -        table              removes all currently marked as unused

                        CF. dropped column                    object , views, triggers and
                        stored procedure units            status invalidate            .

                        CF. dropped column                           index    always drop
                        automatically

                        Minimizing rollback segment usage
                        SQL> alter table table_name drop column columns_name
                        [ checkpoint 1000 ] ;

                        -   DDL           rollback segment                       checkpoint
                            option               row                    commit
                                .

                        -                1000 row          checkpoint                           .

                        -   Checkpoint                            table             drop
                                          rollback space                                .

                        -                 instance failure
                                                             table     INVALID state                .

                        -                         command                       .
                            SQL> alter table table_name drop columns continue ;




jkspark@hanafos.com                             - 115 -
Oracle8i New Features                                                               http://www.ggola.com/




                               Example

                               -   emp table             test                  emp_test
                                      .
                                   SQL> desc emp_test
                                    Name                 Null?      Type
                                    ------------ -------- -----------
                                    EMPNO                 NOT NULL NUMBER(4)
                                    ENAME                                VARCHAR2(10)
                                    SAL                                  NUMBER(7,2)
                                    COMM                                 NUMBER(7,2)
                                    DEPTNO                               NUMBER(2)

                                   SQL> alter table emp_test drop column deptno
                                     2 cascade constraints checkpoint 1000 ;

                                   Table altered.
     constraints        drop
                                   SQL> desc emp_test
     1000 row                       Name                 Null?      Type
 commit                 column      ------------ -------- -----------
                                    EMPNO                 NOT NULL NUMBER(4)
                                    ENAME                                VARCHAR2(10)
                                    SAL                                  NUMBER(7,2)
                                    COMM                                  NUMBER(7,2)


                                   SQL> alter table emp_test set unused column comm ;

                                   Table altered.

                                   SQL> select * from user_unused_col_tabs ;

                                   TABLE_NAME                          COUNT
       unused                      -----------------------
                                   EMP_TEST                              1
         unused columns
                                   SQL> desc emp_test
                                    Name                 Null?      Type
                                    ------------ -------- -----------
                                    EMPNO                 NOT NULL NUMBER(4)
                                    ENAME                                VARCHAR2(10)
                                    SAL                                  NUMBER(7,2)

                                   SQL> alter table emp_test drop unused columns ;

                                   Table altered.

                                   SQL> select * from user_unused_col_tabs ;

                                   no rows selected




jkspark@hanafos.com                                          - 116 -
Oracle8i New Features                                                        http://www.ggola.com/




Temporary tables

                        Application                        global temporary table

                        -     temporary table            data (DML           ) session
                              visible    truncate command                       . , table
                                           transaction or session termination data
                                       drop      .

                        CF.        ,            session          instance crash            data
                                       drop   . (temporary           )

                        -     transaction or session          data              . (index
                                           index                        Index data                )

                        -     Table definition               definition      all session
                                     . (definition     export/import          )

                        -     Session sort space       data
                              user’s temporary tablespace                         .

                        -     Permanent tables            view                        temporary
                              table       triggers                      .

                        -     Recovery data                   redo entries
                              DML     rollback segment                .


                        Creating and Monitoring with sample
                        SQL> create global temporary table table_name
                              (empno number, ename varchar2(10), sal number)
                              on commit delete rows ;

                        -     on commit delete rows : transaction
                              transaction             session
                              temporary table data                .

                        -     on commit preserve rows : session                   (transaction
                                      session                                      )

                        SQL> select table_name, tablespace_name, temporary, duration
                              from dba_tables
                              where table_name = ‘TABLE_NAME’ ;

                        -        dba_tables                  table     temporary
                              transaction                            session
                                      .




jkspark@hanafos.com                             - 117 -
Oracle8i New Features                                                         http://www.ggola.com/




                                      Example

                                      -   scott user

                                 SQL> create global temporary table emp_temp_sess
                                   2 (empno number, ename varchar2(10), sal number)
                                   3 on commit preserve rows ;
                                 Table created.
                                 SQL> create global temporary table emp_temp_trans
                                   2 (empno number, ename varchar2(10), sal number)
                                   3 on commit delete rows ;
         type   global           Table created.
temporary table
system user                      SQL> connect system/manager
                                 Connected.
type    temporary table
                                 SQL> select table_name, tablespace_name , temporary, duration
                  .                2 from dba_tables
                                   3 where table_name like '%TEMP%' and owner = 'SCOTT' ;

                                 TABLE_NAME                           TABLESPACE T DURATION
                                 -------------------- ---------- - ---------------
                                 EMP_TEMP_SESS                                 Y SYS$SESSION
                                 EMP_TEMP_TRANS                                Y SYS$TRANSACTION

                                 SQL> connect scott/tiger
                                 Connected.
                                 SQL> insert into emp_temp_sess values ( 1000, 'KS JANG', 100000) ;
                                 1 row created.
Scott user        table          SQL> insert into emp_temp_trans values ( 1000, 'KS JANG', 100000) ;
data     insert       data       1 row created.
                             .
                                 SQL> select * from emp_temp_sess ;
                                        EMPNO ENAME                     SAL
                                 ---------- ---------- ----------
                                          1000 KS JANG            100000
                                 SQL> select * from emp_temp_trans ;
                                        EMPNO ENAME                     SAL
                                 ---------- ---------- ----------
                                          1000 KS JANG            100000

                                 SQL> commit ;
                                 Commit complete.
Commit        select
     emp_temp_trans table        SQL> select * from emp_temp_sess ;
                                        EMPNO ENAME                     SAL
  transaction       data
                                 ---------- ---------- ----------
                                          1000 KS JANG            100000
emp_temp_sess       session
                      data       SQL> select * from emp_temp_trans ;
                         .       no rows selected

                                 SQL> connect scott/tiger
                                 Connected.
                                 SQL> select * from emp_temp_sess ;
                                 no rows selected

                                 SQL> select * from emp_temp_trans ;
                                 no rows selected


         jkspark@hanafos.com                                  - 118 -
Oracle8i New Features                                                    http://www.ggola.com/




     SQL*Loader

                             Enhancements

                             -     TERMINATED BY clause      1            character strings
                                                     . (multiple delimited field available)

                             -     New variable length field : VARCHARC, VARRAWC
                                   EX. VARCHARC(3,200) : ‘         3               value
                                                   .          4      character
                                              character read                   200
                                                     ’           .
                                   CF. VARRAWC data            RAW type             .

                             -         record size 64K                       .
                                   However, a logical record must fit entirely in client memory.

                             EX.                enhancements                      .
                                 LOAD DATA
                                 INFILE ‘emp_data.dat’
Record                           RECSEPARATOR ‘;’
Field                            FIELDS TERMINATED BY ‘::’
                                 (emp_name, location NULLIF
Multiple
                                    (emp_name=BLANKS AND location=BLANKS)
New field type
                                 comment VARCHARC(3) )


                             Kate::Seoul::015Shi is actress;Bill::Pusan::024He is the best actor




     jkspark@hanafos.com                             - 119 -
Oracle8i New Features                                                     http://www.ggola.com/




Monitoring Long-Running Operations

                        V$SESSION_LONGOPS

                        -   dynamic performance view               monitoring

                        -                          monitoring                  operation
                                     .
                            1. arching
                            2. RMAN backup and restore
                            3. parallel query
                            4. recovery
                            5. full table scan
                            6. sort operation
                            7. analyze using DBMS_STAT
                            8. hash cluster creation

                        EX.                monitoring         .
                        SQL> connect system/manager
                        Connected.
                        SQL> select sid, serial#, opname,
                          2 to_char(start_time, 'HH24:MI:SS') startt,
                          3 (sofar/totalwork)*100 "complete(%)"
                          4 from v$session_longops
                          5 where totalwork > 0 ;

                             SID SERIAL# OPNAME    STARTT                  complete(%)
                             13 238      TABLE SCAN 11:00:09                 49.8434
                             45 342      ANALYZE    11:03:29                 21.3433

                        -   DBMS_APPLICATION_INFO package
                            SET_SESSION_LONGOPS procedure
                            application       view   populate                       .

                        -   PL/SQL Block
                            dbms_application_info.set_session_longops(v_rindex, v_slno) ;
                                             session             v$session_longops
                            row            .     , v_rindex, v_slno    IN/OUT variable
                                  declare               PL/SQL Block
                                .

                        CF.    package                   application operating
                        information          v$session_longops                   . ,
                        row creation                           .               session
                                                       session termination delete      .

                        CF.    package                      application
                        monitoring                      .




jkspark@hanafos.com                           - 120 -
Oracle8i New Features                                                  http://www.ggola.com/




13. Availability and Recoverability


Archive Enhancements

                        Multiple archive logs

                        -         Oracle7     Oracle    archive log 1
                            destination                 Oracle8
                            log_archive_duplex_dest
                                   .     ,   parameter remote instance
                            destination               .

                        -   Oracle8i             Oracle8    archive dest
                                                       parameter log_archive_dest_n
                                  (n    1~5      )     5          archive dest
                                     remote instance                             .
                            remote backup system          standby database
                                           . , remote instance                remote
                            instance 1         log_archive_dest_n                    .

                        -   log_archive_dest    log_archive_dest_n
                                                            .    log_archive_dest_n
                            Oracle Enterprise Edition    install
                                    Oracle8.1.5 Reference Manual
                                    log_archive_duplex_dest                  .

                        CF. (      ) Oracle Version 8.1.6.2 “Enterprise Edition”
                        test       Enterprise Edition
                        log_archive_duplex_dest                                        .

                        -
                            1. 2           archive dest                 ,
                            2. standby database
                            3.       remote archive destination
                            log_archive_dest_n                                .

                        CF.             standby database                2      local
                        archive destination   1      remote archive destination
                                                   .

                        -   Oracle8i                     remote archive destination
                                               log_archive_dest_n session level
                                            dynamic parameter




jkspark@hanafos.com                             - 121 -
Oracle8i New Features                                                 http://www.ggola.com/




                        Multiple archive log processes

                        -                      Oracle8i        multiple archive process
                                                   . log_archive_start=true setting
                                    log_archiv_max_processes
                            archive process              start   .

                        CF. instance start       alter system command
                                . (10                       )
                           alter system set log_archive_max_processes=2 ;

                        -   archiving throughput     (multiple archive processes
                                                     archive          )         Oracle
                            version     manual archives
                            performance                 .

                        Multiple archive Options

                        -           ,                        standby database
                            1     local archive dest     1    backup local archive dest
                                                                                 .

                        log_archive_dest_1 =
                           “location=/a01/oracle1/arch/arch mandatory reopen”
                        log_archive_dest_2 =
                           “location=/a02/oracle2/arch/arch optional”
                        log_archive_dest_3 =
                           “service=standby_db2 mandatory reopen=500”

                        -                         dest #1 original archive dest
                             dest #2    archive    backup dest     dest #3 standby
                            database                   .

                        -            dest #1 dest #3 mandatory
                                  archive                     .
                            reopen archive
                                            default 300     dest #3
                            500                  .      second      .

                        -   dest #2    optional                             redo log
                            reused                            .

                        -   dest #3 tnsnames.ora service name             standby
                            database archive                        .
                            standby database   ‘RFS’ process primary database
                                                      .

                        CF. as mandatory / optional                    optional    default
                        value           .




jkspark@hanafos.com                           - 122 -
Oracle8i New Features                                                         http://www.ggola.com/




                        When is the online redo log reused?

                        -     online redo log         reused
                                                          .

                        1.    archive   all mandatory locations

                        2.    log_archive_min_succeed_dest               local location
                              archived               (all local mandatory archive
                                                                     )

                        -                      standby database                 archive
                              destination mandatory             archive
                                    local archived
                              log_archive_min_succeed_dest                                archive
                                              online redo log reuse
                                       .

                        -             log_archive_min_succeed_dest      total archive
                              destination                    local mandatory archive
                              destination                .     ,
                                                    .

                        -                              3     local archive destination
                              mandatory 2           standby database archive mandatory 1
                              optional 2                                      online redo log
                              reuse             .

                        -     3     mandatory archive
                              2     local archive destination                   1
                              optional                .

                        CF.        , log_archive_dest           log_archive_duplex_dest
                                          parameter                1       2                        .

                        -     log_archive_min_succeed_dest parameter session or system
                              level                        .
                              alter session set log_archive_min_succeed_dest=2 ;

                              alter system set log_archive_min_succeed_dest=3 ;
                              CF. log_archive_dest      log_archive_duplex_dest
                                       alter session command                  .

                        -            parameter log_archive_dest_state_n
                              _n          archive destination disable               .
                                   default ‘ENABLE’         session or system level
                                              . ‘DEFER’            destination archive
                                       ‘ENABLE’                   archive            .




jkspark@hanafos.com                                   - 123 -
Oracle8i New Features                                                  http://www.ggola.com/




                        -      , ‘DEFER’         ‘ENABLE’                        archive
                                   destination     manual       copy                  .
                            alter system set log_archive_dest_state_3 = defer ;
                            alter system set log_archive_dest_state_1 = enable ;
                            (log_archive_dest_n            destination
                            log_archive_dest_state_n matching          .

                        CF. Anyway, log_archive_min_succeed_dest
                        ‘ENABLE’    log_archive_dest_state_n                               .

                        Related data dictionary

                        -   V$ARCHIVE_DEST : archive destination
                            BINDING, STATUS, TARGET, FAIL_SEQUENCE……

                        -   V$ARCHIVE_PROCESSES : archive process
                            PROCESS, STATUS, LOG_SEQUENCE, STATE




jkspark@hanafos.com                           - 124 -
Oracle8i New Features                                                     http://www.ggola.com/




Standby database

                        Automatic Archival

                        -   primary site     archive log      automatically shipped to
                            standby site                    archive manual copy
                                    .

                        -   Primary site     archive                                      ‘RFS’
                                   (Remote File Server) process                  .
                            process standby database instance            start
                                      remote node file save                      control file
                                 update             .

                        -   If multiple ARCH processes are used at the primary site, each
                            ARCH process spawns and communicates with its own RFS
                            process.

                        Sustained Recovery

                        -   Optionally, RFS    primary site              log
                            standby database                      . (Sustained Recovery)
                                   primary failure                    standby open
                                .

                        -   Primary             archive destination
                            standby_archive_dest=/primary_site/a01/arch…..

                        -   Sustained recovery                         command
                            1.          mount                    .
                            2. alter database recover managed standby database ;
                               [timeout 60] ==> primary         log
                                              . (minutes      )

                        Read only database

                        -   select                 database open                      .
                                  standby database production                                     .

                        -   Read only database
                            1. query                   .
                            2. order by        sort                           , locally managed
                            tablespace           sort                     .
                            3. datafile online or offline            .

                        -   Standby        read only open sustained recovery
                            1. alter database recover managed standby database cancel ;
                            2. alter database open read only ;
                            3. alter database recover managed standby database ;
                               (active user sessions              )




jkspark@hanafos.com                           - 125 -
Oracle8i New Features                                                              http://www.ggola.com/




Redo log Enhancements

                             LogMiner : PL/SQL interface              redo log files
                                                  read, analyzed, interpreted using
                             standard SQL            .

                        Analyzing redo log files
                        -   database changes tracking without auditing overhead
                                       time or SCN base , point-in-time recovery
                                          .

                        -   Performing granular logical recovery
                            application               transaction                            undoing
                            specific changes                 .

                        -   Tuning and capacity planning
                            data growth patterns      usage patterns
                                                 .


                        LogMiner (install                ‘SYS’ user                                        )

                        -   Oracle8        redo log                          .
                            1. same platform
                            2. same character set

                        -   Log file                                               dictionary file
                                                 .

                        -   dbms_logmnr_d.build(‘file_name’,’file_path’) ;

                        CF. Oracle8    log analyzing     , Oracle8i
                        $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql
                        Oracle8     copy    ‘SYS’ user                                                 .

                        CF. Oracle 8.1.6.2                               dbmslmd.sql
                                   . (dbmslogmnrd.sql                                    )

                        -          file_path         initial parameter     UTL_FILE_DIR
                                                                                  .

                        -          procedure          data dictionary        information
                            file                              object
                                                      . ,             object
                                                                 .

                        -          procedure                      log            table  index, data
                                       scripts                                        .    file
                                                                             target database




jkspark@hanafos.com                                     - 126 -
Oracle8i New Features                                                         http://www.ggola.com/




                                                                   database
                            log                                                .

                        -   dbms_lomnr_d.build                            log
                                                                                         object
                            name         data         hexa value
                                   .

                        -   Log file                                                      log
                                                  .

                        -   dbms_logmnr.add_logfile(‘/a01/oracle/arch/arch_log1’,
                            dbms_logmnr.NEW) ;
                                           LOG

                        -   dbms_logmnr.add_logfile(‘/a01/oracle/arch/arch_log2’,
                            dbms_logmnr.ADDFILE) ;
                                LOG                       LOG

                        -   dbms_logmnr.add_logfile(‘/a01/oracle/arch/arch_log2’,
                            dbms_logmnr.REMOVEFILE) ;
                                  LOG              LOG

                        CF. test       log file
                                                            .

                        -   log file                                      log initiate
                                            .

                        -   Log                                          SCN Number
                                                                          .
                            (dbms_logmnr_d.build                     file dictfilename
                                       path                            )

                        -   dbms_logmnr.start_logmnr(
                                dictfilename=>’/app/oracle/logmnr/ logmnr.ora’, -
                                start_scn => 350128, -
                                end_scn => 352286) ;

                            dbms_logmnr.start_logmnr(
                                  dictfilename => ‘/app/oracle/logmnr/logmnr.ora’, -
                                  starttime => to_date(‘31/05/2001:11:35’,
                            ‘DD/MM/YYYY:HH24:MI’), -
                                  endtime => to_date(‘31/05/2001:14:18’,
                            ‘DD/MM/YYYY:HH24:MI’) ) ;
                            CF.       line                        ‘-‘                      .
                            CF. SCN or time range addfile log file
                                                 procedure                error
                                    .” time or SCN range not fully contained in the listed
                            logfiles”                                   .
                            CF.         , dictfilename                          log file




jkspark@hanafos.com                                   - 127 -
Oracle8i New Features                                                                        http://www.ggola.com/




                                                                    .           starttime       endtime         default
                                        value         1988    1         1       2988 1           1
                                                      .

                                   -    LogMiner start
                                        V$LOGMNR_CONTENTS View                                              .

                                   -                    ‘AKCDFILE’                Table                 insert, delete
                                        2                                                             commit
                                        2           transaction
                                                .
SQL> select scn, timestamp, username, sql_redo, sql_undo from v$logmnr_contents where seg_name = 'AKCDFILE' ;

   SCN TIMESTAMP             USERNAME                SQL_REDO
   350128 20010531 11:35:21 AKMANAGER                 insert into AKMANAGER.AKCDFILE (FILE_TP,FILE_RUN)
                                                     values ('AVI','audio file');
                                                    SQL_UNDO
                                                      delete from AKMANAGER.AKCDFILE where FILE_TP = 'AVI' and
                                                      FILE_RUN = 'audio file' and ROWID = 'AAAA2PAAHAAAACFAAE';

   350138 20010531 11:36:14 AKMANAGER delete from AKMANAGER.AKCDFILE where FILE_TP = 'AVI' and
                                      FILE_RUN = 'audio file' and ROWID = 'AAAA2PAAHAAAACFAAE';
                                       SQL_UNDO
                                      insert into AKMANAGER.AKCDFILE (FILE_TP,FILE_RUN) values
                                      ('AVI','audio file');

                                   CF. SQL REDO              user                               SQL UNDO
                                                                                            .     , SQL_REDO
                                                              SQL_UNDO                            recovery
                                            .

                                   -           log
                                        end_logmnr                      resource release         .

                                   -    dbms_logmnr.end_logmnr ;

                                   -          log                                                 .    , log
                                        session                                                             .

                                   -             dbms_logmnr.procedure
                                            session PGA
                                        dbms_logmnr.end_logmnr                              PGA
                                               .

                                   -    Other information :
                                        1. V$LOGMNR_DICTIONARY
                                           - tiemstamp, filename
                                        2. V$LOGMNR_LOGS
                                           - log id, log filename, low-high scn, log-high time
                                        3. V$LOGMNR_PARAMETERS :                       arguments
                                           - start-end date, start-end scn, info, status




    jkspark@hanafos.com                                           - 128 -
Oracle8i New Features                                                               http://www.ggola.com/




                             Limitation

                             -         PGA                     session                         .

                             -   1 row per record (1                     row
                                           sel_undo                  row              sql undo
                                 rowid                                     )    ,
                                                         row        return                 .

                             -   DDL    oracle                                 , data dictionary
                                       DML                      .

                             -   Chained rows                 DML                     reconstruct
                                      .

                             -   Data dictionary file                               clustered tables
                                       changes hexa values                              .      ,
                                 dictionary file                                        hexa values
                                                 .

                             CF. DDL         sample                            ‘xx’       table
                             create and drop log
                                    .
    - drop table xx ….
      sql_redo : delete from SYS.OBJ$ where OBJ# = 3501 and DATAOBJ# = 3501 and OWNER# = 0 and NAME
  = 'XX' and NAMESPACE = 1 and SUBNAME IS NULL and TYPE# = 2 and CTIME = TO_DATE('31-MAY-
  2001 15:36:10', 'DD-MON-YYYY HH24:MI:SS') and MTIME = TO_DATE('31-MAY……………….
     sql_undo : insert into SYS.OBJ$
     (OBJ#,DATAOBJ#,OWNER#,NAME,NAMESPACE,SUBNAME,TYPE#,CTIME,MTIME,STIME,STATUS,
     REMOTEOWNER,LINKNAME,FLAGS,OID$,SPARE1) values (3501,3501,0,'XX',1,NULL,2,
     TO_DATE('31-MAY-2001 15:36:10', 'DD-MON-YYYY HH24:MI:SS'),TO_DATE('31- ……………..




jkspark@hanafos.com                                 - 129 -
Oracle8i New Features                                                          http://www.ggola.com/




Fast_Start Recovery

                        Instance Recovery

                        -     Prior to oracle8i       instance recovery time
                                     .          failure      transaction load
                                        .

                        -     fast_start_io_target parameter : instance recovery
                                   (read and write)                maximum number of
                              datafile blocks              .(      parameter            target
                              redo blocks       , redo generation                           )
                              system level dynamic parameter               instance running
                              alter system command                         .

                        -     Recovery time         datafile I/O                              instance
                                          average I/O time                             .

                        Fast-Start Checkpointing

                        -     crash or instance recover recovery              position.
                              buffer cache earliest buffer to be dirtied gets written first
                              (oldest dirty block buffer)                              roll
                              forward               DB blocks
                                  . ,        feature media recovery                         .

                        -     If fast_start_io_target = 10000                      10000 blocks
                                       checkpoint position                 .

                        -              parameter                  recovery
                              performance                              checkpoint
                                               transaction overhead               .

                        Factors affecting checkpointing
                        -     A : fast_start_io_target parameter value

                        -     B : 90% of size of smallest redo log

                        -     C : end of the log_checkpoint_timeout seconds ago

                        -     D : log_checkpoint_interval blocks from the end

                        DBWn              4                       redo log
                        point                                   satisfy all the criteria defined.
                        Redo Log blocks                                            end of the redo


                                                                   D       B           C    A
                        CF.       redo         ‘A’ point                       .




jkspark@hanafos.com                              - 130 -
Oracle8i New Features                                                  http://www.ggola.com/




                        Factors influencing time to recover

                        -   estimated recovery time
                                 .                              recovery time
                                      .

                        -   Checkpoint target changed only at specific time intervals
                            (maybe time recovery?)

                        -   Additional recovery activities such as reading logs and lock
                            remastering                                        .
                            (typically           recovery activities 5%             )

                        -   Recovery time may be faster if parallel recovery is used

                        Define and monitor bounded recover time

                        -   Users          V$FILESTAT AVGIOTIM column
                                    FAST_START_IO_TARGET                   .
                            (  column       TIMED_STATISTICS initial parameter
                            TRUE                    1/100            file I/O
                                             )

                        -   V$INSTANCE_RECOVERY               impact of parameters
                            check      .
                            1. RECOVERY_ESTIMATED_IOS : fast-start checkpoint
                                                     .
                            2. ACTUAL_READ_BLKS : recovery               current actual
                            redo blocks
                            3. TARGET_READ_BLKS :                 4          minimum
                            value        recovery                       current target
                            redo blocks                    .          the number of
                            redo blocks.
                            4. LOG_FILE_SIZE_REDO_BLKS : checkpoint complete
                            log switch
                            5. LOG_CHKPT_TIMEOUT_REDO_BLKS :
                            log_checkpoint_timeout parameter
                            6. LOG_CHKPT_INTERVAL_REDO_BLKS :
                            log_checkpoint_interval parameter
                            7. FAST_START_IO_TARGET_REDO_BLKS :
                            fast_start_io_target parameter

                        CF. DB_BLOCK_MAX_DIRTY_TARGET
                        FAST_START_IO_TARGET 0                      DBMDT
                        trigger     checkpoint                       .
                        FAST_START_IO_TARGET                         parameter
                        DBMDT override      .

                        CF. FSIT                recovery                     blocks
                                            DBWn dirty buffers              write
                              .




jkspark@hanafos.com                           - 131 -
Oracle8i New Features                                                           http://www.ggola.com/




Fast-Start parallel rollback

                        Rolling back

                        -   Oracle fast start              Oracle7         warm start      , deferred
                            rollback                                   .

                        -   Rolling back
                            1. SMON            periodically scans all rollback segments and
                            rolls back aborted transactions as needed
                            2. user process dead transaction              held    row
                            lock             recovers transaction and continues processing.

                        -   Oracle8i    instance recovery             SMON query slave
                                                                 query slave process 1
                            rollback                               parallel rollback
                                                 .

                        -   Parallel transaction                 system crash             recovery
                                                                                     .
                            10                 10           parallel                       instance
                            crash          rollback                           100
                                                             .

                        -              SMON          parallel query slaves                    parallel
                            rollback operation                        .

                        -     , SMON              dead transaction          large number of
                            rollback blocks      generate                               (rollback
                            blocks 100           )                              .

                        Controlling fast-start parallel rollback

                        -   Oracle 8.1.4    Beta Release
                            PARALLEL_TRANSACTION_RECOVERY                 parameter
                                                        parameter                .
                            (8 parallel processing parallel transaction rollback    )

                        -   FAST_START_PARALLEL_ROLLBACK                                 dynamic
                            parameter(initial parameter or alter system)
                            parallel rollback                    .

                        -           maximum parallel recovery servers
                            processes                           .
                            1. FALSE :               .
                            2. LOW : 2 * CPU_COUNT
                            3. HIGH : 4 * CPU_COUNT




jkspark@hanafos.com                              - 132 -
Oracle8i New Features                                                         http://www.ggola.com/




                        Monitoring parallel rollback

                        -     V$FAST_START_SERVERS : fast start parallel rollback
                              query slaves information

                        -     V$FAST_START_TRANSACTIONS : fast start rollback
                              transactions status information
                              (Transaction ID, Undo blocks done, Undo blocks total, CPU
                              time in seconds)

                        Fast-Start On-demand rollback

                        -     dead transaction      lock        held               SMON
                              parallel rollback                                      transaction
                                       rollback                 data block   access        users
                              waiting                       .

                        -     On-demand block recovery user          access         data
                              block      initiate rollback   (immediately recover data
                              blocks accessed by user transactions) the remainder of the
                              blocks    background recover                        .

                        CF.        , Fast-Start Rollback        Enable                         .




jkspark@hanafos.com                               - 133 -
Oracle8i New Features                                                     http://www.ggola.com/




Block detection and Repair

                                                         Oracle Support                    .


                        Some facilities for detecting and recovering from block
                        corruptions

                        -    DB_VERIFY utility        : offline           file   check
                                     both online and backup datafiles
                             online performance                                    .
                             (from Oracle7)

                        -    DB_BLOCK_CHECKING : initial parameter setting
                             blocks                   check                .
                             (new from Oracle8i)

                        -    ANALYZE command : SQL command             analyze table
                             validate structure syntax invalid rows in partitioned
                             tables check                         .
                             (changed from Oracle8i)

                        -    DBMS_REPAIR : new package     PL/SQL interface              block
                             corruptions detect and repair           .
                             package    install                 . (by ‘SYS’)
                             $ORACLE_HOME/rdbms/admin/dbmsrpr.sql
                             $ORACLE_HOME/rdbms/admin/prvtrpr.plb
                             (new from oracle8i)

                        DBMS_REPAIR
                        1.   connect as user ‘SYS’

                        2.   block corruption check result          table
                             DBMS_REPAIR.ADMIN_TABLE(
                             ‘REPAIR_TABLE’, DBMS_REPAIR.REPAIR_TABLE,
                             DBMS_REPAIR.CREATE_ACTION,
                             ’TS_REPAIR_DAT’);
                             >> check                 table name
                             >> table data repair_table, index data    orphan_table
                             >> action : table          .
                                (purge_action : delete data from               objects,
                                 drop_action : drop the table)
                             >> table             tablespace

                        3.   check corruptions
                             (     3                    parameters  )
                             DBMS_REPAIR.CHECK_OBJECT (‘SCOTT’, ’EMP’,
                             CORRUPT_COUNT=>:ccnt) ;
                             >> schema name
                             >> object name
                             >> corrupted blocks return




jkspark@hanafos.com                            - 134 -
Oracle8i New Features                                                    http://www.ggola.com/




                        Others

                        -    initial parameter DB_BLOCK_CHECKING=TRUE block
                             corruption              ORA-1578 error trace files
                             dump        .

                        -    Performance                                  reading
                             check              .

                        -    Analyze table valid structure command             partitioned
                             tables   invalid rows check

                        Making Objects Usable

                        -    DBMS_REPAIR.FIX_CORRUPT_BLOCKS(’SCOTT’, ‘EMP’,
                             FIX_COUNT=>:fcnt)
                             software corruption        block mark
                             (                 REPAIR_TABLE     )

                        -    DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(’SCOTT’, ‘EMP) ;
                             corruption marked blocks          data  read
                                           .
                             (DBA_TABLES        SKIP_CORRUPT )

                        -    Skipping blocks ?
                             1. inaccessible
                             2. marked blocks point            indexes corrupt
                             3. referential integrity constraints may be violated
                                disable and re-enable constraints to identify violations
                             4. freelist corrupt         dbms_repair.rebuild_freelists
                                    freelist initialize      .

                        Checking index entries pointing to rows in corrupt data blocks

                        1.   check            table
                             DBMS_REPAIR.ADMIN_TABLES(
                             ’ORPHAN_TAB’, DBMS_REPAIR.ORPHAN,
                             DBMS_REPAIR.CREATE_ACTION’, ‘TS_REPAIR_IND’) ;
                             >> corrupt data       table >> index data check
                             >> table        >> table              tablespace

                        2.   check index for orphan keys
                             DBMS_REPAIR.DUMP_ORPHAN_KEYS(‘SCOTT’, ‘EMP’,
                             ORPHAN_TABLE_NAME=>’ORPHAN_TAB’,
                             KEY_COUNT=> :kcnt) ;
                             >> schema name >> object name >> table name
                             >> number of keys identified

                        3.            table      corrupt index         rebuild
                             select index_name from orphan_tab where table_name =
                             ‘EMP’ ;




jkspark@hanafos.com                             - 135 -
Oracle8i New Features                                           http://www.ggola.com/




                        Limitations of DBMS_REPAIR
                        -   out-of-line columns ignored

                        -   IOT and LOB indexes

                        -   Bitmap and function-based indexes

                        -   Key values   3,950 bytes




jkspark@hanafos.com                          - 136 -
Oracle8i New Features                                                         http://www.ggola.com/




14. Features of Net8
                                    Oracle8
                              New Features                             .



Net8 and the listener

                        Net8 and the listener : new parameters

                        -     Oracle8i default                   listener
                                     listener.ora file              . listener start
                                            instance start PMON                   listener
                                          service handler                  .
                                   , instance          listener start                (    ,
                              listener.ora file                           instance listener.ora
                              file                                )
                                 (every 1 minute)                            .
                              CF. listener.ora file
                                       . , listener port    location
                              listener.ora file                         .

                        -     New initial parameter
                              INSTANCE_NAME = NIS8I (default SID)
                              SERVICE_NAMES = NIS8I_A1, NIS8I_B1

                        -             instance name     instance name
                              multiple instances common services share
                              uniquely       instance name identify    .

                        -     instance    service names        listener                      service
                              name                                             .
                                ,                           random       listener access      service
                              name                                                  .
                                               NIS8I                 listener
                                , NIS8I_A            1       listener              NIS8I_B
                                       1       listener                       2       listener
                                                                    client                     .

                        CF.                       instance NIS8I connect
                                   (connection request        ) client tnsnames.ora
                        connection information SERVICE_NAME                         initial
                        parameter service_names                                   .      ,
                        service_names                         default (typically global
                        database name) db_name.db_domain                       db_domin
                        parameter         default     ‘WROLD’         Oracle8.1.5 manual
                                     Oracle8.1.6.2        parameter setting
                        null            . , SID = INSTANCE_NAME = DB_NAME
                              SERVICE_NAMES default           SID                    .




jkspark@hanafos.com                               - 137 -
Oracle8i New Features                                                     http://www.ggola.com/




                        Load balancing

                        -    connection load balancing
                                       .
                             1. number of active connections among various instances
                             2. dispatchers for the same service

                        -    load balancing order
                             1. client load balancing and failover : random
                             listener available                 next available listener
                                        .
                             2. listener all available nodes information
                             least CPU usage                nodes                       .
                             3. listener (MTS             )             connection
                                              dispatcher information              route     .

                        -    Oracle Meta link “Note:75712.1”

                        1.   Client load balancing and failover
                             tnsnames.ora : client                              listener
                                              FAILOVER       LOAD_BALANCE
                                           listener           . load_balance on
                             listener            random                   off
                             sequential                  .
                             CF.          LOAD_BALACE=ON             FAILOVER=OFF
                                        listener address random          1
                                                failover                      .

                             NIS8I =
                               (DESCRIPTION =
                                 (FAILOVER=on) (LOAD_BALANCE=on)
                                    (ADDRESS = (PROTOCOL = tcp) (HOST = 203….106) (PORT =
                             1521))
                                    (ADDRESS = (PROTOCOL = tcp) (HOST = 203….104) (PORT =
                             1521))
                                  (CONNECT_DATA = (SERVICE_NAME = NIS8I_A))
                             )
                             CF.       Version      “ADDRESS_LIST =” parameter
                                                  .

                        -                     tnanames.ora           listener
                             listener
                               1.
                               2.         instance
                               3.         instance down
                                  , listener process
                                        failover             error    return
                                                   .




jkspark@hanafos.com                             - 138 -
Oracle8i New Features                                                              http://www.ggola.com/




                        -    OPS       SID                              SERVICE_NAME,
                             INSTANCE_NAME                                   .
                             NIS8I =
                                 (DESCRIPTION =
                                       (ADDRESS = (PROTOCOL = tcp) (HOST = 203….106) (PORT
                             = 1521))
                                    (CONNECT_DATA = (SERVICE_NAME = NIS8I_A)
                                                       (INSTANCE_NAME = NIS8I))
                                    )
                             CF. instance_name parameter parallel server                 .
                               , OPS            instance_name parameter
                                  .

                        2.   Connection and Node load balancing (MTS only)

                        -    listener                                   .
                             instance                                              OPS
                                      instance                          listener
                             connection load balancing                        .

                        -          ,            instance local       remote listener
                                       client      connection request
                                                              . >> connection load balancing

                        -    client random                 listener service name or sid
                             connection request        listener                     CPU
                             usage                   server(instance) connect
                                   . >> node load balancing

                        CF. listener                                        listener process
                        start               .     , listener.ora file                    .

                        CF.       service handlers            mts_dispatchers
                        dispatcher                                      .

                        CF. Test       remote listener dispatcher             local
                        listener    dispatchers    + local server dedicated
                                     .
                          , local server dispatcher 6                7      service
                        handlers                       .

                        CF.             >>
                        $ lsnrctl services listener_name




jkspark@hanafos.com                                 - 139 -
Oracle8i New Features                                                   http://www.ggola.com/




                        3.   dispatcher routing

                        -    MTS               listener                  instance
                             listener                       listener                .

                        -    Multiple node                instance               SID
                                               SERVICE_NAMES                        .

                        -           instance                                 MTS
                                             instance               listener
                             connection load balancing                       initial
                             parameter MTS_DISPATCHERS                             listener
                             information                   listener          connection
                                           listener     current status information
                                         setting            .                 listener CPU
                             usage                node                      connection
                                          dispatcher process connection
                                  .

                        CF.       instance start         PMON          dispatcher
                        information       listener register                     (monitor
                        the system every 30 seconds by default)        information
                        10        update                 .
                        (    , 1 check        10                       node
                        heavy transaction         update                                )

                        CF. Oracle8          connection                 dispatcher
                        connection               Oracle8i               active connection
                             node                dispatcher                .

                        >>            3        load balancing          connection
                        client  server side process dispatcher process     load
                        balancing               .




jkspark@hanafos.com                               - 140 -
Oracle8i New Features                                                        http://www.ggola.com/




Scalability

                        New parameters

                        -           PMON default listener service
                             initial parameter   local_listener default value
                                               .

                        -    LOCAL_LISTENER            default      local host     port 1521,
                             protocol tcp ipc                                    .        port
                                  default value                                    parameter
                                            .

                        1.                   *             1522 port                    ?”
                             listener.ora    :
                             LISTENER = (ADDRESS_LIST = (ADDRESS= (PROTOCOL=
                             TCP) (Host= 203.246.130.104) (Port= 1522)))

                             init$SID.ora      :
                             local_listener =
                             "(address = (protocol=tcp) (host=203.246.130.104) (port=1522)) "

                        2.   server side tnsnames.ora       alias
                             init$SID.ora
                             local_listener = lsn_local

                             tnsnames.ora       :
                             lsn_local =
                             (address = (protocol = tcp)(host = 203.246.130.104)(port=1522))

                        CF. init$SID.ora       local_listener parameter
                        multiple local listener                   .

                        -    MTS_DISPATCHERS
                                            connection load balancing       listener
                                               mts_dispatchers            .
                             1. mts_dispatchers=”(protocol=tcp)(dispatchers=2)”
                                        local listener       .
                             2. mts_dispatchers=
                                ”(protocol=tcp)(dispatchers=2)(listener=lsn_remote)”
                                server side tnsnames.ora    lsn_remote
                             remote listener                    .

                        -    LARGE_POOL_SIZE= ?
                                parameter             Dedicated          Server
                             process       session memory sort           UGA
                             MTS          Shared server         large pool
                                     .




jkspark@hanafos.com                              - 141 -
Oracle8i New Features                                                        http://www.ggola.com/




                        Multiple instance configuration step on MTS

                        -                 instance 'NIS8I'    203.111.111.104            local
                              listener     203.111.111.106          remote listener
                                                                                             .

                        Step1. Server side tnsnames.ora listener alias
                        MLTNIS8I = (ADDRESS = (PROTOCOL = tcp) (HOST =
                        203.111.111.106) (PORT = 1521))

                        Step 2. initial parameter mts_dispatchers (remote and local).
                        mts_dispatchers =
                        "(PROTOCOL=TCP)(DISPATCHERS=3)(listener=MLTNIS8I)"
                        mts_dispatchers = "(PROTOCOL=TCP) (DISPATCHERS=3)"

                        Step 3. optional : SID                      service name
                        service_names = NIS8I_A

                        Step 4. local server     listener start
                        Step 5. remote server (203.111.111.106) listener start
                        Step 6. database startup
                        Step 7. client tnsnames.ora setting
                        NIS8I = (DESCRIPTION = (FAILOVER=on)
                        (LOAD_BALANCE=on)
                          (ADDRESS = (PROTOCOL = tcp) (HOST = 203.111.111.104)
                                        (PORT = 1521))
                          (ADDRESS = (PROTOCOL = tcp) (HOST = 203.111.111.106)
                                        (PORT = 1521))
                        (CONNECT_DATA = (SERVICE_NAME = NIS8I_A)))

                        Step 8.    “$ lsnrctl services” command         listener
                                            .

                        CF. listener port 1521                  port
                        local listener server side tnsnames.ora
                        mts_dispatchers                                  .
                        CF.         203.111.111.106     instance          multiple
                        instance               node load balancing
                        (service_names                                     SID
                                     )                        203.111.111.106 instance
                                        .

                            , listener port                         .        listener port
                                         multiple instance
                                instance remote listener                                 .

                        CF.                   node load balancing                  listener process
                        start     instance                                           instance
                                  listener                        start               listener
                        process                instance service handler                          .




jkspark@hanafos.com                                - 142 -
Oracle8i New Features                                                  http://www.ggola.com/




                        Multiple presentation support

                        -   IIOP, HTTP                      protocol
                            MTS                         .
                            Dedicated                       protocol                  .

                        -   MTS provides the ability to configure a dispatcher for each
                            presentation.

                        -   JAVA support :
                            1. default TTC presentation
                               ( standard Net8 clients and java stored procedures)
                            2. Enterprise Java Beans : GIOP presentation
                            3. CORBA servers : GIOP presentation

                        -        Oracle standard presentation TTC(Two Task
                            Common)    default                       MTS
                            dispatcher      multiple presentation
                                   .

                        -   GIOP(General Inter-Orb Protocol) IIOP(Internet Inter-Orb
                            Protocol)             EJB and CORBA Server connections
                                 presentation protocol    .

                        -   Java stored procedures   MTS Dedicated server mode
                                                    EJB and CORBA server
                            CORBA IIOP             MTS                      .

                        -           presentation layer        setting           TTC
                            GIOP     setting mts_dispatchers parameter                .

                        -   Initial parameter init$SID.ora
                            mts_dispatchers = “(PROTOCOL=TCP)(PORT=1820)
                            (DISPATCHERS=1)(PRE=ttc)"
                            mts_dispatchers = "(PROTOCOL=TCP)(PORT=2332)
                            (DISPATCHERS=1) (PRE=oracle.aurora.server.SGiopServer)"

                        Connection pooling (MTS only)

                        -   Oracle8 New Features                      connection
                            pooling    resource                     idle session
                            resource new session                resource
                                    “physical network connection”
                            resource utilization feature  .

                        -   MTS_DISPATCHERS=”(PRO=tcp) (CON=10) (DIS=3)
                            (POO=on) (TIC=3)(SESS=30)”

                        -   CON=10 : dispatcher connection
                            POO=on : connection pooling enable
                            TIC=3 : idle session           * 10          , 30
                            SESS=30 : idle session                              session




jkspark@hanafos.com                           - 143 -
Oracle8i New Features                                                       http://www.ggola.com/




                          Connection concentration (MTS only)

                          -            client connect request    listener
                                connection manager                       listener
                                                   dispatchers   1         physical link
                                multiple logical sessions             . (Multiplexing)

                          CF.              connection manager
                                 MTS           Dedicated mode                              .
                                  connection concentration
                                                          .

                          -    Connection manager
                               1. tnsnames.ora sample for client connection
                               NIS8I = (DESCRIPTION = (SOURCE_ROUTE=yes)
    Connection manager address    (ADDRESS = (PROTOCOL = TCP)
                                                (HOST = 203.111.111.104) (PORT = 1630))
    Listener address              (ADDRESS = (PROTOCOL = TCP)
                                                 (HOST =203.111.111.106)(PORT = 1521))
                                  (CONNECT_DATA = (SERVICE_NAME=NIS8I_A))
                               2. cman.ora sample for server configuration
                               cman =
                                   (ADDRESS_LIST=
                                   (ADDRESS=(PROTOCOL=tcp)(HOST= 203.111.111.104)
                                   (PORT=1630) (QUEUESIZE=32)))
                               cman_admin =
          option                   (ADDRESS=(PROTOCOL=tcp)(HOST= 203.111.111.104)
                     .                          (PORT=1830))
                               cman_profile = (parameter_list=
                                    (MAXIMUM_RELAYS=1024)
                                    (LOG_LEVEL=1) (TRACING=no)
                                    (RELAY_STATISTICS=yes) (SHOW_TNS_INFO=yes)
                                    (USE_ASYNC_CALL=yes)
                                    (AUTHENTICATION_LEVEL=0)
                                    (REMOTE_ADMIN=FALSE))
                               3. initial parameter mts_dispatcher sample
                               mts_dispatchers=”(protocol=tcp) (dis=3) (mul=on)”
                               CF. multiplex=on setting                 connection
                               concentration enable                               .

                          -     lsnrctl command    cmctl command              .
                                $ cmctl start
                                connection manager         connection request
                                cmadmin process register         ‘cmgw’ process
                                cmgw registration           cmgw, listener
                                information           names server               oracle
                                names server address information              names
                                server    update   ‘cmadmin’ process              .




jkspark@hanafos.com                               - 144 -
Oracle8i New Features                                                    http://www.ggola.com/




                                 Multi protocol interchange(MPI)

                                 -   client/server different type protocol               .
                                              TCP/IP             client SPX             Oracle
                                     server connect                 TCP Oracle connection
                                     manager connect          Oracle connection manager
                                     SPX      database server connect      client
                                            .

                                 -   tnsnames.ora for multi protocol interchange
                                     NIS8I = (DESCRIPTION = (SOURCE_ROUTE=yes)
connect to CMAN using TCP              (ADDRESS = (PROTOCOL = TCP)
                                                    (HOST = 203.111.111.104) (PORT = 1610))
connect to database using SPX          (ADDRESS = (PROTOCOL = SPX)
                                                    (SERVICE = MPI_LST))
Service name for database              (CONNECT_DATA = (SERVICE_NAME=NIS8I_A))



         Security

                                 Security features
                                 -   client connection access control

                                 -   secure access through the Web

                                 -   works with Oracle Advanced Security Option

                                 Connection manager

                                 -        client   server      access control rules
                                               . access control connection manager
                                             CMAN.ora CMAN_RULES                               .

                                 -   CMAN_RULES sample
                                     CMAN_RULES = (RULE_LIST =
                                     (RULE=(SRC=204.111.111.101) (DST=203.111.111.104)
                                           (SRV=NIS8I_B) (ACT=accept))
                                     (RULE=(SRC=204.111.111.102) (DST=203.111.111.106)
                                           (SRV=NIS8I_A) (ACT=reject)) )

                                 -             client 204.111.111.101        server 203.111.111.104
                                         NIS8I_B database            connection request
                                     client 204.111.111.102         server 203.111.111.106 NIS8I_A
                                     database           connection request                          .

                                 -   SRC : source host name or IP (client)
                                     DST : destination host name or IP (server)
                                     SRV : target database service or SID (8i           SID only)
                                     ACT : ACCept or REJect




          jkspark@hanafos.com                           - 145 -
Oracle8i New Features                                                       http://www.ggola.com/




Manageability

                                           Oracle8 New Features Page 93 “Advanced
                             functions of Net8”     homepage
                             http://sh.hanarotel.co.kr/~ggola     Net8i    network
                             configuration

                        Configuration and trace tools

                        -    Configuration : Net8 Assistant tool                    GUI
                                                                        .
                             $ $ORACLE_HOME/bin/netasst

                        -    Tracing : more readable trace text
                             $ $ORACLE_HOME/bin/trcasst –o sqlnet.trc

                        Naming services method

                        1.   local naming : client tnsnames.ora

                        2.   host naming : DNS          /etc/hosts          alias
                                          host name
                             (TCP/IP, one host only one Instance                          )

                        3.   centralized naming : names server

                        4.   connection manager          names server

                        5.   external naming : third-party name resolution mechanism

                             ex) CDS, NOVELL, NIS




jkspark@hanafos.com                            - 146 -
Oracle8i New Features                                                                    http://www.ggola.com/




15. SQL*Plus, PL/SQL and National Language Support


SQL*Plus

                        New Features

                        -   server manager                  sql*plus                        .

                        -          version                              server manager
                                    .

                        SQL*Plus syntax review

                        -   create type, create library                                                   new
                            line ‘/’                            .

                        -   SQL           blank line                             .

                        -   “#”                 comment                              .
                            comment       “-“                             “—“                       .

                        -   SQL                                     new line                            “-“
                                      .

                        -                 “&”                       .                   “&”
                                                                          escape character
                                  . Default     off                        “”
                                                                (                “?”                          )
                            SQL> set escape ?
                                                   .
                            EX. select ‘?&k’ from dual ;                        &k                                .
                            “?”            &k                                                   .




External Procedure (Oracle8 NF)

                            Orace8i                                     external procedure
                            JAVA                                               .

                            External procedure                                  Oracle8 NF




jkspark@hanafos.com                               - 147 -
Oracle8i New Features                                                     http://www.ggola.com/




New Event Triggers

                        New Trigger Level

                        -   Oracle7        DML(row and statement level) trigger
                                                   database schema(user and DDL)
                            level       trigger                        .

                        -   Database level trigger : DBA role
                            Schema level trigger : create trigger privilege
                               user schema level trigger : create any trigger privilege


                        Enhanced trigger

                        -   Oracle8                ‘instead of’ trigger   views, object
                            views                             Oracle8i
                                            .

                        -   ‘INSTEAD OF’ trigger                  nested table
                                    nested table                                          .

                        EX. create trigger emp_nest_trg instead of insert on
                             nested table emp_nest of emp_object for each row
                             …….

                        New Event & Changed view

                        -   STARTUP : database open fire
                            SHUTDOWN : instance shutdown fire
                            SERVERERROR : database error         occurs
                            LOGON, LOGOFF : user log on and log off fire
                            CREATE, ALTER, DROP : object

                        -   DBA_TRIGGERS
                            TABLE_NAME : database, schema level NULL
                            TRIGGER_TYPE : before and after event for system events
                            BASE_OBJECT_TYPE : database or schema for system events

                        -   DBMS_STANDARD package : additional functions to obtain
                            attributes within a trigger

                        CF. dba_triggers      table_name NULL value
                               database trigger or schema trigger .




jkspark@hanafos.com                             - 148 -
Oracle8i New Features                                                                                          http://www.ggola.com/




                                         Example
                                         -      Trigger for database startup and shutdown history
                                ‘SYS’ user login
Database startup and            SQL> create table instance_info (
shutdown history                  2 servername varchar2(20), username varchar2(30),
                                  3 work_type varchar2(10), work_time date) ;
   table
                                Table created.

                                SQL> !more start_trg.sql
                                create or replace trigger inst_start_trg
                                after startup on database
                                declare
                                   v_user varchar2(30);
                                begin
                                   select username into v_user from user_users ;
                                   insert into instance_info values (dbms_standard.database_name, v_user,
                                'STARTUP', sysdate) ;
                                end;
Database startup and            /
shutdown trigger
                                SQL> !more down_trg.sql
                                create or replace trigger inst_sdown_trg
                                before shutdown on database
                                declare
                                   v_user varchar2(30);
                                begin
                                   select username into v_user from user_users ;
                                   insert into instance_info values (dbms_standard.database_name, v_user,
                                'SHUTDOWN', sysdate) ;
                                end;
                                /

                                SQL> col trigger_name for a20
                                SQL> col table_name for a10
                                SQL> select trigger_name, table_name, base_object_type, trigger_type
                                  2 from dba_triggers
       trigger                    3 where trigger_name in ('INST_START_TRG','INST_SDOWN_TRG');

                                TRIGGER_NAME TABLE_NAME                              BASE_OBJECT_TYPE TRIGGER_TYPE
                                -------------------- ---------- ---------------- -------------------------------------------------------------
                                INST_SDOWN_TRG                                        DATABASE                         BEFORE EVENT
                                INST_START_TRG                                        DATABASE                         AFTER EVENT

  Database shutdown             Database shutdown and startup
      and startup
                                SQL> alter session set nls_date_format = 'YYYYMMDD HH24:MI:SS' ;
                                Session altered.

                                SQL> col username for a10
                                SQL> col servername for a15
                                SQL> select * from instance_info ;

                                SERVERNAME                 USERNAME WORK_TYPE WORK_TIME
                                --------------- ---------- ---------- -------------------------------------------------------
                                HJSENT.WORLD                 SYS               SHUTDOWN 20010908 12:31:00
                                HJSENT.WORLD                 SYS               STARTUP               20010908 12:32:44




        jkspark@hanafos.com                                                    - 149 -
Oracle8i New Features                                                    http://www.ggola.com/




Autonomous Transactions

                        Independence

                        -   autonomous transaction        PL/SQL blocks call
                            transaction                       independent transaction
                                   .

                        -     ,              main transaction     call     sub program
                            nested transaction                main transaction commit
                            and rollback                      .

                        -   Oracle8i                                  independent
                            transaction                          autonomous transaction
                                     .

                        CF. Oracle7       DBMS_PIPE
                                                                                  .

                        -                              PRAGMA      setting
                                                       .

                        -        PL/SQL block               stored procedure,
                            package/type method, local procedure/function
                                          . , declare section
                                                   .

                        -           transaction       lock resource              main
                            transaction      resource                        .          dead
                            lock              error return         .

                        -   Autonomous transaction                        application
                                                                                         .


                        Example

                        -   emp_prag1 emp_test 1 row         insert              commit
                            autonomous transaction      emp_prag2            1 row insert and
                            call emp_prag2 and 1 row insert                           commit
                            or rollback

                        -           emp_prag2                            session         3
                            rows                       session         emp_prag1
                            data 1 row                             .




jkspark@hanafos.com                          - 150 -
Oracle8i New Features                                                           http://www.ggola.com/




                               Program example

                        Autonomous transaction program description :
                        create or replace procedure emp_prag1 (a_empno number)
                        is
                           v_t_odate date ;
                           pragma autonomous_transaction;
                        begin

                          v_t_odate := sysdate ;

                          insert into emp_test values (a_empno, 'X1', 'Y1', 888, v_t_odate, 10, 10, 11) ;
                          commit ;

                        end;
                        /

                        Main transaction program description :
                        create or replace procedure emp_prag2 (a_empno number)
                        is
                           v_t_odate date ;
                        begin
                           v_t_odate := sysdate ;
                           insert into emp_test values (a_empno + 1 , 'X1', 'Y1', 888, v_t_odate, 10, 10, 11) ;

                          -- call procedure for 1 row insertion
                          emp_prag1(a_empno) ;

                          insert into emp_test values (a_empno + 2, 'X1', 'Y1', 888, v_t_odate, 10, 10, 11) ;
                        end;
                        /


                               -   Session 1
                                   SQL> exec emp_prag2(999) ;
                                   SQL> select * from emp_test ;
                                         1000, 999, 1001 empno               data 3
                                          .

                               -   Session2
                                   SQL> select * from emp_test ;
                                         999 empno            data 1                         .

                               -   Session1
                                   SQL> rollback ;
                                         session1      session2           empno 999              data
                                   1                     .

                               CF. SQL*Plus              autocommit on setting
                               transaction                      commit
                                              autocommit off          .




jkspark@hanafos.com                                   - 151 -
Oracle8i New Features                                                    http://www.ggola.com/




PL/SQL

                        Enhancements

                        -    very large package support : maximum package size
                                    .

                        -    Bulk binds : FORALL         collection elements
                                             SQL bulk binding                           .
                             collection elements(index-by table, nested table, varray, host
                             array) first last                           .
                             ……………………
                             FORALL i in 1..500 LOOP
                                 delete from emp where empno = empnos(i) ;
                             ……………………..
                             CF. This functionality reduces communication overhead.

                        -    Dynamic SQL                   :        DBMS_SQL package
                                                               dynamic SQL
                             PL/SQL          directly                .

                        -    Dynamic SQL      DML                  DDL                        .
                            Dynamic SQL sample
                            ……..
                            sql_stm := ‘insert into dept values (:1, :2, :3)’ ;
                            execute immediate sql_stm using v_dept, v_name, v_loc ;
                            ……
                            v_where := ‘ where deptnm = ‘ || v_deptnm ;
                            execute immediate ‘delete from ‘ || v_tab_name || v_where ;
                            …….
                            execute immediate ‘create table emp (empno number(4))’ ;

                        -    Oracle8i    object features   REF-based operations
                                                PL/SQL       “UTL_REF” package support

                        -    UTL_REF package contains procedures to support reference-
                             based operations (Oracle8i manual “Supplied Packages
                             Reference, Volumne2 “ UTL_REF        )

                        -    monitoring and analysis of Program Execution
                             packages       new three APIs         tracing, debugging,
                             profiling              .
                             CF.           Oracle8i New Features
                                       Example                              .
                                                                                              .




jkspark@hanafos.com                             - 152 -
Oracle8i New Features                                                          http://www.ggola.com/




                        Parameter passing by reference

                        -     PL/SQL                in or out or in out                         ,
                              value             parameter reference
                                    .

                        -          NOCOPY mode                    .     , out
                              parameter procedure                                          reference
                              parameter pointer                                              .

                        -                     sample          .

                        SQL> set serveroutput on
                        SQL> declare
                          n number := 100 ;
                          procedure do_print( n1 in number, n2 in out number, n3 in out nocopy
                        number) is
                          begin
                              n2 := 200 ;
                              dbms_output.put_line(n1) ; -- print 100
                              n3 := 300 ;
                              dbms_output.put_line(n1) ; -- print 300
                          end ;
                        begin
                          do_print(n, n, n) ;
                          dbms_output.put_line(n) ; -- print 200
                        end ;
                        /
                        100
                        300
                        200
                        SQL>


                        -                                 100 (       input)
                              300 (nocopy mode)                                200 (                out
                              variable) print             .

                        CF.           300   nocopy mode                        200     in out
                                  .




jkspark@hanafos.com                             - 153 -
Oracle8i New Features                                                             http://www.ggola.com/




National Language Support

                                Oracle8                         New Features
                                              .


                                    character set

                        -     Database Creation     , create database
                              character set     national character set
                                  .

                        SQL> Create Database DBNAME Logfile Group 1… Datafile…
                            Character Set US7ASCII
                            National Character Set KO1601KSC ;

                        -     National character set  data
                              NCHAR, NCLOB, NVARCHAR2                             National
                                            .


                        Dual currency support (for Euro)

                        -     1999        1       EU       new currency           Euro
                                                             .

                        -                 euro                          sample    .
                            SQL> alter session set nls_dual_currency=eur;
                            Session altered.

                            SQL> select to_char(888, 'U999') from dual ;

                            TO_CHAR(888,'U
                            ----------------------------
                                        EUR888


                        NLS sort

                        -                                      sort       function based index
                                                                 .

                        -     SQL> create index xak_nls_ename on emp (nlssort(ename,
                              ‘NLS_SORT = German’)) ;

                        -     SQL> select * from emp where ename > ‘Ulrike’ ;

                        -     German            ‘z’ < ‘ä’         .      NLS_COMP (dynamic
                              initialization parameter) parameter linguistic comparisons
                              binary        default language for the session German
                              setting                         .




jkspark@hanafos.com                                        - 154 -
Oracle8i New Features                                                          http://www.ggola.com/




16. Database Security


Password Management

                               Oracle8 New Features

                               Scripts      $ORACLE_HOME/rdbms/utlpwdmg.sql



Invoker’s Rights

                        PL/SQL execution user

                        -      Oracle8i      version          PL/SQL block               user
                                            PL/SQL            user                      .

                        -      Oracle8i   AUTHID                              DEFINER
                               CURRENT_USER                         .

                        -      DEFINER       default                     PL/SQL block
                                     user                      CURRENT_USER
                               block              user                 .

                        -                sample   akman user                procedure    scott
                               user                                     .

                        Sample procedure and test result

                        -      User ‘akman’                 procedure

                            create or replace procedure inv_t1 (av_tname in varchar2)
                                      authid current_user is
                                      v_stmt varchar2(40) default 'drop table ' || av_tname ;
                            begin
                                      execute immediate v_stmt ;
                            end;
                            /

                            create or replace procedure inv_t2 (av_tname in varchar2)
                            -- definer    default                     .
                                    authid definner is
                            is
                                      v_stmt varchar2(40) default 'drop table ' || av_tname ;
                            begin
                                     execute immediate v_stmt ;
                            end;
                            /




jkspark@hanafos.com                               - 155 -
Oracle8i New Features                                                          http://www.ggola.com/




                                 SQL> sho user
                                 USER is “AKMAN”
                                 SQL> grant execute on inv_t1 to scott;
                                 SQL> grant execute on inv_t2 to scott;

                                 SQL> conn scott/tiger
                                 SQL> create table emp_test as select * from emp;
                                 Table created.
                                 SQL> exec akman.inv_t2('emp_test') ;
                                 BEGIN akman.inv_t2('emp_test') ; END;
                                 *
                                 ERROR at line 1:
  User ‘AKMAN’        emp_test
                                 ORA-00942: table or view does not exist
        table           .        ORA-06512: at "AKMAN_T2", line 6
                                 ORA-06512: at line 1
                                    procedure             akman                   error returns

                                 SQL> exec akmanager.inv_t1('emp_test') ;
  Procedure inv_t1               PL/SQL procedure successfully completed.
  ‘AKMAN’                        SQL> desc emp_test
          user     ‘SCOTT’       ERROR:
        drop table               ORA-04043: object emp_test does not exist
                                     procedure           scott



                             User tracing

                             -    AUTHID           PL/SQL block                           user
                                         .
                                  CF. AUTHID CURRENT_USER                    block
                                  user_users query                                   username
                                              .



Security policies

                             Application security

                             -                           application           privileges and
                                  roles              security policy
                                  privileges and roles application
                                                                                      .

                             Application context
                             -    Application context : set up session-based attributes securely.
                                  session level    , access       user   information retrieve
                                  and store     security policy.


                             Fine-Grained access control
                             -    Find-Grained access control : implement security policies as a
                                  low level of granularity.




jkspark@hanafos.com                                  - 156 -
Oracle8i New Features                                                                      http://www.ggola.com/




Application Context

                                 Features
      Application-specific       -     Each application can have its own unique context, with
                                       different attributes.
                                                   order entry         application access control
                                       customer number, position, and sales region attributes
                                                                                user
                                                 ,            ,                             .
                       Secure
                                 -     Application context can provide security in multiple ways.
                                                  order entry         user customer number
                                                                          valid
                                       user                       application context
                                                   .

                                 -     Context                                  context     implementing
                                       “trusted package”                          .
                      Flexible
                                 -     within a function implementing a security policy to determine
                                       the correct predicate to return
                                                   select * from emp          application
                                       context    position           different predicates(WHERE
                                       clause) return              .       , manager
                                               data                                    data
                                                                .

                                 -     Context attribute can be used within the predicate itself.
                                         , Predicate(as a bind variable)        return            .
                                                                 predicate ‘where cust_num =
                                       sys_context(‘order_entry’, ‘cust_num’)’ return               .

                                 Application Context creation and test

                                 1.    application                    rule             .
                                               emp table             connect user     emp      ename
                                               row                     access                    .

                                 2.    application                    context             function
                                       PL/SQL package

                                 3.    application context

                                 4.    package                             context                   test

                                 CF.                                   Oracle8i
                                                                 .           Manual                    .




jkspark@hanafos.com                                        - 157 -
Oracle8i New Features                                                                                     http://www.ggola.com/




                                     Example

                                     -           context                                  user          create any context
                                           privilege                      . (drop                       drop             )
            SQL> conn system/manager
            SQL> grant create any context to scott ;
            SQL> conn scott/tiger
            Connected.
            SQL> select * from emp ;
              EMPNO ENAME JOB                                 MGR HIREDAT                    SAL         COMM DEPTNO
            -------------------------------------------------------------------------------------------------------------------------
                  7369 SCOTT             CLERK                 7902 17Dec80                    800                               40
                  7499 ALLEN SALESMAN                          7698 20Feb81                  1600              300               30
                  7521 WARD              SALESMAN               7698 22Feb81                  1250              500               30
                  8970 MILLER CLERK                            7782 23Jan82                  1300                                10
                  9889 CUSTOMER GENERAL                        7369 21Jun01                    600               200             40


                                     -     context                    package
            SQL>
            create or replace package apl_secure_context
            is
                      procedure set_secure_emp ;
            end ;
            /
            Package created.
            SQL>
            create or replace package body apl_secure_context
            is
                      procedure set_secure_emp
                      is
                               v_empno emp.empno%type ;
                      begin
                               select empno into v_empno from emp
                               where ename = sys_context('USERENV', 'SESSION_USER') ;
                               DBMS_SESSION.SET_CONTEXT('app_emp_context','empno',v_empno);
                      end;
            end;
            /
            Package body created.

                                     -     context creation and test
            SQL> create or replace context app_emp_context using apl_secure_context ;
            Context created.
            SQL> select sys_context('USERENV', 'SESSION_USER') USERNAME from dual ;
            USERNAME
            ---------
            SCOTT

            SQL> exec apl_secure_context.set_secure_emp ;
            PL/SQL procedure successfully completed.

            SQL> select sys_context('APP_EMP_CONTEXT', 'EMPNO') EMP_NUMBER from dual ;
            EMP_NUMBER
            ----------
            7369




jkspark@hanafos.com                                                   - 158 -
Oracle8i New Features                                                       http://www.ggola.com/




Fine-Grained Access control

                            Fine-grained access control provides a way to extend table-
                            based or view-based security to finer levels of granularity than
                            previously possible.

                        Merits

                        -   application                                  security
                            data server    security
                                            costs                 .
                            CF.             application           user           data
                            access             server                 fine-grained access
                            control                   . (Row level security         )

                        -   application level                  security
                              , user                      security
                                                                 security                           .

                        Features

                        -   table-based or view-based security policies : table or view
                                             flexible implementation
                                        salary               emp columns
                            emp_view                            application              fine-
                            grained access control
                            application                        .       select, insert, update,
                            and delete                                          .

                        -   Multiple policies per table
                                   table             policies
                                 logically ‘AND’                    .

                        -   Highly scalability
                            application context                                        attributes
                            values             parsed           bind variable                       .
                                    parsed                      optimization
                                    .

                        How it works

                        -   direct or indirect (subquery                ) access
                            automatically invokes the policy

                        -   policy package   predicate(a where condition) return
                            Database dynamically rewrites the SQL statement by
                            appending the predicate

                        -   dynamically rewrite         bind variable
                                  re-parsing or re-optimizing                      .




jkspark@hanafos.com                             - 159 -
Oracle8i New Features                                                                                    http://www.ggola.com/




                                   Implementing

                                   -     fine-grained access control                       secure policy
                                                                                     application context
                                                .

                                   -     fine-grained access control                        application context
                                                 application context                                         policy
                                         packages                                                          .

                                   -                        application context                                         fine-
                                         grained access control               .

                                   CF. DBMS_RLS Package
                                   $ORACLE_HOME/rdbms/admin/dbmsrlsa.sql script
                                                        .dbms_rls package
                                   script           .
                                   (RLS : Row Level Security Administrative Interface)

                                   Example

                                   -     login        user                       sales table                    select
                                                    row              Row Level Security Policy

                                   1.    building application context (optional)
                                                       application context                                          .
                                         (1) context function         package
                                                 page application context example
                                         (2) context
                                                 page application context example
                                         (3) policy           data
                      SQL> conn scott/tiger
                      SQL> grant select on emp to customer ;
                      SQL> grant select on sales to customer ;
                      SQL> select * from emp ;

                      EMPNO ENAME                   JOB              MGR HIREDAT SAL COMM DEPTNO
                      ---------------------------------------------------------------------------------------------------------
                         9889 CUSTOMER GENERAL                        7369 21Jun01 600 200                         40
                         7369 SCOTT                CLERK              7902 17Dec80 800                             40
                         7499 ALLEN               SALESMAN 7698 20Feb81 1600 300                                   30
                         7521 WARD                 SALESMAN 7698 22Feb81 1250 500                                 30
                         8970 MILLER               CLERK              7782 23Jan82 1300                            10

                      SQL> select * from sales;

                       EMPNO DEPT ITEM STORE                                       SALES_DATE
                      --------------------------------------------------------------------------------
                         9889        40            435 Prince                     21Jun01
                         7369        40            839 Head                       17Dec80
                         7499        30            630 Wilson                      20Feb81
                         7521        30            463 Dunlop                     22Feb81
                         8970        10            693 Unsquahable 23Jan82




jkspark@hanafos.com                                                  - 160 -
Oracle8i New Features                                                                            http://www.ggola.com/




                                2.    building policy packages
                      create or replace package secure_emp_fgrain
                      is
                           function secure_emp_fgrain_fnc(d1 varchar2, d2 varchar2) return varchar2 ;
                      end ;
                      /

                      create or replace package body secure_emp_fgrain
                      is
                           function secure_emp_fgrain_fnc(d1 varchar2, d2 varchar2) return varchar2
                           is
                                v_predicate varchar2(2000) ;
                           begin
                                apl_secure_context.set_secure_emp ;
                                v_predicate := 'empno = sys_context('APP_EMP_CONTEXT', 'EMPNO')' ;
                                return v_predicate ;
                           end;
                      end;
                      /


                                3.    associate policy packages with tables and views

                                SQL> exec dbms_rls.add_policy(‘scott’,’sales’,’sales_policy’,’scott’,
                                ’secure_emp_fgrain.secure_emp_fgrain_fnc', 'select')

                                CF.                                    line                          .

                                4.    Test
                                              SQL> conn scott/tiger
                                              SQL> select * from sales;

        SCOTT               SALES              EMPNO DEPT ITEM STORE SALES_DATE
                            .                 ---------------------------------------------------------------------
                                                 7369              40 839 Head                 17Dec80

                                              SQL> select * from sales where dept=30;
        DEPT = 30 POLICY                      no rows selected
        PREDICATE   AND
                                      .       SQL> conn customer/customer11
                                              SQL> select * from scott.sales ;

        CUSTOMER                                EMPNO DEPT ITEM STORE                            SALES_DATE
        SALES                         .       ------------------------------------------------------------------------
                                                 9889              40 435 Prince                 21Jun01




jkspark@hanafos.com                                          - 161 -
Oracle8i New Features                                                http://www.ggola.com/




                        DBMS_RLS package

                        -   Policy       :
                            ADD_POLICY (object_schema, object_name, policy_name,
                            function_schema, function_name, statement_type,
                            [update_check], [enable])
                            CF. update_check default = ‘FALSE’ (insert or update
                            statement           argument ‘TRUE’                insert or
                            update                                          policy
                            check             )
                                 enable default = ‘TRUE’

                        -   Policy   :
                            DROP_POLICY(object_schema, object_name, policy_name)

                        -   Policy enable, disable :
                            ENABLE_POLICY(object_schema, object_name, policy_name,
                            [enable])
                            CF. enable default = ‘TRUE’

                        -   Policy Re-parsing :
                            REFRESH_POLICY(object_schema, object_name, policy_name)




jkspark@hanafos.com                           - 162 -
Oracle8i New Features                                                           http://www.ggola.com/




17. Partial addition for Oracle8i


Constraints

                                    Oracle7        Oracle8                             constraints
                                    features                                          .

                              Deferred constraint checking

                              -    constraint
                                   constraint     not deferrable (default)
                                                  deferrable initially immediate (default)
                                                              initially deferred

                                   Oracle7            constraint :     constraint check

                                   Oracle8 New features : SQL                check using set
                                   constraint statement

                                   Oracle8i New features : commit time       check


                              Constraint
                              -    set constraint command : apply only to current transaction
                                   SQL> set constraint(s) all/constraint_name
                                   deferred/immediate ;

                              -    alter session set constraint command : apply to current session
                                   SQL> alter session set constraint(s) = deferred/immediate ;

                              Example
                              -    default constraint(not deferrable) test
    SQL> conn scott/tiger
    SQL> select * from dept ;
       DEPTNO DNAME                         LOC
          ---------- -------------- -------------
             10 ACCOUNTING               NEW YORK
             20 RESEARCH                DALLAS
             30 SALES                  CHICAGO
             40 OPERATIONS               BOSTON
    SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) references dept(deptno) ;
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    ERROR at line 1:
    ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found

    SQL> set constraint XFK_EMP_DEPT deferred ;
    ERROR at line 1:
    ORA-02447: cannot defer a constraint that is not deferrable




jkspark@hanafos.com                                    - 163 -
Oracle8i New Features                                                          http://www.ggola.com/




                             -   deferrable initially immediate test
    SQL> alter table emp drop constraint xfk_emp_dept ;
    SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) references dept(deptno)
        deferrable initially immediate ;
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    ERROR at line 1:
    ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found

    SQL> set constraint XFK_EMP_DEPT deferred ;
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    1 row created.
    SQL> commit ;
    ERROR at line 1:
    ORA-02091: transaction rolled back
    ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found


                             -   deferrable initially deferred test
    SQL> alter table emp drop constraint xfk_emp_dept ;
    SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) references dept(deptno)
         deferrable initially deferred ;
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    1 row created.
    SQL> commit ;       set constraint command       commit        check          .
    ERROR at line 1:
    ORA-02091: transaction rolled back
    ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found
    SQL> set constraint XFK_EMP_DEPT immediate ;
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    ERROR at line 1:
    ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found




                             constraint enable/disable & validate/novalidate

                             -   constraint enable/disable      option                data
                                 check                          .

                             -   Validate :     data check
                                 Novalidate :     data no-check
                                 CF.     option                            default ‘validate’       .

                             -      feature                nonunique index               Primary or
                                 Unique constraint       automatic index
                                     .

                             -           ,              PK or UK       constraint disable
                                             automatic index drop      enable automatic index
                                 rebuild                        .




jkspark@hanafos.com                                  - 164 -
Oracle8i New Features                                                         http://www.ggola.com/




                              -                  FK                 data
                                                      .

    SQL> conn scott/tiger
    SQL> select * from dept ;
         DEPTNO DNAME                           LOC
        ---------- -------------- --------------------------
              10 ACCOUNTING NEW YORK
              20 RESEARCH                     DALLAS
              30 SALES                        CHICAGO
              40 OPERATIONS                   BOSTON
    SQL> alter table emp drop constraint XFK_EMP_DEPT ;
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    1 row created.
    SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno)
       2 references dept(deptno) enable novalidate ;
    Table altered.
    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    *
    ERROR at line 1:
    ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found

    SQL> alter table emp modify constraint xfk_emp_dept enable validate ;
    *
    ERROR at line 1:
    ORA-02298: cannot validate (SCOTT.XFK_EMP_DEPT) - parent keys not found
    SQL> alter table emp modify constraint xfk_emp_dept disable validate ;
    *
    ERROR at line 1:
    ORA-02298: cannot validate (SCOTT.XFK_EMP_DEPT) - parent keys not found
    SQL> alter table emp modify constraint xfk_emp_dept disable novalidate ;
    Table altered.

    SQL> insert into emp (empno, deptno) values (7777, 50) ;
    1 row created.

    SQL> alter table emp modify constraint xfk_emp_dept enable validate ;
    *
    ERROR at line 1:
    ORA-02298: cannot validate (SCOTT.XFK_EMP_DEPT) - parent keys not found

    SQL> alter table emp modify constraint xfk_emp_dept enable novalidate ;
    Table altered.

    SQL> delete from emp where deptno = 50 ;
    2 rows deleted.

    SQL> alter table emp modify constraint xfk_emp_dept disable validate ;
    Table altered.

    SQL> insert into emp (empno, deptno) values (7777, 50) ;        DML                      .
    *
    ERROR at line 1:
    ORA-25128: No insert/update/delete on table with constraint
    (SCOTT.XFK_EMP_DEPT) disabled and validated
    SQL> alter table emp modify constraint xfk_emp_dept enable validate ;
    Table altered.




jkspark@hanafos.com                                       - 165 -
Oracle8i New Features                                                       http://www.ggola.com/




                            -                      index non-unique index
                                          primary key constraint        automatic
                                index                       index                               .

                            -   Oracle7                      index          column
                                             PK or UK                        .
   SQL> alter table department add constraint xpkdepartment primary key (deptno) ;
   SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
   CONSTRAINT_NAME STATUS
   ------------------------------     --------
   XPKDEPARTMENT                       ENABLED
   SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ;
   INDEX_NAME                        STATUS
   ------------------------------     --------              disable constraint command
   XPKDEPARTMENT                       VALID
   SQL> alter table department modify constraint XPKDEPARTMENT disable ;
   SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
   CONSTRAINT_NAME STATUS
   ------------------------------     --------
   XPKDEPARTMENT                      DISABLED
   SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ;
   no rows selected
   SQL> alter table department drop constraint xpkdepartment ;
   SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
   no rows selected
   SQL> create index xnk_dept_loc on department (deptno, loc) ;
   SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
   no rows selected
   SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ;
   INDEX_NAME                        STATUS
   ------------------------------     --------
   XNK_DEPT_LOC                        VALID
   SQL> alter table department add constraint xpkdepartment primary key (deptno) ;
   SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
   CONSTRAINT_NAME STATUS
   ------------------------------     --------
   XPKDEPARTMENT                       ENABLED
   SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ;
   INDEX_NAME                        STATUS
   ------------------------------     --------
   XNK_DEPT_LOC                        VALID
   SQL> select * from department ;
         DEPTNO DNAME                           LOC
         ----------- -------------- -          ------------
               10       ACCOUNTING               NEW YORK
               20       RESEARCH                DALLAS
               30       SALES                    CHICAGO
               40       OPERATIONS               BOSTON

   SQL> insert into department values ('40', 'DBA', 'Cyber') ;
   *
   ERROR at line 1:
   ORA-00001: unique constraint (SCOTT.XPKDEPARTMENT) violated




jkspark@hanafos.com                                - 166 -
Oracle8i New Features                                                       http://www.ggola.com/




    SQL> alter table department drop constraint XPKDEPARTMENT ;
    SQL> insert into department values ('40', 'DBA', 'Cyber') ;
    1 row created.
    SQL> alter table department add constraint xpkdepartment primary key (deptno) ;
    *
    ERROR at line 1:
    ORA-02437: cannot validate (SCOTT.XPKDEPARTMENT) - primary key violated
    SQL> delete from department where deptno=40 and loc='Cyber' ;
    1 row deleted.
    SQL> alter table department add constraint xpkdepartment primary key (deptno) ;
    Table altered.
    SQL> alter table department disable constraint xpkdepartment ; modify constraint disable command   .
    Table altered.
    SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
    CONSTRAINT_NAME STATUS
    ------------------------------ --------
    XPKDEPARTMENT                   DISABLED
    SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ;
    INDEX_NAME                     STATUS
    ------------------------------ --------
    XNK_DEPT_LOC                    VALID
    SQL> alter table department enable constraint xpkdepartment ;
    Table altered.
    SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT';
    CONSTRAINT_NAME                 STATUS
    ------------------------------   --------
    XPKDEPARTMENT                     ENABLED
    SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ;
    INDEX_NAME                      STATUS
    ------------------------------   --------
    XNK_DEPT_LOC                      VALID



                            CF. nonunique index              unique index           PK
                                          . , unique index             PK
                            PK disable         unique index drop        enable PK
                                           PK Index             . , nonunique index
                                                        feature                .




jkspark@hanafos.com                                - 167 -
Oracle8i New Features                                                                       http://www.ggola.com/




                                 Rely/NoRely Flag

                                 -     DBA rely flag                             DBMS           constraint
                                       validity    check                       constraint      valid
                                                .

                                 -            , usually optimizer Materialized View query
                                       rewrite                    validate        constraint
                                                  query rewrite
                                       validate                rely flag
                                             constraint query rewrite                      .

                                 -     Restrictions
                                       1. RELY and NORELY are relevant only if you are modifying
                                       an existing constraint(that is, you have issued alter table …
                                       modify constraint statement.)
                                       ==> manual
                                                     . Rely option constraint
                                                “relevant only if”                                   .
                                       2. Not null constraint                       .

                                 -                rely            constraint            user_constraints
                                                                    .
                        SQL> alter table emp modify constraint XFK_EMP_DEPT rely disable -
                        novalidate ;

                        Table altered.

                        SQL> select CONSTRAINT_NAME, STATUS, VALIDATED, RELY
                          2 from user_constraints where constraint_name = ' XFK_EMP_DEPT ' ;

                        CONSTRAINT_NAME                  STATUS   VALIDATED            RELY
                        ------------------------------   -------- ------------------- -------
                        XFK_EMP_DEPT                     DISABLED NOT VALIDATED RELY

                        SQL> alter table emp modify constraint XFK_EMP_DEPT norely enable;
                        Table altered.

                        SQL> select CONSTRAINT_NAME, STATUS, VALIDATED, RELY
                             from user_constraints where constraint_name = ' XFK_EMP_DEPT ' ;

                        CONSTRAINT_NAME                  STATUS   VALIDATED                   RELY
                        ------------------------------   -------- -------------------        -------
                        XFK_EMP_DEPT                     ENABLED VALIDATED




jkspark@hanafos.com                                            - 168 -
Oracle8i New Features                                                               http://www.ggola.com/




Oracle8i object new features

                                                   Oracle8 New Features


                              MEMBER Method

                              -            method      PL/SQL, 3GL(extended pro*c), Package
                                  body                          JAVA                    .

                              Dangling REFs

                              -          Oracle8                         dangling REF
                                                update           .
                                  EX) update dept set mgr=NULL where mgr is DANGLING ;

                              -   Oracle8i         update command
                                                         .
                                  EX) analyze table dept validate ref update set dangling to
                                  null ;

                              -                      dangling REFs                       does not
                                  return an error.

                              Nested Table Enhancements
                              -   Nested tables may be stored as Index-Organized Tables

                              -   Constraints may be defined on nested tables

                              -   Locators and references can be used to SELECT or perform
                                  DML on nested tables.(REF               ) A locator returns a
                                  pointer to the nested table, not the rows of the table.

                              Table function for Nested table and VARRAY

                              -   Table function                 (collection type        table      )
                                  Insert into ord values (100, line_item_array_type(
                                    line_item_type(300, 2300),
                                    line_item_type(700, 3300) )) ;

                                  Select o.ord_id, i.prod_id, i.price
Table function
nested table   elements
                                  From ord o, TABLE(o.line_items) I
   DML              .             Where i.prod_id in (300, 700) ;
Varray     PL/SQL procedure
                      .           Update
                                   TABLE( select o.line_items from ord o where ord_id = 100) i
                                  Set i.quantity = 100
                                  Where prod_id = 400 ;




jkspark@hanafos.com                                    - 169 -
Oracle8i New Features                                                             http://www.ggola.com/




LOBs

                                                 Oracle8 New Features

                                   CF. internal LOB storage           CACHE/NOCACHE,
                                   LOGGING/NOLOGGING                                              .
                                   [CACHE NOLOGGING                                ]

                              DBMS_LOB.CREATETEMPORARY (except BFILE type)

                              -   DBMS_LOB.CREATETEMPORARY command
                                  user’s temporary tablespace temporary lob
                                                                          .(except BFILE)

                              -         database     LOB data copy                     application
                                  ability        design      .(   sample                 )

                              -   Temporary LOB the session, transaction, or call
                                              no rollback and no redo logging generated

                              -   In SQL, temporary LOBs may only be used in WHERE clauses,
                                  an INSERTed value, or as the assigned value in an UPDATE.

                              -            temporary lob               lob data
                                  insert              .

 -- The following example uses a temporary LOB to reverse one of the LOB alues in the table
 -- and then inserts the reversed LOB as a new row.
 declare
  c_lob CLOB;                     -- permanent LOB locator
  t_lob CLOB;                     -- temporary LOB locator
  buf      varchar2(32000);        -- }this example assumes the LOB is
  buf2 varchar2(32000);           -- }less than 32K.
  chunk number;
  len     number;
  offset number;
  amount number;

 begin

  select c2 into c_lob from test_lobs where c1 = 1;
  -- Create a temporary LOB.
  -- The parameters to CREATETEMPORARY are locator, use caching or not and duration.
  -- Set no caching and a duration of call
  -- since the temporary LOB is not required outside of this PL/SQL block.

  DBMS_LOB.CREATETEMPORARY(t_lob, FALSE, DBMS_LOB.CALL); -- NEW 8i

  -- Chunk for storing the LOB value.
  -- Using this amount for reads and writes of the LOB will improve performance.
  chunk := DBMS_LOB.GETCHUNKSIZE(c_lob);
  dbms_output.put_line('Chunksize of column c2 is '||chunk);
  dbms_output.put_line('Chunksize of temporary LOB is '|| DBMS_LOB.GETCHUNKSIZE(t_lob));




jkspark@hanafos.com                                   - 170 -
Oracle8i New Features                                                                 http://www.ggola.com/




   len := DBMS_LOB.GETLENGTH(c_lob);
   offset := 1;
   buf := null;

   while offset < len loop
      if len - (offset-1) > chunk then
           amount := chunk;
                else
                             amount := len - (offset-1);
                end if;
      buf2 := null;
      DBMS_LOB.READ(c_lob,amount,offset,buf2);
      buf := buf||buf2;
      offset := offset + amount;
   end loop;


   --Reverse the read data and write it to the temporary LOB.
   buf2 := null;
   for i in reverse 1..len loop
       buf2 := buf2||substr(buf,i,1);
   end loop;

   -- Write the whole lot in one go.
   -- Note, if this was a large amount of data then ideally it should be written using the
   -- available chunksize of the temporary LOB.
   DBMS_LOB.WRITEAPPEND(t_lob,len,buf2); -- NEW 8i

   -- Now insert a new row into the table setting the CLOB column to the value of the temporary LOB.
   -- This can be done in one of two ways:
   --(i) A new row can be inserted with an empty locator, the locator
   --       retrieved and the LOB value copied with DBMS_LOB.COPY.
   --(ii) A new row can be inserted passing the temporary LOB locator
   --       as a bind variable to the insert.
   --
   --Using the second method:
   insert into test_lobs values (5,t_lob,null,null) returning c2 into c_lob;

   --Free the temporary LOB explicitly.
   if DBMS_LOB.ISTEMPORARY(t_lob) = 1 then
                DBMS_LOB.FREETEMPORARY(t_lob);
   end if;

 dbms_output.put_line('Length of CLOB inserted into record 5 is '|| DBMS_LOB.GETLENGTH(c_lob));
  commit;
 end;
  /




jkspark@hanafos.com                                        - 171 -
Oracle8i New Features                                             http://www.ggola.com/




Recovery Manager

                                           Oracle8 New Features


                        Catalog Database
                        -   Oracle8
                            # sqlplus rmanuser/rmanuser
                            SQL> @$ORACLE_HOME/rdbms/admin/catrman.sql
                            : catalog                 user              .
                                             user default tablespace catalog DB
                                      .

                        -   Oracle8i
                            RMAN> create catalog tablespace “TS_RMAN” ;
                            : command catalog DB                   .

                        Newly supported command

                        -   RMAN       Database startup and shutdown command
                                             .




jkspark@hanafos.com                            - 172 -
Oracle8i New Features                                                      http://www.ggola.com/




Advanced Queuing

                            Oracle8i                           new features
                            interface                    C++     JAVA               .

                        Database Security
                        -   AQ_ADMINSTRATOR_ROLE allows maintain queues in any
                            schema.

                        -   AQ_USER_ROLE          user’s schema        queues    enqueues and
                            dequeues              .

                        -   DBMS_AQADM allows the user to maintain AQ objects in
                            their schema only.

                        -   DBMS_AQ allows enqueues and dequeues from queues in
                            user’s schema only.

                        -   Grant(or revoke)_system_privilege in package
                            DBMS_AQADM                  grant or revoke the
                            ENQUEUE_ANY, DEQUEUE_ANY, MANAGE_ANY
                            privileges             .

                        -   Grant(or revoke)_queue_privilege in package
                            DBMS_AQADM                  grant or revoke the
                            ENQUEUE_ANY, DEQUEUE_ANY, ALL privileges on
                            individual queues              .



Oracle Enterprise Manager V2

                            Oracle Enterprise Edition           OEM
                                    free-of-charge DBA management pack              .

                        New architecture

                        -           2-tier , fat client                           Oracle
                            Management Server                     3-tier        distributed
                            architecture                .

                        -   Java console    administration application
                            platform             .
                            client JAVA console – middle tier OMS – server Oracle through
                            agent

                        -   OMS                a set of database tables       repository
                            Multiple system                 .




jkspark@hanafos.com                            - 173 -

More Related Content

PPT
JEE Course - JEE Overview
PDF
Java EE 6 workshop at Dallas Tech Fest 2011
PDF
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
PDF
Lecture 1: Introduction to JEE
PDF
Java 7 workshop
PDF
Java EE6 CodeCamp16 oct 2010
PPT
Introduction to java_ee
PDF
Java EE 6 & GlassFish 3
JEE Course - JEE Overview
Java EE 6 workshop at Dallas Tech Fest 2011
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
Lecture 1: Introduction to JEE
Java 7 workshop
Java EE6 CodeCamp16 oct 2010
Introduction to java_ee
Java EE 6 & GlassFish 3

What's hot (20)

PDF
The State of Java under Oracle at JCertif 2011
PPT
Java 9 Module System
PPT
Rollin onj Rubyv3
PDF
Overview of Java EE 6 by Roberto Chinnici at SFJUG
PDF
GlassFish REST Administration Backend
PDF
02.egovFrame Development Environment training book
PDF
01.egovFrame Training Book II
PDF
Contextual Dependency Injection for Apachecon 2010
PPT
Java & J2EE Struts with Hibernate Framework
PDF
04.egovFrame Runtime Environment Workshop
PDF
S313557 java ee_programming_model_explained_dochez
DOCX
Spring notes
PDF
OSGi & Java EE in GlassFish @ Silicon Valley Code Camp 2010
PDF
jsf2 Notes
PDF
JSF2 and JSP
PDF
Java EE 6 Hands-on Workshop at Dallas Tech Fest 2010
PPTX
Advance java1.1
PDF
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
PDF
Java Web Programming [4/9] : JSP Basic
PDF
Andrei Niculae - JavaEE6 - 24mai2011
The State of Java under Oracle at JCertif 2011
Java 9 Module System
Rollin onj Rubyv3
Overview of Java EE 6 by Roberto Chinnici at SFJUG
GlassFish REST Administration Backend
02.egovFrame Development Environment training book
01.egovFrame Training Book II
Contextual Dependency Injection for Apachecon 2010
Java & J2EE Struts with Hibernate Framework
04.egovFrame Runtime Environment Workshop
S313557 java ee_programming_model_explained_dochez
Spring notes
OSGi & Java EE in GlassFish @ Silicon Valley Code Camp 2010
jsf2 Notes
JSF2 and JSP
Java EE 6 Hands-on Workshop at Dallas Tech Fest 2010
Advance java1.1
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
Java Web Programming [4/9] : JSP Basic
Andrei Niculae - JavaEE6 - 24mai2011
Ad

Viewers also liked (7)

DOC
O10g flashback 13
DOC
O10g data control_10
DOC
OracleHistory1
PDF
Omni channel failure study
DOC
Oracle History #14
PDF
Drupal SDL WorldServer
PDF
Oracle History #6
O10g flashback 13
O10g data control_10
OracleHistory1
Omni channel failure study
Oracle History #14
Drupal SDL WorldServer
Oracle History #6
Ad

Similar to Oracle History #5 (20)

PDF
Scotas - Oracle Open World Sao Pablo
PDF
Building Content Applications with JCR and OSGi
PDF
Java keynote preso
PPT
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
PPTX
JAVA_Day1_BasicIntroduction.pptx
PPTX
JAVAPart1_BasicIntroduction.pptx
PDF
8i r3 nfs
PDF
Porto Tech Hub Conference 2023 - Revolutionize Java DB AppDev with Reactive S...
PDF
JDK 8 and JDK 8 Updates in OpenJDK
PDF
1java Introduction
PDF
BarcelonaJUG - Revolutionize Java Database Application Development with React...
PPT
Lecture 19 dynamic web - java - part 1
PDF
Andersen_Revolutionize Java DB AppDev with Reactive Streams and Virtual Threa...
PDF
Cloud Conference Day - Revolutionize Java Database App Development with React...
PDF
CloudTalks - Revolutionize Java DB AppDev with Reactive Streams and Virtual T...
PDF
AI Industrial Summit - SOFIA, BULGARIA - A High-Speed Data Ingestion Microser...
PDF
Java in a world of containers
PDF
Java in a World of Containers - DockerCon 2018
PDF
JVMs in Containers
PDF
JVMs in Containers - Best Practices
Scotas - Oracle Open World Sao Pablo
Building Content Applications with JCR and OSGi
Java keynote preso
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
JAVA_Day1_BasicIntroduction.pptx
JAVAPart1_BasicIntroduction.pptx
8i r3 nfs
Porto Tech Hub Conference 2023 - Revolutionize Java DB AppDev with Reactive S...
JDK 8 and JDK 8 Updates in OpenJDK
1java Introduction
BarcelonaJUG - Revolutionize Java Database Application Development with React...
Lecture 19 dynamic web - java - part 1
Andersen_Revolutionize Java DB AppDev with Reactive Streams and Virtual Threa...
Cloud Conference Day - Revolutionize Java Database App Development with React...
CloudTalks - Revolutionize Java DB AppDev with Reactive Streams and Virtual T...
AI Industrial Summit - SOFIA, BULGARIA - A High-Speed Data Ingestion Microser...
Java in a world of containers
Java in a World of Containers - DockerCon 2018
JVMs in Containers
JVMs in Containers - Best Practices

More from Kyung Sang Jang (14)

DOC
O10g miscellaneous 17
DOC
O10g bak rec_15
DOC
O10g asm 16
DOC
O10g app support_11
DOC
O10g security 12
DOC
Oracle History #7
DOC
Oracle History #8
DOC
Oracle History #9
DOC
Oracle History #4
DOC
OracleHistory3
DOC
OracleHistory2
PPTX
DB와암호화 패턴
PPTX
NO PARALLEL DML
PPTX
11g nf sql_anlz
O10g miscellaneous 17
O10g bak rec_15
O10g asm 16
O10g app support_11
O10g security 12
Oracle History #7
Oracle History #8
Oracle History #9
Oracle History #4
OracleHistory3
OracleHistory2
DB와암호화 패턴
NO PARALLEL DML
11g nf sql_anlz

Recently uploaded (20)

PDF
Sports Quiz easy sports quiz sports quiz
PDF
VCE English Exam - Section C Student Revision Booklet
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PDF
Classroom Observation Tools for Teachers
PDF
Microbial disease of the cardiovascular and lymphatic systems
PPTX
master seminar digital applications in india
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
102 student loan defaulters named and shamed – Is someone you know on the list?
PPTX
Cell Structure & Organelles in detailed.
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PPTX
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
PPTX
Pharma ospi slides which help in ospi learning
PDF
Complications of Minimal Access Surgery at WLH
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPTX
GDM (1) (1).pptx small presentation for students
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
Sports Quiz easy sports quiz sports quiz
VCE English Exam - Section C Student Revision Booklet
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
Classroom Observation Tools for Teachers
Microbial disease of the cardiovascular and lymphatic systems
master seminar digital applications in india
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
2.FourierTransform-ShortQuestionswithAnswers.pdf
O7-L3 Supply Chain Operations - ICLT Program
102 student loan defaulters named and shamed – Is someone you know on the list?
Cell Structure & Organelles in detailed.
TR - Agricultural Crops Production NC III.pdf
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Pharmacology of Heart Failure /Pharmacotherapy of CHF
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
Pharma ospi slides which help in ospi learning
Complications of Minimal Access Surgery at WLH
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
GDM (1) (1).pptx small presentation for students
FourierSeries-QuestionsWithAnswers(Part-A).pdf

Oracle History #5

  • 1. New Features for Administrators (Oracle8i) April, 2001 CloudBox Jang Kyung Sang
  • 2. Oracle8i New Features http://www.ggola.com/ Oracle8i New Features for Administrators Course 1. Java in the database 2. Optimizer and Query Improvements 3. Summary Management 4. Indexes and Index-Organized Tables 5. Basic Partition 6. Partition Maintenance 7. Composite Partitioning 8. Added New Features for partition 9. Universal Installer Migration and Upgrade 10. Tablespace Management 11. Database Resource Manager 12. Manageability Features 13. Availability and Recoverability 14. Features of Net8 15. SQL*Plus, PL/SQL and National Language Support 16. Database Security 17. Partial addition for Oracle8i jkspark@hanafos.com -2-
  • 3. Oracle8i New Features http://www.ggola.com/ 1. Java in the database What does Oracle8i support for java? . Open, portable, productive, internet computing language Oracle8i enterprise class java server - Java Virtual Machine integrated with Database - use java anywhere PL/SQL used - productive programming tools - industry standard components Oracle8i java application server platform application java solution . Supported three products for building java database application - standards-compliant JDBC drivers to access Oracle from JAVA applications - precompiler(SQLJ) for embedding SQL in java applications - Oracle JDeveloper (JDBC, SQLJ, complete development environment) CF. Oracle8i JVM(Java virtual machine) . EJB(Enterprise java bean) transaction server CORBA clients . Five major components that integrated JVM with Oracle8i - Oracle JVM Javasoft JDK specification Oracle architecture optimizing . - Embedded JDBC Driver JVM server locally SQL and PL/SQL access . - SQL and PL/SQL Inter-Language Method Services mechanism JAVA call . SQL PL/SQL call C language external procedure ‘call out’ standard mechanism . , calling mechanism Oracle8i SQL and PL/SQL Java call . jkspark@hanafos.com -3-
  • 4. Oracle8i New Features http://www.ggola.com/ - Net8 java program SQL ‘publishes’ SQL Java access . - CORBA IIOP(Internet Inter-ORB Protocol) . RDBMS access second protocol ( Net8( SQL*Net) first protocol ) Oracle8i java CORBA2.0-compliant object request broker embed CORBA RDBMS call in and call out . CF. java stored program ORB ‘published’ clients RDBMS java program access alternate mechanism . Major components of JVM - SQLJ Translator : JAVA and SQL program . - Object Memory Management : allocate and free memory in standard chunks called object memories. - Memory manager/Garbage collector : Oracle database environment manager JVM memory heaps, allocating and collecting object memories manage . - Java class loader : Standard “.class” format and in a compressed form Oracle VM other systems java binaries interchange . (both export and import) - Bytecode compiler : “.class” java binary standard java program translate . - Interpretation/run-time : execute standard java binaries. - Native compilation : C language java program execution performance . - Library manager : java program manage . - Standard library : java API specification(java.lang, java.io, java.math, and java.util) standard libraries Oracle Java VM support . CF. The java interpreters and compilers are based on the JDK 1.1.6 standards jkspark@hanafos.com -4-
  • 5. Oracle8i New Features http://www.ggola.com/ Using JAVA Integrated Java, SQL, and PL/SQL - Integration : Java SQL and PL/SQL call ? SQL and PL/SQL Java call ? Java call SQL and PL/SQL - Java standard JDBC interface database SQL and PL/SQL CALL . - Java VM OCI thin JDBC drivers interface standard JDBC driver embed . - , outside database JDBC java application code Oracle Java VM . - architecture outside or within RDBMS java and SQL same interface application partitioning flexibility and efficiency . SQL and PL/SQL call java - SQL and PL/SQL java call SQL PL/SQL call mechanism . - Oracle8i java stored procedure PL/SQL automatic dependency-checking mechanisms java call . - Oracle8i new DDL extensions “create procedure as java” java stored procedure, function, and triggers . - Oracle8i PL/SQL namespace java stored procedure any PL/SQL . jkspark@hanafos.com -5-
  • 6. Oracle8i New Features http://www.ggola.com/ What is JDBC? JDBC(Java Database Connectivity) - JDBC java RDB access standard set of java classes . - JDBC javasoft SQL92 syntax and types . mechanisms java client database automatic data streaming . - JDBC Oracle performance improvement array interface vendor-specific extensions . JDBC drivers - JDBC Thin driver : web browser applets . (means thin client) driver RDBMS directly communicating java sockets client installation . - JDBC OCI : driver Oracle Call Interface Net8 RDBMS engine communicating client OCI library . - JDBC KPRB : driver java stored procedure server side OCI Oracle KPRB library . - drivers the same syntax and APIs and oracle extensions java application very portable . , connect string minor modification application 3 . Features in JDBC Drivers - 3 JDBC drivers Javasoft JDBC 1.22 specification JDBC 2.0 specification . , JDBC 2.0 specification client side XA support . CF. server side driver XA specification JDBC 2.0 specification . - Oracle JDBC drivers standard JDBC driver Oracle specification extensions important features . 1. access to Oracle7 types (like ROWIDs and REFCURSORs) 2. access to Oracle8i object-relational extensions, REFs, Lobs, and BFILEs jkspark@hanafos.com -6-
  • 7. Oracle8i New Features http://www.ggola.com/ 3. performance enhancement with operation to prefetch rows and the array interface 4. access to PL/SQL stored procedures with Oracle7 and 8 5. access to java stored procedures with Oracle8i 6. access across all Net8 certified firewalls SQLJ SQLJ Oracle Pro*C precompilers Java application embedded SQL . Preprocessor embedded SQL statements SQLJ Java code(with JDBC call) translate . SQLJ generated code 100% compliant with Javasoft JDBC specification . Improve developer productivity - smaller, cleaner, simpler code than JDBC - SQL syntax errors and identification of SQL/Java type mismatches detection code quality improvement - JDeveloper Java tool integration - Standard language specification, compatible translators - Oracle Translator standard compliant - SQLJ applications binary portability (property) platforms different vendor’s database portable . SQLJ supports - SQLJ JDBC application programs . (concise more than JDBC. easier to write or maintain) - 3 SQLJ . 1. JDBC (character string, prepare and execute statements, and bind and define variables) directly embed SQL statements . 2. SQL statements Java bind variables and expressions . jkspark@hanafos.com -7-
  • 8. Oracle8i New Features http://www.ggola.com/ 3. application simple default connection and other syntactic elements features . - During the translation phase, SQLJ detects SQL semantic errors and Java and SQL type mismatches. - SQLJ provides strong typed queries through the use of SQLJ Iterators.(first-class java types for cursors) - SQLJ SQL precompilation techniques run- time execution more efficient . precompiling Oracle SQLJ executions . Code example JDBC VS SQLJ - JDBC Java.sql.CallableStatement stmt; Connection conn; ResultSet results; Conn = DriverManager.getConnection 9”jdbc:default”); stmt = conn.prepareStatement (“select ename from emp where sal > ? and deptno = ?”); stmt.setInteger(1, salparm); stmt.setInteger(2, deptnoparm); results = stmt.executeQuery(); - SQLJ ResultSet results ; #sql results = { select ename from emp where sal > :salparm and deptno = :deptnopark} ; Using SQLJ with Oracle - SQLJ JDBC run-time environment deployed configuration deployed . CF. SQLJ run-time : Java + JDBC driver - SQLJ applications deploy JDBC driver . Oracle or users JDBC/OCI/thin JDBC driver . - Oracle8i Java VM embedded SQLJ translator Oracle SQLJ java stored procedures and triggers . - Write program in SQLJ --> SQLJ translator : converts to java + JDBC --> run the program jkspark@hanafos.com -8-
  • 9. Oracle8i New Features http://www.ggola.com/ Java program Java stored programs - open alternative complementing PL/SQL - java is fully functional. PL/SQL Java . - PL/SQL SQL-intensive SQLJ java stored procedure . - Java stored procedures 3 run-time contexts . 1. stored functions and procedures (java program SQL ) 2. all triggers java . 3. java object-relational methods . Developing 1. write java stored programs 2. Java VM load java code. Java classes load . - SQL*Plus “create java ddl”command - standard Oracle utility “LOADJAVA” 3. publish the java procedure to SQL. - expose the top-level java entrypoint - map parameters and SQL and PL/SQL datatypes - set up appropriate user privileges 4. SQL or PL/SQL call java program CF. Oracle PL/SQL call SQL or PL/SQL java program call syntax . Example (java installation . Refer to page 11) create or replace java source named "NewJava" as public class JavaMaster { static public String Msg(String guys) { return "Good morning " + guys ; } } / create or replace function JavaFunc (str varchar2) return varchar2 as language java name 'JavaMaster.Msg (java.lang.String) return java.lang.String' ; / SQL> select JavaFunc('girls') from dual ; JAVAFUNC('GIRLS') -------------------------------------------------------------------------------- Good morning girls jkspark@hanafos.com -9-
  • 10. Oracle8i New Features http://www.ggola.com/ Components Develop server-side business logic as distributed components - components improve developer productivity in following ways. 1. reuse server-side business logic 2. improve application design as reusable modules 3. simplify deployment in a multitier environment Support java component programming models - Oracle8i traditional CORBA servers Java implemented . , ORB Java VM java applications . - EJB(the industry standard enterprise javabeans) component model database java . Simple declarative transaction commit or rollback transaction operations . CF. Java or EJBs implemented CORBA servers Oracle8i MTS . Server-side ORB (on MTS) - IIOP listener : Oracle8i standard CORBA/IIOP binding protocol extended .(Net8) - IIOP dispatcher : Oracle8i IIOP-based method invocations extened . - Oracle8i integrates a CORBA 2.0 ORB. - MTS platforms : Java VM MTS . MTS . Enterprise JavaBeans (EJBs) - EJBs is a server-oriented component model for Java. Oracle8i EJBs transaction server platforms EJB 1.0 specification . - Significant advantages using EJBs 1. developers advanced system programming skills . 2. Pure Java definition D/COM, CORBA jkspark@hanafos.com - 10 -
  • 11. Oracle8i New Features http://www.ggola.com/ dependency . 3. platform vendors EJB . Java Configuration Java VM classes installation - Java VM manually initialize script . - $ORACLE_HOME/javavm/install/initjvm.sql (user by “SYS”) CF. test 1 . - script 4000 java classes initial package . - DBMS_JAVA package only used internally by Oracle . - Needed initial parameter values for executing initjvm.sql : shared_pool_size 50M java_pool_size 50M rollback segment 100M Java-related initial parameter - shared_pool_size : static java variables UGA space - java_pool_size : shared java objects space java class loading . large java application system 50M java stored procedure 20M . - java_soft_sessionspace_limit : size user’s session java memory usage RDBMS trace file . default 1M. - java_max_sessionspace_size : size out-of- memory failure session kill . Default 4G invisible java programs memory usage . CF. java-related memory application system java setting . jkspark@hanafos.com - 11 -
  • 12. Oracle8i New Features http://www.ggola.com/ Internet File System iFS Windows OS directories database access . Oracle8i Oracle8i Java VM Java application . Oracle iFS several different protocols access . - SMB : MS windows95, 98, NT protocol - HTTP : Web browser and network computer - FTP : FTP clients command line - SMTP, IMAP4, POP3 : e-mail protocol Data integration - iFS application developers 3 APIs , Java, CORBA, and PL/SQL . - iFS document system document automatically decompose(parse) document recompose(render) . - XML(Extended markup language) . CF. iFS application . jkspark@hanafos.com - 12 -
  • 13. Oracle8i New Features http://www.ggola.com/ 2. Optimizer and Query Improvements Stored Outline Optimizer plan stability - Optimizer feature Oracle8i well-tuned applications SQL hints (good access path) SQL . - Plan Equivalence : plan 1. SQL Statement text must match 2. Plans are maintained through : - new oracle versions - new statistics on objects - init.ora parameter changes - database reorganization - schema changes CF. table index stored outline index . Creating stored outlines - Outline oracle automatic or SQL creation rule-based or cost-based optimizers . oracle outline cost-based optimize . - Session init.ora parameter create_stored_outlines parameter true default category category name category stored outlines . - Test initial parameter database restart error parameter create_stored_outlines SVRMGRL> show parameter SQL> select name from v$parameter . Oracle8.1.5 Reference parameter session level test . CF. system user “create any outline” privilege outline user grant . jkspark@hanafos.com - 13 -
  • 14. Oracle8i New Features http://www.ggola.com/ - Session category name default category name . SQL> alter session set create_stored_outlines = true ; Session altered. SQL> select d.dname, e.ename from emp e, dept d 2 where e.deptno = d.deptno ; DNAME ENAME -------------- ---------- RESEARCH12 SMITH SALES12 ALLEN .............. ACCOUNTING12 MILLER 14 rows selected.……….. SQL> alter session set create_stored_outlines = false ; SQL> select * from user_outlines ; NAME CATEGORY USED TIMESTA VERSION SQL_TEXT ---------------------------------------------------------------------------------------------------------------- SYS_OUTLINE_0107311031050000 DEFAULT UNUSED 31Jul01 8.1.6.2.0 select d.dname, e.ename from emp e, dept d where e.deptno = d.deptno SQL> alter session set create_stored_outlines = cat_emp ; Session altered. SQL> select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno ; ENAME LOC -------------- ---------- SMITH DALLAS189 ALLEN CHICAGO189 .............. MILLER NEW YORK189 14 rows selected.……….. SQL> select * from user_outlines ; NAME CATEGORY USED TIMESTA VERSION SQL_TEXT -------------------------------------------------------------------------------- ------------------------------- SYS_OUTLINE_0107311031050000 DEFAULT UNUSED 31Jul01 8.1.6.2.0 select d.dname, e.ename from emp e, dept d where e.deptno = d.deptno SYS_OUTLINE_0107311026420001 CAT_EMP UNUSED 31Jul01 8.1.6.2.0 select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno SYS_OUTLINE_0107311024590000 CAT_EMP UNUSED 31Jul01 8.1.6.2.0 select * from user_outlines SQL> alter session set create_stored_outlines = false ; - category DEFAULT category . outline name system default . - Outline parameter false select * from outlines stored outline . - outline category shared_pool pinning execution plan . jkspark@hanafos.com - 14 -
  • 15. Oracle8i New Features http://www.ggola.com/ - stored outline . SQL> create or replace outline emp_join for category cat_emp on select /*+ FULL(DEPT) */ d.dname, e.ename from emp e, dept d where e.deptno = d.deptno order by 1, 2 ; Outline created. SQL> select * from user_outlines ; NAME CATEGORY USED TIMESTA VERSION SQL_TEXT ---------------------------------------------------------------------------------------------------------------- SYS_OUTLINE_0107311031050000 DEFAULT UNUSED 31Jul01 8.1.6.2.0 select d.dname, e.ename from emp e, dept d where e.deptno = d.deptno SYS_OUTLINE_0107311026420001 CAT_EMP UNUSED 31Jul01 8.1.6.2.0 select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno SYS_OUTLINE_0107311024590000 CAT_EMP UNUSED 31Jul01 8.1.6.2.0 select * from user_outlines EMP_JOIN CAT_EMP UNUSED 31Jul01 8.1.6.2.0 select /*+ FULL(DEPT) */ d.dname, e.ename from emp e, dept d where e.deptno = d.deptno order by 1, 2 - outline name outline sys name . category . category . Using stored outlines - outline command . SQL> alter session set use_stored_outlines = true or category_name ; - create category name true outline . - Category category default category text match . , category match outline default category outline outline . - To determine a SQL statement’s execution plan 1. shared pool matching text and outline category 2. 1 data dictionary outline query 3. 2 SQL outline execution plan . 4. 2 normal methods(non-outline) . - , outline hints outline user_outlines user_outline_hints view . jkspark@hanafos.com - 15 -
  • 16. Oracle8i New Features http://www.ggola.com/ Maintaining stored outlines - Package ‘OUTLN_PKG’ 1. drop_unused : drop unused outline 2. drop_by_cat : drops categories of outlines 3. update_by_cat : rename categories - ALTER OUTLINE outline_name command 1. rename to new_outline_name ; (outline name ) 2. rebuild ; (outline execution path ) 3. change category to new_category_name ; (category ) Database creation automatically - Stored outlines in tables in schema OUTLN schema OUTLN 1. OL$ : outline name, category, timestamp, statement text tables outlines . 2. OL$HINTS : hints for the outlines in OL$ (system tablespace ) - Data dictionary view 1. DBA/ALL/USER_OUTLINES 2. DBA/ALL/USER_OUTLINE_HINTS DBMS_STATS This package enables you to generate and manage statistics for cost-based optimization. The statistics can reside in the data dictionary or in a table created in the user’s schema. Only statistics stored in the dictionary itself will have an impact on the cost-based optimizer. (but cannot gather cluster statistics) Generating statistics - Gathering sub-procedure 1. gather_index_stats : index 2. gather_table_stats : table, column and index 3. gather_schema_stats : all objects in a schema 4. gather_database_stats : all objects in a database - usage for table statistic DBMS_STATS.GATHER_TABLE_STATS ( schema, table, partition, sample size(%), block sample?(or row), columns, parallelism degree, table and all partitions, cascade to indexes) ; - How can you gather the statistics ? 1. statistics serially or in parallel index statistics only serially 2. random sampling or computed 3. block sampling faster than row sampling 4. column lists 5. table index statistics 6. statistics tables can hold statistics to enable you to experiment with different sets of statistics. jkspark@hanafos.com - 16 -
  • 17. Oracle8i New Features http://www.ggola.com/ Moving statistics scott emp table export file dump database import statistic import source database target database . 1. table statistics . usage : dbms_stats. gather_table_stats(schema, table, partition, sample size(%), block sample?(or row), columns, parallelism degree, table and all partitions, cascade to indexes) meaning : table statistic . (index statistics cascade to indexes TRUE ) example : SQL> exec dbms_stats.gather_table_stats( 'SCOTT', 'EMP', NULL, 20, FALSE, 'FOR ALL COLUMNS', 4, 'DEFAULT', TRUE) ; 2. Statistics table schema . usage : dbms_stats. create_stat_table(‘SCOTT’, ’stat_tab_name’, ’tablespace_name’) meaning : data dictionary statistics export table . example : SQL> exec dbms_stats.create_stat_table('SCOTT', 'STAT_SCOTT', 'USERS') ; 3. Statistics data table copy . usage : dbms_stats. export_table_stats(‘SCOTT’, ‘EMP’, NULL(partition ), ‘stat_tab_name’, ‘stat_id’(ID ), TRUE(index stat) ) ; Source Database meaning : statistics user’s table export . table export backup or copy . example : SQL> exec dbms_stats.export_table_stats('SCOTT', 'EMP', NULL, 'STAT_SCOTT', 'Stat 20010731', TRUE) ; File dump exp/imp 4. database table file dump OR export table import database Database link copy link copy table , stat_scott table database data data dictionary . usage : dbms_stat. Target Database import_table_stat (export_table_stas argument) meaning : schema table data dictionary . example : SQL> exec dbms_stats.import_table_stats('SCOTT', 'EMP', NULL, 'STAT_SCOTT', 'STAT 20010731', TRUE) ; jkspark@hanafos.com - 17 -
  • 18. Oracle8i New Features http://www.ggola.com/ 5. user schema table drop . usage : dbms_stats. drop_stat_table(‘SCOTT’, ‘stat_tab_name’) meaning : table drop . example : SQL> exec dbms_stats.drop_stat_table ('SCOTT', 'STAT_SCOTT') ; Top-N SQL Now Oracle8i supports ordering of views and in-line views. Sorts only the required number of rows - Oracle8i in-line view order by . - Oracle rownum < 3 2 value memory rows 2 value . - Example : order by SQL> select * from (select empno, deptno, hiredate from emp order by hiredate desc) where rownum < 3 ; EMPNO DEPTNO HIREDAT ---------- ---------- ------- 7876 20 12Jan83 7788 20 09Dec82 SQL> select * from (select empno, deptno, hiredate from emp) where rownum < 3 ; EMPNO DEPTNO HIREDAT ---------- ---------- ------- 7369 20 17Dec80 7499 30 20Feb81 - Query (searching for the top few values) run considerably faster in Oracle8i. jkspark@hanafos.com - 18 -
  • 19. Oracle8i New Features http://www.ggola.com/ ROLLUP and CUBE Aggregate operators group by rollup and cube crosstab report . 1 2 3 Total 1 2 3 6 1 2 3 6 Total 2 4 6 12 Rollup operation SQL> select , , sum(year) from emp group by rollup( , ); - group by total grand total . sum(year) 1 1 2 2 3 3 6 1 1 ……………….. ……………….. 6 ……………….. 12 - function data result rows n types( ) m status( ) ROLLUP group by (n X (m+1)) + 1 = ? rows . - (2 X (3+1)) + 1 = 9 rows . jkspark@hanafos.com - 19 -
  • 20. Oracle8i New Features http://www.ggola.com/ Cube operation SQL> select , , sum(year) from emp group by cube( , ) order by , ; sum(year) 1 1 2 2 ROLLUP 3 3 6 1 1 2 2 + 3 3 6 CUBE 1 2 2 4 3 6 GRAND 12 - function data result rows n types( ) m status( ) CUBE group by ((n+1) X (m+1)) + 1 = ? rows . - . , (type + 1) X (status + 1) . (2 + 1) X (3 + 1) = 12 . Grouping function Rollup and cube total value null . data value null null . new function grouping . - grouping(column_name) decode 0 value null 1 rollup or cube null . - , . decode(grouping(column),1,’null of total’,’value’) jkspark@hanafos.com - 20 -
  • 21. Oracle8i New Features http://www.ggola.com/ TRIM New function trim ltrim rtrim . ANSI . Using function SQL> select last_name, trim(leading ‘X’ from last_name) as trimmed from emp where last_name like ‘X%’ ; - TRIM(leading ‘X’ from column) : LTRIM - TRIM(trailing ‘X’ from column) : RTRIM - TRIM(both ‘X’ from column) : L + R (default) - TRIM( ‘X’ from column) : both . - TRIM(last_name) : character space trim characters . CF. trim character . trim character only one character . New and Obsolete Obsolete parameter : sort_direct_writes, sort_write_buffers, sort_write_buffer_size, sort_read_fac New parameter : sort_multiblock_read_count this parameter define the number of blocks read from temporary segments during sorts. (db_multiblock_read_count ) jkspark@hanafos.com - 21 -
  • 22. Oracle8i New Features http://www.ggola.com/ 3. Summary Management Materialized Views In general, this will be used for Data Warehouse, Distributed Computing, Mobile Computing Summary and aggregate data - View view base table data view , summary and aggregate data(pre-computed) data segment view . - , expensive and complex joins view . Create materialized view day_of_booking as Select bkg_no, sum(amt) as total_amount From booking Where bkg_dt = sysdate Group by bkg_no ; - M-View SQL base table M-View .( query rewrite ) CF. The process of modifying a query to use the view rather than the base table is called a query rewrite. - Create materialized view is synonym for create snapshot. - M-View SQL> create materialized view view_name build deferred refresh …. as select ….. “build” clause M-View . Build clause “immediate or deferred” option . 1. immediate 2. deferred refresh . CF. build clause default “build immediate” . CF. remote tables . CF. M-View order by clause creation refresh . , order by clause M-View query definition . query performance order by clause column M-View select list column index recommend . jkspark@hanafos.com - 22 -
  • 23. Oracle8i New Features http://www.ggola.com/ Materialized view refresh option Base table M-View base table sync . ‘Refresh’ . - Complete : Base table M-View M-View query data . - Fast : last refresh 1. M-View log 2.Direct loader log (direct loads new rows rowid M-Views refresh) - Force : . complete fast . (This is default refresh type.) - Never : Refresh . CF. M-View system user user grant ‘create materialized view’ privilege . Refresh mode : Refresh . - ON DEMAND Manually DBMS_MVIEW package procedure . 1 …REFRESH(‘BOOKING’,PARALLELISM => 3); >> specified M-View 2 …REFRESH_DEPENDENT(VN_FAIL_CNT, ‘EMP’) ; >> M-Views on based 1 base tables (number_of_failures out variable ) 3 …REFRESH_ALL_MVIEWES ; >> all M-Views - Automatic Refresh 1. ON COMMIT ( synchronous) : base table commit . 2. START WITH-NEXT(asynchronous) : specified time supported complete mode only. (must initiate job processes) CF. , ON COMMIT M-View join or aggregate views Oracle8.1.5 manual only join view single table aggregate .( Nested M-View join and aggregate view fast on commit ) jkspark@hanafos.com - 23 -
  • 24. Oracle8i New Features http://www.ggola.com/ Materialized view types (UNION set operation ) - joins and aggregates type M-View fast refresh new data direct path method add fast refresh . The where clause can contain inner equi-joins only.(no outer joins) 1. group by column select list . 2. function : sum, count(x), count(*), count(distinct x), avg, variance, stddev, min, max - single table aggregate M-View log fast refresh count sum count count or sum group function count sum . count(*) where clause . 1. function : count, sum, avg, variance, stddev - only joins : fast refresh 1. each detail tables M-View log 2. select list detail table rowid . 3. outer join inner table column unique constraint . CF. M-View log rowid column speed up refresh M-View rowid column index recommend . CF. detail tables rowid tables tables DML fast refresh . Test M-View - Test Oracle8.1.6.2 M-View . Oracle Manual . - , Oracle version Oracle9i fixed Test . - Refresh complete . dbms_mview package refresh M-View . - Refresh fast on commit on demand M-View log Test Query Rewrite Usage . jkspark@hanafos.com - 24 -
  • 25. Oracle8i New Features http://www.ggola.com/ Example - complete on demand (joins and aggregates) SQL> sho user USER is "SYSTEM" SQL> grant create materialized view to scott ; Grant succeeded. SQL> conn scott/tiger Connected. SQL> set timing on SQL> set serveroutput on SQL> create materialized view mv_emp_sales refresh complete on demand 2 as select e.empno, d.deptno, sum(sal) from emp e, dept d 3 where e.deptno = d.deptno group by e.empno, d.deptno ; Materialized view created. Elapsed: 00:00:46.95 SQL> select * from mv_emp_sales ; EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- 7369 20 52428800 .................... 9022 95 6553600 21 rows selected. EMPNO SAL update SQL> update emp set sal = 10 where empno = 9022; 256 rows updated. . SQL> commit ; MV creation Commit complete. refresh SQL> select * from mv_emp_sales ; . EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- 7369 20 52428800 .................... 9022 95 6553600 21 rows selected. Refresh procedure SQL> exec dbms_mview.refresh('MV_EMP_SALES') ; PL/SQL procedure successfully completed. . Elapsed: 00:00:48.04 SQL> select * from mv_emp_sales ; EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- 7369 20 52428800 .................... 9022 95 655360 21 rows selected. CF. M-View performance M-View partitioning parallel operation . jkspark@hanafos.com - 25 -
  • 26. Oracle8i New Features http://www.ggola.com/ SQL> update emp set sal = 100 where empno = 9022 ; 256 rows updated. SQL> commit ; Commit complete. refresh_dependent procedure SQL> declare 2 vn_fail_cnt BINARY_INTEGER; 3 begin 4 dbms_mview.refresh_dependent(vn_fail_cnt, 'EMP'); . 5 dbms_output.put_line(vn_fail_cnt); 6 end; 7 / 0 PL/SQL procedure successfully completed. Elapsed: 00:00:47.74 SQL> select * from mv_emp_sales ; EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- 7369 20 52428800 .................... 9022 95 6553600 21 rows selected. - fast on commit (single table aggregate) SQL> create materialized view log on emp 2 with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno) 3 including new values ; Materialized view log created. SQL> create materialized view mv_emp_sales refresh fast on commit 2 as select count(*), empno, sum(sal), count(sal) 3 from emp log M- 4 group by empno ; View . base Materialized view created. table SQL> select * from mv_emp_sales ; refresh COUNT(*) EMPNO SUM(SAL) COUNT(SAL) commit refresh ---------- ---------- ---------- ---------- data 256 7369 204800 256 ........................... . 256 9022 25600 256 21 rows selected. SQL> update emp set sal = 10 where empno = 9022 ; 256 rows updated. SQL> commit; Commit complete. SQL> select * from mv_emp_sales ; COUNT(*) EMPNO SUM(SAL) COUNT(SAL) ---------- ---------- ---------- ---------- 256 7369 204800 256 ........................... 256 9022 2560 256 21 rows selected. jkspark@hanafos.com - 26 -
  • 27. Oracle8i New Features http://www.ggola.com/ - fast on demand (single table aggregate) SQL> drop materialized view log on emp ; Materialized view log dropped. SQL> drop materialized view mv_emp_sales ; Materialized view dropped. SQL> create materialized view log on emp 2 with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno) 3 including new values ; Materialized view log created. SQL> create materialized view mv_emp_sales refresh fast on demand 2 as select count(*), empno, sum(sal), count(sal) log 3 from emp MV . base table 4 group by empno ; Materialized view created. refresh procedure SQL> select * from mv_emp_sales ; MV COUNT(*) EMPNO SUM(SAL) COUNT(SAL) ---------- ---------- ---------- ---------- data . 256 7369 204800 256 ......................... 256 9022 2560 256 21 rows selected. SQL> update emp set sal = 1000 where empno = 9022 ; 256 rows updated. SQL> commit; Commit complete. SQL> exec dbms_mview.refresh('MV_EMP_SALES') ; PL/SQL procedure successfully completed. SQL> select * from mv_emp_sales ; Test join and COUNT(*) EMPNO SUM(SAL) COUNT(SAL) ---------- ---------- ---------- ---------- aggregate M-View 256 7369 204800 256 M-View log ......................... error fast refresh 256 9022 256000 256 21 rows selected. refresh data CF. M-View table . prebuilt table M-View . query rewrite . (start with-next refresh M-View query rewrite ) CF. Nested Materialized Views : M-View fact(/detail/base) table M-View user request Nested Materialized View . join only M-View base table single-table aggregate M-View refresh fast on commit join and aggregate M-View performance . , space . jkspark@hanafos.com - 27 -
  • 28. Oracle8i New Features http://www.ggola.com/ Query Rewrite M-View base table performance . Oracle8i M-View statement ‘Query Rewrite’ mechanism M-View query query . Query Rewrite Attributes - M-View index transparent to applications . - Base table privileges M-View M-View enable, disable M-View control . - Initial parameter : QUERY_REWRITE_ENABLED=TRUE ”QUERY REWRITE” privilege M-View enable . DBMS_OLAP package has options to use M-Views CF. Query Rewrite : grant query rewrite to username ; “global query rewrite” for outside schema “explicit select privilege” for M-View using different schema Usage : create materialized view mview_name tablespace ts_name --> skip user default tablespace parallel (degree 4) --> option build immediate/deferred --> skip default immediate refresh complete/fast/force/never --> skip default force on demand/on commit/start with .… next …. enable/disable query rewrite --> query rewrite as select count(*), count(sal), sum(sal) from emp; --> query restriction : join equip only aggregate operator outermost part . (AVG(AVG(x)) ) sequence, user, sys owner objects, subquery order by, remote table, pl/sql function, having, connect by, inline views, nested subquery, sysdate, rownum, bind variable, raw or long raw . case 1) select count(*), count(sal), sum(sal) from emp ; ==> Oracle M-View mview_name execution plan performance . case 2) select /*+ NOREWRITE */ count(),count(sal),sum(sal) from emp ; ==> Case 1 norewrite hint M-View base table execution plan full table scan . jkspark@hanafos.com - 28 -
  • 29. Oracle8i New Features http://www.ggola.com/ Example - Creation materialized view for query rewrite SQL> create materialized view mv_emp_sales tablespace users 2 parallel(degree 4) build immediate start and next time 10 3 refresh complete start with sysdate+1/6/24 next sysdate+1/6/24 query 4 enable query rewrite as select e.empno, d.deptno, sum(sal) from emp e, dept d rewrite enable 5 where e.deptno = d.deptno group by e.empno, d.deptno ; MV Materialized view created. Elapsed: 00:01:02.80 user_jobs last date, next date 10 SQL> select job, what, last_date, next_date from user_jobs ; JOB WHAT ---- ----------------------------------------------- . 243 dbms_refresh.refresh('"SCOTT"."MV_EMP_SALES"'); LAST_DATE NEXT_DATE ----------------- ----------------- 20010802 14:35:31 20010802 14:45:31 SQL> select sysdate from dual ; SYSDATE ----------------- 20010802 14:36:41 SQL> select * from mv_emp_sales ; EMPNO DEPTNO SUM(SAL) 14 36 ---------- ---------- ---------- empno 9022 sal 10 7369 20 52428800 ................ update . 9022 95 6553600 MV query 21 rows selected. SQL> update emp set sal = 10 where empno = 9022 ; . user_jobs 256 rows updated. next date SQL> commit ; . Commit complete. SQL> select * from mv_emp_sales ; EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- 7369 20 52428800 ................ 9022 95 6553600 38 21 rows selected. refresh SQL> select sysdate from dual ; . 45 SYSDATE refresh ----------------- MV 20010802 14:38:20 ( 1 ) 46 40 query SQL> select sysdate from dual ; SYSDATE data ----------------- . 20010802 14:46:41 , refresh MV query SQL> select * from mv_emp_sales ; “no rows selected” return EMPNO DEPTNO SUM(SAL) . ---------- ---------- ---------- 7369 20 52428800 ................ 9022 95 655360 21 rows selected. jkspark@hanafos.com - 29 -
  • 30. Oracle8i New Features http://www.ggola.com/ - Query rewrite SQL> select e.empno, d.deptno, sum(sal) from emp e, dept d 2 where e.deptno = d.deptno group by e.empno, d.deptno ; EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- MV SQL 7369 20 52428800 ................ 9022 95 655360 . , 21 rows selected. query rewrite . Elapsed: 00:00:00.08 hint query rewrite SQL> select /*+ NOREWRITE */ 2 e.empno, d.deptno, sum(sal) from emp e, dept d . 3 where e.deptno = d.deptno group by e.empno, d.deptno ; EMPNO DEPTNO SUM(SAL) ---------- ---------- ---------- 7369 20 52428800 ................ 9022 95 655360 21 rows selected. Elapsed: 00:00:49.50 SQL> explain plan for select e.empno, d.deptno, sum(sal) from emp e, dept d 2 where e.deptno = d.deptno group by e.empno, d.deptno ; Explained. SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,79) "Plan View" 3 from plan_table 4 start with id=0 5 connect by prior id = parent_id 6 order by id; Plan View ------------------------------------------------------------------------------- SELECT STATEMENT TABLE ACCESS FULL MV_EMP_SALES SQL> delete plan_table; plan 2 rows deleted. query rewrite SQL> commit; MV execution Commit complete. plan hint SQL> explain plan for select /*+ NOREWRITE */ 2 e.empno, d.deptno, sum(sal) from emp e, dept d execution plan 3 where e.deptno = d.deptno group by e.empno, d.deptno ; . Explained. SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,79) "Plan View" 3 from plan_table 4 start with id=0 5 connect by prior id = parent_id 6 order by id; Plan View ------------------------------------------------------------------------------- SELECT STATEMENT SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL EMP INDEX RANGE SCAN XPKDEPT jkspark@hanafos.com - 30 -
  • 31. Oracle8i New Features http://www.ggola.com/ Control Rewrite - optimizer mode cost-based only . (rule base ) - QUERY_REWRITE_ENABLED : FALSE setting query rewrite . dynamically instance level(initial parameter) or session level(alter session command) . - QUERY_REWRITE_INTEGRITY : this parameter reset dynamically for instance and session level. 1. ENFORCED(default) : consistency query rewrite . (updated M-view and validated constraints only) 2. TRUSTED : All updated M-Views and dimensions and constraints with RELY flag are used for query rewrites. (RELY flag constraint new features invalid constraint valid ) 3. STALE_TOLERATED : last DML and relationships(are declared) refresh all M-Views rewrite .(data M-View validate ) CF. register M-View QUERY_REWRITE_INTEGRITY parameter value . Support utility & System privileges - SQL*Loader : Rowid range M-View reference table direct path loading HWMK data incremental refresh . - Export/Import : 1. M-View definition export & import (full mode or user mode) 2. MVDATA=Y export & import data in M-Views MVDATA=N table ROWS=N . ( , M-View data segment object ) 3. MVBUILDDEFERRED=Y export all M-Views definition and created for deferred refresh - M-Views privileges . create materialized view . create/drop/alter any materialized view . query rewrite (enable and disable of own schema) . global query rewrite (enable and disable of in the grantee’s schema for query rewrite) jkspark@hanafos.com - 31 -
  • 32. Oracle8i New Features http://www.ggola.com/ Registration of an Existing Materialized View - Data Warehouse system ordinary user tables summary and aggregate data tables . tables table build cost . , data . - table Query Rewrite incremental refresh tables M-View . - M-View base table M-View .( name table name ) SQL> create materialized view ….name on prebuilt table … - prebuilt table M-View query rewrite parameter query_rewrite_integrity “TRUSTED” set . - QUERY_REWRITE_INTEGRITY : (Oracle 8.1.6 ) enforced : M-View data relationship query rewrite . trusted : prebuilt table M-View data and RELY constraint (17 constraints ) correct trust query rewrite . stale_tolerated : M-View valid query rewrite maximum rewrite capability . , query rewrite wrong result . CF. Oracle 8.1.5 enforce/no_enforce/use_stale . - , prebuilt table M-View drop table drop . Data dictionary for M-Views - ALL_REFRESH_DEPENDENCIES : dependent or container tables in the current schema - DBA_MVIEW_AGGREGATES : grouping functions in an aggregated M-Views - DBA_MVIEW_ANALYSIS : M-Views information - DBA_MVIEW_DETAIL_RELATIONS : the named detail relations (base(fact) tables information) - DBA_MVIEW_JOINS : information about the joined columns of base tables - DBA_MVIEW_KEYS : detail columns information about the relations of DBA_MVIEW_DETAIL_RELATIONS jkspark@hanafos.com - 32 -
  • 33. Oracle8i New Features http://www.ggola.com/ Dimension Additional query rewrites are possible if summaries are created at the lowest level of aggregation, supported with dimensions. What is a Dimension ? - data dictionary structures that define hierarchical relationship between pairs of columns and column sets. based on existing columns(M-View segment ) - dimension optional highly recommended 1. enable additional query rewrite possibilities (without use of constraints, M-Views ) 2. hierarchies( ) summary . 3. can be used by OLAP tools ( DBMS_OLAP ) - level dimension . date month month quarter quarter year level query rewrite . CF. create dimension attribute level level value column .( “ ” level “ ” ) SQL> conn system/manager Connected. SQL> grant create dimension to dimuser ; Grant succeeded. SQL> conn dimuser/dimuser Connected. SQL> create table emp ( 2 hiredate date, 3 month varchar2(2), 4 month_name varchar2(10), 5 quarter varchar2(1), 6 year varchar2(4)) ; Table created. SQL> Create dimension emp_dim 2 Level hiredate is emp.hiredate 3 Level month is emp.month 4 Level qtr is emp.quarter 5 Level yr is emp.year 6 Hierarchy calendar_rollup ( 7 Hiredate child of 8 Month child of 9 Qtr child of yr ) 10 Attribute month determines month_name ; Dimension created. jkspark@hanafos.com - 33 -
  • 34. Oracle8i New Features http://www.ggola.com/ - 3 multiple hierarchies time dimension . SQL> create table sales ( 2 sal_date date, 3 month varchar2(2), 4 quarter varchar2(1), 5 year varchar2(4), 6 season varchar2(6), 7 week varchar2(1), 8 dayweek_name varchar2(3), 9 month_name varchar2(3)) ; Table created. SQL> create dimension sales_dim 2 level sal_date is sales.sal_date 3 level month is sales.month 4 level quarter is sales.quarter 5 level year is sales.year 6 level season is sales.season 7 level week is sales.week 8 hierarchy cal_rollup ( 9 sal_date child of 10 month child of 11 quarter child of 12 year ) 13 hierarchy week_rollup ( 14 sal_date child of 15 week ) 16 hierarchy season_rollup ( 17 sal_date child of 18 season ) 19 attribute sal_date determines sales.dayweek_name 20 attribute month determines sales.month_name ; Dimension created. SQL> select * from user_dimensions ; OWNER DIMENSION_NAME INVALID REVISION ---------- -------------------- - ---------- DIMUSER EMP_DIM N 1 DIMUSER SALES_DIM N 1 CF. time level, category level, location level .( , , ) jkspark@hanafos.com - 34 -
  • 35. Oracle8i New Features http://www.ggola.com/ - Based on multiple tables : 2 table 1. Keys and attributes correspond to columns 2. All attributes and keys for one level must belong to one table 3. child columns FK define . Create dimension nation_dim Level goo_cd is goo.goo_cd Level city_cd is city.city_cd Level do_cd is dochung.do_cd Hierarchy nation_analysis ( Goo_cd child of City_cd child of Do_cd Join key goo.city_cd references city.city_cd Join key city.do_cd references do_cd) Attribute city_cd determines (city.city_name, city.city_mayor) ; Query Rewrite Situations - Exact match : selected columns and join conditions match - Aggregate rollup : summary grouping “lower than” query grouping - Aggregate to all : more dimensions in summary - Summary joinback : a column not in summary, but derivable used by query CF. exact match dimension query rewrite . Data dictionary for Dimensions - DBA_DIMENSIONS : dimension objects - DBA_DIM_LEVELS : dimension levels - DBA_DIM_LEVEL_KEY : column and position of dimension level - DBA_DIM_ATTRIBUTES : relationships between a dimension level and a functionally dependent column - DBA_DIM_HIERARCHIES : dimension hierarchies - DBA_DIM_CHILD_OF : hierarchical relationships (a pair of levels in a dimension) - DBA_DIM_JOIN_KEY : information between two dimension tables jkspark@hanafos.com - 35 -
  • 36. Oracle8i New Features http://www.ggola.com/ DBMS_OLAP Verifying relationships in a dimension Satisfy the 1:n relationships along each hierarchy. DBMS_OLAP.VALIDATE_DIMENSION - Argument : dimension, owner, check rows, check level - (‘TIME_DIM’, ’SCOTT’, FALSE, TRUE) . 1. dimension name ‘TIME_DIM’ 2. dimension owner ‘SCOTT’ 3. checking all rows 4. check that levels are all non-NULL - 3 TURE : check rows stored by direct path loads 4 FALSE : no check levels - It will update MVIEW$_EXECPTIONS with type of relationship and rowids of violating rows Evaluate the use of summaries DBMS_OLAP.EVALUATE_UTILIZATION ; - uses hypothetical workload statistics ( ) - MVIEW$_EVALUTAIONS . DBMS_OLAP.EVALUATE_UTILIZATION_W ; - uses workload statistics collected through Oracle Trace in WORK$_IDEAL_MVIEW, WORK$_MVIEW_USAGE - MVIEW$_EVALUTAIONS . MVIEW$_EVALUTAIONS : - summary name, storage used by summary in bytes - frequency of use, rank based on cost-benefit ratio - cumulative benefit computed by adding the benefit or net reduction factor - benefit to cost ratio computed as the cumulative benefit to storage in bytes jkspark@hanafos.com - 36 -
  • 37. Oracle8i New Features http://www.ggola.com/ Obtaining summary recommendations M-Views . (summary advisor) DBMS_OLAP.RECOMMEND_MV_W - Argument : table, M-Views bytes maximum, retain M-View list, retention percent(cumulative space this percent threshold retain .) - (‘SALES’,102400000, NULL, 80) 1. table SALES 2. maximum 100M for storing M-view 3. retain M-Views 4. cumulative space 80% . - MVIEW$_RECOMMENDATIONS action . Select recommended_action, mview_name, group_by_columns, measures_list From mview$_recommendations ; RECOMM MVIEW_NAME GROUP_BY MEASURE RETAIN SALES_SUM DROP GRP_SUM RETAIN BRANCH_SUM, ….. …. CREATE EMPNO,PRO_CD SUM(SALARY) Estimating storage requirements for a summary or M-Views DBMS_OLAP.ESTIMATE_SUMMARY_SIZE (space requirement) - Argument : statement id(in), query(in), estimated rows(out), estimated bytes(out) - (‘TRY1’, ‘select * from emp where dept_id = 7843’, erows, ebytes) 1. statement id for explain : TRY1 2. query emp 3. estimated rows erows return 4. estimated bytes ebytes return - out argument erows, ebytes print storage requirements . - Query query string . jkspark@hanafos.com - 37 -
  • 38. Oracle8i New Features http://www.ggola.com/ 4. Indexes and Index-Organized Tables Bitmap Index Improvement - The bitmap is compressed before it is stored in the index. - compression : value change uncompress and change bitmap and compress . - ”alter table table_name minimize records_per_block” this command block records (nominimize . This is default) bitmap index compress . , empty table IOT nested table bitmap index . - Local Index bitmap index partition . Example - bitmap index and normal index SQL> sho user USER is "SCOTT" SQL> select count(*) from emp ; COUNT(*) ---------- 172032 SQL> create index xakemp_deptno on emp (deptno) ; Index created. SQL> select sum(bytes)/1024/1024,sum(blocks) from user_extents 2 where segment_name = 'XAKEMP_DEPTNO' ; SUM(BYTES)/1024/1024 SUM(BLOCKS) -------------------- ----------- 2.5M 339block 2.6484375 339 index bitmap index SQL> drop index XAKEMP_DEPTNO ; Index dropped. storage SQL> create bitmap index xakemp_deptno on emp (deptno) ; . bitmap index Index created. compress . SQL> select sum(bytes)/1024/1024,sum(blocks) from user_extents 2 where segment_name = 'XAKEMP_DEPTNO' ; SUM(BYTES)/1024/1024 SUM(BLOCKS) 0.3M 45block -------------------- ----------- .3515625 45 jkspark@hanafos.com - 38 -
  • 39. Oracle8i New Features http://www.ggola.com/ SQL> drop index XAKEMP_DEPTNO ; Index dropped. SQL> alter table emp minimize records_per_block ; Table altered. Minimize command . SQL> create bitmap index xakemp_deptno on emp (deptno) ; data Index created. compress . SQL> select sum(bytes)/1024/1024,sum(blocks) from user_extents 2 where segment_name = 'XAKEMP_DEPTNO' ; SUM(BYTES)/1024/1024 SUM(BLOCKS) -------------------- ----------- .3515625 45 New Index Reverse-Key Indexes (Oracle8 New Features ) - Last leaf block . - , data 10, 11, 12, 13, 14…. delete leaf block . (skewed index) reverse index . alter command . (01, 11, 21, 31, 41…. ) - cannot support bitmap index and IOT - “=” index range scan index full scan . - Example SQL> create index xakemp_empno_rvs on emp (empno) reverse ; Index created. SQL> explain plan for select /*+ INDEX(EMP) */ distinct empno, ename from emp 2 where empno > 7800 and empno < 7900 ; Explained. SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,79) "Plan View" 3 from plan_table 4 start with id=0 “=” 5 connect by prior id = parent_id Range Scan 6 order by id; Index Full Scan . Plan View ------------------------------------------------------------------------------- SELECT STATEMENT SORT UNIQUE TABLE ACCESS BY INDEX ROWID EMP INDEX FULL SCAN XAKEMP_EMPNO_RVS jkspark@hanafos.com - 39 -
  • 40. Oracle8i New Features http://www.ggola.com/ SQL> delete plan_table; 2 rows deleted. SQL> commit; Commit complete. SQL> select /*+ INDEX(EMP) */ distinct empno, ename from emp 2 where empno > 7800 and empno < 7900 ; EMPNO ENAME ---------- ---------- 7839 KING 7844 TURNER 7876 ADAMS SQL> alter index xakemp_empno_rvs rebuild noreverse ; Index altered. SQL> explain plan for select /*+ INDEX(EMP) */ distinct empno, ename from emp 2 where empno > 7800 and empno < 7900 ; Explained. SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,79) "Plan View" 3 from plan_table 4 start with id=0 5 connect by prior id = parent_id 6 order by id; rebuild index Range Scan Plan View . ------------------------------------------------------------------------------- SELECT STATEMENT SORT UNIQUE TABLE ACCESS BY INDEX ROWID EMP INDEX RANGE SCAN XAKEMP_EMPNO_RVS SQL> delete plan_table; 2 rows deleted. SQL> commit; Commit complete. jkspark@hanafos.com - 40 -
  • 41. Oracle8i New Features http://www.ggola.com/ Function-Based Indexes - Index where dramatic performance . - , “ salary – tax “ function based index select acct_cd from tax_org where (salary – tax) > 100000 ; data . - Enabling Function-Based Indexes alter session set query_rewrite_enabled = TRUE ; alter session set query_rewrite_integrity = TRUSTED ; - Example SQL> set timing on SQL> select sum(sal-comm) from emp where (sal-comm) > 3000 ; SUM(SAL-COMM) ------------- 391577600 Elapsed: 00:00:03.46 Function based index SQL> create index xakemp_salcnt_fnc on emp ( sal - comm ) ; Index created. query rewrite SQL> select sum(sal-comm) from emp where (sal-comm) > 3000 ; SUM(SAL-COMM) ------------- . data 391577600 performance Elapsed: 00:00:00.55 SQL> alter session set query_rewrite_enabled=false ; . Session altered. SQL> select sum(sal-comm) from emp where (sal-comm) > 3000 ; SUM(SAL-COMM) ------------- 391577600 Elapsed: 00:00:03.18 Descending Indexes - order index . - city city index , deptno descending index sort . - Index : create index city_margin_dsc on emp (city asc, (revenue index order – cost) desc ) ; by clause . Query : select city, deptid, ordid, (revenue – cost) margin from emp order by city , margin desc ; jkspark@hanafos.com - 41 -
  • 42. Oracle8i New Features http://www.ggola.com/ - Example SQL> select ename, sum(sal-comm) from emp where ename like 'K%' 2 and sal-comm > 3000 group by ename 3 order by 1 asc, 2 desc ; ENAME SUM(SAL-COMM) ---------- ------------- ename sal-comm KANG 39321600 index KIM 80281600 . , function KING 32768000 based index index order by Elapsed: 00:00:06.27 index SQL> create index xakemp_name_salcnt_desc on emp . 2 (ename asc, (sal - comm) desc) ; Index created. 2 data order SQL> select ename, sum(sal-comm) from emp where ename like 'K%' 2 and sal-comm > 3000 group by ename by desc 3 order by 1 asc, 2 desc ; order by . , order by clause 2 ENAME SUM(SAL-COMM) asc order ---------- ------------- by 1, 2 KANG 39321600 . KIM 80281600 KING 32768000 Elapsed: 00:00:00.94 Rebuild and compute index Rebuild and Create Index Online - Oracle8i index rebuild or create online option DML . lock time DML . . - Parallel rebuild index 2 space . - PREPARE : create index structure and place entries in the data dictionary lock time . (very short locking) - BUILD : index rebuild changes journal table . (no locking) - MERGE : rebuild index journal table merge . , journal table (commit or rollback ) table lock journal jkspark@hanafos.com - 42 -
  • 43. Oracle8i New Features http://www.ggola.com/ table and index online . (waiting for transaction and locking for merge) - Index online DML transaction journal table index online option parallel DML , bitmap/cluster/IOT secondary index . - Index block block Oracle8i coalesce command coalesces leaf blocks within the same branch of the tree free block free lists . - Example SQL> alter index xakemp_name_salcnt_desc rebuild online ; Index altered. SQL> create index xakemp_mgr on emp (mgr) online ; Index created. SQL> alter index XAKEMP_NAME_SALCNT_DESC coalesce ; Index altered. Computing statistics on indexes - statistics generation create index and alter index rebuild analyze . create index …… compute statistics ; alter index …….. rebuild compute statistics ; - non-partitioned index : gather table, column, and index statistics concatenated index : refer only to the first column (index composite leading column ) partitioned index : only index statistics . - Example SQL> alter index xakemp_name_salcnt_desc rebuild compute statistics ; Index altered. SQL> create index xakemp_mgrdept on emp (mgr, deptno) 2 compute statistics ; Index created. CF. test Index build or rebuild online option compute statistics option . CF. rebuild reverse option online option 8108 error return . (… noreverse online ; ) jkspark@hanafos.com - 43 -
  • 44. Oracle8i New Features http://www.ggola.com/ Index-Organized Tables Basic concept Oracle8 New Features IOT & Logical ROWIDs(Oracle8i New Features) - IOT index table , PK index value + non-key value permanent physical rowid . (leaf block row header, key column, nonkey column ) Oracle8 secondary index Oracle8i Logical Rowid concept . CF. PK index rowid . , PK value index . SQL> create table emp_iot ( 2 empno number not null, 3 ename varchar2(10), 4 deptno number, 7. table default 5 emp_desc varchar2(20), organization heap 6 constraint xpkemp_iot primary key (empno)) 8. 1 block 1 row 30% 7 organization index tablespace tools nonkey 8 pctthreshold 30 9 overflow tablespace users ; column data overflow Table created 9. pctthreadshold data tablespace SQL> select segment_name, segment_type, tablespace_name ( 2 from user_segments user default tablespace 3 where segment_name like ('%IOT%') ; . SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME --------------------------------------------------------------------------------------------- SYS_IOT_OVER_40973 TABLE USERS XPKEMP_IOT INDEX TOOLS - user_segments view table name emp_iot segment . , pctthreshold overflow SYS_IOT table type overflow segment . - Secondary Index : PK column column index data ? IOT permanent physical rowid index physical rowid rowid . secondary index PK values 8i NF ‘Universal Rowid’ , Urowid index . jkspark@hanafos.com - 44 -
  • 45. Oracle8i New Features http://www.ggola.com/ - Data search using secondary index : Physical Guess : indexing index statistics physical rowid physical rowid access . Without guess or after incorrect guess : PK values logical rowid access . CF. UROWID compatible 8.1 . CF. PL/SQL fully supports the ‘UROWID’ datatype. SQL> explain plan for select ename from emp_iot 2 where deptno = 10 ; Explained. SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,79) "Plan View" 3 from plan_table 4 start with id=0 5 connect by prior id = parent_id 6 order by id; Plan View ------------------------------------------------------------------------------- SELECT STATEMENT INDEX FAST FULL SCAN XPKEMP_IOT SQL> create index xakempiot_deptno on emp_iot (deptno) ; Secondary index Index created. execution plan SQL> explain plan for select ename from emp_iot . 2 where deptno = 10 ; Explained. SQL> select substr(lpad(' ',2*(level-1))||operation||' '||options 2 ||' '||object_name,1,79) "Plan View" 3 from plan_table 4 start with id=0 5 connect by prior id = parent_id 6 order by id; Plan View ------------------------------------------------------------------------------- SELECT STATEMENT INDEX UNIQUE SCAN XPKEMP_IOT INDEX RANGE SCAN XAKEMPIOT_DEPTNO - Unchanged Restrictions : 1. must have a primary key 2. cannot use unique constraints Snapshot 3. cannot be clustered M-View 4. cannot contain LONG columns . 5. cannot support distribution and replication 6. cannot support object types 7. can contain LOB columns and nested table types(varray), but only if the table is not partitioned 8. IOT rowid datatype (rowid ) 9. (like index rebuild command) can use move command for reorganizing data(not overflow segment) CF. IOT PK index rebuild secondary index rebuild . jkspark@hanafos.com - 45 -
  • 46. Oracle8i New Features http://www.ggola.com/ 5. Basic Partition HASH Partition Oracle8 New Features range range partition Oracle8i range partition hash partition . concept Oracle8 . tablespace (ts_emp1 ~ 6) create tablespace command . Partitioned key update - update command partition key ( partition range value ) row movement . - : alter table table_name ENABLE row movement ; default value DISABLE partitioned key update ENABLE setting . - Example SQL> create table emp_part ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2)) 10 partition by range (hiredate) 11 ( partition p_emp_1980 values less than 12 (to_date('01-JAN-1981','DD-MON-YYYY')) tablespace ts_emp1, ts_emp1 ~6 6 13 partition p_emp_1981 values less than tablespace 14 (to_date('01-JAN-1982','DD-MON-YYYY')) tablespace ts_emp2, hiredate range 6 15 partition p_emp_1982 values less than 16 (to_date('01-JAN-1983','DD-MON-YYYY')) tablespace ts_emp3, partition partition 17 partition p_emp_1983 values less than table emp 18 (to_date('01-JAN-1984','DD-MON-YYYY')) tablespace ts_emp4, table data insert 19 partition p_emp_1984 values less than . 20 (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp5, 21 partition p_emp_1985 values less than 22 (MAXVALUE) tablespace ts_emp6 ) ; Table created. SQL> insert into emp_part select * from emp ; 162034 rows created. SQL> commit ; Commit complete. jkspark@hanafos.com - 46 -
  • 47. Oracle8i New Features http://www.ggola.com/ SQL> select distinct(to_char(hiredate, 'YYYY-MM-DD')) 2 from emp_part partition(p_emp_1980) ; (TO_CHAR(H Partition select1 ---------- data partition 1980-12-17 insert . SQL> select distinct(to_char(hiredate, 'YYYY-MM-DD')) 2 from emp_part partition(p_emp_1985) ; (TO_CHAR(H ---------- 1985-10-01 SQL> update emp_part partition(p_emp_1985) 2 set empno = 0, hiredate = to_date('19801231', 'YYYYMMDD') 3 where rownum = 1 ; update emp_part partition(p_emp_1985) * ERROR at line 1: ORA-14402: updating partition key column would cause a partition change Partition key update SQL> alter table emp_part enable row movement ; enable row Table altered. movement partition key update SQL> update emp_part partition(p_emp_1985) select 2 set empno = 0, hiredate = to_date('19801231', 'YYYYMMDD') 3 where rownum = 1 ; . 1 row updated. SQL> commit ; Commit complete. SQL> alter session set nls_date_format = 'YYYYMMDD' ; Session altered. SQL> select empno, ename, hiredate from emp_part partition(p_emp_1980) 2 where empno = 0 ; EMPNO ENAME HIREDATE ---------- ---------- -------- 0 LEE 19801231 Hash function - table data hash function partition . ( , I/O ) - It controls the physical placement of data across a fixed number of partitions and gives you a highly tunable method of data placement. - Does not support LONG, LONG RAW, ROWID, UROWID, LOB datatypes - Hash partition key column list 16 . jkspark@hanafos.com - 47 -
  • 48. Oracle8i New Features http://www.ggola.com/ Hash partition - partition data . , Number of partitions should be a power of 2 (2, 4, 6, …) (2 ) CF. test 2 error . ,2 data . CF. 2 partition tablespace tablespace partition . - parallel DML performance . - deptno column value 6 tablespace 12 partition data . tablespace 2 partition . SQL> create table emp_hash_part ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7,2),COMM NUMBER(7,2), 8 DEPTNO NUMBER(2)) 9 storage ( initial 64k next 64k pctincrease 0) 10 partition by hash (deptno) partitions 12 11 store in (ts_emp1, ts_emp2, ts_emp3, ts_emp4, ts_emp5, ts_emp6) ; storage Table created. partition hash partition disk SQL> set pagesize 100 stripping tablespace SQL> col table_name for a15 , . SQL> col partition_name for a15 SQL> col tablespace_name for a10 SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME 2 from user_tab_partitions Hash partition name 3 where table_name like '%HASH%' default 4 order by tablespace_name ; SYS_Pnn . TABLE_NAME PARTITION_NAME TABLESPACE --------------- --------------- ---------- EMP_HASH_PART SYS_P19 TS_EMP1 EMP_HASH_PART SYS_P13 TS_EMP1 EMP_HASH_PART SYS_P14 TS_EMP2 EMP_HASH_PART SYS_P20 TS_EMP2 EMP_HASH_PART SYS_P15 TS_EMP3 EMP_HASH_PART SYS_P21 TS_EMP3 EMP_HASH_PART SYS_P16 TS_EMP4 EMP_HASH_PART SYS_P22 TS_EMP4 EMP_HASH_PART SYS_P17 TS_EMP5 EMP_HASH_PART SYS_P23 TS_EMP5 EMP_HASH_PART SYS_P18 TS_EMP6 EMP_HASH_PART SYS_P24 TS_EMP6 12 rows selected. jkspark@hanafos.com - 48 -
  • 49. Oracle8i New Features http://www.ggola.com/ - Range partition user partition hash partition hash method Oracle data .(no logical meaning to the users) select command . select * from PARTITION(part_name) where…….. ; CF. test partition select . , hash function partition partition return . SQL> insert into emp_hash_part select * from emp ; 162034 rows created. SQL> commit ; Commit complete. SQL> select count(*) from emp_hash_part partition (SYS_P19) ; COUNT(*) ---------- 46291 - tablespace partition hash partition naming . Storage range partition table level storage partition and tablespace . SQL> create table emp_name_hash_part ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 HIREDATE DATE, 5 DEPTNO NUMBER(2)) 6 storage (initial 32k) 7 partition by hash (hiredate) 8 ( partition hp_h1 tablespace ts_emp1, 9 partition hp_h2 tablespace ts_emp2, 10 partition hp_h3 tablespace ts_emp2) Table created. SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME 2 from user_tab_partitions 3 where table_name = 'EMP_NAME_HASH_PART' 4 order by tablespace_name ; TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_NAME_HASH_PART HP_H1 TS_EMP1 EMP_NAME_HASH_PART HP_H2 TS_EMP2 EMP_NAME_HASH_PART HP_H3 TS_EMP2 Partitioned index restriction - Bitmap index on the partitioned table must be local. - Global Index range partitioned table only. , hash partitioned table global index . jkspark@hanafos.com - 49 -
  • 50. Oracle8i New Features http://www.ggola.com/ 6. Partition Maintenance 8i New Maintenance Function Basic Partition Maintenance Oracle8 New Features . Add hash partition - hash partition CF. partitioned table . - partition name and tablespace partition name SYS_Pnn tablespace table’s default tablespace . CF. Other attributes are always inherited from table-level defaults. (add partition table ) - Example SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME 2 from user_tab_partitions 3 where table_name = 'EMP_NAME_HASH_PART' 4 order by tablespace_name ; TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_NAME_HASH_PART HP_H1 TS_EMP1 EMP_NAME_HASH_PART HP_H2 TS_EMP2 EMP_NAME_HASH_PART HP_H3 TS_EMP2 SQL> insert into emp_name_hash_part 2 select empno, ename, hiredate, deptno from emp ; 162034 rows created. Hash function partition data SQL> commit ; . SQL Commit complete. SQL> select count(*) from emp_name_hash_part partition(hp_h1) ; partition alias COUNT(*) ---------- . 7718 SQL> select count(*) from emp_name_hash_part partition(hp_h2) ; COUNT(*) ---------- 115728 SQL> select count(a.empno) from emp_name_hash_part partition(hp_h3) a ; COUNT(A.EMPNO) -------------- 38588 jkspark@hanafos.com - 50 -
  • 51. Oracle8i New Features http://www.ggola.com/ SQL> alter table emp_name_hash_part add partition ; Table altered. SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME 2 from user_tab_partitions Partition name tablespace 3 where table_name = 'EMP_NAME_HASH_PART' hash partition 4 order by tablespace_name ; tablespace user default tablespace tools TABLE_NAME PARTITION_NAME TABLESPACE partition name SYS_P42 -------------------- --------------- ---------- . EMP_NAME_HASH_PART SYS_P42 TOOLS EMP_NAME_HASH_PART HP_H1 TS_EMP1 EMP_NAME_HASH_PART HP_H2 TS_EMP2 EMP_NAME_HASH_PART HP_H3 TS_EMP2 SQL> select count(*) from emp_name_hash_part partition(hp_h1) ; COUNT(*) ---------- 7718 SQL> select count(*) from emp_name_hash_part partition(hp_h2) ; COUNT(*) ---------- 84865 Partition hp_h2 data SQL> select count(*) from emp_name_hash_part partition(hp_h3) ; new partition sys_p42 COUNT(*) ---------- . 38588 Data partition SQL> select count(*) from emp_name_hash_part partition(SYS_P42) ; . COUNT(*) ---------- 30863 SQL> alter table emp_name_hash_part add 2 partition hp_h4 tablespace ts_emp4 ; Table altered. SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME Partition name tablespace 2 from user_tab_partitions 3 where table_name = 'EMP_NAME_HASH_PART' new partition 4 order by tablespace_name ; . TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_NAME_HASH_PART SYS_P42 TOOLS EMP_NAME_HASH_PART HP_H1 TS_EMP1 EMP_NAME_HASH_PART HP_H2 TS_EMP2 EMP_NAME_HASH_PART HP_H3 TS_EMP2 EMP_NAME_HASH_PART HP_H4 TS_EMP4 jkspark@hanafos.com - 51 -
  • 52. Oracle8i New Features http://www.ggola.com/ SQL> select count(*) from emp_name_hash_part partition(hp_h1) ; COUNT(*) ---------- 0 SQL> select count(*) from emp_name_hash_part partition(hp_h2) ; COUNT(*) ---------- 84865 Partition data hp_h1 SQL> select count(*) from emp_name_hash_part partition(hp_h3) ; COUNT(*) hp_h4 ---------- . Hash function 38588 SQL> select count(*) from emp_name_hash_part partition(SYS_P42) ; . COUNT(*) ---------- 30863 SQL> select count(*) from emp_name_hash_part partition(hp_h4) ; COUNT(*) ---------- 7718 - parallel partition data redistribute . data overhead partition partition redistribution . - , data skew current partition 2 hash partition . - Index add partition . CF. , 2 hash partition 1 data distribution rate 1:1 2:1:1 . , 2 1:1:1:1 . CF. test data hash function . jkspark@hanafos.com - 52 -
  • 53. Oracle8i New Features http://www.ggola.com/ Merge partition - Oracle8 partition merge . , . - Range partition partition merge . (hash partition or IOT ) - new tablespace and storage table default . - partition partition tablespace partition new data segment . CF. new partition segment partition drop tablespace data . - The new index is placed in the default tablespace specified at the index level. (merge partition index unusable ) SQL> create index xakemp_part_hdt on emp_part (hiredate) local ; Index created. SQL> select index_name, partition_name, tablespace_name 2 from user_ind_partitions 3 where index_name = 'XAKEMP_PART_HDT' 4 order by tablespace_name ; INDEX_NAME PARTITION_NAME TABLESPACE ------------------------------ --------------- ---------- XAKEMP_PART_HDT P_EMP_1980 TS_EMP1 XAKEMP_PART_HDT P_EMP_1981 TS_EMP2 XAKEMP_PART_HDT P_EMP_1982 TS_EMP3 XAKEMP_PART_HDT P_EMP_1983 TS_EMP4 Test tablespace XAKEMP_PART_HDT P_EMP_1984 TS_EMP5 local index XAKEMP_PART_HDT P_EMP_1985 TS_EMP6 table index partition table SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME partition tablespace 2 from user_tab_partitions 3 where table_name = 'EMP_PART' . 4 order by tablespace_name ; TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_PART P_EMP_1980 TS_EMP1 EMP_PART P_EMP_1981 TS_EMP2 EMP_PART P_EMP_1982 TS_EMP3 EMP_PART P_EMP_1983 TS_EMP4 EMP_PART P_EMP_1984 TS_EMP5 EMP_PART P_EMP_1985 TS_EMP6 jkspark@hanafos.com - 53 -
  • 54. Oracle8i New Features http://www.ggola.com/ SQL> alter table emp_part merge partitions p_emp_1980, p_emp_1982 2 into partition p_emp_1980_2 ; (adjacent) alter table emp_part merge partitions p_emp_1980, p_emp_1982 partition merge * ERROR at line 1: ORA-14274: partitions being merged are not adjacent SQL> alter table emp_part merge partitions p_emp_1980, p_emp_1981 2 into partition p_emp_1980_1 ; Table altered. partition merge SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME 2 from user_tab_partitions 3 where table_name = 'EMP_PART' 4 order by tablespace_name ; user default tablespace TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- . EMP_PART P_EMP_1980_1 TOOLS EMP_PART P_EMP_1982 TS_EMP3 EMP_PART P_EMP_1983 TS_EMP4 EMP_PART P_EMP_1984 TS_EMP5 EMP_PART P_EMP_1985 TS_EMP6 SQL> alter table emp_part merge partitions p_emp_1983, p_emp_1984 2 into partition p_emp_1983_4 tablespace ts_emp2 3 storage ( initial 64k next 64k pctincrease 0 ) ; Table altered. Partition merge SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME new 2 from user_tab_partitions merge partition 3 where table_name = 'EMP_PART' . 4 order by tablespace_name ; TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_PART P_EMP_1980_1 TOOLS EMP_PART P_EMP_1983_4 TS_EMP2 EMP_PART P_EMP_1982 TS_EMP3 EMP_PART P_EMP_1985 TS_EMP6 SQL> select index_name, partition_name, tablespace_name 2 from user_ind_partitions 3 where index_name = 'XAKEMP_PART_HDT' Local index table 4 order by tablespace_name ; merge SQL> select index_name, partition_name, tablespace_name, status . 2 from user_ind_partitions Index 3 where index_name = 'XAKEMP_PART_HDT' partition unusable 4 order by tablespace_name ; . rebuild . INDEX_NAME PARTITION_NAME TABLESPACE STATUS ------------------------------ --------------- ---------- -------- XAKEMP_PART_HDT P_EMP_1980_1 TOOLS UNUSABLE XAKEMP_PART_HDT P_EMP_1983_4 TS_EMP2 UNUSABLE XAKEMP_PART_HDT P_EMP_1982 TS_EMP3 USABLE XAKEMP_PART_HDT P_EMP_1985 TS_EMP6 USABLE jkspark@hanafos.com - 54 -
  • 55. Oracle8i New Features http://www.ggola.com/ SQL> alter index xakemp_part_hdt rebuild partition 2 p_emp_1980_1 tablespace ts_emp1 ; Index altered. SQL> select index_name, partition_name, tablespace_name, status 2 from user_ind_partitions Rebuild partition command 3 where index_name = 'XAKEMP_PART_HDT' index 4 order by tablespace_name ; INDEX_NAME PARTITION_NAME TABLESPACE STATUS ------------------------ --------------- ---------- -------- XAKEMP_PART_HDT P_EMP_1980_1 TS_EMP1 USABLE XAKEMP_PART_HDT P_EMP_1983_4 TS_EMP2 UNUSABLE XAKEMP_PART_HDT P_EMP_1982 TS_EMP3 USABLE XAKEMP_PART_HDT P_EMP_1985 TS_EMP6 USABLE SQL> alter table emp_part modify partition p_emp_1983_4 2 rebuild unusable local indexes ; Table altered. SQL> select index_name, partition_name, tablespace_name, status 2 from user_ind_partitions Modify partition command 3 where index_name = 'XAKEMP_PART_HDT' index 4 order by tablespace_name ; INDEX_NAME PARTITION_NAME TABLESPACE STATUS ------------------------ --------------- ---------- -------- XAKEMP_PART_HDT P_EMP_1980_1 TS_EMP1 USABLE XAKEMP_PART_HDT P_EMP_1983_4 TS_EMP2 USABLE XAKEMP_PART_HDT P_EMP_1982 TS_EMP3 USABLE XAKEMP_PART_HDT P_EMP_1985 TS_EMP6 USABLE Hash partition coalesce - hash partition range partition merge operation . (Removes a single hash partition and redistributes the data) - Hash function dissolution partition drop and redistribution .(parallel ) - Merge local index rebuild . SQL> create index xakempname_hash_hdt 2 on emp_name_hash_part (hiredate) local ; Index created. SQL> select index_name, partition_name, tablespace_name, status Test local index 2 from user_ind_partitions index status 3 where index_name = 'XAKEMPNAME_HASH_HDT' 4 order by tablespace_name ; INDEX_NAME PARTITION_NAME TABLESPACE STATUS ------------------------------ --------------- ---------- -------- XAKEMPNAME_HASH_HDT SYS_P42 TOOLS USABLE XAKEMPNAME_HASH_HDT HP_H1 TS_EMP1 USABLE XAKEMPNAME_HASH_HDT HP_H2 TS_EMP2 USABLE XAKEMPNAME_HASH_HDT HP_H3 TS_EMP2 USABLE XAKEMPNAME_HASH_HDT HP_H4 TS_EMP4 USABLE jkspark@hanafos.com - 55 -
  • 56. Oracle8i New Features http://www.ggola.com/ SQL> alter table emp_name_hash_part add 2 partition hp_h5 tablespace ts_emp5 ; Table altered. SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME 2 from user_tab_partitions 3 where table_name = 'EMP_NAME_HASH_PART' 4 order by tablespace_name ; TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- Hash partition hp_h5 EMP_NAME_HASH_PART SYS_P42 TOOLS partition EMP_NAME_HASH_PART HP_H1 TS_EMP1 coalesce command EMP_NAME_HASH_PART HP_H2 TS_EMP2 hp_h5 partition EMP_NAME_HASH_PART HP_H3 TS_EMP2 . , hash function EMP_NAME_HASH_PART HP_H4 TS_EMP4 dissolution EMP_NAME_HASH_PART HP_H5 TS_EMP5 partition hp_h5 SQL> alter table emp_name_hash_part coalesce partition ; hp_h2 index partition Table altered. unusable data SQL> select table_name, PARTITION_NAME, TABLESPACE_NAME redistribution hp_h2 2 from user_tab_partitions . 3 where table_name = 'EMP_NAME_HASH_PART' 4 order by tablespace_name ; TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_NAME_HASH_PART SYS_P42 TOOLS EMP_NAME_HASH_PART HP_H1 TS_EMP1 EMP_NAME_HASH_PART HP_H2 TS_EMP2 EMP_NAME_HASH_PART HP_H3 TS_EMP2 EMP_NAME_HASH_PART HP_H4 TS_EMP4 SQL> select index_name, partition_name, tablespace_name, status 2 from user_ind_partitions 3 where index_name = 'XAKEMPNAME_HASH_HDT' 4 order by tablespace_name ; INDEX_NAME PARTITION_NAME TABLESPACE STATUS ------------------------------ --------------- ---------- -------- XAKEMPNAME_HASH_HDT SYS_P42 TOOLS USABLE XAKEMPNAME_HASH_HDT HP_H1 TS_EMP1 USABLE XAKEMPNAME_HASH_HDT HP_H2 TS_EMP2 UNUSABLE XAKEMPNAME_HASH_HDT HP_H3 TS_EMP2 USABLE XAKEMPNAME_HASH_HDT HP_H4 TS_EMP4 USABLE SQL> alter index xakempname_hash_hdt rebuild partition hp_h2 ; Index altered. SQL> select index_name, partition_name, tablespace_name, status 2 from user_ind_partitions Rebuild hp_h2 index 3 where index_name = 'XAKEMPNAME_HASH_HDT' partition 4 order by tablespace_name ; INDEX_NAME PARTITION_NAME TABLESPACE STATUS ------------------------------ --------------- ---------- -------- XAKEMPNAME_HASH_HDT SYS_P42 TOOLS USABLE XAKEMPNAME_HASH_HDT HP_H1 TS_EMP1 USABLE XAKEMPNAME_HASH_HDT HP_H2 TS_EMP2 USABLE XAKEMPNAME_HASH_HDT HP_H3 TS_EMP2 USABLE XAKEMPNAME_HASH_HDT HP_H4 TS_EMP4 USABLE jkspark@hanafos.com - 56 -
  • 57. Oracle8i New Features http://www.ggola.com/ General operation - Oracle8 . SQL> alter table emp_part rename partition p_emp_1983_4 to p_emp_old ; Table altered. Partition rename : table, index SQL> alter index xakempname_hash_hdt rename . 2 partition SYS_P42 to hp_h5 ; Index altered. Move partition : partition SQL> alter table emp_part move partition p_emp_1980_1 tablespace 2 tablespace ts_emp1 ; Table altered. . SQL> alter table emp_part add partition p_emp_1986 2 values less than Add partition : hash partition 3 (to_date('01-JAN-1987','DD-MON-YYYY')) tablespace ts_emp1 ; range partition alter table emp_part add partition p_emp_1986 range value * ERROR at line 1: ORA-14074: partition bound must collate higher than that of the last partition partition . SQL> alter table emp_part split partition p_emp_1985 highest 2 at (to_date('01-JAN-1986','DD-MON-YYYY')) partition range 3 into ( partition p_emp_1985 tablespace ts_emp4, maxvalue error 4 partition p_emp_1986 tablespace ts_emp5) ; return split command Table altered. . SQL> set long 2000 SQL> select table_name, partition_name, high_value 2 from user_tab_partitions 3 where table_name = 'EMP_PART' 4 order by 2 ; TABLE_NAME PARTITION_NAME HIGH_VALUE Split ---------------------------------------------------------------- p_emp_1986 range EMP_PART P_EMP_1980_1 TO_DATE('1982-01-01 00:00:00'...) EMP_PART P_EMP_1982 TO_DATE('1983-01-01 00:00:00'...) maxvalue EMP_PART P_EMP_OLD TO_DATE('1985-01-01 00:00:00'...) . EMP_PART P_EMP_1985 TO_DATE('1986-01-01 00:00:00'...) EMP_PART P_EMP_1986 MAXVALUE SQL> select index_name, partition_name, status from user_ind_partitions 2 where INDEX_NAME = 'XAKEMP_PART_HDT' ; P_EMP_OLD rename local index p_emp_1983_4 INDEX_NAME PARTITION_NAME STATUS status . --------------- --------------- -------- XAKEMP_PART_HDT P_EMP_1983_4 USABLE XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1980_1 UNUSABLE Move or Split command XAKEMP_PART_HDT P_EMP_1985 UNUSABLE local index XAKEMP_PART_HDT P_EMP_1986 USABLE unusable . jkspark@hanafos.com - 57 -
  • 58. Oracle8i New Features http://www.ggola.com/ SQL> alter table emp_part drop partition p_emp_old ; Table altered. Drop partition : table partition drop local index SQL> select index_name, partition_name, status from user_ind_partitions p_emp_1983_4 drop 2 where INDEX_NAME = 'XAKEMP_PART_HDT' ; . Hash partitioned table INDEX_NAME PARTITION_NAME STATUS . --------------- --------------- -------- XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1980_1 UNUSABLE XAKEMP_PART_HDT P_EMP_1985 UNUSABLE Index partition drop XAKEMP_PART_HDT P_EMP_1986 USABLE error return . , table partition drop local SQL> alter index xakemp_part_hdt drop partition p_emp_1980_1 ; index partition drop alter index xakemp_part_hdt drop partition p_emp_1980_1 . global index * drop index partition ERROR at line 1: ORA-14076: DROP/SPLIT PARTITION may not be applied to a LOCAL highest index partition partition drop . SQL> alter table emp_part modify partition p_emp_1986 2 storage ( next 1m ) ; Table altered. Modify partition : table or index partition storage SQL> alter index xakemp_part_hdt modify partition p_emp_1980_1 2 storage ( next 1m ) ; . Index altered. , index global or local partitioned index SQL> alter index xakempname_hash_hdt modify partition hp_h5 . 2 storage ( next 1m ) ; alter index xakempname_hash_hdt modify partition hp_h5 Hash partition : * hash partition ERROR at line 1: storage table level ORA-14192: cannot modify physical index attributes of a Hash index modify command partition error return . Modify default attributes - Table or index default attribute partition attribute . - , partition partition explicitly storage attribute default attribute override . - manual hash partitioned table index default attribute tablespace test storage clause Oracle8.1.6.2 . jkspark@hanafos.com - 58 -
  • 59. Oracle8i New Features http://www.ggola.com/ - table table . SQL> drop table emp_part ; Table dropped. SQL> create table emp_part ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2)) 10 partition by range (hiredate) 11 ( partition p_emp_1980 values less than 12 (to_date('01-JAN-1981','DD-MON-YYYY')) tablespace ts_emp1, 13 partition p_emp_1981 values less than 14 (to_date('01-JAN-1982','DD-MON-YYYY')) tablespace ts_emp2, 15 partition p_emp_1982 values less than 16 (to_date('01-JAN-1983','DD-MON-YYYY')) tablespace ts_emp3, 17 partition p_emp_1983 values less than 18 (to_date('01-JAN-1984','DD-MON-YYYY')) tablespace ts_emp4, 19 partition p_emp_1984 values less than 20 (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp5, 21 partition p_emp_1985 values less than 22 (MAXVALUE) tablespace ts_emp6 ) ; Table created. SQL> create index xakemp_part_hdt on emp_part (hiredate) local ; Index created. SQL> drop table emp_name_hash_part ; Table dropped. SQL> create table emp_name_hash_part ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 HIREDATE DATE, 5 DEPTNO NUMBER(2)) 6 storage (initial 32k) 7 partition by hash (hiredate) 8 ( partition hp_h1 tablespace ts_emp1, 9 partition hp_h2 tablespace ts_emp2, 10 partition hp_h3 tablespace ts_emp3) Table created. SQL> create index xakempname_hash_hdt 2 on emp_name_hash_part (hiredate) local ; Index created. SQL> break on table_name jkspark@hanafos.com - 59 -
  • 60. Oracle8i New Features http://www.ggola.com/ - table attribute modify . SQL> select table_name, partition_name, max_extent 2 from user_tab_partitions 3 where table_name in ('EMP_PART', 'EMP_NAME_HASH_PART') 4 order by 1 ; TABLE_NAME PARTITION_NAME MAX_EXTENT -------------------- --------------- ------------------------------------------------ EMP_NAME_HASH_PART HP_H2 505 HP_H3 505 HP_H1 505 EMP_PART P_EMP_1981 505 P_EMP_1982 505 P_EMP_1980 505 P_EMP_1985 505 P_EMP_1983 505 P_EMP_1984 505 SQL> alter table emp_part modify default attributes 2 storage ( maxextents 1024 ) ; Table default attribute Table altered. maxextents 1024 . SQL> alter table emp_name_hash_part modify default attributes 2 storage ( maxextents 1024 ) ; Table altered. SQL> select table_name, partition_name, max_extent 2 from user_tab_partitions 3 where table_name in ('EMP_PART', 'EMP_NAME_HASH_PART') 4 order by 1 ; TABLE_NAME PARTITION_NAME MAX_EXTENT -------------------- --------------- ---------- EMP_NAME_HASH_PART HP_H2 505 HP_H3 505 partition HP_H1 505 max extent EMP_PART P_EMP_1981 505 .( 505 ) P_EMP_1982 505 P_EMP_1980 505 P_EMP_1985 505 P_EMP_1983 505 P_EMP_1984 505 SQL> alter table emp_part split partition p_emp_1985 2 at (to_date('01-JAN-1987','DD-MON-YYYY')) 3 into ( partition p_emp_1985 tablespace ts_emp1, 4 partition p_emp_1987 tablespace ts_emp2) ; Table altered. - emp_part p_emp_1985 partition . jkspark@hanafos.com - 60 -
  • 61. Oracle8i New Features http://www.ggola.com/ SQL> select table_name, partition_name, max_extent 2 from user_tab_partitions Split command 3 where table_name = 'EMP_PART'; partition TABLE_NAME PARTITION_NAME MAX_EXTENT default attribute -------------------- --------------- ---------- . , split EMP_PART P_EMP_1981 505 partition new P_EMP_1982 505 partition P_EMP_1983 505 . P_EMP_1984 505 P_EMP_1985 505 P_EMP_1980 505 P_EMP_1986 505 SQL> alter table emp_part drop partition p_emp_1986 ; Table altered. Maxvalue partition drop new SQL> alter table emp_part add partition p_emp_1986 partition hash 2 values less than ( maxvalue ) tablespace ts_emp6 ; partitioned table add Table altered. partition new partition . SQL> alter table emp_name_hash_part add partition ; Table altered. SQL> select table_name, partition_name, max_extent 2 from user_tab_partitions 3 where table_name in ('EMP_PART', 'EMP_NAME_HASH_PART') 4 order by 1 ; TABLE_NAME PARTITION_NAME MAX_EXTENT -------------------- --------------- ---------- EMP_NAME_HASH_PART HP_H2 505 HP_H3 505 SYS_P47 1024 partition HP_H1 505 default attribute EMP_PART P_EMP_1981 505 P_EMP_1982 505 . P_EMP_1986 1024 P_EMP_1980 505 P_EMP_1985 505 P_EMP_1983 505 P_EMP_1984 505 jkspark@hanafos.com - 61 -
  • 62. Oracle8i New Features http://www.ggola.com/ - index default attribute test extent . - hash partitioned index . SQL> break on index_name SQL> select index_name, partition_name, next_extent 2 from user_ind_partitions 3 where index_name in 4 ('XAKEMP_PART_HDT','XAKEMPNAME_HASH_HDT') 5 order by 1 ; INDEX_NAME PARTITION_NAME NEXT_EXTENT ------------------------------ --------------- ----------- XAKEMPNAME_HASH_HDT HP_H1 40960 HP_H2 40960 HP_H3 40960 SYS_P47 40960 XAKEMP_PART_HDT P_EMP_1981 40960 P_EMP_1982 40960 P_EMP_1980 40960 P_EMP_1985 40960 P_EMP_1983 40960 P_EMP_1984 40960 P_EMP_1986 40960 SQL> alter index xakemp_part_hdt modify default attributes 2 maxtrans 10 storage ( next 5M ) ; index partition Index altered. default attribute . SQL> alter index xakempname_hash_hdt modify default attributes 2 maxtrans 10 storage ( next 5M ) ; Index altered. SQL> select index_name, partition_name, next_extent 2 from user_ind_partitions 3 where index_name in 4 ('XAKEMP_PART_HDT','XAKEMPNAME_HASH_HDT') 5 order by 1 ; INDEX_NAME PARTITION_NAME NEXT_EXTENT ------------------------------ --------------- ----------- XAKEMPNAME_HASH_HDT HP_H1 40960 HP_H2 40960 partition HP_H3 40960 attribute SYS_P47 40960 . XAKEMP_PART_HDT P_EMP_1981 40960 P_EMP_1982 40960 P_EMP_1980 40960 P_EMP_1985 40960 P_EMP_1983 40960 P_EMP_1984 40960 P_EMP_1986 40960 jkspark@hanafos.com - 62 -
  • 63. Oracle8i New Features http://www.ggola.com/ SQL> alter table emp_part drop partition p_emp_1986 ; Table altered. SQL> alter table emp_part add partition p_emp_1986 2 values less than ( maxvalue ) tablespace ts_emp6 ; Table altered. SQL> alter table emp_name_hash_part add partition ; Table altered. Add partition local index next extent SQL> select index_name, partition_name, next_extent default attribute 5M 2 from user_ind_partitions . 3 where index_name in 4 ('XAKEMP_PART_HDT','XAKEMPNAME_HASH_HDT') 5 order by 1 ; partition default attribute INDEX_NAME PARTITION_NAME NEXT_EXTENT . ------------------------------ --------------- ----------- XAKEMPNAME_HASH_HDT SYS_P48 5242880 HP_H1 40960 HP_H3 40960 SYS_P47 40960 HP_H2 40960 XAKEMP_PART_HDT P_EMP_1981 40960 P_EMP_1986 5242880 P_EMP_1980 40960 P_EMP_1985 40960 P_EMP_1982 40960 P_EMP_1983 40960 P_EMP_1984 40960 jkspark@hanafos.com - 63 -
  • 64. Oracle8i New Features http://www.ggola.com/ Unusable local index data insert - local index status unusable partition data . data insert index . - alter session command . - , index unique index index partition query error . SQL> col index_name for a15 SQL> col partition_name for a15 SQL> select index_name, partition_name, status 2 from user_ind_partitions 3 where index_name = 'XAKEMP_PART_HDT' ; INDEX_NAME PARTITION_NAME STATUS --------------- --------------- -------- XAKEMP_PART_HDT P_EMP_1981 USABLE XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1983 USABLE XAKEMP_PART_HDT P_EMP_1984 USABLE XAKEMP_PART_HDT P_EMP_1985 USABLE XAKEMP_PART_HDT P_EMP_1980 USABLE XAKEMP_PART_HDT P_EMP_1986 USABLE SQL> insert into emp_part select * from emp ; 162034 rows created. SQL> commit ; Commit complete. SQL> alter table emp_part move partition 2 p_emp_1981 tablespace tools ; Table altered. Data insert data partition SQL> select index_name, partition_name, status p_emp_1981 2 from user_ind_partitions tablespace move 3 where index_name = 'XAKEMP_PART_HDT' ; local index status unusable . INDEX_NAME PARTITION_NAME STATUS --------------- --------------- -------- XAKEMP_PART_HDT P_EMP_1981 UNUSABLE XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1983 USABLE XAKEMP_PART_HDT P_EMP_1984 USABLE XAKEMP_PART_HDT P_EMP_1985 USABLE XAKEMP_PART_HDT P_EMP_1980 USABLE XAKEMP_PART_HDT P_EMP_1986 USABLE jkspark@hanafos.com - 64 -
  • 65. Oracle8i New Features http://www.ggola.com/ SQL> insert into emp_part select * from emp 2 where to_char(hiredate, 'YYYYMMDD') like '1981%' Move partition 3 and rownum = 1 ; p_emp_1981 1980 insert into emp_part select * from emp data insert error * ERROR at line 1: . ORA-01502: index 'SCOTT.XAKEMP_PART_HDT' or partition of such index unusable index is in . unusable state SQL> alter session set skip_unusable_indexes = true ; Session altered. Alter session command SQL> insert into emp_part select * from emp data 2 where to_char(hiredate, 'YYYYMMDD') like '1981%' insert 3 and rownum = 1 ; . 1 row created. SQL> commit ; Commit complete. SQL> alter table emp_part modify partition 2 p_emp_1981 rebuild unusable local indexes ; Table altered. SQL> select index_name, partition_name, status 2 from user_ind_partitions index rebuild 3 where index_name = 'XAKEMP_PART_HDT' ; index . INDEX_NAME PARTITION_NAME STATUS --------------- --------------- -------- XAKEMP_PART_HDT P_EMP_1981 USABLE XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1983 USABLE XAKEMP_PART_HDT P_EMP_1984 USABLE XAKEMP_PART_HDT P_EMP_1985 USABLE XAKEMP_PART_HDT P_EMP_1980 USABLE XAKEMP_PART_HDT P_EMP_1986 USABLE jkspark@hanafos.com - 65 -
  • 66. Oracle8i New Features http://www.ggola.com/ Review command - general operation Oracle8 partition Oracle8 sample exchange command truncate command . - table creation . SQL> drop table emp_part ; Table dropped. SQL> create table emp_part ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2)) 10 partition by range (hiredate) 11 ( partition p_emp_1980 values less than 12 (to_date('01-JAN-1981','DD-MON-YYYY')) tablespace ts_emp1, 13 partition p_emp_1981 values less than 14 (to_date('01-JAN-1982','DD-MON-YYYY')) tablespace ts_emp2, 15 partition p_emp_1982 values less than 16 (to_date('01-JAN-1983','DD-MON-YYYY')) tablespace ts_emp3, 17 partition p_emp_1983 values less than 18 (to_date('01-JAN-1984','DD-MON-YYYY')) tablespace ts_emp4, 19 partition p_emp_1984 values less than 20 (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp5, 21 partition p_emp_1985 values less than 22 (MAXVALUE) tablespace ts_emp6 ) ; Table created. SQL> create index xakemp_part_hdt on emp_part (hiredate) local ; Index created. Table test SQL> select count(*) from emp ; 1981 COUNT(*) data ---------- 162034 77161 . data SQL> select count(*) from emp partitioned table insert 2 where to_char(hiredate, 'YYYYMMDD') like '1981%' ; test . COUNT(*) ---------- 77161 SQL> insert into emp_part select * from emp ; 162034 rows created. SQL> commit ; Commit complete. jkspark@hanafos.com - 66 -
  • 67. Oracle8i New Features http://www.ggola.com/ SQL> col table_name for a10 SQL> col index_name for a15 SQL> col partition_name for a10 SQL> col tablespace_name for a10 SQL> set pagesize 100 SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_PART' ; TABLE_NAME PARTITION_ TABLESPACE ---------- ---------- ---------- EMP_PART P_EMP_1981 TS_EMP2 EMP_PART P_EMP_1982 TS_EMP3 EMP_PART P_EMP_1983 TS_EMP4 data EMP_PART P_EMP_1984 TS_EMP5 partition p_emp_1981 select EMP_PART P_EMP_1985 TS_EMP6 emp 1981 EMP_PART P_EMP_1980 TS_EMP1 . partition SQL> select count(*) from emp_part partition(p_emp_1981) ; . COUNT(*) ---------- 77161 SQL> col segment_name for a10 SQL> select segment_name, partition_name, extents 2 from user_segments 3 where segment_name = 'EMP_PART' ; SEGMENT_NA PARTITION_ EXTENTS ---------- ---------- ---------- EMP_PART P_EMP_1981 11 EMP_PART P_EMP_1982 7 EMP_PART P_EMP_1983 5 EMP_PART P_EMP_1984 8 Partition truncate 3 EMP_PART P_EMP_1985 7 . Truncate EMP_PART P_EMP_1980 5 partition data . SQL> alter table emp_part truncate partition p_emp_1981 2 drop storage ; Table truncated. SQL> select count(*) from emp_part partition(p_emp_1981) ; COUNT(*) ---------- 0 SQL> alter table emp_part truncate partition p_emp_1982 2 reuse storage ; Table truncated. SQL> alter table emp_part truncate partition p_emp_1980 ; Table truncated. jkspark@hanafos.com - 67 -
  • 68. Oracle8i New Features http://www.ggola.com/ SQL> select segment_name, partition_name, extents Partition truncate drop 2 from user_segments storage 3 where segment_name = 'EMP_PART' ; option SEGMENT_NA PARTITION_ EXTENTS extent 1 space ---------- ---------- ---------- reuse option EMP_PART P_EMP_1981 1 p_emp_1982 EMP_PART P_EMP_1982 7 partition storage EMP_PART P_EMP_1983 5 . EMP_PART P_EMP_1984 8 EMP_PART P_EMP_1985 7 EMP_PART P_EMP_1980 1 SQL> create table emp_history as select * from emp 2 where to_char(hiredate, 'YYYYMMDD') like '1981%' ; Table created. Exchange partition test emp table SQL> select count(*) from emp_history ; emp_history table . table COUNT(*) data 1981 ---------- . 77161 SQL> alter table emp_part exchange partition p_emp_1981 2 with table emp_history ; Table altered. SQL> select count(*) from emp_history ; truncate p_emp_1981 COUNT(*) partition emp_history ---------- 0 exchange table partition SQL> select count(*) from emp_part partition(p_emp_1981) ; . , physical segment COUNT(*) . ---------- 77161 SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_PART' ; TABLE_NAME PARTITION_ TABLESPACE ---------- ---------- ---------- EMP_PART P_EMP_1981 TOOLS EMP_PART P_EMP_1982 TS_EMP3 EMP_PART P_EMP_1983 TS_EMP4 EMP_PART P_EMP_1984 TS_EMP5 EMP_PART P_EMP_1985 TS_EMP6 EMP_PART P_EMP_1980 TS_EMP1 jkspark@hanafos.com - 68 -
  • 69. Oracle8i New Features http://www.ggola.com/ SQL> select segment_name, partition_name, extents 2 from user_segments 3 where segment_name = 'EMP_PART' ; SEGMENT_NA PARTITION_ EXTENTS ---------- ---------- ---------- EMP_PART P_EMP_1981 93 EMP_PART P_EMP_1982 7 Exchange data EMP_PART P_EMP_1983 5 EMP_PART P_EMP_1984 8 EMP_PART P_EMP_1985 7 p_emp_1981 partition EMP_PART P_EMP_1980 1 extents . SQL> select index_name, partition_name, status index unusable 2 from user_ind_partitions . 3 where index_name = 'XAKEMP_PART_HDT' ; INDEX_NAME PARTITION_NAME STATUS ------------------- --------------- -------- XAKEMP_PART_HDT P_EMP_1981 UNUSABLE XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1983 USABLE XAKEMP_PART_HDT P_EMP_1984 USABLE XAKEMP_PART_HDT P_EMP_1985 USABLE XAKEMP_PART_HDT P_EMP_1980 USABLE SQL> alter table emp_part move partition p_emp_1981 2 tablespace ts_emp2 ; Table altered. SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_PART' ; TABLE_NAME PARTITION_ TABLESPACE ---------- ---------- ---------- EMP_PART P_EMP_1981 TS_EMP2 EMP_PART P_EMP_1982 TS_EMP3 Partition move rebuild EMP_PART P_EMP_1983 TS_EMP4 partitioned table EMP_PART P_EMP_1984 TS_EMP5 table EMP_PART P_EMP_1985 TS_EMP6 . EMP_PART P_EMP_1980 TS_EMP1 SQL> alter table emp_part modify partition 2 p_emp_1981 rebuild unusable local indexes ; Table altered. SQL> select index_name, partition_name, status 2 from user_ind_partitions 3 where index_name = 'XAKEMP_PART_HDT' ; INDEX_NAME PARTITION_NAME STATUS ------------------------------ --------------- -------- XAKEMP_PART_HDT P_EMP_1981 USABLE XAKEMP_PART_HDT P_EMP_1982 USABLE XAKEMP_PART_HDT P_EMP_1983 USABLE XAKEMP_PART_HDT P_EMP_1984 USABLE emp_history drop XAKEMP_PART_HDT P_EMP_1985 USABLE . XAKEMP_PART_HDT P_EMP_1980 USABLE SQL> drop table emp_history ; Table dropped. jkspark@hanafos.com - 69 -
  • 70. Oracle8i New Features http://www.ggola.com/ Execution PLAN : ITERATOR and INLIST - emp_part data . - partitioned table emp_part hiredate partition key . 6 partition 1980 1985 data key . - hiredate column local prefixed index . - hiredate SQL Oracle8i execution plan SQL> truncate table emp_part ; Table truncated. SQL> insert into emp_part select * from emp ; 162034 rows created. SQL> commit ; Commit complete. SQL> alter session set nls_date_format = 'YYYYMMDD HH24:MI:SS' ; Session altered. SQL> select distinct(hiredate) from emp_part ; HIREDATE test emp table Oracle ----------------- emp table 19801217 00:00:00 19810220 00:00:00 row 19810222 00:00:00 insert sample 19810402 00:00:00 162034 row hiredate 19810501 00:00:00 15 19810609 00:00:00 . 19810908 00:00:00 19810928 00:00:00 19811117 00:00:00 19811203 00:00:00 19820123 00:00:00 19821209 00:00:00 19830112 00:00:00 19840918 00:00:00 19851001 00:00:00 SQL> set pagesize 100 SQL> set long 2000 SQL> select table_name, partition_name, high_value 2 from user_tab_partitions 3 where table_name = 'EMP_PART' 4 order by 2 ; TABLE_NAME PARTITION_NAME HIGH_VALUE ---------------------------------------------------------- EMP_PART P_EMP_1980 TO_DATE(' 1981-01-01 00:00:00'… EMP_PART P_EMP_1981 TO_DATE(' 1982-01-01 00:00:00'… EMP_PART P_EMP_1982 TO_DATE(' 1983-01-01 00:00:00'… EMP_PART P_EMP_1983 TO_DATE(' 1984-01-01 00:00:00'… EMP_PART P_EMP_1984 TO_DATE(' 1985-01-01 00:00:00'… EMP_PART P_EMP_1985 MAXVALUE jkspark@hanafos.com - 70 -
  • 71. Oracle8i New Features http://www.ggola.com/ SQL> col operation format a16 SQL> col options format a20 SQL> col start format a12 SQL> col stop format a12 SQL> col distribution format a10 SQL> col object_name format a15 SQL> set numwidth 7 SQL> select distinct ename, hiredate from emp_part partition 2 where hiredate = to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS') ; data select . ENAME HIREDATE ---------- -------- BLAKE 19810501 SQL> explain plan for select distinct ename, hiredate 2 from emp_part 3 where hiredate = to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS') ; Explained. SQL> select operation, options, object_name, 2 partition_start "start", partition_stop "stop", Index 2 3 bytes, cardinality as "#" partition data 4 from plan_table return execution 5 order by id ; plan . OPERATION OPTIONS OBJECT_NAME start stop BYTES # ------------------------------------------------------------------------------------------------------------------ SELECT STATEMENT 16 1 SORT UNIQUE 16 1 TABLE ACCESS BY LOCAL INDEX ROWID EMP_PART 2 2 16 1 INDEX RANGE SCAN XAKEMP_PART_HDT 2 2 1 SQL> select distinct ename, hiredate from emp_part 2 where hiredate in 3 ( to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS'), 4 to_date('19840918 00:00:00', 'YYYYMMDD HH24:MI:SS')) ; ENAME HIREDATE ---------- -------- partition BLAKE 19810501 partition data JANG 19840918 JUN 19840918 select . KIM 19840918 LEE 19840918 SQL> delete from plan_table ; 10 rows deleted. SQL> commit ; Commit complete. jkspark@hanafos.com - 71 -
  • 72. Oracle8i New Features http://www.ggola.com/ SQL> explain plan for select distinct ename, hiredate 2 from emp_part 3 where hiredate in 4 ( to_date('19810501 00:00:00', 'YYYYMMDD HH24:MI:SS'), 5 to_date('19840918 00:00:00', 'YYYYMMDD HH24:MI:SS')) ; Explained. Execution plan KEY(INLIST) SQL> select operation, options, object_name, select “in” 2 partition_start "start", partition_stop "stop", partition 3 bytes, cardinality as "#" . 4 from plan_table 5 order by id ; , partition partition access OPERATION OPTIONS OBJECT_NAME start stop BYTES # . -------------------------------------------------------------------------------------------------------------------------------------------------- SELECTSTATEMENT 80 5 INLIST ITERATOR PARTITION RANGE ITERATOR KEY(INLIST) KEY(INLIST) SORT UNIQUE 80 5 TABLE ACCESS BY LOCAL INDEX ROWID EMP_PART KEY(INLIST) KEY(INLIST) 80 5 INDEX RANGE SCAN XAKEMP_PART_HDT KEY(INLIST) KEY(INLIST) - Oracle8 version “in” partition 2 partition partition range access . Oracle8 Test ITERATOR KEY(INLIST) Oracle8i . - full table scan ( hiredate index ) Oracle8 “in” partition partition ITERATOR( ) range scan(partition full scan) (“in” table full scan ) Oracle8i INLIST partition full scan . , full scan scan . jkspark@hanafos.com - 72 -
  • 73. Oracle8i New Features http://www.ggola.com/ Export - export table partition export query data export . - filesize option export dump file dump file import . CF. FILESIZE option defatul(B:bytes), K(Kbytes), M(Mbytes), G(Gbytes) . - . SQL> select count(*) from emp_part partition(p_emp_1981) ; COUNT(*) emp_part partition -------- p_emp_1981 data 77161 77161 deptno 20 SQL> select count(*) from emp_part partition(p_emp_1981) 15441 . 2 where deptno = 20 ; COUNT(*) -------- 15441 $ exp scott/tiger file=emp1980_1.dmp tables=emp_part:p_emp_1981 query='"where deptno=20"' filesize=256K Oracle8i new export option partition, query, filesize Export: Release 8.1.6.2.0 - Production on Mon Aug 13 16:42:28 2001 export . (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.6.2.0 - Production With the Partitioning option JServer Release 8.1.6.2.0 - Production Export done in US7ASCII character set and US7ASCII NCHAR character se About to export specified tables via Conventional Path ... . . exporting table EMP_PART . . exporting partition P_EMP_1981 emp1980_1.dmp Export file: expdat.dmp > emp1980_2.dmp 256K interactive mode continuing export into file emp1980_2.dmp export dump filename . 256K data Export file: expdat.dmp > emp1980_3.dmp export continuing export into file emp1980_3.dmp . 15441 rows exported ls command Export terminated successfully without warnings. export file size 256K . $ ls -l *.dmp -rw-r--r-- 1 oracle dba 262144 Aug 13 16:42 emp1980_1.dmp -rw-r--r-- 1 oracle dba 262144 Aug 13 16:43 emp1980_2.dmp -rw-r--r-- 1 oracle dba 221184 Aug 13 16:43 emp1980_3.dmp jkspark@hanafos.com - 73 -
  • 74. Oracle8i New Features http://www.ggola.com/ 7. Composite Partitioning Subpartition Composite partition - range partition + hash partition - Composite partition range partition hash function range partition hash partition . hash partition subpartition . - Range high availability and manageability data placement performance for parallel DML and supports partition-wise joins . (hash partition ) - physical data segment range partition subpartition(hash partition) . partition segment range partition subpartition . CF. range partition 4 subpartition 4 16 subpartition segment . - partition segment . SQL> alter session set nls_date_format = 'DD-MON-YYYY' ; Session altered. alter session command SQL> create table emp_comp_part ( range 2 EMPNO NUMBER(4) not null, partition key date type 3 ENAME VARCHAR2(10), partition 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), . Subpartition 6 HIREDATE DATE, empno 4 7 SAL NUMBER(7,2), range partition 8 COMM NUMBER(7,2), tablespace 9 DEPTNO NUMBER(2)) composite partitioning 10 partition by range (hiredate) . 11 subpartition by hash(empno) subpartitions 4 12 ( partition p_emp_1980 values less than 13 ('01-JAN-1981') tablespace ts_emp1, 14 partition p_emp_1981 values less than 15 ('01-JAN-1982') tablespace ts_emp2, 16 partition p_emp_1982 values less than 17 ('01-JAN-1983') tablespace ts_emp3, 18 partition p_emp_1984 values less than 19 (MAXVALUE) tablespace ts_emp4 ) ; Table created. jkspark@hanafos.com - 74 -
  • 75. Oracle8i New Features http://www.ggola.com/ SQL> select segment_name, partition_name, tablespace_name 2 from user_segments user_segments query 3 where segment_NAME = 'EMP_COMP_PART' tablespace 4 order by 3 ; subpartition . SEGMENT_NAME PARTITION_NAME TABLESPACE 4 X 4 = 16 subpartitions --------------- --------------- ---------- EMP_COMP_PART SYS_SUBP94 TS_EMP1 EMP_COMP_PART SYS_SUBP95 TS_EMP1 EMP_COMP_PART SYS_SUBP93 TS_EMP1 EMP_COMP_PART SYS_SUBP96 TS_EMP1 EMP_COMP_PART SYS_SUBP97 TS_EMP2 EMP_COMP_PART SYS_SUBP98 TS_EMP2 EMP_COMP_PART SYS_SUBP99 TS_EMP2 EMP_COMP_PART SYS_SUBP100 TS_EMP2 EMP_COMP_PART SYS_SUBP101 TS_EMP3 EMP_COMP_PART SYS_SUBP102 TS_EMP3 EMP_COMP_PART SYS_SUBP103 TS_EMP3 EMP_COMP_PART SYS_SUBP104 TS_EMP3 EMP_COMP_PART SYS_SUBP105 TS_EMP4 EMP_COMP_PART SYS_SUBP106 TS_EMP4 EMP_COMP_PART SYS_SUBP107 TS_EMP4 EMP_COMP_PART SYS_SUBP108 TS_EMP4 SQL> create table emp_name_comp_part ( range partition 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), subpartition 4 JOB VARCHAR2(9), attribute 5 MGR NUMBER(4), control 6 HIREDATE DATE, . 7 SAL NUMBER(7,2), 8 COMM NUMBER(7,2), 9 DEPTNO NUMBER(2)) 10 partition by range (hiredate) 11 subpartition by hash(empno) subpartitions 4 12 store in (ts_emp1, ts_emp2, ts_emp3, ts_emp4) 13 ( partition p_emp_1980 values less than 14 ('01-JAN-1981') storage(maxextents 512), 15 partition p_emp_1981 values less than 16 ('01-JAN-1982') pctfree 40, 17 partition p_emp_1982 values less than 18 ('01-JAN-1983') store in (ts_emp5), 19 partition p_emp_1984 values less than 20 (MAXVALUE) subpartitions 6 store in (ts_emp6)) ; Table created. user_tab_partitions range SQL> select table_name, partition_name, tablespace_name partition query ,4 2 from user_tab_partitions range partition 3 where table_name = 'EMP_NAME_COMP_PART' 4 order by 3 ; logical structure . TABLE_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_NAME_COMP_PART P_EMP_1980 TOOLS EMP_NAME_COMP_PART P_EMP_1981 TOOLS EMP_NAME_COMP_PART P_EMP_1982 TOOLS EMP_NAME_COMP_PART P_EMP_1984 TOOLS jkspark@hanafos.com - 75 -
  • 76. Oracle8i New Features http://www.ggola.com/ SQL> select segment_name, partition_name, tablespace_name 2 from user_segments user_segments query 3 where segment_NAME = 'EMP_NAME_COMP_PART' composite partition 4 order by 3 ; emp_name_comp_part table 18 hash partition SEGMENT_NAME PARTITION_NAME TABLESPACE segment -------------------- --------------- ---------- . , composite EMP_NAME_COMP_PART SYS_SUBP109 TS_EMP1 EMP_NAME_COMP_PART SYS_SUBP113 TS_EMP1 partition hash partition EMP_NAME_COMP_PART SYS_SUBP110 TS_EMP2 data . EMP_NAME_COMP_PART SYS_SUBP114 TS_EMP2 EMP_NAME_COMP_PART SYS_SUBP111 TS_EMP3 (4 X 2) + EMP_NAME_COMP_PART SYS_SUBP115 TS_EMP3 4 + EMP_NAME_COMP_PART SYS_SUBP112 TS_EMP4 6 = 18 subpartitions EMP_NAME_COMP_PART SYS_SUBP116 TS_EMP4 EMP_NAME_COMP_PART SYS_SUBP117 TS_EMP5 EMP_NAME_COMP_PART SYS_SUBP118 TS_EMP5 EMP_NAME_COMP_PART SYS_SUBP119 TS_EMP5 EMP_NAME_COMP_PART SYS_SUBP120 TS_EMP5 EMP_NAME_COMP_PART SYS_SUBP121 TS_EMP6 EMP_NAME_COMP_PART SYS_SUBP122 TS_EMP6 EMP_NAME_COMP_PART SYS_SUBP123 TS_EMP6 EMP_NAME_COMP_PART SYS_SUBP124 TS_EMP6 EMP_NAME_COMP_PART SYS_SUBP125 TS_EMP6 EMP_NAME_COMP_PART SYS_SUBP126 TS_EMP6 SQL> insert into emp_name_comp_part select * from emp ; 162034 rows created. SQL> commit ; emp table data Commit complete. p_emp_1984 partition SQL> select count(*) 61721 row data 2 from emp_name_comp_part partition(p_emp_1984) ; 3 hiredate COUNT(*) . p_emp_1984 ---------- subpartition sys_subp125 61721 hiredate . SQL> select distinct hiredate 2 from emp_name_comp_part partition(p_emp_1984) ; HIREDATE ----------- 12-JAN-1983 18-SEP-1984 01-OCT-1985 SQL> select distinct hiredate 2 from emp_name_comp_part subpartition(SYS_SUBP125) ; HIREDATE ----------- subpartition alias 12-JAN-1983 DML SQL> update emp_name_comp_part subpartition(SYS_SUBP125) es . 2 set es.hiredate = sysdate ; subpartition 7713 rows updated. . jkspark@hanafos.com - 76 -
  • 77. Oracle8i New Features http://www.ggola.com/ SQL> select distinct hiredate 2 from emp_name_comp_part subpartition(SYS_SUBP125) ; HIREDATE ----------- 14-AUG-2001 update SQL> commit ; subpartition hiredate Commit complete. range partition p_emp_1984 SQL> select distinct hiredate hiredate 1983 data 2 from emp_name_comp_part partition(p_emp_1984) ; 2001 data HIREDATE . ----------- 18-SEP-1984 01-OCT-1985 14-AUG-2001 SQL> create table emp_name_sub_part ( 2 EMPNO NUMBER(4) not null, 3 HIREDATE DATE, 4 SAL NUMBER(7,2), 5 DEPTNO NUMBER(2)) 6 partition by range (hiredate) 7 subpartition by hash(empno) subpartitions 4 8 store in (ts_emp1, ts_emp2, ts_emp3, ts_emp4) 9 ( partition p_emp_1980 values less than ('01-JAN-1981'), 10 partition p_emp_1981 values less than ('01-JAN-1982'), 11 partition p_emp_1982 values less than (MAXVALUE) 12 ( subpartition sp_1982_h1 tablespace ts_emp5, 13 subpartition sp_1982_h2 tablespace ts_emp6)) ; Table created. composite SQL> select segment_name, partition_name, tablespace_name partition hash partition 2 from user_segments 3 where segment_NAME = 'EMP_NAME_SUB_PART' . 4 order by 3 ; SEGMENT_NAME PARTITION_NAME TABLESPACE -------------------- --------------- ---------- EMP_NAME_SUB_PART SYS_SUBP127 TS_EMP1 EMP_NAME_SUB_PART SYS_SUBP131 TS_EMP1 EMP_NAME_SUB_PART SYS_SUBP128 TS_EMP2 EMP_NAME_SUB_PART SYS_SUBP132 TS_EMP2 EMP_NAME_SUB_PART SYS_SUBP129 TS_EMP3 EMP_NAME_SUB_PART SYS_SUBP133 TS_EMP3 EMP_NAME_SUB_PART SYS_SUBP130 TS_EMP4 EMP_NAME_SUB_PART SYS_SUBP134 TS_EMP4 EMP_NAME_SUB_PART SP_1982_H1 TS_EMP5 EMP_NAME_SUB_PART SP_1982_H2 TS_EMP6 jkspark@hanafos.com - 77 -
  • 78. Oracle8i New Features http://www.ggola.com/ Composite partitioned indexes - composite partitioned indexes always local index tablespace default table subpartition tablespace . - , composite partitioned table range partitioned global index . composite partitioned global index . (hash syntax .) SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_NAME_SUB_PART' ; composite partitioned TABLE_NAME PARTITION_NAME TABLESPACE table range partition -------------------- --------------- ---------- logical structure EMP_NAME_SUB_PART P_EMP_1980 TOOLS EMP_NAME_SUB_PART P_EMP_1981 TOOLS . table local EMP_NAME_SUB_PART P_EMP_1982 TOOLS index index . SQL> create index xakempnmsubpt_hdempno 2 on emp_name_sub_part (hiredate, empno) local ; Index created. local index partition SQL> select index_name, partition_name, tablespace_name, status tablespace 2 from user_ind_partitions logical structure 3 where index_name = 'XAKEMPNMSUBPT_HDEMPNO' ; . composite partitioned INDEX_NAME PARTITION_NAME TABLESPACE STATUS --------------------- --------------- ---------- -------- local index STATUS XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 N/A “N/A” . XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 N/A XAKEMPNMSUBPT_HDEMPNO P_EMP_1982 N/A SQL> select segment_name, partition_name, tablespace_name 2 from user_segments 3 where segment_NAME = 'XAKEMPNMSUBPT_HDEMPNO' 4 order by 3 ; local index SEGMENT_NAME PARTITION_NAME TABLESPACE --------------------- --------------- ---------- underlying table XAKEMPNMSUBPT_HDEMPNO SYS_SUBP127 TS_EMP1 subpartition XAKEMPNMSUBPT_HDEMPNO SYS_SUBP131 TS_EMP1 XAKEMPNMSUBPT_HDEMPNO SYS_SUBP128 TS_EMP2 XAKEMPNMSUBPT_HDEMPNO SYS_SUBP132 TS_EMP2 . XAKEMPNMSUBPT_HDEMPNO SYS_SUBP129 TS_EMP3 XAKEMPNMSUBPT_HDEMPNO SYS_SUBP133 TS_EMP3 XAKEMPNMSUBPT_HDEMPNO SYS_SUBP130 TS_EMP4 XAKEMPNMSUBPT_HDEMPNO SYS_SUBP134 TS_EMP4 XAKEMPNMSUBPT_HDEMPNO SP_1982_H1 TS_EMP5 XAKEMPNMSUBPT_HDEMPNO SP_1982_H2 TS_EMP6 jkspark@hanafos.com - 78 -
  • 79. Oracle8i New Features http://www.ggola.com/ CF. user_ind_partitions index status “USABLE” “N/A” bug Oracle8.1.7 Oracle8i dictionary( ) subpartition “N/A” subpartition subpartition “UNUSABLE” user_ind_partitions . CF. , composite partition subpartitions dictionary . SQL> select index_name, partition_name, subpartition_name, status 2 from user_ind_subpartitions 3 where index_name = 'XAKEMPNMSUBPT_HDEMPNO' ; INDEX_NAME PARTITION_ SUBPARTITION_NA STATUS ----------------------- ---------- --------------- -------- XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP127 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP128 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP129 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1980 SYS_SUBP130 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP131 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP132 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP133 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1981 SYS_SUBP134 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1982 SP_1982_H1 USABLE XAKEMPNMSUBPT_HDEMPNO P_EMP_1982 SP_1982_H2 USABLE SQL> select table_name, partition_name, subpartition_name, tablespace_name 2 from user_tab_subpartitions 3 where table_name = 'EMP_NAME_SUB_PART' ; TABLE_NAME PARTITION_ SUBPARTITION_NA TABLESPACE -------------------- ---------- --------------- ---------- EMP_NAME_SUB_PART P_EMP_1980 SYS_SUBP127 TS_EMP1 EMP_NAME_SUB_PART P_EMP_1980 SYS_SUBP128 TS_EMP2 EMP_NAME_SUB_PART P_EMP_1980 SYS_SUBP129 TS_EMP3 EMP_NAME_SUB_PART P_EMP_1980 SYS_SUBP130 TS_EMP4 EMP_NAME_SUB_PART P_EMP_1981 SYS_SUBP131 TS_EMP1 EMP_NAME_SUB_PART P_EMP_1981 SYS_SUBP132 TS_EMP2 EMP_NAME_SUB_PART P_EMP_1981 SYS_SUBP133 TS_EMP3 EMP_NAME_SUB_PART P_EMP_1981 SYS_SUBP134 TS_EMP4 EMP_NAME_SUB_PART P_EMP_1982 SP_1982_H1 TS_EMP5 EMP_NAME_SUB_PART P_EMP_1982 SP_1982_H2 TS_EMP6 . jkspark@hanafos.com - 79 -
  • 80. Oracle8i New Features http://www.ggola.com/ Different partition maintenance operation - subpartition operation subpartition . - Alter table modify partition add/coalesce subpartition … Alter table/index modify subpartition … Alter index rebuild subpartition … Alter table modify subpartition… Alter table/index rename subpartition… Alter table move subpartition… Alter table exchange subpartition… Alter table truncate subpartition… Alter table modify subpartition unusable local indexes… Alter table modify subpartition rebuild unusable local indexes. - composite partitioned table subpartition default attributes . SQL> alter table emp_name_sub_part 2 modify default attributes for partition p_emp_1982 3 tablespace ts_emp6 ; Table altered. CF. partition . New dictionary and columns - DBA/USER/ALL_TAB_SUBPARTITIONS : subpartition information - DBA/USER/ALL_SUBPART_KEY_COLUMNS : subpartition key information - DBA/USER/ALL_IND_SUBPARTITIONS : subpartition index information - DBA/USER/ALL_SUBPART_COL_STATISTICS : subpartition column statistics - DBA/USER/ALL_SUBPART_HISTOGRAMS : subpartition histogram - object data dictionary subpartition columns . Others - partition subpartition subpartition export/import . (6 export ) - subpartition analyze . SQL> analyze table emp_name_sub_part subpartition (sp_1982_h1) compute statistics ; jkspark@hanafos.com - 80 -
  • 81. Oracle8i New Features http://www.ggola.com/ 8. Added New Features for partition Large Objects Partition - CF Part/Type LOB Object Type IOT RANGE O O O HASH O O X COMPOSITE O O X CF. collection type IOT partition IOT partitioning partition key primary key column subset . LOB (Large Objects) - LOB column partition key LOB column table partitioning . , LOB data table partition keys partition . - Lob partition tablespace “tablespace default” table partition tablespace . , table partition tablespace table partition user default tablespace lob partition . - Lob index lob partition tablespace . lob index storage . - Alter command LOB storage tablespace move command . Move command lob partition table partition . table partition move lob partition . - Lob data partitioned table tablespace “drop tablespace including contents” drop all table partition tablespace , tablespace LOB partition jkspark@hanafos.com - 81 -
  • 82. Oracle8i New Features http://www.ggola.com/ partition drop . ,1 table partition drop tablespace tablespace ORA-22868 error return . - LOB partition . SQL> create table emp_lob ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 HIREDATE DATE, 5 SAL BLOB, 6 DEPTNO NUMBER(2)) 7 partition by range (hiredate) 8 ( partition p_emp_1984 values less than 9 (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp1 10 LOB(sal) store as (tablespace ts_emp6), 11 partition p_emp_1985 values less than 12 (MAXVALUE) tablespace ts_emp2 13 LOB(sal) store as (tablespace ts_emp5)) ; Table created. SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_LOB' ; LOB column table lob partition TABLE_NAME PARTITION_NA TABLESPACE lob ---------- ------------ ---------- tablespace lob EMP_LOB P_EMP_1984 TS_EMP1 partition EMP_LOB P_EMP_1985 TS_EMP2 . SQL> select table_name, partition_name, lob_partition_name, tablespace_name Lob partition 2 from user_lob_partitions system generated name 3 where table_name = 'EMP_LOB' ; SYS_LOB_Pnn . TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE ---------- ------------ ------------ ---------- EMP_LOB P_EMP_1984 SYS_LOB_P137 TS_EMP6 EMP_LOB P_EMP_1985 SYS_LOB_P138 TS_EMP5 SQL> create table emp_lob2 ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 HIREDATE DATE, 5 SAL BLOB, Table level lob 6 DEPTNO NUMBER(2)) 7 LOB(sal) store as (tablespace default) partition level 8 partition by range (hiredate) lob 9 ( partition p_emp_1984 values less than partitioned table 10 (to_date('01-JAN-1985','DD-MON-YYYY')) tablespace ts_emp3 . 11 LOB(sal) store as (tablespace ts_emp4), 12 partition p_emp_1985 values less than (MAXVALUE)) ; Table created. jkspark@hanafos.com - 82 -
  • 83. Oracle8i New Features http://www.ggola.com/ SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_LOB2' ; TABLE_NAME PARTITION_NA TABLESPACE ---------- ------------ ---------- EMP_LOB2 P_EMP_1984 TS_EMP3 EMP_LOB2 P_EMP_1985 TOOLS Partition level SQL> select table_name, partition_name, lob_partition_name, tablespace_name p_emp_1985 2 from user_lob_partitions user default tablespace 3 where table_name = 'EMP_LOB2' ; tools table level lob TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE ---------- ------------ ------------ ---------- tablespace default EMP_LOB2 P_EMP_1984 SYS_LOB_P141 TS_EMP4 lob partition EMP_LOB2 P_EMP_1985 SYS_LOB_P142 TOOLS table partition . SQL> alter table emp_lob2 move partition 2 p_emp_1985 tablespace ts_emp5 ; Table altered. SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_LOB2' ; TABLE_NAME PARTITION_NA TABLESPACE ---------- ------------ ---------- EMP_LOB2 P_EMP_1984 TS_EMP3 EMP_LOB2 P_EMP_1985 TS_EMP5 SQL> select table_name, partition_name, lob_partition_name, tablespace_name 2 from user_lob_partitions Move partition 3 where table_name = 'EMP_LOB2' ; partition lob partition . TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE lob partition ---------- ------------ ------------ ---------- move EMP_LOB2 P_EMP_1984 SYS_LOB_P141 TS_EMP4 . EMP_LOB2 P_EMP_1985 SYS_LOB_P142 TOOLS SQL> alter table emp_lob2 move partition p_emp_1985 2 lob(sal) store as (tablespace ts_emp5) ; Table altered. SQL> select table_name, partition_name, lob_partition_name, tablespace_name 2 from user_lob_partitions 3 where table_name = 'EMP_LOB2' ; TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE ---------- ------------ ------------ ---------- EMP_LOB2 P_EMP_1985 SYS_LOB_P145 TS_EMP5 EMP_LOB2 P_EMP_1984 SYS_LOB_P141 TS_EMP4 jkspark@hanafos.com - 83 -
  • 84. Oracle8i New Features http://www.ggola.com/ SQL> alter table emp_lob2 move partition p_emp_1984 2 tablespace ts_emp1 lob(sal) store as (tablespace ts_emp1) ; Table altered. Move partition table SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions partition lob partition 3 where table_name = 'EMP_LOB2' ; . TABLE_NAME PARTITION_NA TABLESPACE ---------- ------------ ---------- EMP_LOB2 P_EMP_1984 TS_EMP1 EMP_LOB2 P_EMP_1985 TS_EMP5 SQL> select table_name, partition_name, lob_partition_name, tablespace_name 2 from user_lob_partitions 3 where table_name = 'EMP_LOB2' ; TABLE_NAME PARTITION_NA LOB_PARTITIO TABLESPACE ---------- ------------ ------------ ---------- EMP_LOB2 P_EMP_1985 SYS_LOB_P145 TS_EMP5 EMP_LOB2 P_EMP_1984 SYS_LOB_P147 TS_EMP1 SQL> create index xakemplob2_hdtemp on emp_lob2 2 (hiredate, empno) local ; Index lob index Index created. partition lob partition SQL> select table_name, partition_name, lob_partition_name, . Lob index partition 2 lob_indpart_name, tablespace_name name SYS_IL_Pnn 3 from user_lob_partitions . 4 where table_name = 'EMP_LOB2'; TABLE_NAME PARTITION_NA LOB_PARTITIO LOB_INDPART_NAM TABLESPACE ---------- ------------ ------------ --------------- ---------- EMP_LOB2 P_EMP_1985 SYS_LOB_P145 SYS_IL_P146 TS_EMP5 Table partition EMP_LOB2 P_EMP_1984 SYS_LOB_P147 SYS_IL_P148 TS_EMP1 lob partition tablespace SQL> connect internal tablespace drop Connected. tablespace SQL> drop tablespace ts_emp1 including contents ; table partition drop tablespace ts_emp1 including contents * tablespace drop ERROR at line 1: . ORA-22868: table with LOBs contains segments in different tablespaces LOB Operation - lob partition move partition partition lob . - , lob storage lob . SQL> alter table emp_lob2 modify lob (sal) (storage (next 1m maxextents 512)) ; jkspark@hanafos.com - 84 -
  • 85. Oracle8i New Features http://www.ggola.com/ New/Changed dictionary and columns - DBA/USER/ALL_PART_LOBS : table level lob information - DBA/USER/ALL_LOB_PARTITIONS : lob partition information (including lob index partition) - DBA/USER/ALL_LOB_SUBPARTITIONS : lob subpartition information - DBA/USER/ALL_IND_PARTITIONS, OBJECTS, SEGMENTS : type index name lob information CF. system generated partition name rule comparison table partition : SYS_Pnn table subpartition : SYS_SUBPnn lob partition : SYS_LOB_Pnn lob index partition : SYS_IL_Pnn iot partition : SYS_IOT_TOP_Pnn iot overflow partition : SYS_IOT_OVER_Pnn CF. IOT system generated partition name SYS_…_Pnn ‘P’ . Index Organized Table IOT - Only range partition partition key IOT primary key subset . CF. , overflow segment table partition range . (equipartitioned with the table partition) - Secondary index partitioning local, global index . - General IOT partitioned IOT LOB or varray type . - partition maintenance partition command . , LOB IOT partition tablespace ‘move’ command . - Tablespace drop LOB partition tablespace overflow tablespace drop table partition tablespace error return . ORA-14404 : partitioned table contains partitions in a different tablespace jkspark@hanafos.com - 85 -
  • 86. Oracle8i New Features http://www.ggola.com/ - IOT partition SQL> drop table emp_iot ; Test Table dropped. IOT drop. SQL> alter session set nls_date_format = 'DD-MON-YYYY' ; Session altered. Primary key name SQL> create table emp_of_iot ( . including 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), hiredate 4 HIREDATE DATE, overflow . 5 DEPTNO NUMBER(2), Compress option 6 constraint xpkemp_of_iot primary key(empno, hiredate)) PK value 7 organization index including hiredate . (prefix 8 compress 1 PK columns PK 9 overflow tablespace ts_emp6 columns –1 ) 10 partition by range(hiredate) 11 ( partition p_iot1 values less than ('01-JAN-1999') tablespace ts_emp1 Default nocompress 12 overflow tablespace ts_emp5, compress default 13 partition p_iot2 values less than ('01-JAN-2000') tablespace ts_emp2) ; PK column –1 . Table created. SQL> select table_name, partition_name, tablespace_name SYS_IOT_OVER_ 2 from user_tab_partitions overflow partition 3 where table_name in (select table_name from user_tables . EMP_OF_IOT 4 where iot_name = 'EMP_OF_IOT') tablespace 5 or table_name = 'EMP_OF_IOT' ; IOT Table TABLE_NAME PARTITION_NAME TABLESPACE . -------------------- -------------------- ---------- Index partition table SYS_IOT_OVER_42916 P_IOT2 TS_EMP6 SYS_IOT_OVER_42916 P_IOT1 TS_EMP5 partition EMP_OF_IOT P_IOT1 . EMP_OF_IOT P_IOT2 P_iot1 partition tablespace ts_emp5 SQL> select index_name, partition_name, tablespace_name 2 from user_ind_partitions overflow 3 where index_name = 'XPKEMP_OF_IOT' ; table level INDEX_NAME PARTITION_NAME TABLESPACE ts_emp6 . --------------- -------------------- ---------- XPKEMP_OF_IOT P_IOT2 TS_EMP2 XPKEMP_OF_IOT P_IOT1 TS_EMP1 SQL> select segment_name, segment_type, tablespace_name 2 from user_segments IOT table 3 where segment_name in ( storage 4 select table_name from user_tables segment overflow 5 where iot_name = 'EMP_OF_IOT' partition IOT partition 6 union . 7 select index_name from user_ind_partitions 8 where index_name = 'XPKEMP_OF_IOT') SEGMENT_NAME SEGMENT_TYPE TABLESPACE -------------------- ------------------ ---------- SYS_IOT_OVER_42916 TABLE PARTITION TS_EMP6 SYS_IOT_OVER_42916 TABLE PARTITION TS_EMP5 XPKEMP_OF_IOT INDEX PARTITION TS_EMP2 XPKEMP_OF_IOT INDEX PARTITION TS_EMP1 jkspark@hanafos.com - 86 -
  • 87. Oracle8i New Features http://www.ggola.com/ SQL> create table emp_of_iot2 ( 2 EMPNO NUMBER(4) not null, 3 ENAME VARCHAR2(10), 4 HIREDATE DATE, 5 DEPTNO NUMBER(2), 6 primary key(empno, hiredate)) 7 organization index 8 overflow tablespace ts_emp3 9 partition by range(hiredate) 10 ( partition p_iot1 values less than ('01-JAN-1999') tablespace ts_emp1 PK name 11 overflow tablespace ts_emp4, IOT . System 12 partition p_iot2 values less than ('01-JAN-2000') tablespace ts_emp2) ; generated index name SYS_IOT_TOP_Pnn Table created. . SQL> select index_name, partition_name, tablespace_name 2 from user_ind_partitions 3 where index_name in ( select index_name 4 from user_indexes 5 where table_name = 'EMP_OF_IOT2') ; INDEX_NAME PARTITION_NAME TABLESPACE -------------------- -------------------- ---------- SYS_IOT_TOP_42934 P_IOT1 TS_EMP1 SYS_IOT_TOP_42934 P_IOT2 TS_EMP2 SQL> select segment_name, segment_type, tablespace_name 2 from user_segments 3 where segment_name in ( 4 select table_name from user_tables LOB 5 where iot_name = 'EMP_OF_IOT2' 6 union IOT 7 select index_name from user_indexes partition ts_emp2 8 where table_name = 'EMP_OF_IOT2') ; drop tablespace command SEGMENT_NAME SEGMENT_TYPE TABLESPACE overflow partition -------------------- ------------------ ---------- ts_emp3, ts_emp4 SYS_IOT_OVER_42934 TABLE PARTITION TS_EMP4 SYS_IOT_OVER_42934 TABLE PARTITION TS_EMP3 SYS_IOT_TOP_42934 INDEX PARTITION TS_EMP1 drop . SYS_IOT_TOP_42934 INDEX PARTITION TS_EMP2 IOT partition ts_emp1, SQL> connect internal ts_emp2 Connected error return SQL> drop tablespace ts_emp2 including contents ; . drop tablespace ts_emp2 including contents * ERROR at line 1: ORA-14404: partitioned table contains partitions in a different tablespace - IOT partition maintenance partition command . jkspark@hanafos.com - 87 -
  • 88. Oracle8i New Features http://www.ggola.com/ Object Type Object type partitioning - Oracle8i object table partitioning - object type partitioning restriction : nested partitioned table . object type , REF, nested table or VARRAY partition key . - VARRAY LOB tablespace . VARRAY LOB tablespace . , table partition . - . SQL> create type emp_type as object ( 2 empno number(4), ename varchar2(10), hiredate date) ; 3 / Type created. SQL> select type_name, typecode from user_types ; TYPE_NAME TYPECODE --------------- ---------- EMP_TYPE OBJECT Type SQL> desc emp_type partitioned object table Name Null? Type . ------------ ------ ------------- EMPNO NUMBER(4) ENAME VARCHAR2(10) HIREDATE DATE SQL> create table emp_obj_tp of emp_type 2 partition by range (empno) 3 (partition p_7000 values less than (8000) tablespace ts_emp1, 4 partition p_8000 values less than (9000) tablespace ts_emp2, 5 partition p_9000 values less than (maxvalue) tablespace ts_emp3) ; Table created. SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_OBJ_TP' ; TABLE_NAME PARTITION_NAME TABLESPACE --------------- -------------------- ---------- EMP_OBJ_TP P_7000 TS_EMP1 EMP_OBJ_TP P_8000 TS_EMP2 EMP_OBJ_TP P_9000 TS_EMP3 jkspark@hanafos.com - 88 -
  • 89. Oracle8i New Features http://www.ggola.com/ SQL> select object_name, object_type, status 2 from user_objects 3 where object_id in ( select referenced_object_id 4 from public_dependency where object_id in ( select object_id 5 from user_objects where object_name = 'EMP_OBJ_TP')) ; OBJECT_NAME OBJECT_TYPE STATUS -------------------- -------------------- ------- Sys user view EMP_TYPE TYPE VALID public_dependency object table SQL> create type emp_va_php_type as varray(10) of number(15) ; dependency object type 2 / Type created. . SQL> select type_name, typecode from user_types ; TYPE_NAME TYPECODE ---------------- ------------ EMP_TYPE OBJECT EMP_VA_PHP_TYPE COLLECTION SQL> desc emp_va_php_type emp_va_php_type VARRAY(10) OF NUMBER(15) SQL> create type emp_va_profile as varray(1000) of varchar2(4000) ; 2 / Type created. SQL> select type_name, typecode from user_types ; Collection type varray TYPE_NAME TYPECODE partitioned object table ---------------- ----------- . type EMP_TYPE OBJECT lob EMP_VA_PHP_TYPE COLLECTION . EMP_VA_PROFILE COLLECTION SQL> desc emp_va_profile emp_va_profile VARRAY(1000) OF VARCHAR2(4000) SQL> create table emp_obj_coll_tp ( 2 empno number(4), 3 ename varchar2(10), 4 hiredate date, 5 emp_phone emp_va_php_type, 6 emp_profile emp_va_profile) 7 varray emp_profile store as lob (storage (initial 1m next 1m)) 8 partition by range(empno) 9 (partition p_7000 values less than (8000) tablespace ts_emp1 10 varray emp_profile store as lob (storage (maxextents 1024)), 11 partition p_8000 values less than (9000) tablespace ts_emp3 12 varray emp_profile store as lob (storage (maxextents 2048)), 13 partition p_9000 values less than (maxvalue) tablespace ts_emp5) ; Table created. jkspark@hanafos.com - 89 -
  • 90. Oracle8i New Features http://www.ggola.com/ SQL> select table_name, partition_name, tablespace_name 2 from user_tab_partitions 3 where table_name = 'EMP_OBJ_COLL_TP' ; TABLE_NAME PARTITION_NAME TABLESPACE --------------- --------------- ---------- EMP_OBJ_COLL_TP P_8000 TS_EMP3 EMP_OBJ_COLL_TP P_9000 TS_EMP5 EMP_OBJ_COLL_TP P_7000 TS_EMP1 Table partition lob SQL> select table_name, partition_name, lob_partition_name, tablespace_name 2 from user_lob_partitions partition tablespace 3 where table_name = 'EMP_OBJ_COLL_TP' ; . dependency TABLE_NAME PARTITION_NAME LOB_PARTITION_NAME table object type TABLESPACE . --------------- --------------- -------------------- ---------- EMP_OBJ_COLL_TP P_7000 SYS_LOB_P217 TS_EMP1 EMP_OBJ_COLL_TP P_8000 SYS_LOB_P218 TS_EMP3 EMP_OBJ_COLL_TP P_9000 SYS_LOB_P219 TS_EMP5 SQL> select object_name, object_type, status 2 from user_objects 3 where object_id in ( select referenced_object_id 4 from public_dependency where object_id in ( select object_id 5 from user_objects where object_name = 'EMP_OBJ_COLL_TP')) ; OBJECT_NAME OBJECT_TYPE STATUS -------------------- -------------------- ------- EMP_VA_PHP_TYPE TYPE VALID EMP_VA_PROFILE TYPE VALID - partition maintenance partition command . - Partitioned table tablespace drop partitioned table tablespace partition drop ORA- 14404 error return . jkspark@hanafos.com - 90 -
  • 91. Oracle8i New Features http://www.ggola.com/ Parallel processing Oracle8i parallel processing . basic parallel processing Oracle8 New Features . Default degree of parallelism - Oracle parallel degree . - SQL hint parallel degree degree . - table or index parallelism . - default degree . 1. Number of CPU X parallel_threads_per_cpu(parameter) 2. OPS number of OPS instances in an MPP system 3. Number of partitions to be accessed CF. , parallel_max_servers degree . Enable parallel DML/DDL - parallel processing initial parameter parallel DML enabling . session level . - SQL> alter session ENABLE/DISABLE/FORCE parallel DML/DDL (parallel n) ; CF. parallel query . parallel query DML DDL . - FORCE : parallel clause default parallel degree . - Oracle8 parallel DML commit or rollback parallel Oracle8i parallel DML object parallel DML . , parallel DML object read or modify . jkspark@hanafos.com - 91 -
  • 92. Oracle8i New Features http://www.ggola.com/ Check Data dictionary - V$SESSION : PDML_ENABLED column parallel enabling session level . - V$PQ_SYSSTAT : DML_INITATED query Select * From V$PQ_SYSSTAT; initialized parallel DML - V$PQ_SESSTAT : DML_PARALLELIZED query Select * From V$PQ_SESSTAT; current session parallel Review general restriction of parallel processing - nonpartitioned table parallel update or delete (error return serially ) - You cannot read or modify the same tables after modifying it in parallel. - You cannot read or modify the same tables after a serial direct load INSERT. - Parallel DML issues exclusive locks. (no lock table or select for update statement can be in the same transaction as the parallel DML statement) - There is limited integrity constraint support. 1. no self-referential integrity 2. no delete cascade 3. no deferred integrity - LOB or object type or IOT table clustered table parallel DML . - Replication . Trigger enable Parallel DML statement serially parallel DML trigger disable . trigger replication functionality . - Distributed transaction . (serially ) - Initial parameter ROW_LOCKING . DML row locking default always default DML row level lock intent table level lock . intent table lock parallel DML serial . jkspark@hanafos.com - 92 -
  • 93. Oracle8i New Features http://www.ggola.com/ Parallel transaction recovery - parallel DML rollback parallel . user rollback recovery . , parallel DML rollback parallel transaction rollback . - , system or instance recovery large transaction recovery . PARALLEL_TRANSACTION_RECOVERY dynamic initialization parallel transaction recovery . - PARALLEL_TRANSACTION_RECOVERY= HIGH/LOW/FALSE (LOW is default) - parameter LOW or HIGH SMON recovery large transaction parallel recovery candidate . parallel transaction recovery SMON coordinator parallel recovery processes slave . - parameter Oracle BETA release version(8.1.3, 8.1.4) . CF. 13 Fast-Start parallel rollback . - parallel transaction failed process recovery Oracle8 . 1. Single slave fail PMON rollback slave rollback . 2. Multiple slave fail PMON serially rollback . 3. Coordinator process fail PMON coordinator recover all slave processes parallel rollback . 4. Process recovery time the forward work 2 . jkspark@hanafos.com - 93 -
  • 94. Oracle8i New Features http://www.ggola.com/ Partition-Wise join in parallel Prior Oracle8i, parallel 2 tables join query step pieces scan and redistributed join column CPU or memory(or temporary tablespace) . Oracle8i join key partition table join (redistribution) skip performance . , temporary storage memory performance .( setting Oracle .) parallel execution . Full partition-wise join - Equip partitioned tables join join columns partitioned key table partition join . - tablespace equipartition local disk . Partial partition-wise join - join column table partition .( partition table or original table ) - join column partition key table redistribution . CF. Oracle supports partition-wise joins on range, hash or composite partitioned tables jkspark@hanafos.com - 94 -
  • 95. Oracle8i New Features http://www.ggola.com/ Added parallel information New parameter - PARALLEL_AUTOMATIC_TUNING=TRUE/FALSE parallel execution default degree Oracle automatically control ’TRUE’ setting . , Default degree Oracle . parameter TRUE 1. A load balancing algorithm will be used which will evenly distributed load across nodes in a multi-instance PQ environment. 2. Oracle allocates parallel execution buffers from the large pool. (FALSE allocates memory from the shared pool) - PARALLEL_ADAPTIVE_MULTI_USER=TRUE/FALSE parameter enables adaptive setting of the degree of parallelism. parallel_automatic_tuning ‘TRUE’ parameter ‘TRUE’ system load degree of parallelism . - PARALLEL_THREADS_PER_CPU=n parameter default degree of parallelism parallel adoptive algorithm . - Profile DEGREE_OF_PARALLELISM database resource limit . user maximum degree of parallelism .( ) Dynamic performance views - V$PX_PROCESS : running parallel execution session process information - V$PX_PROCESS_SYSSTAT : v$px_process parallel statistic - V$PX_SESSION : running parallel execution session information - V$PX_SESSTAT : v$px_session and v$sesstat table joined information for parallel execution jkspark@hanafos.com - 95 -
  • 96. Oracle8i New Features http://www.ggola.com/ 9. Universal Installer Migration and Upgrade Universal Installer Oracle8i New Features . Universal Installer - platform JAVA based installer GUI install . - Any customer can use the Software Packager to create installable third-party components for oracle. - Performing install from one location to several geographical regions : Web Install Feature Database Configuration Assistant - Database configuration assistant - Database creation(remote machine ) database creation scripts easy parameter setting - This is very useful for creating multiple database with the same configuration. - Run in silent mode 1. GUI OS command line batch script 2. allows easy creation of multiple identical database - Hardware detection and interview 1. File system, RAM 2. number of users, 3. database processing environment : OLTP, DSS.. Migration Oracle8i New Features Review . What is changed ? - migration upgrade 1. modify, add base tables and v$tables : data dictionary and structures jkspark@hanafos.com - 96 -
  • 97. Oracle8i New Features http://www.ggola.com/ 2. modify datafile header blocks 3. change rollback segment format 4. control file recreation Migration basic step - Migration type 1. export / import 2. copy command 3. migration utility 3.1 command line migration utility 3.2 GUI data migration assistant - Steps 1. prepare to migrate : migration type , system resource 2. secure the required resources : resource 3. build a test plan : (OUTLN user or role drop) migration test, minimal test, functional test, integration test, performance test, volume/load stress test 4. preserve the source database : database normal shutdown cold backup 5. migrate the source database : Oracle8i install parameter or migration ( migration type ) 6. postmigration task : shutdown normal oracle8i cold backup script (.sql file, recompile invalid objects ) startup CF. Migration utility database .( database rebuild) CF. $ORACLE_HOME/rdbms/admin/utlrp.sql upgrade invalid PL/SQL block modules recompile . Upgrade 8 to 8i 1. 8.0.4S --> upgrade 8.0.5 and upgrade 8.1 2. 8.0.3, 8.0.4, 8.0.5, 8.0.6 --> upgrade 8.1 directly jkspark@hanafos.com - 97 -
  • 98. Oracle8i New Features http://www.ggola.com/ 10. Tablespace Management Extended Rowid Oracle8 New Features review . files rowid ( rowid files ) 1022 tablespace 1022 partition object data object id Rowid Type - Restricted : BBBBBBBB.RRRR.FFFF (Block Row File) 16 6 bytes - Extended : OOOOOO.FFF.BBBBBB.SSS (data Object relative File Block Slot) 64 10 bytes DBMS_ROWID package check Functions : - ROWID_TO_EXTENDED : old rowid new rowid - ROWID_TO_RESTRICTED : new rowid old rowid - ROWID_VERIFY : old rowid ROWID_TO_EXTENDED convert - ROWID_TYPE : rowid old type new type - ROWID_TO_ABSOLUTE_FNO : relative file number - ROWID_OBJECT : object id return - Others : ROWID_RELATIVE_FNO, ROWID_BLOCK_NUMBER, ROWID_ROW_NUMBER Procedures : - ROWID_INFO : rowid - ROWID_CREATE : rowid test jkspark@hanafos.com - 98 -
  • 99. Oracle8i New Features http://www.ggola.com/ Locally-Managed tablespaces tablespace dictionary managed tablespace extent DD . extent allocation DD update system tablespace access rollback segment . Locally Managed (Oracle8i New Features) - tablespace extent local datafile bitmaps datafile . DD access (system tablespace access reduced) uniform size fragmentation . - Space management data dictionary datafile bitmaps . 1. extent allocation resources DD access bitmaps database-wide contention 2. SYSTEM tablespace system tablespace 3. rollback segment - SYSTEM tablespace tablespaces . Locally managed general tablespace SQL> create tablespace ts_local_nis_d datafile '/u01/local/data/nis_fin01.dbf' size 50M extent management local uniform size 2M ; Tablespace created. - AUTOALLOCATE keyword UNIFORM ( autoallocate default ) storage initial size (initial extent must be at least 64KB) other extents system automatically size system-managed space . CF. Locally default storage . , tablespace permanent/temporary option temporary option .( create temporary tablespace command ) CF. UNIFORM size default 1M . jkspark@hanafos.com - 99 -
  • 100. Oracle8i New Features http://www.ggola.com/ Locally managed temporary tablespace SQL> create temporary tablespace ts_temp tempfile ’ /u01/local/temp/nis_temp01.dbf' size 100M extent management local uniform size 1M ; Tablespace created. - Oracle recommend locally management tablespace temporary tablespace . - temporary tablespace temporary option locally managed temporary tablespace ‘create temporary tablespace’ command . Command “tempfile” option . CF. tablespace locally managed tablespace . CF. Oracle 8.1.5 Manual System tablespace locally managed tablespace dictionary managed tablespace . , rollback segment tablespace locally managed .( , RBS extent system tablespace ) CF. Oracle “Locally managed system tablespaces are simply not yet possible.” jkspark@hanafos.com - 100 -
  • 101. Oracle8i New Features http://www.ggola.com/ Data transportation Transportable tablespaces - OLTP staging area (or DW) DW Data marts data point-in time recovery, distributed relational data, archive historical data . - Export / Import tablespaces copy . Procedure 1. tablespace read-only 2. export metadata 3. copy data files 4. transfer export dump file 5. import metadata 6. tablespace read-write (if you want) Checking factors 1. Datafile O/S . 2. Oracle version 8.1 . 3. LOB table . 4. Block size and character set . 5. tablespace object tablespace object move or exchange partition command tablespace . (all partition tablespace ) 6. Table nested tables or varray bitmap index transport . Checking availability - Tablespace transportable package . - DBMS_TTS.TRANSPORT_SET_CHECK command . (example ) jkspark@hanafos.com - 101 -
  • 102. Oracle8i New Features http://www.ggola.com/ Example - tablespace transportation . O/S System_A $ sqlplus internal Connected. SQL> create tablespace ts_trans datafile '/u01/trans/ts_trans01.dbf' size 10M ; Tablespace created. SQL> conn scott/tiger Connected. SQL> create table emp_trans tablespace ts_trans 2 as select * from emp where rownum < 100 ; Table created. SQL> select table_name, tablespace_name from user_tables 2 where table_name = 'EMP_TRANS' ; TABLE_NAME TABLESPACE_NAME ------------------------- ------------------------------ EMP_TRANS TS_TRANS SQL> select count(*) from emp_trans ; COUNT(*) ---------- Package check 99 tablespace . SQL> connect internal Connected. SQL> exec dbms_tts.transport_set_check('TS_TRANS',TRUE) ; PL/SQL procedure successfully completed. SQL> select * from transport_set_violations ; no rows selected SQL> alter tablespace ts_trans read only ; Tablespace altered. SQL> exit - transport_set_check tablespace transport_set_violations view row session level .( session ) VIOLATIONS -------------------------------------------------------------------------------- Partitioned table SCOTT.EMP_OBJ_COLL_TP is partially contained in the transportable set: check table partitions by querying sys.dba_tab_partitions …….. jkspark@hanafos.com - 102 -
  • 103. Oracle8i New Features http://www.ggola.com/ - export system import $ exp file=/u01/trans/exp_tbs_trans.dmp > log=/u01/trans/exp_tbs_trans.log tablespaces=ts_trans > transport_tablespace=y Export: Release 8.1.6.2.0 - Production on Thu Aug 23 16:03:31 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Username: sys as sysdba Password: change_on_install Connected to: Oracle8i Enterprise Edition Release 8.1.6.2.0 - Production …….. . exporting cluster definitions . exporting table definitions . . exporting table EMP_TRANS ……. Export terminated successfully without warnings. O/S System_B $ ftp system_A Connected to system_A. …. ftp> bi 200 Type set to I. ftp> get exp_tbs_trans.dmp … 226 Transfer complete. ftp> get ts_trans01.dbf … 226 Transfer complete. ftp> quit Datafile export dump 221 Goodbye. file ftp import . $ imp file=exp_tbs_trans.dmp > log=/u01/trans/imp_tbs_trans.log transport_tablespace=y > datafiles=/u01/trans/ts_trans01.dbf Import: Release 8.1.6.2.0 - Production on Thu Aug 23 16:17:43 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Username: sys as sysdba Password: change_on_install Connected to: Oracle8i Enterprise Edition Release 8.1.6.2.0 – Production … . importing SYS's objects into SYS . importing SCOTT's objects into SCOTT . . importing table "EMP_TRANS" Import terminated successfully without warnings. jkspark@hanafos.com - 103 -
  • 104. Oracle8i New Features http://www.ggola.com/ - import . $ sqlplus internal SQL> select tablespace_name, file_name from dba_data_files 2 where tablespace_name = 'TS_TRANS' ; TABLESPACE FILE_NAME ---------- ------------------------------ TS_TRANS /u01/trans/ts_trans01.dbf Import System B SQL> conn scott/tiger tablespace ts_trans Connected. creation tablespace object SQL> select table_name, tablespace_name from user_tables data System A 2 where table_name = 'EMP_TRANS' ; System B TABLE_NAME TABLESPACE . --------------------------- ---------- EMP_TRANS TS_TRANS SQL> select count(*) from emp_trans ; COUNT(*) ---------- 99 SQL> connect internal Connected. SQL> alter tablespace ts_trans read write ; Tablespace altered. - System B emp_trans table write tablespace . CF. import fromuser, touser options schema that owns the object in transported tablespace another schema . Read-Only tablespace - read only tablespace active transaction . - , current transaction waiting read- only . CF. shutdown normal . jkspark@hanafos.com - 104 -
  • 105. Oracle8i New Features http://www.ggola.com/ 11. Database resource manager Resource management DBA resource management resource control resource . DBA resource plan plan consumer group, resource allocation method, resource plan directives resource . Oracle user resource Oracle8i New Features . EX. daytime resource plan Resource consumer group Allocation method parameters OLTP CPU=70% Degree of parallelism = 0 DW CPU=30% Degree of parallelism = 18 Resource management factors - resource consumer group : plan resource user group - resource plan : CPU time parallel query resources . resource plan resource plan . DBA DB shutdown plan switch . EX. daytime plan nighttime plan switch database restart . - resource plan directives : 1. assign consumer groups or subplans to resource plans 2. allocate resources among consumer groups or subplans Resource allocation method - CPU usage : 1. level 1 to level 8 2. percentages specifying how to partition CPU at each level - Degree of parallelism : maximum degree of parallelism jkspark@hanafos.com - 105 -
  • 106. Oracle8i New Features http://www.ggola.com/ Resource consumer groups - session group active . - Users consumer groups . - Default group login . - Session level user or DBA can switch consumer group Steps in Database Resource Management Steps for database resource management creation 1. create resource plan 2. create resource consumer groups 3. create resource plan directives 4. assign users to consumer groups 5. specify plan to be used by an instance Packages for DB resource manager - DBMS_RESOURCE_MANAGER : 1. define plans and classes, plan entries 2. define the default class for a user 3. alter the class for currently connected user - DBMS_RESOURCE_MANAGER_PRIVS 1. grant and revoke classes to users 2. switch the class for a session Create resource plan - DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA ; pending area : 1. store new resource manager plans, consumer groups and resource plan directives 2. changes before they are committed. - DBMS_RESOURCE_MANAGER.CREATE_PLAN ( ’daytime’, ‘from 15 to 19’) ; ==> ‘plan name’, ‘comment for this plan’ CF. database creation default SYSTEM_PLAN plan . jkspark@hanafos.com - 106 -
  • 107. Oracle8i New Features http://www.ggola.com/ - Privileges needed to manage resources 1. administer_resource_manager : package for dbms_resource_manager 2. grant_system_privilege and revoke_system_privilege . EX. DBMS_RESOURCE_MANAGER_PRIVS. GRANT_SYSTEM_PRIVILEGE(‘scott’, admin_option => TRUE) ; ==> ‘username’, with ADMIN_OPTION Creating resource consumer groups - DBMS_RESOURCE_MANAGER. CREATE_CONSUMER_GROUP (‘oltp’, ‘online job working’) ; ==> ‘group name’, ‘comment for group’ - Database group 1. SYS_GROUP : SYSTEM_PLAN high priority for ‘SYS’ and ‘SYSTEM’ users 2. LOW_GROUP : low priority group in SYSTEM_PLAN 3. DEFAULT_CONSUMER_GROUP : assigned to all users(PUBLIC) by default 4. OTHER_GROUPS : a part of every plan group plan other_groups directives . plan each top-plan other_groups directive . ( example .) Create resource plan directives - DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (‘daytime’, ‘olpt’, ‘rule for oltp job’, cpu_p1 => 70, parallel_degree_limit_p1 => 18) ; ==> ‘plan name’, ‘group name’, ‘comment for directive’, ‘CPU level 1’, ‘parallel degree’ - cpu_p2 multi level CPU ? - , level1 OLTP DW 70:30 level2 DSS Web 40:60 . Level2 CPU . - system load cpu 80% . level2 20% level2 cpu . , CPU level % . Priority level % . jkspark@hanafos.com - 107 -
  • 108. Oracle8i New Features http://www.ggola.com/ Confirming resource management - resource factors pending area validate and confirm resource factors . - : DBMS_RESOURCE_MANAGER. VALIDATE_PENDING_AREA ; 1. all consumer groups referred to in the plans created or changed exist 2. plans have directives that reference other plans or consumer groups 3. plans do not reference themselves either directly or indirectly 4. the sum of CPU percentages defined for a specific level within a plan do not exceed 100 5. a plan that is currently used is not deleted - implicitly validate and commit : DBMS_RESOURCE_MANAGER. SUBMIT_PENDING_AREA ; Assign users to consumer groups - assign user or role to consumer group ( package user or role consumer group ) DBMS_RESOURCE_MANAGER_PRIVS. GRANT_SWITCH_CONSUMER_GROUP (‘scott’, ‘oltp’, FALSE) ==> ‘user or role’, ‘group name’, with GRANT option - scott user consumer group . user group session active group . , application DBA Initial consumer group for users ( group assign user default group) session level group . - scott user oltp group . DBMS_RESOURCE_MANAGER. SET_INITIAL_CONSUMER_GROUP(‘scott’,’oltp’) ; - session level consumer group . jkspark@hanafos.com - 108 -
  • 109. Oracle8i New Features http://www.ggola.com/ Changing consumer group within a session - group session user . - user or application level (PL/SQL block ) DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP (‘oltp’, old_group) ; ==> ‘new group’, old group (output variable) - DBA DBMS_RESOURCE_MANAGER. SWITCH_CONSUMER_GROUP_FOR_SESS (453, 23412, ‘oltp’) ; ==> sid, serial#, ‘group name’ - DBA all sessions for a user DBMS_RESOURCE_MANAGER. SWITCH_CONSUMER_GROUP_FOR_USER (‘scott’, ‘oltp’) ; ==> ‘username’, ‘group name’ How to set resource plan for an instance - Specify plan for initial parameter : resource_manager_plan=daytime - Change plan without shutdown and restart : alter system set resource_manager_plan=nighttime - Initial parameter setting plan database open error return . resource plan parameter shutdown and restart . parameter default value null . Data dictionary >> RESOURCE MANAGER INFORMATION - DBA_RSRC_PLANS : resource plans and status - DBA_RSRC_PLAN_DIRECTIVES : resource plan directives and status - DBA_RSRC_CONSUMER_GROUPS : consumer groups and status - DBA_RSRC_CONSUMER_GROUP_PRIVS : users granted consumer groups - DBA_USERS : new column ‘initial_rsrc_consumer_group’ jkspark@hanafos.com - 109 -
  • 110. Oracle8i New Features http://www.ggola.com/ >> CURRENT SETTINGS - V$SESSION : new column ‘resource_consumer_group’ - V$RSRC_PLAN : showing the active resource plan - V$RSRC_CONSUMER_GROUP : showing the number of active sessions by consumer group and wait/yield statistics Example - plan, group, directive resource management . $ sqlplus internal SQL> select plan, group_or_subplan, type from dba_rsrc_plan_directives ; PLAN GROUP_OR_SUBPLAN TYPE --------------- ------------------------------ -------------- SYSTEM_PLAN SYS_GROUP CONSUMER_GROUP SYSTEM_PLAN OTHER_GROUPS CONSUMER_GROUP SYSTEM_PLAN LOW_GROUP CONSUMER_GROUP SQL> select * from dba_rsrc_consumer_group_privs ; GRANTEE GRANTED_GROUP GRA INI ---------- ------------------------------ --- --- PUBLIC DEFAULT_CONSUMER_GROUP YES NO PUBLIC LOW_GROUP NO NO SYSTEM SYS_GROUP NO YES SQL> exec dbms_resource_manager.create_pending_area ; PL/SQL procedure successfully completed. 6 SQL> exec dbms_resource_manager.create_plan('daytime', 'oltp from 15 to 19') ; plan set . PL/SQL procedure successfully completed. Pending area --> Plan --> Group --> Directive --> SQL> exec dbms_resource_manager.create_consumer_group('oltp', 'online job working') ; Check(validate) --> PL/SQL procedure successfully completed. Commit(submit) ; plan SQL> exec dbms_resource_manager.create_plan_directive('daytime', 'oltp', 'rule other_groups for oltp job', cpu_p1 => 70, parallel_degree_limit_p1 => 18 ) ; . PL/SQL procedure successfully completed. SQL> exec dbms_resource_manager.validate_pending_area ; BEGIN dbms_resource_manager.validate_pending_area ; END; * ERROR at line 1: ORA-29382: validation of pending area failed ORA-29377: consumer group OTHER_GROUPS is not part of top-plan DAYTIME ORA-06512: at "SYS.DBMS_RMIN", line 55 ORA-06512: at "SYS.DBMS_RESOURCE_MANAGER", line 254 ORA-06512: at line 1 jkspark@hanafos.com - 110 -
  • 111. Oracle8i New Features http://www.ggola.com/ SQL> exec dbms_resource_manager.create_plan_directive('daytime', 'other_groups', 'other groups for daytime users', cpu_p1 => 0, parallel_degree_limit_p1 => 0 ) ; PL/SQL procedure successfully completed. SQL> exec dbms_resource_manager.validate_pending_area ; PL/SQL procedure successfully completed. SQL> exec dbms_resource_manager.submit_pending_area ; other_groups PL/SQL procedure successfully completed. commit . SQL> select plan, group_or_subplan, type from dba_rsrc_plan_directives ; OLTP group PLAN GROUP_OR_SUBPLAN TYPE other_groups . --------------- ------------------------------ -------------- DAYTIME OTHER_GROUPS CONSUMER_GROUP SYSTEM_PLAN SYS_GROUP CONSUMER_GROUP SYSTEM_PLAN OTHER_GROUPS CONSUMER_GROUP SYSTEM_PLAN LOW_GROUP CONSUMER_GROUP DAYTIME OLTP CONSUMER_GROUP Grant scott user SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group('scott', consumer group 'oltp', FALSE) ; .( PL/SQL procedure successfully completed. .) SQL> exec dbms_resource_manager.set_initial_consumer_group('scott', 'oltp') ; PL/SQL procedure successfully completed. SQL> select username, initial_rsrc_consumer_group from dba_users 2 where username = 'SCOTT' ; USERNAME INITIAL_RSRC_CONSUMER_GROUP ----------------------------------------- SCOTT OLTP Scott user session B . session B $ sqlplus scott/tiger Internal Connected. session A . session A SQL> select sid, serial#, username, resource_consumer_group 2 from v$session where username= 'SCOTT' ; SID SERIAL# USERNAME RESOURCE_C ---------- ---------- --------- ---------- 11 18058 SCOTT OLTP session B SQL> set serveroutput on SQL> declare 2 v_old_group varchar2(30) ; 3 begin 4 dbms_session.switch_current_consumer_group('default_consumer_group', v_old_group, false) ; 5 dbms_output.put_line(v_old_group) ; Session group 6* end; . Resource 7/ manager off declare . * ERROR at line 1: ORA-29373: resource manager is not on ORA-06512: at "SYS.DBMS_SESSION", line 74 ORA-06512: at line 4 jkspark@hanafos.com - 111 -
  • 112. Oracle8i New Features http://www.ggola.com/ - Session level group dbms_session package error . - initial parameter resource_manager_plan resource manager off . alter system command plan parameter resource manager on . SQL> select * from v$rsrc_plan ; session B no rows selected session A SQL> SQL> alter system set resource_manager_plan = 'daytime' ; System altered. session B SQL> select * from v$rsrc_plan ; Resource manager NAME turned on -------------------------------- daytime SQL> set serveroutput on SQL> declare New Group Name 2 v_old_group varchar2(30) ; 3 begin 4 dbms_session.switch_current_consumer_group('default_consumer_group', Current session v_old_group, false) ; consumer group 5 dbms_output.put_line(v_old_group) ; . 6* end; 7/ session group . OLTP PL/SQL procedure successfully completed. SQL> select sid, serial#, username, resource_consumer_group session A 2 from v$session where username= 'SCOTT' ; SID SERIAL# USERNAME RESOURCE_C ---------- ---------- --------- ---------- group 11 18058 SCOTT DEFAULT_CONSUMER_GROUP - . delete_plan procedure 1. alter system set resource_manager_plan = ‘’ ; subplan or 2. dbms_resource_manager_privs.revoke_switch_consumer_group consumer groups ('scott', 'oltp') ; 3. dbms_resource_manager.create_pending_area ; . 4. dbms_resource_manager.delete_plan_cascade('daytime') ; delete_plan_cascade 5. dbms_resource_manager.submit_pending_area ; drop . (plan, directives, CF. plan drop package subplan, consumer group) update_plan, update_consumer_group, update_plan_directive, delete_plan plan delete_consumer_group, delete_plan_directive . directives delete . jkspark@hanafos.com - 112 -
  • 113. Oracle8i New Features http://www.ggola.com/ 12. Manageability Features Database limits Oracle8 and Oracle8i database limits - Oracle8 New Features review Columns per table 1,000 Columns per index 32 CAHR, NCHAR 2,000 bytes VARCHAR2, NVARCHAR2 4,000 bytes CLOB, BLOB, BFILE 4GB Tablespaces per database 65,533 Datafiles per tablespace 1,022 Datafiles per database 65,533 - only one LONG column per table - index define column total size database block 40% bitmapped index index 30 . - Tablespace limit 65,533 tablespace 1 datafile . - Tablespace datafile O/S 1,022 . - Datafile initial parameter DB_FILES . jkspark@hanafos.com - 113 -
  • 114. Oracle8i New Features http://www.ggola.com/ Move Table Relocating and Reorganizing a Table SQL> alter table emp move tablespace ts_new_emp ; - builds new segments and drops old segments - used to move table to a different tablespace or reorganize extents - limits 1. non-partitioned table only (partitioned table error) 2. move only select available and no DML 3. index, constraints and grant data index status UNUSABLE . 4. new segment export and import table 2 space . Remove Column Marking a column as unused SQL> alter table table_name set unused column column_name ; - table column command users column data disk space . - unused column physically remove . - user unused column column . - Unused column table export drop and import table unused column . SQL> select * from dba_unused_col_tabs ; unused column information . jkspark@hanafos.com - 114 -
  • 115. Oracle8i New Features http://www.ggola.com/ Removing a column from table SQL> alter table table_name drop column column_name [cascade constraints] ; - command unused mark column drop .( space release) , large table command . - column ‘UNUSED’ mark column command drop . - cascade constraints : drop column all constraints drop . SQL> alter table table_name drop unused columns ; - table removes all currently marked as unused CF. dropped column object , views, triggers and stored procedure units status invalidate . CF. dropped column index always drop automatically Minimizing rollback segment usage SQL> alter table table_name drop column columns_name [ checkpoint 1000 ] ; - DDL rollback segment checkpoint option row commit . - 1000 row checkpoint . - Checkpoint table drop rollback space . - instance failure table INVALID state . - command . SQL> alter table table_name drop columns continue ; jkspark@hanafos.com - 115 -
  • 116. Oracle8i New Features http://www.ggola.com/ Example - emp table test emp_test . SQL> desc emp_test Name Null? Type ------------ -------- ----------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> alter table emp_test drop column deptno 2 cascade constraints checkpoint 1000 ; Table altered. constraints drop SQL> desc emp_test 1000 row Name Null? Type commit column ------------ -------- ----------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) SAL NUMBER(7,2) COMM NUMBER(7,2) SQL> alter table emp_test set unused column comm ; Table altered. SQL> select * from user_unused_col_tabs ; TABLE_NAME COUNT unused ----------------------- EMP_TEST 1 unused columns SQL> desc emp_test Name Null? Type ------------ -------- ----------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) SAL NUMBER(7,2) SQL> alter table emp_test drop unused columns ; Table altered. SQL> select * from user_unused_col_tabs ; no rows selected jkspark@hanafos.com - 116 -
  • 117. Oracle8i New Features http://www.ggola.com/ Temporary tables Application global temporary table - temporary table data (DML ) session visible truncate command . , table transaction or session termination data drop . CF. , session instance crash data drop . (temporary ) - transaction or session data . (index index Index data ) - Table definition definition all session . (definition export/import ) - Session sort space data user’s temporary tablespace . - Permanent tables view temporary table triggers . - Recovery data redo entries DML rollback segment . Creating and Monitoring with sample SQL> create global temporary table table_name (empno number, ename varchar2(10), sal number) on commit delete rows ; - on commit delete rows : transaction transaction session temporary table data . - on commit preserve rows : session (transaction session ) SQL> select table_name, tablespace_name, temporary, duration from dba_tables where table_name = ‘TABLE_NAME’ ; - dba_tables table temporary transaction session . jkspark@hanafos.com - 117 -
  • 118. Oracle8i New Features http://www.ggola.com/ Example - scott user SQL> create global temporary table emp_temp_sess 2 (empno number, ename varchar2(10), sal number) 3 on commit preserve rows ; Table created. SQL> create global temporary table emp_temp_trans 2 (empno number, ename varchar2(10), sal number) 3 on commit delete rows ; type global Table created. temporary table system user SQL> connect system/manager Connected. type temporary table SQL> select table_name, tablespace_name , temporary, duration . 2 from dba_tables 3 where table_name like '%TEMP%' and owner = 'SCOTT' ; TABLE_NAME TABLESPACE T DURATION -------------------- ---------- - --------------- EMP_TEMP_SESS Y SYS$SESSION EMP_TEMP_TRANS Y SYS$TRANSACTION SQL> connect scott/tiger Connected. SQL> insert into emp_temp_sess values ( 1000, 'KS JANG', 100000) ; 1 row created. Scott user table SQL> insert into emp_temp_trans values ( 1000, 'KS JANG', 100000) ; data insert data 1 row created. . SQL> select * from emp_temp_sess ; EMPNO ENAME SAL ---------- ---------- ---------- 1000 KS JANG 100000 SQL> select * from emp_temp_trans ; EMPNO ENAME SAL ---------- ---------- ---------- 1000 KS JANG 100000 SQL> commit ; Commit complete. Commit select emp_temp_trans table SQL> select * from emp_temp_sess ; EMPNO ENAME SAL transaction data ---------- ---------- ---------- 1000 KS JANG 100000 emp_temp_sess session data SQL> select * from emp_temp_trans ; . no rows selected SQL> connect scott/tiger Connected. SQL> select * from emp_temp_sess ; no rows selected SQL> select * from emp_temp_trans ; no rows selected jkspark@hanafos.com - 118 -
  • 119. Oracle8i New Features http://www.ggola.com/ SQL*Loader Enhancements - TERMINATED BY clause 1 character strings . (multiple delimited field available) - New variable length field : VARCHARC, VARRAWC EX. VARCHARC(3,200) : ‘ 3 value . 4 character character read 200 ’ . CF. VARRAWC data RAW type . - record size 64K . However, a logical record must fit entirely in client memory. EX. enhancements . LOAD DATA INFILE ‘emp_data.dat’ Record RECSEPARATOR ‘;’ Field FIELDS TERMINATED BY ‘::’ (emp_name, location NULLIF Multiple (emp_name=BLANKS AND location=BLANKS) New field type comment VARCHARC(3) ) Kate::Seoul::015Shi is actress;Bill::Pusan::024He is the best actor jkspark@hanafos.com - 119 -
  • 120. Oracle8i New Features http://www.ggola.com/ Monitoring Long-Running Operations V$SESSION_LONGOPS - dynamic performance view monitoring - monitoring operation . 1. arching 2. RMAN backup and restore 3. parallel query 4. recovery 5. full table scan 6. sort operation 7. analyze using DBMS_STAT 8. hash cluster creation EX. monitoring . SQL> connect system/manager Connected. SQL> select sid, serial#, opname, 2 to_char(start_time, 'HH24:MI:SS') startt, 3 (sofar/totalwork)*100 "complete(%)" 4 from v$session_longops 5 where totalwork > 0 ; SID SERIAL# OPNAME STARTT complete(%) 13 238 TABLE SCAN 11:00:09 49.8434 45 342 ANALYZE 11:03:29 21.3433 - DBMS_APPLICATION_INFO package SET_SESSION_LONGOPS procedure application view populate . - PL/SQL Block dbms_application_info.set_session_longops(v_rindex, v_slno) ; session v$session_longops row . , v_rindex, v_slno IN/OUT variable declare PL/SQL Block . CF. package application operating information v$session_longops . , row creation . session session termination delete . CF. package application monitoring . jkspark@hanafos.com - 120 -
  • 121. Oracle8i New Features http://www.ggola.com/ 13. Availability and Recoverability Archive Enhancements Multiple archive logs - Oracle7 Oracle archive log 1 destination Oracle8 log_archive_duplex_dest . , parameter remote instance destination . - Oracle8i Oracle8 archive dest parameter log_archive_dest_n (n 1~5 ) 5 archive dest remote instance . remote backup system standby database . , remote instance remote instance 1 log_archive_dest_n . - log_archive_dest log_archive_dest_n . log_archive_dest_n Oracle Enterprise Edition install Oracle8.1.5 Reference Manual log_archive_duplex_dest . CF. ( ) Oracle Version 8.1.6.2 “Enterprise Edition” test Enterprise Edition log_archive_duplex_dest . - 1. 2 archive dest , 2. standby database 3. remote archive destination log_archive_dest_n . CF. standby database 2 local archive destination 1 remote archive destination . - Oracle8i remote archive destination log_archive_dest_n session level dynamic parameter jkspark@hanafos.com - 121 -
  • 122. Oracle8i New Features http://www.ggola.com/ Multiple archive log processes - Oracle8i multiple archive process . log_archive_start=true setting log_archiv_max_processes archive process start . CF. instance start alter system command . (10 ) alter system set log_archive_max_processes=2 ; - archiving throughput (multiple archive processes archive ) Oracle version manual archives performance . Multiple archive Options - , standby database 1 local archive dest 1 backup local archive dest . log_archive_dest_1 = “location=/a01/oracle1/arch/arch mandatory reopen” log_archive_dest_2 = “location=/a02/oracle2/arch/arch optional” log_archive_dest_3 = “service=standby_db2 mandatory reopen=500” - dest #1 original archive dest dest #2 archive backup dest dest #3 standby database . - dest #1 dest #3 mandatory archive . reopen archive default 300 dest #3 500 . second . - dest #2 optional redo log reused . - dest #3 tnsnames.ora service name standby database archive . standby database ‘RFS’ process primary database . CF. as mandatory / optional optional default value . jkspark@hanafos.com - 122 -
  • 123. Oracle8i New Features http://www.ggola.com/ When is the online redo log reused? - online redo log reused . 1. archive all mandatory locations 2. log_archive_min_succeed_dest local location archived (all local mandatory archive ) - standby database archive destination mandatory archive local archived log_archive_min_succeed_dest archive online redo log reuse . - log_archive_min_succeed_dest total archive destination local mandatory archive destination . , . - 3 local archive destination mandatory 2 standby database archive mandatory 1 optional 2 online redo log reuse . - 3 mandatory archive 2 local archive destination 1 optional . CF. , log_archive_dest log_archive_duplex_dest parameter 1 2 . - log_archive_min_succeed_dest parameter session or system level . alter session set log_archive_min_succeed_dest=2 ; alter system set log_archive_min_succeed_dest=3 ; CF. log_archive_dest log_archive_duplex_dest alter session command . - parameter log_archive_dest_state_n _n archive destination disable . default ‘ENABLE’ session or system level . ‘DEFER’ destination archive ‘ENABLE’ archive . jkspark@hanafos.com - 123 -
  • 124. Oracle8i New Features http://www.ggola.com/ - , ‘DEFER’ ‘ENABLE’ archive destination manual copy . alter system set log_archive_dest_state_3 = defer ; alter system set log_archive_dest_state_1 = enable ; (log_archive_dest_n destination log_archive_dest_state_n matching . CF. Anyway, log_archive_min_succeed_dest ‘ENABLE’ log_archive_dest_state_n . Related data dictionary - V$ARCHIVE_DEST : archive destination BINDING, STATUS, TARGET, FAIL_SEQUENCE…… - V$ARCHIVE_PROCESSES : archive process PROCESS, STATUS, LOG_SEQUENCE, STATE jkspark@hanafos.com - 124 -
  • 125. Oracle8i New Features http://www.ggola.com/ Standby database Automatic Archival - primary site archive log automatically shipped to standby site archive manual copy . - Primary site archive ‘RFS’ (Remote File Server) process . process standby database instance start remote node file save control file update . - If multiple ARCH processes are used at the primary site, each ARCH process spawns and communicates with its own RFS process. Sustained Recovery - Optionally, RFS primary site log standby database . (Sustained Recovery) primary failure standby open . - Primary archive destination standby_archive_dest=/primary_site/a01/arch….. - Sustained recovery command 1. mount . 2. alter database recover managed standby database ; [timeout 60] ==> primary log . (minutes ) Read only database - select database open . standby database production . - Read only database 1. query . 2. order by sort , locally managed tablespace sort . 3. datafile online or offline . - Standby read only open sustained recovery 1. alter database recover managed standby database cancel ; 2. alter database open read only ; 3. alter database recover managed standby database ; (active user sessions ) jkspark@hanafos.com - 125 -
  • 126. Oracle8i New Features http://www.ggola.com/ Redo log Enhancements LogMiner : PL/SQL interface redo log files read, analyzed, interpreted using standard SQL . Analyzing redo log files - database changes tracking without auditing overhead time or SCN base , point-in-time recovery . - Performing granular logical recovery application transaction undoing specific changes . - Tuning and capacity planning data growth patterns usage patterns . LogMiner (install ‘SYS’ user ) - Oracle8 redo log . 1. same platform 2. same character set - Log file dictionary file . - dbms_logmnr_d.build(‘file_name’,’file_path’) ; CF. Oracle8 log analyzing , Oracle8i $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql Oracle8 copy ‘SYS’ user . CF. Oracle 8.1.6.2 dbmslmd.sql . (dbmslogmnrd.sql ) - file_path initial parameter UTL_FILE_DIR . - procedure data dictionary information file object . , object . - procedure log table index, data scripts . file target database jkspark@hanafos.com - 126 -
  • 127. Oracle8i New Features http://www.ggola.com/ database log . - dbms_lomnr_d.build log object name data hexa value . - Log file log . - dbms_logmnr.add_logfile(‘/a01/oracle/arch/arch_log1’, dbms_logmnr.NEW) ; LOG - dbms_logmnr.add_logfile(‘/a01/oracle/arch/arch_log2’, dbms_logmnr.ADDFILE) ; LOG LOG - dbms_logmnr.add_logfile(‘/a01/oracle/arch/arch_log2’, dbms_logmnr.REMOVEFILE) ; LOG LOG CF. test log file . - log file log initiate . - Log SCN Number . (dbms_logmnr_d.build file dictfilename path ) - dbms_logmnr.start_logmnr( dictfilename=>’/app/oracle/logmnr/ logmnr.ora’, - start_scn => 350128, - end_scn => 352286) ; dbms_logmnr.start_logmnr( dictfilename => ‘/app/oracle/logmnr/logmnr.ora’, - starttime => to_date(‘31/05/2001:11:35’, ‘DD/MM/YYYY:HH24:MI’), - endtime => to_date(‘31/05/2001:14:18’, ‘DD/MM/YYYY:HH24:MI’) ) ; CF. line ‘-‘ . CF. SCN or time range addfile log file procedure error .” time or SCN range not fully contained in the listed logfiles” . CF. , dictfilename log file jkspark@hanafos.com - 127 -
  • 128. Oracle8i New Features http://www.ggola.com/ . starttime endtime default value 1988 1 1 2988 1 1 . - LogMiner start V$LOGMNR_CONTENTS View . - ‘AKCDFILE’ Table insert, delete 2 commit 2 transaction . SQL> select scn, timestamp, username, sql_redo, sql_undo from v$logmnr_contents where seg_name = 'AKCDFILE' ; SCN TIMESTAMP USERNAME SQL_REDO 350128 20010531 11:35:21 AKMANAGER insert into AKMANAGER.AKCDFILE (FILE_TP,FILE_RUN) values ('AVI','audio file'); SQL_UNDO delete from AKMANAGER.AKCDFILE where FILE_TP = 'AVI' and FILE_RUN = 'audio file' and ROWID = 'AAAA2PAAHAAAACFAAE'; 350138 20010531 11:36:14 AKMANAGER delete from AKMANAGER.AKCDFILE where FILE_TP = 'AVI' and FILE_RUN = 'audio file' and ROWID = 'AAAA2PAAHAAAACFAAE'; SQL_UNDO insert into AKMANAGER.AKCDFILE (FILE_TP,FILE_RUN) values ('AVI','audio file'); CF. SQL REDO user SQL UNDO . , SQL_REDO SQL_UNDO recovery . - log end_logmnr resource release . - dbms_logmnr.end_logmnr ; - log . , log session . - dbms_logmnr.procedure session PGA dbms_logmnr.end_logmnr PGA . - Other information : 1. V$LOGMNR_DICTIONARY - tiemstamp, filename 2. V$LOGMNR_LOGS - log id, log filename, low-high scn, log-high time 3. V$LOGMNR_PARAMETERS : arguments - start-end date, start-end scn, info, status jkspark@hanafos.com - 128 -
  • 129. Oracle8i New Features http://www.ggola.com/ Limitation - PGA session . - 1 row per record (1 row sel_undo row sql undo rowid ) , row return . - DDL oracle , data dictionary DML . - Chained rows DML reconstruct . - Data dictionary file clustered tables changes hexa values . , dictionary file hexa values . CF. DDL sample ‘xx’ table create and drop log . - drop table xx …. sql_redo : delete from SYS.OBJ$ where OBJ# = 3501 and DATAOBJ# = 3501 and OWNER# = 0 and NAME = 'XX' and NAMESPACE = 1 and SUBNAME IS NULL and TYPE# = 2 and CTIME = TO_DATE('31-MAY- 2001 15:36:10', 'DD-MON-YYYY HH24:MI:SS') and MTIME = TO_DATE('31-MAY………………. sql_undo : insert into SYS.OBJ$ (OBJ#,DATAOBJ#,OWNER#,NAME,NAMESPACE,SUBNAME,TYPE#,CTIME,MTIME,STIME,STATUS, REMOTEOWNER,LINKNAME,FLAGS,OID$,SPARE1) values (3501,3501,0,'XX',1,NULL,2, TO_DATE('31-MAY-2001 15:36:10', 'DD-MON-YYYY HH24:MI:SS'),TO_DATE('31- …………….. jkspark@hanafos.com - 129 -
  • 130. Oracle8i New Features http://www.ggola.com/ Fast_Start Recovery Instance Recovery - Prior to oracle8i instance recovery time . failure transaction load . - fast_start_io_target parameter : instance recovery (read and write) maximum number of datafile blocks .( parameter target redo blocks , redo generation ) system level dynamic parameter instance running alter system command . - Recovery time datafile I/O instance average I/O time . Fast-Start Checkpointing - crash or instance recover recovery position. buffer cache earliest buffer to be dirtied gets written first (oldest dirty block buffer) roll forward DB blocks . , feature media recovery . - If fast_start_io_target = 10000 10000 blocks checkpoint position . - parameter recovery performance checkpoint transaction overhead . Factors affecting checkpointing - A : fast_start_io_target parameter value - B : 90% of size of smallest redo log - C : end of the log_checkpoint_timeout seconds ago - D : log_checkpoint_interval blocks from the end DBWn 4 redo log point satisfy all the criteria defined. Redo Log blocks end of the redo D B C A CF. redo ‘A’ point . jkspark@hanafos.com - 130 -
  • 131. Oracle8i New Features http://www.ggola.com/ Factors influencing time to recover - estimated recovery time . recovery time . - Checkpoint target changed only at specific time intervals (maybe time recovery?) - Additional recovery activities such as reading logs and lock remastering . (typically recovery activities 5% ) - Recovery time may be faster if parallel recovery is used Define and monitor bounded recover time - Users V$FILESTAT AVGIOTIM column FAST_START_IO_TARGET . ( column TIMED_STATISTICS initial parameter TRUE 1/100 file I/O ) - V$INSTANCE_RECOVERY impact of parameters check . 1. RECOVERY_ESTIMATED_IOS : fast-start checkpoint . 2. ACTUAL_READ_BLKS : recovery current actual redo blocks 3. TARGET_READ_BLKS : 4 minimum value recovery current target redo blocks . the number of redo blocks. 4. LOG_FILE_SIZE_REDO_BLKS : checkpoint complete log switch 5. LOG_CHKPT_TIMEOUT_REDO_BLKS : log_checkpoint_timeout parameter 6. LOG_CHKPT_INTERVAL_REDO_BLKS : log_checkpoint_interval parameter 7. FAST_START_IO_TARGET_REDO_BLKS : fast_start_io_target parameter CF. DB_BLOCK_MAX_DIRTY_TARGET FAST_START_IO_TARGET 0 DBMDT trigger checkpoint . FAST_START_IO_TARGET parameter DBMDT override . CF. FSIT recovery blocks DBWn dirty buffers write . jkspark@hanafos.com - 131 -
  • 132. Oracle8i New Features http://www.ggola.com/ Fast-Start parallel rollback Rolling back - Oracle fast start Oracle7 warm start , deferred rollback . - Rolling back 1. SMON periodically scans all rollback segments and rolls back aborted transactions as needed 2. user process dead transaction held row lock recovers transaction and continues processing. - Oracle8i instance recovery SMON query slave query slave process 1 rollback parallel rollback . - Parallel transaction system crash recovery . 10 10 parallel instance crash rollback 100 . - SMON parallel query slaves parallel rollback operation . - , SMON dead transaction large number of rollback blocks generate (rollback blocks 100 ) . Controlling fast-start parallel rollback - Oracle 8.1.4 Beta Release PARALLEL_TRANSACTION_RECOVERY parameter parameter . (8 parallel processing parallel transaction rollback ) - FAST_START_PARALLEL_ROLLBACK dynamic parameter(initial parameter or alter system) parallel rollback . - maximum parallel recovery servers processes . 1. FALSE : . 2. LOW : 2 * CPU_COUNT 3. HIGH : 4 * CPU_COUNT jkspark@hanafos.com - 132 -
  • 133. Oracle8i New Features http://www.ggola.com/ Monitoring parallel rollback - V$FAST_START_SERVERS : fast start parallel rollback query slaves information - V$FAST_START_TRANSACTIONS : fast start rollback transactions status information (Transaction ID, Undo blocks done, Undo blocks total, CPU time in seconds) Fast-Start On-demand rollback - dead transaction lock held SMON parallel rollback transaction rollback data block access users waiting . - On-demand block recovery user access data block initiate rollback (immediately recover data blocks accessed by user transactions) the remainder of the blocks background recover . CF. , Fast-Start Rollback Enable . jkspark@hanafos.com - 133 -
  • 134. Oracle8i New Features http://www.ggola.com/ Block detection and Repair Oracle Support . Some facilities for detecting and recovering from block corruptions - DB_VERIFY utility : offline file check both online and backup datafiles online performance . (from Oracle7) - DB_BLOCK_CHECKING : initial parameter setting blocks check . (new from Oracle8i) - ANALYZE command : SQL command analyze table validate structure syntax invalid rows in partitioned tables check . (changed from Oracle8i) - DBMS_REPAIR : new package PL/SQL interface block corruptions detect and repair . package install . (by ‘SYS’) $ORACLE_HOME/rdbms/admin/dbmsrpr.sql $ORACLE_HOME/rdbms/admin/prvtrpr.plb (new from oracle8i) DBMS_REPAIR 1. connect as user ‘SYS’ 2. block corruption check result table DBMS_REPAIR.ADMIN_TABLE( ‘REPAIR_TABLE’, DBMS_REPAIR.REPAIR_TABLE, DBMS_REPAIR.CREATE_ACTION, ’TS_REPAIR_DAT’); >> check table name >> table data repair_table, index data orphan_table >> action : table . (purge_action : delete data from objects, drop_action : drop the table) >> table tablespace 3. check corruptions ( 3 parameters ) DBMS_REPAIR.CHECK_OBJECT (‘SCOTT’, ’EMP’, CORRUPT_COUNT=>:ccnt) ; >> schema name >> object name >> corrupted blocks return jkspark@hanafos.com - 134 -
  • 135. Oracle8i New Features http://www.ggola.com/ Others - initial parameter DB_BLOCK_CHECKING=TRUE block corruption ORA-1578 error trace files dump . - Performance reading check . - Analyze table valid structure command partitioned tables invalid rows check Making Objects Usable - DBMS_REPAIR.FIX_CORRUPT_BLOCKS(’SCOTT’, ‘EMP’, FIX_COUNT=>:fcnt) software corruption block mark ( REPAIR_TABLE ) - DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(’SCOTT’, ‘EMP) ; corruption marked blocks data read . (DBA_TABLES SKIP_CORRUPT ) - Skipping blocks ? 1. inaccessible 2. marked blocks point indexes corrupt 3. referential integrity constraints may be violated disable and re-enable constraints to identify violations 4. freelist corrupt dbms_repair.rebuild_freelists freelist initialize . Checking index entries pointing to rows in corrupt data blocks 1. check table DBMS_REPAIR.ADMIN_TABLES( ’ORPHAN_TAB’, DBMS_REPAIR.ORPHAN, DBMS_REPAIR.CREATE_ACTION’, ‘TS_REPAIR_IND’) ; >> corrupt data table >> index data check >> table >> table tablespace 2. check index for orphan keys DBMS_REPAIR.DUMP_ORPHAN_KEYS(‘SCOTT’, ‘EMP’, ORPHAN_TABLE_NAME=>’ORPHAN_TAB’, KEY_COUNT=> :kcnt) ; >> schema name >> object name >> table name >> number of keys identified 3. table corrupt index rebuild select index_name from orphan_tab where table_name = ‘EMP’ ; jkspark@hanafos.com - 135 -
  • 136. Oracle8i New Features http://www.ggola.com/ Limitations of DBMS_REPAIR - out-of-line columns ignored - IOT and LOB indexes - Bitmap and function-based indexes - Key values 3,950 bytes jkspark@hanafos.com - 136 -
  • 137. Oracle8i New Features http://www.ggola.com/ 14. Features of Net8 Oracle8 New Features . Net8 and the listener Net8 and the listener : new parameters - Oracle8i default listener listener.ora file . listener start instance start PMON listener service handler . , instance listener start ( , listener.ora file instance listener.ora file ) (every 1 minute) . CF. listener.ora file . , listener port location listener.ora file . - New initial parameter INSTANCE_NAME = NIS8I (default SID) SERVICE_NAMES = NIS8I_A1, NIS8I_B1 - instance name instance name multiple instances common services share uniquely instance name identify . - instance service names listener service name . , random listener access service name . NIS8I listener , NIS8I_A 1 listener NIS8I_B 1 listener 2 listener client . CF. instance NIS8I connect (connection request ) client tnsnames.ora connection information SERVICE_NAME initial parameter service_names . , service_names default (typically global database name) db_name.db_domain db_domin parameter default ‘WROLD’ Oracle8.1.5 manual Oracle8.1.6.2 parameter setting null . , SID = INSTANCE_NAME = DB_NAME SERVICE_NAMES default SID . jkspark@hanafos.com - 137 -
  • 138. Oracle8i New Features http://www.ggola.com/ Load balancing - connection load balancing . 1. number of active connections among various instances 2. dispatchers for the same service - load balancing order 1. client load balancing and failover : random listener available next available listener . 2. listener all available nodes information least CPU usage nodes . 3. listener (MTS ) connection dispatcher information route . - Oracle Meta link “Note:75712.1” 1. Client load balancing and failover tnsnames.ora : client listener FAILOVER LOAD_BALANCE listener . load_balance on listener random off sequential . CF. LOAD_BALACE=ON FAILOVER=OFF listener address random 1 failover . NIS8I = (DESCRIPTION = (FAILOVER=on) (LOAD_BALANCE=on) (ADDRESS = (PROTOCOL = tcp) (HOST = 203….106) (PORT = 1521)) (ADDRESS = (PROTOCOL = tcp) (HOST = 203….104) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = NIS8I_A)) ) CF. Version “ADDRESS_LIST =” parameter . - tnanames.ora listener listener 1. 2. instance 3. instance down , listener process failover error return . jkspark@hanafos.com - 138 -
  • 139. Oracle8i New Features http://www.ggola.com/ - OPS SID SERVICE_NAME, INSTANCE_NAME . NIS8I = (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp) (HOST = 203….106) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = NIS8I_A) (INSTANCE_NAME = NIS8I)) ) CF. instance_name parameter parallel server . , OPS instance_name parameter . 2. Connection and Node load balancing (MTS only) - listener . instance OPS instance listener connection load balancing . - , instance local remote listener client connection request . >> connection load balancing - client random listener service name or sid connection request listener CPU usage server(instance) connect . >> node load balancing CF. listener listener process start . , listener.ora file . CF. service handlers mts_dispatchers dispatcher . CF. Test remote listener dispatcher local listener dispatchers + local server dedicated . , local server dispatcher 6 7 service handlers . CF. >> $ lsnrctl services listener_name jkspark@hanafos.com - 139 -
  • 140. Oracle8i New Features http://www.ggola.com/ 3. dispatcher routing - MTS listener instance listener listener . - Multiple node instance SID SERVICE_NAMES . - instance MTS instance listener connection load balancing initial parameter MTS_DISPATCHERS listener information listener connection listener current status information setting . listener CPU usage node connection dispatcher process connection . CF. instance start PMON dispatcher information listener register (monitor the system every 30 seconds by default) information 10 update . ( , 1 check 10 node heavy transaction update ) CF. Oracle8 connection dispatcher connection Oracle8i active connection node dispatcher . >> 3 load balancing connection client server side process dispatcher process load balancing . jkspark@hanafos.com - 140 -
  • 141. Oracle8i New Features http://www.ggola.com/ Scalability New parameters - PMON default listener service initial parameter local_listener default value . - LOCAL_LISTENER default local host port 1521, protocol tcp ipc . port default value parameter . 1. * 1522 port ?” listener.ora : LISTENER = (ADDRESS_LIST = (ADDRESS= (PROTOCOL= TCP) (Host= 203.246.130.104) (Port= 1522))) init$SID.ora : local_listener = "(address = (protocol=tcp) (host=203.246.130.104) (port=1522)) " 2. server side tnsnames.ora alias init$SID.ora local_listener = lsn_local tnsnames.ora : lsn_local = (address = (protocol = tcp)(host = 203.246.130.104)(port=1522)) CF. init$SID.ora local_listener parameter multiple local listener . - MTS_DISPATCHERS connection load balancing listener mts_dispatchers . 1. mts_dispatchers=”(protocol=tcp)(dispatchers=2)” local listener . 2. mts_dispatchers= ”(protocol=tcp)(dispatchers=2)(listener=lsn_remote)” server side tnsnames.ora lsn_remote remote listener . - LARGE_POOL_SIZE= ? parameter Dedicated Server process session memory sort UGA MTS Shared server large pool . jkspark@hanafos.com - 141 -
  • 142. Oracle8i New Features http://www.ggola.com/ Multiple instance configuration step on MTS - instance 'NIS8I' 203.111.111.104 local listener 203.111.111.106 remote listener . Step1. Server side tnsnames.ora listener alias MLTNIS8I = (ADDRESS = (PROTOCOL = tcp) (HOST = 203.111.111.106) (PORT = 1521)) Step 2. initial parameter mts_dispatchers (remote and local). mts_dispatchers = "(PROTOCOL=TCP)(DISPATCHERS=3)(listener=MLTNIS8I)" mts_dispatchers = "(PROTOCOL=TCP) (DISPATCHERS=3)" Step 3. optional : SID service name service_names = NIS8I_A Step 4. local server listener start Step 5. remote server (203.111.111.106) listener start Step 6. database startup Step 7. client tnsnames.ora setting NIS8I = (DESCRIPTION = (FAILOVER=on) (LOAD_BALANCE=on) (ADDRESS = (PROTOCOL = tcp) (HOST = 203.111.111.104) (PORT = 1521)) (ADDRESS = (PROTOCOL = tcp) (HOST = 203.111.111.106) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = NIS8I_A))) Step 8. “$ lsnrctl services” command listener . CF. listener port 1521 port local listener server side tnsnames.ora mts_dispatchers . CF. 203.111.111.106 instance multiple instance node load balancing (service_names SID ) 203.111.111.106 instance . , listener port . listener port multiple instance instance remote listener . CF. node load balancing listener process start instance instance listener start listener process instance service handler . jkspark@hanafos.com - 142 -
  • 143. Oracle8i New Features http://www.ggola.com/ Multiple presentation support - IIOP, HTTP protocol MTS . Dedicated protocol . - MTS provides the ability to configure a dispatcher for each presentation. - JAVA support : 1. default TTC presentation ( standard Net8 clients and java stored procedures) 2. Enterprise Java Beans : GIOP presentation 3. CORBA servers : GIOP presentation - Oracle standard presentation TTC(Two Task Common) default MTS dispatcher multiple presentation . - GIOP(General Inter-Orb Protocol) IIOP(Internet Inter-Orb Protocol) EJB and CORBA Server connections presentation protocol . - Java stored procedures MTS Dedicated server mode EJB and CORBA server CORBA IIOP MTS . - presentation layer setting TTC GIOP setting mts_dispatchers parameter . - Initial parameter init$SID.ora mts_dispatchers = “(PROTOCOL=TCP)(PORT=1820) (DISPATCHERS=1)(PRE=ttc)" mts_dispatchers = "(PROTOCOL=TCP)(PORT=2332) (DISPATCHERS=1) (PRE=oracle.aurora.server.SGiopServer)" Connection pooling (MTS only) - Oracle8 New Features connection pooling resource idle session resource new session resource “physical network connection” resource utilization feature . - MTS_DISPATCHERS=”(PRO=tcp) (CON=10) (DIS=3) (POO=on) (TIC=3)(SESS=30)” - CON=10 : dispatcher connection POO=on : connection pooling enable TIC=3 : idle session * 10 , 30 SESS=30 : idle session session jkspark@hanafos.com - 143 -
  • 144. Oracle8i New Features http://www.ggola.com/ Connection concentration (MTS only) - client connect request listener connection manager listener dispatchers 1 physical link multiple logical sessions . (Multiplexing) CF. connection manager MTS Dedicated mode . connection concentration . - Connection manager 1. tnsnames.ora sample for client connection NIS8I = (DESCRIPTION = (SOURCE_ROUTE=yes) Connection manager address (ADDRESS = (PROTOCOL = TCP) (HOST = 203.111.111.104) (PORT = 1630)) Listener address (ADDRESS = (PROTOCOL = TCP) (HOST =203.111.111.106)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME=NIS8I_A)) 2. cman.ora sample for server configuration cman = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST= 203.111.111.104) (PORT=1630) (QUEUESIZE=32))) cman_admin = option (ADDRESS=(PROTOCOL=tcp)(HOST= 203.111.111.104) . (PORT=1830)) cman_profile = (parameter_list= (MAXIMUM_RELAYS=1024) (LOG_LEVEL=1) (TRACING=no) (RELAY_STATISTICS=yes) (SHOW_TNS_INFO=yes) (USE_ASYNC_CALL=yes) (AUTHENTICATION_LEVEL=0) (REMOTE_ADMIN=FALSE)) 3. initial parameter mts_dispatcher sample mts_dispatchers=”(protocol=tcp) (dis=3) (mul=on)” CF. multiplex=on setting connection concentration enable . - lsnrctl command cmctl command . $ cmctl start connection manager connection request cmadmin process register ‘cmgw’ process cmgw registration cmgw, listener information names server oracle names server address information names server update ‘cmadmin’ process . jkspark@hanafos.com - 144 -
  • 145. Oracle8i New Features http://www.ggola.com/ Multi protocol interchange(MPI) - client/server different type protocol . TCP/IP client SPX Oracle server connect TCP Oracle connection manager connect Oracle connection manager SPX database server connect client . - tnsnames.ora for multi protocol interchange NIS8I = (DESCRIPTION = (SOURCE_ROUTE=yes) connect to CMAN using TCP (ADDRESS = (PROTOCOL = TCP) (HOST = 203.111.111.104) (PORT = 1610)) connect to database using SPX (ADDRESS = (PROTOCOL = SPX) (SERVICE = MPI_LST)) Service name for database (CONNECT_DATA = (SERVICE_NAME=NIS8I_A)) Security Security features - client connection access control - secure access through the Web - works with Oracle Advanced Security Option Connection manager - client server access control rules . access control connection manager CMAN.ora CMAN_RULES . - CMAN_RULES sample CMAN_RULES = (RULE_LIST = (RULE=(SRC=204.111.111.101) (DST=203.111.111.104) (SRV=NIS8I_B) (ACT=accept)) (RULE=(SRC=204.111.111.102) (DST=203.111.111.106) (SRV=NIS8I_A) (ACT=reject)) ) - client 204.111.111.101 server 203.111.111.104 NIS8I_B database connection request client 204.111.111.102 server 203.111.111.106 NIS8I_A database connection request . - SRC : source host name or IP (client) DST : destination host name or IP (server) SRV : target database service or SID (8i SID only) ACT : ACCept or REJect jkspark@hanafos.com - 145 -
  • 146. Oracle8i New Features http://www.ggola.com/ Manageability Oracle8 New Features Page 93 “Advanced functions of Net8” homepage http://sh.hanarotel.co.kr/~ggola Net8i network configuration Configuration and trace tools - Configuration : Net8 Assistant tool GUI . $ $ORACLE_HOME/bin/netasst - Tracing : more readable trace text $ $ORACLE_HOME/bin/trcasst –o sqlnet.trc Naming services method 1. local naming : client tnsnames.ora 2. host naming : DNS /etc/hosts alias host name (TCP/IP, one host only one Instance ) 3. centralized naming : names server 4. connection manager names server 5. external naming : third-party name resolution mechanism ex) CDS, NOVELL, NIS jkspark@hanafos.com - 146 -
  • 147. Oracle8i New Features http://www.ggola.com/ 15. SQL*Plus, PL/SQL and National Language Support SQL*Plus New Features - server manager sql*plus . - version server manager . SQL*Plus syntax review - create type, create library new line ‘/’ . - SQL blank line . - “#” comment . comment “-“ “—“ . - SQL new line “-“ . - “&” . “&” escape character . Default off “” ( “?” ) SQL> set escape ? . EX. select ‘?&k’ from dual ; &k . “?” &k . External Procedure (Oracle8 NF) Orace8i external procedure JAVA . External procedure Oracle8 NF jkspark@hanafos.com - 147 -
  • 148. Oracle8i New Features http://www.ggola.com/ New Event Triggers New Trigger Level - Oracle7 DML(row and statement level) trigger database schema(user and DDL) level trigger . - Database level trigger : DBA role Schema level trigger : create trigger privilege user schema level trigger : create any trigger privilege Enhanced trigger - Oracle8 ‘instead of’ trigger views, object views Oracle8i . - ‘INSTEAD OF’ trigger nested table nested table . EX. create trigger emp_nest_trg instead of insert on nested table emp_nest of emp_object for each row ……. New Event & Changed view - STARTUP : database open fire SHUTDOWN : instance shutdown fire SERVERERROR : database error occurs LOGON, LOGOFF : user log on and log off fire CREATE, ALTER, DROP : object - DBA_TRIGGERS TABLE_NAME : database, schema level NULL TRIGGER_TYPE : before and after event for system events BASE_OBJECT_TYPE : database or schema for system events - DBMS_STANDARD package : additional functions to obtain attributes within a trigger CF. dba_triggers table_name NULL value database trigger or schema trigger . jkspark@hanafos.com - 148 -
  • 149. Oracle8i New Features http://www.ggola.com/ Example - Trigger for database startup and shutdown history ‘SYS’ user login Database startup and SQL> create table instance_info ( shutdown history 2 servername varchar2(20), username varchar2(30), 3 work_type varchar2(10), work_time date) ; table Table created. SQL> !more start_trg.sql create or replace trigger inst_start_trg after startup on database declare v_user varchar2(30); begin select username into v_user from user_users ; insert into instance_info values (dbms_standard.database_name, v_user, 'STARTUP', sysdate) ; end; Database startup and / shutdown trigger SQL> !more down_trg.sql create or replace trigger inst_sdown_trg before shutdown on database declare v_user varchar2(30); begin select username into v_user from user_users ; insert into instance_info values (dbms_standard.database_name, v_user, 'SHUTDOWN', sysdate) ; end; / SQL> col trigger_name for a20 SQL> col table_name for a10 SQL> select trigger_name, table_name, base_object_type, trigger_type 2 from dba_triggers trigger 3 where trigger_name in ('INST_START_TRG','INST_SDOWN_TRG'); TRIGGER_NAME TABLE_NAME BASE_OBJECT_TYPE TRIGGER_TYPE -------------------- ---------- ---------------- ------------------------------------------------------------- INST_SDOWN_TRG DATABASE BEFORE EVENT INST_START_TRG DATABASE AFTER EVENT Database shutdown Database shutdown and startup and startup SQL> alter session set nls_date_format = 'YYYYMMDD HH24:MI:SS' ; Session altered. SQL> col username for a10 SQL> col servername for a15 SQL> select * from instance_info ; SERVERNAME USERNAME WORK_TYPE WORK_TIME --------------- ---------- ---------- ------------------------------------------------------- HJSENT.WORLD SYS SHUTDOWN 20010908 12:31:00 HJSENT.WORLD SYS STARTUP 20010908 12:32:44 jkspark@hanafos.com - 149 -
  • 150. Oracle8i New Features http://www.ggola.com/ Autonomous Transactions Independence - autonomous transaction PL/SQL blocks call transaction independent transaction . - , main transaction call sub program nested transaction main transaction commit and rollback . - Oracle8i independent transaction autonomous transaction . CF. Oracle7 DBMS_PIPE . - PRAGMA setting . - PL/SQL block stored procedure, package/type method, local procedure/function . , declare section . - transaction lock resource main transaction resource . dead lock error return . - Autonomous transaction application . Example - emp_prag1 emp_test 1 row insert commit autonomous transaction emp_prag2 1 row insert and call emp_prag2 and 1 row insert commit or rollback - emp_prag2 session 3 rows session emp_prag1 data 1 row . jkspark@hanafos.com - 150 -
  • 151. Oracle8i New Features http://www.ggola.com/ Program example Autonomous transaction program description : create or replace procedure emp_prag1 (a_empno number) is v_t_odate date ; pragma autonomous_transaction; begin v_t_odate := sysdate ; insert into emp_test values (a_empno, 'X1', 'Y1', 888, v_t_odate, 10, 10, 11) ; commit ; end; / Main transaction program description : create or replace procedure emp_prag2 (a_empno number) is v_t_odate date ; begin v_t_odate := sysdate ; insert into emp_test values (a_empno + 1 , 'X1', 'Y1', 888, v_t_odate, 10, 10, 11) ; -- call procedure for 1 row insertion emp_prag1(a_empno) ; insert into emp_test values (a_empno + 2, 'X1', 'Y1', 888, v_t_odate, 10, 10, 11) ; end; / - Session 1 SQL> exec emp_prag2(999) ; SQL> select * from emp_test ; 1000, 999, 1001 empno data 3 . - Session2 SQL> select * from emp_test ; 999 empno data 1 . - Session1 SQL> rollback ; session1 session2 empno 999 data 1 . CF. SQL*Plus autocommit on setting transaction commit autocommit off . jkspark@hanafos.com - 151 -
  • 152. Oracle8i New Features http://www.ggola.com/ PL/SQL Enhancements - very large package support : maximum package size . - Bulk binds : FORALL collection elements SQL bulk binding . collection elements(index-by table, nested table, varray, host array) first last . …………………… FORALL i in 1..500 LOOP delete from emp where empno = empnos(i) ; …………………….. CF. This functionality reduces communication overhead. - Dynamic SQL : DBMS_SQL package dynamic SQL PL/SQL directly . - Dynamic SQL DML DDL . Dynamic SQL sample …….. sql_stm := ‘insert into dept values (:1, :2, :3)’ ; execute immediate sql_stm using v_dept, v_name, v_loc ; …… v_where := ‘ where deptnm = ‘ || v_deptnm ; execute immediate ‘delete from ‘ || v_tab_name || v_where ; ……. execute immediate ‘create table emp (empno number(4))’ ; - Oracle8i object features REF-based operations PL/SQL “UTL_REF” package support - UTL_REF package contains procedures to support reference- based operations (Oracle8i manual “Supplied Packages Reference, Volumne2 “ UTL_REF ) - monitoring and analysis of Program Execution packages new three APIs tracing, debugging, profiling . CF. Oracle8i New Features Example . . jkspark@hanafos.com - 152 -
  • 153. Oracle8i New Features http://www.ggola.com/ Parameter passing by reference - PL/SQL in or out or in out , value parameter reference . - NOCOPY mode . , out parameter procedure reference parameter pointer . - sample . SQL> set serveroutput on SQL> declare n number := 100 ; procedure do_print( n1 in number, n2 in out number, n3 in out nocopy number) is begin n2 := 200 ; dbms_output.put_line(n1) ; -- print 100 n3 := 300 ; dbms_output.put_line(n1) ; -- print 300 end ; begin do_print(n, n, n) ; dbms_output.put_line(n) ; -- print 200 end ; / 100 300 200 SQL> - 100 ( input) 300 (nocopy mode) 200 ( out variable) print . CF. 300 nocopy mode 200 in out . jkspark@hanafos.com - 153 -
  • 154. Oracle8i New Features http://www.ggola.com/ National Language Support Oracle8 New Features . character set - Database Creation , create database character set national character set . SQL> Create Database DBNAME Logfile Group 1… Datafile… Character Set US7ASCII National Character Set KO1601KSC ; - National character set data NCHAR, NCLOB, NVARCHAR2 National . Dual currency support (for Euro) - 1999 1 EU new currency Euro . - euro sample . SQL> alter session set nls_dual_currency=eur; Session altered. SQL> select to_char(888, 'U999') from dual ; TO_CHAR(888,'U ---------------------------- EUR888 NLS sort - sort function based index . - SQL> create index xak_nls_ename on emp (nlssort(ename, ‘NLS_SORT = German’)) ; - SQL> select * from emp where ename > ‘Ulrike’ ; - German ‘z’ < ‘ä’ . NLS_COMP (dynamic initialization parameter) parameter linguistic comparisons binary default language for the session German setting . jkspark@hanafos.com - 154 -
  • 155. Oracle8i New Features http://www.ggola.com/ 16. Database Security Password Management Oracle8 New Features Scripts $ORACLE_HOME/rdbms/utlpwdmg.sql Invoker’s Rights PL/SQL execution user - Oracle8i version PL/SQL block user PL/SQL user . - Oracle8i AUTHID DEFINER CURRENT_USER . - DEFINER default PL/SQL block user CURRENT_USER block user . - sample akman user procedure scott user . Sample procedure and test result - User ‘akman’ procedure create or replace procedure inv_t1 (av_tname in varchar2) authid current_user is v_stmt varchar2(40) default 'drop table ' || av_tname ; begin execute immediate v_stmt ; end; / create or replace procedure inv_t2 (av_tname in varchar2) -- definer default . authid definner is is v_stmt varchar2(40) default 'drop table ' || av_tname ; begin execute immediate v_stmt ; end; / jkspark@hanafos.com - 155 -
  • 156. Oracle8i New Features http://www.ggola.com/ SQL> sho user USER is “AKMAN” SQL> grant execute on inv_t1 to scott; SQL> grant execute on inv_t2 to scott; SQL> conn scott/tiger SQL> create table emp_test as select * from emp; Table created. SQL> exec akman.inv_t2('emp_test') ; BEGIN akman.inv_t2('emp_test') ; END; * ERROR at line 1: User ‘AKMAN’ emp_test ORA-00942: table or view does not exist table . ORA-06512: at "AKMAN_T2", line 6 ORA-06512: at line 1 procedure akman error returns SQL> exec akmanager.inv_t1('emp_test') ; Procedure inv_t1 PL/SQL procedure successfully completed. ‘AKMAN’ SQL> desc emp_test user ‘SCOTT’ ERROR: drop table ORA-04043: object emp_test does not exist procedure scott User tracing - AUTHID PL/SQL block user . CF. AUTHID CURRENT_USER block user_users query username . Security policies Application security - application privileges and roles security policy privileges and roles application . Application context - Application context : set up session-based attributes securely. session level , access user information retrieve and store security policy. Fine-Grained access control - Find-Grained access control : implement security policies as a low level of granularity. jkspark@hanafos.com - 156 -
  • 157. Oracle8i New Features http://www.ggola.com/ Application Context Features Application-specific - Each application can have its own unique context, with different attributes. order entry application access control customer number, position, and sales region attributes user , , . Secure - Application context can provide security in multiple ways. order entry user customer number valid user application context . - Context context implementing “trusted package” . Flexible - within a function implementing a security policy to determine the correct predicate to return select * from emp application context position different predicates(WHERE clause) return . , manager data data . - Context attribute can be used within the predicate itself. , Predicate(as a bind variable) return . predicate ‘where cust_num = sys_context(‘order_entry’, ‘cust_num’)’ return . Application Context creation and test 1. application rule . emp table connect user emp ename row access . 2. application context function PL/SQL package 3. application context 4. package context test CF. Oracle8i . Manual . jkspark@hanafos.com - 157 -
  • 158. Oracle8i New Features http://www.ggola.com/ Example - context user create any context privilege . (drop drop ) SQL> conn system/manager SQL> grant create any context to scott ; SQL> conn scott/tiger Connected. SQL> select * from emp ; EMPNO ENAME JOB MGR HIREDAT SAL COMM DEPTNO ------------------------------------------------------------------------------------------------------------------------- 7369 SCOTT CLERK 7902 17Dec80 800 40 7499 ALLEN SALESMAN 7698 20Feb81 1600 300 30 7521 WARD SALESMAN 7698 22Feb81 1250 500 30 8970 MILLER CLERK 7782 23Jan82 1300 10 9889 CUSTOMER GENERAL 7369 21Jun01 600 200 40 - context package SQL> create or replace package apl_secure_context is procedure set_secure_emp ; end ; / Package created. SQL> create or replace package body apl_secure_context is procedure set_secure_emp is v_empno emp.empno%type ; begin select empno into v_empno from emp where ename = sys_context('USERENV', 'SESSION_USER') ; DBMS_SESSION.SET_CONTEXT('app_emp_context','empno',v_empno); end; end; / Package body created. - context creation and test SQL> create or replace context app_emp_context using apl_secure_context ; Context created. SQL> select sys_context('USERENV', 'SESSION_USER') USERNAME from dual ; USERNAME --------- SCOTT SQL> exec apl_secure_context.set_secure_emp ; PL/SQL procedure successfully completed. SQL> select sys_context('APP_EMP_CONTEXT', 'EMPNO') EMP_NUMBER from dual ; EMP_NUMBER ---------- 7369 jkspark@hanafos.com - 158 -
  • 159. Oracle8i New Features http://www.ggola.com/ Fine-Grained Access control Fine-grained access control provides a way to extend table- based or view-based security to finer levels of granularity than previously possible. Merits - application security data server security costs . CF. application user data access server fine-grained access control . (Row level security ) - application level security , user security security . Features - table-based or view-based security policies : table or view flexible implementation salary emp columns emp_view application fine- grained access control application . select, insert, update, and delete . - Multiple policies per table table policies logically ‘AND’ . - Highly scalability application context attributes values parsed bind variable . parsed optimization . How it works - direct or indirect (subquery ) access automatically invokes the policy - policy package predicate(a where condition) return Database dynamically rewrites the SQL statement by appending the predicate - dynamically rewrite bind variable re-parsing or re-optimizing . jkspark@hanafos.com - 159 -
  • 160. Oracle8i New Features http://www.ggola.com/ Implementing - fine-grained access control secure policy application context . - fine-grained access control application context application context policy packages . - application context fine- grained access control . CF. DBMS_RLS Package $ORACLE_HOME/rdbms/admin/dbmsrlsa.sql script .dbms_rls package script . (RLS : Row Level Security Administrative Interface) Example - login user sales table select row Row Level Security Policy 1. building application context (optional) application context . (1) context function package page application context example (2) context page application context example (3) policy data SQL> conn scott/tiger SQL> grant select on emp to customer ; SQL> grant select on sales to customer ; SQL> select * from emp ; EMPNO ENAME JOB MGR HIREDAT SAL COMM DEPTNO --------------------------------------------------------------------------------------------------------- 9889 CUSTOMER GENERAL 7369 21Jun01 600 200 40 7369 SCOTT CLERK 7902 17Dec80 800 40 7499 ALLEN SALESMAN 7698 20Feb81 1600 300 30 7521 WARD SALESMAN 7698 22Feb81 1250 500 30 8970 MILLER CLERK 7782 23Jan82 1300 10 SQL> select * from sales; EMPNO DEPT ITEM STORE SALES_DATE -------------------------------------------------------------------------------- 9889 40 435 Prince 21Jun01 7369 40 839 Head 17Dec80 7499 30 630 Wilson 20Feb81 7521 30 463 Dunlop 22Feb81 8970 10 693 Unsquahable 23Jan82 jkspark@hanafos.com - 160 -
  • 161. Oracle8i New Features http://www.ggola.com/ 2. building policy packages create or replace package secure_emp_fgrain is function secure_emp_fgrain_fnc(d1 varchar2, d2 varchar2) return varchar2 ; end ; / create or replace package body secure_emp_fgrain is function secure_emp_fgrain_fnc(d1 varchar2, d2 varchar2) return varchar2 is v_predicate varchar2(2000) ; begin apl_secure_context.set_secure_emp ; v_predicate := 'empno = sys_context('APP_EMP_CONTEXT', 'EMPNO')' ; return v_predicate ; end; end; / 3. associate policy packages with tables and views SQL> exec dbms_rls.add_policy(‘scott’,’sales’,’sales_policy’,’scott’, ’secure_emp_fgrain.secure_emp_fgrain_fnc', 'select') CF. line . 4. Test SQL> conn scott/tiger SQL> select * from sales; SCOTT SALES EMPNO DEPT ITEM STORE SALES_DATE . --------------------------------------------------------------------- 7369 40 839 Head 17Dec80 SQL> select * from sales where dept=30; DEPT = 30 POLICY no rows selected PREDICATE AND . SQL> conn customer/customer11 SQL> select * from scott.sales ; CUSTOMER EMPNO DEPT ITEM STORE SALES_DATE SALES . ------------------------------------------------------------------------ 9889 40 435 Prince 21Jun01 jkspark@hanafos.com - 161 -
  • 162. Oracle8i New Features http://www.ggola.com/ DBMS_RLS package - Policy : ADD_POLICY (object_schema, object_name, policy_name, function_schema, function_name, statement_type, [update_check], [enable]) CF. update_check default = ‘FALSE’ (insert or update statement argument ‘TRUE’ insert or update policy check ) enable default = ‘TRUE’ - Policy : DROP_POLICY(object_schema, object_name, policy_name) - Policy enable, disable : ENABLE_POLICY(object_schema, object_name, policy_name, [enable]) CF. enable default = ‘TRUE’ - Policy Re-parsing : REFRESH_POLICY(object_schema, object_name, policy_name) jkspark@hanafos.com - 162 -
  • 163. Oracle8i New Features http://www.ggola.com/ 17. Partial addition for Oracle8i Constraints Oracle7 Oracle8 constraints features . Deferred constraint checking - constraint constraint not deferrable (default) deferrable initially immediate (default) initially deferred Oracle7 constraint : constraint check Oracle8 New features : SQL check using set constraint statement Oracle8i New features : commit time check Constraint - set constraint command : apply only to current transaction SQL> set constraint(s) all/constraint_name deferred/immediate ; - alter session set constraint command : apply to current session SQL> alter session set constraint(s) = deferred/immediate ; Example - default constraint(not deferrable) test SQL> conn scott/tiger SQL> select * from dept ; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) references dept(deptno) ; SQL> insert into emp (empno, deptno) values (7777, 50) ; ERROR at line 1: ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found SQL> set constraint XFK_EMP_DEPT deferred ; ERROR at line 1: ORA-02447: cannot defer a constraint that is not deferrable jkspark@hanafos.com - 163 -
  • 164. Oracle8i New Features http://www.ggola.com/ - deferrable initially immediate test SQL> alter table emp drop constraint xfk_emp_dept ; SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) references dept(deptno) deferrable initially immediate ; SQL> insert into emp (empno, deptno) values (7777, 50) ; ERROR at line 1: ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found SQL> set constraint XFK_EMP_DEPT deferred ; SQL> insert into emp (empno, deptno) values (7777, 50) ; 1 row created. SQL> commit ; ERROR at line 1: ORA-02091: transaction rolled back ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found - deferrable initially deferred test SQL> alter table emp drop constraint xfk_emp_dept ; SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) references dept(deptno) deferrable initially deferred ; SQL> insert into emp (empno, deptno) values (7777, 50) ; 1 row created. SQL> commit ; set constraint command commit check . ERROR at line 1: ORA-02091: transaction rolled back ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found SQL> set constraint XFK_EMP_DEPT immediate ; SQL> insert into emp (empno, deptno) values (7777, 50) ; ERROR at line 1: ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found constraint enable/disable & validate/novalidate - constraint enable/disable option data check . - Validate : data check Novalidate : data no-check CF. option default ‘validate’ . - feature nonunique index Primary or Unique constraint automatic index . - , PK or UK constraint disable automatic index drop enable automatic index rebuild . jkspark@hanafos.com - 164 -
  • 165. Oracle8i New Features http://www.ggola.com/ - FK data . SQL> conn scott/tiger SQL> select * from dept ; DEPTNO DNAME LOC ---------- -------------- -------------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> alter table emp drop constraint XFK_EMP_DEPT ; SQL> insert into emp (empno, deptno) values (7777, 50) ; 1 row created. SQL> alter table emp add constraint xfk_emp_dept foreign key (deptno) 2 references dept(deptno) enable novalidate ; Table altered. SQL> insert into emp (empno, deptno) values (7777, 50) ; * ERROR at line 1: ORA-02291: integrity constraint (SCOTT.XFK_EMP_DEPT) violated - parent key not found SQL> alter table emp modify constraint xfk_emp_dept enable validate ; * ERROR at line 1: ORA-02298: cannot validate (SCOTT.XFK_EMP_DEPT) - parent keys not found SQL> alter table emp modify constraint xfk_emp_dept disable validate ; * ERROR at line 1: ORA-02298: cannot validate (SCOTT.XFK_EMP_DEPT) - parent keys not found SQL> alter table emp modify constraint xfk_emp_dept disable novalidate ; Table altered. SQL> insert into emp (empno, deptno) values (7777, 50) ; 1 row created. SQL> alter table emp modify constraint xfk_emp_dept enable validate ; * ERROR at line 1: ORA-02298: cannot validate (SCOTT.XFK_EMP_DEPT) - parent keys not found SQL> alter table emp modify constraint xfk_emp_dept enable novalidate ; Table altered. SQL> delete from emp where deptno = 50 ; 2 rows deleted. SQL> alter table emp modify constraint xfk_emp_dept disable validate ; Table altered. SQL> insert into emp (empno, deptno) values (7777, 50) ; DML . * ERROR at line 1: ORA-25128: No insert/update/delete on table with constraint (SCOTT.XFK_EMP_DEPT) disabled and validated SQL> alter table emp modify constraint xfk_emp_dept enable validate ; Table altered. jkspark@hanafos.com - 165 -
  • 166. Oracle8i New Features http://www.ggola.com/ - index non-unique index primary key constraint automatic index index . - Oracle7 index column PK or UK . SQL> alter table department add constraint xpkdepartment primary key (deptno) ; SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; CONSTRAINT_NAME STATUS ------------------------------ -------- XPKDEPARTMENT ENABLED SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ; INDEX_NAME STATUS ------------------------------ -------- disable constraint command XPKDEPARTMENT VALID SQL> alter table department modify constraint XPKDEPARTMENT disable ; SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; CONSTRAINT_NAME STATUS ------------------------------ -------- XPKDEPARTMENT DISABLED SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ; no rows selected SQL> alter table department drop constraint xpkdepartment ; SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; no rows selected SQL> create index xnk_dept_loc on department (deptno, loc) ; SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; no rows selected SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ; INDEX_NAME STATUS ------------------------------ -------- XNK_DEPT_LOC VALID SQL> alter table department add constraint xpkdepartment primary key (deptno) ; SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; CONSTRAINT_NAME STATUS ------------------------------ -------- XPKDEPARTMENT ENABLED SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ; INDEX_NAME STATUS ------------------------------ -------- XNK_DEPT_LOC VALID SQL> select * from department ; DEPTNO DNAME LOC ----------- -------------- - ------------ 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> insert into department values ('40', 'DBA', 'Cyber') ; * ERROR at line 1: ORA-00001: unique constraint (SCOTT.XPKDEPARTMENT) violated jkspark@hanafos.com - 166 -
  • 167. Oracle8i New Features http://www.ggola.com/ SQL> alter table department drop constraint XPKDEPARTMENT ; SQL> insert into department values ('40', 'DBA', 'Cyber') ; 1 row created. SQL> alter table department add constraint xpkdepartment primary key (deptno) ; * ERROR at line 1: ORA-02437: cannot validate (SCOTT.XPKDEPARTMENT) - primary key violated SQL> delete from department where deptno=40 and loc='Cyber' ; 1 row deleted. SQL> alter table department add constraint xpkdepartment primary key (deptno) ; Table altered. SQL> alter table department disable constraint xpkdepartment ; modify constraint disable command . Table altered. SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; CONSTRAINT_NAME STATUS ------------------------------ -------- XPKDEPARTMENT DISABLED SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ; INDEX_NAME STATUS ------------------------------ -------- XNK_DEPT_LOC VALID SQL> alter table department enable constraint xpkdepartment ; Table altered. SQL> select constraint_name, status from user_constraints where table_name = 'DEPARTMENT'; CONSTRAINT_NAME STATUS ------------------------------ -------- XPKDEPARTMENT ENABLED SQL> select index_name, status from user_indexes where table_name = 'DEPARTMENT' ; INDEX_NAME STATUS ------------------------------ -------- XNK_DEPT_LOC VALID CF. nonunique index unique index PK . , unique index PK PK disable unique index drop enable PK PK Index . , nonunique index feature . jkspark@hanafos.com - 167 -
  • 168. Oracle8i New Features http://www.ggola.com/ Rely/NoRely Flag - DBA rely flag DBMS constraint validity check constraint valid . - , usually optimizer Materialized View query rewrite validate constraint query rewrite validate rely flag constraint query rewrite . - Restrictions 1. RELY and NORELY are relevant only if you are modifying an existing constraint(that is, you have issued alter table … modify constraint statement.) ==> manual . Rely option constraint “relevant only if” . 2. Not null constraint . - rely constraint user_constraints . SQL> alter table emp modify constraint XFK_EMP_DEPT rely disable - novalidate ; Table altered. SQL> select CONSTRAINT_NAME, STATUS, VALIDATED, RELY 2 from user_constraints where constraint_name = ' XFK_EMP_DEPT ' ; CONSTRAINT_NAME STATUS VALIDATED RELY ------------------------------ -------- ------------------- ------- XFK_EMP_DEPT DISABLED NOT VALIDATED RELY SQL> alter table emp modify constraint XFK_EMP_DEPT norely enable; Table altered. SQL> select CONSTRAINT_NAME, STATUS, VALIDATED, RELY from user_constraints where constraint_name = ' XFK_EMP_DEPT ' ; CONSTRAINT_NAME STATUS VALIDATED RELY ------------------------------ -------- ------------------- ------- XFK_EMP_DEPT ENABLED VALIDATED jkspark@hanafos.com - 168 -
  • 169. Oracle8i New Features http://www.ggola.com/ Oracle8i object new features Oracle8 New Features MEMBER Method - method PL/SQL, 3GL(extended pro*c), Package body JAVA . Dangling REFs - Oracle8 dangling REF update . EX) update dept set mgr=NULL where mgr is DANGLING ; - Oracle8i update command . EX) analyze table dept validate ref update set dangling to null ; - dangling REFs does not return an error. Nested Table Enhancements - Nested tables may be stored as Index-Organized Tables - Constraints may be defined on nested tables - Locators and references can be used to SELECT or perform DML on nested tables.(REF ) A locator returns a pointer to the nested table, not the rows of the table. Table function for Nested table and VARRAY - Table function (collection type table ) Insert into ord values (100, line_item_array_type( line_item_type(300, 2300), line_item_type(700, 3300) )) ; Select o.ord_id, i.prod_id, i.price Table function nested table elements From ord o, TABLE(o.line_items) I DML . Where i.prod_id in (300, 700) ; Varray PL/SQL procedure . Update TABLE( select o.line_items from ord o where ord_id = 100) i Set i.quantity = 100 Where prod_id = 400 ; jkspark@hanafos.com - 169 -
  • 170. Oracle8i New Features http://www.ggola.com/ LOBs Oracle8 New Features CF. internal LOB storage CACHE/NOCACHE, LOGGING/NOLOGGING . [CACHE NOLOGGING ] DBMS_LOB.CREATETEMPORARY (except BFILE type) - DBMS_LOB.CREATETEMPORARY command user’s temporary tablespace temporary lob .(except BFILE) - database LOB data copy application ability design .( sample ) - Temporary LOB the session, transaction, or call no rollback and no redo logging generated - In SQL, temporary LOBs may only be used in WHERE clauses, an INSERTed value, or as the assigned value in an UPDATE. - temporary lob lob data insert . -- The following example uses a temporary LOB to reverse one of the LOB alues in the table -- and then inserts the reversed LOB as a new row. declare c_lob CLOB; -- permanent LOB locator t_lob CLOB; -- temporary LOB locator buf varchar2(32000); -- }this example assumes the LOB is buf2 varchar2(32000); -- }less than 32K. chunk number; len number; offset number; amount number; begin select c2 into c_lob from test_lobs where c1 = 1; -- Create a temporary LOB. -- The parameters to CREATETEMPORARY are locator, use caching or not and duration. -- Set no caching and a duration of call -- since the temporary LOB is not required outside of this PL/SQL block. DBMS_LOB.CREATETEMPORARY(t_lob, FALSE, DBMS_LOB.CALL); -- NEW 8i -- Chunk for storing the LOB value. -- Using this amount for reads and writes of the LOB will improve performance. chunk := DBMS_LOB.GETCHUNKSIZE(c_lob); dbms_output.put_line('Chunksize of column c2 is '||chunk); dbms_output.put_line('Chunksize of temporary LOB is '|| DBMS_LOB.GETCHUNKSIZE(t_lob)); jkspark@hanafos.com - 170 -
  • 171. Oracle8i New Features http://www.ggola.com/ len := DBMS_LOB.GETLENGTH(c_lob); offset := 1; buf := null; while offset < len loop if len - (offset-1) > chunk then amount := chunk; else amount := len - (offset-1); end if; buf2 := null; DBMS_LOB.READ(c_lob,amount,offset,buf2); buf := buf||buf2; offset := offset + amount; end loop; --Reverse the read data and write it to the temporary LOB. buf2 := null; for i in reverse 1..len loop buf2 := buf2||substr(buf,i,1); end loop; -- Write the whole lot in one go. -- Note, if this was a large amount of data then ideally it should be written using the -- available chunksize of the temporary LOB. DBMS_LOB.WRITEAPPEND(t_lob,len,buf2); -- NEW 8i -- Now insert a new row into the table setting the CLOB column to the value of the temporary LOB. -- This can be done in one of two ways: --(i) A new row can be inserted with an empty locator, the locator -- retrieved and the LOB value copied with DBMS_LOB.COPY. --(ii) A new row can be inserted passing the temporary LOB locator -- as a bind variable to the insert. -- --Using the second method: insert into test_lobs values (5,t_lob,null,null) returning c2 into c_lob; --Free the temporary LOB explicitly. if DBMS_LOB.ISTEMPORARY(t_lob) = 1 then DBMS_LOB.FREETEMPORARY(t_lob); end if; dbms_output.put_line('Length of CLOB inserted into record 5 is '|| DBMS_LOB.GETLENGTH(c_lob)); commit; end; / jkspark@hanafos.com - 171 -
  • 172. Oracle8i New Features http://www.ggola.com/ Recovery Manager Oracle8 New Features Catalog Database - Oracle8 # sqlplus rmanuser/rmanuser SQL> @$ORACLE_HOME/rdbms/admin/catrman.sql : catalog user . user default tablespace catalog DB . - Oracle8i RMAN> create catalog tablespace “TS_RMAN” ; : command catalog DB . Newly supported command - RMAN Database startup and shutdown command . jkspark@hanafos.com - 172 -
  • 173. Oracle8i New Features http://www.ggola.com/ Advanced Queuing Oracle8i new features interface C++ JAVA . Database Security - AQ_ADMINSTRATOR_ROLE allows maintain queues in any schema. - AQ_USER_ROLE user’s schema queues enqueues and dequeues . - DBMS_AQADM allows the user to maintain AQ objects in their schema only. - DBMS_AQ allows enqueues and dequeues from queues in user’s schema only. - Grant(or revoke)_system_privilege in package DBMS_AQADM grant or revoke the ENQUEUE_ANY, DEQUEUE_ANY, MANAGE_ANY privileges . - Grant(or revoke)_queue_privilege in package DBMS_AQADM grant or revoke the ENQUEUE_ANY, DEQUEUE_ANY, ALL privileges on individual queues . Oracle Enterprise Manager V2 Oracle Enterprise Edition OEM free-of-charge DBA management pack . New architecture - 2-tier , fat client Oracle Management Server 3-tier distributed architecture . - Java console administration application platform . client JAVA console – middle tier OMS – server Oracle through agent - OMS a set of database tables repository Multiple system . jkspark@hanafos.com - 173 -