Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

डेटाबेस व्यू से चयन करते समय मुझे एक खुला लेनदेन क्यों मिलता है?

आपकी अपेक्षा के विपरीत, ऐसा लगता है कि डेटाबेस लिंक है खुले लेनदेन का स्रोत। पीएल/एसक्यूएल डेवलपर में रिमोट टेबल पर सेलेक्ट क्वेश्चन चलाते समय मैंने इस तरह का व्यवहार देखा है।

टॉम कायटे को उद्धृत करने के लिए ( स्रोत ):

संपादित करें :'कोई SQL कथन Oracle में लेन-देन प्रारंभ करता है'? नहीं, ऐसा नहीं है, और यहाँ इसका एक प्रदर्शन है। यह प्रदर्शन डेटा शब्दकोश दृश्य V$TRANSACTION<का उपयोग करता है /ए> , जो सक्रिय लेनदेन को सूचीबद्ध करता है। यह सब मेरे स्थानीय Oracle XE डेटाबेस पर चल रहा है, जिसमें मेरे अलावा कोई अन्य उपयोगकर्ता इससे जुड़ा नहीं है।

हम इस प्रदर्शन के दौरान निम्न तालिका का उपयोग करेंगे। इसमें केवल एक ही कॉलम है:

SQL> desc test;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 A                                                  NUMBER(38)

SQL> select count(*) from v$transaction;

  COUNT(1)
----------
         0

इस समय कोई सक्रिय लेनदेन नहीं है। आइए इस तालिका के विरुद्ध एक SQL क्वेरी चलाते हैं:

SQL> select * from test;

         A
----------
         2

SQL> select count(*) from v$transaction;

  COUNT(1)
----------
         0

अभी भी कोई सक्रिय लेनदेन नहीं है। चलिए अब कुछ ऐसा करते हैं जिससे लेन-देन शुरू हो जाएगा:

SQL> insert into test values (1);

1 row created.

SQL> select count(*) from v$transaction;

  COUNT(1)
----------
         1

जैसा कि अपेक्षित था, अब हमारे पास एक सक्रिय लेन-देन है।

SQL> commit;

Commit complete.

SQL> select count(*) from v$transaction;

  COUNT(1)
----------
         0

लेन-देन करने के बाद, यह अब सक्रिय नहीं है।

अब, एक डेटाबेस लिंक बनाते हैं। मैं Oracle XE का उपयोग कर रहा हूं, और निम्नलिखित मेरे Oracle XE इंस्टेंस से एक डेटाबेस लिंक बनाता है:

SQL> create database link loopback_xe connect to user identified by password using 'XE';

Database link created.

अब देखते हैं कि जब हम डेटाबेस लिंक पर तालिका से चयन करते हैं तो क्या होता है:

SQL> select count(*) from v$transaction;

  COUNT(1)
----------
         0

SQL> select * from [email protected]_xe;

         A
----------
         2
         1

SQL> select count(*) from v$transaction;

  COUNT(1)
----------
         1

जैसा कि आप देख सकते हैं, बस एक दूरस्थ तालिका से चयन करने से एक लेन-देन खुल जाता है।

मुझे यकीन नहीं है कि यहां क्या करना है या रोलबैक करना है, लेकिन मुझे वितरित लेनदेन के ins और बहिष्कारों को नहीं जानने के लिए स्वीकार करना होगा, जिसके भीतर उत्तर शायद निहित है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MacOS पर Oracle SQLDeveloper सही Java की स्थापना के बाद नहीं खुलेगा

  2. पहले से मौजूद बाधा में एक प्रतिबंधित नाम कैसे जोड़ें

  3. 2 कार्य जो Oracle में डेटाटाइम मान से सेकंड लौटाते हैं

  4. Oracle डाटाबेस डेवलपर च्वाइस अवार्ड्स

  5. Oracle का डिफ़ॉल्ट DATE प्रारूप