Moving LOB column to a different tablespace

When I ruining the following script
ALTER TABLE T_Transaction_Image+
MOVE LOB(RCSCOMPRESSED_IMAGE,CAMERA_PHOTO_1,CAMERA_PHOTO_2,NUMBER_PLATE)
STORE AS TABLESPACE IMAGE
It executed but new insert statement save records in old tablespace
thanks in advance
Edited by: abdul moyed on Mar 9, 2011 6:12 PM

Dear Sir
N Gasparotto wrote:
It executed but new insert statement save records in old tablespaceHow have you checked it ?
Could you post the result of the following :
select table_name,column_name,tablespace_name from user_lobs where table_name='T_TRANSACTION_IMAGE';Nicolas.after executing above select statement zero record selected msg show.
*0 record(s) selected*

Similar Messages

  • Moving sys.aud$ to a different tablespace other than system

    Hi,
    I have a 10g RAC database system with a high volume of activity and would like to monitor a large slice of it using audit.
    I have reviewed all options of audit trails and chose “db, extended” to be the most suitable for my purposes!
    I’ve noticed that all audit data goes to sys.aud$ table in system tablespace.
    I have 3 questions:
    1. What is the logic behind putting this table in systems tablespace and not sysaux (10g)?
    2. Can I move sys.aud$ table to a different tablespace (should I expect trouble for doing so)?
    3. Is there any RAC implication if I move sys.aud$ table to a different tablespace?
    Regards,
    Tal Olier
    [email protected]

    That's true, it's not recommanded to move a sys table... but we can find some good explanation for this one for aud$ table.<br>
    See Metalink Note 72460.1 : Moving AUD$ to another tablespace and adding triggers to AUD$<br>
    Or google search give some good results.<br>
    Nicolas.

  • Table with LOB column

    Hi,
    I have a proble. How to move a table with LOB colum? How to create a table with LOB column by specifying another tablespace for LOB column?
    Please help me.
    Regards,
    Mathew

    What is it that you are not able to find?
    The link that I provided was answer to your second question.

  • Moving partioned tables to different tablespaces in oracle 11g.

    Dear All,
    I need to move the partitioned table to different tablespace. I moved all the partitions individually and also the index.
    however i have a issue now, when i check the view user_tables or dba_tables, i see null tablespaces correspomding to the table in the tablespace_name column.
    how can i see the tablespace name in these views.

    Even thouh Sb has given you the correct answer, I am just showing you below cut and paste sqlplus screen of 11.2.0.1 :
    test1@ORCL> create table t (x number)
      2    partition by list (x)
      3    (partition p1 values (10),
      4    partition p2 values (20));
    Table created.
    test1@ORCL> select table_name,tablespace_name from user_tables;
    TABLE_NAME                     TABLESPACE_NAME
    T
    1 row selected.
    ---Means tablespace_name.user_tables is always null for partition table(s).
    ---Ok, then how do I see the tablespace name?
    test1@ORCL> select table_name, partition_name,tablespace_name
      2  from user_tab_partitions
      3  where table_name = 'T';
    TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME
    T                              P1                             USERS
    T                              P2                             USERS
    2 rows selected.
    test1@ORCL> ALTER TABLE T MOVE PARTITION P1 TABLESPACE EXAMPLE;
    Table altered.
    test1@ORCL> select table_name, partition_name,tablespace_name
      2  from user_tab_partitions
      3  where table_name = 'T';
    TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME
    T                              P1                             EXAMPLE
    T                              P2                             USERS
    2 rows selected.
    test1@ORCL> select table_name,tablespace_name from user_tables;
    TABLE_NAME                     TABLESPACE_NAME
    T
    1 row selected.Just for your information please.
    Regards
    Girish Sharma

  • User_lobs and user_segments view shows different tablespace for lob segment

    Hi,
    I am trying to move lob in different tablespace for partitioned table.
    I used
    alter table <table_name> move partition <partition_name> lob(lob_column) store as (tablespace <tablespace_name>);
    alter index <index_name> rebuild partition <partition_name> tablespace <tablespace_name>
    ALTER TABLE <table_name> MODIFY DEFAULT ATTRIBUTES TABLESPACE <tablespace_name>
    ALTER INDEX  <index_name> modify default ATTRIBUTES TABLESPACE <tablespace_name>
    Database - 10.2.0.5
    OS- HP Itanium 11.31
    I can see in user_lob_partitions, user_segments and  user_part_tables shows me new tablespace information
    whereas user_lobs and user_part_indexes shows me different information regarding tablespace.
    I checked some documents in metalink but didnt help me.
    I think that I am missing something or doing some step wrong.
    Please help.
    SQL> select partition_name, lob_partition_name, tablespace_name from user_lob_partitions where table_name in ('TRB1_PUB_LOG','TRB1_SUB_ERRS','TRB1_PUB_LOG') ;
    PARTITION_NAME                 LOB_PARTITION_NAME             TABLESPACE_NAME
    S2000                          SYS_LOB_P8585                  USAGE_REORG_TBS
    S2001                          SYS_LOB_P8587                  USAGE_REORG_TBS
    S2003                          SYS_LOB_P8589                  USAGE_REORG_TBS
    S2004                          SYS_LOB_P8591                  USAGE_REORG_TBS
    S2005                          SYS_LOB_P8593                  USAGE_REORG_TBS
    S2006                          SYS_LOB_P8595                  USAGE_REORG_TBS
    S2007                          SYS_LOB_P8597                  USAGE_REORG_TBS
    S2008                          SYS_LOB_P8599                  USAGE_REORG_TBS
    S2010                          SYS_LOB_P8601                  USAGE_REORG_TBS
    S2011                          SYS_LOB_P8603                  USAGE_REORG_TBS
    S2012                          SYS_LOB_P8605                  USAGE_REORG_TBS
    S2013                          SYS_LOB_P8607                  USAGE_REORG_TBS
    S2014                          SYS_LOB_P8609                  USAGE_REORG_TBS
    S2015                          SYS_LOB_P8611                  USAGE_REORG_TBS
    S2888                          SYS_LOB_P8613                  USAGE_REORG_TBS
    S2999                          SYS_LOB_P8615                  USAGE_REORG_TBS
    S3000                          SYS_LOB_P8617                  USAGE_REORG_TBS
    S3001                          SYS_LOB_P8619                  USAGE_REORG_TBS
    S3004                          SYS_LOB_P8621                  USAGE_REORG_TBS
    S3005                          SYS_LOB_P8623                  USAGE_REORG_TBS
    S3006                          SYS_LOB_P8625                  USAGE_REORG_TBS
    S3007                          SYS_LOB_P8627                  USAGE_REORG_TBS
    S3008                          SYS_LOB_P8629                  USAGE_REORG_TBS
    S3009                          SYS_LOB_P8631                  USAGE_REORG_TBS
    S3010                          SYS_LOB_P8633                  USAGE_REORG_TBS
    S3011                          SYS_LOB_P8635                  USAGE_REORG_TBS
    S3012                          SYS_LOB_P8637                  USAGE_REORG_TBS
    S3013                          SYS_LOB_P8639                  USAGE_REORG_TBS
    S3014                          SYS_LOB_P8641                  USAGE_REORG_TBS
    S3015                          SYS_LOB_P8643                  USAGE_REORG_TBS
    S3050                          SYS_LOB_P8645                  USAGE_REORG_TBS
    SMAXVALUE                      SYS_LOB_P8647                  USAGE_REORG_TBS
    32 rows selected.
    SQL> select TABLE_NAME,COLUMN_NAME,SEGMENT_NAME,TABLESPACE_NAME,INDEX_NAME,PARTITIONED from user_lobs where TABLE_NAME in ('TRB1_PUB_LOG','TRB1_SUB_ERRS','TRB1_SUB_LOG') ;
    TABLE_NAME                     COLUMN_NAME                    SEGMENT_NAME                   TABLESPACE_NAME                INDEX_NAME                     PAR
    TRB1_SUB_ERRS                  GENERAL_DATA_C                 SYS_LOB0006703055C00017$$      TRBDBUS1LNN1                   SYS_IL0006703055C00017$$       YES
    TRB1_SUB_LOG                   GENERAL_DATA_C                 SYS_LOB0006703157C00017$$      TRBDBUS1LNN1                   SYS_IL0006703157C00017$$       YES
    TRB1_PUB_LOG                   GENERAL_DATA_C                 SYS_LOB0006702987C00014$$      TRBDBUS1LNN1                   SYS_IL0006702987C00014$$       YES
    SQL> SQL> select unique segment_name ,tablespace_name from user_Segments where segment_name in (select SEGMENT_NAME from user_lobs where TABLE_NAME in('TRB1_PUB_LOG','TRB1_SUB_ERRS','TRB1_SUB_LOG') );
    SEGMENT_NAME                                                                      TABLESPACE_NAME
    SYS_LOB0006702987C00014$$                                                         USAGE_REORG_TBS
    SYS_LOB0006703055C00017$$                                                         USAGE_REORG_TBS
    SYS_LOB0006703157C00017$$                                                         USAGE_REORG_TBS
    SQL> select unique segment_name ,tablespace_name from user_Segments where segment_name in (select INDEX_NAME from user_lobs where TABLE_NAME in('TRB1_PUB_LOG','TRB1_SUB_ERRS','TRB1_SUB_LOG') );
    SEGMENT_NAME                                                                      TABLESPACE_NAME
    SYS_IL0006702987C00014$$                                                          USAGE_REORG_TBS
    SYS_IL0006703055C00017$$                                                          USAGE_REORG_TBS
    SYS_IL0006703157C00017$$                                                          USAGE_REORG_TBS
    SQL> select unique index_name,def_tablespace_name from user_part_indexes where table_name in ('TRB1_PUB_LOG','TRB1_SUB_ERRS','TRB1_SUB_LOG');
    INDEX_NAME                     DEF_TABLESPACE_NAME
    SYS_IL0006702987C00014$$       TRBDBUS1LNN1
    SYS_IL0006703055C00017$$       TRBDBUS1LNN1
    SYS_IL0006703157C00017$$       TRBDBUS1LNN1
    TRB1_PUB_LOG_PK                USAGE_REORG_IX_TBS
    TRB1_SUB_ERRS_1IX              USAGE_REORG_IX_TBS
    TRB1_SUB_ERRS_1UQ              USAGE_REORG_IX_TBS
    TRB1_SUB_ERRS_2IX              USAGE_REORG_IX_TBS
    TRB1_SUB_LOG_1IX               USAGE_REORG_IX_TBS
    TRB1_SUB_LOG_PK                USAGE_REORG_IX_TBS
    SQL> select unique def_tablespace_name from user_part_tables where table_name in ('TRB1_PUB_LOG','TRB1_SUB_ERRS','TRB1_SUB_LOG');
    DEF_TABLESPACE_NAME
    USAGE_REORG_TBS
    Please let me know if some more details required.

    >whereas user_lobs and user_part_indexes shows me different information regarding tablespace.
    do you see different results after starting a new session after the ALTER statements were issued?

  • When comparing database tables with lob columns via "Database diff" in different environments indexes are shown as different

    When using "Database diff" selecting other schemas only for compare own objects are shown too!Hi!
    For tables with lob columns (clob, blob, etc.) indexes with system names are automatically created per lob column.
    If I am on different database instances (eg. dev/test) these system names can differ and are shown as differences, but these is a false positive.
    Unfortunately there is now way to influence the index names.
    Any chance to fix this in sql developer?
    Best regards
    Torsten

    Only the Sql Dev team can respond to that question.
    Such indexes should ONLY be created by Oracle and should NOT be part of any DDL that you, the user, maintains outside the database since they will be created by Oracle when the table is created and will be named at that time.
    It is up to the Sql Dev team to decide whether to deal with that issue and how to deal with it.

  • Moving objects into different tablespaces

    Hi Gurus,
    Here is my query .
    I have 40gb space to have dataset from production database.
    Test enviornment will be refreshed with production database.
    From testing enviornment development will be refreshed to aviod any connections to production.
    As part of data copying to dev env is depending on the conditions given by business.
    So my question comes here
    Initially I will be dumpring all the data to one tablespace in one tablespace of development environment.
    It could take 39 to 40GB.
    Now i want to move objects into different tablespaces accoring to storage clause and no of records .
    New tablespaces will be created in development enviornment and will be created in same 40GB.
    Space is constraint in dev env and cann't be extended.
    How can i create tablespaces into the dev env and move objects into them?
    I hope you understood my queries ...
    In simple
    TESTING ENV - - - -- - - - > DEV ENV(Initially one tablespace for all tables/objects) - - -- -- ---- >DEV ENV(Objects in diiferent tablespaces )

    You say:
    While creating scripts of tables we are removing all tablespace names as we will be having 3 tablespaces at target that is also after loading the data into them.Don't remove the TS clause, but replace the TS so-and-so with TS that-and-that.
    Or replace tablespaces a, b and c with x+, and d* and e with y*+.
    This can be automated, but you will have to write some logic for that.
    Because ... we will be having only 3 tablespaces in DEV. ex NEWYORK tablespace is in production but it won't be created in DEv , istead all the objects into that tablespace will be moved to large table space.
    As I said: You will need a code which greps for TS NEWYORK* and replaces it with +<your_big_TS>+.
    So once again: Where is the problem?
    It's just a question of coding.

  • Moving indexes to a different tablespace in siebel.

    Hi,
    While installation we gave same SIEBEL tablespace as default tablespace for indexes also , now I would like to move all indexes to a different tablespace. Is there any specifis utility / procedure available to move (or) recreate indexes .. or can we do it in Database using alter index <index_name> command...
    Thank You,
    Sunil.

    You do not move constraints.
    You can use the command:
    ALTER INDEX index_name REBUILD TABLESPACE new_tablespace;

  • How to move lobsegment and  lobindex to a different Tablespace

    Oracle Version: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit
    Os: Solaris 10
    Hello Everybody,
    I want to move a lobsegment and a lobindex to a differrent tablespace.
    But when i am executing the following statement in order to move the LOBINDEX I am getting the errors listed below:
    SQL> ALTER INDEX SYS_IL0000012358C00008$$ REBUILD TABLESPACE INDX;
    ALTER INDEX SYS_IL0000012358C00008$$ REBUILD TABLESPACE INDX
    ERROR at line 1:
    ORA-02327: cannot create index on expression with datatype LOB
    Is there any differrent commands/methods of moving the LOBSEGMENT/LOBINDEX to a differrent tablespace.
    Any help Appreciated..
    Regards,
    Prosenjit Mukherjee.

    Hi,
    Assuming that I have table "TEST" in USERS TableSpace
    CREATE TABLE TEST
    TEST_ID NUMBER NOT NULL,
    TEST_NAME CLOB,
    CONSTRAINT PK_TEST PRIMARY KEY(TEST_ID)
    SQL> ALTER TABLE TEST MOVE TABLESPACE EXAMPLE;
    Above command will move the table to new tablespace but will not move the CLOB segment and it will still be in original tablespace. This is because LOB data is stored outside of the table.
    Check the tablespace of the CLOB column by issuing following sql.
    SQL> SELECT index_name, tablespace_name
    FROM user_indexes WHERE table_name = ‘TEST’;
    INDEX_NAME TABLESPACE_NAME
    SYS_IL0000073575C00002$$ USERS
    In order to move CLOB column to different tablespace, we have to issue following command.
    SQL> ALTER TABLE TEST MOVE LOB(TEST_NAME) STORE AS (TABLESPACE EXAMPLE);
    In above example, TEST_NAME is the CLOB column which we want to move to new tablespace and EXAMPLE is target tablespace. Above command will successfully move LOB segments to the new tablespace. We can verify it by issuing same sql again.
    SQL> SELECT index_name, tablespace_name
    FROM user_indexes WHERE table_name = ‘TEST’;
    INDEX_NAME TABLESPACE_NAME
    SYS_IL0000073575C00002$$ EXAMPLE
    - Pavan Kumar N

  • Questions on Lob-Columns

    Hi,
    i´m working still along time with Oracle, but not very often with Lob-Types.
    The docs and metalink didn´t helped me very much with the following questions:
    1. What is the maximum length of a CLOB Datatype in PL/SQL (long ago it was 32767 Bytes, but now (10.2) ?)
    2. Is empty_blob()/empty_clob() still necessary in 10.2? or when do i use it?
    3. What is the maximum length of a pl/sql clob datatype when i update a clob column in a table?
    declare
    c clob;
    begin
    c:=.......... very long;
    update t set col=c where id=1;
    end;
    4. Does a select in pl/sql return a locator or the data ob the lob (If locator, is there a easy way the read the contents of a clob without dbms_lob.read?)
    5. Is there dbms_lob Package faster/better/??? then using insert/update/delete direct on the column?
    Thanks
    Marco
    Message was edited by:
    mpatzwah

    You may find the following link useful:
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#sthref173
    E.g., search for CLOB yields:
    CLOB objects can store up to (4 gigabytes -1) * (the value of the
    CHUNK parameter of LOB storage) of character data.
    If the tablespaces in your database are of standard block size,
    and if you have used the default value of the CHUNK parameter
    of LOB storage when creating a LOB column, then this is
    equivalent to (4 gigabytes - 1) * (database block size).
    CLOB objects have full transactional support. Changes made
    through SQL, the DBMS_LOB package, or the Oracle Call
    Interface (OCI) participate fully in the transaction.
    CLOB value manipulations can be committed and rolled back.
    However, you cannot save a CLOB locator in a PL/SQL or
    OCI variable in one transaction and then use it in another
    transaction or session.

  • Large Block Chunk Size for LOB column

    Oracle 10.2.0.4:
    We have a table with 2 LOB columns. Avg blob size of one of the columns is 122K and the other column is 1K. so I am planning to move column with big blob size to 32K chunk size. Some of the questions I have is:
    1. Do I need to create a new tablespace with 32K block size and then create table with chunk size of 32K for that LOB column or just create a table with 32K chunk size on the existing tablespace which has 8K block size? What are the advantages or disadvatanges of one approach over other.
    2. Currently db_cache_size is set to "0", do I need to adjust some parameters for large chunk/block size?
    3. If I create a 32K chunk is that chunk shared with other rows? For eg: If I insert 2K block would 30K block be available for other rows? The following link says 30K will be a wasted space:
    [LOB performance|http://www.oracle.com/technology/products/database/application_development/pdf/lob_performance_guidelines.pdf]
    Below is the output of v$db_cache_advice:
    select
       size_for_estimate          c1,
       buffers_for_estimate       c2,
       estd_physical_read_factor  c3,
       estd_physical_reads        c4
    from
       v$db_cache_advice
    where
       name = 'DEFAULT'
    and
       block_size  = (SELECT value FROM V$PARAMETER
                       WHERE name = 'db_block_size')
    and
       advice_status = 'ON';
    C1     C2     C3     C4     
    2976     368094     1.2674     150044215     
    5952     736188     1.2187     144285802     
    8928     1104282     1.1708     138613622     
    11904     1472376     1.1299     133765577     
    14880     1840470     1.1055     130874818     
    17856     2208564     1.0727     126997426     
    20832     2576658     1.0443     123639740     
    23808     2944752     1.0293     121862048     
    26784     3312846     1.0152     120188605     
    29760     3680940     1.0007     118468561     
    29840     3690835     1     118389208     
    32736     4049034     0.9757     115507989     
    35712     4417128     0.93     110102568     
    38688     4785222     0.9062     107284008     
    41664     5153316     0.8956     106034369     
    44640     5521410     0.89     105369366     
    47616     5889504     0.8857     104854255     
    50592     6257598     0.8806     104258584     
    53568     6625692     0.8717     103198830     
    56544     6993786     0.8545     101157883     
    59520     7361880     0.8293     98180125     

    With only a 1K LOB you are going to want to use a 8K chunk size as per the reference in the thread above to the Oracle document on LOBs the chunk size is the allocation unit.
    Each LOB column has its own LOB table so each column can have its own LOB chunk size.
    The LOB data type is not known for being space efficient.
    There are major changes available on 11g with Secure Files being available to replace traditional LOBs now called Basic Files. The differences appear to be mostly in how the LOB data, segments, are managed by Oracle.
    HTH -- Mark D Powell --

  • Export Import with different tablespaces

    Does anyone know if there is a way to export from one database (creating a dmp file) and then importing into another database with different tablespaces? I have tried this and get this error:
    ORA 959. It complained that the tablespace doesnt exist (which it doesnt). Is there a way I can change the export or import parameters to avoid this and just use the default tablespaces?
    I may well be missing the point here so please feel free to tell me I am being a fool.
    Thanks
    Johan

    Example. All these tables are from the same schema with the same tablespace specified in the dmp file. There are many more and 90 % fail but not all.
    importing SCHEMA1 objects into SCHEMA2
    IMP-00017: following statement failed with ORACLE error 959:
    "CREATE TABLE "ACCOUNT_RPRT_NOT_TOBE_PUBLISH" ("O__NUM" CHAR(13) NOT NULL EN"
    "ABLE, "O__ST" NUMBER(4, 0) NOT NULL ENABLE, "STEP_COUNTER" NUMBER(7, 0), "S"
    "TATUS" NUMBER(1, 0), "RETRY_COUNTER" NUMBER(5, 0), "RESTART_COUNTER" NUMBER"
    "(5, 0), "PID" NUMBER(3, 0), "OBJ_LOCK" VARCHAR2(10), "MYFILE" VARCHAR2(200)"
    ", "LONG_FIELD" CLOB, "LAST_SELECT_B_S" VARCHAR2(250), "LAST_SELECTION" VARC"
    "HAR2(250), "L_EXECUTION_CTRL" CHAR(13), "ID" NUMBER(6, 0), "ERROR_COUNTER" "
    "NUMBER(7, 0), "CREATION_TIME" NUMBER(5, 0), "CREATION_DATE" NUMBER(6, 0), ""
    "COMPLETION_TIME" NUMBER(5, 0), "COMPLETION_DATE" NUMBER(6, 0), "COMMIT_COUN"
    "TER" NUMBER(5, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(I"
    "NITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE "AIA_DATA_T_256K" LO"
    "GGING NOCOMPRESS LOB ("LONG_FIELD") STORE AS (TABLESPACE "AIA_DATA_T_256K""
    " ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE STORAGE(INITIAL 65"
    "536 FREELISTS 1 FREELIST GROUPS 1))"
    IMP-00003: ORACLE error 959 encountered
    ORA-00959: tablespace 'AIA_DATA_T_256K' does not exist
    . . importing table "ACTUARIAL_RPT_CNTR" 0 rows imported
    . . importing table "ACTUARIAL_RPT_CVRG" 0 rows imported
    . . importing table "ALIS_CANCEL_BILLING" 2799 rows imported

  • Copy Objects having LOB columns between database

    Hi,
    I want to know the easiest way to copy the table having one LOB column from one database to another.
    Table contains 900K records and create table <tablename> as select is taking hours. Also tried with Insert into <tablename> is also taking much time. and export is giving error DR$SOLUTION_NOTE_IDX$I doesnot exist.
    Regards,
    Munish Khosla

    You have 900K records with LOB. But what is the size of LOBs? If it is, say 1M per row on average then you've got 900G of data. How can you expect to copy it in less than "hours"? Try to copy 900G from one HD to another (if you have 900G disks at hand:o)
    You can try transportable tablespaces (not that much of an expert on them)

  • ASSM and table with LOB column

    I have a tablespace created with ASSM option. I've heard about that tables with LOB columns can't take the advantage of ASSM.
    I made a test : create a table T with BLOB column in a ASSM tablespace. I succeeded!
    Now I have some questions:
    1. Since the segments of table T can't use ASSM to manage its blocks, what's the actrual approach? The traditional freelists??
    2. Will there be some bad impacts on the usage of the tablespace if table T becomes larger and larger and is used frequently?
    Thanks in advance.

    Can you explain what you mean by #1 because I believe it is incorrect and it does not make sense in my personal opinion. You can create a table in an ASSM tablespace that has a LOB column from 9iR2 on I believe (could be wrong). LOBs don't follow the traditional PCTFREE/PCTUSED scenario. They allocate data in what are called "chunks" that you can define at the time you create the table. In fact I think the new SECUREFILE LOBs actually require ASSM tablespaces.
    HTH!

  • Shrink table with LOB column

    Hello,
    I have a table with 1.000.000 BLOB records. I updated almost a half of the records with NULL. Now I try to reclaim the free space using:
    ALTER TABLE table MODIFY LOB (column) (SHRINK SPACE);
    It's still running from some time, but what I am surprised about is that this operation generates a lot of redo logs (the full table had 30Gb, after the update it should have 15Gb, and by now I already have about 8Gb of generated archive logs).
    Do you know why this operation generates redo logs?
    Thank you,
    Adrian

    The REDO stream that Oracle generates is full of physical addresses (i.e. ROWIDs). If you run an update statement
    UPDATE some_table
      SET some_column = 4
    WHERE some_key = 12345;Oracle actually records in the REDO the logical equivalent of
    UPDATE some_table
      SET some_column = 4
    WHERE ROWID = <<some ROWID>>That is, Oracle converts your logical SQL statement into a series of updates to a series of physical addresses. That's a really helpful thing if the REDO has to be re-applied at a later date because Oracle doesn't have to do all the work of processing the logical SQL statement again (this would be particularly useful if your UPDATE statement were running a bunch of queries that took minutes or hours to return).
    But that means that if you are physically moving rows around, you have to record that fact in the redo stream. Otherwise, if you had to re-apply the redo information (or undo information) in the future, the physical addresses stored in the redo logs may not match the physical addresses in the database. That is, if you move the row with SOME_KEY = 12345 from ROWID A to ROWID B and move the row with SOME_KEY = 67890 from ROWID C to ROWID A, you have to record both of those moves in the redo stream so that the statement
    UPDATE some_table
      SET some_column = 4
    WHERE ROWID = <<ROWID A>>updates the correct row.
    Justin

Maybe you are looking for