Tôi đang thử nghiệm một hệ thống cơ sở dữ liệu mới bằng cách sử dụng trình điều khiển ODBC được cung cấp và gói RODBC
.Kết nối RODBC trở thành không hợp lệ
Vấn đề tôi gặp phải là sau khi chỉ có một vài thắc mắc (tất cả trong khoảng thời gian 2 ~ 3 phút hoặc ít hơn), kết nối không còn được công nhận là hợp lệ bởi R.
Cụ thể, nó chỉ là một hàm C
duy nhất trong gói RODBC
, RODBCcheckchannel
đang bị khiếu nại. Nó được gọi là gián tiếp bởi sqlQuery()
Dòng đầu tiên của cuộc gọi RODBC::sqlQuery
if (!odbcValidChannel(channel))
stop("first argument is not an open RODBC channel")
odbcValidChannel
kiểm tra ba thuộc tính của channel
.
Tôi có thể xác nhận rằng hai séc được thực hiện trong R
trả lại TRUE
.
Nó được kiểm tra cuối cùng, .Call(RODBC:::C_RODBCcheckchannel, channel, attr(channel, "id"))
mà trả về mã FALSE
Nguồn RODBCcheckchannel
như sau
SEXP RODBCcheckchannel(SEXP chan, SEXP id)
{
SEXP ptr = getAttrib(chan, install("handle_ptr"));
pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr);
return ScalarLogical(thisHandle && TYPEOF(ptr) == EXTPTRSXP &&
thisHandle->channel == asInteger(chan) &&
thisHandle->id == asInteger(id));
}
Tôi đã cố gắng sử dụng R -d valgrind
, nhưng kể từ khi mã C
không được đâm mỗi se, điều này không hữu ích.
Ai đó có thể làm sáng tỏ vì sao .Call(RODBC:::C_RODBCcheckchannel, channel, attr(channel, "id"))
lợi nhuận TRUE
cho một thời gian ngắn sau đó trả về FALSE
?
Nó có liên quan gì đến tay cầm không?
(Xin lỗi cho việc thiếu exmample tái sản xuất, vì điều đó sẽ đòi hỏi quyền truy cập vào một hệ thống cơ sở dữ liệu rất cụ thể)
Đoán: có lẽ DB đang đóng kết nối? –
Đơn giản - không có đủ thông tin ở đây. ODBC có cơ sở truy tìm/ghi nhật ký - bạn nên kích hoạt tính năng này, cố gắng tạo lại lỗi và xem những gì bạn tìm thấy. Thiếu ... Các vấn đề khắc phục sự cố như vậy thường đòi hỏi phải biết tên và phiên bản của cả DBMS và Driver được đề cập, đôi khi hệ điều hành chủ trên cả hai mặt và nhiều chi tiết khác ... mà chúng tôi không có ở đây . – TallTed
Điều duy nhất tôi có thể cung cấp là tôi đã trải qua các kết nối DB từ xa sau một khoảng thời gian, nhưng tôi đã thấy (với Oracle) sử dụng RODBC và ROracle, và nó luôn là DB từ xa làm việc đó. – joran