Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mendapatkan id transaksi basis data saat ini menggunakan JDBC atau Hibernate?

Oracle

Saat menggunakan Oracle, Anda harus menjalankan kueri SQL berikut:

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

v$transaction view memberikan informasi tentang transaksi database yang sedang berjalan. Namun, mungkin ada beberapa transaksi yang berjalan di sistem kami, dan itulah sebabnya kami bergabung dengan v$transaction dengan v$session lihat.

v$session view menawarkan informasi tentang sesi kami saat ini atau koneksi database. Dengan mencocokkan alamat sesi antara v$transaction dan v$session dilihat, kita dapat menemukan pengidentifikasi transaksi yang sedang berjalan yang diberikan oleh xid kolom di v$transaction lihat.

Karena xid kolom bertipe RAW , kami menggunakan RAWTOHEX untuk mengonversi nilai biner pengidentifikasi transaksi ke representasi heksadesimalnya.

SQL Server

Saat menggunakan SQL Server, Anda hanya perlu menjalankan kueri SQL berikut:

SELECT CONVERT(VARCHAR, CURRENT_TRANSACTION_ID())

Karena CURRENT_TRANSACTION_ID fungsi mengembalikan BIGINT nilai kolom, kami menggunakan CONVERT untuk mendapatkan representasi String-nya.

PostgreSQL

Saat menggunakan PostgreSQL Server, Anda dapat menjalankan kueri SQL berikut untuk mendapatkan id transaksi saat ini:

SELECT CAST(txid_current() AS text)

Karena txid_current fungsi mengembalikan BIGINT nilai kolom, kami menggunakan CAST untuk mendapatkan representasi String-nya.

MySQL dan MariaDB

Saat menggunakan MySQL atau MariaDB, Anda dapat menjalankan kueri SQL berikut untuk mendapatkan id transaksi saat ini:

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

innodb_trx lihat di information_schema katalog menyediakan informasi tentang transaksi database yang sedang berjalan. Karena mungkin ada beberapa transaksi yang berjalan di sistem kami, kami perlu memfilter baris transaksi dengan mencocokkan sesi atau pengidentifikasi koneksi database dengan sesi yang sedang berjalan.

HSQLDB

Saat menggunakan database HyperSQL, Anda dapat menjalankan kueri SQL berikut untuk mendapatkan id transaksi saat ini:

VALUES (TRANSACTION_ID())

Mencatat id transaksi menggunakan MDC

ID transaksi berguna untuk logging karena memungkinkan kita untuk menggabungkan semua tindakan yang dijalankan dalam konteks transaksi database tertentu.

Dengan asumsi kita telah merangkum kueri SQL di atas dalam transactionId metode, kita bisa mengekstrak id transaksi saat ini dan meneruskannya ke kerangka Logger sebagai variabel MDC.

Jadi, untuk SLF4J, Anda dapat menggunakan put metode seperti yang diilustrasikan oleh contoh berikut:

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

MDC (Konteks Diagnostik yang Dipetakan) adalah untuk mencatat apa ThreadLocal adalah untuk benang Jawa. Pada dasarnya, MDC memungkinkan Anda untuk mendaftarkan pasangan kunci/nilai yang terbatas pada utas yang sedang berjalan dan yang dapat Anda rujuk saat kerangka kerja logging membuat pesan log.

Untuk mencetak variabel log "txId" ke log, kita perlu menyertakan variabel ini dalam pola appender log:

<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} pattern digunakan untuk mereferensikan txId variabel log.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membaca kueri sql ke pandas dataframe / python / Django

  2. Grup MySQL berdasarkan tanggal dan konversi dari cap waktu unix

  3. permintaan mysql untuk semua catatan tidak hari ini

  4. Nilai Kustom Peningkatan Otomatis MySQL

  5. Tidak dapat terhubung ke server Database (meja kerja mysql)