2009-09-09 38 views
6
> ALTER PACKAGE blah COMPILE; 
(wait about 10 minutes) 
> ORA-04021: timeout occurred while waiting to lock object 

Tôi hiểu tại sao tôi gặp lỗi hết thời gian chờ (gói đang được sử dụng).Có thể thay đổi thời gian chờ khóa đối tượng mặc định của Oracle không?

Có ai biết nếu có cách thay đổi khoảng thời gian chờ mặc định là 10 phút không? Điều này có thể được cấu hình ở cấp cơ sở dữ liệu/phiên/câu lệnh không?

Cảm ơn

Trả lời

6

có một tham số DDL_LOCK_TIMEOUT từ 11gR1:

DDL_LOCK_TIMEOUT định một giới hạn thời gian cho câu lệnh DDL sẽ đợi bao lâu trong một hàng đợi khóa DML. Giá trị mặc định bằng 0 cho biết trạng thái của NOWAIT. Giá trị tối đa là 1.000.000 giây sẽ dẫn đến câu lệnh DDL chờ đợi mãi mãi để có được khóa DML.

Tôi không chắc chắn bạn có thể thay đổi thời gian chờ mặc định trong các bản phát hành trước.

+0

Cảm ơn. Xấu hổ nó không phải là trong 10g. – cagcowboy

+0

này didnt thực sự làm việc cho tôi .. có bạn đã thử này? Tôi đã làm một 'thay đổi phiên tập ddl_lock_timeout = 5;' sau đó một 'thay đổi gói xxx biên dịch;' nhưng vẫn chờ đợi vài phút – ShoeLace

+2

@ShoeLace Tôi nghĩ rằng nó sẽ chỉ thay đổi hành vi nếu bạn chờ đợi trên DML, ví dụ cố gắng để thả một bảng trong khi someones có một giao dịch không phổ biến trên các hàng của bảng này (trong đó hành vi mặc định là tăng lỗi ngay lập tức). Nó có thể sẽ không hoạt động khi thay thế một gói hiện đang được sử dụng (trong đó hành vi mặc định là đợi đến khi gói không còn được sử dụng nữa). –

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