Update in table partition by hash

I have a table partitioned by hash. I want to make some updates (not on the partition key column and also not based on this column, i.e this column is not used in where clause).
Do I need to specify partition name in the query?
For a concrete example:
CREATE TABLE invoices
(invoice_id NUMBER NOT NULL,
customer_id NUMBER NOT NULL,
invoice_date DATE NOT NULL,
comments VARCHAR2(500))
PARTITION BY HASH (customer_id)
PARTITIONS 10
primary key is customer_id + invoice_date
I need to update invoice_id based on the rowid, like update invoices set invoice_id = MEMO_ID_1SQ.nextval where rowid = <variable>. I will be running this query from multiple processes and I want to make sure they are hitting different partitions, so they actually run in parallel.
Thanks in advance,
Radu

Radu,
You can use parallel hint on your update statement.
update /*+ PARALLEL(invoices, 4) */  invoices set invoice_id = MEMO_ID_1SQ.nextval where rowid = <variable>;See following execution plan for both with and without using parallel option
SQL> update interfacerecords set status=1 where interfaceid=5;
200000 rows updated.
Elapsed: 00:00:03.75
Execution Plan
Plan hash value: 3154550297
| Id  | Operation          | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
|   0 | UPDATE STATEMENT   |                  |   200K|  3125K|   128   (3)| 00:00:02 |
|   1 |  UPDATE            | INTERFACERECORDS |       |       |            |          |
|*  2 |   TABLE ACCESS FULL| INTERFACERECORDS |   200K|  3125K|   128   (3)| 00:00:02 |
Predicate Information (identified by operation id):
   2 - filter("INTERFACEID"=5)
Statistics
        262  recursive calls
     458353  db block gets
       1539  consistent gets
        378  physical reads
   91750476  redo size
        655  bytes sent via SQL*Net to client
        585  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
     200000  rows processed
SQL> commit;
Commit complete.
Elapsed: 00:00:00.00
SQL> set autotrace traceonly;
SQL> set timi on;
SQL> set lines 400;
SQL> update /*+ PARALLEL(interfacerecords, 4) */ interfacerecords set status=5 where status=1;
200000 rows updated.
Elapsed: 00:00:02.48
Execution Plan
Plan hash value: 2940696107
| Id  | Operation             | Name             | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
|   0 | UPDATE STATEMENT      |                  |     1 |    13 |    35   (0)| 00:00:01 |        |   |       |
|   1 |  UPDATE               | INTERFACERECORDS |       |       |            |          |        |   |       |
|   2 |   PX COORDINATOR      |                  |       |       |            |          |        |   |       |
|   3 |    PX SEND QC (RANDOM)| :TQ10000         |     1 |    13 |    35   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
|   4 |     PX BLOCK ITERATOR |                  |     1 |    13 |    35   (0)| 00:00:01 |  Q1,00 | PCWC |            |
|*  5 |      TABLE ACCESS FULL| INTERFACERECORDS |     1 |    13 |    35   (0)| 00:00:01 |  Q1,00 | PCWP |            |
Predicate Information (identified by operation id):
   5 - filter("STATUS"=1)
Statistics
        309  recursive calls
     214609  db block gets
      30287  consistent gets
          0  physical reads
   63356488  redo size
        654  bytes sent via SQL*Net to client
        617  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          3  sorts (memory)
          0  sorts (disk)
     200000  rows processedRegards

