Sie sind auf Seite 1von 33

Managing Data and Concurrency

Copyright 2008, Oracle. All rights reserved.

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

9-2

Copyright 2008, Oracle. All rights reserved.

Manipulating Data by Using SQL

SQL> INSERT INTO employees VALUES 2 (9999,'Bob','Builder','bob@abc.net',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.

9-3

Copyright 2008, Oracle. All rights reserved.

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.

9-4

Copyright 2008, Oracle. All rights reserved.

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.

9-5

Copyright 2008, Oracle. All rights reserved.

DELETE Command

Use the DELETE command to remove zero or more rows

SQL> DELETE FROM emp WHERE emp_no =9000;


0 rows deleted. SQL> DELETE FROM emp;

6 rows deleted.

9-6

Copyright 2008, Oracle. All rights reserved.

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.salary WHEN 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);

9-7

Copyright 2008, Oracle. All rights reserved.

COMMIT and ROLLBACK Commands

To finish a transaction: COMMIT makes the change permanent ROLLBACK undoes the change
SQL> COMMIT; Commit complete.

9-9

Copyright 2008, Oracle. All rights reserved.

PL/SQL

Oracles 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

9 - 10

Copyright 2008, Oracle. All rights reserved.

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

9 - 11

Copyright 2008, Oracle. All rights reserved.

PL/SQL Objects

There are many types of PL/SQL database objects: Package Package body Type body Procedure Function Trigger

9 - 12

Copyright 2008, Oracle. All rights reserved.

Functions

9 - 13

Copyright 2008, Oracle. All rights reserved.

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

9 - 14

Copyright 2008, Oracle. All rights reserved.

Packages

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

Package specification

9 - 15

Copyright 2008, Oracle. All rights reserved.

Package Specification and Body

9 - 16

Copyright 2008, Oracle. All rights reserved.

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

9 - 17

Copyright 2008, Oracle. All rights reserved.

Triggers

9 - 18

Copyright 2008, Oracle. All rights reserved.

Triggering Events

Event Type
DML DDL Database

Examples of Events
INSERT, UPDATE, DELETE
CREATE, DROP, ALTER, GRANT, REVOKE, RENAME LOGON, LOGOFF, STARTUP, SHUTDOWN, SERVERERROR, SUSPEND

9 - 19

Copyright 2008, Oracle. All rights reserved.

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+100 3 WHERE employee_id=100;

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

9 - 20

Copyright 2008, Oracle. All rights reserved.

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+100 3 WHERE employee_id=100;

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

9 - 21

Copyright 2008, Oracle. All rights reserved.

Data Concurrency

Time:

Transaction 1

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


UPDATE hr.employees SET salary=salary+100 WHERE employee_id=101; UPDATE hr.employees SET salary=salary+100 WHERE employee_id=102;

Transaction 2 09:00:00

Transaction 3

... Transaction x

...
UPDATE hr.employees SET salary=salary+100 WHERE employee_id=xxx;

9 - 22

Copyright 2008, Oracle. All rights reserved.

Data and Concurrency../2


Lock modes: ROW SHARE: permits concurrent access to the locked table but prohibits sessions from locking the entire table for exclusive access. ROW EXLUSIVE: is the same as ROW SHARE, but also prohibits locking in SHARE mode. The ROW EXCLUSIVE locks are automatically obtained when updating, inserting, or deleting data. ROW EXCLUSIVE locks allows multiple readers and one writer. SHARE: permits concurrent queries but prohibits updates to the locked table. A SHARE lock is required (and automatically requested) to create an index on a table. However, online index creation requires a ROW SHARE lock that is used when building the index.
9 - 23

Copyright 2008, Oracle. All rights reserved.

Data and Concurrency../4

Like any request for a lock, manual lock statements wait until all sessions that either already have locks or have previously requested locks release their locks. The LOCK command accepts a special argument that controls the waiting behaviour NOWAIT. NOWAIT returns control to you immediately if the specified table is already locked by another session. It is usually not necessary to manually lock objects. The automatic locking mechanism provides the data concurrency needed for most applications. Oracle recommends that you avoid using manual locks, especially when developing applications. Severe performance issues often occur from unnecessarily high locking levels
Copyright 2008, Oracle. All rights reserved.

9 - 25

DML Locks

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

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

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

9 - 26

Copyright 2008, Oracle. All rights reserved.

Enqueue Mechanism

The enqueue mechanism keeps track of: Sessions waiting for locks Requested lock mode Order in which sessions requested the lock

9 - 27

Copyright 2008, Oracle. All rights reserved.

Lock Conflicts
Transaction 1 Time Transaction 2
UPDATE employees SET salary=salary+100 WHERE employee_id=101; 1 row updated. SELECT sum(salary) FROM employees; SUM(SALARY) ----------692634 Many selects, inserts, updates, and deletes during the last 7.5 hours, but no commits or rollbacks!

UPDATE employees SET 9:00:00 salary=salary+100 WHERE employee_id=100; 1 row updated. UPDATE employees SET COMMISION_PCT=2 WHERE employee_id=101; Session waits enqueued due to lock conflict. Session still waiting! 9:00:05

16:30:00

1 row updated. Session continues.

16:30:01

commit;

9 - 28

Copyright 2008, Oracle. All rights reserved.

Possible Causes of Lock Conflicts

Uncommitted changes Long-running transactions Unnecessarily high locking levels

9 - 29

Copyright 2008, Oracle. All rights reserved.

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.

9 - 30

Copyright 2008, Oracle. All rights reserved.

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)

9 - 31

Copyright 2008, Oracle. All rights reserved.

Resolving Lock Conflicts with SQL

SQL statements can be used to determine the blocking session and kill it.
SQL> select sid, serial#, username from v$session where sid in (select blocking_session from v$session)

Result:

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

9 - 32

Copyright 2008, Oracle. All rights reserved.

Deadlocks

Transaction 1

Transaction 2

UPDATE employees SET salary = salary x 1.1 WHERE employee_id = 1000; UPDATE employees SET salary = salary x 1.1 WHERE employee_id = 2000;

9:00

UPDATE employees SET manager = 1342 WHERE employee_id = 2000; UPDATE employees SET manager = 1342 WHERE employee_id = 1000;

9:15

ORA-00060: Deadlock detected while waiting for resource

9:16

9 - 33

Copyright 2008, Oracle. All rights reserved.

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

9 - 34

Copyright 2008, Oracle. All rights reserved.

Practice 9 Overview: Managing Data and Concurrency


This practice covers the following topics: Identifying locking conflicts Resolving locking conflicts

9 - 35

Copyright 2008, Oracle. All rights reserved.

Das könnte Ihnen auch gefallen