NOLOGGING in alter table split partition...

Hi all

Please can tell me where I would add the NOLOGGING in the below statement, or any other means by which I can stop to redo being generated

ALTER table split partition EB_LOGS_082008 at (to_date('01-01-2010','DD-MM-YYYY')) NOLOGGING EB_LOGS into (partition EBLAST_TABLE, partition EB_LOGS_012010 tablespace EBLAST_TABLE tablespace EB_LOGS_082008) parallel;

Wow... Grammar ALTER TABLE just constantly more and more complex, isn't?

According to this:
http://download.Oracle.com/docs/CD/E11882_01/server.112/e10592/clauses005.htm#CJAHABGF

"For partitioned objects, the value specified for this clause is the physical attribute by default segments (and ALTER following... associated with all the partitions specified in the CREATE statement ADD PARTITION statements), unless you specify the logging attribute in the description of the PARTITION. »

If I read that correctly, so if you want the NOLOGGING keyword to indicate more than just the physical default attribute, then it must be in the description of the PARTITION.

So something like this, perhaps?
Totally not tested, BTW:
ALTER table EB_LOGS split partition EB_LOGS_082008 at (to_date('01-01-2010','DD-MM-YYYY')) into (partition EB_LOGS_082008 tablespace EBLAST_TABLE nologging, partition EB_LOGS_012010 tablespace EBLAST_TABLE nologging) parallel;

Once again, this is an assumption and cannot yet pass the analysis.

In regards to the perceived dangers of NOLOGGING operations, well, it is certainly something that must be clearly understood, but not to fear. The disadvantage of an operation NOLOGGING is that if you need to recover from a backup taken before the NOLOGGING operation, until a point in time after the operation NOLOGGING objects in the database that were submitted to NOLOGGING operations will logically corrupted and must be rebuilt.

Finally, I fell on this can also be useful, regarding the optimization of SPLIT PARTITION operations:
http://download.Oracle.com/docs/CD/E11882_01/server.112/e10837/part_admin.htm#VLDBG00304

Hope that helps,

-Mark

Tags: Database

