程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle使用三(鎖和表分區)

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;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved