Buffer gets while inserting
Hi,
I have the table my_log in a 9.2.0.7 database. This table is used only for select and insert purposes (there are no deletions). The insertions are simple insert statement without any append hint. From Enterprise Manager I see that the insert performs a lot of buffer gets. This is reasonable because oracle must read the segment to find blocks to write (I imagine that it must also read dictionary and the indexes segments). In this scenario I imagine that the number of buffer getscan only grow over time. The strange thing is that the number of buffer gets can also decrease!
For example:
at 7:00 am => 9966 buffer gets
at 8:00 am => 9422 buffer gets
at 9:00 am => 8912 buffer gets
at 10:00 am => 9543 buffer gets
Why the number of buffer gets is so variable? I expected it to be increasing...
Have Checked below checklist
No joins can be made between a stored procedure and a table in a universe
No Query Filters can be used
No predefined conditions
The procedure itself may contain a variable that will prompt, but it cannot be manipulated.
They cannot be used in Linked Universes.
Not All Databases support stored procedures
These SQL Commands are not ALLOWED: COMPUTE, PRINT, OUTPUT or STATUS
The stored procedures do not support OUT or dynamic result sets parameters
An IF statement cannot be used in the where clause.
You can only create a new universe based on the stored procedure. You cannot add it to an existing universe.
The stored procedure creates all objects in the universe automatically. If there is a long text object it will not generate an object.
If a change is made on the database to the stored procedure. The universe view will not update the schema. The stored procedure must be re-inserted. (This causes the object id to change!)
In order to avoid parsing errors on stored procedures columns, it is recommended that you alias result columns based on complex SQL, for example using the aggregate functions - sum, count. The creation of aliased objects cannot be constrained.
Similar Messages
-
What causes BUFFER GETS and PHYSICAL READS in INSERT operation to be high?
Hi All,
Am performing a huge number of INSERTs to a newly installed Oracle XE 10.2.0.1.0 on Windows. There is no SELECT statement running, but just INSERTs one after the other of 550,000 in count. When I monitor the SESSION I/O from Home > Administration > Database Monitor > Sessions, I see the following stats:
BUFFER GETS = 1,550,560
CONSISTENT GETS = 512,036
PHYSICAL READS = 3,834
BLOCK CHANGES = 1,034,232
The presence of 2 stats confuses. Though the operation is just INSERT in database for this session, why should there be BUFFER GETS of this magnitude and why should there by PHYSICAL READS. Aren't these parameters for read operations? The BLOCK CHANGES value is clear as there are huge writes and the writes change these many blocks. Can any kind soul explain me what causes there parameters to show high value?
The total columns in the display table are as follows (from the link mentioned above)
1. Status
2. SID
3. Database Users
4. Command
5. Time
6. Block Gets
7. Consistent Gets
8. Physical Reads
9. Block Changes
10. Consistent Changes
What does CONSISTENT GETS and CONSISTENT CHANGES mean in a typical INSERT operation? And does someone know which all tables are involved in getting these values?
Thank,
...Flake wrote:
Hans, gracias.
The table just have 2 columns, both of which are varchar2 (500). No constraints, no indexes, neither foreign key references are in place. The total size of RAM in system is 1GB, and yes, there are other GUI's going on like Firefox browser, notepad and command terminals.
But, what does these other applications have to do with Oracle BUFFER GETS, PHYSICAL READS etc.? Awaiting your reply.Total RAM is 1GB. If you let XE decide how much RAM is to be allocated to buffers, on startup that needs to be shared with any/all other applications. Let's say that leaves us with, say 400M for the SGA + PGA.
PGA is used for internal stuff, such as sorting, which is also used in determing the layout of secondary facets such as indexes and uniqueness. Total PGA usage varies in size based on the number of connections and required operations.
And then there's the SGA. That needs to cover the space requirement for the data dictionary, any/all stored procedures and SQL statements being run, user security and so on. As well as the buffer blocks which represent the tablespace of the database. Since it is rare that the entire tablespace will fit into memory, stuff needs to be swapped in and out.
So - put too much space pressure on the poor operating system before starting the database, and the SGA may be squeezed. Put that space pressure on the system and you may enbd up with swapping or paging.
This is one of the reasons Oracle professionals will argue for dedicated machines to handle Oracle software. -
Getting a Runtime Exception while inserting value in MSAccess 2000
I am using below mentioned code to insert values in MSAccess 2000 which having table structure as mentioned below:-
Field Name
Data Type
TodaysDate
Date/Time
Cart ID
Number
Client Name
Text
Team & Segment
Text
Duration
Number
Tape ID
Text
Start Date
Date/Time
End Date
Date/Time
Code:-
private boolean enterDataIntoMSAccessDatabaseusingPreparedStatement()
try {
ps = connection.prepareStatement("INSERT INTO [Cart ID Details] VALUES (?,?,?,?,?,?,?,?)");
System.out.println("After Query");
catch (SQLException se) {
generateErrorMessage("Error in Prepared Statement \n " + se.getMessage() );
return false;
catch (Exception e)
generateErrorMessage("Unexpected Error Occured \n " + e.getMessage());
String todaysDate = cartIDApplicationAddCartIDDatejTextField.getText().trim();
String cartID = cartIDApplicationAddCartIDCartIDjTextField.getText().trim();
String clientName = cartIDApplicationAddCartIDClientNamejTextField.getText().trim();
String teamSegment = cartIDApplicationAddCartIDTeamAndSegmentjTextField.getText().trim();
String duration = cartIDApplicationAddCartIDDurationjTextField.getText().trim();
String tapeID = cartIDApplicationAddCartIDTapeIDjTextField.getText().trim();
String startDate = cartIDApplicationAddCartIDStartDatejTextField.getText().trim();
String endDate = cartIDApplicationAddCartIDEndDatejTextField.getText().trim();
try {
//System.out.println("Before ps.setString()");
ps.setString(1, todaysDate);
ps.setString(2, cartID );
ps.setString(3, clientName);
ps.setString(4, teamSegment);
ps.setString(5, duration);
ps.setString(6, tapeID);
ps.setString(7, startDate);
ps.setString(8, endDate);
//System.out.println("After ps.setString()");
ps.executeUpdate();
catch (SQLException se) {
generateErrorMessage("Error while inserting data in database \n " + se.getMessage());
return false;
catch (Exception e)
generateErrorMessage("Unexpected Error Occured \n" + e.getMessage() );
return true;
The above boolean function is called in "Save Button" action event, but when I click Save I am getting as Runtime Exception.
Kindly help me to sort out this issue.Print stack traces not just messages. And it will tell you what is wrong. And if you posted the stack trace someone else might be able to tell you.
If you get an exception DO NOT CONTINUE. You can't do an update if the prepared statement failed so there is no point in trying. (Of course that depends on what 'generateErrorMessage' does)
Other than that note that you are using strings for everything even though the data types are not all text fields. -
INSERT causing lots of buffer gets
select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - ProductionSQL
desc tab
Name Null? Type
DEF_ID NOT NULL VARCHAR2(64)
INST_ID NOT NULL VARCHAR2(64)
BUSINESS_KEY NOT NULL VARCHAR2(64)
BUSINESS_DATA CLOB
TIME NOT NULL TIMESTAMP(6)
REQUEST_CXT NOT NULL VARCHAR2(4000)
IS_PROCESSED NOT NULL NUMBER(3)
ON_STATUS TIMESTAMP(6)
RVN NOT NULL NUMBER(10)
HV NUMBER(10)
ID NOT NULL VARCHAR2(128)
STATE CHAR(1)
insert into tab(def_id, inst_id, business_key,
businessdata, time, is_processed, next_retry_time, on_status, req_cxt, hv,
id, op_type, rvn ) values
(:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, 'I', 0)
BUSINESS_DATA IS A clob datatype
table got two indexes
1.idx1(pk) on (inst_id,def_id,rvn)
2.idx2 on (id,state,op_type)
High buffer gets in past
select a.sql_id,TO_DATE(TO_CHAR(b.BEGIN_INTERVAL_TIME,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') as sdate,a.PLAN_HASH_VALUE,a.EXECUTIONS_DELTA EXE_D,
case (executions_delta) when 0 then 0 else ceil(a.ROWS_PROCESSED_DELTA/a.EXECUTIONS_DELTA) end as RD,
case (executions_delta) when 0 then 0 else ceil(a.ELAPSED_TIME_DELTA/a.EXECUTIONS_DELTA) end as ELA_D_MCR_SEC,
case (executions_delta) when 0 then 0 else ceil(a.BUFFER_GETS_DELTA/a.EXECUTIONS_DELTA) end as BG_D,
case (executions_delta) when 0 then 0 else ceil(a.IOWAIT_DELTA/a.EXECUTIONS_DELTA) end as W_IO_D_MCR_SEC
from dba_hist_sqlstat a ,dba_hist_snapshot b where a.snap_id=b.snap_id and a.sql_id = 'ayzxbxqvp5dk3' and a.PARSING_SCHEMA_NAME='SAL_WORKFLOW'
and BEGIN_INTERVAL_TIME>=TO_DATE('27-MAR-2013 21:00', 'dd-mon-yyyy hh24:mi') AND END_INTERVAL_TIME<=TO_DATE('27-MAR-2013 23:00', 'dd-mon-yyyy hh24:mi')
order by 1,2;
SQL_ID SDATE PLAN_HASH_VALUE EXE_D RD ELA_D_MCR_SEC BG_D W_IO_D_MCR_SEC
ayzxbxqvp5dk3 27.Mar.13/21:00:00 0 2406 1 15876 1396 7052
ayzxbxqvp5dk3 27.Mar.13/21:10:00 0 2502 1 16401 1420 7001
ayzxbxqvp5dk3 27.Mar.13/21:20:00 0 3552 1 17444 1203 7183
ayzxbxqvp5dk3 27.Mar.13/21:30:00 0 2825 1 17860 1474 6310
ayzxbxqvp5dk3 27.Mar.13/22:00:00 0 1942 1 16250 1629 6510
ayzxbxqvp5dk3 27.Mar.13/22:10:00 0 2114 1 16276 1795 6170
ayzxbxqvp5dk3 27.Mar.13/22:20:00 0 2031 1 16769 1746 6604
ayzxbxqvp5dk3 27.Mar.13/22:40:00 0 2233 1 16435 1838 6348
8 rows selected.
select a.sql_id,TO_DATE(TO_CHAR(b.BEGIN_INTERVAL_TIME,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') as sdate,a.PLAN_HASH_VALUE,a.EXECUTIONS_DELTA EXE_D,
case (executions_delta) when 0 then 0 else ceil(a.ROWS_PROCESSED_DELTA/a.EXECUTIONS_DELTA) end as RD,
case (executions_delta) when 0 then 0 else ceil(a.ELAPSED_TIME_DELTA/a.EXECUTIONS_DELTA) end as ELA_D_MCR_SEC,
case (executions_delta) when 0 then 0 else ceil(a.BUFFER_GETS_DELTA/a.EXECUTIONS_DELTA) end as BG_D,
case (executions_delta) when 0 then 0 else ceil(a.IOWAIT_DELTA/a.EXECUTIONS_DELTA) end as W_IO_D_MCR_SEC
from dba_hist_sqlstat a ,dba_hist_snapshot b where a.snap_id=b.snap_id and a.sql_id = 'ayzxbxqvp5dk3' and a.PARSING_SCHEMA_NAME='SAL_WORKFLOW'
and BEGIN_INTERVAL_TIME>=TO_DATE('26-MAR-2013 21:00', 'dd-mon-yyyy hh24:mi') AND END_INTERVAL_TIME<=TO_DATE('26-MAR-2013 23:00', 'dd-mon-yyyy hh24:mi')
order by 1,2;
SQL_ID SDATE PLAN_HASH_VALUE EXE_D RD ELA_D_MCR_SEC BG_D W_IO_D_MCR_SEC
ayzxbxqvp5dk3 26.Mar.13/21:00:00 0 2948 1 11052 21 10543
ayzxbxqvp5dk3 26.Mar.13/21:30:00 0 2042 1 12381 23 11857
ayzxbxqvp5dk3 26.Mar.13/21:40:00 0 2329 1 12089 23 11586
ayzxbxqvp5dk3 26.Mar.13/21:50:00 0 2421 1 12209 23 11684
ayzxbxqvp5dk3 26.Mar.13/22:00:00 0 2360 1 10889 22 10398
ayzxbxqvp5dk3 26.Mar.13/22:10:00 0 2081 1 11059 22 10562
ayzxbxqvp5dk3 26.Mar.13/22:20:00 0 2384 1 11464 22 10894
ayzxbxqvp5dk3 26.Mar.13/22:40:00 0 2196 1 11514 22 11021
8 rows selected.Table is a non partitioned table without any trigger.
select OWNER,TABLE_NAME,SEGMENT_NAME,COLUMN_NAME,INDEX_NAME,CHUNK,ENCRYPT,COMPRESSION,SECUREFILE from dba_lobs where TABLE_NAME='&TABLE_NAME';
OWNER TABLE_NAME SEGMENT_NAME COLUMN_NAME INDEX_NAME CHUNK ENCR COMPRE SEC
CLASS TAB SYS_LOB0000119958C00004$$ BUSINESS_DATA SYS_IL0000119958C00004$$ 8192 NONE NONE NO
COLUMN_NAME NUM_DISTINCT NUM_NULLS LAST_ANALYZED SAMPLE_SIZE AVG_COL_LEN HISTOGRAM DENSITY
BUSINESS_DATA 0 0 16.Apr.13/09:28:06 14584877 87 NONE .0000000000Can anyone help me troubleshoot such high spike in buffer_gets ?>
Can anyone help me troubleshoot such high spike in buffer_gets ?
>
You haven't posted anything indicating a 'high spike in buffer_gets'.
All you posted are two sets of data with one set having higher values. Nothing indicates that the values are wrong or larger than they should be.
When a new row is inserted it goes into a block. Oracle has to 'get' that block before it can put the row into it. The more rows you INSERT the more blocks that will likely be needed and the more 'gets' that will likely occur.
You need to post something to support your assertion that there has been a 'spike' and also need to post some reason why that would be an issue even if there has been a spike. -
Hi all,
possible someone could help me on following issue:
I'm working for a software vendor and one of our customers is reporting that especially 2 of the sql statements of our application are " executed ineffective" on their database environment.
They are especially saying that "These statements are consuming a lot of CPU and doing a lot of buffer gets in relation to the number of executions."
They provided following extracts out of the statspack report.
SQL1:
SQL Statistics
~~~~~~~~~~~~~~
-> CPU and Elapsed Time are in seconds (s) for Statement Total and in
milliseconds (ms) for Per Execute
% Snap
Statement Total Per Execute Total
Buffer Gets: 322,101 16.6 .89
Disk Reads: 631 0.0 .48
Rows processed: 19,444 1.0
CPU Time(s/ms): 19 1.0
Elapsed Time(s/ms): 26 1.3
Sorts: 0 .0
Parse Calls: -2 -.0
Invalidations: 0
Version count: 1
Sharable Mem(K): 43
Executions: 19,444 SQL2:
SQL Statistics
~~~~~~~~~~~~~~
-> CPU and Elapsed Time are in seconds (s) for Statement Total and in
milliseconds (ms) for Per Execute
% Snap
Statement Total Per Execute Total
Buffer Gets: 628,517 22.9 3.26
Disk Reads: 128 0.0 .18
Rows processed: 27,492 1.0
CPU Time(s/ms): 27 1.0
Elapsed Time(s/ms): 30 1.1
Sorts: 0 .0
Parse Calls: 0 .0
Invalidations: 0
Version count: 1
Sharable Mem(K): 39
Executions: 27,492 The SQL1 is an update and SQL2 an Insert on the same table.
The accessed table has 6 indexes and a primary key column. On SQL1, the update, the where condition is reffering to the primary key column.
Both statements are using bind variables.
From my point, I would say, that the customer should provide the execution plan of both statements to verify that SQL1 is using the primary key.
As far as I understand "buffer gets" this issn't an issue because it's only saying that the data coumes out of the cache (which would be good) instead of reading the data from disk.
But I don't really see there any bottleneck.
Could you please give me some suggestions?
Many Thanks
JoergHi,
Recently we have encountered one performance issue, which is most likely caused by a sudden increase in the buffer gets per execution.
The SQL is an update statement, updating a table using a primary key (we have checked to confirm the running execution plan is using the primary key), and one field being updated is a BLOB column.
As shown in the below statistics, there is no major change in the number of executions during the every 20 minutes monitoring interval. However, the buffer gets per executions has been more than double, and the CPU time is almost doubled, hence the exec_time (elapsed time) has been doubled.
The same SQL has been running for the past four years in multiple similar databases. The database is Oracle 9.2.0.4 running on Solaris 9. For the past 300 days, the average elapsed time per execution is about 0.0093s, while the average buffer gets per execution is about 670. The update statement has been executed about 9 times per second.
The question is why there is a sudden increase in the buffer gets? The sudden increase happened twice for the past two days.
<pre>
B_TIME E_TIME EXECUTIONS_DIFF EXEC_TIME CPU_TIME BUFFER_GETS EXEC_PER_DAY
2009-11-25-12:23 2009-11-25-12:43 9363 .0081 .008 530.04 671338
2009-11-25-12:43 2009-11-25-13:03 11182 .0083 .008 538.59 799772
2009-11-25-13:03 2009-11-25-13:23 10433 .0078 .0077 474.61 761970
2009-11-25-13:23 2009-11-25-13:43 10043 .008 .0078 496.65 713581
2009-11-25-13:43 2009-11-25-14:04 8661 .0076 .0074 401.22 598169
2009-11-25-14:04 2009-11-25-14:23 8513 .0069 .0068 315.56 646329
2009-11-25-14:23 2009-11-25-14:43 10170 .007 .0068 312.28 726188
2009-11-25-14:43 2009-11-25-15:05 11873 .0072 .0069 320.17 787885
2009-11-25-15:05 2009-11-25-15:23 8633 .011 .0101 844.83 675014
2009-11-25-15:23 2009-11-25-15:44 9668 .0144 .0137 1448.51 680778
2009-11-25-15:44 2009-11-25-16:04 9671 .0163 .0156 1809.04 702163
2009-11-25-16:04 2009-11-25-16:25 10260 .0188 .0177 2107.67 711447
2009-11-25-16:25 2009-11-25-16:44 9827 .0157 .0151 1834.3 739593
2009-11-25-16:44 2009-11-25-17:05 10586 .0171 .0164 2008.25 714555
2009-11-25-17:05 2009-11-25-17:24 9625 .0189 .0181 2214.07 745829
2009-11-25-17:24 2009-11-25-17:44 9764 .016 .0154 1877.34 679782
2009-11-25-17:44 2009-11-25-18:04 8812 .0167 .0163 1989.61 652405
2009-11-26-07:24 2009-11-26-07:43 8230 .0141 .014 1614.6 614051
2009-11-26-07:43 2009-11-26-08:04 11494 .0165 .0159 1833.1 785044
2009-11-26-08:04 2009-11-26-08:24 11028 .0182 .0172 1979.61 800688
2009-11-26-08:24 2009-11-26-08:44 10533 .0154 .0149 1734.62 750248
2009-11-26-08:44 2009-11-26-09:04 9367 .018 .0168 2043.95 685274
2009-11-26-09:04 2009-11-26-09:24 10307 .0214 .0201 2552.43 729938
2009-11-26-09:24 2009-11-26-09:45 10932 .0251 .0234 3111.48 762328
2009-11-26-09:45 2009-11-26-10:05 10992 .0278 .0254 3386.41 797404
2009-11-26-10:05 2009-11-26-10:24 10179 .0289 .0269 3597.24 764088
2009-11-26-10:24 2009-11-26-10:45 10216 .032 .0286 3879.47 681592
2009-11-26-10:45 2009-11-26-11:04 10277 .0286 .0263 3539.44 799219
2009-11-26-11:20 2009-11-26-11:23 1378 .0344 .0312 4261.62 688203
2009-11-26-11:23 2009-11-26-11:36 7598 .0299 .027 3675.36 805481
2009-11-26-11:36 2009-11-26-11:43 3345 .0298 .0272 3610.28 752625
2009-11-26-11:43 2009-11-26-12:03 10383 .0295 .0278 3708.36 728158
2009-11-26-12:03 2009-11-26-12:23 10322 .0332 .03 4002.33 745669
2009-11-26-12:23 2009-11-26-12:43 11847 .0316 .0292 3899.34 852273
2009-11-26-12:43 2009-11-26-13:03 10027 .0331 .0298 4030.5 722546
2009-11-26-13:03 2009-11-26-13:23 10130 .035 .0309 4199.08 730577
2009-11-26-13:23 2009-11-26-13:43 9783 .0331 .0306 4161.3 707915
2009-11-26-13:43 2009-11-26-14:03 10460 .0322 .0291 3947.63 753748
2009-11-26-14:03 2009-11-26-14:23 9452 .0333 .0309 4143.31 678283
2009-11-26-14:23 2009-11-26-14:43 9127 .0318 .03 4051.52 659341
2009-11-26-14:51 2009-11-26-15:03 5391 .0358 .0328 4358.58 652356
2009-11-26-15:03 2009-11-26-15:16 7183 .0425 .0348 4615.42 746824
2009-11-26-15:16 2009-11-26-15:23 2921 .0417 .0373 4887.75 682092
2009-11-26-15:23 2009-11-26-15:43 9597 .0393 .0352 4603.62 679656
2009-11-26-15:43 2009-11-26-16:03 8797 .0411 .0362 4783.66 630755
2009-11-26-16:03 2009-11-26-16:23 9957 .0453 .0391 5168.28 718100
2009-11-26-16:23 2009-11-26-16:43 11209 .0436 .0369 4870.77 808395
2009-11-26-16:43 2009-11-26-17:03 10729 .0428 .0375 5119.56 766103
2009-11-26-17:03 2009-11-26-17:23 9116 .0409 .0363 4912.58 659098
</pre>
GaoYuan
Edited by: user12194561 on Nov 26, 2009 7:34 PM -
While inserting numeric data into a character datatype field and vice versa
Sir,
I have a very basic qiestion.Why am i not getting any error while inserting to say employees table a character type data to a numeric type field and vice versa?Iam using Oracle Database 10g Enterprise edition.Why am i not getting any error while inserting to say employees table a character type data to a numeric type field and vice versa?
Oracle tries an automatic conversion, when possible. Post an example of a character type data inserted into a numeric column. -
Error while inserting spatial data
Hi All,
I have a problem while inserting spatial data. could some one please help me in solving this.
I have creatd a table with spatial index.
INSERT INTO USER_SDO_GEOM_METADATA
VALUES('SDO_CA_test', 'CA', SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT ('LON', 71.19545, 120.35101, 0.000005),
MDSYS.SDO_DIM_ELEMENT ('LAT', 12.1145, 26.58041, 0.000005)), 8687);
CREATE INDEX IO_CA_test ON SDO_CAR_test(CA)
INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS ('SDO_COMMIT_INTERVAL=10000 SDO_RTR_PCTFREE = 0');when I insert data from another spatail table that does not have a index I get an error.
insert into sdo_ca_test as select * from base_sdo;
ORA-29875 Failed in the ececution of the ODCINDEXINSERT routine
ORA-13354 incorrect offset in ELEM_INFO_ARRAY
ORA_06512 at MDSYS.SDO_INDEX_METHOD_101 line. 709I believe that there is some incorrect data that is not with my index defination.
How do I check this invalid data at base_sdo table. The base_sdo table has no index.
rgds
Saz
Edited by: Saaz Ena on Dec 21, 2009 6:16 PMCan you try SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT
or SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT? e.g.
select * from base_sdo a where
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(a.CA, 0.000005) != 'TRUE'; -
Error while inserting data in SQL Server.
Hi',
I am using SOA 11.1.1.5
I am inserting data using DB adapter in MS SQL Server. Some times I get below error.
Error Message: {http://schemas.oracle.com/bpel/extension}bindingFault
Fault ID rrr/xxx!1.1*soa_313bd437-7bb9-41c6-a719-d1775b9afc4b/xx/4115908-BpInv0-BpSeq1.6-4
Fault Time Dec 24, 2012 8:02:09 AM
Non Recoverable System Fault :
<bpelFault><faultType>0</faultType><bindingFault xmlns="http://schemas.oracle.com/bpel/extension"><part name="summary"><summary>Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'insert' failed due to: DBWriteInteractionSpec Execute Failed Exception. insert failed. Descriptor name: [InsertIntoStagingxx.Stagingxx]. Caused by java.sql.BatchUpdateException: String or binary data would be truncated.. Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake. To classify it as retriable instead add property nonRetriableErrorCodes with value "-8152" to your deployment descriptor (i.e. weblogic-ra.xml). To auto retry a retriable fault set these composite.xml properties for this invoke: jca.retry.interval, jca.retry.count, and jca.retry.backoff. All properties are integers. ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution. </summary></part><part name="detail"><detail>String or binary data would be truncated.</detail></part><part name="code"><code>8152</code></part></bindingFault></bpelFault>
Please advice.
Thanks
YatanHi Yatan,
This should be due to data issues. And the error message is due to data truncation issues.
Please check your payload that you are trying to insert into the SQL server table.
One or more fields might have a data that is exceeding its defined length with respect to the table definitions.
Problem with using SQL server is that while inserting, you will not be pointed towards which field or column is causing the error.
You have to take the pain of searching through the entire payload to find the problem causing ones.
Thanks,
Deepak. -
Hi,
We are getting the below error while inserting a record in to DB. It is not occuring always, as sometimes the transactions are passing and some times it is throwing the below error. Any one faced this issue and have solution for the same?
The invocation resulted in an error: <jca-transport-application-error xmlns="http://www.bea.com/wli/sb/transports/jca" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jca-transport-error-message>Invoke JCA outbound service failed with application error</jca-transport-error-message>
<jca-runtime-fault-detail>
<eis-error-code xsi:nil="true"/>
<eis-error-message xsi:nil="true"/>
<exception>com.bea.wli.sb.transports.jca.JCATransportException: oracle.tip.adapter.sa.api.JCABindingException: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/ServiceProcessor_1.00/src/osb/resources/wsdls/Service_DB_Write_1.00 [ ServiceDBAdp_ptt::insert(SampleMiddlewareLogCollection) ] - WSIF JCA Execute of operation 'insert' failed due to: DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
; nested exception is:
BINDING.JCA-11616
DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake.
at com.bea.wli.sb.transports.jca.binding.JCATransportOutboundOperationBindingServiceImpl.invokeOneWay(JCATransportOutboundOperationBindingServiceImpl.java:114)
at com.bea.wli.sb.transports.jca.JCATransportEndpoint.sendOneWay(JCATransportEndpoint.java:191)
at com.bea.wli.sb.transports.jca.JCATransportEndpoint.send(JCATransportEndpoint.java:168)
at com.bea.wli.sb.transports.jca.JCATransportProvider.sendMessageAsync(JCATransportProvider.java:598)
at sun.reflect.GeneratedMethodAccessor900.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.bea.wli.sb.transports.Util$1.invoke(Util.java:83)
at $Proxy142.sendMessageAsync(Unknown Source)
at com.bea.wli.sb.transports.LoadBalanceFailoverListener.sendMessageAsync(LoadBalanceFailoverListener.java:148)
at com.bea.wli.sb.transports.LoadBalanceFailoverListener.sendMessageToServiceAsync(LoadBalanceFailoverListener.java:603)
at com.bea.wli.sb.transports.LoadBalanceFailoverListener.sendMessageToService(LoadBalanceFailoverListener.java:538)
at com.bea.wli.sb.transports.TransportManagerImpl.sendMessageToService(TransportManagerImpl.java:558)
at com.bea.wli.sb.transports.TransportManagerImpl.sendMessageAsync(TransportManagerImpl.java:426)
at com.bea.wli.sb.test.service.ServiceMessageSender.send0(ServiceMessageSender.java:380)
at com.bea.wli.sb.test.service.ServiceMessageSender.access$000(ServiceMessageSender.java:79)
at com.bea.wli.sb.test.service.ServiceMessageSender$1.run(ServiceMessageSender.java:137)
at com.bea.wli.sb.test.service.ServiceMessageSender$1.run(ServiceMessageSender.java:135)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at com.bea.wli.sb.security.WLSSecurityContextService.runAs(WLSSecurityContextService.java:55)
at com.bea.wli.sb.test.service.ServiceMessageSender.send(ServiceMessageSender.java:140)
at com.bea.wli.sb.test.service.ServiceProcessor.invoke(ServiceProcessor.java:454)
at com.bea.wli.sb.test.TestServiceImpl.invoke(TestServiceImpl.java:172)
at com.bea.wli.sb.test.client.ejb.TestServiceEJBBean.invoke(TestServiceEJBBean.java:167)
at com.bea.wli.sb.test.client.ejb.TestService_sqr59p_EOImpl.__WL_invoke(Unknown Source)
at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:40)
at com.bea.wli.sb.test.client.ejb.TestService_sqr59p_EOImpl.invoke(Unknown Source)
at com.bea.wli.sb.test.client.ejb.TestService_sqr59p_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:667)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:518)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)
Caused by: oracle.tip.adapter.sa.api.JCABindingException: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/ServiceProcessor_1.00/src/osb/resources/wsdls/Service_DB_Write_1.00 [ ServiceDBAdp_ptt::insert(SampleMiddlewareLogCollection) ] - WSIF JCA Execute of operation 'insert' failed due to: DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
; nested exception is:
BINDING.JCA-11616
DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake.
at oracle.tip.adapter.sa.impl.JCABindingReferenceImpl.post(JCABindingReferenceImpl.java:197)
at com.bea.wli.sb.transports.jca.binding.JCATransportOutboundOperationBindingServiceImpl.invokeOneWay(JCATransportOutboundOperationBindingServiceImpl.java:109)
... 37 more
Caused by: oracle.tip.adapter.sa.impl.fw.ext.org.collaxa.thirdparty.apache.wsif.WSIFException: servicebus:/WSDL/ServiceProcessor_1.00/src/osb/resources/wsdls/Service_DB_Write_1.00 [ ServiceDBAdp_ptt::insert(SampleMiddlewareLogCollection) ] - WSIF JCA Execute of operation 'insert' failed due to: DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
; nested exception is:
BINDING.JCA-11616
DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake.
at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.performOperation(WSIFOperation_JCA.java:662)
at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.executeOperation(WSIFOperation_JCA.java:353)
at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.executeRequestResponseOperation(WSIFOperation_JCA.java:312)
at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.executeInputOnlyOperation(WSIFOperation_JCA.java:291)
at oracle.tip.adapter.sa.impl.JCABindingReferenceImpl.invokeWsifProvider(JCABindingReferenceImpl.java:345)
at oracle.tip.adapter.sa.impl.JCABindingReferenceImpl.post(JCABindingReferenceImpl.java:195)
... 38 more
Caused by: BINDING.JCA-11616
DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [ServiceDBAdp.SampleMiddlewareLog].
Caused by java.lang.ArrayIndexOutOfBoundsException.
Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake.
at oracle.tip.adapter.db.exceptions.DBResourceException.createNonRetriableException(DBResourceException.java:682)
at oracle.tip.adapter.db.exceptions.DBResourceException.createEISException(DBResourceException.java:648)
at oracle.tip.adapter.db.exceptions.DBResourceException.outboundWriteException(DBResourceException.java:696)
at oracle.tip.adapter.db.DBInteraction.executeOutboundWrite(DBInteraction.java:1056)
at oracle.tip.adapter.db.DBInteraction.execute(DBInteraction.java:240)
at oracle.tip.adapter.sa.impl.fw.wsif.jca.WSIFOperation_JCA.performOperation(WSIFOperation_JCA.java:529)
... 43 more
Caused by: java.lang.ArrayIndexOutOfBoundsException</exception>
</jca-runtime-fault-detail>
</jca-transport-application-error>.
ThanksHi
Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array you are sending.
make sure your table can able to recieve that array of data -
ORA-00600: internal error code while inserting data in table
hi gems..
i am getting the below error while inserting data in a table...
*ORA-00600: internal error code, arguments: [kqd-objerror$ ] , , [0], [98], [BIN$sm1O+fYhF1jgRAAhKNYyZA==$0], [], [], [], [], [], [], []*
i can select the table absolutely but cant insert datas(but this is the schema owner and so datas should get inserted)
i have checked the alert.log...the entries in last few lines are like this:
<msg time='2011-11-25T03:08:55.763+05:30' org_id='oracle' comp_id='clients'
type='UNKNOWN' level='16' host_id='ICS167DOR'
host_addr='10.184.134.139'>
<txt>Directory does not exist for read/write [oracle/ora11g/app/ora11g/product/11.2.0/dbhome_1/log] [oracle/ora11g/app/ora11g/product/11.2.0/dbhome_1/log/diag/clients]
</txt>
</msg>
please help...thanks in advance
Edited by: user12780416 on Nov 25, 2011 3:29 AMhi...
finally i got the solution...i know that this problem may occur due to some other reasons also for different users...but the problem which caused the developers facing the error in this case is below:
they faced the error while importing the dumps in the server. at the same time the application developers told that they can select the tables but cannot insert any datas.
after listenning to this, i assumed that this may be a space problem with the system tablespace as it is responsible for storing the data dictionary.
i asked for the free spaces for the system tablespace and got the reason. It has only 0.2% left.
i told them to issue the resize command for the system01.dbf datafile(allocated 2GB more) and the problem got resolved.
Hope this helps..thanks -
Problem while inserting a record to infotype 416
Iam facing a problem while inserting a record to the infotype 416 for a personnel no using the FM 'HR_INFOTYPE_OPERATION'.I have created a FM to insert a record to the infotype 416.In that FM iam using the FM 'HR_INFOTYPE_OPERATION' to create a record for infotype 416.while executing my FM the FM 'HR_INFOTYPE_OPERATION' is returning the return value 0.But when i check in PA30 for the infotype 416,there is no record created for that personnel no.Also in the table PA0416 the record is not get created.SO what might be the problem.can anyone please provide me help on this.
I have attached the code of my FM for ur reference.
FUNCTION Y_ESS_FL_ENCASH.
DATA: G_COMPENSATION_AMOUNT LIKE PA0416-AMONT,
G_RETURN TYPE BAPIRETURN1.
DATA T_PA0416 LIKE P0416 OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
TCLAS = 'A'
PERNR = '00000014'
INFTY = '0416'
BEGDA = sy-datum
ENDDA = sy-datum
BYPASS_BUFFER = 'X'
LEGACY_MODE = ' '
IMPORTING
SUBRC =
TABLES
INFTY_TAB = T_PA0416
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2
LOOP AT T_PA0416
WHERE SUBTY = '1002'.
ENDLOOP.
IF SY-SUBRC <> 0.
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
NUMBER = '00000014'
IMPORTING
RETURN = G_RETURN.
IF SY-SUBRC <> 0.
MESSAGE I016(RP) WITH ' RECORD IS ALREADY LOCKED'.
ENDIF.
T_PA0416-PERNR = '00000014'.
T_PA0416-SUBTY = '1002'.
T_PA0416-INFTY = '0416'.
T_PA0416-OBJPS = ''.
T_PA0416-SPRPS = ''.
T_PA0416-SEQNR = ''.
T_PA0416-AEDTM = SY-DATUM.
T_PA0416-UNAME = SY-UNAME.
T_PA0416-ENDDA = SY-DATUM.
T_PA0416-BEGDA = SY-DATUM.
T_PA0416-NUMBR = '10'.
T_PA0416-WGTYP = '1530'.
T_PA0416-AMONT = '15000'.
T_PA0416-WAERS = 'INR'.
T_PA0416-QUONR = '1'.
APPEND T_PA0416.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY = '0416'
NUMBER = '00000014'
SUBTYPE = '1002'
OBJECTID =
LOCKINDICATOR =
VALIDITYEND = '31129999'
VALIDITYBEGIN = SY-DATUM
RECORDNUMBER = ''
RECORD = T_PA0416
OPERATION = 'INS'
TCLAS = 'A'
DIALOG_MODE = '0'
NOCOMMIT = 'X'
VIEW_IDENTIFIER =
SECONDARY_RECORD =
IMPORTING
RETURN = G_RETURN.
KEY =
IF G_RETURN+0(1) EQ 'E'.
MESSAGE I086(ZHR) WITH 'Record is not inserted in IT416'.
ELSE.
COMMIT WORK.
ENDIF.
CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
EXPORTING
NUMBER = '00000014'
IMPORTING
RETURN = G_RETURN.
ENDIF.
ENDFUNCTION.Hi Murthy
With a first glance, I think you have given a wrong parameter value to "validityend". It should be '99991231' not '31129999' .
If your problem still persists, try inserting the data online from PA30. If your input causes no errors, then please state what the return parameter contains.
Regards
*--Serdar <a href="https://www.sdn.sap.com:443http://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.sdnbusinesscard?u=qbk%2bsag%2bjiw%3d">[ BC ]</a> -
Error while Inserting message in JMS
Version : SOA 11G
I am getting following error while inserting message in JMS.
rror Message: {http://schemas.oracle.com/bpel/extension}bindingFault
Fault ID default/TestingSOA!2.0*soa_3b8b3493-6062-457c-8213-5dd613c95dd3/TransformData/30014-BpInv0-BpSeq0.3-4
Fault Time 06-Dec-2010 03:25:10
Non Recoverable System Fault :
<bpelFault><faultType>0</faultType><bindingFault xmlns="http://schemas.oracle.com/bpel/extension"><part name="summary"><summary>Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'Produce_Message' failed due to: ERRJMS_ERR_CR_QUEUE_PROD. ERRJMS_ERR_CR_QUEUE_PROD. Unable to create Queue producer due to JMSException. ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution. </summary></part><part name="detail"><detail>[JMSExceptions:045103]While trying to find a topic or a queue we could not find the specific JMSServer requested. The linked exception may contain more information about the reason for failure.</detail></part><part name="code"><code>null</code></part></bindingFault></bpelFault>
Steps followed while creating JMS
1. Login to weblogic console
2. Click Services>Messaging>JMS Module
3. Select SOAJMSModule
4. Click new, select Queue and press Next
5. Give JMS Name and JNDI
5. Pick Subdepolyment as "SOASUBDeployment" from dropdown and select JMS Server as "SOAJMSServer" and click "Finish"Steps followed while creating JMS
+1. Login to weblogic console+
+2. Click Services>Messaging>JMS Module+
+3. Select SOAJMSModule+
+4. Click new, select Queue and press Next+
+5. Give JMS Name and JNDI+
+5. Pick Subdepolyment as "SOASUBDeployment" from dropdown and select JMS Server as "SOAJMSServer" and click "Finish"+
Next u need to create Connection Factory and u need to update or create(if doesnt exist) a new plan.xml
Follow the below link:
http://www.packtpub.com/article/installation-configuration-oracle-soa-suite-11g-2 -
Issue while inserting a BDC program in Inbound Proxy.JDBC-- PI-- SAP.
The scenerio is jdbcsender-sappi-inboundproxy(ECC6.0).
The issue is related to SAP Plant Maintenance Module where We have a requirement for creating Maintenance item
programmatically from (SQLDatabase)Legacy Data for one of the interface.
since there are no standard BAPIS/Idocs or function modules available from SAP side for creating the maintenance item. So I
have written BDC program and with the help of submit statement in inbound proxy program, I am calling BDC program for
creation of the maintenance item.
When I tested the program independently on proxy side the Maintenance Item is getting created successfully but when I
executed from end-to-end ie. SQLDATABASE->SAP PI-->SAP. The message is getting strucked into the queue and queue got stopped on SAP.
ECC side and the status of the message is scheduled state on SXMB_MONI transaction of SAP ECC.
As the message is in scheduled state multiple number of Maintenance Items are getting created with the same values.
Has any one of our SAP friends, encountered this type of issue while inserting a BDC program in inbound proxy, please help
in fixing this issue. FYI... I am using sap pi7.0 with service pack 24 and ecc6.0
Waiting for your kind expert guidance...
cheers,
RamRaj,
Thanks for the reply. I have tried registering the queues but still the same problem. the message got stuck in the queue of ECC and showing below message in queue.
function module StatusText
SXMS_ASYNC_EXEC connection closed (no data)
I have checked in the forums especially for this issue but no one has provided the answer for this.
Thanks and Regards
Ram -
Issue while insert and update data to DB tables
Hello all,
i am having an issue while insert the data to DB table.
my scenario is DB1 to DB2. i had a sender channel with select query which fetches data from DB1 and inserts to DB2.
so the select query will fetch the records that were INSERTED to DB1 and records that were UPDATED to DB1 and needs to insert/update to DB2 table.
Now the issue is i am able to insert the records but not able toupdate the records to DB2 table due to primary key issue.
im message mapping
sender message type is as follows:
<src_message1>
----<row>
-------<fieldA>
-------<filedB>
-------<filedC>
Receiver message type as follows:
<trgt_message1>
----<STATEMENT_1>
----<TABLE_NAME>
----<ACTION> INSERT
----<TABLE>
----<ACCESS>
----<field1> primary key
----<field2>
----<field3>
----<field4>
----<KEY>
----<field1>
----<field2>
----<field3>
----<field4>
my query in sender channel is : select filedA, filedB, filedC from test_table where createdate=sysdate or updatedate=sysdate
so it feteches the data from DB1 and inserting to DB2 but not updating the records to DB2 due to primarykey issue.
please suggest how to solve ....will it solve by using UPDATE_INSERT for action?
Best Regards,SARANHi Nagarjuna,
i have done the following changes to target mapping structure;
1. action as UPDATE_INSERT
2. in access tab, i had mapped fieldDate to field4.
3. in Key tab, i assigned the sysdate to field4.
but issue still exist. could you please check my above changes are correct or not. if wrong please provide me the details that needs to be done.
thanks in advance.
i'm providing the error details again:
my query in sender channel is : select filedA, filedB, filedC, FiledDate from TEST_TABLE where fieldDate=sysdate or updatedate=sysdate
it returns 4 records as follows:
fieldA--fieldB-fieldC---fieldDate
1001----EU---- 1----
2011-11-10
1002----CN---- 0----
2011-11-10
1003----AP---- 1----
2008-03-15 (already exist in DB2)
1004----JP---- 1----
2007-04-12 (already exist in DB2)
the first two records are created today and remaining 2 records are updated the fieldC from 0 to 1 ( in DB1 )
while inserting these 4 records to DB2, we get the following error "java.sql.SQLException: ORA-00001: unique constraint (data.TEST_TABLE_PK) violated" .
Best Regards,SARAN -
Taking More Time while inserting into the table (With foriegn key)
Hi All,
I am facing problem while inserting the values into the master table.
The problem,
Table A -- User Master Table (Reg No, Name, etc)
Table B -- Transaction Table (Foreign key reference with Table A).
While inserting the data's in Table B, i need to insert the reg no also in table B which is mandatory. I followed the logic which is mentioned in the SRDemo.
While inserting we need to query the Table A first to have the values in TableABean.java.
final TableA tableA= (TableA )uow.executeQuery("findUser",TableA .class, regNo);
Then, we need to create the instance for TableB
TableB tableB= (TableB)uow.newInstance(TableB.class);
tableB.setID(bean.getID);
tableA.addTableB(tableB); --- this is for to insert the regNo of TableA in TableB.. This line is executing the query "select * from TableB where RegNo = <tableA.getRegNo>".
This query is taking too much time if values are more in the TableB for that particular registrationNo. Because of this its taking more time to insert into the TableB.
For Ex: TableA -- regNo : 101...having less entry in TableB means...inserting record is taking less than 1 sec
regNo : 102...having more entry in TableB means...inserting record is taking more than 2 sec
Time delay is there for different users when they enter transaction in TableB.
I need to avoid this since in future it will take more time...from 2 sec to 10 sec, if volume of data increases mean.
Please help me to resolve this issue...I am facing it now in production.
Thanks & Regards
VBHello,
Looks like you have a 1:M relationship from TableA to TableB, with a 1:1 back pointer from TableB to TableA. If triggering the 1:M relationship is causing you delays that you want to avoid there might be two quick ways I can see:
1) Don't map it. Leave the TableA->TableB 1:M unmapped, and instead just query for relationship when you do need it. This means you do not need to call tableA.addTableB(tableB), and instead only need to call tableB.setTableA(tableA), so that the TableB->TableA relation gets set. Might not be the best option, but it depends on your application's usage. It does allow you to potentially page the TableB results or add other query query performance options when you do need the data though.
2) You are currently using Lazy loading for the TableA->TableB relationship - if it is untriggered, don't bother calling tableA.addTableB(tableB), and instead only need to call tableB.setTableA(tableA). This of course requires using TopLink api to a) verify the collection is an IndirectCollection type, and b) that it is hasn't been triggered. If it has been triggered, you will still need to call tableA.addTableB(tableB), but it won't result in a query. Check out the oracle.toplink.indirection.IndirectContainer class and it's isInstantiated() method. This can cause problems though in highly concurrent environments, as other threads may have triggered the indirection before you commit your transaction, so that the A->B collection is not up to date - this might require refreshing the TableA if so.
Change tracking would probably be the best option to use here, and is described in the EclipseLink wiki:
http://wiki.eclipse.org/Introduction_to_EclipseLink_Transactions_(ELUG)#Attribute_Change_Tracking_Policy
Best Regards,
Chris
Maybe you are looking for
-
*** iTunes can't find my music but it's there!!!***
Hello All, I recently tried backing up all my music and I've ran into a problem. Whenever I plug in my external harddrive in my music plays with no problem at all When i disconnect the external and try to play my music every single song has a little
-
My brand new osx tiger dvd is scratched!
Right, is was initially meant to be an email to apple themselves but i seem unable to find an email address for them, i would write out my problem again but this per written email seems to sum everything up quite nicely... so perhaps my question is w
-
Resize table row height dynamically
Hi All, I have a requirement to display four item texts in one of the table column. I had created a subform with four texts in that column. I am getting the data as required, but by default the table row size has increased because of four texts in
-
Hello all! I am a proud Macbook owner, but when I tried to register my product, I failed. The selfsolve page says "Please validate your purchase date" and when I click on it, I get back to the screen where I have to enter a serial number. This loop c
-
I'm planning to travel to South Korea. I like to make/receive calls from/to South Korea and US. In this case, what is the best option I can combine to purchase Skype products?I'll have my Sprint HTC Evo 4G brought to South Korea with unlimited data p