Download presentation
Presentation is loading. Please wait.
1
cs3431 Transactions, Logging and Security
2
cs3431 Transactions: What and Why? A set of operations on a database must appear as one “unit”. Example: Consider flight reservation, which consists of 2 steps. Check if a seat is available Book the seat Consider 2 users simultaneously reserving seats. The sequence of operations could be: User 1 finds seat A empty User 2 finds seat A empty User 1 reserves A and sets it occupied User 2 reserves A and sets it occupied
3
cs3431 Solution We need to consider as one atomic and “isolated” operation. ACID properties of transactions Atomicity – A transaction if one atomic unit Consistency – A transaction ensures DB is consistent Isolation – A transaction is considered as if no other transaction was executing simultaneously. Durability – Changes made by a transaction must persist.
4
cs3431 User Specifying Transactions START TRANSACTION Statements COMMIT/ROLLBACK In Oracle SQLPlus, you can do the following SQL> set autocommit off; SQL> statements SQL> commit/rollback;
5
cs3431 Different isolation levels Usually unless a transaction commits, none of the changes made by that transaction are visible to other transactions. There are isolation levels that can be defined READ UNCOMMITTED – allow “dirty reads”, i.e., data written by uncommitted Xactions are visible READ COMMITTED – does not allow “dirty reads”, but one transaction can get different results for the same query. REPEATABLE READ – whatever tuple is retrieved once will be again retrieved, however additional tuples may also be retrieved. SERIALIZABLE – this is default.
6
cs3431 READ UNCOMMITTED Session 1 -------BEGIN TRANSACTION----- update cust set color='blue' where id=500; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select color from cust where id=500; color ------ red select color from cust where id=500; color ----- blue select color from cust where id=500; color ----- blue -----------COMMIT------------ | V Time
7
cs3431 READ COMMITTED Session 1 -------BEGIN TRANSACTION----- update cust set color='blue' where id=500; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select color from cust where id=500; color ------ red select color from cust where id=500; color ----- red select color from cust where id=500; color ----- blue -----------COMMIT------------ | V Time
8
cs3431 READ COMMITTED Session 1 -------BEGIN TRANSACTION----- delete cust where id=500; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select color from cust where id=500; color ------ red select color from cust where id=500; color ----- red select color from cust where id=500; color ----- -----------COMMIT------------ | V Time
9
cs3431 REPEATABLE READ Session 1 -------BEGIN TRANSACTION----- delete cust where id=500; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select color from cust where id=500; color ------ red select color from cust where id=500; color ----- red select color from cust where id=500; color ----- red -----------COMMIT------------ | V Time
10
cs3431 REPEATABLE READ Session 1 -------BEGIN TRANSACTION----- update cust set color=‘blue’ where id=500; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select id from cust where color=‘blue’; id -- select id from cust where color=‘blue’; id -- select id from cust where color=‘blue’; id -- 500 -----------COMMIT------------ | V Time
11
cs3431 SERIALIZABLE Session 1 -------BEGIN TRANSACTION----- update cust set color=‘blue’ where id=500; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select id from cust where color=‘blue’; id -- select id from cust where color=‘blue’; id -- select id from cust where color=‘blue’; id -- -----------COMMIT------------ | V Time
12
cs3431 SERIALIZABLE Session 1 -------BEGIN TRANSACTION----- update cust set color=‘blue’ where id > 0 and id <= 2000; -----------COMMIT------------ -------BEGIN TRANSACTION----- update cust set color=‘blue’ where id > 2000 and id <= 4000; -----------COMMIT------------ -------BEGIN TRANSACTION----- update cust set color=‘blue’ where id > 4000 and id <= 6000; -----------COMMIT------------ Session 2 -------BEGIN TRANSACTION----- select color from cust; ORA-01955 snapshot too old (rollback segment too small) | V Time
13
cs3431 Logging We need the DB to withstand crashes etc, in the middle of a transaction. This is done by logging. Undo logging – consider transaction T. Before any updates as part of T, write to log If T changes the value of X from v to a new value, write to the log, this says previous value for X in T was v. Log record such as are written to disk before the data is updated. All updates are made to data, and then the log record is written to disk.
14
cs3431 Undo Logging Example Consider a transaction T that sets a = 2 * a, b = 2 * b; before T, let value of a = 4, b = 8. These are possible steps written to disk Log record Data record (set a = 8) Log record Data record (set b = 16) Log record
15
cs3431 Access Privileges in SQL Access to insert, update, delete, select (query), execute triggers, execute PSMs etc. Insert, update, select may specify columns of a table also.
16
cs3431 Example INSERT INTO Student (sNumber, sName) SELECT DISTINCT (pNumber, pName) FROM Professor WHERE (pNumber, pName) NOT IN (SELECT sNumber, sName FROM Student) Privileges needed: INSERT Student (sNumber, sName) SELECT Professor (pNumber, pName) SELECT Student (sNumber, sName)
17
cs3431 How to give privileges If you are owner of an “object” such as a table, you have all privileges to it. GRANT ON TO [WITH GRANT OPTION] Element can be a table/view WITH GRANT OPTION – the user(s) can grant privileges to others Eg: GRANT INSERT (sNumber, sName) ON Student TO mmani WITH GRANT OPTION
18
cs3431 Revoking privileges DB keeps track of who gave what privileges to whom. REVOKE [GRANT OPTION FOR] ON FROM [CASCADE | RESTRICT] eg: REVOKE INSERT (sNumber, sName) ON Student FROM mmani CASCADE
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.