9 copyright © 2007, oracle. all rights reserved. managing data and concurrency

31
9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Upload: brooke-mckenzie

Post on 02-Jan-2016

226 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

9Copyright © 2007, Oracle. All rights reserved.

Managing Data and Concurrency

Page 2: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 2

Objectives

After completing this lesson, you should be able to:

• Manage data by using SQL

• Identify and administer PL/SQL objects

• Describe triggers and triggering events

• Monitor and resolve locking conflicts

Page 3: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 3

Manipulating Data by Using SQL .

SQL> INSERT INTO employees VALUES 2 (9999,'Bob','Builder','[email protected]',NULL,SYSDATE, 3 'IT_PROG',NULL,NULL,100,90);

1 row created.

SQL> UPDATE employees SET SALARY=6000 2 WHERE EMPLOYEE_ID = 9999;

1 row updated.

SQL> DELETE from employees 2 WHERE EMPLOYEE_ID = 9999;

1 row deleted.

Page 4: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 4

INSERT Command

• Create one row at a time.

• Insert many rows from another table.

SQL> INSERT INTO emp VALUES (9999,'Bob','Builder',100,SYSDATE, 10000);

SQL>INSERT INTO emp(Select employee_id , last_name, first_name,department_id, hire_date, salary FROM HR.employees where department_id =30);

6 rows created.

1

2

Page 5: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 5

UPDATE Command

Use the UPDATE command to change zero or more rows of a table.

SQL> UPDATE EMP SET SALARY= salary +500 Where emp_no =117;

1 row updated.

SQL> UPDATE EMP Set dept_no= (select dept_no from emp where emp_no =117);

6 rows updated.

1

2

Page 6: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 6

DELETE Command

Use the DELETE command to remove zero or more rows from a table.

SQL> DELETE FROM emp WHERE emp_no =9000;

0 rows deleted.

SQL> DELETE emp;

6 rows deleted.

1

2

Page 7: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 7

MERGE Command

Use the MERGE command to perform both INSERT and UPDATE in a single command.

MERGE INTO EMP a USING (Select * FROM HR.employees) b ON (a.emp_no =b. employee_id )WHEN MATCHED THEN UPDATE SET a.salary =b.salaryWHEN NOT MATCHED THEN INSERT (emp_no, last_name, first_name, dept_no, hire_date, salary)VALUES (employee_id,last_name, first_name, department_id, hire_date, salary);

Page 8: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 9

COMMIT and ROLLBACK Commands

To finish a transaction:

• COMMIT makes the change permanent

• ROLLBACK undoes the change

SQL> COMMIT;

Commit complete.

Page 9: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 10

PL/SQL

Oracle’s Procedural Language extension to SQL (PL/SQL) is a fourth-generation programming language (4GL). It provides:

• Procedural extensions to SQL

• Portability across platforms and products

• Higher level of security and data-integrity protection

• Support for object-oriented programming

Page 10: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 11

Administering PL/SQL Objects

Database administrators should be able to:

• Identify problem PL/SQL objects

• Recommend the appropriate use of PL/SQL

• Load PL/SQL objects into the database

• Assist PL/SQL developers in troubleshooting

• Use supplied packages for administrative and database maintenance tasks

Page 11: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 12

PL/SQL Objects

There are many types of PL/SQL database objects:

• Package

• Package body

• Type body

• Procedure

• Function

• Trigger

Page 12: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 13

Functions

Page 13: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 14

Procedures

• Are used to perform specific actions

• Pass values in and out by using an argument list

• Can be called from within other programs using the CALL command

Page 14: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 15

Packages

Packages are collections of functions and procedures. Each package should consist of two objects:

• Package specification

• Package body

Package specification

Page 15: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 16

Package Specification and Body

Page 16: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 17

Built-in Packages

• Oracle Database comes with several built-in PL/SQL packages that provide:– Administration and maintenance utilities– Extended functionality

• Use the DESCRIBE command to view subprograms.

SQL>DESC DBMS_LOCK

Page 17: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 18

Triggers

Page 18: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 19

Triggering Events

Event Type Examples of Events

DML INSERT, UPDATE, DELETE

DDL CREATE, DROP, ALTER, GRANT, REVOKE, RENAME

Database LOGON, LOGOFF, STARTUP, SHUTDOWN, SERVERERROR, SUSPEND

