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

JDBC या हाइबरनेट का उपयोग करके वर्तमान डेटाबेस लेनदेन आईडी कैसे प्राप्त करें?

ओरेकल

Oracle का उपयोग करते समय, आपको निम्न SQL क्वेरी निष्पादित करनी होगी:

SELECT RAWTOHEX(tx.xid)
FROM v$transaction tx
JOIN v$session s ON tx.ses_addr = s.saddr

v$transaction दृश्य वर्तमान में चल रहे डेटाबेस लेनदेन के बारे में जानकारी प्रदान करता है। हालाँकि, हमारे सिस्टम में कई लेन-देन चल सकते हैं, और इसीलिए हम v$transaction में शामिल हो रहे हैं v$session . के साथ देखें।

v$session दृश्य हमारे वर्तमान सत्र या डेटाबेस कनेक्शन के बारे में जानकारी प्रदान करता है। v$transaction . के बीच सत्र के पते का मिलान करके और v$session दृश्य, हम xid . द्वारा दिए गए वर्तमान चल रहे लेनदेन पहचानकर्ता को ढूंढ सकते हैं v$transaction . में कॉलम देखें।

क्योंकि xid कॉलम RAW type प्रकार का है , हम RAWTOHEX . का उपयोग कर रहे हैं लेन-देन पहचानकर्ता बाइनरी मान को उसके हेक्साडेसिमल प्रतिनिधित्व में बदलने के लिए।

एसक्यूएल सर्वर

SQL सर्वर का उपयोग करते समय, आपको बस निम्न SQL क्वेरी निष्पादित करनी होगी:

SELECT CONVERT(VARCHAR, CURRENT_TRANSACTION_ID())

क्योंकि CURRENT_TRANSACTION_ID फ़ंक्शन एक BIGINT देता है कॉलम मान, हम उपयोग कर रहे हैं CONVERT इसका स्ट्रिंग प्रतिनिधित्व प्राप्त करने के लिए।

पोस्टग्रेएसक्यूएल

PostgreSQL सर्वर का उपयोग करते समय, आप वर्तमान लेनदेन आईडी प्राप्त करने के लिए निम्न SQL क्वेरी निष्पादित कर सकते हैं:

SELECT CAST(txid_current() AS text)

क्योंकि txid_current फ़ंक्शन एक BIGINT देता है कॉलम मान, हम CAST . का उपयोग कर रहे हैं इसका स्ट्रिंग प्रतिनिधित्व प्राप्त करने के लिए।

MySQL और MariaDB

MySQL या MariaDB का उपयोग करते समय, आप वर्तमान लेनदेन आईडी प्राप्त करने के लिए निम्न SQL क्वेरी निष्पादित कर सकते हैं:

SELECT tx.trx_id
FROM information_schema.innodb_trx tx
WHERE tx.trx_mysql_thread_id = connection_id()

innodb_trx information_schema . में देखें कैटलॉग वर्तमान में चल रहे डेटाबेस लेनदेन के बारे में जानकारी प्रदान करता है। चूंकि हमारे सिस्टम में कई लेन-देन चल सकते हैं, हमें सत्र या डेटाबेस कनेक्शन पहचानकर्ता को वर्तमान में चल रहे सत्र के साथ मिलान करके लेनदेन पंक्तियों को फ़िल्टर करने की आवश्यकता है।

एचएसक्यूएलडीबी

हाइपरएसक्यूएल डेटाबेस का उपयोग करते समय, आप वर्तमान लेनदेन आईडी प्राप्त करने के लिए निम्नलिखित एसक्यूएल क्वेरी निष्पादित कर सकते हैं:

VALUES (TRANSACTION_ID())

MDC का उपयोग करके लेन-देन आईडी लॉग करना

लेन-देन आईडी लॉगिंग के लिए उपयोगी है क्योंकि यह हमें उन सभी कार्यों को एकत्रित करने की अनुमति देता है जो किसी दिए गए डेटाबेस लेनदेन के संदर्भ में निष्पादित किए गए थे।

मान लें कि हमने उपरोक्त SQL क्वेरी को transactionId में इनकैप्सुलेट किया है विधि, हम वर्तमान लेनदेन आईडी निकाल सकते हैं और इसे एमडीसी चर के रूप में लॉगर ढांचे में पास कर सकते हैं।

तो, SLF4J के लिए, आप put . का उपयोग कर सकते हैं निम्नलिखित उदाहरण द्वारा सचित्र विधि:

MDC.put("txId", String.format(" TxId: [%s]", transactionId(entityManager)));

MDC (मैप्ड डायग्नोस्टिक कॉन्टेक्स्ट) लॉगिंग के लिए क्या है ThreadLocal जावा धागे के लिए है। मूल रूप से, एमडीसी आपको कुंजी/मूल्य जोड़े पंजीकृत करने की अनुमति देता है जो वर्तमान में चल रहे थ्रेड तक ही सीमित हैं और जब लॉगिंग फ्रेमवर्क लॉग संदेश बनाता है तो आप संदर्भित कर सकते हैं।

लॉग में "txId" लॉग वेरिएबल को प्रिंट करने के लिए, हमें इस वेरिएबल को लॉग एपेंडर पैटर्न में शामिल करना होगा:

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>TRACE</level>
    </filter>
    <encoder>
        <Pattern>%-5p [%t]:%X{txId} %c{1} - %m%n</Pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

%X{txId} पैटर्न का उपयोग txId . को संदर्भित करने के लिए किया जाता है लॉग चर।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ORDER BY DESC तेज़ है लेकिन ASC बहुत धीमा है

  2. यह पीडीओ तैयार बयान झूठा रिटर्न देता है लेकिन एक त्रुटि नहीं फेंकता है

  3. सशर्त MySQL क्रम दो (समान रूप से महत्वपूर्ण) स्तंभों द्वारा

  4. कैसे mysql में अनुक्रमिक क्रमांकन में अंतराल खोजने के लिए?

  5. मैसकल जॉइन डुप्लिकेट पंक्तियाँ देता है