Similar Messages

  • Modify HUGE HASH partition table to RANGE partition and HASH subpartition

    I have a table with 130,000,000 rows hash partitioned as below
    ----RANGE PARTITION--
    CREATE TABLE TEST_PART(
    C_NBR CHAR(12),
    YRMO_NBR NUMBER(6),
    LINE_ID CHAR(2))
    PARTITION BY RANGE (YRMO_NBR)(
    PARTITION TEST_PART_200009 VALUES LESS THAN(200009),
    PARTITION TEST_PART_200010 VALUES LESS THAN(200010),
    PARTITION TEST_PART_200011 VALUES LESS THAN(200011),
    PARTITION TEST_PART_MAX VALUES LESS THAN(MAXVALUE)
    CREATE INDEX TEST_PART_IX_001 ON TEST_PART(C_NBR, LINE_ID);
    Data: -
    INSERT INTO TEST_PART
    VALUES ('2000',200001,'CM');
    INSERT INTO TEST_PART
    VALUES ('2000',200009,'CM');
    INSERT INTO TEST_PART
    VALUES ('2000',200010,'CM');
    VALUES ('2006',NULL,'CM');
    COMMIT;
    Now, I need to keep this table from growing by deleting records that fall b/w a specific range of YRMO_NBR. I think it will be easy if I create a range partition on YRMO_NBR field and then create the current hash partition as a sub-partition.
    How do I change the current partition of the table from HASH partition to RANGE partition and a sub-partition (HASH) without losing the data and existing indexes?
    The table after restructuring should look like the one below
    COMPOSIT PARTITION-- RANGE PARTITION & HASH SUBPARTITION --
    CREATE TABLE TEST_PART(
    C_NBR CHAR(12),
    YRMO_NBR NUMBER(6),
    LINE_ID CHAR(2))
    PARTITION BY RANGE (YRMO_NBR)
    SUBPARTITION BY HASH (C_NBR) (
    PARTITION TEST_PART_200009 VALUES LESS THAN(200009) SUBPARTITIONS 2,
    PARTITION TEST_PART_200010 VALUES LESS THAN(200010) SUBPARTITIONS 2,
    PARTITION TEST_PART_200011 VALUES LESS THAN(200011) SUBPARTITIONS 2,
    PARTITION TEST_PART_MAX VALUES LESS THAN(MAXVALUE) SUBPARTITIONS 2
    CREATE INDEX TEST_PART_IX_001 ON TEST_PART(C_NBR,LINE_ID);
    Pls advice
    Thanks in advance

    Sorry for the confusion in the first part where I had given a RANGE PARTITION instead of HASH partition. Pls read as follows;
    I have a table with 130,000,000 rows hash partitioned as below
    ----HASH PARTITION--
    CREATE TABLE TEST_PART(
    C_NBR CHAR(12),
    YRMO_NBR NUMBER(6),
    LINE_ID CHAR(2))
    PARTITION BY HASH (C_NBR)
    PARTITIONS 2
    STORE IN (PCRD_MBR_MR_02, PCRD_MBR_MR_01);
    CREATE INDEX TEST_PART_IX_001 ON TEST_PART(C_NBR,LINE_ID);
    Data: -
    INSERT INTO TEST_PART
    VALUES ('2000',200001,'CM');
    INSERT INTO TEST_PART
    VALUES ('2000',200009,'CM');
    INSERT INTO TEST_PART
    VALUES ('2000',200010,'CM');
    VALUES ('2006',NULL,'CM');
    COMMIT;
    Now, I need to keep this table from growing by deleting records that fall b/w a specific range of YRMO_NBR. I think it will be easy if I create a range partition on YRMO_NBR field and then create the current hash partition as a sub-partition.
    How do I change the current partition of the table from hash partition to range partition and a sub-partition (hash) without losing the data and existing indexes?
    The table after restructuring should look like the one below
    COMPOSIT PARTITION-- RANGE PARTITION & HASH SUBPARTITION --
    CREATE TABLE TEST_PART(
    C_NBR CHAR(12),
    YRMO_NBR NUMBER(6),
    LINE_ID CHAR(2))
    PARTITION BY RANGE (YRMO_NBR)
    SUBPARTITION BY HASH (C_NBR) (
    PARTITION TEST_PART_200009 VALUES LESS THAN(200009) SUBPARTITIONS 2,
    PARTITION TEST_PART_200010 VALUES LESS THAN(200010) SUBPARTITIONS 2,
    PARTITION TEST_PART_200011 VALUES LESS THAN(200011) SUBPARTITIONS 2,
    PARTITION TEST_PART_MAX VALUES LESS THAN(MAXVALUE) SUBPARTITIONS 2
    CREATE INDEX TEST_PART_IX_001 ON TEST_PART(C_NBR,LINE_ID);
    Pls advice
    Thanks in advance

  • Drop partitions in HASH partitioned table

    SELECT * FROM product_component_version
    NLSRTL      10.2.0.4.0     Production
    Oracle Database 10g Enterprise Edition      10.2.0.4.0     64bi
    PL/SQL      10.2.0.4.0     Production
    TNS for Solaris:      10.2.0.4.0     ProductionI have a table which is partitioned by HASH into several partitions. I would like to remove them all the same way I can DROP partitions in a LIST or RANGE partitioned tables.
    I COALESCE-d my table until it remained with only one partition. Now I've got a table with one HASH partition and I would like to remove it and to end up with unpartitioned table.
    How could it be accomplished?
    Thank you!

    Verdi wrote:
    I have a table which is partitioned by HASH into several partitions. I would like to remove them all the same way I can DROP partitions in a LIST or RANGE partitioned tables.
    I COALESCE-d my table until it remained with only one partition. Now I've got a table with one HASH partition and I would like to remove it and to end up with unpartitioned table.
    How could it be accomplished?
    You cannot turn a partitioned table into a non-partitioned table, but you could create a replacement table (including indexes etc.) and then use the 'exchange partition' option on the partitioned table. This will modify the data dictionary so the data segments for the partition exchange names with the data segments for the new table - which gives you a simple table, holding the data, in minimum time and with (virtually) no undo and redo.
    The drawback to this method is that you have to sort out all the dependencies and privileges.
    Regards
    Jonathan Lewis
    http://jonathanlewis.wordpress.com
    Author: <b><em>Oracle Core</em></b>

  • What is the difference between updating a table specifying a specific partition compare to not specifying

    Hello,
    What is the difference when updating a table specifying a specific partition compare to not specifying a specific partition?
    Does specifing a specific partition while doing an update only update values within that specific partition?
    For example:
    update tab_abc partition (nov_2013)
    set col_abc = 'ABC';
    vs.
    update tab_abc
    set col_abc='ABC';
    Thank you.

    Yes, but better to do this:
    update tab_abc
    set    col_abc = 'ABC'
    where  date_key >= to_date('01-NOV-2013','DD-MON-YYYY')
    and    date_key <  to_date('01-DEC-2013','DD-MON-YYYY')
    (where date_key is the column your table is partitioned on)
    Now your code is totally unaware that the table is partitioned but it can still use partition pruning.
    And your code won't break if the partitioning strategy changes (which it certainly can).

  • ADF master-detail master selection not updating detail tables properly

    Hi All,
    I am using JDev version : 11.1.2.0.0
    I created new Fusion Web Application Module. In that module I created a master-detail data model and added them to a page fragment with a query panel. When I run it as a separate module, It works perfectly and Master selection correctly updates detail tables.
    But when I integrate that module to another Fusion Application(Add application jar file to the Master Application libraries), Master-details master selection not updating detail tables properly. This problem occurred sequentially.
    The problem is that.
    After the page load, first selection of the Master Table works correctly and detail tables update correctly.
    But second selection doesn't work, means detail table doesn't get update according to the Master table.
    And again in the third selection works correctly.
    This happens in a sequential manner. I monitor the behavior using Firebug. Observations are as follows,
    When running correctly, Response of the Post Definition is
    <?xml version="1.0" ?> <partial-response><changes><update id="pt1:t1"><![CDATA[<div tabindex="0" id="pt1:t1" class="xpa xpi" _leafColClientIds="['pt1:t1:c1','pt1:t1:c2','pt1:t1:c3','pt1:t1:c4','pt1:t1:c5','pt1:t1:c6','pt1:t1:c7','pt1:t1:c8','pt1:t1:c9','pt1:t1:c10','pt1:t1:c11','pt1:t1:c12','pt1:t1:c13']"><div id="pt1:t1::ch" style="overflow:hidden;position:relative;width:1365px;" _afrColCount="13" class="xz4"><table class="xz6" summary="This table contains column headers corresponding to the data body table below" id="pt1:t1::ch::t" style="position:relative;table-layout:fixed;width:1365px" cellspacing="0"><tr><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th><th style="padding:0px;padding-left:5px;width:100px;"></th></tr><tr><th id="pt1:t1:c1" _d_index="0" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c1::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">DateFormat</div></th><th id="pt1:t1:c2" _d_index="1" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c2::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">DefinisionId</div></th><th id="pt1:t1:c3" _d_index="2" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c3::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldId</div></th><th id="pt1:t1:c4" _d_index="3" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c4::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldLabel</div></th><th id="pt1:t1:c5" _d_index="4" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c5::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldLength</div></th><th id="pt1:t1:c6" _d_index="5" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c6::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldOffset</div></th><th id="pt1:t1:c7" _d_index="6" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c7::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldOrder</div></th><th id="pt1:t1:c8" _d_index="7" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c8::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldStatus</div></th><th id="pt1:t1:c9" _d_index="8" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c9::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldType</div></th><th id="pt1:t1:c10" _d_index="9" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c10::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">FieldTypeLen</div></th><th id="pt1:t1:c11" _d_index="10" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c11::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">IgnoreField</div></th><th id="pt1:t1:c12" _d_index="11" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c12::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">IsMandatory</div></th><th id="pt1:t1:c13" _d_index="12" _afrLeaf="true" _afrRoot="true" align="left" class="xz7"><div style="position:relative; float:right"><table id="pt1:t1:c13::afrSI" _afrHoverable="true" style="display:none" class="xzs" cellpadding="0" cellspacing="0"><tr><td _afrSortAsc="1"><a tabIndex="-1" class="xza" title="Sort Ascending"></a></td><td _afrSortDesc="1"><a tabIndex="-1" class="xzb" title="Sort Descending"></a></td></tr></table></div><div class="x19d">RecordType</div></th></tr></table></div><div id="pt1:t1::db" class="xyx" style="position:relative;width:100%;overflow:hidden" _afrColCount="13"></div><div id="pt1:t1::sm" class="xzt" style="position:absolute;display:none"></div><div id="pt1:t1::ri" class="xyz" style="position:absolute;display:none;overflow:hidden"></div><div id="pt1:t1::dataW" style="display:none"></div></div>]]></update><update id="f1::postscript"><![CDATA[<span id="f1::postscript"><span id="f1::postscript:st"><input type="hidden" name="javax.faces.ViewState" value="!-75cc188st"></span></span>]]></update><update id="d1::iconC"><![CDATA[<span id="d1::iconC" style="display:none"><span id="af_table::disclosed-icon"></span><span id="af_table::undisclosed-icon"></span></span>]]></update><update id="javax.faces.ViewState"><![CDATA[!-75cc188st]]></update><eval><![CDATA[AdfPage.PAGE.__handleRichResponseAction('/MillenniumCSD-ViewController-context-root/faces/FileDefinition?_adf.ctrl-state=cmpl0ptfg_7');]]></eval><eval><![CDATA[AdfPage.PAGE.sendStreamingRequest("pt1:t1");]]></eval><extension id="adf-script-library">/MillenniumCSD-ViewController-context-root/afr/partition/gecko/default/opt/dnd-SHERMAN-1147.js</extension><extension id="adf-script-library">/MillenniumCSD-ViewController-context-root/afr/partition/gecko/default/opt/nav-SHERMAN-1147.js</extension><extension id="adf-script-library">/MillenniumCSD-ViewController-context-root/afr/partition/gecko/default/opt/menu-SHERMAN-1147.js</extension><extension id="adf-script-library">/MillenniumCSD-ViewController-context-root/afr/partition/gecko/default/opt/table-SHERMAN-1147.js</extension><eval>AdfPage.PAGE.addResource('javascript','/MillenniumCSD-ViewController-context-root/JarLoaderPages/jquery-1.7.1.min.js');</eval><eval>AdfPage.PAGE.addResource('javascript','/MillenniumCSD-ViewController-context-root/JarLoaderPages/dis_contx.js');</eval><eval>AdfPage.PAGE.addResource('javascript','/MillenniumCSD-ViewController-context-root/js/floating_bar_bottom.js');</eval><eval>if(self.window.name != "MillenniumDepository"){   self.location = "mcsd.html";   }</eval><eval><![CDATA[AdfDhtmlLookAndFeel.addSkinProperties({"af|table-tr-column-scroll-animation-duration":"300","af|table-tr-column-reorder-animation-duration":"600","af|table-tr-hover-highlight-row":"true"});AdfPage.PAGE.addComponents(new AdfRichTable('pt1:t1',{'rowSelection':'single','rowBandingInterval':0,'editingMode':'none','afrSelListener':true}),new AdfRichColumn('pt1:t1:c1',{'sortProperty':'DateFormat','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c2',{'sortProperty':'DefinisionId','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c3',{'sortProperty':'FieldId','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c4',{'sortProperty':'FieldLabel','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c5',{'sortProperty':'FieldLength','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c6',{'sortProperty':'FieldOffset','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c7',{'sortProperty':'FieldOrder','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c8',{'sortProperty':'FieldStatus','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c9',{'sortProperty':'FieldType','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c10',{'sortProperty':'FieldTypeLen','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c11',{'sortProperty':'IgnoreField','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c12',{'sortProperty':'IsMandatory','sortable':true,'minimumWidth':12,'rowHeader':false}),new AdfRichColumn('pt1:t1:c13',{'sortProperty':'RecordType','sortable':true,'minimumWidth':12,'rowHeader':false}));AdfPage.PAGE.__recordSessionTimeout(1800000, 120000, "http://127.0.0.1:7101/MillenniumCSD-ViewController-context-root/faces/FileDefinition");AdfPage.PAGE.__initPollingTimeout(600000);AdfPage.PAGE.clearMessages();AdfPage.PAGE.clearSubtreeMessages('pt1:t1');AdfPage.PAGE.clearSubtreeMessages('pt1:resId1');]]></eval></changes></partial-response>
    When not running correctly, Response of the Post Definition is
    <?xml version="1.0" ?> <partial-response><changes><update id="f1::postscript"><![CDATA[<span id="f1::postscript"><span id="f1::postscript:st"><input type="hidden" name="javax.faces.ViewState" value="!-75cc188st"></span></span>]]></update><update id="javax.faces.ViewState"><![CDATA[!-75cc188st]]></update><eval><![CDATA[AdfPage.PAGE.__handleRichResponseAction('/MillenniumCSD-ViewController-context-root/faces/FileDefinition?_adf.ctrl-state=cmpl0ptfg_7');]]></eval><eval>AdfPage.PAGE.addResource('javascript','/MillenniumCSD-ViewController-context-root/JarLoaderPages/jquery-1.7.1.min.js');</eval><eval>AdfPage.PAGE.addResource('javascript','/MillenniumCSD-ViewController-context-root/JarLoaderPages/dis_contx.js');</eval><eval>AdfPage.PAGE.addResource('javascript','/MillenniumCSD-ViewController-context-root/js/floating_bar_bottom.js');</eval><eval>if(self.window.name != "MillenniumDepository"){   self.location = "mcsd.html";   }</eval><eval><![CDATA[AdfPage.PAGE.__recordSessionTimeout(1800000, 120000, "http://127.0.0.1:7101/MillenniumCSD-ViewController-context-root/faces/FileDefinition");AdfPage.PAGE.__initPollingTimeout(600000);AdfPage.PAGE.clearMessages();AdfPage.PAGE.clearSubtreeMessages('pt1:t1');AdfPage.PAGE.clearSubtreeMessages('pt1:resId1');]]></eval></changes></partial-response>
    I could not figure out what went wrong when integrating to another module.
    Can you please help me to rectify this problem.
    Thanks
    dk

    Hi,
    sound to be an implementation specific issue that is hard to comment on without knowing how to reproduce it. If you have a rerooducible test case based on the Oracle HR schema using JDeveloper 11.1.1.6, zip it up, rename the "zip "extension to "unzip" and sent it to the mail address you find in my OTN profile. If you don't have that test case, explain how this can be reproduced
    Frank

  • Long running table partitioning job

    Dear HANA grus,
    I've just finished table partitioning jobs for CDPOS(change document item) with 4 partitions by hash with 3 columns.
    Total data volumn is around 340GB and the table size was 32GB !!!!!
    (migration job was done without disabling CD, so currently deleting data on the table with RSCDOK99)
    Before partitioning, the data volumn of the table was around 32GB.
    After partitioning, the size has changed to 25GB.
    It took around One and half hour with exclusive lock as mentioned in the HANA adminitration guide.
    (It is QA DB, so less complaints)
    I thought that I might not can do this in the production DB.
    Does anyone hava any idea for accelerating this task?? (This is the fastest DBMS HANA!!!!)
    Or Do you have any plan for online table partitioning functionality??(To HANA Development team)
    Any comments would be appreciate.
    Cheers,
    - Jason

    Jason,
    looks like we're cross talking here...
    What was your rationale to partition the table in the first place?
           => To reduce deleting time of CDPOS            (As I mentioned it was almost 10% quantity of whole Data volume, So I would like to save deleting time of the table from any pros of partitioning table like partitioning pruning)
    Ok, I see where you're coming from, but did you ever try out if your idea would actually work?
    As deletion of data is heavily related with locating the records to be deleted, creating an index would have probably be the better choice.
    Thinking about it... you want to get rid of 10% of your data and in order to speed the overall process up, you decide to move 100% of the data into sets of 25% of the data - equally holding their 25% share of the 10% records to be deleted.
    The deletion then should run along these 4 sets of 25% of data.
    It's surely me, but where is the speedup potential here?
    How many unloads happened during the re-partitioning?
           => It was fully uploaded in the memory before partitioning the table by myself.(from HANA studio)
    I was actually asking about unloads _during_ the re-partitioning process. Check M_CS_UNLOADS for the time frame in question.
    How do the now longer running SQL statements look like?
           => As i mentioned selecting/deleting increased almost twice.
    That's not what I asked.
    Post the SQL statement text that was taking longer.
    What are the three columns you picked for partitioning?
           => mandant, objectclas, tabname(QA has 2 clients and each of them have nearly same rows of the table)
    Why those? Because these are the primary key?
    I wouldn't be surprised if the SQL statements only refer to e.g. MANDT and TABNAME in the WHERE clause.
    In that case the partition pruning cannot work and all partitions have to be searched.
    How did you come up with 4 partitions? Why not 13, 72 or 213?
           => I thought each partitions' size would be 8GB(32GB/4) if they are divided into same size(just simple thought), and 8GB size is almost same size like other largest top20 tables in the HANA DB.
    Alright, so basically that was arbitrary.
    For the last comment of your reply, most people would do partition for their existing large tables to get any benefit of partitioning(just like me). I think your comment can be applied for the newly inserting data.
    Well, not sure what "most people" would do.
    HASH partitioning a large existing table certainly is not an activity that is just triggered off in a production system. Adding partitions to a range partitions table however happens all the time.
    - Lars

  • How can I update the table with a single query for...

    I have a table with columns C1 and C2.
    C1 C2
    A1 null
    A1 null
    A1 null
    A1 null
    A2 null
    A2 null
    A2 null
    A3 null
    A4 null
    A4 null
    I want to update my table with a single query so that I would have data like
    C1 C2
    A1 1
    A1 2
    A1 3
    A1 4
    A2 1
    A2 2
    A2 3
    A3 1
    A4 1
    A4 2
    The updated column C2 has the values like serial no grouped on the column C1.

    SQL> create table mytable
      2  ( c1 varchar2(2)
      3  , c2 number(2)
      4  )
      5  /
    Tabel is aangemaakt.
    SQL> insert into mytable (c1)
      2  select 'A1' from dual union all
      3  select 'A1' from dual union all
      4  select 'A1' from dual union all
      5  select 'A1' from dual union all
      6  select 'A2' from dual union all
      7  select 'A2' from dual union all
      8  select 'A2' from dual union all
      9  select 'A3' from dual union all
    10  select 'A4' from dual union all
    11  select 'A4' from dual
    12  /
    10 rijen zijn aangemaakt.
    SQL> select * from mytable
      2  /
    C1                                     C2
    A1
    A1
    A1
    A1
    A2
    A2
    A2
    A3
    A4
    A4
    10 rijen zijn geselecteerd.
    SQL> merge into mytable t1
      2  using (select c1
      3              , row_number() over (partition by c1 order by null) rn
      4              , rowid rid
      5           from mytable
      6        ) t2
      7     on (t1.rowid = t2.rid)
      8   when matched then
      9        update set c2 = rn
    10   when not matched then
    11        insert values (null,null)
    12  /
    10 rijen zijn samengevoegd.
    SQL> select * from mytable
      2  /
    C1                                     C2
    A1                                      1
    A1                                      2
    A1                                      3
    A1                                      4
    A2                                      1
    A2                                      2
    A2                                      3
    A3                                      1
    A4                                      1
    A4                                      2
    10 rijen zijn geselecteerd.Regards,
    Rob.

  • Table partitioning best practices

    Just looking for some ideas.
    We have a large information warehouse table that we are looking to partition on 'service_period' id. We have been requested to partition on every month of every year which right now will create approximately 70 partitions. The other problem is that this is a rolling or dynamic partition meaning we will have a 'new' partition vale with each new month. I understand in 11g there is a rolling partition functionality but we are not there yet.
    So right now we are looking for a best practice for this scenario. We are thinking of possibly creating a partition on each year and indexing on the service period within each partition, maybe hash partitioning on the service period id (although does not seem to group the service periods distinct within each partition), somehow creating the partition dynamically via pl/sql (creating the table with a basic partition and then running an alter table on the data creating the proper number of partitions within a list partition.
    I am also wondering if there is a point of too many partitions on a table. I am thinking 70 may be a little extreme but not sure. We are going to do some performance testing but would be nice to hear from the community. We have 5,000,000 over approx 70 partitions giving us approx 70,000 records per partition. The other option would be to create the partition based on year and then apply an index over top on the service period to reduce the number of partitions.
    Thanks in advance,
    Bruce Carson

    This is not a lot of data, so the effort of partitioning may not be worth the benefit you receive. 70 partitions is not unreasonable. Do you have performance problems ? Do the majority of your queries reference service_period ? Do you have a lot of full table scans ?
    Partitioning strategies depend on the queries you plan to run, your data distributions, and your purge / archival strategy.
    Think about whether you should pre-create partitions for years in advance. Think about whether you should put every partition in a seperate tablespace for easy purging and archival. Think about what indexing you will use (can you use local indexes, or do you need global ?) Think about what data changes are happening ? Are they all on the newest data ? Can you compress older partitions with PCT_FREE 0 to improve performance ?

  • Suggestions for table partition for existing tables.

    I have a table as below. This table contains huge data. This table has so many child tables .I am planning to do a 'Reference Partitioning' for the same.
    create table PROMOTION_DTL
      PROMO_ID              NUMBER(10) not null,
      EVENT                 VARCHAR2(6),
      PROMO_START_DATE      TIMESTAMP(6),
      PROMO_END_DATE        TIMESTAMP(6),
      PROMO_COST_START_DATE TIMESTAMP(6),
      EVENT_CUT_OFF_DATE    TIMESTAMP(6),
      REMARKS               VARCHAR2(75),
      CREATE_BY             VARCHAR2(50),
      CREATE_DATE           TIMESTAMP(6),
      UPDATE_BY             VARCHAR2(50),
      UPDATE_DATE           TIMESTAMP(6)
    alter table PROMOTION_DTL
      add constraint PROMOTION_DTL_PK primary key (PROMO_ID);
    alter table PROMOTION_DTL
      add constraint PROMO_EVENT_FK foreign key (EVENT)
      references SP_PROMO_EVENT_MST (EVENT);
    -- Create/Recreate indexes
    create index PROMOTION_IDX1 on PROMOTION_DTL (PROMO_ID, EVENT)
    create unique index PROMOTION_PK on PROMOTION_DTL (PROMO_ID)
    -- Grant/Revoke object privileges
    grant select, insert, update, delete on PROMOTION_DTL to SCHEMA_RW_ROLE;I would like to partition this table .Most of the queries contains the following conditions.
    promo_end_date >=   SYSDATE
    and
    (event = :input_event OR
    (:input_Start_Date <= promo_end_date           
    AND promo_start_date <= :input_End_Date))Any time the promotion can be closed by updating the PROMO_END_DATE.
    Interval partioning on PROMO_END_DATE is not possible as PROMO_END_DATE is a nullable and updatable field.
    I am now to table partition.
    Any suggestions are welcome...

    DO NOT POST THE SAME QUESTION IN MULTIPLE FORUMS PLEASE!
    Suggestions for table partition of existing tables

  • What is this Partition type mention in code "Partition by HASH".

    Hi Team,
    Regularly i am Adding new partions and sub-Partitions to production table, based on Date. For example Every Day Data stored in one partion.
    please find below code, what i am using to add new partitions. I think this called RANGE partition.
    CREATE TABLE "owner"."TABLE_NAME"
    (     "COLUMN01" VARCHAR2(4),
         "ACOLUMN02" VARCHAR2(32) NOT NULL ENABLE,
    BUFFER_POOL DEFAULT)
    TABLESPACE "Tablespace_name"
    PARTITION BY RANGE ("Daily_TIME")
    (PARTITION "ABC_2008_08_31" VALUES LESS THAN (TO_DATE(' 2008-08-31 23:59:59', '
    SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
    STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    Now i have found new type of code from one of the new table created by development team.
    Code is.....
    CREATE TABLE "owner"."TABLE_NAME"
    (     "COLUMN01" VARCHAR2(4),
         "ACOLUMN02" VARCHAR2(32) NOT NULL ENABLE,
    BUFFER_POOL DEFAULT)
    TABLESPACE "Tablespace_name"
    PARTITION BY HASH ("ACCOUNT_NUMBER")
    (PARTITION "PART_P01"
    TABLESPACE "tABLESPACE01",
    PARTITION "pART_P13"
    TABLESPACE "Tabelspace01") ENABLE ROW MOVEMENT;
    There is no below code in new Table code....
    ( (PARTITION "ABC_2008_08_31" VALUES LESS THAN (TO_DATE(' 2008-08-31 23:59:59', '
    SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    SO, i am unable to alter this table to add new partions monthly wise.
    Please suggest me, How to save data date wise in this table. Also suggest me if it is not comes under RANGE Partion or not.
    If not possible to add new partition data wise, I will inform to client.
    Thanks & Regards,
    Venkat

    New table use hash partitioning, not range partitioning. You can refer to the Concepts:
    http://docs.oracle.com/cd/E11882_01/server.112/e25789/schemaob.htm#CNCPT88864
    The key of new partitioned table is account number, not date, therefore you cannot partition this table date-wise.

  • Run repartition but no update to table RSDCUBE

    hi expert,
    i got a question about partition.
    i have some cube containing data without partition  and i don't want to delete the data then do the partition. so i run the repartition directly and i found that:
    after i ran the repartition , the table RSDCUBE didn't update the fields PARTMODE to 'X' but the fields (Partitioning time char. Lower limit (partitioning value) Upper Limit (Partitioning Value) and Maximum number of partitions) are updated.
    i am wondering if it will affect the system or it is OK?
    thank you!
    i have read the online help,here is the explaination:
    Repartitioning  
    Use
    Repartitioning can be useful if you have already loaded data to your InfoCube, and:
    ●      You did not partition the InfoCube when you created it.
    ●      You loaded more data into your InfoCube than you had planned when you partitioned it.
    ●      You did not choose a long enough period of time for partitioning.
    ●      Some partitions contain no data or little data due to data archiving over a period of time.
    it recommends that if you haven't do the partition, you can also use partition. the result is no update to table RSDCUBE. i am not sure if it will lead to any system dump or program error.
    Edited by: hongyu wang on Jan 21, 2011 7:23 AM

    Ok, in short:
    After repartitioning of an formely not partitioned Infocube you check the RSCUBE table and find that the flag PARTMODE is not set to 'X' as you would expect it.
    When you in turn create the infocube already partitioned, the flag is set accordingly.
    I tried this out and in fact, the repartitioning does not seem to set the flag (on Oracle).
    However, if you modify the IC afterwards again (e.g. change the description), save this and active the infocube then the flag is updated correctly.
    Also copying the infocube without the PARTMODE flag does lead to a new Infocube which - after saving and activating it - does have the flag set correctly.
    So in general: the flag doesn't seem to be used very much on Oracle  (instead it's much more important for DB6!) and you should be safe using it the way it works right now.
    regards,
    Lars

  • Vertical table partition?

    Hi,
    our database contains XML documents in 11 languages, one table for each language. Besides, there is meta information about each document which is the same for each language. Therefore, this meta information has been placed in a separate table.
    Now to the problem: common database queries search in the documents (Intermedia) as well
    in the meta data, what means that there is a join between the table that contains the documents (columns: key, documenttext) and the table that contains the meta information (columns: key and 18 others). Unfortunately after having located documents via Intermedia index, Oracle reads the corresponding data blocks for extracting the key. Because the documents are up to 4K, Oracle reads much information that it does not need. Is it possible to have a vertical partition of the documents table in order to be able to efficiently read only the key information instead of the whole table rows?
    Thank You for any hint,
    Markus

    Thanks For your comment and sorry for delay my Internet got down yesterday. Well, As you said throw away existing table structure.. i agree with you but there is a limitation right now. Our application only understand the current structure. Any change in database result to change execution engine. Actually, Our application provide interface to do Ad hoc reporting. we certainly use dimensional modeling but unfortunately our CTO believe existing structure is much better than the dimensional model. it gives the flexibility  to load any data like retail, click stream etc and provide reporting on data. Although, the architecture is bad but they we providing analytic to customer....
    To cut the long story short, they have assigned me a task to improve its performance. i have already improve it performance by using different feature of oracle like table partitioning sub partitioning, indexing and many more... but we want more... i have observed during the data loading process the Update part took much time. if i could do this any other way it would reduced the overall data loading time.. we extract the file from client server and perform transformation according to  business rule and out the result of transformation file in flat file.. finally our application use sql loader to load in flat table then divide it in different table. Some of our existing client have 250 column some are 350 plus...
    i think i have explained much but if you have more question on it i will ready to answer them. Please suggest with your experience how could i improve performance of existing system.

  • Is list partition and hash partition one and the same

    I am creating table with partition with the commands
    CREATE TABLE ABD (ENO NUMBER(5),CID NUMBER(3),ENAME VARCHAR2(10))
    PARTITION BY LIST (ENO)
    (PARTITION P1 VALUES (123),
    PARTITION P2 VALUES (143),
    PARTITION CLIENT_ID VALUES (746))
    ALTER TABLE ABD
    ADD PARTITION CLIENT_756 VALUES (756)
    but when i describe the table script it is showing like this
    CREATE TABLE ABD (
    ENO NUMBER (5),
    ENAME VARCHAR2 (10),
    CID NUMBER (3) )
    PARTITION BY HASH (ENO)
    PARTITIONS 4
    STORE IN ( USERS,USERS,USERS,
    USERS);
    actually i am creating list partition but it is showing hash partition why is it so?

    when i describe the table script it is showing like thisHow do you describe it, and which version are you on ?
    TEST@db102 SQL> CREATE TABLE ABD (ENO NUMBER(5),CID NUMBER(3),ENAME VARCHAR2(10))
      2  PARTITION BY LIST (ENO)
      3  (PARTITION P1 VALUES (123),
      4  PARTITION P2 VALUES (143),
      5* PARTITION CLIENT_ID VALUES (746))
    TEST@db102 SQL> /
    Table created.
    TEST@db102 SQL> ALTER TABLE ABD
      2* ADD PARTITION CLIENT_756 VALUES (756)
    TEST@db102 SQL> /
    Table altered.
    TEST@db102 SQL> select dbms_metadata.get_ddl('TABLE','ABD','TEST') from dual;
    DBMS_METADATA.GET_DDL('TABLE','ABD','TEST')
      CREATE TABLE "TEST"."ABD"
       (    "ENO" NUMBER(5,0),
            "CID" NUMBER(3,0),
            "ENAME" VARCHAR2(10)
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
      STORAGE(
      BUFFER_POOL DEFAULT)
      TABLESPACE "USERS"
      PARTITION BY LIST ("ENO")
    (PARTITION "P1"  VALUES (123)
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS" NOCOMPRESS ,
    PARTITION "P2"  VALUES (143)
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS" NOCOMPRESS ,
    PARTITION "CLIENT_ID"  VALUES (746)
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS" NOCOMPRESS ,
    PARTITION "CLIENT_756"  VALUES (756)
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
      TABLESPACE "USERS" NOCOMPRESS )
    TEST@db102 SQL>                                                                               

  • How can I Update the table so that....

    I have a table XYZ with values like
    x y
    1 null
    1 null
    1 null
    1 null
    2 null
    2 null
    3 null
    4 null
    4 null
    4 null
    I want to update my table so that the values for column y appears the serial no for the given x. The output would be like
    x y
    1 1
    1 2
    1 3
    1 4
    2 1
    2 2
    3 3
    4 1
    4 2
    4 3
    How can I write the Update statement?

    SQL> CREATE TABLE t (x INTEGER, y INTEGER)
    Table created.
    SQL> INSERT INTO t
         VALUES (1, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (1, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (1, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (1, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (2, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (2, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (3, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (4, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (4, NULL)
    1 row created.
    SQL> INSERT INTO t
         VALUES (4, NULL)
    1 row created.
    SQL> UPDATE t t1
       SET y =
              (SELECT l
                 FROM (SELECT ROWID rid,
                              ROW_NUMBER () OVER (PARTITION BY x ORDER BY NULL) l
                         FROM t t2)
                WHERE t1.ROWID = rid)
    10 rows updated.
    SQL> SELECT *
      FROM t
             X          Y
             1          1
             1          2
             1          3
             1          4
             2          1
             2          2
             3          1
             4          1
             4          2
             4          3
    10 rows selected.

  • How to create a Maintenance view in order to update 4 tables

    Hello,
    I want to update 4 tables having the same key. MANDANT + SIRET (fiscal french ID).
    I try to create a maintenace view, i need to update the 4 tables using a single screen.
    When i use the relationship the system display a message "Relationships with unsuitable cardinality"
    The first table contain only the ID, the 3 others contains some informations (adress, name, and others)
    Thanks for your help
    Christophe

    Hello,
    you could check, if your other three tables have a correct foreign key definition on the field  SIRET.
    Tranaction SE11 -> pstion on the field and press the foreign key button.
    Check Table has to be your first table; cardinality has to be 1 :1 or 1 to N.
    Regards Wolfgang

Maybe you are looking for

  • Print Message Report from Mobile

    Hello... We need modify standard mobile infrastructure java code... We need print some report from Mobile Front-end. Is possible to print all MESSAGE data that we can see from front-end of mobile infrastructure 2.5 ??? thank you very much Stefano

  • I'm suddenly not able to drag certain photos to the desktop... Why?

    I've been using iPhoto '08 (currently v. 7.1.5) for a few years and never had any issues until recently. Some photos I can drag to the desktop with no problem (old photos, recent imports, edited, it doesn't seem to matter). But some photos won't drag

  • How do I print a multipage doc to PDF from LabVIEW?

    I have an app which prints reports for my client. The reports are mostly graphs, with some attached labeling info. These might be one or a hundred pages, all results of a modeling run. I have several dummy VIs, which are laid out the way the page sho

  • Trouble - Z10 won't start up

    Hello, good afternoon! I need a little help because I've tried everything but can not find any solution. At about two weeks, listened to music on my BlackBerry my Z10 when suddenly the machine crashed and the screen went completely blue. I removed th

  • Acrobat.tlb / Accessibility.api

    Hello, I'm currently just starting work with the Acrobat APIs. In our product we want to let our customers (who purchase adobe, optionally) create their own legal forms in PDF and send the results to a web page which captures the finished product and