Page 19: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 20

Locks

• Prevent multiple sessions from changing the same data at the same time

• Are automatically obtained at the lowest possible level for a given statement

• Do not escalate

Transaction 1

SQL> UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id=100;

SQL> UPDATE employees 2 SET salary=salary+100 3 WHERE employee_id=100;

Transaction 2

Page 20: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 21

Locking Mechanism

• High level of data concurrency:– Row-level locks for inserts, updates, and deletes– No locks required for queries

• Automatic queue management

• Locks held until the transaction ends (with the COMMIT or ROLLBACK operation)

Transaction 1

SQL> UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id=101;

SQL> UPDATE employees 2 SET salary=salary+100 3 WHERE employee_id=100;

Transaction 2

Page 21: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 22

Data Concurrency

Time:

09:00:00

Transaction 1 UPDATE hr.employees

SET salary=salary+100

WHERE employee_id=100;

Transaction 2 UPDATE hr.employees

SET salary=salary+100

WHERE employee_id=101;

Transaction 3 UPDATE hr.employees

SET salary=salary+100

WHERE employee_id=102;

... ...

Transaction x UPDATE hr.employees

SET salary=salary+100

WHERE employee_id=xxx;

Page 22: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 24

DML Locks

Each DML transaction must acquire two locks:

• EXCLUSIVE row lock on the row or rows being updated

• ROW EXCLUSIVE table-level lock on the table containing the rows

SQL> UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id= 106;1 row updated.

SQL> UPDATE employees 2 SET salary=salary*1.1 3 WHERE employee_id= 107;1 row updated.

Transaction 2Transaction 1

Page 23: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 25

Enqueue Mechanism

The enqueue mechanism keeps track of:

• Sessions waiting for locks

• Requested lock mode

• Order in which sessions requested the lock

Page 24: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 26

Lock Conflicts

UPDATE employees SET salary=salary+100 WHERE employee_id=100;

1 row updated.

9:00:00 UPDATE employees SET salary=salary+100 WHERE employee_id=101;

1 row updated.

UPDATE employees SET

COMMISION_PCT=2 WHERE employee_id=101;

Session waits enqueued due to lock conflict.

9:00:05 SELECT sum(salary) FROM employees;

SUM(SALARY)

-----------

692634

Session still waiting!

16:30:00

Many selects, inserts, updates, and deletes during the last 7.5 hours, but no commits or rollbacks!

1 row updated.

Session continues.

16:30:01 commit;

Transaction 1 Transaction 2Time

Page 25: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 27

Possible Causes of Lock Conflicts

• Uncommitted changes

• Long-running transactions

• Unnecessarily high locking levels

Page 26: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 28

Detecting Lock Conflicts

Select Blocking Sessions on the Performance page.

Click the Session ID link to view information about the locking session, including the actual SQL statement.

Page 27: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 29

Resolving Lock Conflicts

To resolve a lock conflict:

• Have the session holding the lock commit or roll back

• Terminate the session holding the lock (in an emergency)

Page 28: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 30

Resolving Lock Conflicts with SQL

SQL statements can be used to determine the blocking session and kill it.

SQL> alter system kill session '144,8982' immediate;

SQL> select sid, serial#, usernamefrom v$session where sid in(select blocking_session from v$session)

Result:

1

2

Page 29: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 31

Deadlocks

Transaction 2Transaction 1

UPDATE employeesSET salary = salary x 1.1WHERE employee_id = 1000;

UPDATE employeesSET salary = salary x 1.1WHERE employee_id = 2000;

ORA-00060:Deadlock detected while waiting for resource

UPDATE employeesSET manager = 1342WHERE employee_id = 2000;

UPDATE employeesSET manager = 1342WHERE employee_id = 1000;

9:00

9:15

9:16

Page 30: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 32

Summary

In this lesson, you should have learned how to:

• Manage data by using SQL

• Identify and administer PL/SQL objects

• Describe triggers and triggering events

• Monitor and resolve locking conflicts

Page 31: 9 Copyright © 2007, Oracle. All rights reserved. Managing Data and Concurrency

Copyright © 2007, Oracle. All rights reserved.9 - 33

Practice 9 Overview:Managing Data and Concurrency

This practice covers the following topics:

• Identifying locking conflicts

• Resolving locking conflicts