Partitioning of a huge table online

Hello world

I have a table of size approximately 700 GB (it has pictures in there, that's why) that is not partitioned (!)

I need to create partitions to do this for each year. It's about 15 partitions.

I read the instructions that apply to partitions (by creating a temporary partitioned table and transfer data to it using the dmbs_redefinition package).

My question is: can I save time if I make a redefinition using logic "a partition at a time" or do I have to apply the redefinition create all partitions at the same time?

It is 700 GB and I'm afraid it will take some time and do not want to risk big downtime (the table is updated frequently).

Thank you in advance.

To answer your question, dbms_redefinition will all the table and the LOB segment to the new silo structure. There is no interruption of service, set apart from the DDL locks that (with luck) your users will not notice. You can suspend the database for a few seconds to ensure that the DDL locks cross.

The question you didn't ask, is "why should I partition the table? Partitioning by date range can be vauable for purposes of maintenance, if use you only local indexes. It can also be useful for the partitioning of pruning, if you don't get a table. I don't think that either these reasons if it is valid for you: only 15 partitions won't be a lot of benefits to pruning, and if maintenance operations are only once a year, it will be not significant for that, either.

So why would you do that? The table size is not a reason. I found that if the partitioning is made without a strategy defined to meet a specific objective, the results can be disastrous.

--

John Watson

Oracle Certified Master s/n

Tags: Database

Similar Questions

  • Need to create the Partition in the history table

    Hello

    I have an audit table that stores the data for the last 8 years in it and the customer wants to retain the data for the last 8 years. Now as adding data to this table is increasing, there is a delay in execution of report which are acquired by querying on this table.

    Basically, they go a from date and to date. Then these date are compared with two columns of dates in the table. The condition of the query will be as below

    TRUNC (NVL (DATE1, DATE2)) > = TRUNC (TO_DATE (?, ' dd/mm/yyyy ""))

    AND TRUNC (NVL (DATE1, DATE2)) < = TRUNC (TO_DATE (?, ' dd/mm/yyyy ""))

    Users can query for any date range.

    I am thinking of creating a Partition of the range on this table for each month during the 8 years of data. Please suggest on the question of whether I should use partition interval range to make it more effective. And would also create an Index on this partition for the above two day columns.

    12 (months) SO * 8 (years) = 98 would be created partitions. This will not overload the schema of database/Tablespace? Y at - it another effective way to set the table.

    Please suggest and let me know for any clarification.

    There are 2 approaches (but not limited to 2) to create the Partition on an existing table:

    Note: There is no ALTER TABLE statement to convert a heap table to a partitioned table.

    1. create a temporary Partitioned table with the same types of data in the column. Take a dump of the original table (HEAP) export and import the dump into the newly created partitioned intermediate table. After checking the data file the original and rename the interim even as the original table.

    2 using the package Oracle DBMS_REDEFINITION automates the steps above from said (not exactly the same steps, however) and its done online - which means there is no required downtime, the original table may undergo DML operations during this process of redefinition. View partitioning of a table online with DBMS_REDEFINITION | Oracle instructor

    According to my understanding if let us know as a partition interval then in April if there is an inserted record then it will create a new partition for the month of April will be of value less than 30 April 2014 "and all other documents created in April will pass under it"

    Yes, it's a feature of 11g, which Oracle manages adding partitions as needed. In earlier versions DBA can add partitions manually from time to time. Reference www.gavinsoorma.com/2009/09/11g-interval-partitioning/

    Here the reason for check the sent_out_datetime NVL will be NULL for few records, so in this case we want to get the records for dates of mapping them to received_datetime

    In addition, try to replace the NVL with COALESCE and test it. This would help improve performance.

  • Type logic Partition of an existing table

    Dear all,

    My database is 10gr 2 and Linux is the operating system.

    One of my table in the production database is huge and contains lots of data. Table is growing daily. There are many queries that users run on this table and the selection criteria is normally the date of entry of the registration, it's an Entrty_Date field with the date data type.

    I want a partition logical on this table in such a way, the table name remains the same, and data are logically partitioned.

    As if the Entry_Date is from 2005, a partition is made on criteria:


    2005-2006
    2006-2007
    .
    .
    2011
    . at the request of the user for records having entry date > 2011... the query is made only this piece of the table, which makes the fast query.

    I hope that I am able to make you understand my problem. If its possible in Oracle please let me know the name of the method and I'll RND on this one. And I have to do it on an existing table that contains a lot of data.

    Thank you
    Imran

    Hello

    You can do this
    http://www.Oracle-base.com/articles/Misc/PartitioningAnExistingTable.php
    I suggest go fill through the myths of have from before backward Oracle documentation and to understand and then to proceed
    http://download.Oracle.com/docs/CD/B10501_01/AppDev.920/a96612/d_redefi.htm

    -Pavan Kumar N

  • I need to use a table online that requires Firefox 3.6. How to do this?

    I'm taking a course online through University of Boston. They provide a table online system called Vista. When I logged in to see if everything is compatible, they have a browser select feature that seeks to ensure that the different features are enabled or compatible. He pointed out that it does not recognize the version of Firefox that I use (9.0.1) and you can find their list of browsers supported by Firefox 3.6. How would I be able to get this version?

    Upgrade to Firefox 3.6.25 (it is the only supported except last 9.0.x), download and run the installer from:

    http://www.Mozilla.org/en-us/Firefox/all-older.html

    Thank you

  • Partitioning of an existing Table using the EXCHANGE PARTITION

    Hi all

    I have one unpartitioned table I partitioned by Exchange, this table has several indexes and constraints (primary and foreign).

    ALTER TABLE notpart_table ADD (
        CONSTRAINT PK_KCESPITI PRIMARY KEY (K_CESP, TIPORD)
            USING INDEX TABLESPACE TBLS_CONTA,
        CONSTRAINT FK_KCONTO_CE FOREIGN KEY (K_CONTO) REFERENCES xxxx (K_CONTO));
    
    CREATE INDEX IX_NFATTURA_CE ON notpart_tab (ANNO_FATTURA, K_REGISTRO, K_REGFA, TIPORD)
        TABLESPACE TBLS_CONTA;
    
    
    
    
    

    after Create a partitioned Table Destination

    notpart_table2, I created the same constraints and indexes defined in notpart_table


    When I run


    ALTER TABLE notpart_table2
      EXCHANGE PARTITION PART_notpart_table2
      WITH TABLE notpart_table
      WITHOUT VALIDATION
      UPDATE GLOBAL INDEXES;
    
    
    
    

    I get: ora-02266

    Why?

    Thanks in advance for any help


    Post edited by: vigilant Rosario

    It is not exactly what you have. Very probably not partitioned table, you are partitioning is the parent to another table table:

    SQL > create table tbl1 (id number)
    2.

    Table created.

    SQL > alter table tbl1
    2 Add the constraint tbl1_pk
    3 primary key
    4.

    Modified table.

    SQL > create table tbl2 (id number)
    2.

    Table created.

    SQL > alter table tbl2
    2 Add the constraint tbl1_fk1
    3 foreign key
    4 references tbl1
    5.

    Modified table.

    SQL > insert into tbl1 values (1)
    2.

    1 line of creation.

    SQL > insert into tbl2 values (1)
    2.

    1 line of creation.

    SQL > create table tbl1_part (id number)
    2 partition by range (id)
    3 (partition p1 values less than (1000000))
    4.

    Table created.

    SQL >
    SQL > alter table tbl1_part
    Exchange 2 partition p1
    3 with table tbl1
    4 without validation
    5 update global indexes
    6.
    with table tbl1
    *
    ERROR at line 3:
    ORA-02266: permit to unique/primary keys in table referenced by foreign keys

    SQL >

    If so, of the foreign key and recreate it pointing to the partitioned table as parent after finished partitioning the table.

    SY.

  • Move the data from the partitions again tablespace - direct table filled by ETL

    Hello

    We have a large composite table date-range/hash partitioned table (using time partitioning 11.2.0.3 range)

    1 partition for each month and each such partition 4 under separate partitions.

    We want to move some data from most significant storage but also direct table and inserted in all the days as part of the data warehouse and large table want to ensure

    operations below result in errors in the data loading procedure

    Suppose also should not take long to run lines 40 million or more each month.

    Select *.

    Of user_tab_partitions

    Where table_name = 'CUSTOMER_TRANSACTION '.

    And nom_partition like 'SYS % '.

    1. (1) Alter table retailer_transaction and rename partition < nom_partition > CUST_PART_ < YYYYMM >

    1. (2) tablespace create dedicated for the month of the affected partition

    1. ((3) alter table retailer_transaction move tablespace subpartition < sys... > < partition_tablespace > created in 2) above

    ALTER table retailer_transaction change the default attributes for the partition < CUST_PART < YYYYMM > < tablespace in 2 above > tablespace)

    4 global index which would eventually rebuild afterwards due to the transition if movement makes no valid.

    Several local bitmap indexes that belong to partitions.

    Thoughts?

    Thank you

    I agree in a good store of data, everything should be according to the best practices ETL or guideline. I guess it is a FACT table, because it's big enough. A method that I can share (followed in the real world big DW) is "ELP" IE Partition Exchange loading. You can find the basic architecture of the Internet.

    The basic architecture is as

    The source (in your case partitioned) Table--> (unpartitioned) intermediate Table--> Table possible target (partitioned)--> the cleaning activities (and overtime).

    You can use any ETL tool for this (I won't mention any other reasons).

    Later, you can delete the original table and use that new table as your FACT table, your application will be available all the time. There are drawbacks as most uses of double-spaced, other than normal ETL these work will take certain amount of resources so that other ALS etc. In addition, if you load a few current days during these activities you plan / program accordingly.

    Your demo is also fine, but regular ETL may fail because you rename the partitions (some uses of ETL tool partition name, in case you ever ELP) also unusable global indexes can cause failure (you have local too?).

  • How add us partition on an existing table?

    Hi gurus,

    What would be the best way to add a partition to an existing table?

    Is there a simple documentation for example?

    Thank you

    What would be the best way to add a partition to an existing table?

    Is there a simple documentation for example?

    Was it something you were ask in an interview?

    You cannot add a partition to a table unless this table is a partitioned table.

    The table is already partitioned? If so, after the DDL.

    The Oracle documentation has examples of adding partitions to a table that is already partitioned

    Partition management

    Adding Partitions

    This section explains how to manually add partitions of a partitioned table and explains why partitions can be added specifically for partitioned more indexes.

    Adding a Partition to a partitioned Table range

    Use of the ALTER TABLE ... ADD PARTITION statement to add a new partition at the end 'high' (the point after the last existing partition). To add a partition at the beginning or in the middle of a table, use the SPLIT PARTITION clause.

  • Cannot add the partition to an existing table.

    Hello

    I don't add the partition to an existing table that is not partitioned, get the error as a type of data not valid, then I'm not find syntax errors.

    ALTER TABLE MESSAGEX_XCHANGE

    ADD THE PARTITION OF RANGE (LAST_MODIFY_TIMESTAMP)

    (

    PARTITION old_data VALUES LESS THAN (To_TIMESTAMP('27/02/2014','DD/MM/YYYY')),

    You see for VALUES LESS THAN (To_TIMESTAMP('28/02/2014','DD/MM/YYYY')) of the PARTITION

    );

    Error report:

    SQL error: ORA-00902: invalid data type

    1. 00000 - "invalid data type".

    * Cause:

    * Action:

    Thank you

    Manon...

    You get this error because your edit statement has an invalid syntax. In addition, you cannot partition a table that is not already configured for partitioning!

    You have to physically re-create the partitioned table in order to add new partitions to it.

  • Syntax for exchanging a partition with an empty table

    Hello

    I have a PLP_2001FY partition and I want to share this partition with an empty table (ex: DRB_WHOLE_DATA_TEMP) structured as DRB_WHOLE_DATA (this table already exists).

    Thank you

    Do you mean that you want to fill the empty array with the contents of the partition?

    If so:

    insert into DRB_WHOLE_DATA_TEMP select * from DRB_WHOLE_DATA partition (plp_2001fy)
    
  • Normalize the names in a huge table using UTL_MATCH

    Hello

    I have a large table (350 million records) with a "full name" column

    This column has a few typos, so I have to 'normalise' the data (only for this column), using UTL_MATCH. JARO_WINKLER_SIMILARITY.

    I did some tests with a small table, and it works to show the similar names:

    SELECT b.SID, b.name FROM typotable a, typotable b utl_match.jaro_winkler_similarity (b.SID, b.name) WHERE BETWEEN 85 and 99 AND a.rowid > b.rowid;


    But:


    (1) the test table was small, by using this code directly on the 350 million accounts table take ages... What can be done about it?


    (2) this shows just the similar names. How can I update the table by searching for similarities, choose one of them as the only value for each name?




    Thank you

    1590733 wrote:

    Yes, I get your point. The thing is that there is no "correct" available names and the original table is huge, that's what I thought:

    -Create a table of secondary NAMES, with unique names. These names would have been generated by match the values similar to one of them (but always the same, no matter if is not one that suits). This should be equivalent to your table 'correctness '.

    -Run the cleaning procedure for updating records

    How can I create this secondary NAMES table? (The column 'genre' is not serious at all, that the 'name' must be set)

    Thanks for your help

    Well, you need to determine what is the logic that would pick one of the incorrect names on the other.  In its current version, you can easily get two incorrect values having the same value of match.  But then you must also consider what creates a 'group' of values that you can get the best in the group.  Using the match itself is not enough to create groups.

    Example:

    SQL > ed

    A written file afiedt.buf

    1 Select a.fname as $fname1, b.fname as fname2

    2, utl_match.jaro_winkler_similarity (a.fname, b.fname) as a match

    3 typotable one

    4 join typotable b on (a.fname! = b.fname)

    where the 5 utl_match.jaro_winkler_similarity (a.fname, b.fname) > = 85

    6 * 1.3 desc order

    SQL > /.

    $FNAME1 FNAME2 MATCH

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

    FROCEN FROZEN 92

    FROZEN FROCEN 92

    FROZEN FROCEN 92

    FROZEN FROZEN 92

    JELLY FROZIN 93

    JELLY FROCEN 92

    FROZEN FROZEN 92

    FROZEN FROZIN 93

    WHIPLASH WIPLASH 96

    WHIPLASH WIPLASH 96

    10 selected lines.

    As you can see, for example, FROCEN has two possible variants, both with a football match of the 92.  The same with others.

    However, you could start cutting things around (and it's really a hack) to get something like:

    SQL > ed

    A written file afiedt.buf

    1 with t as)

    2. Select a.fname as $fname1, b.fname as fname2

    3, utl_match.jaro_winkler_similarity (a.fname, b.fname) as a match

    typotable a 4

    5 join typotable b on (a.fname! = b.fname)

    where the 6 utl_match.jaro_winkler_similarity (a.fname, b.fname) > = 85

    7       )

    8, ch. as)

    9 select $fname1, ($fname1, fname2) greatest as fname2, match

    10, (select count (*)

    11 t t2

    12 where t2.fname2 = t.fname2

    13 and t2.fname1! = t.fname1

    (14) as the NTC

    15 t

    16       )

    17, r as)

    18 select $fname1, fname2, match, cnt

    19, row_number() over (partition by $fname1 by cnt desc, desc match order): the nurse

    20 c

    21       )

    22 select $fname1, fname2

    23 r

    where the 24 rn = 1

    25 * order by 1

    SQL > /.

    $FNAME1 FNAME2

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

    FROZEN FROCEN

    FROZEN FROZEN

    FROZEN FROZEN

    FROZIN FROZIN

    WHIPLASH WIPLASH

    WIPLASH WIPLASH

    6 selected lines.

    but then it depends on your data as to if it will work in all circumstances

  • What is advised to collect statistics for the huge tables?

    We have a staging database, some tables are huge, hundreds GB in size.  Auto stats tasks are performed, but sometimes it will miss deadlines.

    We would like to know the best practices or tips.

    Thank you.

    Improvement of the efficiency of the collection of statistics can be achieved with:

    1. Parallelism using
    2. Additional statistics

    Parallelism using

    Parallelism can be used in many ways for the collection of statistics

    1. Parallelism object intra
    2. Internal parallelism of the object
    3. Inner and Intra object jointly parallelism

    Parallelism object intra

    The DBMS_STATS package contains the DEGREE parameter. This setting controls the intra parallelism, it controls the number of parallel processes to gather statistics. By default, this parameter has the value is equal to 1. You can increase it by using the DBMS_STATS.SET_PARAM procedure. If you do not set this number, you can allow oracle to determine the optimal number of parallel processes that will be used to collect the statistics. It can be achieved if you set the DEGREE with the DBMS_STATS. Value AUTO_DEGREE.

    Internal parallelism of the object

    If you have the 11.2.0.2 version of Oracle database you can set SIMULTANEOUS preferences that are responsible for the collection of statistics, preferably. When there is TRUE value at the same TIME, Oracle uses the Scheduler and Advanced Queuing to simultaneously manage several jobs statistics. The number of parallel jobs is controlled by the JOB_QUEUE_PROCESSES parameter. This parameter must be equal to two times a number of your processor cores (if you have two CPU with 8 cores of each, then the JOB_QUEUE_PROCESSES parameter must be equal to 2 (CPU) x 8 (cores) x 2 = 32). You must set this parameter at the level of the system (ALTER SYSTEM SET...).

    Additional statistics

    This best option corresponds to a partitioned table. If the INCREMENTAL for a partitioned table parameter is set to TRUE and the DBMS_STATS. GATHER_TABLE_STATS GRANULARITY setting is set to GLOBAL and the parameter of DBMS_STATS ESTIMATE_PERCENT. GATHER_TABLE_STATS is set to AUTO_SAMPLE_SIZE, Oracle will scan only the partitions that have changes.

    For more information, read this document and DBMS_STATS

  • problem with prevention card boot partition after partition, bootcamp and change table card

    Hello

    I tried to install windows using bootcamp on my macbook pro 2011, however I messed up with my partition table card, and now I'm not able to start my mac os, disk utility cannot repair my disc and I have no back up. I really need my data. I am able to start under GParted and use gdisk, how do I fix back the plan of partition table so that I can start, back to my Mac OSx.

    Thank you

    -bash-3, 2 # fdisk/dev/disk0

    Disk: geometry / dev/disk0: 60801/255/63 [976773168 sectors]

    Signature: 0xAA55

    From end

    #: cyl hd s - cyl hd s id [Start - size]

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

    1: EA 1023 254 63 - 1023 254 63 [1-976773167] < unknown ID >

    02:00 0 0 0-0 0 0 [0-0] unused

    03:00 0 0 0-0 0 0 [0-0] unused

    04:00 0 0 0-0 0 0 [0-0] unused

    -bash-3, 2 #.

    -bash-# 3.2 diskutil list

    / dev/disk0

    #: NAME SIZE TYPE IDENTIFIER

    0: GUID_partition_scheme * GB 500,1 disk0

    1: EFI 209,7 Mo disk0s1

    2: Apple_CoreStorage GB 372,0 disk0s2

    3: disk0s3 Apple_Boot Boot OS X 650.0 MB

    4: Apple_HFS 127.1 Untitled GB disk0s4

    / dev/disk1

    #: NAME SIZE TYPE IDENTIFIER

    0: Apple_partition_scheme * 1.4 GB disk1

    1: Apple_partition_map disk1s1 30.7 KB

    2: Apple_Driver_ATAPI disk1s2 2.0 KB

    3: Apple_HFS Mac OS X based system 1.4 GB disk1s3

    / dev/disk2

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk2 524,3 KB

    / dev/disk3

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * DIS3 524,3 KB

    / dev/disk4

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk4 524,3 KB

    / dev/disk5

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk5 524,3 KB

    / dev/disk6

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk6 524,3 KB

    / dev/disk7

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * 6.3 MB disk7

    / dev/disk8

    #: NAME SIZE TYPE IDENTIFIER

    0: without title * 2. 1 MB disk8

    / dev/disk9

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk9 1. 0 MB

    / dev/disk10

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk10 524,3 KB

    / dev/disk11

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk11 524,3 KB

    / dev/disk12

    #: NAME SIZE TYPE IDENTIFIER

    0: Untitled * disk12 1. 0 MB

    / dev/disk13

    #: NAME SIZE TYPE IDENTIFIER

    0: FDisk_partition_scheme * disk13 2.1 GB

    1: disk13s1 DOS_FAT_32 MYLINUXLIVE 2.1 GB

    / dev/disk14

    #: NAME SIZE TYPE IDENTIFIER

    0: Apple_HFS MacintoshHD * 371,7 GB disk14

    -bash-3, 2 #.

    -bash-3, 2 #.

    -bash-3, 2 # fdisk

    use: fdisk [-d] [-mbrboot f] [-c cyl head s - h sect] [s size] [-r] [-style] drive

    -i: initialize disk with new MBR

    -sup: update MBR code, table partition to preserve

    -e: Edit mbr disk interactively

    -f: specify non-standard model of MBR

    -chs: specify the geometry of the disk

    S: specify the size of the disk

    r: read about the partition from stdin (implies - i).

    -a: auto-partition with the given style

    -the partition d: dump table

    y: don't ask questions

    -t: test if the drive is partitioned

    'disc' is of the form/dev/rdisk0.

    auto-partition styles:

    boothfs 8Mb boot more HFS + partition (default) root

    entire disc HFS as a HFS partition.

    disk full back like a DOS partition

    entire disk RAID as a partition 0xAC

    -bash-# GPT - r 3.2 show the/dev/disk0

    See the TPG: could not open device 'l': no such file or directory

    start index size summary

    0 1 PMBR

    1 1 Pri GPT header

    2 32 table GPT Pri

    34 6

    40 409600 1 part TPG - C12A7328-F81F-11D2-BA4B-00A0C93EC93B

    409640 726609000 2 part TPG - 53746F72-6167-11AA-AA11-00306543ECAC

    727018640 1269536 3 part TPG - 426F6F74-0000-11AA-AA11-00306543ECAC

    728288176 248222808 4 part TPG - 48465300-0000-11AA-AA11-00306543ECAC

    262151 976510984

    976773135 32 table dry GPT

    976773167 1 dry GPT header

  • SELECT query time-out - huge table

    DBA dear friends,


    DB version 11.1.0.7.  I have a SELECT query that is running long and wedging on. Query joins the 2 tables. It is partitioned hash (16 sheets) and others are not partitioned, each table is with the same volume of data - 230 million lines.

    > Optimizer stats are not outdated

    SELECT only 1 row (as indicated in the PLAN of EXPLAIN) should be fast.

  • Possible to move data in a partitioned into another tablespace table without indexes becoming UNUSABLE?

    Hello

    We use oracle 11.2.0.3 and know that if move us data into partitions to a different tablespace indexes get marked as UNUSABLE.

    It is the range of composite date hash partitioned table.

    As a result, to rebuild the global and local bitmap index.

    Is it possible to transfer data to one another without the index tablespace becomes UNUSABLE?

    Thank you

    Hello

    If you want to update the index (so that it becomes invalid) while you perform the move partition, you can use the index update clause.

    Details are mentioned in the Oracle documentation. Glue one of the page here for quick reference.

    Maintenance of Partitions

    Note: It has an impact on the duration of this sql statement which may increase or decrease depending on the amount of data to move.

    Concerning

    Anurag

  • Partitioning of an existing Table.

    Hi exports.

    We have a table that is not partitioned in our production DB. Now we have to this partition table. Please suggest a solution how can we partition this table as this table is the primary table in the application.

    Kind regards...

    ASIT K. reducing

    AsitK.Mohanty wrote:

    Hi exports.

    We have a table that is not partitioned in our production DB. Now we have to this partition table. Please suggest a solution how can we partition this table as this table is the primary table in the application.

    Kind regards...

    ASIT K. reducing

    The easiest way is to simply create a new table and INSERT the data into the it from the old table. You will need a window of failure for the operation. After the new table is filled you can rebuild the constraints and indexes, rename/move the original table and rename the new table to the old name.

    You can also export the table data and import it into a new partitioned table.

    The short answer is: ALL of the data needs to be moved to new segments. IF the existing data are old and ready to be archived then now is the time to do it. Simply move only the data in the new table.

Maybe you are looking for