ओरेकल
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
. को संदर्भित करने के लिए किया जाता है लॉग चर।