oracle分区和锁的难,oracle使用三(锁和表分区)
行級鎖只對用戶正在訪問的行進行鎖定
授權用戶:
connect??yyaccp/acccp;
create?user?user2?identified?by?chenmp;
grant?create?session?to?chenmp;
grant?select?,insert,update,delete?on?order?testlock?to?chenmp;
以下代碼演示鎖定表中的記錄:
connect?chenmp/chenmp?;
update?yyaccp.testlock?set?name=''wrong''?where?id=8;
重新打開?SQL/PLUS
connect?yyaccp/yyaccp?;
update?testlock?set?set?name=’jeff?wrong’?where?id?=8
Wait?子句使用方法
Connect??chenmp/chenmp;
select?*?from?yyaccp.testlock?where?id=8?for?update;
重新打開SQL/PLUS
Connect??yyaccp/accp;
select?*?from?testlock?where?id=8?for?update?wait?5;
***?注意?wait?只能用在?select?語句上
FOR?UPDATE?NOWAIT?使用
select?*?from?testlock?where?id=8?for?update?nowait;
2.表級鎖
以下代碼演示了鎖定?testlock?表?:
Connect??chenmp/chenmp;
lock?table?yyaccp.testlock?in?share?mode;
重新打開SQL/PLUS
Connect??yyaccp/accp;
delete?from?testlock;
SQL/PLUS?停止響應(在第一個?SQL/PLUS?中?commit;)
如果多個用戶鎖定一個表那么所有的用戶都不能在此表上進行更新操作,只有當所有用戶執行?commit命令或者?rollback?命令結束事務時,鎖才會被釋放。
例如:?connect?yyaccp/accp;
Lock?table?testlock?in?share?mode;
Connect?chenmp/chenmp;
Lock?table?testlock?in?share?mode;
Connect?user1/user1;
Update?testlock?set?name?=’ping’?where?id=8;
當user1?執行操作時,sql/plus?沒有響應,必須要把?yyaccp?用戶和?chenmp?用戶解鎖后才能進行操作?。
以下代碼演示了以行共享的模式鎖定?order_master?表
Connect??chenmp/chenmp;
lock?table?yyaccp.testlock?in?row?share?mode;
輸入以下命令更新?testlock?表
update?yyaccp.testlock?set?name=?''ping''?where?id=8;
以上語句成功執行更新。
重新打開一個?sqlplus?窗口
Connect?yyaccp/accp;
update?yyaccp.testlock?set?name=?''ping''?where?id=8;
以上代碼不能做更新操作.
update?yyaccp.testlock?set?name=?''wrong''?where?id=7;
以上代碼可以做更新操作
獨占鎖:
lock?table?yyaccp.testlock?in?exclusive?mode?nowait;
:范圍分區根據表的某個列或一組列的值范圍,決定將該數據存儲在哪個分區上。可以根據序號分區,根據業務數據的產生日期分區等。
以下代碼創建了sales表并且對數據進行了分區
drop?table?employeeinfo?;
Create?table?employeeinfo?(
empid?number(5),
empName?varchar2(20)?not?null,
age?number(10)
)
Partition?by?range?(age)
(
Partition??p1?values?less?than?(20),
Partition??p2?values?less?than?(30),
Partition??p3?values?less?than?(40),
);
以下代碼演示了根據年份進行分區
drop?table?personinfo?cascade;
Create?table?personinfo?(
personid??number(5),
personName?varchar2(20),
Birthday??date?not?null
)
partition?by?rang(Birthday?)
(
Partition??p1?values?less?than(to_date(‘1978-10-10’,’yyyy-mm-dd’)),
Partition??p2?values?less?than(to_date(‘1980-5-1’,’yyyy-mm-dd’)),
Partition??p3?values?less?than(MAXVALUE)
);
散列分區通過在分區鍵值上執行一個散列函數來決定數據的物理位置。連續的分區鍵不必存儲在相同的分區中。散列分區把記錄平均地分布到不同地分區,減少了磁盤I/O爭用地可能性。
以下代碼創建了名為MY_EMP表,并分為2個散列分區。
drop?table?my_emp?cascade;
create?table?my_emp(
Empno?number(4),
Ename?varchar2(15)
)
Partition??by??hash(empno)
(
Partition??part_1,
Partition??part_2
);
復合分區是散列分區和范圍分區地結合,在創建復合分區時,先根據范圍對數據進行分區,然后在這些分區內創建散列子分區。復合分區既具備范圍分區便于管理地優點,又具備散列分區在數據放置和并行操作方面地優點。
drop?table?employees?cascade;
create?table?employees(
emp_id?varchar2(5),
work_date?date?not?null,
salary?number(10)
)
Partition?by?range?(salary)
Subpartition?by?hash?(emp_id)
Subpartitions?5
(
Partition??p1?values?less?than?(1500),
Partition??p2?values?less?than?(2000),
Partition??p3?values?less?than?(maxvalue)
);
列表分區允許用戶明確地控制行到分區地映射,列表分區允許按自然方式對無序和不相關的數據集進行分組和組織。
drop?table?product?cascade;
Create?table?product
(
product_id??number?(4)?,
product_type?varchar2?(20)?,
product_name??varchar2?(50)
)
Partition?by?list?(product_type)
(
Partition??p1?values(''book''),
Partition??p2?values(''cd'',''dvd'')
)
分區維護操作包括:添加分區,刪除分區,截斷分區,合并分區,拆分分區。
添加分區:
以下代碼演示了向sales?表添加一個分區。
Alter?table?my_emp??add?partition??part_3?;
以下代碼演示了刪除?sales?表中的p4?分區
Alter?table?sales?drop?partition??p4;
***?注意:分區刪除后數據庫表中對應的數據也刪除了。
截斷分區將刪除表分區中的所有記錄,以下代碼演示了如何刪除sales?表中p3分區的記錄
Alter?table?sales?truncate?partition?p3;
合并分區可以將范圍分區表或復合分區表的兩個相鄰分區連接起來,結果分區將繼承被合并的兩個分區的較高上界。下列代碼演示了將sales?表中的P1和P2兩個分區合并成一個P2?分區。
alter?table?employeeinfo?merge?partitions?p1,p2?into?partition?p2;
拆分分區允許用戶將一個分區拆分為兩個。當分區過大,可以對分區進行拆分。以下代碼演示了將?sales?表中的?P2?分區拆分為?P1和P2兩個分區。
alter?table?employeeinfo?split?partition?p2?at(20)?into?(partition?p1,partition?p2);
重命名分區:以下代碼演示了將sales?表中的?p1?分區重命名為:p5
Alter??table??salse??rename??partition??p1??to??p5;
表分區數據字典:
User_tab_partitions;
User_ind_partitions;
總結
以上是生活随笔為你收集整理的oracle分区和锁的难,oracle使用三(锁和表分区)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle自带调优,oracle 参数
- 下一篇: oracle语句求保有率,Oracle之