Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle Sequence tiếp theo đang nhảy số qua lại

Tôi cá rằng cơ sở dữ liệu của bạn đang chạy RAC (Cụm ứng dụng thực). Giả sử đó là trường hợp và bạn tạo chuỗi với tất cả các cài đặt mặc định, đó là hành vi được mong đợi.

Cài đặt mặc định là lưu vào bộ đệm 20 giá trị. Theo mặc định, mỗi nút trong cụm RAC sẽ có một bộ đệm riêng. Giả sử rằng bạn có một cụm với hai nút A và B, lần đầu tiên một nextval được yêu cầu trên A, A sẽ lưu vào bộ nhớ cache các giá trị 1-20 và trả về giá trị 1. Nếu yêu cầu tiếp theo cho một nextval được thực hiện trên B, B sẽ lưu vào bộ nhớ cache các giá trị 21-40 và trả về giá trị 21. Từ đó, giá trị bạn nhận được sẽ phụ thuộc vào nút mà kết nối của bạn đang chạy.

Nói chung, đây không phải là một vấn đề. Chuỗi tạo ra các số duy nhất. Các số thường không cần liên tiếp. Nếu bạn thực sự cần các giá trị được trả về tuần tự vì bạn đang làm một việc gì đó như sắp xếp thứ tự theo giá trị do trình tự tạo để xác định hàng "đầu tiên" hoặc "cuối cùng", bạn có thể sử dụng ORDER khi bạn tạo chuỗi để buộc các giá trị được trả về theo thứ tự. Tuy nhiên, điều đó có hàm ý tiêu cực về hiệu suất trong cơ sở dữ liệu RAC, vì nó làm tăng lượng giao tiếp cần phải tiếp tục giữa các nút để đồng bộ hóa các giá trị được trả về. Nếu bạn cần xác định hàng "đầu tiên" hoặc "cuối cùng", nói chung tốt hơn là thêm date hoặc timestamp vào bảng và sắp xếp theo thứ tự thay vì giả định rằng khóa chính được tạo tuần tự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt Oracle Instant Client

  2. TO_CHAR của một loại Oracle PL / SQL TABLE

  3. Cách tìm tên ràng buộc trong Oracle

  4. Giải pháp cho ORA-00997:sử dụng bất hợp pháp kiểu dữ liệu LONG

  5. Cách rõ ràng nhất để xây dựng một chuỗi SQL trong Java