2009-02-03 25 views
9

Có cách nào để biết liệu tôi có công việc không được cam kết (nghĩa là DML) trong một giao dịch không? Có thể một chế độ xem từ điển dữ liệu tôi có thể truy vấn?Làm cách nào để biết liệu tôi có công việc không được cam kết trong giao dịch Oracle không?

Một phương pháp để tìm hiểu điều này cả từ trong và ngoài phiên chạy giao dịch mở sẽ được hoan nghênh.

Cảm ơn bạn

Trả lời

15
SELECT * 
FROM v$session v 
WHERE v.AUDSID = userenv('sessionid') 
    AND v.TADDR IS NOT NULL 
+0

: Làm cách nào tôi có thể xem liệu có bất kỳ công việc không được cam kết nào trong phiên khác không. Tôi đã cập nhật trong hai phiên khác nhau, nhưng tôi chỉ thấy một bản ghi trong mỗi phiên. có thể xem dữ liệu không được phiên khác. –

+0

@GauravSoni: vui lòng đăng câu hỏi dưới dạng câu hỏi. – Quassnoi

18

Nếu bạn không có quyền truy cập vào v $ session bạn có thể sử dụng

select dbms_transaction.local_transaction_id from dual; 

chỉ này hoạt động từ bên trong phiên giao dịch nhưng không cần v $ đặc quyền. Nếu nó trả về một giá trị không rỗng, bạn đã bắt đầu một giao dịch. Điều đó thường có nghĩa là những thay đổi không được cam kết, nhưng có những ngoại lệ. Nếu bạn đã phát hành một điểm lưu trữ, đã thay đổi dữ liệu và quay trở lại điểm lưu trữ, giao dịch vẫn 'sống'. Ngoài ra, việc sử dụng các liên kết cơ sở dữ liệu bắt đầu giao dịch, thậm chí chỉ cho các lựa chọn (hoặc chúng được sử dụng).

+1

Điều này. Các giải pháp dựa vào các đặc quyền nâng cao mà nhiều người dùng cơ sở dữ liệu không có, là các giải pháp không tốt. –

Các vấn đề liên quan