1 琐的概念
锁是数据库用来控制共享资源并访问的机制 锁用于保护正在被修改的数据 直到提交或回滚了事物之后,其他用户才可以更新数据2 锁的优点 一致性 完整性 并发性3 锁的分类 行级锁:对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行 oracle自动加上 insert update delete select....from...for update [of colums][wait n][no wait]; 表级锁 锁定整张表,限定其他用户对其操作 使用命令锁定表,应用表级锁的语法 lock table 表明 锁的类型名 mode; 表级锁的分类 行共享(row shared 简称rs锁); 允许用户进行任何操作,禁止排他锁定 Example: lock table emp in row shared mode; 行排他(row Exclusive 简称rx锁):允许用户进行任何操作,禁止共享锁 Exampel: lock table emp in row exclusive mode; 共享锁(share 简称s锁) : 其他用户只能查看,不能修改。 锁定表,仅允许用户查看表中行 禁止其他用户插入,修改和删除行 多个用户可以同时在同一张表中应用此锁 Example: lock table emp in share mode; 共享行排他:比共享锁有更多的限制,禁止使用共享锁及更高级的锁 排他锁(Exclusive 简称xs锁):其他用户只能查看,不能修改,不能加其他锁(此等级高于共享锁) Example: lock table emp in exclusive mode; --使用rollback释放锁 死锁: 当两个事物相互等待对方释放资源时,就会形成死锁 Oracle会自动检测死锁,并通过结束其中的一个事物来解决死锁------------------------------------------------------------------------------------------------------------------------------------ --表分区: 分区方法: 范围分区:以表中的一个列或一组列的值的范围进行分区 --语法: partition by range(column_name){ partition part1 values less than (range), partition part1 values less than (range), ...... partition partN values less than (Maxvalue) } --案列 create table sales( product_id int, sale_cost number ) partition by range(sale_cost)( partition p1 values less than(1000),--包含销售额低于10000的所有产品记录 partition p2 values less than(2000), partition p3 values less than(Maxvalue) --这里的Maxvalue大于前面的 ); insert into sales values(1001,900); insert into sales values(1002,1900); insert into sales values(1003,200); insert into sales values(1004,30000); insert into sales values(1005,50000); --分区查询 select * from sales partition(p1); select * from sales partition(p2); select * from sales partition(p3); 拓展: 查看当前用户所拥有的分区 select * from user_tab_partitions; 散列分区: hash() --dump() oracle使用一个散列函数,确定数据应当放在N个分区的哪一个分区。Oracle建议N是2的一个幂 将数据平均分布到不同的分区 --语法 partition by hash(column_name) ( partition part1[tablespace tbs1], partition part2[tablespace tbs2], ............... partition partN[tablespace tbsN] ); --案例 create table employee( emp_id varchar2(20), emp_name varchar2(20), dept_name varchar2() ) partition by hash(dept_name) ( partition d1, partition d2, partition d3 ) 列表分区 定制分区机制 允许将不想管的数据组织一起 --语法 partition by list(column_name) ( partition part1 values (values_list1); partition part1 values (values_list2); 。。。。。。。。。。。。。。。。。。。。。 partition part1 values (default) ); --注意:如果定义了default分区,需要增加分区,则要先删除default分区 --案例 create table person( per_id number, per_name varchar2(20), per_prov varchar2(20) ) partition by list(per_prov)( partition north values('吉林','黑龙江','辽宁'), partition west values('甘肃','陕西'), partition east values('上海','浙江'), partition south values('广东','广西'), partition p1 values(default) ); --插入数据 insert into person values(1001,'yaobol','吉林'); insert into person values(1002,'yaobo2','黑龙江'); insert into person values(1003,'yaobo3','广西'); insert into person values(1004,'yaobo4','广东'); insert into person values(1005,'yaobo5','吉林'); insert into person values(1006,'yaobo6','浙江'); insert into person values(1007,'yaobo7','吉林'); insert into person values(1008,'yaobo8','上海'); insert into person values(1009,'yaobo9','吉林'); insert into person values(10010,'yaobol0','甘肃'); insert into person values(10011,'yaobol1','陕西'); 复合分区: 范围分区: 范围分区与散列分区或列表分区的组合 --语法 partition by range(column_name) --创建范围分区 subpartition by hash(colum_name2)--创建散列子分区 subpartitions number_of_partitions ( partition part1 values less than(range1), partition part2 values less than(range2), ................ partition partN values less than (Maxvalue) ) --案例 create table emp_sales( pro_id varchar2(20), sale_date date, sale_cost number(10) ) partition by range(sale_cast) subpartition by hash(pro_id) subpartitions 4 ( partition e1 values less than (to_date('2010-10-10','yyyy-MM-dd')), partition e2 values less than (to_date('2012-10-10','yyyy-MM-dd')), partition e3 values less than (maxvalue) ); --查看当用户的子分区 select * from user_tab_subpartitions; --分区维护操作; 分区维护操作是修改已分区表的分区 --分区维护的类型 计划事件--定期删除最旧的分区 非计划事件--解决应用程序或系统问题 --分区维护的操作 添加分区 --在最后一个分区的后面添加新的分区 alert table sales add partition p4 values less than(40000); 删除分区 --删除指定的分区,分区的数据也随之删除 alert table sales drop partition p3; 截断分区--删除指定分区中的所有记录 alert table sales truncate partition p2; 合并分区 --将范围分区或复合分区的两个相邻的分区合并 alert table sales merge partition p1,p2 into partition p6 拆分分区 --将一个大的分区记录拆分到两个分区中 alert table sales split partition p6 at(1000) into (partition p61,partition p62);