Similar Questions

  • ALTER table move partition in parallel

    Hello

    I wish that this command must be run in parallel. is this possible?

    ALTER TABLE xyz PARTITION MOVE xyz_p0608 TABLESPACE q208_ts

    Thank you
    parallel_clause
    
    Purpose
    
    The parallel_clause lets you parallelize the creation of a database object and set the default degree of parallelism for subsequent queries of and DML operations on the object.
    
    You can specify the parallel_clause in the following statements:
    
        * CREATE TABLE: to set parallelism for the table (see CREATE TABLE).
        * ALTER TABLE (see ALTER TABLE):
              o To change parallelism for the table
              o To parallelize the operations of adding, coalescing, exchanging, merging, splitting, truncating, dropping, or moving a table partition
    

    To parallelize append operations, coalescence, Exchange, merger, splitting, truncate, delete or move a partition table

  • Reclaim space after ALTER TABLE DROP PARTITION

    Hello

    I have a partitioned table. My requirement is to reclaim the space by dropping a partition of the table.

    Is it possibe to recover space for the tablespace by dropping a partition of partition table?

    Thank you

    Hello

    ALTER TABLE DROP PARTITION will always return the space to the storage to be reused by other segments.

    It's the ALTER TABLE TRONQUER SCORE, where you can specify DROP STORAGE or of REUSE STORAGE clause (in case of re-use, the space is not released and can be used by the new lines inserted in the same partition). The DROP STORAGE should be the default option.

    But for the fall of the score, you don't have to worry.

    Kind regards
    Martin

  • ALTER table add partition error

    Hello world

    In fact, I add more partitions in an existing table. My sql is

    ALTER table dmp_tlog1_bk add the partition by range (tmonth)
    (
    P9_200908 lower VALUES (200909) PARTITION.
    P10_200909 lower VALUES (200910) PARTITION.
    PARTITION P11_200910 lower VALUES (200911));
    commit;

    but I get the following error
    Error from the 1 in the command line:
    ALTER table dmp_tlog1_bk add the partition by range (tmonth)

    P9_200908 lower VALUES (200909) PARTITION.
    P10_200909 lower VALUES (200910) PARTITION.
    PARTITION P11_200910 lower VALUES (200911)
    Error report:
    SQL error: ORA-00902: invalid data type
    00902 00000 - "invalid data type".
    * Cause:
    * Action:
    validation succeeded.


    The data type of the tmonth is number (8.0) is the structure of the table.


    could you please help?


    Thank you very much
    alter table dmp_tlog1_bk add partition P9_200908 VALUES less than (200909)
    /
    

    SY.

  • alter table Exchange partition

    Dear Experts,

    I could ask does change exchange table partition depends on the size of the table or partition?

    Thank you for your help.

    Best regards, Atanas.

    Hello Atanas,

    It's the good point: it does not depend on the size. Data is actually exchanged between the two segments, the work is only level 'dictionary': Oracle exchange the roles of both existing segments, it is now regarded as a table and the other as a partition, as opposed to their roles before the "swap partition.

    Thanks to this, Exchange a partition can be a very quick way of loading new data or old data archiving...

    Best regards

    Bruno Vroman.

  • Question about "split partition" command

    Hello

    I have the following partitioned table...

    CREATE TABLE trans_tab
    (

    TRANS_ID number (10),
    DATE OF TRANS_DATE,
    CONSTRAINT PK_TRNS_ID PRIMARY KEY (TRANS_ID))
    PARTITION BY RANGE (TRANS_DATE)
    (PARTITION TRANS_2010 VALUES LESS THAN (TO_DATE ("2010-10-01 00:00:00 ',' SYYYY-MM-DD HH24:MI:SS ',' NLS_CALENDAR = GREGORIAN '")) TABLESPACE TRANS_2010,)
    PMAX VALUES LESS THAN (MAXVALUE) TABLESPACE TRANS_MAX PARTITION);

    Now, I intend to add a partition, as shown below...

    ALTER table split partition pmax trans_tab at (TO_DATE (' 2012-10-01 00:00:00 ',' SYYYY-MM-DD HH24:MI:SS ',' NLS_CALENDAR = GREGORIAN ')) in (2012 partition, partition pmax);


    The command above split partition worked well and ended quickly in the TEST environment which had only 100 records. I now intend to do in the production, which has about 90 MM records in the table. Here are my questions...

    (1) I will try to find how long would the "split partition" command to run into a table that has ~ 90 mm record table the command "split partition" to physically move the records or just logically to remap the records to the appropriate partition? If it is logical remapping, I guess that the split command would complement quickly even against a huge table... Could check you?

    (2) in the TEST environment, I checked the non partitioned status of the global and the local index after splitting the partiton and they look good? Should I be rebuild the index after splitting the partition?

    Thanks for your time...

    Assuming he has no line of 2012 year in partition PMAX, the SPLIT would create a vacuum PMAX anew. However, it has the maximum value of TRANS_DATE in the PMAX partition - so he must sweep the partition (or use a LOCAL index on the partition, if available). Therefore, depending on how it can identify lines, it may take a little time.

    I think that the current PMAX partition is not empty (that is, it has lines of 2011). As a result, a SPLIT will cause GLOBAL Indexes to score UNUSABLE unlesss you use the UPDATE GLOBAL INDEXES.

    Was your test with the actual number of lines to PMAX?

    Hemant K Collette

  • Invalid option to TRUNCATE PARTITION in ALTER TABLE

    Below edit sql works fine when I run this one.

    ALTER TABLE table_name TRUNCATE partition partition_nm UPDATE GLOBAL INDEXES;

    But if I run this procedure I get the error message "14054. 00000 - option ALTER TABLE TRUNCATE PARTITION invalid"

    create or replace PROCEDURE TRUNCATE_WS_CLAIMS_REPORT

    as

    whole crsor;

    rval around edge;

    Start

    crsor: = dbms_sql.open_cursor;

    DBMS_SQL. Parse (crsor, ALTER TABLE table_name TRUNCATED partition partition_nm INDEXES', dbms_sql.v7 GLOBAL UPDATE);

    rval Tip: = dbms_sql.execute (crsor);

    DBMS_SQL.close_cursor (crsor);

    end;

    Can you guide me how to solve this error?

    Have you tried to run immediately instead of dbms_sql?

    Start

    run immediately "ALTER TABLE table_name partition TRUNCATE partition_nm UPDATE GLOBAL INDEXES";

    end;

  • ALTER table move lob segment of a partition

    How I could move a LOB from a table segment partitioned (11.1 DB)?

    I have after the table script:
    CREATE TABLE COMMON.TEST_AAA2_ARH
    (
      ID           INTEGER,
      TEKST        VARCHAR2(200 CHAR),
      UPDATESTAMP  DATE,
      OBJEKAT      CLOB
    )
    LOB (OBJEKAT) STORE AS (
      TABLESPACE COMMON_ARCHIVE
      ENABLE       STORAGE IN ROW
      CHUNK       8192
      RETENTION
      NOCACHE
      LOGGING)
    TABLESPACE COMMON_ARCHIVE
    LOGGING
    PARTITION BY RANGE (UPDATESTAMP)
    (  
      PARTITION P_201012 VALUES LESS THAN (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
        LOGGING
        NOCOMPRESS 
        TABLESPACE COMMON_DATA
        LOB (OBJEKAT) STORE AS (
          TABLESPACE USERS
          ENABLE       STORAGE IN ROW
          CHUNK       8192
          PCTVERSION  10
          NOCACHE
          LOGGING),  
      PARTITION P_201101 VALUES LESS THAN (TO_DATE(' 2011-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
        LOGGING
        NOCOMPRESS 
        TABLESPACE COMMON_DATA
        LOB (OBJEKAT) STORE AS (
          TABLESPACE USERS
          ENABLE       STORAGE IN ROW
          CHUNK       8192
          PCTVERSION  10
          NOCACHE
          LOGGING),  
      PARTITION P_MAXVALUE VALUES LESS THAN (MAXVALUE)
        LOGGING
        NOCOMPRESS 
        TABLESPACE COMMON_ARCHIVE
        LOB (OBJEKAT) STORE AS (
          TABLESPACE COMMON_ARCHIVE
          ENABLE       STORAGE IN ROW
          CHUNK       8192
          PCTVERSION  10
          NOCACHE
          LOGGING)
    )
    NOCOMPRESS 
    NOCACHE
    NOPARALLEL
    MONITORING;
    and I would switch USERS tablespace lob segment to the other...

    TNX

    ALTER table move partition lob () store as (tablespace )

    SQL> CREATE TABLE WISSEM.TEST_AAA2_ARH
    (
      ID           INTEGER,
      TEKST        VARCHAR2(200 CHAR),
      UPDATESTAMP  DATE,
      OBJEKAT      CLOB
    )
    LOB (OBJEKAT) STORE AS (
      TABLESPACE EXAMPLE
      ENABLE       STORAGE IN ROW
      CHUNK       8192
      RETENTION
      NOCACHE
      LOGGING)
    TABLESPACE EXAMPLE
    LOGGING
    PARTITION BY RANGE (UPDATESTAMP)
    (
      PARTITION P_201012 VALUES LESS THAN (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
        LOGGING
        NOCOMPRESS
        TABLESPACE EXAMPLE
        LOB (OBJEKAT) STORE AS (
          TABLESPACE USERS
          ENABLE       STORAGE IN ROW
          CHUNK       8192
          PCTVERSION  10
          NOCACHE
          LOGGING),
      PARTITION P_201101 VALUES LESS THAN (TO_DATE(' 2011-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
        LOGGING
        NOCOMPRESS
        TABLESPACE EXAMPLE
        LOB (OBJEKAT) STORE AS (
          TABLESPACE USERS
          ENABLE       STORAGE IN ROW
          CHUNK       8192
          PCTVERSION  10
          NOCACHE
          LOGGING),
      PARTITION P_MAXVALUE VALUES LESS THAN (MAXVALUE)
        LOGGING
        NOCOMPRESS
        TABLESPACE EXAMPLE
        LOB (OBJEKAT) STORE AS (
          TABLESPACE EXAMPLE
          ENABLE       STORAGE IN ROW
          CHUNK       8192
          PCTVERSION  10
          NOCACHE
          LOGGING)
    )
    NOCOMPRESS
    NOCACHE
    NOPARALLEL
    MONITORING;
      2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51   52   53   54   55   56
    Table created.
    
    SQL> ALTER TABLE WISSEM.TEST_AAA2_ARH MOVE LOB (OBJEKAT) STORE AS (TABLESPACE USERS);
    ALTER TABLE WISSEM.TEST_AAA2_ARH MOVE LOB (OBJEKAT) STORE AS (TABLESPACE USERS)
                       *
    ERROR at line 1:
    ORA-14511: cannot perform operation on a partitioned object
    
    SQL> ALTER TABLE WISSEM.TEST_AAA2_ARH MOVE PARTITION P_201101 LOB (OBJEKAT) STORE AS (TABLESPACE USERS);
    
    Table altered.
    
    SQL> 
    

    Published by: orawiss on May 5, 2011 14:03

  • After splitting partition index was not marked UNUSABLE. Oracle 11.1.0.6.0

    Dear experts,

    I do the following:

    SQL > create table tab (an integer, whole b)

    2 partition () range (a)

    3 partition p10 values less than (10),

    4 partition p20 values less than (20).

    5 partition pmax values less than (10000)

    6  );

    Table created

    SQL > alter table tab add constraint tab_pk key primary (b);

    Table changed

    SQL > insert into tab values (1, 1);

    1 row inserted

    SQL > insert into tab values (19: 2);

    1 row inserted

    SQL > insert into tab values (9999, 3);

    1 row inserted

    SQL > commit;

    Validation complete

    SQL > select index_name, status of user_indexes where index-name = "TAB_PK";

    INDEX_NAME STATUS

    ------------------------------ --------

    VALID TAB_PK

    SQL > tab table split partition of alter

    2 pmax (30) into (partition, partition pmax p30);

    Table changed

    SQL > select index_name, status of user_indexes where index-name = "TAB_PK";

    INDEX_NAME STATUS

    ------------------------------ --------

    VALID TAB_PK

    Could you explain please why the overall index of tab_pk was not marked UNUSABLE? The partmax of the partition was not empty.

    It looks like you were the beneficiary of an optimization: Maintenance of Partitions

  • Split partitions in number of partitions

    I have a partitioned table. Score is based on the Date column, and each partition is for the period of 1 month. I want to split a partition into 4 smaller partitions.

    I tried split partition but split partition can be used to split the existing partition into 2 partitions. I tried to add sub partitions in an existing table, which failed, because this isn't a composite partition.

    That's what I tried.

    alter table activity
    set subpartition template
    (
    subpartition SP_1_NEWNAME values less than (TO_DATE('07-JAN-2007 00:00:00', 'DD-MON-YYYY HH24:MI:SS')),
    subpartition sp_2_NEWNAME values less than (to_date('15-JAN-2007 00:00:00', 'DD-MON-YYYY HH24:MI:SS')),
    subpartition SP_3_NEWNAME values less than (to_date('15-JAN-2007 00:00:00', 'DD-MON-YYYY HH24:MI:SS'))
    );
    
    

    Any suggestions?

    Thank you

    you would have to hit the score several times. You can recreate the object with the Assembly of partitions or dbms_redefinition allows you to change the definition of the object.

  • Split partition - index / local

    Hi friends,

    I'm trying to divide a table partition.

    Please let me know if the syntax below are correct.

    If the local index used

    ALTER TABLE SNYT. PART_ESTD
    ESTD_M13_S22 PARTITION SPLIT TO ('IS', 13, '22')
    IN (ESTD_M13_S21 PARTITION, PARTITION ESTD_M13_S22)
    update of the index;

    (by http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:1401247200346349807)
    =================================================================

    If used Global indexes

    ALTER TABLE SNYT. PART_ESTD
    ESTD_M13_S22 PARTITION SPLIT TO ('IS', 13, '22')
    IN (ESTD_M13_S21 PARTITION, PARTITION ESTD_M13_S22)
    UPDATE GLOBAL INDEXES;

    Concerning
    KSG

    Published by: KSG on 23 August 2012 18:27

    Published by: KSG on 23 August 2012 18:51

    http://docs.Oracle.com/CD/E11882_01/server.112/e26088/statements_3001.htm#i2131218

    http://docs.Oracle.com/CD/E11882_01/server.112/e26088/statements_3001.htm#i2151566

  • Help Split Partition

    Is - a can split a partition in addition to 2?

    Example:
    alter table HISTORY
    split partition HIST_MAX 
    at (TO_DATE(' 2010-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    into (
    PARTITION HIST_10Q1
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_1
        LOGGING,        
    PARTITION HIST_MAX_NEW
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_4
        LOGGING
    );
    TO
    alter table HISTORY
    split partition HIST_MAX 
    at (TO_DATE(' 2010-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    into (
    PARTITION HIST_10Q1
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_1
        LOGGING,        
    PARTITION HIST_10Q2
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_1
        LOGGING,        
    PARTITION HIST_10Q3
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_1
        LOGGING,
    PARTITION HIST_10Q4
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_1
        LOGGING,                
    PARTITION HIST_MAX_NEW
        STORAGE(FREELISTS 1 
                FREELIST GROUPS 1)
        TABLESPACE HIST_DATA_4
        LOGGING
    );
    Our MAX partition has grown too great and fast that we must divide and add more partitions to cover what we have in the MAX and also for the future. I know we can do it one by one (divided by 2), but I was wondering if we can do all of a sudden.

    Version is 9.2.0.7

    No, you must do the split of recursively.

    Divide HIST_MAX by (HIST_10Q4, HIST_MAX)

    Then, divided HIST_10Q4 (HIST_10Q3, HIST_10Q4)

    Then, divided HIST_10Q4 (HIST_10Q2, HIST_10Q3)
    and so on.

    Hemant K Collette

  • ALTER TABLE SHRINK the SPACE COMPACT takes a long time

    Hello
    I run:
    ALTER TABLE TOM. TAB1 SHRINK SPACE COMPACT;
    ALTER TABLE TOM. TAB1 SHRINK SPACE WATERFALL;


    The "ALTER TABLE TOM. Tab1 SHRINK SPACE COMPACT"was completed in 2 hours, but"ALTER TABLE TOM. Tab1 SHRINK SPACE WATERFALL"is still underway after 8 hours, less than the size of the table TAB1 and index:

    NOM_SEGMENT... GB
    TAB1................................. 166
    IDX01................................ 83
    SYS_C00......................... 42
    IDX02............................. 142
    IDX03.............................. 66
    IDX04............................. 122


    Why 'SHRINK the SPACE COMPACT' takes a lot of time?
    Is it possible to check how much time should I take?

    Thanks in advance!

    Running

    ALTER INDEX TOM. TAB1_IDX03 SHRINK SPACE COMPACT;

    ALTER INDEX TOM. TAB1_IDX03 SHRINK SPACE;

    set is useless, as does 'SHRINK the SPACE' that means "SHRINK SPACE COMPACT" and much more (see the quote from the Doc Oracle Hemant).  2, 'SHRINK the SPACE' is the operation that will take more time.  So if 'SHRINK the SPACE' is what you wanted (reclaim space) and you can afford to wait, run 'SHRINK the SPACE' only.

    "SHRINK the COMPACT SPACE" is a part of the work that 'SHRINK the SPACE' is only.  Generally, use you it when time is at a premium: you run SHRINK SPACE COMPACT a weekday evening (because SHRINK the SPACE does not fit in one night and accrue hourly) and you run SHRINK SPACE on the weekend to finish following the recovery of your space.

    Regarding the fact that the entire segment or a partition after another, I have no experience - I both of their time and test methods.  Perhaps running several sessions at the same time on different partitions would save time (but be more heavy on the CPU and storage).

    Also note that SHRINK the AREA generates a lot of REDO (keep an eye on the free space of your ARCHIVELOG destination).  With your data volume, I would expect dozens (or even hundreds) of gigabytes of roll forward must be generated.

  • ALTER TABLE RETRACTABLE is possible online?

    RDBMS Version: 11.2.0.4

    Platform: Oracle Linux 6.4

    We have a database of CARS of Production 2 nodes very critical. To recover the space, we want to cut some large tables. The first table we'll shrink is a 300 GB, which is not partitioned with no LOB table.

    Here are the steps that we'll run.

    Step1.alter mytable table allow the movement of the line;

    Step2.alter mytable table shrink space compact;

    Step3.alter mytable table shrink space;

    Step4.alter table mytable disable the movement of the line;

    STEP 5. COLLECT STATISTICS of the table (because the RETRACTABLE table will cancel all the sliders in the shared pool)

    The steps above will take at least 10 hours to complete a 300 GB table. We would like to know if all of these steps can be done online. That is to say. We do not want the SHRINK command to lock the table and prevents the table to be modified (any DML) by the application

    Doc below said this can be done online. But, MOS DOC 1357878.1 said that it is not and you must use the DBMS_REDEFINITION package if you want to do it online.

    https://docs.Oracle.com/CD/E18283_01/server.112/e17120/schema003.htm

    The MOS article you are talking about is not correct. Outside the DOF at the end of a SHRINK lock when the high tide is shifted, SHRINK the SPACE is an online operation. DBMS_REDEFNITION is actually worse because you have DDL locks at both the beginning and the end. However, in both cases, it is the DDL that is blocked by other operations DML (and not the other way around) so that your users will have no problem. If the narrowing or the redefinition is blocked, you can suspend the database for a few seconds. I described how to do here,

    Database Quiesce

    --

    John Watson

    Oracle Certified Master s/n

  • ALTER TABLE hf_altertest ADD COLUMN does not

    I am using ORACLE 11g and my FDI is Developer SQL 4.1.1

    It's all free PC version that has limits.

    I tried on:

    CREATE TABLE hf_altertest

    (

    contact_id INTEGER NOT NULL

    , name VARCHAR (25)

    , last_name VARCHAR (35)

    PRIMARY KEY (contact_id)

    );

    ALTER TABLE hf_altertest State to add a CHAR (2) COLUMN;

    But when I go to run the ALTER TABLE statement then I get following error:

    rror starting at line: 1 323 in command.

    ALTER TABLE hf_altertest State to add a CHAR (2) COLUMN

    Error report-

    SQL error: ORA-00904: invalid identifier

    00904, 00000 - '% s: invalid identifier '.

    * Cause:

    * Action:

    I can run the same code in MySQL without error.

    This leads me to think that maybe I'm just bumping into a limit in the free version of PC.

    Any thoughts?

    3003916 wrote:

    I am using ORACLE 11g and my FDI is Developer SQL 4.1.1

    It's all free PC version that has limits.

    ALTER TABLE hf_altertest State to add a CHAR (2) COLUMN;

    But when I go to run the ALTER TABLE statement then I get following error:

    rror starting at line: 1 323 in command.

    ALTER TABLE hf_altertest State to add a CHAR (2) COLUMN

    Error report-

    SQL error: ORA-00904: invalid identifier

    00904, 00000 - '% s: invalid identifier '.

    * Cause:

    * Action:

    I can run the same code in MySQL without error.

    This leads me to think that maybe I'm just bumping into a limit in the free version of PC.

    Any thoughts?

    There is no LIMIT to the 'free' version  If you read the error message he said THAT was not a valid identifier.  Just to show you that I tried your erroneous statement

    ALTER TABLE hf_altertest ADD COLUMN state2 CHAR(2);
    

    and here is the indicator error message in SQL +.

    SQL * more: Production of liberation 12.1.0.2.0 Tue Oct 15 14:34:57 2015

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

    Connected to:

    Oracle Database 11 g Enterprise Edition Release 11.2.0.4.0 - 64 bit Production

    With the partitioning, Real Application Clusters, Automatic Storage Management, OLAP

    and Data Mining options

    Add a COLUMN state2 TANK (2)

    *

    ERROR on line 2:

    ORA-00904: invalid identifier

    As you can see (and as the previous poster of response indicates), the 'COLUMN' KEYWORD is not necessary when adding new columns.  Only when 'RENAME' is used, then you add the keyword COLUMN.

    See the documentation for the syntax of ALTER TABLE here--> http://docs.oracle.com/database/121/SQLRF/statements_3001.htm#SQLRF01001

    See specific clause RENAME syntax here--> http://docs.oracle.com/database/121/SQLRF/statements_3001.htm#i2183480

Maybe you are looking for