Doubt about transaction atomicity
Hello everyone.
Here i am posting some extract from from oracle 10g Documentation "Concepts" manual, "Part Number B10743-01", Chapter 4. "Transcation Managment".
Here are extracts :
"A transaction is a logical unit of work that contains one or more SQL statements. A transaction is an atomic unit. The effects of all the SQL statements in a transaction can be either all committed (applied to the database) or all rolled back (undone from the database)."
Some lines later, this has been given :
"Statement-Level Rollback
If at any time during execution a SQL statement causes an error, all effects of the statement are rolled back. The effect of the rollback is as if that statement had never been run. This operation is a statement-level rollback.
Errors discovered during SQL statement execution cause statement-level rollbacks. An example of such an error is attempting to insert a duplicate value in a primary key. Single SQL statements involved in a deadlock (competition for the same data) can also cause a statement-level rollback. Errors discovered during SQL statement parsing, such as a syntax error, have not yet been run, so they do not cause a statement-level rollback.
A SQL statement that fails causes the loss only of any work it would have performed itself. It does not cause the loss of any work that preceded it in the current transaction. If the statement is a DDL statement, then the implicit commit that immediately preceded it is not undone."
Now, My question is If we are considering TRANSCATION as atomic unit, then whats the relevance of statement level rollback. Moreover, statement level rollback states that if sql statement fails, it causes the loss only of any work it would have performed itself. But in actual, if three statements are fired one after another.
Say, statement 1 and 2 execute successfull but third fails then 1 and 2 also get rollbacked. Which is correct according to fact if we consider transcation as atomic.
But this is not accordance with the statement level rollback (text which is given in bold).
So, any explanation for this. What i am taking wrong.......
SQL> begin
2 insert into test values (1);
3 insert into test values (2);
4 insert into test values (2);
5 end;
6 /
begin
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C001481) violated
ORA-06512: at line 4
SQL> select * from test;
no rows selected
See, in this case nothing is inserted in tables, because transcation is atomic.be aware that this result is due solely to the lack of exception handling in your code.
Given this piece of code...
SQL> declare
2 procedure p (n in number) is
3 begin
4 insert into apc1 values (n);
5 insert into apc1 values (n*2);
6 exception
7 when others then null;
8 end;
9 begin
10 p(4);
11 p(2);
12 end;
13 /
PL/SQL procedure successfully completed.
SQL>...what rows are currently in the table? Let's take a peek...
SQL> select * from apc1;
COL1
4
8
2
SQL> In other words, only the last insert failed. This is in accordance with the documentation:
Also, if a stored subprogram fails with an unhandled exception, PL/SQL does not roll back database work done by the subprogram.
In your example all the inserts fail, because you didn't have any exception handling. This was a decision made by your calling environment (I assume SQL*Plus) which does not know how to cope with an unhandled exception except by rolling back the failing statement. Note that it does not rollback the transaction, only the statement...
SQL> delete from apc1
2 /
1 row deleted.
SQL> insert into apc1 values (1)
2 /
1 row created.
SQL> begin
2 insert into apc1 values (2);
3 insert into apc1 values (2);
4 end;
5 /
begin
ERROR at line 1:
ORA-00001: unique constraint (APC.SYS_C0010124) violated
ORA-06512: at line 3
SQL> select * from apc1
2 /
COL1
1
SQL> Cheers, APC
Similar Messages
-
begin
begin
insert into emp(emp_id, name) values (1234,'Tom')
end;
begin
inset into dept(dept_id,dept_name) values('SA_1','Sales')
end;
end;
I have a conceptual doubt. How many transactions are there in this code?Hi,
845910 wrote:
begin
begin
insert into emp(emp_id, name) values (1234,'Tom')
end;
begin
inset into dept(dept_id,dept_name) values('SA_1','Sales')
end;
end;
I have a conceptual doubt. How many transactions are there in this code?One.
If you are not COMMITting (or ROLLing BACK) between the two INSERT statements, then they are both part of the same transaction. -
Doubts about transaction code V_V2
I got one issue from clien, they said they want to sort one material reschduling by date.
so they set V_V2 first screen as document category = 0, delivery priority = 0, date = 1, document number = 2, document item = 3. and in second screen display as first sort by customer number, and in each customer number, it is sort by date(or maybe by document number).
where I can see the result after execute V_V2? how can I set it sort by date.Hi,
The sort order section, gives you option to sort by date of creation or earliest schedule line date.
The output from V_V2 will be a screen which will show you sales orders with material, qty, date information. This screen will also show you dates which have got better delivery dates compared to original schedule dates or dates which have been postponed into future due to rescheduling. You then can choose the orders you want the system to process.
suggestion would be to run with one material and one plant for you to get better idea of what the system proposes when you execute this transaction. Also you may use simulation option to check results of run. This does not save the results of rescheduling.
regards,
Vaibhav -
Query about transactions over the whole chart of accounts
hi, i'm a beginner with the SAP SDK, so pleaase be patient , i 'm working to do a SQL-query (yeah, i'm not allowed to use the COM objects) for all the transactions made on every account and also to retrieve their profit centers, so i have a few questions/validations that i need about the SAP bd-model:
as far as i know, the tables involved with this query i need are:
OJDT - journal entry
JDT1 - journal entry rows
OOCR - Distribution rules
OACT - Accounts
OPRC - Profit Centers
..¿or can i just skip the OOCR table and join the tables JDT1 and OPRC using the PrCode field? (the reference says this field is a FK of the OOCR table so that's why i'm not sure about this, even if the field name is fool-proof )
thanxs for your time!!
EDIT: this is the query so far, i have my doubts about the use of PrcCode(JDT1) as a FK for the OPRC table (because like i was mentioning before, the documentation says it isn't, it's a FK for the OORC table)
also the DI API Help file says there is also another 4 FK fields (ocrcode2,ocrcode3,ocrcode4,ocrcode5) for the OOCR table, so i'm wondering if this SQL query is fine like this or if i'm missing something else please help mee!
SELECT
je1.TransId
,je1.Debit
,je1.Credit
,acc.AcctCode
,acc.AcctName
,prc.PrcName
,prc2.PrcName
,prc3.PrcName
,prc4.PrcName
,prc5.PrcName
,je.Memo
FROM
JDT1 as je1
left join OPRC as prc on je1.ProfitCode = prc.PrcCode
left join OPRC as prc2 on je1.OcrCode2 = prc2.PrcCode
left join OPRC as prc3 on je1.OcrCode3 = prc3.PrcCode
left join OPRC as prc4 on je1.OcrCode4 = prc4.PrcCode
left join OPRC as prc5 on je1.OcrCode5 = prc5.PrcCode
inner join OACT as acc on je1.Account = acc.AcctCode
inner join OJDT as je on je1.TransId = je.TransId
and je.RefDate <= '20101028 00:00'
GROUP BY
je1.TransId
,je1.Credit
,je1.Debit
,acc.AcctCode
,acc.AcctName
,prc.PrcName
,prc2.PrcName
,prc3.PrcName
,prc4.PrcName
,prc5.PrcName
,je.MemoWhen u have created your company that time u should create with copy anuway
but it's look to me your COA is not generated with depending accounts -
Doubt about Bulk Collect with LIMIT
Hi
I have a Doubt about Bulk collect , When is done Commit
I Get a example in PSOUG
http://psoug.org/reference/array_processing.html
CREATE TABLE servers2 AS
SELECT *
FROM servers
WHERE 1=2;
DECLARE
CURSOR s_cur IS
SELECT *
FROM servers;
TYPE fetch_array IS TABLE OF s_cur%ROWTYPE;
s_array fetch_array;
BEGIN
OPEN s_cur;
LOOP
FETCH s_cur BULK COLLECT INTO s_array LIMIT 1000;
FORALL i IN 1..s_array.COUNT
INSERT INTO servers2 VALUES s_array(i);
EXIT WHEN s_cur%NOTFOUND;
END LOOP;
CLOSE s_cur;
COMMIT;
END;If my table Servers have 3 000 000 records , when is done commit ? when insert all records ?
could crash redo log ?
using 9.2.08muttleychess wrote:
If my table Servers have 3 000 000 records , when is done commit ? Commit point has nothing to do with how many rows you process. It is purely business driven. Your code implements some business transaction, right? So if you commit before whole trancaction (from business standpoint) is complete other sessions will already see changes that are (from business standpoint) incomplete. Also, what if rest of trancaction (from business standpoint) fails?
SY. -
Doubt about proxies implementation
hi experts i have small doubt about proxies implementation
1. if we r implementing client proxies, it means sap r/3(proxy)->>xi->>>file
system.here where we have to execute the SPROXY transaction. in sap r/3 or
in the xi server.and the next thing is where we have to write the report program
to trigger the interface.in sap r/3 or in the xi server.
2. if we r implementing server proxies, it means File->>xi->>>sap r/3
(proxy).here where we have to execute the SPROXY transaction. in sap r/3 or
in the xi server.
please clear me
Regards
giriSreeram,
The Integration Server and the client on which you generate the proxies should not be the same. If they are different then yes, you can use another client in your XI box itself to generate proxies and trigger the call to XI.
If you see this blog by Ravi ( incidentally he is my boss as well ) this is exactly what we have done as well.
/people/ravikumar.allampallam/blog/2005/03/14/abap-proxies-in-xiclient-proxy
When you say XI, you mean the Client on which the Integration Server is running! XI is basically a R3 instance with more functionality and its own Integration Engine.
Regards
Bhavesh -
Hey guys!!!
I have a doubt about master data, i need to add an atribute to a master data characteristic, do i have to erase the data to do this or can i add the atribute without erase the data?
Thanks and Regards!!>
Koundinya Karanam wrote:
> Hi,
> You should delete the Master data with SID's first before adding the attribute to that characteristic.
>
> Regards,
> KK.
KK,
Thats not true.
You neednot delete master data to add attributes to a characteristic.
Additionally, you cannot delete (there are methods to delete which are not suggested) master data in normal way, if there is transactional data for that characteristic.
Luis,
You should be able to add attribute to a characteristic without deleting master data, but make sure you load data for the same for values to reflect. -
Doubt about Master-Child relationships.
Hello,
I've a doubt about master-child relationships.
Any row in the master table need to has at least one row in the child table. What do I guarantee that?
Please, any ideas.
Thnx.If im correct you are asking that any row in master table should have a corresponding child record in detail
(transaction) table.
WELL , There is no compulsion that the child table should have a record linking to record in master table.
Master table is not depended on child table. Child table is dependent on data reference on master table.
Pls note that Master table is independent of the child table ( in terms of data reference only) .
This doesnt mean that if you want to delete the master records when child records exists. it gives an error in that case.
check the following example
SQL> create table master(n number primary key);
Table created.
SQL> insert into master values(1);
1 row created.
SQL> create table child(t number references master(n));
Table created.
Hello,
I've a doubt about master-child relationships.
Any row in the master table need to has at least one row in the child table. What do I guarantee that?
Please, any ideas.
Thnx. -
Lock held by in-doubt distributed transaction
I'm having an intermittent problem in our server where a distributed transaction
between WebLogic JMS (6.1 sp3) and Oracle (using the 9.1.2 XA driver) doesn't
complete and subsequent attempts to access the rows in question result in:
java.sql.SQLException: ORA-01591: lock held by in-doubt distributed transaction
4.33.52658
Has anybody else seen anything like this?
Rao,
The BEA patch is CR095835_610SP4. Apparently there is a corresponding patch for
SP3 as well. When configuring the jdbc connection pool set XaSetTransactionTimeout
= true and
XaTransactionTimeout = yourTimeoutValueInSeconds. This will instruct the Transaction
manager to set the timeout value on Oracle's XAResource during the two-phase commit
process. I believe Oracle refers to the timeout value as SesTm.
Cheers,
Tony
"Rao Boppana" <[email protected]> wrote:
>
>We are currently facing the same problem. Could you let us know more
>details about
>the patch BEA put out to fix this? Is there a patch #/bug #? We are currently
>running SP4, Oracle 9.2.3 using 9.2.0.1 drivers. We really cannot set
>our JTA
>timeout to less than 1 minute and hence we are left with option2. Any
>help would
>be greatly appreciated.
>
>
>"Tony Necakov" <[email protected]> wrote:
>>
>>Jane,
>>Thanks for the reply. After talking to Oracle support, we believe we've
>>discovered
>>the cause of the problem. Apparently, setting the JTA transaction timeout
>>does
>>not affect the default timeout from Oracle's point of view. Consequently,
>> XA
>>transactions exceeding 1 minute (Oracle's default) were being marked
>>by Oracle
>>as in-doubt. Subsequent commits or rollback from the transaction manager
>>were
>>being ignored. The solution is to either knock the JTA timeout value
>>to something
>>below Oracle's default or install a BEA patch which allows the transaction
>>manager
>>to set the timeout on the Oracle resource manager.
>>
>>"Jane Sampson" <[email protected]> wrote:
>>>Hi Tony,
>>>
>>>Yes, I believe there were some problems with 8.1.7. I believe it requires
>>>an Oracle patch AND a JDriver patch (if you are using the WebLogic
>JDriver).
>>>Open a case with support for details.
>>>
>>>Thanks,
>>>
>>>Jane
>>>BEA Support
>>>
>>>
>>>"Tony Necakov" <[email protected]> wrote in message
>>>news:[email protected]...
>>>>
>>>> We're seeing the same intermittent problem with Oracle 8.1.7.2 and
>>>8.1.7.4. The
>>>> problem occurs with WLS 6.1 service pack 3 and service pack 4.
>>>>
>>>> "Jane Sampson" <[email protected]> wrote:
>>>> >Hi Tim,
>>>> >
>>>> >There is an issue has been reported for Oracle 9.2.0.1 Database/Oracle
>>>> >9.2.0.1 Thin Driver and exhibits this behavior and is being address
>>>by
>>>> >both
>>>> >BEA and Oracle. I would suggest you open a case with Customer Support
>>>> >and
>>>> >mention CR090816. It could be the same problem.
>>>> >
>>>> >Thanks,
>>>> >
>>>> >Jane
>>>> >BEA Support
>>>> >
>>>> >"Tim Dawson" <[email protected]> wrote in message
>>>> >news:[email protected]...
>>>> >>
>>>> >> I'm having an intermittent problem in our server where a distributed
>>>> >transaction
>>>> >> between WebLogic JMS (6.1 sp3) and Oracle (using the 9.1.2 XA
>driver)
>>>> >doesn't
>>>> >> complete and subsequent attempts to access the rows in question
>>>result
>>>> >in:
>>>> >>
>>>> >> java.sql.SQLException: ORA-01591: lock held by in-doubt distributed
>>>> >transaction
>>>> >> 4.33.52658
>>>> >>
>>>> >> Has anybody else seen anything like this?
>>>> >
>>>> >
>>>>
>>>
>>>
>>
>
-
ORA-01591: lock held by in-doubt distributed transaction 5.43.1205830
ORA-01591: lock held by in-doubt distributed transaction 5.43.1205830
ORA-06512: at "LEAP.RUN_BATCH_FROM_TABLE", line 159
ORA-06512: at line 2
Please kindly assist.
Thanks+Regards
2TOADIs this one time or re-ocurring?
Oracle, as a RM, is simply pointing out that you have an indoubt transaction, with "unknown" state after the prepare phase (2pc), that holds a resource that your batch run needs. Check dba_2pc_pending and retry your batch run.
If problem persists then maybe it's time to investigate your distributed transaction system (is your app based on MS DTC, COM+ transactions?). You might need to manually resolve this, by forced rollback or commit.
Use http://tahiti.oracle.com/ and search for the ORA-nnnnn string, to lookup further info about the message.
Message was edited by:
orafad -
Doubt about a null value assigned to a String variable
Hi,
I have a doubt about a behavior when assigning a null value to a string variable and then seeing the output, the code is the next one:
public static void main(String[] args) {
String total = null;
System.out.println(total);
total = total+"one";
System.out.println(total);
}the doubt comes when i see the output, the output i get is this:
null
nulloneA variable with null value means it does not contains a reference to an object in memory, so the question is why the null is printed when i concatenate the total variable which has a null value with the string "one".
Is the null value converted to string ??
Please clarify
Regards and thanks!
Carlosnull is a keyword to inform compiler that the reference contain nothingNo. 'null' is not a keyword, it is a literal. Beyond that the compiler doesn't care. It has a runtime value as well.
total contains null value means it does not have memory,No, it means it refers to nothing, as opposed to referring to an object.
for representation purpose it contain "null"No. println(String) has special behaviour if the argument is null. This is documented and has already been described above. Your handwaving about 'for representation purpose' is meaningless. The compiler and the JVM don't know the purpose of the code.
e.g. this keyword shows a hash value instead of memory addressNo it doesn't: it depends entirely on the actual class of the object referred to by 'this', and specifically what its toString() method does.
similarly "total" maps null as a literal.Completely meaningless. "total" doesn't 'map' anything, it is just a literal. The behaviour you describe is a property of the string concatenation operator, not of string literals.
I hope you can understand this.Nobody could understand it. It is compete nonsense. The correct answer has already been given. Please read the thread before you contribute. -
I've developed an MDB that reads a message from a queue, performs database updates
against up to 2 databases, and sends an outgoing JMS message when all is complete.
The MDB uses container-managed transactions to ensure that all DB updates and
JMS messages are committed or rolled back together. I have had a lot of problems
related to transactions failing, becoming "in-doubt" in the database and locking
database resources indefinitely.
My environment is configured as follows:
WebLogic 8.1.2 Server
Oracle 9.2.0.4 database with RAC
XA Connection Pool with WebLogic Type 2 Oracle Driver OR Oracle 9.2.0.4
OCI Driver
I have read the BEA/HP white paper regarding Weblogic 8.1 with Oracle 9i RAC (http://dev2dev.bea.com/products/wlserver81/whitepapers/wls_bea_hp.jsp)
and have tried all of the solutions suggested in that paper. The only solution
that worked consistently without causing the in-doubt transactions was to change
my connection pools to point directly to a single node of the RAC cluster, not
to the shared instance. However, even with this configuration, I have seen these
errors occur when certain database failures occur.
A side-effect of this problem is that the associated WebLogic connection pools
begin to "forget" connections. The pool thinks that all of the connections are
in use (even though I am always calling Statement.close() and Connection.close()),
and the connection pool cannot be reset manually. The only way to clear the connection
pool is to bounce WebLogic.
The only posts I have found related to this error were regarding Oracle 8.1.7
and WebLogic 6.1. Any help would be greatly appreciated.
Exceptions:
<Mar 23, 2004 2:59:36 PM EST> <Error> <EJB> <BEA-010026> <Exception occurred during
commit of transaction Xid=BEA1-0526A28664707F28EDB9(6412513),Status=Rolled back.
[Reason=javax.transaction.xa.XAException
: prepare failed for XAResource 'ProfilingPool' with error XAER_NOTA : The XID
is not valid],numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since begin=2,seconds
left=60,XAServerResourceInfo[JMS_my
JmsStore]=(ServerResourceInfo[JMS_myJmsStore]=(state=rolledback,assigned=myserver),xar=JMS_myJmsStore),XAServerResourceInfo[ProfilingPool]=(ServerResourceInfo[ProfilingPool]=(state=rolledback,ass
igned=myserver),xar=ProfilingPool),SCInfo[mydomain+myserver]=(state=rolledback),local
properties=({}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=myserver+10.41.0.61:7001+m
ydomain+t3+, XAResources={JMS_myJmsStore, JMS_FileStore, ProfilingPool, SearchManagementPool,
AnnouncementsTxPool},NonXAResources={})],CoordinatorURL=myserver+10.41.0.61:7001+mydomain+t3+):
javax.tran
saction.xa.XAException: prepare failed for XAResource 'ProfilingPool' with error
XAER_NOTA : The XID is not valid
at weblogic.jdbc.oci.xa.XA.createException(XA.java:386)
at weblogic.jdbc.oci.xa.XADataSource.internalPrepare(XADataSource.java:905)
at weblogic.jdbc.oci.xa.XADataSource.prepare(XADataSource.java:885)
at weblogic.jdbc.jta.DataSource.prepare(DataSource.java:846)
at weblogic.transaction.internal.XAServerResourceInfo.prepare(XAServerResourceInfo.java:1167)
at weblogic.transaction.internal.XAServerResourceInfo.prepare(XAServerResourceInfo.java:401)
at weblogic.transaction.internal.ServerSCInfo$1.execute(ServerSCInfo.java:253)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
--------------- nested within: ------------------
weblogic.transaction.RollbackException: Could not prepare resource 'ProfilingPool
prepare failed for XAResource 'ProfilingPool' with error XAER_NOTA : The XID is
not valid - with nested exception:
[javax.transaction.xa.XAException: prepare failed for XAResource 'ProfilingPool'
with error XAER_NOTA : The XID is not valid]
at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:1644)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:300)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:221)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:412)
at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener.java:316)
at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:281)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2596)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:2516)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
2004-03-23 15:00:45,406 ERROR IS003989 [ExecuteThread: '17' for queue: 'ProfileCompleteListenerBean.ExecuteQueue']
my.package.search.business.ProfiledHoldingDAO.setProfilingStatus(ProfiledHoldingDAO.java:350
) - Failed to update profiling status for holding 10014 [] (-2)
java.sql.SQLException: ORA-02049: timeout: distributed transaction waiting for
lock
at weblogic.db.oci.OciCursor.getCDAException(OciCursor.java:282)
at weblogic.jdbc.oci.PreparedStatement.executeUpdate(PreparedStatement.java:226)
at weblogic.jdbc.oci.xa.PreparedStatement.executeUpdate(PreparedStatement.java:81)
at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:94)
at my.package.search.business.ProfiledHoldingDAO.setProfilingStatus(ProfiledHoldingDAO.java:345)
at my.package.search.business.ProfilingManager.disseminateAndAcknowledge(ProfilingManager.java:254)
at my.package.search.business.ProfileCompleteListenerBean.onMessage(ProfileCompleteListenerBean.java:128)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:382)
at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener.java:316)
at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:281)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2596)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:2516)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
2004-03-23 15:01:43,093 ERROR IS003989 [ExecuteThread: '18' for queue: 'HoldingStatusListenerBean.ExecuteQueue']
my.package.search.business.ProfiledHoldingDAO.getProfilingStatus(ProfiledHoldingDAO.java:265)
- Failed to retrieve profiling results for holding 10060 [] (-2)
java.sql.SQLException: ORA-01591: lock held by in-doubt distributed transaction
189.47.12
at weblogic.db.oci.OciCursor.getCDAException(OciCursor.java:282)
at weblogic.jdbc.oci.PreparedStatement.executeQuery(PreparedStatement.java:152)
at weblogic.jdbc.oci.xa.PreparedStatement.executeQuery(PreparedStatement.java:48)
at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:80)
at my.package.search.business.ProfiledHoldingDAO.getProfilingStatus(ProfiledHoldingDAO.java:256)
at my.package.search.business.ProfiledHoldingDAO.storeHoldingMetadata(ProfiledHoldingDAO.java:489)
at my.package.search.business.ProfiledHoldingDAO.storeNewHolding(ProfiledHoldingDAO.java:406)
at my.package.search.business.ProfilingManager.profileHolding(ProfilingManager.java:128)
at my.package.search.business.HoldingStatusListenerBean.onMessage(HoldingStatusListenerBean.java:121)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:382)
at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener.java:316)
at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:281)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2596)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:2516)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Hi. There is a serious bug in the Oracle DBMS (all versions) where in-doubt
transactions have their data locked in the DBMS by page rather than by row,
so it will indefinitely prevent access to all data on the page, including
logically uninvolved data. Oracle understands the problem but currently
says they will never fix it (it would take too much work). They offer the
alternative that you configure your table data to ensure that no more than
one datarow resides on a page.
Joe
Matt Smith wrote:
> I've developed an MDB that reads a message from a queue, performs database updates
> against up to 2 databases, and sends an outgoing JMS message when all is complete.
> The MDB uses container-managed transactions to ensure that all DB updates and
> JMS messages are committed or rolled back together. I have had a lot of problems
> related to transactions failing, becoming "in-doubt" in the database and locking
> database resources indefinitely.
>
> My environment is configured as follows:
> WebLogic 8.1.2 Server
> Oracle 9.2.0.4 database with RAC
> XA Connection Pool with WebLogic Type 2 Oracle Driver OR Oracle 9.2.0.4
> OCI Driver
>
> I have read the BEA/HP white paper regarding Weblogic 8.1 with Oracle 9i RAC (http://dev2dev.bea.com/products/wlserver81/whitepapers/wls_bea_hp.jsp)
> and have tried all of the solutions suggested in that paper. The only solution
> that worked consistently without causing the in-doubt transactions was to change
> my connection pools to point directly to a single node of the RAC cluster, not
> to the shared instance. However, even with this configuration, I have seen these
> errors occur when certain database failures occur.
>
> A side-effect of this problem is that the associated WebLogic connection pools
> begin to "forget" connections. The pool thinks that all of the connections are
> in use (even though I am always calling Statement.close() and Connection.close()),
> and the connection pool cannot be reset manually. The only way to clear the connection
> pool is to bounce WebLogic.
>
> The only posts I have found related to this error were regarding Oracle 8.1.7
> and WebLogic 6.1. Any help would be greatly appreciated.
>
> Exceptions:
> -----------------
> <Mar 23, 2004 2:59:36 PM EST> <Error> <EJB> <BEA-010026> <Exception occurred during
> commit of transaction Xid=BEA1-0526A28664707F28EDB9(6412513),Status=Rolled back.
> [Reason=javax.transaction.xa.XAException
> : prepare failed for XAResource 'ProfilingPool' with error XAER_NOTA : The XID
> is not valid],numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since begin=2,seconds
> left=60,XAServerResourceInfo[JMS_my
> JmsStore]=(ServerResourceInfo[JMS_myJmsStore]=(state=rolledback,assigned=myserver),xar=JMS_myJmsStore),XAServerResourceInfo[ProfilingPool]=(ServerResourceInfo[ProfilingPool]=(state=rolledback,ass
> igned=myserver),xar=ProfilingPool),SCInfo[mydomain+myserver]=(state=rolledback),local
> properties=({}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=myserver+10.41.0.61:7001+m
> ydomain+t3+, XAResources={JMS_myJmsStore, JMS_FileStore, ProfilingPool, SearchManagementPool,
> AnnouncementsTxPool},NonXAResources={})],CoordinatorURL=myserver+10.41.0.61:7001+mydomain+t3+):
> javax.tran
> saction.xa.XAException: prepare failed for XAResource 'ProfilingPool' with error
> XAER_NOTA : The XID is not valid
> at weblogic.jdbc.oci.xa.XA.createException(XA.java:386)
> at weblogic.jdbc.oci.xa.XADataSource.internalPrepare(XADataSource.java:905)
> at weblogic.jdbc.oci.xa.XADataSource.prepare(XADataSource.java:885)
> at weblogic.jdbc.jta.DataSource.prepare(DataSource.java:846)
> at weblogic.transaction.internal.XAServerResourceInfo.prepare(XAServerResourceInfo.java:1167)
> at weblogic.transaction.internal.XAServerResourceInfo.prepare(XAServerResourceInfo.java:401)
> at weblogic.transaction.internal.ServerSCInfo$1.execute(ServerSCInfo.java:253)
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
> --------------- nested within: ------------------
> weblogic.transaction.RollbackException: Could not prepare resource 'ProfilingPool
> prepare failed for XAResource 'ProfilingPool' with error XAER_NOTA : The XID is
> not valid - with nested exception:
> [javax.transaction.xa.XAException: prepare failed for XAResource 'ProfilingPool'
> with error XAER_NOTA : The XID is not valid]
> at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:1644)
> at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:300)
> at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:221)
> at weblogic.ejb20.internal.MDListener.execute(MDListener.java:412)
> at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener.java:316)
> at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:281)
> at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2596)
> at weblogic.jms.client.JMSSession.execute(JMSSession.java:2516)
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
> ...
> 2004-03-23 15:00:45,406 ERROR IS003989 [ExecuteThread: '17' for queue: 'ProfileCompleteListenerBean.ExecuteQueue']
> my.package.search.business.ProfiledHoldingDAO.setProfilingStatus(ProfiledHoldingDAO.java:350
> ) - Failed to update profiling status for holding 10014 [] (-2)
> java.sql.SQLException: ORA-02049: timeout: distributed transaction waiting for
> lock
> at weblogic.db.oci.OciCursor.getCDAException(OciCursor.java:282)
> at weblogic.jdbc.oci.PreparedStatement.executeUpdate(PreparedStatement.java:226)
> at weblogic.jdbc.oci.xa.PreparedStatement.executeUpdate(PreparedStatement.java:81)
> at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:94)
> at my.package.search.business.ProfiledHoldingDAO.setProfilingStatus(ProfiledHoldingDAO.java:345)
> at my.package.search.business.ProfilingManager.disseminateAndAcknowledge(ProfilingManager.java:254)
> at my.package.search.business.ProfileCompleteListenerBean.onMessage(ProfileCompleteListenerBean.java:128)
> at weblogic.ejb20.internal.MDListener.execute(MDListener.java:382)
> at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener.java:316)
> at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:281)
> at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2596)
> at weblogic.jms.client.JMSSession.execute(JMSSession.java:2516)
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
> ...
> 2004-03-23 15:01:43,093 ERROR IS003989 [ExecuteThread: '18' for queue: 'HoldingStatusListenerBean.ExecuteQueue']
> my.package.search.business.ProfiledHoldingDAO.getProfilingStatus(ProfiledHoldingDAO.java:265)
> - Failed to retrieve profiling results for holding 10060 [] (-2)
> java.sql.SQLException: ORA-01591: lock held by in-doubt distributed transaction
> 189.47.12
> at weblogic.db.oci.OciCursor.getCDAException(OciCursor.java:282)
> at weblogic.jdbc.oci.PreparedStatement.executeQuery(PreparedStatement.java:152)
> at weblogic.jdbc.oci.xa.PreparedStatement.executeQuery(PreparedStatement.java:48)
> at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:80)
> at my.package.search.business.ProfiledHoldingDAO.getProfilingStatus(ProfiledHoldingDAO.java:256)
> at my.package.search.business.ProfiledHoldingDAO.storeHoldingMetadata(ProfiledHoldingDAO.java:489)
> at my.package.search.business.ProfiledHoldingDAO.storeNewHolding(ProfiledHoldingDAO.java:406)
> at my.package.search.business.ProfilingManager.profileHolding(ProfilingManager.java:128)
> at my.package.search.business.HoldingStatusListenerBean.onMessage(HoldingStatusListenerBean.java:121)
> at weblogic.ejb20.internal.MDListener.execute(MDListener.java:382)
> at weblogic.ejb20.internal.MDListener.transactionalOnMessage(MDListener.java:316)
> at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:281)
> at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2596)
> at weblogic.jms.client.JMSSession.execute(JMSSession.java:2516)
> at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>
>
-
Doubt about Select statement.
Hi folks!!
I have a few doubts about the select statements, it may be a silly things but its useful for me.
what is difference between below statment.
1)SELECT * FROM TABLE.
2)SELECT SINGLE * FROM TABLE
3)SELECT SINGLE FROM TABLE.
Hope i will get answer,thanks in advance.
Regards
Richie..Hi,
try this and if possible use sap help.i mean place the cursor on select and press F1.
Types of select statements:
1. select * from ztxlfa1 into table it.
This is simple select statement to fetch all the data of db table into internal table it.
2. select * from ztxlfa1 into table it where lifnr between 'V2' and 'V5'.
Thisis using where condition between v2 and v5.
4. select * from ztxlfa1 where land1 = 'DE'. "row goes into default table work Area
5. select lifnr land1 from ztxlfa1
into corresponding fields of it "notice 'table' is omitted
where land1 = 'DE'.
append it.
endselect.
Now data will go into work area. and then u will add it to internal table by
append statement.
6. Table 13.2 contains a list of the various forms of select as it is used with internal tables and their relative efficiency. They are in descending order of most-to-least efficient.
Table 13.2 Various Forms of SELECT when Filling an Internal Table
Statement(s) Writes To
select into table it Body
select into corresponding fields of table it Body
select into it Header line
select into corresponding fields of it Header line
7. SELECT VBRK~VBELN
VBRK~VKORG
VBRK~FKDAT
VBRK~NETWR
VBRK~WAERK
TVKOT~VTEXT
T001~BUKRS
T001~BUTXT
INTO CORRESPONDING FIELDS OF TABLE IT_FINAL
FROM VBRK
INNER JOIN TVKOT ON VBRKVKORG = TVKOTVKORG
INNER JOIN T001 ON VBRKBUKRS = T001BUKRS
WHERE VBELN IN DOCNUM AND VBRK~FKSTO = ''
AND VBRK~FKDAT in date.
Select statement using inner joins for vbrk and t001 and tvkot table for this case based on the conditions
8. SELECT T001W~NAME1 INTO TABLE IT1_T001W
FROM T001W INNER JOIN EKPO ON T001WWERKS = EKPOWERKS
WHERE EKPO~EBELN = PURORD.
here selecting a single field into table it1_t001winner join on ekpo.
9. SELECT BUKRS LIFNR EBELN FROM EKKO INTO CORRESPONDING FIELDS OF IT_EKKO WHERE EBELN IN P_O_NO.
ENDSELECT.
SELECT BUTXT FROM T001 INTO IT_T001 FOR ALL ENTRIES IN IT_EKKO WHERE BUKRS = IT_EKKO-BUKRS.
ENDSELECT.
APPEND IT_T001.
here I am using for all entries statement with select statement. Both joins and for all entries used to fetch the data on condition but for all entries is the best one.
10. SELECT AVBELN BVTEXT AFKDAT CBUTXT ANETWR AWAERK INTO TABLE ITAB
FROM VBRK AS A
INNER JOIN TVKOT AS B ON
AVKORG EQ BVKORG
INNER JOIN T001 AS C ON
ABUKRS EQ CBUKRS
WHERE AVBELN IN BDOCU AND AFKSTO EQ ' ' AND B~SPRAS EQ
SY-LANGU
AND AFKDAT IN BDATE AND AVBELN EQ ANY ( SELECT VBELN FROM
VBRP WHERE VBRP~MATNR EQ ITEMS ).
Here we are using sub query in inner join specified in brackets.
Thanks,
chandu. -
ORA-01591: lock held by in-doubt distributed transaction
I am using oracle wcf adapter to connect to oracle to insert.
I am getting the ORA-01591: lock held by in-doubt distributed transaction.
Any ideas as to what could be the resolution. I have followed the below mentioned steps. but that's not a permanent solution.
Please advice.
The resolution described below is not acceptable and never should have been used. Although it does avoid the error, it's not okay to turn off AmbientTransaction when performing inserts
and/or updates. A different solution needs to be found.<o:p></o:p>
http://msdn.microsoft.com/en-US/library/dd788352(v=BTS.10).aspx <o:p></o:p>
"Not performing operations in a transactional context is advisable only for operations that do not make changes to the database. For operations that update data in the database, we recommend
setting the binding property to true otherwise you might either experience message loss or duplicate messages depending on whether you are performing inbound or outbound operations."<o:p></o:p>
********************************************<o:p></o:p>
This can be resolved by adjusting the configuration settings on the Oracle adapter, accessible via the Send Port properties. The properties and the values that should be used are shown below:<o:p></o:p>
** Binding tab:
incrPoolSize: 1
maxPoolSize: 10
useAmbientTransaction: False<o:p></o:p>
** Messages tab:
Isolation Level: ReadCommitted<o:p></o:p>
Also, you'll need to get a DBA to rollback the hanging "in-doubt" transactions, which will be viewable via the sql below. Otherwise, if you try processing the same data again, you'll
still get the same error.<o:p></o:p>
SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, HOST, COMMIT# FROM DBA_2PC_PENDING;<o:p></o:p>
The transactions can be rolled back with sql, using this syntax:<o:p></o:p>
ROLLBACK FORCE '<LOCAL_TRAN_ID>';
<o:p></o:p>
Thank you and have great day! Vivek Kulkarni MCAD.netHi Vivek,
This error is encountered by many DBA's and cause problem by locking the distributed transaction process, and not letting the query go through, because the Two - Phase Commit Mechanism got an error somewhere.
he DBA should query the pending_trans$ and related tables, and attempt to repair network connection(s) to coordinator and commit point.
Here are some codes to help you through the process:
This one brings in-doubt transactions:
select * from DBA_2PC_PENDING where state='prepared'
This one prepares the rollback script for the transactions:
select 'rollback force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'
All this is well described in below link
ORA-01591: lock held by in-doubt distributed transaction
ORA-01591: lock held by in-doubt distributed transaction string tips
On BizTalk Side you need to make ambient transaction to false as Oracle does not go ahead with DTC Transaction with Biz Talk
Thanks
Abhishek -
TS1702 Got problem about transaction Purchase Gold in games
I can't buys more gold from infinityblade2 it always said please contact iTunes about transaction but I always check my account no any problem I still have a lot money In my credit card
These are user-to-user forums, you can contact iTunes support here and ask them what the issue is : http://www.apple.com/support/itunes/contact/ - click on Contact iTunes Store Support on the right-hand side of the page
Maybe you are looking for
-
How can i share folders at Mac mini late 2009 with Apple Tv 3?
I'm using Mac mini 2009 and I can't share any folder with Apple tv 3...anyone managed to get a way to do so, so far?
-
Why doesn't SAP use SAPUI5 for this and that
This is my personal opinion about this topic! Again and again I stumble about this and now I want to share some of my thoughts about this topic. I want to share this from a point of view, when I was not a SAP Employee - I worked at a SAP Partner comp
-
Is there a Refresh Preview option in Adobe Bridge CS6 (mac)?
Hi, Just been doing a short tutorial on creating a web photo gallery with Bridge CS6..I notice in the tutorial that there are two options for preview ie: preview in browser and refresh preview. Try as I might I cant seem to find refresh preview..I ha
-
Flat File Destination: Broken Rows
I am exporting data to a csv file. One of the columns has values with so mixed characters which end up confusing the system and breaking the rows before the real end of the row. What I mean is; on the flat file a resultant single row can be broken do
-
Hello, I Do not have and Firewall, or AV programs on my PC I Havent Done anything besides try to uninstall and re-install skype. I keep getting the error "skype cant connect" Anyone got an Idea of what i can do? Windows 7 64x Bit