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

Cần trợ giúp để hiểu hành vi của SELECT ... FOR UPDATE gây ra bế tắc

Bảng USER có thể có rất nhiều khóa ngoại đề cập đến nó. Nếu bất kỳ cái nào trong số chúng chưa được lập chỉ mục, Oracle sẽ khóa toàn bộ bảng con trong khi nó xóa hàng khỏi bảng mẹ. Nếu nhiều câu lệnh chạy cùng một lúc, ngay cả với một người dùng khác, các bảng con giống nhau sẽ bị khóa. Vì không thể kiểm soát thứ tự của các hoạt động đệ quy đó nên có thể nhiều phiên sẽ khóa các tài nguyên giống nhau theo một thứ tự khác nhau, gây ra bế tắc.

Xem phần này trong sổ tay Khái niệm để biết thêm thông tin.

Để giải quyết vấn đề này, hãy thêm chỉ mục vào bất kỳ khóa ngoại nào chưa được lập chỉ mục. Nếu tên cột là tiêu chuẩn, một tập lệnh như thế này có thể giúp bạn tìm thấy các ứng cử viên tiềm năng:

--Find un-indexed foreign keys.
--
--Foreign keys.
select owner, table_name
from dba_constraints
where r_constraint_name = 'USER_ID_PK'
    and r_owner = 'THE_SCHEMA_NAME'
minus
--Tables with an index on the relevant column.
select table_owner, table_name
from dba_ind_columns
where column_name = 'USER_ID';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle JDBC PreparedStatement bỏ qua khoảng trống theo dõi

  2. Cài đặt APEX không thành công, PLS-00201:mã định danh 'SYS.DBMS_DB_VERSION' phải được khai báo

  3. Các lựa chọn thay thế cho các bảng tạm thời trong Oracle

  4. Hàng với giá trị mới nhất theo khách hàng và tháng

  5. java.sql.SQLException:ORA-00904