Lời khuyên chung để khắc phục lỗi "Không còn dữ liệu để đọc từ ổ cắm".
Những lỗi này thường do một lỗi nghiêm trọng khác gây ra, chẳng hạn như lỗi ORA-600. Một sự cố nghiêm trọng đến mức quá trình máy chủ bị lỗi và thậm chí không thể gửi thông báo lỗi thích hợp đến máy khách. (Một lý do phổ biến khác cho những lỗi này là ngắt kết nối mạng do SQLNET.EXPIRE_TIME hoặc một số quy trình khác làm chết các phiên cũ.)
Xem Nhật ký cảnh báo để tìm ra thông báo lỗi ban đầu.
Tìm tệp alert_ [name] .log trong thư mục này:select value from v$parameter where name = 'background_dump_dest';
Sau khi bạn tìm thấy thông báo lỗi cụ thể và chi tiết, hãy truy cập support.oracle.com. Sử dụng "công cụ ora-600" và sau đó tra cứu số đầu tiên sau thông báo ORA-600.
Thường sẽ có một hoặc nhiều bài báo cho loại lỗi ORA-600 cụ thể đó. Sử dụng phiên bản và nền tảng chính xác để thu hẹp danh sách lỗi có thể có. (Nhưng đừng ngạc nhiên nếu "Các phiên bản bị ảnh hưởng" trong bài viết là sai. Tuyên bố của Oracle về "đã sửa trong phiên bản x.y" không phải lúc nào cũng đúng.)
Các bài viết thường giải thích chi tiết hơn về cách sự cố đã xảy ra, các cách giải quyết có thể xảy ra và giải pháp thường liên quan đến bản vá hoặc nâng cấp.
Trong thực tế, bạn hiếm khi muốn giải quyết những vấn đề này. Lời khuyên "điển hình" là liên hệ với Bộ phận hỗ trợ của Oracle để xác minh rằng bạn thực sự gặp phải vấn đề tương tự, nhận bản vá, xin phép và gỡ bỏ (các) môi trường, sau đó áp dụng bản vá. Và sau đó có thể nhận ra bản vá không hoạt động. Xin chúc mừng, bạn vừa lãng phí rất nhiều thời gian.
Thay vào đó, bạn thường có thể tránh vấn đề với một thay đổi nhỏ đối với truy vấn hoặc thủ tục. Có rất nhiều tính năng trong Oracle, hầu như luôn có một cách khác để thực hiện. Nếu mã cuối cùng trông hơi kỳ lạ, hãy thêm nhận xét để cảnh báo các lập trình viên trong tương lai:"Mã này trông kỳ lạ để tránh lỗi X, lỗi này sẽ được sửa trong phiên bản Y."
Lời khuyên cụ thể cho mã này
Nếu đó thực sự là toàn bộ quy trình của bạn, bạn nên thay thế nó bằng một cái gì đó như thế này:
insert into local.tab3(col1, col2, col3, col4)
select tab1.col1, tab1.col2, tab2.col1, tab2.col2
from [email protected] tab1
join [email protected] tab2
on tab1.col1 = tab2.col1
and tab1.col2 = tab2.col2;
Nói chung, bạn nên làm mọi thứ trong SQL nếu có thể. Đặc biệt nếu bạn có thể tránh mở nhiều con trỏ. Và đặc biệt nếu bạn có thể tránh mở nhiều con trỏ vào cơ sở dữ liệu từ xa.