Oracle學習筆記—(三)

來源:互聯網
上載者:User
Oracle學習筆記---(三)

一,鎖

為了防止使用者在同一時間並發地訪問和修改資源,ORACLE使用不同類型的鎖控制對資料的並發訪問,以防止使用者之間出現破壞性的互動操作
,oracle
為處理事務自動鎖定資源。

  鎖在SQL語句開始它們與資料的相互作用時獲得,並在事務的整個過程中有效

  oracle9i使用兩種鎖模式:
  .獨佔模式(排他):不允許其他任何並發會話以任何方式共用鎖定定的資源,修改資料時需要這種鎖。
  .共用模式:允許對同一塊資料的並發讀訪問。在更改資料時,上升為獨佔模式

一)行級鎖
      insert    update   delete   隱式加行鎖(排他)
      select ...
for  update  顯示加行鎖(共用)

      select ...for update
用於顯示鎖定將要更新的資料行,防止其他使用者在更新之前操作此行
                如:select * from emp where
deptno=30  for  update
                    update   emp set ename='Joke'
where  empno=7499;
  

            在鎖釋放之前,其他使用者不可以對鎖定的資料行進行(修改,刪除)操作,查詢可以
  
      假如有其他使用者要鎖定同一資源:可以使用wait
子句對鎖的等待時間控制
        如:  在另一使用者中:select * from emp where
deptno=30  for  update  wait  2  (等待2秒 )
      如2秒鐘還未釋放資源,系統將會給出提示資訊

  
  
二)表級鎖

    共用模式(in share mode)
    共用更新模式(in share update
mode)
    獨佔鎖定模式

    鎖定表的通用文法:

    lock  table  表名  in  <share  or  share  update  or  exclusive  mode>;

    1) 共用模式
       不允許其他使用者插入,更新和刪除行,多個使用者可以同時在同一表上設定共用鎖定,這樣設定鎖的多個使用者都只能執行查詢  

    
           lock  table emp  in  share  mode;

    2)共用更新模式(in share update mode)
       允許多個使用者同時鎖定表的不同行,
允許其他使用者進行DML(insert update delete select)操作 , 除了鎖定的行            

      如:
lock  table emp  in  share update  mode;
                      select
*  from  emp  where deptno=30  for update        //鎖定的行
        其他使用者不能delete
,update 部門30的僱員資訊
          
      其他使用者可以查看鎖定的行:   select
*  from  emp  where deptno=30  

    3)獨佔鎖定模式(限制性強)
       不允許其他使用者插入,更新和刪除行,
允許查看資料,但只有一個使用者可以在表中放置獨佔鎖定
        
           lock  
table  emp  in  exclusive mode;
    
三) 死結

    如:USERA: lock table scott.emp  in  share  mode;    
        USERB:
lock table scott.emp  in   share  mode ;
      
      
USERA:  update  scott.emp set ename='Smith'  where empno=7369;
      
USERB:  update  scott.emp set job='CLERK' where   empno=7521;
      
發生死結

二,表分區

    分區的類型:
     1),定界分割: 分區基於某一特定列或一組列的值的範圍
     2),散列分區:資料基於hash
函數進行分區
     3),複合分區:首先基於定界分割,然後使用HASH函數進一步劃分為子分區
     4),
列表分區:通過在每個分區的描述中指定分區鍵的離散值列表,
                  
允許按自然方式對無序和不相關的資料集進行分組和組織

  一)定界分割
  
  1)  建立分區表(一列)

       1,建立分區表(一列分區鍵empno)
         create table emp1(
        
empno  number(4),
         ename  varchar2(10),
         job  
varchar2(9),
         mgr   number(4),
         hiredate date,
        
sal  number(7,2),
         comm  number(7,2),
        
deptno  number(2))
         partition  by  range(empno)
        
(partition  p1   values  less than  (7566),
          partition  p2  
values  less than  (7900),
          partition  p3   values  less
than  (9999))
      
      2,插入資料
         insert into emp1 select *
from scott.emp;

      3,顯示分區資料
        select * from  emp1 partition(p1);
--分區鍵empno,小於7566的empno插入到p1分區
        select * from  emp1
partition(p2);
        select * from  emp1 partition(p3);

      4,資料字典
        col table_name for a15;
        col partition_name
for a15;
        select table_name,partition_name from
user_tab_partitions;

   2)建立分區表(兩列)
      1, 建立分區表(兩列deptno,empno)
         create table
emp2(
         empno  number(4),
         ename  varchar2(10),
        
job   varchar2(9),
         mgr   number(4),
         hiredate
date,
         sal  number(7,2),
         comm  number(7,2),
        
deptno  number(2))
            
partition  by  range(deptno,empno)
            (partition  om1   values  less
than  (20,7566), --分區邊界的左部分優先,當empno<7566時,deptno=20的記錄也將被插入
            
partition  om2   values  less than  (30,7900),
             partition  om3  
values  less than  (maxvalue,maxvalue))

      2, 插入資料
        insert into emp2  select * from emp;
      3,
顯示分區資料
         select * from  emp2 partition(om1);
         select *
from  emp2 partition(om2);
         select * from  emp2
partition(om3);

   3) 按日期類型分區
        create table
emp3(
        empno  number(4),
        ename  varchar2(10),
        job  
varchar2(9),
        mgr   number(4),
        hiredate
date,
        sal  number(7,2),
        comm  number(7,2),
        deptno  number(2))
        partition  by  range(hiredate)
        (partition  om1  
values  less than  (to_date('1980-12-31','yyyy-mm-dd')),
        
partition  om2   values  less
than  (to_date('1981-12-31','yyyy-mm-dd')),
         partition  om3  
values  less than  (to_date('1982-12-31','yyyy-mm-dd')))  

      
    二)散列分區  
       使用hash 函數將資料劃分到分區中
        create table
dept1(deptno  number(2),
                    dname  
varchar2(14),
                    loc  varchar2(13))
                    partition  by  hash(deptno)
                    (partition
p1,partition p2);
        insert into  dept1  select * from
scott.dept;

    三)複合分區
        create table salgrade1(grade number,losal number,hisal
number)
        partition by range(grade)
        subpartition  by
hash(losal,hisal)
              (
              partition p1 values  less
than (3)
                 (subpartition  sp1,subpartition
sp2),
              partition p2  values  less than (6)
                
(subpartition  sp3,subpartition sp4)
             )

        insert into  salgrade1  select * from  
scott.salgrade;

            select * from salgrade1
partition(p1);
            select * from salgrade1
subpartition(sp1);
            select * from salgrade1
subpartition(sp2);

   四)列表分區

     create table  emp4
    
(empno  number,
      ename  varchar2(10),
      deptno  number)
      partition  by  list(deptno)
      (
        partition  p1  values(10,20),
        partition  p2  values(30)
      )

     insert into emp4 select empno,ename,deptno from scott.emp;
    
select * from emp4 partition(p1);

三,維護分區
    
      --表emp1在其使用者所在的資料表空間中,建立使用者時指定,沒指定預設為系統資料表空間
        
1)在system使用者中授權:
          grant create tablespace to scott;
        
2)登入到scott使用者
          connect scott/tiger;    --假設在伺服器端,用戶端要加連接字串

         3)建立資料表空間test,該資料表空間包含一個資料檔案,大小是5M
          create tablespace  test
datafile        
                       'd:\ora1.dbf'  size 5m;

     1,移動分區
        
        alter table  emp1
                    
move  partition p1  tablespace  test;--將分區移動到資料表空間test
     2,添加分區
        
alter table emp3
                     add   partition om4  values less
than(to_date('1984-12-31','yyyy-mm-dd'));
              
    
3,刪除分區
         alter table emp3
                     drop  partition
om4;

     4,結合分區--用於散列分區
        
使用散列方法分區的表中,可以將某個分區的內容分發到由hash函數確定的一個或多個分區中,然後清除選定的分區
          alter  table
dept1  coalesce  partition;

     5,截斷分區
           刪除分區的資料(不能復原)
         alter table  emp3  
truncate  partition  om3;
         delete from emp3
partition(om1)  //可以復原

     6,
拆分分區
                原來的分區p2不存在了
                --p21將包括:7566到7700的記錄
                --p22將包括:7701到7900的記錄
              alter
table  emp1  split  partition  p2
at(7700)  
              into(partition  p21,partition  p22);

    
7,合并分區
        合并定界分割表中的相鄰兩個分區的內容,產生新的分區p2,原來的分區p21,p22不存在了
        alter
table emp1  merge partitions  p21,p22  into  partition
p2;                                            
          
    
8,交換表分區
       非分區表的資料和資料分割資料表的某個分區資料進行交換
       要求:非分區表的結構要和資料分割資料表相同
      
如:
       1,建立分區表
            create table  
Pdept(deptno  number(2),
                    dname  
varchar2(14),
                    loc  varchar2(13))
                    
partition  by  range(deptno)
                     (partition p1  values less
than (20)  tablespace test,    --指定分區所在的資料表空間
                      partition
p2  values less than (maxvalue)  tablespace test);
          
      
2,插入(分區表)資料
            insert into  Pdept  select * from dept;

       3,建立非分區表
            create table Sdept as select * from  dept
where 1=2;      

       4,插入(非分區表)資料
            insert into  Sdept
values(60,'MyDept','MyLoc');

       5,交換分區
           alter table Pdept exchange partition  p2
with  table  Sdept;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.