Adaptive Server Anywhere 9.0
ODBI=2 (READ_COMMITTED)
LockTimeout=2 (X_DBMENV.DAT)
WITH_KEY IO access
Step | Action (User) | IO$STS | Message | 1 | Insert (1) | OK | IO Operation Succeeded | 2 | Insert (2) | VE | Record already exists | 3 | Delete (2) | ER | Record Locked | 4 | Commit (1) |
|
| 5 | Update (1) | OK | IO Operation Succeeded | 6 | Update (2) | ER | Record Locked | 7 | Fetch (1) | ER | Record Locked | 8 | Fetch (2) | ER | Record Locked | 9 | Commit (1) |
|
| 10 | Delete (1) | OK | IO Operation Succeeded | 11 | Insert (2) | ER | Record Locked | 12 | Update (2), Delete (2) | NR | Record not found | 13 | Commit (1) |
|
| |
Note that ASA is behaving as if it is seeing the uncommitted actions of the other user, even though the Transaction Isolation Level is set to READ_COMMITTED.
Last Record Read IO access
This is a different set of steps as there must be a record to read before the last record read can be updated or deleted! Hence when an error occurs, the record must be fetched again like in Step 13.
Step | Action (User) | IO$STS | Message | 1 | Insert (1) | OK | IO Operation Succeeded | 2 | Insert (2) | VE | Record already exists | 3 | Commit (1) |
|
| 4 | Fetch (1), Fetch (2) | OK | IO Operation Succeeded | 5 | Update (1) | OK | IO Operation Succeeded | 6 | Update (2) | ER | Record Locked | 7 | Fetch (1) | ER | Record Locked | 8 | Fetch (2) | ER | Record Locked | 9 | Commit (1) |
|
| 10 | Fetch (1), Fetch (2) | OK | IO Operation Succeeded | 11 | Delete (1) | OK | IO Operation Succeeded | 12 | Insert (2) | ER | Record Locked | 13 | Fetch (2) Update (2), Fetch (2) Delete (2) | NR | Record not found | 14 | Commit (1) |
|
| |
Note in Step 13 that the Update and Delete cannot proceed because the record is not found.