博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DBA1 第八章:管理数据和并发处理

Posted on 2011-09-05 20:41  little健健  阅读(307)  评论(0编辑  收藏  举报

SQL

  • INSERT
    • 一次创建一行。
INSERT INTO employees VALUES
(
9999,'Bob','Builder','bob@abc.net',NULL,SYSDATE,
'IT_PROG',NULL,NULL,100,90);
    • 插入另一个表中的多行。(SELECT 语句中选择的各个值与要插入的表中的各个列相关联。列值按 INSERT 和 SELECT 语句中指定的顺序进行匹配

insert into dept_80 (select * from employees  
where department_id = 80);
  • UPDATE
    • 使用 UPDATE 命令可更改表的零行或多行
update employees 
set salary =salary *1.1
where employee_id=101;
  • DELETE  
    • 使用 DELETE 命令可从表中删除零行或多行。
delete from employees
where employee_id=101;
  • MERGE
    • 使用 MERGE命令可在一个命令中执行 UPDATE和 INSERT。可将一个源中的数据合并到另一个源
1 MERGE INTO jobs j
2 USING (SELECT * FROM jobs_acquisition) a
3 ON(j.job_id=a.job_id)
4 WHEN MATCHED THEN UPDATE SET j.job_title=a.job_title
5 WHEN NOT MATCHED THEN INSERT
6 (j.job_id,j.job_title,j.min_salary,j.max_salary)
7 VALUES(a.job_id,a.job_title,a.min_salary,a.max_salary)

  

  • COMMIT:使更改成为永久性更改
  • ROLLBACK:撤消更改

PL/SQL

  • 概览
    • 对 SQL 的过程扩展
    • 平台和产品间的可移植性
    • 更高级别的安全性和数据完整性保护
    • 支持面向对象的编程
  • 管理 PL/SQL 对象(em中  “Administration(管理)--->program(程序))
  • PL/SQL 对象
    • 函数:函数是使用RETURN PL/SQL 命令返回单个值的 PL/SQL 块。它是具有返回值的过程。
    • 过程(用于执行特定操作,使用参数列表传入和传出值。可是使用CALL(SQL)或EXECUTE调用(SQL*PLUS))
    • 程序包(程序包是由函数和过程组成的集合。每个程序包由程序包体和程序包说明组成)
    • 内置程序包(管理和维护实用程序,扩展功能)
      • DBMS_STATS:用于收集、查看和修改优化程序统计信息
      • DBMS_OUTPUT:通过 PL/SQL 生成输出
      • DBMS_SESSION:通过PL/SQL 访问 ALTER SESSION 和 SET ROLE语句
      • DBMS_RANDOM:生成随机数字
      • DBMS_UTILITY:获取时间、CPU 时间和版本信息;计算散列值,以及执行许多其它功能
      • DBMS_SCHEDULER:调度可从 PL/SQL 调用的函数和过程
      • DBMS_CRYPTO:对数据库数据进行加密和解密
      • UTL_FILE:通过 PL/SQL 读写操作系统文件
    • 触发器(触发器是存储在数据库中的 PL/SQL 代码对象,它们会在某些事件发生时自动运行或“触发”。)
      • 触发事件

锁定 

  •  概览
    • 使用锁定可防止多个会话同时更改同一数据。
    • 锁定是在指定语句的最低可能级别自动获取的。
    • 锁定不会升级。
  • 锁定机制
    • 执行插入、更新和删除时使用行级锁定
    • 查询不需要任何锁定
    • 自动队列管理
    • 在事务处理(使用 COMMIT 或 ROLLBACK 操作)结束之前一直保留锁定
  • 数据并发处理
    • 默认情况下,锁定机制采用细粒度行级锁定模式。不同的事务处理可在同一个表内更新不同的行,彼此不相互干扰。
    • 锁定模式
      • ROW SHARE:允许并发访问锁定的表,但禁止会话锁定整个表进行独占访问。
      • ROW EXCLUSIVE:与 ROW SHARE 相同,但是还禁止以 SHARE模式锁定。更新、插入或删除数据时会自动获取ROW EXCLUSIVE 锁定。
      • SHARE:允许并发查询,但禁止更新锁定的表。需要有(并且会自动请求)SHARE锁定才能创建表的索引。
      • SHARE ROW EXCLUSIVE:用于查询整个表,允许其他人查询表中的行,但禁止其他人在 SHARE 模式下锁定表或更新行。
      • EXCLUSIVE:允许查询锁定表,但禁止对锁定表执行任何其它活动。需要有EXCLUSIVE 锁定才能删除表。
    • 手动锁定
      •  LOCK TABLE employees IN EXCLUSIVE MODE;
  • DML 锁定
    • 针对正在更新的一行或多行的 EXCLUSIVE 行锁定
    • 针对包含这些行的表的 ROW EXCLUSIVE 表级锁定
  • 排队机制
    • 等待锁定的会话
    • 请求的锁定模式
    • 请求锁定的会话的顺序
  • 锁定冲突
  • 锁定冲突的可能原因
    • 未提交更改
    • 长时间运行事务处理
    • 不必要的高锁定级别
  • 检测锁定冲突
    • 在“Performance(性能)”页选择“Blocking Sessions(阻塞会话)”。
  • 解决锁定冲突
    • 提交或回退持有锁定的会话
    • 终止持有锁定的会话
      • em    kill session键
      • sql
        • SQL> select sid, serial#, username
        • from v$session where sid in
        • (select blocking_session from v$session)
        • ------------------------------------------------------
        • alter system kill session '144,8982' immediate;
  • 死锁