Hiển thị kết quả từ 1 đến 4 / 4
  1. #1
    Tham gia
    17-08-2002
    Location
    Tp HCM
    Bài viết
    49
    Like
    0
    Thanked 1 Time in 1 Post

    Câu hỏi, cần giúp đỡ ĐỒNG BỘ HÓA TRONG SQL SERVER 2000

    Trong SQL Server 2000, tôi có 1 Store Procedure(SP) sau:
    CREATE PROCEDURE sp_addSell
    (
    ....
    )
    AS
    SET XACT_ABORT ON
    BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    /* Thực hiện các câu truy vấn (insert,update,delete) ở đây*/
    if(@@rowcount=0) rollback tran
    ....
    commit tran
    GO
    Theo cơ chế cài đặt ở trên, thì nếu có 2 giao tác cùng xảy ra trên cùng 1 đơn vị dữ liệu, thì giao tác 2 sẽ chờ giao tác 1 commit thì giao tác 2 sẽ thực hiện(Tôi hiểu vậy có đúng không?).Nhưng khi tôi thực hiện 2 giao tác trên cùng 1 lúc(đồng thời) thì chỉ có 1 giao tác commit(ví dụ tôi cùng insert đồng thời vào table tblSell thì thấy trong table tblSell chỉ được insert 1 dòng). Bạn nào có ý kiến gì giải thích cho mọi người trong box này biết với.Thanks!
    Quote Quote

  2. #2
    Tham gia
    09-01-2003
    Bài viết
    153
    Like
    0
    Thanked 1 Time in 1 Post
    Anh bạn hiểu như vậy là đúng rồi.

    mình thực sự cũng không hiểu tại sao anh bạn chỉ insert được có một dòng.
    thử như vậy xem sao?

    mở QA tự cho đây là giao tác 1, đánh hàng code dưới đây:
    chắc bạn hiểu là tui comment out hàng thứ 4 tức thị là giao tác này chưa commited.

    begin tran
    set transaction isolation level serializable
    insert tblSell (myfield) values (1)
    --commit tran


    mở một QA khác ở window thứ 2, hiểu nó là giao tác 2, đánh hàng code dưới đây:
    begin tran
    set transaction isolation level serializable
    insert tblSell (myfield) values (2)
    --commit tran

    quay lại window 1 (giao tác 1) chạy hàng code thứ 4
    quay lại window 2 (giao tác 2) chạy hàng code thứ 4

    chạy select bạn sẽ thấy 2 rows insert vô đâu có vấn đề gì.

    Window thứ 2 ở trên thay vì insert bạn thử làm update/delete/or select bạn sẽ thấy nó đứng lại chờ. lúc này bạn phải quay lại window 1 để commit tran thì sẽ thấy window 2 tự đọng chạy tiếp.

    good luck
    tn

  3. #3
    Tham gia
    17-08-2002
    Location
    Tp HCM
    Bài viết
    49
    Like
    0
    Thanked 1 Time in 1 Post

    ĐỒNG BỘ HÓA TRONG SQL

    Ý bạn nói tôi hiểu. Nhưng vấn đề tôi thấy thắc mắc là khi tôi exec 2 giao tác cùng 1 lúc(đồng thời), tức là 2 người cùng exec cùng lúc, thì thấy chỉ insert có 1 dòng.

  4. #4
    Tham gia
    09-01-2003
    Bài viết
    153
    Like
    0
    Thanked 1 Time in 1 Post
    vd tôi đưa ra ở trên là như bạn nói đó là gì. Tôi exec giao tác 1 (không có commit ở giao tác 1), rồi exec giao tác 2 (không commit ở giao tác 2) tuyệt đối đồng nghĩa với 2 giao tác exec cùng lúc thì thấy insert vô 2 dòng mà.
    vậy chứ bạn thử bằng cách nào để biết là 2 giao tác exec cùng lúc? rồi cái giao tác mà không insert vô có báo lên lỗi gì không?

    thanks
    tn

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •