2010-04-06 21 views
5

Một trong những khách hàng của chúng tôi phàn nàn rằng đơn của chúng tôi không hoạt động. Lý do của họ là hàm sql của chúng ta gọi tới cơ sở dữ liệu Oracle của họ không nhận được kết quả "mong đợi". Đôi khi, nó sẽ thất bại nhưng ứng dụng của chúng tôi có được thành công từ cơ sở dữ liệu của họ. Nó thực sự bực bội vì đó là cơ sở dữ liệu của họ và chúng tôi không thể thực hiện bất kỳ thử nghiệm nào trên đó.Làm thế nào để đăng nhập SQL thô từ Oracle api C++ api?

Chúng tôi đang sử dụng API C++ Oracle OCCI. Có anyway chúng ta có thể đăng nhập sql nguyên từ cuối của chúng tôi? Điều đó sẽ rất hữu ích và chúng tôi có thể gửi kịch bản cho họ và cho phép họ gỡ lỗi trong hệ thống của họ để tìm ra vấn đề.

Xin cảm ơn trước.

Trả lời

0

Lý tưởng nhất là bạn sẽ bật theo dõi ở cấp cơ sở dữ liệu sẽ tạo tệp theo dõi chứa tất cả hoạt động mà cơ sở dữ liệu đã thực hiện.

Các lựa chọn thay thế khác sẽ là thay đổi ứng dụng của bạn để ghi nhật ký tất cả SQL mà nó sắp thực thi đối với cơ sở dữ liệu.

bài này cũng đi vào một số tùy chọn khác (họ tiếp cận nó từ cố gắng để phát hiện xem SQL injection đang xảy ra) để sniff các hoạt động cơ sở dữ liệu:

http://www.symantec.com/connect/articles/detecting-sql-injection-oracle

Mặc dù nó phải được thiết lập trên cơ sở dữ liệu, một dấu vết sẽ cung cấp cho bạn những kết quả xác thực nhất. Oracle Fine Grained Auditing là một cái gì đó khác để xem xét nếu bạn đang ở trên Oracle 9i hoặc cao hơn.

0

Tùy thuộc vào kiến ​​trúc mà các câu lệnh được gửi qua mạng không nhất thiết phản ánh các câu lệnh SQL được thi hành. Ví dụ rõ ràng là gọi một thủ tục lưu sẵn, nơi mạng đơn giản có cuộc gọi, nhưng cơ sở dữ liệu hành động tất cả các câu lệnh SQL cơ bản của thủ tục. Tuy nhiên kích hoạt, kiểm soát truy cập hạt mịn, xem vv tất cả có thể có tác động tương tự.

Đối với chuyển nhượng mạng, bạn có thể nhìn vào SQL net traces

Về phía cơ sở dữ liệu, nhìn vào DBMS_MONITOR

1

tôi giả sử rằng bạn đang phát hành chỉ là một câu lệnh SQL, kể từ khi bạn nói rằng bạn muốn xem 'SQL thô từ đầu của bạn'. Điều tốt nhất, sau đó, là để có được dấu vết cơ sở dữ liệu, như đã được đề xuất. Điều tôi muốn chỉ ra là ngay cả khi SQL của bạn trả về kết quả mong đợi trong một cơ sở dữ liệu thử nghiệm, cùng một SQL có thể trả lại kết quả không mong muốn trong cơ sở dữ liệu khác vì dữ liệu có thể khác: dữ liệu có thể bị hỏng, chỉ mục có thể tồn tại hoặc có thể không tồn tại, các ràng buộc có thể được xác định hay không, vv. Chắc chắn, bạn cần lấy dấu vết từ cơ sở dữ liệu để có thể tiến lên phía trước.

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