CH3锁和表分区文档格式.docx
- 文档编号:918388
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:10
- 大小:18.11KB
CH3锁和表分区文档格式.docx
《CH3锁和表分区文档格式.docx》由会员分享,可在线阅读,更多相关《CH3锁和表分区文档格式.docx(10页珍藏版)》请在冰点文库上搜索。
DELETE
SELECT…FORUPDATE
--用户scott操作:
updateempsetsal=9000whereempno=7369;
--行级锁自动应用
--用户system
updateempsetsal=8000whereempno=7369;
--将等待scott释放锁
rollback;
--用户scott提交或回滚释放锁用户system将可以提交此事务
◆SELECT…FORUPDATE语句允许用户一次锁定多条记录进行更新
只能由发起查询的用户编辑
select....forupdate[ofcolumn_list][waitn|nowait];
ofcolumn_list子句用于指定即将更新的列,即锁定行上的特定列。
--针对多表操作起作用
wait子句指定等待其他用户释放锁的秒数,防止无限期的等待。
--用户scott:
select*fromempwhereempno=7369forupdate;
updateempsetsal=7000whereempno=7369;
select*fromscott.empwhereempno=7369forupdatewait5;
updatescott.empsetsal=6000whereempno=7369;
--使用wait防止无期限等待
commit;
◆使用COMMIT或ROLLBACK语句释放锁
●表级锁
◆语法:
locktable表名in锁模式名mode[nowait]
◆表级锁模式:
❑行共享(rowshare)
允许其他用户更新其他行和锁定该表,但不允许其他用户在该表加排他锁
❑行排他(rowexclusive)
允许其他用户更新其他行和锁定该表,禁止其他用户加排他锁和共享锁
select..forupdate自动应用
❑共享锁(share)
锁定表,仅允许其他用户查询表中的行
禁止其他用户插入、更新和删除行
只允许其他用户同时加共享锁或者行共享锁
❑共享行排他(sharerowexclusive)
比共享锁更多的限制,禁止其他用户使用共享锁、共享行排他、排他锁
❑排他锁(exclusive)--独占锁
限制最强的表锁,仅允许其他用户查询该表的行。
禁止更新任何行,禁止其他用户同时加任何锁
示例:
--用户scott:
locktableempinsharemodenowait;
--加共享锁
rollback;
--释放锁
--用户system:
updatescott.empsetsal=7000whereempno=7369;
--不允许更新等待
locktablescott.empinexclusivemodenowait;
--由于scott已经在emp表上加share锁不允许其他用户加排他锁
locktablescott.empinsharemode;
--可以加共享锁
●死锁
使用锁机制的缺点之一可能出现死锁
❑当两个事务相互等待对方释放资源时,就会形成死锁
❑Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁
示例:
--创建演示用表
createtablelock_oneasselect100num1fromdual;
createtablelock_twoasselect1num2fromdual;
updatelock_onesetnum1=num1+1;
--scott更新lock_one
updatescott.lock_twosetnum2=num2+1;
--system更新lock_two
updatelock_twosetnum2=num2+1;
--scott更新lock_two等待system释放锁不是死锁只是阻塞
updatescott.lock_onesetnum1=num1+1;
--system更新lock_one出现死锁oracle会检测到,并自动终止其中一个事务
表分区
当一个表包含大量数据时,查询特定记录时往往需要搜索整个表,从而耗费系统资源和时间,为提高数据库的性能,Oralce提供了表分区的技术
表分区指把一个表中的所有行分为几个部分,并这些部分存储在不同位置。
◆优点
❑允许用户将一个表分成多个分区
❑用户可以执行查询,只访问表中的特定分区
❑将不同的分区存储在不同的磁盘,提高访问性能和安全性
❑可以独立地备份和恢复每个分区
注意:
分区表不能包含long和longraw列
◆分区方式:
范围分区
散列分区
列表分区
复合分区
●范围分区
以表中的一个列或一组列的值的范围分区
◆语法
partitionbyrange(基于分区的列名)
(
partitionp1valueslessthan(范围1),
partitionp2valueslessthan(范围2),
...
[partitionpNvalueslessthan(MAXVALUE)]
);
例1:
createtablepar_range_one
(
productIdnumber(10)notnull,
sale_datedatenotnull,/*销售日期*/
sale_costnumber(15)/*销售成本*/
)
partitionbyrange(sale_cost)
partitionp1valueslessthan(1000),
partitionp2valueslessthan(2000),
partitionp3valueslessthan(3000),
partitionp4valueslessthan(4000)
例2:
createtablepar_range_two
partitionbyrange(sale_date)
partitionp1valueslessthan(to_date('
2001-1-1'
'
YYYY-MM-DD'
)),
partitionp2valueslessthan(to_date('
2002-1-1'
partitionp3valueslessthan(maxvalue)
●散列分区
允许用户对不具有逻辑范围的数据进行分区
通过在分区键上执行HASH函数决定存储的分区
将数据平均地分布到不同的分区
partitionbyhash(列名)partitions分区个数;
或:
partitionbyhash(列名)
partitionp1[TABLESPACEtbs1],
partitionp2[TABLESPACEtbs2],
...
partitionpN[TABLESPACEtbsN]);
);
例1:
createtablepar_hash_one(
empIdnumber(8)notnull,
empNamevarchar2(30)notnull,
addressvarchar2(50),
departmentIdnumber(5)/*部门编号*/
)partitionbyhash(departmentId)partitions5;
createtablepar_hash_two(
)partitionbyhash(empId)
partitionp1,
partitionp2
●列表分区
允许用户将不相关的数据组织在一起
PARTITIONBYLIST(列名)
PARTITIONpart1VALUES(值1),
PARTITIONpart2VALUES(值2),
PARTITIONpartNVALUES(DEFAULT)
createtablepar_list_one(
)partitionbylist(address)(
partitionp1values('
上海'
),
partitionp2values('
北京'
partitionp3values('
深圳'
广州'
partitionp4values(default)
●复合分区
范围分区与散列分区或列表分区的组合
createtablepar_composite(
)partitionbyrange(sale_date)
subpartitionbyhash(productId)subpartitions5
);
●操纵已分区的表
❑在已分区的表中插入数据与操作普通表完全相同,Oracle会自动将数据保存到对应的分区
❑查询、修改和删除分区表时可以显式指定要操作的分区
insertintopar_range_onevalues(1,sysdate,900);
insertintopar_range_onevalues(2,sysdate,1900);
insertintopar_range_onevalues(3,sysdate,2900);
commit;
--在指定分区中查询
select*frompar_range_onepartition(p1);
select*frompar_range_onepartition(p2);
select*frompar_range_onepartition(p3);
--删除指定分区中的记录
deletefrompar_range_onepartition(p1);
●分区维护操作
--添加分区–仅用于最后一个分区已给定值
altertablepar_range_oneaddpartitionp5valueslessthan(maxvalue)
--删除分区–删除一个指定的分区,分区的数据也随之删除
altertablepar_range_onedroppartitionp1;
--截断分区–删除指定分区中的所有记录
altertablepar_range_onetruncatepartitionp2;
--合并分区将范围分区或复合分区的两个相邻分区连接起来
altertablepar_range_onemergepartitionsp3,p4intopartitionp6;
--拆分分区-将一个大分区中的记录拆分到两个分区中
altertablepar_range_onesplitpartitionp6at(3000)
into(partitionp61,partitionp62);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CH3 分区
![提示](https://static.bingdoc.com/images/bang_tan.gif)