Lock tables during partition exchange
Hi,
I want to do the following thing:
there are 9 partitioned tables (set A) and 9 non partitioned (set B).
There is a continuous dataflow into set A.And there is also a dependency between the nine flows within each transaction into set A (there is no dependency between different transactions.).
What I want is to exchange the nine partitions of set A with set B. This because I want to have a performance boost instead of copying the data from A into B.
I need to lock the tables of set A to make sure there is NO insertion of data into one of the tables of set A to avoid loss of dependency and thus loss of data.
I tried several things: lock tables, run autonomous transaction in which the exchange takes place, commit and unlock. But no success.
Who can help me to solve my problem: to lock all nine tables of set A and make sure the dependency remains consistent and no data gets lost?
Thanks.
jurgen
Why you are bothering about LOCKing the table,
you can goahead and do the exchange the table,
since, its ongoing activity, exchanged partition will be there till you merge, drop it.
if you found some more rows after exchange, then you can insert same into that table, or make another table.
Thanks
Similar Messages
-
Bootcamp assistant locks up during partitioning
I have tried running Boot Camp assistant twice now, and both times it has locked up during the partitioning process. After the first lock up I booted into the recovery disk and ran disk utility. I repaired the disk and repaired permissions on the disk to see if that would help. But it still locked up when it got to the partitioning part of Boot Camp assistant. I was wondering if any one had any advice on why this may be happening.
You would be better suited posting in the BC forum, if you don't know of it, please click Boot Camp
-
Table with FK with no Index created will LOCK TABLE during DML ?
Hi all,
Know that always create index for FK on table as FK's value will 99.9% be use in Where query on table.
Had seen info with regards to the above and had not been successfull trying to simulate the above using:
DROP TABLE "TABLE2";
CREATE TABLE "TABLE2"
( "A2" VARCHAR2(10 BYTE),
CONSTRAINT "PK_A2" PRIMARY KEY ("A2") ENABLE
Insert into TABLE2 (A2) values ('AAA');
Insert into TABLE2 (A2) values ('BBB');
Insert into TABLE2 (A2) values ('CCC');
DROP TABLE "TABLE1";
CREATE TABLE "TABLE1"
( "A1" VARCHAR2(10 BYTE),
"A2" VARCHAR2(10 BYTE),
"A3" VARCHAR2(10 BYTE),
CONSTRAINT "PK_A1" PRIMARY KEY ("A1"),
CONSTRAINT "FK_A1_A2" FOREIGN KEY ("A2")
REFERENCES "LSD"."TABLE2" ("A2") ENABLE
Insert into TABLE1 (A1,A2,A3) values ('111','AAA','yyy');
Insert into TABLE1 (A1,A2,A3) values ('222','BBB','ZZZ');
When i UPDATE A3 in TABLE1 using '111' record in SQLPlus without COMMIT,
I was able to UPDATE A3 using '222' in another SQLPlus session, so it does not seems like table is LOCK.
Questions.
1. Am using 10GR2, is the above not applicable to 10G ?
2. Or had understand the above concept wrongly ?
Thanks In Advance
ZackHi Legatti,
I was able to UPDATE A3 using '222' in another SQLPlus session, so it does not seems like table is LOCK. Thought that when updating more than 1 record in TABLE1 will caused TABLE1 to be LOCK.
Now, try to perform an update on the TABLE1 like below: SQL>update table1 set A3='aaa' where A1=111;
And open an another session and perform this SQL below SQL>delete from table2 where A2='BBB'; -- now it's hangs
Yes !!! Very interesting, it hangs until i do a COMMIT on the UPDATE
and DELETE session shows ORA-02292 Integrity Constraint violated as child record found.
Now, when i create a index for A2 on TABLE1, it DOES NOT HANG and shows ORA-2292 immediately.
So, is this the result of having no index for FK column (A2) on TABLE1 and when doing DML ,
before COMMIT, will result in TABLE2 to be hang upon doing DML on TABLE2 ?
Thanks for the valuable lesson learned.
Zack -
Boot Camp Assistant Locking Up During Partitioning
I've rebuilt the drive using Diskwarrior (Drive Genius was suggested to defrag it in another thread, DW does the same thing) After rebuilding it, the program locked up still but at least it didn't leave the invisible partition I had to repair with Disk Utility.
I've tried many different sizes, 100GBs, 80GB and 60GBs, all locked up at the same point
I ran hardware test and got this error
4SNS/1/40000000 : TCOD-101.750
Googling the error code got no results, so I'm not sure if it's related or not
Any other ideas before a full wipe? I really want to play Witcher 2 :<
On that note, what qualifies as a bad hdd? I've had this computer for about a year, and a few months ago due to bootcamp not installing and the computer reporting errors Apple wiped my drive and it was fine.... for a few months and now I have issues again'nuke the drive
punt
you have to backup, reformat the entire drive, and restore.
DW only builds a new directory, period.
There are some hidden GPT and EFI partitions that also have to be free of bad blocks and healthy, but only way to fix those is rebuild the drive via reformat, or in Apple-ese, ERASE. As in "WDxxxxxx" (not "My Computer" volume. -
Primary Key Causing Problem in Interval Partition Exchange
DB : 11.2.0.2
OS : AIX 6.1
I am getting the problem while exchanging data with interval partitioned table. I have a interval partitioned table and a normal staging table having data to be uploaded.
Following are the steps i am doing.
SQL> CREATE TABLE DEMO_INTERVAL_DATA_LOAD (
ROLL_NUM NUMBER(10),
CLASS_ID NUMBER(2),
ADMISSION_DATE DATE,
TOTAL_FEE NUMBER(4),
COURSE_ID NUMBER(4))
PARTITION BY RANGE (ADMISSION_DATE)
INTERVAL (NUMTOYMINTERVAL(3,'MONTH'))
( PARTITION QUAT_1_2012 VALUES LESS THAN (TO_DATE('01-APR-2012','DD-MON-YYYY')),
PARTITION QUAT_2_2012 VALUES LESS THAN (TO_DATE('01-JUL-2012','DD-MON-YYYY')),
PARTITION QUAT_3_2012 VALUES LESS THAN (TO_DATE('01-OCT-2012','DD-MON-YYYY')),
PARTITION QUAT_4_2012 VALUES LESS THAN (TO_DATE('01-JAN-2013','DD-MON-YYYY')));
Table created.
SQL> ALTER TABLE DEMO_INTERVAL_DATA_LOAD ADD CONSTRAINT IDX_DEMO_ROLL PRIMARY KEY (ROLL_NUM);
Table altered.
SQL> SELECT TABLE_OWNER,
TABLE_NAME,
COMPOSITE,
PARTITION_NAME,
PARTITION_POSITION,
TABLESPACE_NAME,
LAST_ANALYZED
FROM DBA_TAB_PARTITIONS
WHERE TABLE_OWNER='SCOTT'
AND TABLE_NAME='DEMO_INTERVAL_DATA_LOAD'
ORDER BY PARTITION_POSITION;
TABLE_OWNER TABLE_NAME COM PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME LAST_ANAL
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_1_2012 1 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_2_2012 2 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_3_2012 3 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_4_2012 4 USERS
SQL> INSERT INTO DEMO_INTERVAL_DATA_LOAD VALUES (10,1,'12-MAR-2012',1000,90);
1 row created.
SQL> INSERT INTO DEMO_INTERVAL_DATA_LOAD VALUES (11,5,'01-JUN-2012',5000,80);
1 row created.
SQL> INSERT INTO DEMO_INTERVAL_DATA_LOAD VALUES (12,9,'12-SEP-2012',4000,20);
1 row created.
SQL> INSERT INTO DEMO_INTERVAL_DATA_LOAD VALUES (13,7,'29-DEC-2012',7000,10);
1 row created.
SQL> INSERT INTO DEMO_INTERVAL_DATA_LOAD VALUES (14,8,'21-JAN-2013',2000,50); ---- This row will create a new interval partition in table.
1 row created.
SQL> commit;
SQL> SELECT TABLE_OWNER,
TABLE_NAME,
COMPOSITE,
PARTITION_NAME,
PARTITION_POSITION,
TABLESPACE_NAME,
LAST_ANALYZED
FROM DBA_TAB_PARTITIONS
WHERE TABLE_OWNER='SCOTT'
AND TABLE_NAME='DEMO_INTERVAL_DATA_LOAD'
ORDER BY PARTITION_POSITION;
TABLE_OWNER TABLE_NAME COM PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME LAST_ANAL
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_1_2012 1 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_2_2012 2 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_3_2012 3 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_4_2012 4 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO SYS_P98 5 USERS
SYS_P98 partition is added to table automatically.
SQL> CREATE TABLE DEMO_INTERVAL_DATA_LOAD_Y (
ROLL_NUM NUMBER(10),
CLASS_ID NUMBER(2),
ADMISSION_DATE DATE,
TOTAL_FEE NUMBER(4),
COURSE_ID NUMBER(4));
Table created.
SQL> INSERT INTO DEMO_INTERVAL_DATA_LOAD_Y VALUES (30,3,'21-MAY-2013',2000,12);
1 row created.
SQL> commit;
Commit complete.
Since, i need a partition in DEMO_INTERVAL_DATA_LOAD table, which can be used in partition exchange, so i create a new partition as below:
SQL> LOCK TABLE DEMO_INTERVAL_DATA_LOAD PARTITION FOR (TO_DATE('01-APR-2013','DD-MON-YYYY')) IN SHARE MODE;
Table(s) Locked.
SQL> SELECT TABLE_OWNER,
TABLE_NAME,
COMPOSITE,
PARTITION_NAME,
PARTITION_POSITION,
TABLESPACE_NAME,
LAST_ANALYZED
FROM DBA_TAB_PARTITIONS
WHERE TABLE_OWNER='SCOTT'
AND TABLE_NAME='DEMO_INTERVAL_DATA_LOAD'
ORDER BY PARTITION_POSITION;
TABLE_OWNER TABLE_NAME COM PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME LAST_ANAL
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_1_2012 1 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_2_2012 2 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_3_2012 3 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO QUAT_4_2012 4 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO SYS_P98 5 USERS
SCOTT DEMO_INTERVAL_DATA_LOAD NO SYS_P102 6 USERS
SQL> ALTER TABLE DEMO_INTERVAL_DATA_LOAD
EXCHANGE PARTITION SYS_P102
WITH TABLE DEMO_INTERVAL_DATA_LOAD_Y
INCLUDING INDEXES
WITH VALIDATION;
ALTER TABLE DEMO_INTERVAL_DATA_LOAD
ERROR at line 1:
ORA-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITIONNow, if i disable/drop the primary key constraint, it works without any problem.
SQL> alter table DEMO_INTERVAL_DATA_LOAD disable constraint IDX_DEMO_ROLL;
Table altered.
SQL> alter table DEMO_INTERVAL_DATA_LOAD drop constraint IDX_DEMO_ROLL;
Table altered.
SQL> ALTER TABLE DEMO_INTERVAL_DATA_LOAD
EXCHANGE PARTITION SYS_P102
WITH TABLE DEMO_INTERVAL_DATA_LOAD_Y
INCLUDING INDEXES
WITH VALIDATION;
Table altered.
SQL> select * from DEMO_INTERVAL_DATA_LOAD partition (SYS_P102);
ROLL_NUM CLASS_ID ADMISSION TOTAL_FEE COURSE_ID
30 3 21-MAY-13 2000 12
SQL> select * from DEMO_INTERVAL_DATA_LOAD_Y;
no rows selectedPlease suggest.First, thanks for posting the code that lets us reproduce your test. That is essential for issues like this.
Because the primary key is global you will not be able to use
INCLUDING INDEXES
WITH VALIDATION;And you will need to add the primary key to the temp table
ALTER TABLE DEMO_INTERVAL_DATA_LOAD_Y ADD CONSTRAINT IDX_DEMO_ROLL_Y PRIMARY KEY (ROLL_NUM);The the exchange will work. You will need to rebuild the primary key after the exchange. -
Partition Exchange during DMLs
Hello,
This question regarding Partition Exchange during DML operations on 10.2.0.3
I have a table that's RANGE-LIST partitioned as follow. Syntaxt may not be perfact..
CREATE TABLE P_TBL
O_DATE DATE,
DOW NUMBER, -- This actually is TO_NUMBER(TO_CHAR(O_DATE,'D'))
SALE_AMT NUMBER,
PARTITION BY RANGE ( DOW)
SUBPARTITION BY LIST ( STATE)
PARTITION P01 VALUE LESS THAN ( 2)
(SUBPARTITION P01_EAST VALUE ('EAST'),
SUBPARTITION P01_WEST VALUE ('WEST'),
SUBPARTITION P01_NORTH VALUE ('NORTH'),
SUBPARTITION P01_SOUTH VALUE ('SOUTH')
PARTITION P02 VALUE LESS THAN ( 3)
(SUBPARTITION P02_EAST VALUE ('EAST'),
SUBPARTITION P02_WEST VALUE ('WEST'),
SUBPARTITION P02_NORTH VALUE ('NORTH'),
SUBPARTITION P02_SOUTH VALUE ('SOUTH')
PARTITION P07 VALUE LESS THAN ( 8)
(SUBPARTITION P07_EAST VALUE ('EAST'),
SUBPARTITION P07_WEST VALUE ('WEST'),
SUBPARTITION P07_NORTH VALUE ('NORTH'),
SUBPARTITION P07_SOUTH VALUE ('SOUTH')
/Other table (NP_TBL_EAST ) is Non partioned table. with the same columns.
CREATE TABLE NP_TBL_[EAST|WEST|SOUTH|NORTH]
O_DATE DATE,
DOW NUMBER,
SALE_AMT NUMBER,
)Now I have 2 processes,
Process 1:
Continuously INSERT the daily-Data in the P_TBL. Assume it's currently inserting data only in Partition P02 (i.e. Monday Partition )
INSERT INTO P_TBL
(O_DATE, DOW,SALE_AMT..... )
VALUES
(:1,:2, :3.... )
Process 2:
Will swap the previous day's( i.e. Sunday's ) data for each region with Partition Exchange mechanism.
ALTER TABLE P_TBL exchange subpartition P01_EAST with table NP_TBL_EAST;
ALTER TABLE P_TBL exchange subpartition P01_NORTH with table NP_TBL_NORTH;
Now questions:
1) What kind of lock Process 1 & process 2 will aquire?
2) Can any of these two processes have risk of failure due to locking?
Thanks in advance for your help
-MaxCreate a dummy partitioned table without constraints and, in a loop that will run for 5 minutes, continuously insert into the table.
While that is running, in a separate session, exchange partitions.
What happens?
And yes I am returning to my instructor role intentionally.
Please report back to the other students the results from your homework assignment. <g> -
Ora 14098 Index mismatch for tables in Alter Exchange Partition
Hi All,
I want to exchange data from retek schema to CONV schema. Both the table have same partition, but there is no data in CONV table.
So I'm populating the data from retek of one particular partition into one staging table and then I'm doing exchanging partition with staging table to CONV table.
I have created the same index and constraints for staging as there are in CONV table.
But When I'm doing exchange partition I'm getting error Index mismatch.
v_parition_name:='mar 2012'
v_stmt := 'create table staging_tab_st_hist as ( select * from retek.abc_st_hist partition(' ||
v_parition_name || ') )';
execute immediate v_stmt;
v_stmt := ' alter table conv.abc_st_hist exchange partition ' ||
v_parition_name ||
' with table staging_tab_st_hist
including indexes without validation';
execute immediate v_stmt;Welcome to the forum!
Whenever you post provide your 4 digit Oracle version (result of SELECT * FROM V$VERSION).
>
Hi All,
I want to exchange data from retek schema to CONV schema. Both the table have same partition, but there is no data in CONV table.
So I'm populating the data from retek of one particular partition into one staging table and then I'm doing exchanging partition with staging table to CONV table.
I have created the same index and constraints for staging as there are in CONV table.
But When I'm doing exchange partition I'm getting error Index mismatch.
v_parition_name:='mar 2012'
v_stmt := 'create table staging_tab_st_hist as ( select * from retek.abc_st_hist partition(' ||
v_parition_name || ') )';
execute immediate v_stmt;
v_stmt := ' alter table conv.abc_st_hist exchange partition ' ||
v_parition_name ||
' with table staging_tab_st_hist
including indexes without validation';
execute immediate v_stmt;
>
I don't see any index creation on the staging table. You said this
>
I have created the same index and constraints for staging as there are in CONV table.
>
But you didn't create the indexes. When you do the CTAS (create table as select) it only creates the table with the same structure; it doesn't create ANY indexes.
Add the code to create the necessary indexes after you populate the staging table. -
Problem in Direct Partition Exchange Loading(PEL)
Hi all,
I am facing a problem during execution of a OWB mapping. The map is using direct partition exchange loading. There are one source and one target table in the map. it is very simple.
While the source and target are in the same schema there is no problem. But when they are in different schemas during execution a warning is given. That is:
ResolveTableNameErrorRTV20006;BIA_RTL_INTERFACE"."SALE_SRC
Here BIA_RTL_INTERFACE is source schema and SALE_SRC is source table.
However the source record is going to the target table as required but the same record also exists in the same table after execution which is not desirable for direct PEL. So i think though the loading is done in target but it is not using the direct Partition Exchange Technique.
Is there some kind of special privileage for Partition Exchange Loading when the source and target are in different schemas in the same database? Plase clarify this. Hope i can explain the problem. Waiting for reply.
Thanks & Regards,
Sumanta Das
KolkataThe error means you are trying to swap a partition that still contains data in a configuration where OWB expects an empty partition. How did you set the "Replace existing data in Target Partition" configuration parameter?
Also, for more details on PEL, review the 10.19 to 10.27 pages of the user manual.
Regards:
Igor -
Explain plan changing after partition exchange
I currently have a data warehouse where I use partition exchange to refresh the data. I'm finding that after a partition exchange of exactly the same data. explain plan changes.
database 11.2.0.2
To demonstrate what I'm doing I simplified the steps.
first I gather stats on the table that will be exchanged and run explain plan
exec dbms_stats.gather_table_stats( ownname=> 'IDW_TARGET', tabname=> 'PROGRAM_DIM' );
Select
FROM IDW_TARGET.ITD_MONTHLY_SUMMARY_FACT A,
IDW_TARGET.GL_PERIOD_DIM B,
IDW_TARGET.PROGRAM_DIM C,
IDW_TARGET.RPT_ENTITY_DIM D
WHERE ASST_SEC_CONCISE_NAME = 'abc'
AND A.GL_PERIOD_KEY = B.KEY
AND A.PROGRAM_KEY = C.KEY
AND A.RPT_ENTITY_KEY = D.KEY
AND B.PERIOD_YEAR >= 2006;
** uses FTS on fact table and runs in 20 seconds. **
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 25M| 71G| 47105 (1)| 00:09:26 | | | | | |
| 1 | PX COORDINATOR | | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10003 | 25M| 71G| 47105 (1)| 00:09:26 | | | Q1,03 | P->S | QC (RAND) |
|* 3 | HASH JOIN | | 25M| 71G| 47105 (1)| 00:09:26 | | | Q1,03 | PCWP | |
| 4 | BUFFER SORT | | | | | | | | Q1,03 | PCWC | |
| 5 | PX RECEIVE | | 4551 | 1773K| 103 (0)| 00:00:02 | | | Q1,03 | PCWP | |
| 6 | PX SEND BROADCAST | :TQ10000 | 4551 | 1773K| 103 (0)| 00:00:02 | | | | S->P | BROADCAST |
| 7 | PARTITION RANGE SINGLE | | 4551 | 1773K| 103 (0)| 00:00:02 | 1 | 1 | | | |
| 8 | TABLE ACCESS FULL | RPT_ENTITY_DIM | 4551 | 1773K| 103 (0)| 00:00:02 | 1 | 1 | | | |
|* 9 | HASH JOIN | | 25M| 61G| 46999 (1)| 00:09:24 | | | Q1,03 | PCWP | |
| 10 | BUFFER SORT | | | | | | | | Q1,03 | PCWC | |
| 11 | PX RECEIVE | | 184 | 35696 | 5 (0)| 00:00:01 | | | Q1,03 | PCWP | |
| 12 | PX SEND BROADCAST | :TQ10001 | 184 | 35696 | 5 (0)| 00:00:01 | | | | S->P | BROADCAST |
| 13 | PARTITION RANGE SINGLE | | 184 | 35696 | 5 (0)| 00:00:01 | 1 | 1 | | | |
|* 14 | TABLE ACCESS FULL | GL_PERIOD_DIM | 184 | 35696 | 5 (0)| 00:00:01 | 1 | 1 | | | |
|* 15 | HASH JOIN | | 25M| 57G| 46992 (1)| 00:09:24 | | | Q1,03 | PCWP | |
| 16 | BUFFER SORT | | | | | | | | Q1,03 | PCWC | |
| 17 | PX RECEIVE | | 4085 | 6829K| 1334 (1)| 00:00:17 | | | Q1,03 | PCWP | |
| 18 | PX SEND BROADCAST | :TQ10002 | 4085 | 6829K| 1334 (1)| 00:00:17 | | | | S->P | BROADCAST |
| 19 | PARTITION RANGE SINGLE| | 4085 | 6829K| 1334 (1)| 00:00:17 | 1 | 1 | | | |
|* 20 | TABLE ACCESS FULL | PROGRAM_DIM | 4085 | 6829K| 1334 (1)| 00:00:17 | 1 | 1 | | | |
| 21 | PX BLOCK ITERATOR | | 71M| 45G| 45650 (1)| 00:09:08 | 1 | LAST | Q1,03 | PCWC | |
| 22 | TABLE ACCESS FULL | ITD_MONTHLY_SUMMARY_FACT | 71M| 45G| 45650 (1)| 00:09:08 | 1 | 141 | Q1,03 | PCWP | |
Predicate Information (identified by operation id):
3 - access("A"."RPT_ENTITY_KEY"="D"."KEY")
9 - access("A"."GL_PERIOD_KEY"="B"."KEY")
14 - filter("B"."PERIOD_YEAR">=2006)
15 - access("A"."PROGRAM_KEY"="C"."KEY")
20 - filter("ASST_SEC_CONCISE_NAME"='abc'')
drop table PELPROGRAMDIMALLDATA; -- Start fresh here and drop the partition that will be exchanged
create table PELPROGRAMDIMALLDATA as select * from PROGRAM_DIM; -- going to use exact same data for partition exchange (only one parition)
alter table PELPROGRAMDIMALLDATA add constraint CON_342 unique ("VALUE" ) using index ;
alter table PELPROGRAMDIMALLDATA add constraint CON_343 primary key ("KEY" ) using index ;
exec dbms_stats.gather_table_stats(ownname=>'IDW_TARGET', tabname=>'PELPROGRAMDIMALLDATA');
alter table PROGRAM_DIM exchange partition ALL_DATA with table PELPROGRAMDIMALLDATA excluding indexes;
** rebuild indexes **
** explain plan for same statement uses nested loop**
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | 2637K| 7514M| 33428 (1)| 00:06:42 | | | | | |
| 1 | PX COORDINATOR | | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10003 | 2637K| 7514M| 33428 (1)| 00:06:42 | | | Q1,03 | P->S | QC (RAND) |
|* 3 | HASH JOIN | | 2637K| 7514M| 33428 (1)| 00:06:42 | | | Q1,03 | PCWP | |
| 4 | BUFFER SORT | | | | | | | | Q1,03 | PCWC | |
| 5 | PX RECEIVE | | 4551 | 1773K| 103 (0)| 00:00:02 | | | Q1,03 | PCWP | |
| 6 | PX SEND BROADCAST | :TQ10000 | 4551 | 1773K| 103 (0)| 00:00:02 | | | | S->P | BROADCAST |
| 7 | PARTITION RANGE SINGLE | | 4551 | 1773K| 103 (0)| 00:00:02 | 1 | 1 | | | |
| 8 | TABLE ACCESS FULL | RPT_ENTITY_DIM | 4551 | 1773K| 103 (0)| 00:00:02 | 1 | 1 | | | |
|* 9 | HASH JOIN | | 2637K| 6511M| 33324 (1)| 00:06:40 | | | Q1,03 | PCWP | |
| 10 | BUFFER SORT | | | | | | | | Q1,03 | PCWC | |
| 11 | PX RECEIVE | | 184 | 35696 | 5 (0)| 00:00:01 | | | Q1,03 | PCWP | |
| 12 | PX SEND BROADCAST | :TQ10001 | 184 | 35696 | 5 (0)| 00:00:01 | | | | S->P | BROADCAST |
| 13 | PARTITION RANGE SINGLE | | 184 | 35696 | 5 (0)| 00:00:01 | 1 | 1 | | | |
|* 14 | TABLE ACCESS FULL | GL_PERIOD_DIM | 184 | 35696 | 5 (0)| 00:00:01 | 1 | 1 | | | |
| 15 | NESTED LOOPS | | 2642K| 6035M| 33318 (1)| 00:06:40 | | | Q1,03 | PCWP | |
| 16 | BUFFER SORT | | | | | | | | Q1,03 | PCWC | |
| 17 | PX RECEIVE | | | | | | | | Q1,03 | PCWP | |
| 18 | PX SEND ROUND-ROBIN | :TQ10002 | | | | | | | | S->P | RND-ROBIN |
| 19 | PARTITION RANGE SINGLE | | 420 | 702K| 220 (0)| 00:00:03 | 1 | 1 | | | |
| 20 | TABLE ACCESS BY LOCAL INDEX ROWID| PROGRAM_DIM | 420 | 702K| 220 (0)| 00:00:03 | 1 | 1 | | | |
|* 21 | INDEX RANGE SCAN | PROGRAM_DIM_IX20 | 420 | | 3 (0)| 00:00:01 | 1 | 1 | | | |
| 22 | PARTITION RANGE ALL | | 6299 | 4201K| 33318 (1)| 00:06:40 | 1 | 9 | Q1,03 | PCWP | |
| 23 | PARTITION LIST ALL | | 6299 | 4201K| 33318 (1)| 00:06:40 | 1 | LAST | Q1,03 | PCWP | |
| 24 | TABLE ACCESS BY LOCAL INDEX ROWID | ITD_MONTHLY_SUMMARY_FACT | 6299 | 4201K| 33318 (1)| 00:06:40 | 1 | 141 | Q1,03 | PCWP | |
| 25 | BITMAP CONVERSION TO ROWIDS | | | | | | | | Q1,03 | PCWP | |
|* 26 | BITMAP INDEX SINGLE VALUE | ITD_MONTHLY_SUMMARY_SK09 | | | | | 1 | 141 | Q1,03 | PCWP | |
Predicate Information (identified by operation id):
3 - access("A"."RPT_ENTITY_KEY"="D"."KEY")
9 - access("A"."GL_PERIOD_KEY"="B"."KEY")
14 - filter("B"."PERIOD_YEAR">=2006)
21 - access("ASST_SEC_CONCISE_NAME"='abc')
26 - access("A"."PROGRAM_KEY"="C"."KEY")
exec dbms_stats.gather_table_stats( ownname=> 'IDW_TARGET', tabname=> 'PROGRAM_DIM' );
** explain plan for same statement uses full table scan**
see first explain plan
Since the stats were not gathered after the partition exchange I would imagine that they would still be used.
Edited by: user12198207 on Feb 7, 2012 8:13 AM
Edited by: user12198207 on Feb 7, 2012 9:47 AMLocking stats did not make any difference. Also, I deleted the stats at the global level leaving just partition stats and it continued to use the nested loop which takes 15+ minutes instead of 20 seconds with the FTS.
In my original situation it listed the stats at the global level as stale after the partition exchange. But after I removed many of the steps and use just what's described in this posts.
select * from dba_tab_statistics
where table_name='PROGRAM_DIM';
shows stale stats=no for both global and partition. Kind of unexpected. Further digging in shows that is just determined by a case statement.
from dba_tab_statistics view ddl
case
when t.analyzetime is null then null
when ((m.inserts + m.deletes + m.updates) >
t.rowcnt *
to_number(DBMS_STATS.GET_PREFS('STALE_PERCENT',
u.name, o.name))/100 or
bitand(m.flags,1) = 1) then 'YES'
else 'NO'
end -
Partition exchange loading for specific subpartitions
Hi All,
Looking at an archive strategy - where we have to archive a specific dataset.
Rather than a insert/delete routine - I was thinking of using partition exchange.
The to-be archived table is interval range partitioned on date, with a list subpartition on country.
It is for specific countries that I want to partition exchange.
create table
test_table
(tbl_id number,
country varchar2(2),
sales_dt date,
volume number)
partition by range (sales_dt) interval (NUMTOYMINTERVAL(1,'Month'))
subpartition by list (country)
Subpartition template
(subpartition p_ireland values ('IR'),
subpartition p_france values ('FR'),
subpartition p_other values (DEFAULT))
(partition before_2008 values less than (to_date('01-JAN-2008','DD-MON-YYYY'))); The data loaded falls into the partitions and subpartitions correctly. All the partitions names are system generated.
When I come to partition exchange for all the 'FR' subpartitions- I can't determine the logic.
Using
Alter table test_table
exchange subpartition system_generated_name
with table TEST_TABLE_ARCH;I can swap out a specific 'known' subpartition.
I know you can use the 'for' logic with Oracle 11g but can't get the syntax to work.
Any ideas?The error means you are trying to swap a partition that still contains data in a configuration where OWB expects an empty partition. How did you set the "Replace existing data in Target Partition" configuration parameter?
Also, for more details on PEL, review the 10.19 to 10.27 pages of the user manual.
Regards:
Igor -
Simulation in Bapi/FM for sales order is locking tables
Hi
We want to use bapi BAPI_SALESORDER_CHANGE or FM SD_SALESDOCUMENT_CHANGE to simulate the effect on prices of a sales order. We must do this during the printing of the sales order. This bapi/FM is locking the sales order tables during the simulation mode. As we are printing from the sales order, the sales order is already locked so we get the error: V1 042 Sales document xxx is currently being processed. Does anyone have a solution to avoid this lock or an alternative to simulate the price from a sales order?
We need to use the simulation of the sales order to capture all manual changes in the sales order pricing.
Kind RegardsHi,
FM BAPI_SALESORDER_SIMULATE gives the same pricing data as BAPI_SALESORDER_CHANGE. you do not need to change an existing document to get the pricing data. Just simulate the creation of a new order.. th prices should be the same as long as you send the same data.
Dev. -
Have anyone had success with this feature in OWB? I've just attempted it but got an "ORA-12841: Cannot alter the session parallel DML state within a transaction". Is there a property somewhere to stop it from generating these alter sessions stmt?
TIA
Hong
Environment:
OWB version 9.0.2.62.3
Oracle9i EE 9.0.1.3.0
Solaris 2.7There is a number of restrictions when using Partition Exchange, please check these conditions are true:
- The partition you are loading into is empty,
- The index is local (i.e. every partition has it's own index),
- All the data you are loading fits into the partition (this is a primary suspect in your case),
- Loading tipe is INSERT (DELETE/INSERT, TRUNCATE/INSERT, CHECK/INSERT should work bu you can get warnings during generation),
Regards:
Igor -
Virtual column and partition exchange load
Hi All,
Can someone tell me that if i have a virtual column on a table in 11g then can we load the data as partition exchange loading into the table.
Thanks & Regards,
Ankit RanaHemant K Chitale wrote:
Why not run a simple test with a dummy table, a few columns (plus a virtual column) and a few partitions ?
Excellent suggestion.
Shouldn't take more than about 30 minutes to create a test case - and if it takes more than 30 minutes the OP needs the practice anyway to get a better feel for the technology.
Hint to OP: make sure you put some data in the "incoming" table, make sure you put some data in the "non-exchanged" partitions, remember to include a unique/pk constraint if you're expecting one on production, and run with sql_trace enabled to see what's happening in the background.
Regards
Jonathan Lewis -
Partition exchange doumentation problems
Oracle 10gR2 EE / Aix5L
I have a partitioned table on which the primary key is DISABLE VALIDATE and want to exchange a single table with a partition.
I did that because documentation "UNIQUE Constraints in a Data Warehouse" says :
"However, there are trade-offs for the data warehouse administrator to consider with DISABLE VALIDATE constraints. Because this constraint is disabled, no DML statements that modify the unique column are permitted against the sales table. You can use one of two strategies for modifying this table in the presence of a constraint:
* Use DDL to add data to this table (such as exchanging partitions)..."
Problem #1 :
"Because this constraint is disabled, no DML statements that modify the unique column are permitted against the sales table."
That sentence lets suppose that DELETEs or UPDATEs (columns different from PK) should be permitted cause they won't break the uniqueness. That's false. In fact, no DML statements at all are permitted.
Problem #2 : It's impossible to exchange a single table with a partition when PK is disable Validate (ORA-25132 : UNIQUE constraint (string.string) disabled and validated in ALTER TABLE EXCHANGE PARTITION
Cause: cannot ALTER TABLE EXCHANGE PARTITION when the partition and the table have a disabled and validated unique constraints AND the unique keys in the partion is not mutually exclusive from the rest of the table.)
The only way to succeed is to NOValidate the PK, exchange the table and the partition, and Validate the PK. I precise that "Validate PK" succeeds and means that "the unique keys in the partion IS mutually exclusive from the rest of the table."
Some explanations or advices...
Thanks for reading my message.jpsql wrote:
For those interested.
Yes, it is possible to exchange a single table with a partition. The PK of the single table was not VALIDATE. The PK of the partitioned table and the one of the single table have to be both DISBABLED and VALIDATED.Could you elaborate a bit on this? What was exactly the difference to your initial setup? I think I understand that the PK of your unpartitioned table was initially NOT VALIDATED (status ENABLED/DISABLED?) whereas the PK on your partitioned table was VALIDATED, but DISABLED. Now you've VALIDATED the PK of your unpartitioned table (and DISABLED it?) and then you were able to perform the exchange partition without an error message?
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/ -
Hello,
When I am trying to do a partition exchange between one unpartitioned and partitioned table I am getting the following error
ORA-08103: object no longer exists
The indexes of the two table matches. I donot know what caused this problem. Can you please help me in resolving this??
Thanks
SathishHi,
Check Metalink for this.
There are a lot of bugs related to this error.
Also check this blog.
Best Regards,
Alex
Maybe you are looking for
-
Hi, I've been using my Powerbook to connect to my TV and watch QuickTime files using the S-Video port on the back. However recently the output flicked from colour to mono when I plugged the cable in and now I can't seem to get it to display in colour
-
Do I need to update to iOS6 before I switch to my new iPhone?
Hello! I have an iPhone 5 on its way to me, and I was wondering if I needed to upgrade my current iPhone 3GS to iOS6. I obviously will want to migrate all of my data over to my new phone, and I wasn't sure if the two phones need to be running the s
-
N86 8MP and bleutooth: "Phone could not be verifie...
Hello all, I have a N86 8MP with a problem. I cannot connect it to my PC with PC Suite by using bleutooth. PC Suite can find the phone, but after entering the password (usually 123) it says "phone cannot be verified". Software on the phone is updated
-
Iphone keeps showing not enough storage,
messagr saysd Not enough storage, the iphone cannot be backed up because there is not enought iCloud Storage available. Cannot press settings or cancel and cannot switch phone off. Have bacled up phone and downloaded new version of itunes,
-
Hi Is there a way of creating a spanned file system with any of the current zip utilities (Native LabView or OpenG etc.)? Effectively the result should be z01, z02, etc. This format is something that both WinRAR and WinZIP accomplish, so the output w