zoukankan      html  css  js  c++  java
  • Oracle Class3. 锁和表分区 全新时代

    ------------------------2013-5-8------------------------

    DML锁可以分为,行锁,表级锁,死锁。
    DDL锁可以分为,排他DDL锁,共享DDL锁,分析锁。

    --查看当前数据库里锁的情况。
    select object_id,session_id,locked_mode from v$locked_object;
    如果出现了锁的问题,某个DML操作可能等待很久没有反应。


    grant select on emp to newlifeyhj;

    Grant delete on emp to newlifeyhj;

    Grant all on emp to newlifeyhj;

    -- 访问权限精细到列。 报错 ORA-00905: 缺少关键字
    Grant update on emp(sal) to newlifeyhj;
    Grant select on emp(ename,sal) to newlifeyhj;

    --修改,锁定资源。只到提交了才会执行。
    update scott.emp set sal = sal +100 where empno = '7369';
    将scott.emp表的查询,修改权限给newlifeyhj来测试。


    --表拥有者执行加锁查询
    --select * from emp where empno = '7369' for update wait 5;

    --select * from emp where empno = '7369' for update nowait;

    commit;

    --for update of 专用于连接查询中锁定某一个或是某几个表。


    --表拥有者对表进行共享锁定
    --lock table emp in share mode;

    select * from emp where empno='7369'

    --rollback;


    --共享更新
    --lock table emp in share update mode;

    select * from scott.emp where empno = '7369';

    --排他锁
    --lock table emp in exclusive mode;

    --rollback;

    --同义词,类似表的别名。
    --create synonym o_emp for emp;

    select * from o_emp where empno = '7369';

    ##表分区##
    #范围分区#
    create table student(
     stu_name varchar2(8),
     stu_age number(2)
    )
    partition by range(stu_age)
    (
    partition p1 values less than(12),
    partition p2 values less than(16),
    partition p3 values less than(20),
    partition p4 values less than(maxvalue)
    );

    desc user_tab_partitions

    select table_name,partition_name from user_tab_partitions where table_name = 'STUDENT';   //表名区分大小写。
    select table_name,partition_name,high_value,tablespace_name from user_tab_partitions where table_name = 'STUDENT';

    --分区查询--
    select * from student partition(p1);
    select * from student partition(p2);
    select * from student partition(p3);
    select * from student partition(p4);

    #列表分区#
    create table student2(
      stu_name varchar2(8),
      stu_age number(2),
      stu_address varchar2(12)
    )
    partition by list(stu_address)(
    partition east values('向阳村','红旗广场'),
    partition south values('南大门','摩托车大市场'),
    partition west values('马家河','炎帝广场'),
    partition north values('响石广场','清石广场')
    );

    insert into student2 values ('ANiu',12, '向阳村');
    insert into student2 values ('ANiu',15, '南大门');
    insert into student2 values ('ANiu',17, '清石广场');
    insert into student2 values ('ANiu',19, '炎帝广场');

    select * from student2;
    select * from student2 partition(east);
    select * from student2 partition(west);

    按分区删除数据。
    delete from student2 partition(east);

    select table_name, partition_name, high_value, tablespace_name from user_tab_partitions where table_name = 'STUDENT2';

    #散列分区#
    create table employee(
      employee_id varchar2(5),
      employee_name varchar2(20),
      department varchar2(10)
    )
    partition by hash(department)(
      partition D1,
      partition D2,
      partition D3
    );


    #复合分区#
    范围分区与散列分区或列表分区的组合。
    CREATE TABLE SALES
    (
        PRODUCT_ID VARCHAR2 (5),
        SALES_DATE DATE NOT NULL,
        SALES_COST NUMBER (10)
    )
    PARTITION BY RANGE (SALES_DATE)
    SUBPARTITION BY HASH (PRODUCT_ID)
    SUBPARTITIONS 5 
    (
        PARTITION S1 VALUES LESS THAN (TO_DATE(‘01/4月/2001',
        'DD/MON/YYYY')),
        PARTITION S2 VALUES LESS THAN (TO_DATE(‘01/7月/2001',
        'DD/MON/YYYY')),
        PARTITION S3 VALUES LESS THAN (TO_DATE(‘01/9月/2001',
        'DD/MON/YYYY')),
        PARTITION S4 VALUES LESS THAN (MAXVALUE)
    );

    ##表分区维护##
    --删除分区-- 删除一个指定的分区,分区的数据也随之删除。
    --alter table student drop partition p4;

    --增加分区--
    --alter table student add partition p5 values less than(90);

    --截断分区-- 删除指定分区中的所有记录
    --alter table student truncate partition p3;
    --合并分区--  ORA-14012: 结果分区名与现有分区名发生冲突, p6新的分区名。
    alter table student merge partitions p1,p2 into partition p6;

    --拆分分区--
    alter table sales split partition p2 at(1500) into (partition p21,partition p22)


    select table_name, partition_name from user_tab_partitions where table_name = 'STUDENT';


    ##序列##
    #创建序列#
    create sequence seqTest start with 1 increment by 1 maxvalue 9;

    select seqTest.nextval from dual;  //下一个值    注意:不是value是val
    select seqTest.currval from dual;  //查询当前值  注意:不是value是val

    查看数据字典的结构
    desc user_sequences;

    删除序列
    drop sequence seqTest;

    锁是数据库用来控制共享资源并发访问的机制。
    锁用于保护正在被修改的数据。
    直到提交或回滚了事务之后,其他用户才可以更新数据。

    锁定的优点:一致性和完整性。并行性
    行级锁和表级锁。
    使用commit或rollback语句释放锁。

    表级锁类型
    行共享  行排他  共享  共享行排他  排他

    将一个表分成多个分区,只访问表中的特定分区。
    将不同的分区存储在不同的磁盘,提高访问性能和安全性。
    独立地备份和恢复每个分区。

  • 相关阅读:
    SpringBoot+EasyCaptcha实现验证码功能
    Spring boot集成Swagger
    Swagger注释API :@ApiModel
    lombok的@Accessors注解3个属性说明
    lombok——@EqualsAndHashCode(callSuper = true)注解的使用
    Springboot集成分页插件PageHelper
    SprinBoot application.properties配置详情之DataSource
    SpringBoot系列之banner.txt (转)
    C语言基础知识汇总
    Byte、KB、MB、GB、TB、PB、EB是啥以及它们之间的进率
  • 原文地址:https://www.cnblogs.com/simpledev/p/3092908.html
Copyright © 2011-2022 走看看