III. Binding and defining Oracle8 C datatypes
t lă bảng objec chứa objec bị khóa ,r lă REF nhận dạng objec.
Bản sao được đânh dấu khóa trong object cache sau khi gọi hăm OCIObjectLock() .
để khóa một graph hoặc một tập object thì gọi một số hăm OCIObjectLock() (mỗi hăm cho một object) , tốt hơn nín dùng mảng OCIObjectLock() .
Bằng việc khóa ứng dụng bảo đảm rằng object trong cache có thông tin mới nhất . Không có giao dịch năo khâc có thể sửa object trong khi ứng dụng khóa nó .
Khi kết thúc giao dịch , server tự động giải phóng câc khóa . Khóa trong bản sao object được reset .
Thực hiện optimistic locking
Có thể thực hiện optimistic locking trong một ứng dụng OCI nếu chạy câc transaction cùng một mức .
Orqcle8 OCI hổ trợ câc lời gọi hăm để tham chiếu câc object mă không phải khóa chúng , sửa chúng trong cache vă sau đó flush chúng văo CSDL .
Trong khi flush nếu một dirty object bị sửa bởi một giao dịch giân tiếp khâc từ khi bắt đầu giao dịch của bạn thì một lỗi giao dịch non-serializable được trả về . Nếu một trong câc dirty object được sửa bởi một giao dịch bất kỳ khâc thì câc thay đổi được ghi văo CSDL thănh công .
Hăm OCITransCommit() trước tiín flush câc dirty object trước khi giao cho một giao dịch khâc .
8 . commit vă Rollback câc ứng dụng object
Khi một giao dịch được chuyển giao (gọi hăm OCITranscommit()) tất cả câc object đê đânh dấu được flush văo server . Nếu một bản sao được tham chiếu trong thới gian giao dịch thì bản sao không được tham chiếu .
Khi một giao dịch được cuộn lại (rollback) thì tất cả câc object được unmarked . Nếu một bản sao được pinned trong thời gian tham chiếu thì bản sao đó lă unpinned .
GVHD :KS.Bùi Hoăi Thắng
Để quản lý việc giải phóng vùng nhớ thì object cache cố gắng sử dụng lại bất kỳ vùng nhớ năo . Object cache sử dụng lại vùng nhớ của một object khi thời gian sống(allocation duration) của object đê hết hoặc khi pin duration của object đê hết . Allocation duration được set khi một object được tạo ra bởi hăm OCIObjectnew() , pin duration được set khi một object được tham chiếu bởi hăm OCIObjectPin() . Pin duration cho một object không thể dăi hơn allocation duration .
Khi một object đưa ra việc kết thúc allocation duration của nó thì nó tự động bị xóa vă vùng nhớ của nó thể được sử dụng lại . Pin duration cho biết khi năo vùng nhớ đợc sử dụng lại vă vùng nhớ được sử dụng lại khi cache đầy .
OCI hổ trợ 2 duration được định nghĩa trước :
+ Transaction (OCI_DURATION_TRANS) : chết khi kết thúc transaction
+ Session (OCI_DURATIO_SESSION) : chết khi kết thúc session/connection
Ứng dụng có thể hoăn unpin một ứng dụng object bởi hăm OCIObjectUnpin() , có thể unpin tất cả object bởi hăm OCICacheUnpin() . Mặc định tất cả câc object bị unpin khi kết thúc pin duration .
Duration Example:
Table 11-2 Example of Allocation and Pin Durations
Ti
me Application Action Function
Object