




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Oracle8數據庫系統改進表的存取性能-索引與數據簇分區選件-分區表與分區索引并行選件-SQL語句并行處理新的數據類型(多媒體數據類型)Oracle8數據庫系統改進表的存取性能-索引與數據簇1索引索引2索引在數據庫應用中,性能主要取決于存取表中數據的速度。索引可以快速找到待定的表記錄。索引維護與應用:索引對用戶透明當有索引且能提高應用的性能時,Oracle自動使用索引。Oracle自動更新索引以使其與表同步。索引類型B樹索引(系統自動為主碼和唯一完整性約束建立)位圖索引索引表,分區索引,反向鍵值索引…。索引在數據庫應用中,性能主要取決于存取表中數據的速度。SMITHALLENWARDJONESMARTINBLAKECLARKSCOTTKINGTURNERADAMSJAMESFORDMILLERB樹索引createindex索引名on表名(列名)
ADAMSALLENBLAKECLARKFORDJAMESJONESKINGMARTINMILLERSCOTTSMITHTURNERWARDMILLERTURNERBLAKEJAMESKINGROWIDSMITHMARTINTURNERB樹索引ADAMSBLAK對于索引列的每一個可能的值,都有獨立的位圖項。在位圖項中的每一位代表一個可能的ROWID,為1意味著該行包含關鍵值。例如:LOC列(3種取值)北京(010011)天津(100000)上海(001100)第二個記錄第一個記錄位圖函數可以將位的位置轉換為實際的ROWID。通過位圖索引的合并簡化查詢條件,從而過濾被訪問的數據集合。位圖索引d01合資d02合資d03合資d04外企d05國企d06合資dnotype天津北京上海上海北京北京loc對于索引列的每一個可能的值,都有獨立的位圖項。位圖索引d01
selectdnofromdepwheretype=‘合資’andlocin(‘北京’,‘上海’);合資北京上海 1000 1 1 01 d02 1 011 d03 0AND 0OR1=0 0 100 1 10 1 d06 位圖索引的例子selectdnofromdep位圖索引的例子位圖索引建立位圖索引;createbitmapindexdep_indexondep(type);createbitmapindexdep_indexondep(doc);位圖索引適用于列的值取值不多的情況、索引列含有越多的值,位圖項就越多,需要存儲索引的空間也越大。由于Oracle必須展開一個位圖索引的方式,所以不適于經常插入或更新數據的應用。位圖索引典型地用于決策系統與數據倉庫應用中查詢數據。位圖索引建立位圖索引;簇(聚集)索引當cluster建立后,必須建立簇索引后,被聚集的表才能訪問。系統不會自動為簇建索引。例:createclusertdep_emp(depnochar(3));createtabledep(dno..,dname..,…)clusterdep_emp(dno);createtableemp(emp…,…dno...)clusterdep_emp(dno);createindexdep_emp_idxonclusterdep_emp;簇(聚集)索引當cluster建立后,必須建立簇索引后,被聚簇(聚集)索引簇索引表的存儲e01王山男d01佳月公司8200e02張麗女d01e10孫軍男d02運通公司2034d03安合物業6800來自emp來自depclusterkey簇(聚集)索引簇索引表的存儲分區選件分區選件10分區選件分區的原因表和索引迅速膨脹數據倉庫和決策支持的需要什么是分區大的表或索引可以拆分為小的易于管理的數據片斷,例如將銷售表按銷售日期拆分成一系列數據片斷其中每一個片斷稱為一個分區(partition)被分區的表稱為分區表。分區選件分區的原因數據倉庫的概念數據倉庫就是面向主題的、集成的、穩定的、不同時間的數據集合,用以支持經營管理中的決策制定過程。主題是一個在較高層次將數據歸類的標準,每一個主題對應一個宏觀的分析領域數據倉庫的集成特性是指在數據進入數據倉庫之前,必須經過數據加工和集成,統一原始數據中的矛盾之處,將原始數據結構做一個從面向應用向面向主題的轉變。數據倉庫的穩定性是指數據倉庫反映的是歷史數據的內容,而不是日常事務處理產生的數據,進入數據倉庫后是極少或根本不修改的數據倉庫的概念數據倉庫就是面向主題的、集成的、穩定的、不同時數據倉庫的概念數據倉庫最根本的特點是物理地存放數據。這些數據并不是最新的、專有的,而是來源于其它數據庫的。數據倉庫的建立并不是要取代數據庫,它要建立在一個較全面和完善的信息應用的基礎上,用于支持高層決策分析。而事務處理數據庫在企業的信息環境中承擔的是日常操作性的的任務。數據倉庫是數據庫技術的一種新的應用,而且到目前為止,數據倉庫還是用數據庫管理系統來管理其中的數據。數據倉庫的概念數據倉庫最根本的特點是物理地存放數據。這些數據分區只有表和索引可以分區。分區對于應用人員和用戶是透明的。分區可以控制數據的存儲地點:將數據分散存儲在多個磁盤上。將經常使用的數據放在快速的磁盤上。分區可以有不同的物理屬性:分區可以有不同的存儲參數(tablespace,pctfree,pctused,等等)分區表或索引可以跨表空間存儲,分區不可以。同一模式對象的所有分區必須具有相同的邏輯屬性:相同的列,數據類型,約束。分區只有表和索引可以分區。分區的作用增加了數據的可用性不同的分區可以跨表空間存儲,可以進行分區級的備份和恢復。不同的分區可以跨表空間存儲,降低了磁盤損壞帶來的數據不可用性。不可用的分區不會影響到對其它分區的查詢和維護提高了系統性能服務器可以進行智能的分區檢測跳過與查詢無關的分區訪問跳過不在線的分區在物理設備上負載均衡將數據分散存儲在多個磁盤上,實現并行存取分區的作用增加了數據的可用性分區關鍵字分區關鍵字決定了劃分分區的依據只能是標準數據類型:Number,Date,Character(VARCHAR2,CHAR)可以是多至16個的列的聯合對關鍵字的修改不能導致記錄在分區之間的移動分區的數據范圍LESSTHAN子句指定每個分區的上限值。除第一個分區外,每一個分區都有一個隱含的下限值(即前一個分區的上限值)。最后一個分區的上限值可以設定為MAXVALUE必須按照升序排列來聲明分區。分區關鍵字分區關鍵字建立分區表例1CREATETABLEsales97(acct_nonumber(5),product_idnumber(12),qtynumber(8),sales_datedate)PARTITIONBYRANGE(sales_date)(PARTITIONp1VALUESLESSTHAN(to_date('01-4月-1997','dd-mon-yyyy'))TABLESPACEp1_space,PARTITIONp2VALUESLESSTHAN(to_date('01-7月-1997','dd-mon-yyyy'))TABLESPACEp2_space,PARTITIONp3VALUESLESSTHAN(to_date('01-10月-1997','dd-mon-yyyy'))TABLESPACEp3_space,PARTITIONp4VALUESLESSTHAN(MAXVALUE));建立分區表例1CREATETABLEsales97建立分區表例2CREATETABLEstu_score(stu_numNUMBER(5),scorenumbernotnull,test_yearnumbernotnull,test_monthnumbernotnull,test_daynumbernotnull)PARTITIONBYRANGE(test_year,test_month,test_day)(PARTITIONscore_q1VALUESLESSTHAN(1997,07,01)TABLESPACEeducation1,PARTITIONscore_q2VALUESLESSTHAN(1998,02,01)TABLESPACEeducation2)建立分區表例2CREATETABLEstu_score查看分區情況查分區表分區數selectpartition_countfromuser_part_tableswheretable_name='SALES97'PARTITION_COUNT
4查分區表分區劃分情況情況selectpartition_name,tablespace_name,partition_position,high_valuefromuser_tab_partitionswheretable_name='STU_SCORE’;SCORE_Q1EDUCATION111997,07,01SCORE_Q2EDUCACION221998,02,01查看分區情況查分區表分區數建立分區注意事項設置分區的界限VALUESLESSTHAN定義了分區的上界VALUESLESSTHAN必須取值Number,Character,DateMAXVALUE定義分區的最上界任何合法的存儲子句均可用于分區(tablespace,pctfree...)沒有為單獨的分區設置存儲子句時,使用基表的存儲子句在分區表中不能包含LONG類型的列。系統為每一分區設置一個隱含的CHECK約束(分區的最高限制是MAXVALUE時除外)。聚集表不能分區建立分區注意事項設置分區的界限分區表的訪問分區對表名的擴展:[模式名.]表名[PARTITION(分區名)]例:SELECT*FROMsales97WHEREqty>1000ANDsales_dateBETWEEN‘01-4月-97’AND‘30-6月-97’;指定分區SELECT*FROMsales97PARTITION(p2) WHEREqty>1000;INSERTINTOsales97PARTITION(p4) SELECT*FROMlastest_data;注意:分區表名的不兼容性分區表的訪問分區對表名的擴展:分區表的訪問分區值的檢查insertintostu_scorevalues(98007,50,1998,2,1);錯誤位于第1行:ORA-14400:插入的分區鍵超出最高的合法分區鍵。使用別名select*fromstu_scorepartition(score_q1)q1whereq1.score>85建立視圖createviewsco_q1asselect*fromstu_scorepartition(score_q1);分區表的訪問分區值的檢查分區索引一般索引(非分區索引)CREATEINDEXsales97_idx ONsales97(sales_date);分區索引—索引分區只有當索引本身足夠大且適于分區時,索引分區才是有意義的。索引分區可提高可用性,提供并行索引掃描,提高性能。選擇分區索引的主列(索引列)與選擇非分區索引主列沒有區別(根據where子句的應用)。分區索引一般索引(非分區索引)分區索引策略一旦決定為表創建一個分區索引,必須決定如何組織、劃分該索引的分區。兩種選擇:全局分區索引(GLOBAL):按自定的索引關鍵字來分區,對等分區索引,也稱局部索引(LOCAL):創建與分區表的各分區一一對應的索引分區GLOBAL分區表分區表非分區表LOCAL分區索引對等分區索引非分區索引分區索引策略一旦決定為表創建一個分區索引,必須決定如何組織、對等分區對象定義:下列屬性完全一樣的兩個模式對象有相同的分區關鍵字相同數量的分區相同的分區界限使用對等分區的優點:對等分區對象是主、細表。全部對應的主細記錄在相應的數據分區中,可很快完成兩個表的連接。在這種情況下,磁盤存取的減少類似于使用數據簇(聚集)來“予連接”主細表。對等分區的對象是表和索引::
當查詢時,特定索引分區中的全部鍵值只引用相應表分區中的記錄。
當一個分區不可用時只有相應的分區索引不可用,不影響其他分區及分區索引,因此提高數據可用性。
當更新一個表分區的數據時,只須調整相應的分區索引。對等分區對象定義:下列屬性完全一樣的兩個模式對象分區表與對等分區索引建分區表CREATETABLEsales97 (acct_noNUMBER(5),product_idNUMBER(12), qtyNUMBER(8),sales_dateDATE)PARTITIONBYRANGE(sales_date) (PARTITIONq1VALUESLESSTHAN…, PARTITIONq2VALUESLESSTHAN…, PARTITIONq3VALUESLESSTHAN…, PARTITIONq4VALUESLESSTHAN….);建分區索引與對應分區表構成對等分區對象,。使用LOCAL屬性CREATEINDEXsales_idxONsales97(sales_date) LOCAL(PARTITIONindex_q1,PARTITIONindex_q2, PARTITIONindex_q3,PARTITIONindex_q4);分區表與對等分區索引建分區表全局分區索引與分區表不構成對等分區對象,按索引碼分區,而不是按表的分區關鍵字使用GLOBAL全局分區索引能夠包含相應表全部分區的鍵值,在OLTP環境下提供比分區索引更好的性能。CREATEINDEXproduct_idxONsales97(product_id)GLOBALPARTITIONBYRANGE(product_id)(PARTITIONpidx1VALUESLESSTHAN(100)tablespaceusers,PARTITIONpidx2VALUESLESSTHAN(200)tablespacestudents,PARTITIONpidx3VALUESLESSTHAN(MAXVALUE));全局分區索引與分區表不構成對等分區對象,分區索引例對等分區索引(local)createindexstu_idx(97,7,198,2,1)onstu_score(test_year,test_month,test_day)local(partitionindex_q1,partitionindex_q2);全局分區索引(global)createindexstu_g_idxonstu_score(stu_num)globalpartitionbyrange(stu_num)(partitionpidx1valueslessthan(95000)tablespaceusers,partitionpidx2valueslessthan(96000)tablespacestudents,partitionpidx3valueslessthan(maxvalue));分區索引例對等分區索引(local)查看分區索引selectpartition_name,high_value,statusfromuser_ind_partitionswhereindex_name='STU_IDX';
INDEX_Q11997,07,01USABLEINDEX_Q21998,02,01USABLEselectpartition_name,high_value,statusfromuser_ind_partitionswhereindex_name=‘STU_G_IDX’;
PIDX195000USABLEPIDX296000USABLEPIDX3MAXVALUEUSABLE查看分區索引selectpartition_name,hi分區表的管理分區可獨立管理,分區操作僅在單一分區上發生作用。分區級的操作:altertable…Add分區altertable…Drop分區…modify分區…Move分區…Split分區…Rename分區…Exchange分區…Imported/Exported…Load分區數據分區表的管理分區可獨立管理,分區操作僅在單一分區上發生作用。分區索引的管理分區索引的管理類似于分區表的管理alterindexdroppartition(只對global索引)alterindexsplitpartition(只對global索引)alterindexrenamepartitionalterindexrebuildpartitionalterindexmodifypartitionalterindexunusablealterindexstu_idxrebuildpartitionindex_q1;alterindexstu_g_idxrebuildpartitionpidx1;分區索引的管理分區索引的管理類似于分區表的管理分區表的維護-增加分區ALTERTABLE
stu_score
ADDPARTITION
score_q3 VALUESLESSTHAN(1998,07,01) TABLESPACEstudents;常用來維護歷史數據,用來增加另外時間段的數據。用于在分區表的高端增加分區如果增加的分區在分區表的中間,或最后分區邊界是MAXVALUE時在高端增加分區,要用其他辦法(拆分分區)如果分區表有對等分區索引,則分區索引會隨之增加(分區索引名用表分區名)。分區表的維護-增加分區ALTERTABLEstu分區索引的自動調整selectpartition_name,high_value,statusfromuser_ind_partitionswhereindex_name='STU_IDX';
INDEX_Q11997,07,01USABLEINDEX_Q21998,02,01USABLESCORE_Q31998,07,01USABLE(改名之前)索引改名:alterindexstu_idxrenamepartitionscore_q3toindex_q3;select…whereindex_name=‘STU_G_IDX’;
PIDX195000USABLEPIDX296000USABLE沒有變化PIDX3MAXVALUEUSABLE分區索引的自動調整selectpartition_name分區表的維護—刪除分區ALTERTABLEstu_scoreDROPPARTITIONscore_q3;用于刪除歷史數據不想刪除分區中的數據時,應首先將分區數據合并到鄰近分區相應分區索引將被刪除全局索引變為不可用(需要重構)分區表的維護—刪除分區ALTERTABLEstu_sco刪除分區—索引selectpartition_name,high_value,statusfromuser_ind_partitionswhereindex_name='STU_IDX';
INDEX_Q11997,07,01USABLEINDEX_Q21998,02,01USABLEselectpartition_name,high_value,statusfromuser_ind_partitionswhereindex_name=‘STU_G_IDX’;
PIDX195000UNUSABLEPIDX296000UNUSABLEPIDX3MAXVALUEUNUSABLE刪除分區—索引selectpartition_name,h分區表操作—刪除分區記錄ALTERTABLEstu_scoreTRUNCATEPARTITIONscore_q3;也可以使用SQL語句中的Delete刪除分區中的數據,但會比較慢。表中數據清空以后,對等分區索引會自動變化。非對等分區索引和一般索引變為不可用狀態。
SCORE_Q2STUDENTS1998,02,01表分區SCORE_Q3STUDENTS1998,07,01SCORE_Q1USERS1997,07,01
INDEX_Q21998,02,01USABLE索引分區INDEX_Q11997,07,01USABLEINDEX_Q31998,07,01USABLE
PIDX195000UNUSABLE全局分區PIDX296000UNUSABLEPIDX3MAXVALUEUNUSABLE分區表操作—刪除分區記錄ALTERTABLEstu_sc索引不可用可能使索引不可用(IU)的操作清除記錄的分區操作(TRUNCATEPARTITION)跳過局部索引(LOCAL)的Import對數據庫的直接SQL*LOADER改變ROWID的分區操作(MOVE/SPLITPARTITION)如果索引分區被標記為IU,用戶發出使用該索引分區的SELECT或DML語句時,將得到錯誤提示。這時需要重建索引。select*fromstu_scorewherestu_num=950001錯誤位于第1行:ORA-01502:索引‘WXY.STU_G_IDX’或這類索引的分區是在不可使用的狀態索引不可用可能使索引不可用(IU)的操作重建索引alterindexrebuildpartition可以為local或global分區索引重建某個分區。例alterindexstu_g_idxrebuildpartitionpidx1;alterindexstu_g_idxrebuildpartitionpidx2;alterindexstu_g_idxrebuildpartitionpidx3;重建索引還可以改變表空間等其他存儲屬性。alterindexstu_g_idxrebuildpartitionpidx1tablespacestudent2重建索引alterindexrebuildpartit分區表的維護—修改分區修改分區的物理屬性altertablestu_scoremodifypartitionscore_q1storage(maxextents50);置分區表對應的局部索引為不可用狀態。altertablestu_scoremodifypartitionscore_q1unusablelocalindexes;,用于插入和轉入數據。為使局部索引可用,必須重建索引分區重建已被標記為iu的局部分區索引altertablestu_scoremodifypartitionscore_q1rebuildunusablelocalindexes分區表的維護—修改分區修改分區的物理屬性分區表的操作—重命名分區修改分區名ALTERTABLEstu_scoreRENAMEPARTITIONscore_q3toscore_qq3;附:修改表名ALTERTABLEstu_scoreRENAMEtostudent_score;分區表的操作—重命名分區修改分區名分區表的操作—移動分區ALTERTABLEMOVEPARTITION移動表分區到另外一個數據段上。新的數據段產生,舊的數據段刪除(可在原表空間,也可移到其他表空間。用于將分區移動到其它設備上,或用于減少分區碎片。相應的分區索引和其他類型的索引都應該重建。altertablestu_scoremovepartitionscore_q1<tablespaceeducation>;分區表的操作—移動分區ALTERTABLEMOVEPA分區表的操作—拆分分區ALTERTABLESPLITPARTITION將分區在分區范圍內拆分為兩個分區創建了兩個分區,每一個新分區有單獨的數據段,新的物理屬性,舊分區被刪除相應的局部索引也被SPLIT,并被標記為IU全局索引和非分區索引被標記為IUaltertablestu_scoresplitpartitionscore_q2at(1997,10,1)into(partitionscore_q21,partitionscore_q22);
分區名分區上限值分區索引
SCORE_Q11997,07,01INDEX_Q1SCORE_Q211997,10,01SCORE_Q21SCORE_Q221998,02,01SCORE_Q22SCORE_Q31998,07,01INDEX_Q3分區表的操作—拆分分區ALTERTABLESPLITP分區表的操作—交換數據ALTERTABLEEXCHANGEPARTITION用于非分區表和分區表的一個分區之間的雙向交換。可以交換數據和索引段物理屬性不變可以帶withvalidation或withoutvalidation。當數據不在分區范圍時,WITHVALIDATION將報錯。WITHOUTVALIDATION假定數據均在分區范圍。例:altertablestu_scoreexchangepartitionscore_q1withtablestu_score97withoutvalidation;分區表的操作—交換數據ALTERTABLEEXCHANG分區表操作—合并分區使用IMPORT/EXPORT可以將鄰近分區合并為一個分區使用Export從低層分區取出要合并的數據使用SQL語句DROP已經Exported的分區使用Import將取出的數據合并到鄰近分區使用SQL語句實現分區的合并insertintostu_tempselect*fromstu_scorepartition(score_q1);altertablestu_scoredroppartitionscore_q1;insertintostu_scoreselect*fromstu_temp;分區表操作—合并分區使用IMPORT/EXPORT可以將鄰近SQL語句的并行處理SQL語句的并行處理45什么是Oracle的并行并行服務器選項允許多個數據庫實例運行在一個松散耦合多處理器系統(或集群系統)的不同接點上,同時存取一個Oracle物理數據庫,從而為用戶提供了多種數據庫存取路徑。并行、容錯并行SQL語句處理將一個SQL語句(如查詢)分為幾個子任務,然后啟動多個進程并行處理子任務,并將結果快速返回給用戶。利用多進程、多CPU,縮短語句執行時間。SQL語句的并行執行不需要并行服務器選項。什么是Oracle的并行并行服務器選項串行處理掃描emp表掃描dep表連接排序CPUCPUCPUCPU查詢結果Selectename,age,dnamefromemp,depwhereemp.dno=dep.dnoorderbyage;單個進程執行一條SQL語句串行處理掃描emp表掃描dep表連接排序CPUCPUCPUCSQL語句的并行處理Selectename,age,dnamefromemp,depwhereemp.dno=dep.dnoorderbyage;掃描emp表掃描dep表連接排序CPUCPUCPUCPU查詢結果多個進程執行一條SQL語句SQL語句的并行處理Selectename,age,dna并行處理的條件軟件環境—并行SQL處理系統。一個并行的SQL處理系統接受一個SQL請求,智能地將它分解為幾個較小的可以并行的子任務,然后使用所有空閑的CPU并行處理這些子任務,以達到縮短總處理時間的目的。Oracle服務器使用一種特殊的操作系統進程結構,并行處理對數據庫的某些請求。硬件—多CPU系統并行處理的條件軟件環境—并行SQL處理系統。并行SQL語句的硬件環境SMP(symmetricmultiprocessor)對稱多處理機CPUCPUCPU內存并行SQL語句的硬件環境SMP(symmetricmult可以被并行處理的操作select(掃描表),update,deleteinsert…select連接操作(join)聚合操作(統計)notin,groupby,orderbyselectdistinct,unioncreatetable…asselectcreateindex,rebuildindexsplitpartiton,movepartition,rebuildindexpartition從SQL語句中調用PL/SQL函數。可以被并行處理的操作select(掃描表),update并行機制-協調進程一個協調進程(coordinator)調度多個從屬進程(slaveprocesses)并行執行SQL語句。Select*fromemp;串行進程Emp表Select*fromemp;協調進程Emp表并行進程并行機制-協調進程一個協調進程(coordinator)調度并行機制并行優化器當用戶執行SQL語句時,優化器確定是否以并行方式執行語句,以及每一個操作的并行度是多少。并行進程池在啟動一個數據庫實例后,Oracle建立一個并行進程池。當開始并行操作時,協調進程從并行池中獲得并行進程資源,并把它們分配給有關操作。實行并行步驟SQL語句的前臺進程變為并行協調進程。協調進程根據并行度從并行池中獲得所需數量的從屬并行進程。系統將SQL語句化為一系列的操作,每個操作都盡可能地并行執行。當語句處理完畢,協調進程返回結果給用戶進程,并釋放從屬并行進程(回進程池)。并行機制并行優化器并行方法塊并行按ROWID的范圍并行適用于查詢(包括select語句和在DML和DCL中的子查詢)。適用于movesplit分區,rebuild分區….適用于分區/非分區的表和索引。分區并行適用于對分區表和分區索引的操作。從屬進程并行適用于往非分區表中插入數據。插入記錄時,將記錄分攤到各個從屬進程分別插入因新記錄還沒有rowid,所以無法塊并行。并行方法塊并行并行計劃優化器確定了一條語句的執行計劃協調器決定計劃中的每一個操作的并行方法塊并行、分區并行…優化器確定執行計劃中操作的執行順序語句的數據流操作之間的并行需要其他操作輸出的操作稱為父操作父操作子操作:消費者生產者兩種并行一個操作的并行intro-operation并行數據流中不同操作之間的并行inter-operation并行并行計劃優化器確定了一條語句的執行計劃并行模式Select*fromemporderbyename;(無索引)如果并行度為4,意味著對于任何給定的操作,可以激活4個并行進程。實際上8個進程執行該語句。Introinterintro用戶進程協調進程A-GH-MN-ST-ZscanscanscanscanEmp表并行模式Select*fromemporderby并行度指定為執行一個單一操作而啟動的進程數叫并行度語句級指定PARALLEL子句PARALLEL(DEGREE4)語句提示hint/*+parallel(emp,3)*/ 表和索引級在建表和索引的語句中指定。隱含指定基于CPU數、存儲表的設備(磁盤)數、分區數等并行度指定為執行一個單一操作而啟動的進程數叫并行度并行度確定并行協調程序決定并行度的依據:檢查在SQL語句中的hint或parallel子句。檢查在表和索引定義語句中的指定。使用隱含并行度指定。一旦確定并行度,它將成為有關操作的并行度,即協調進程為一操作申請的并行進程數。而實際進程數還取決于進程池中的可用資源。并行度確定并行協調程序決定并行度的依據:并行子句語法Parallel子句語法(在DDL語句中使用)用于createtable,createindex,createclusteraltertable,alterindex…rebuild,alterclusteralterdatabase…recoverhint指定(在DML語句中使用)/*+parallel(表名,并行度)*/noparallellparallell()degreeinstancesintegerdefault并行子句語法Parallel子句語法(在DDL語句中使用)n并行執行SQL語句例以并行度4同時執行掃描和更新
update/*+parallel(emp,4)*/emp setsal=sal+100whereage>50;以并行度3執行插入語句insert/*+parallel(emp2,3)*/ intoemp2 select/*+parallel(emp1,5)*/fromemp1;以并行度4執行刪除語句delete/*+parallel(tab1,4)*/fromtab1 wherecol1>50andcol1<10000;并行執行SQL語句例以并行度4同時執行掃描和更新并行執行SQL語句例在DDL語句中指定parallel子句(并行度為5)該命令執行時使用10個進程,5個用于掃描emp1表,5個用于向emp2表中添加數據。CREATETABLEemp2 PARALLEL(DEGREE5) ASSELECT*FROMemp1WHEREdeptno=10;下面的命令使用10個進程構造索引,5個用于掃描EMP表,另外5個用于向EMP_IDX中添加數據CREATEINDEXemp_idx ONemp(ename)PARALLEL(DEGREE5);并行執行SQL語句例在DDL語句中指定parallel子句并行度確定例在DML語句(查詢)中指定并行度2select/*+parallel(emp22)*/*fromemp2whereage>50;采用表定義隱含并行度值(5)select*fromemp2whereage>50;采用系統隱含值select*fromemp1whereage>50;PARALLEL(DEGREE1INSTANCES1)等同于NOPARALLELdegree單實例中的并行instances實例間的并行(沒有并行服務器時忽略)并行度確定例在DML語句(查詢)中指定并行度2兩種并行度分別在并行服務器的5個實例上各啟動5個恢復進程,共25個進程。ALTERDATABASERECOVER TABLESPACEbinky PARALLEL(DEGREE5INSTANCES5);改變EMP1表的預定義并行度ALTERTABLEemp1 PARALLEL(DEGREE2);兩種并行度分別在并行服務器的5個實例上各啟動5個恢復進程,并行DML模式為使并行DML生效,會話需要PARALLELDML模式(特殊的鎖、空間分配等)ALTERSESSIONENABLEPARALLELDML;一個事物可以包含多個修改不同表的并行DML,但對于某個表作了并行DML修改后,不能在此事務中再對該表作任何形式的訪問。查詢(包括DML語句中的子查詢)和DDL語句不受此影響。其他約束在并行DML操作中不支持觸發器對自身的引用和連帶刪除必須被禁止并行插入刪除和修改不支持包含對象類型的表不支持聚集表復制功能中不支持并行DML并行DML模式為使并行DML生效,會話需要PARALLEL并行工作的平衡適當指定并行度可以優化性能、平衡并行操作例:emp表有10個分區并行度=1并行度=5并行度=10并行度=9并行度=4處理時間不等于分區數/進程數并行工作的平衡適當指定并行度可以優化性能、平衡并行操作大型對象-新數據類型
支持多媒體數據大型對象-新數據類型
支持多媒體數據66大型對象-多媒體數據類型三種類型的LOB二進制LOB(BLOB):無結構的二進制大對象字符LOB(CLOB):字符數據(不支持變寬字符集)二進制文件(BFILE):最大長度由OS定對于LOB類型數據,表的列值為一定位器值,標明數據存放的位置:BLOB和CLOB:指向一個分開的由數據庫分配的保存LOB的位置。BFILE:指向一個外部文件。LOB數據沒有必要與一般數據存放在一起。僅在需要時才訪問它們。LOB可以是對象類型的屬性大型對象-多媒體數據類型三種類型的LOB每行只能有一個LONGLONG在線存儲LONG<=2GLONG不能復制LONG不能記錄日志OCI可以處理該類型數據。varchar24k字符比較每行可以包含多個LOBLOB可以離線存儲LOB<=4GLOB可以復制LOB的操作可以記錄在日志中
LOB與LONG[RAW]的比較每行只能有一個LONG比較每行可以包含多個LOBLOB與多媒體數據類型應用(LOB例)CREATETABLEperson( pnameVARCHAR2(10), resumeCLOB, photoBLOB, homepageBFILE) LOB(resume,photo)STOREAS(TABLESPACEresume_spaceSTORAGE(INITIAL5mNEXT1mPCTINCREASE0));對LOB數據所使用的空間另行指定存儲參數LOB子句多媒體數據類型應用(LOB例)CREATETABLEpe多媒體數據類型(LOB設置)CHUNK的尺寸決定訪問LOB數據時一次處理數據塊的個數如果LOB以大數據量讀寫時,將CHUNK設大如果LOB以小數據量讀寫時,將CHUNK設小如果LOB被經常訪問,設置CACHE,缺省為NOCACHECREATETABLEperson_tab( …)LOB(resume,picture)STOREAS(TABLESPACElob_tablespaceCHUNK4 NOCACHE);多媒體數據類型(LOB設置)CHUNK的尺寸決定訪問LOB數初始化LOB數據Insertintopersonvalues(‘張大年’,empty_clob(),empty_blob(),bfilename(‘person_dir’,’person.html’));函數empty_clob()和empty_blob()返回一個空的LOB定位器值(與空值不一樣)。函數bfilename(邏輯目錄名,文件名)返回一個bfile定位器值,它與一個位于服務器文件系統中的物理文件相連。建立邏輯目錄名(數據庫對象):createdirectoryperson_diras‘/user/person’;初始化LOB數據InsertintopersonBFILE與邏輯目錄使用BFILE將LOB存儲在數據庫外BFILE只讀,只能在ORACLE外創建和更新通過數據庫對象DIRECTORY定位外部文件用戶對于DIRECTORY的訪問需經過授權(不是在某個模式下建目錄對象)。創建DIRECTORY對象時:不檢查實際目錄、文件是否存在。應先創建相應的物理路徑不要將DIRECTORY設置在ORACLE數據文件目錄ORACLE必須對該目錄有讀權限。嚴格控制CREATE或DROPANYDIRECTORY權限的授予BFILE與邏輯目錄使用BFILE將LOB存儲在數據庫外BFILE與邏輯目錄以管理員帳號執行下列語句CREATEDIRECTORYmydirAS‘/home/image’;GRANTREADONDIRECTORYmydirtouesr01;以user01帳號執行下列語句CREATETABLEmytable(idNUMBER,image_colBFILE);INSERTINTOmytableVALUES(139,filename(‘mydir’,‘world.gif’));BFILE與邏輯目錄以管理員帳號執行下列語句復制LOB數據在SQL語句中復制LOB數據Insertintopersonselect'王中里',photo,homepagefrompersonwherepname=‘張大年’;在SQL*Plus平臺上只能對一般數據I/OSQL>select*fromperson;列或屬性類型無法通過SQL*Plus顯示復制LOB數據在SQL語句中復制LOB數據更新LOB數據自動加行鎖不適用于LOB數據。要讀加鎖selectpnamefrompersonwherepname=‘張大年’forupdate;updatepersonsetresume=‘新簡歷…’wherepname=‘張大年’;updatepersonsethomepage=bfilename(‘person_dir’,’zhang.html’)wherepname=‘張大年’;排他鎖僅在更新內部存儲的LOB數據時必要更新LOB數據自動加行鎖不適用于LOB數據。要讀加鎖處理LOB數據的接口ORACLE提供大量的操縱LOB數據的接口DBMS_LOB包—包含一系列函數和過程OCI也包含大量API檢查LOB數據的函數和過程COMPARE比較兩個LOB數據GETLENGTH執行sql的length函數INSTR查找字符串位置,執行sql的instr函數READ讀入一段LOB值SUBSTRLOB數據取子串,執行sql的substr函數處理LOB數據的接口ORACLE提供大量的操縱LOB數據的接處理LOB數據的接口改變LOB數據的函數和過程APPEND把一個LOB數據追加到另一LOB數據后COPY將一個LOB值的指定部分拷貝到另一LOB列ERASE刪除部分或全部LOB值LOADFROMFILETRIM執行sql的rtrim函數。刪除最右邊的指定串WRITE在LOB數據中的指定點寫入數據處理LOB數據的接口改變LOB數據的函數和過程處理BFILE的接口DBMS_LOB包中有關BFILE的函數/過程FILEOPEN打開文件以讀入數據FILECLOSE關閉打開的文件FILECLOSEALL關閉所有打開的文件FILEEXISTS確定BFILE定位器所引用的文件是否存在。FILEGETNAME獲得一個BFILE定位器所引用的外部文件的名稱。判斷一個外部文件是否打開FILEISOPEN處理BFILE的接口DBMS_LOB包中有關BFILE的函數LOB數據處理(讀)Declarelocator_varCLOB;要操作的LOB定位器BLOBamount_varinteger;要讀入的字符數offset_varinteger;讀操作的起始點output_varvarchar2(10);讀入數據變量RAWbeginamount_var:=10;offset_var:=1;selectresumeintolocator_varfrompersonwherepname=‘張大年’;DBMS_LOB.READ(locator_var,amount_var,offset_var,output_var);DBMS_OUTPUT.PUT_LINE(‘startofresume:’||output_var);end;LOB數據處理(讀)DeclareLOB數據處理(寫)Declarelocator_varCLOB;要操作的LOB定位器amount_varinteger;要寫入的字符數offset_varinteger;寫操作的起始點buffer_varvarchar2(12);寫入內容變量beginamount_var:=12;offset_var:=10;buffer_var:=‘addnewtext’;selectresumeintolocator_varfrompersonwherepname=‘張大年’forupdate;DBMS_LOB.WRITE(locator_var,amount_var,offset_var,buffer_var);commit;end;LOB數據處理(寫)DeclareLOB數據處理varchar2和raw的最大長度為32767
SUBSTR函數output_var:=DBMS_LOB.SUBSTR(locator_var,amount_var,offset_var);GETLENGTH函數declarelocator_varCLOB;length_varineger;beginselectresumeintolocator_varfrompersonwherepname=‘張大年’;
length_var:=DBMS_LOB.GETLENGTH(locator_var);DBMS_OUTPUT.PUT_LINE(‘lengthofLOBis’||length_var);end;LOB數據處理varchar2和raw的最大長度為32767加載LOB數據DBMS_LOADFROMFILE(desc_lobINOUTBLOB|CLOB|NCLOB,src_lobINBFILE,amountININTEGER,從源文件讀取的字節數desc_offsetININTEGER,目標文件寫入位置,單位字節/字符src_offsetININTEGER)源文件讀出位置,單位:字節加載LOB數據DBMS_LOADFROMFILE(LOB數據處理注意事項在對BFILE列處理時,如果出現例外,應該在例外處理部分調用FILECLOSE包過程。當刪除LOB列時BLOB和CLOB:定位器和LOB值都將被刪除BFILE:僅刪除定位器。(外部文件要手工刪除)LOB數據處理注意事項在對BFILE列處理時,如果出現例外,Oracle8數據庫系統改進表的存取性能-索引與數據簇分區選件-分區表與分區索引并行選件-SQL語句并行處理新的數據類型(多媒體數據類型)Oracle8數據庫系統改進表的存取性能-索引與數據簇84索引索引85索引在數據庫應用中,性能主要取決于存取表中數據的速度。索引可以快速找到待定的表記錄。索引維護與應用:索引對用戶透明當有索引且能提高應用的性能時,Oracle自動使用索引。Oracle自動更新索引以使其與表同步。索引類型B樹索引(系統自動為主碼和唯一完整性約束建立)位圖索引索引表,分區索引,反向鍵值索引…。索引在數據庫應用中,性能主要取決于存取表中數據的速度。SMITHALLENWARDJONESMARTINBLAKECLARKSCOTTKINGTURNERADAMSJAMESFORDMILLERB樹索引createindex索引名on表名(列名)
ADAMSALLENBLAKECLARKFORDJAMESJONESKINGMARTINMILLERSCOTTSMITHTURNERWARDMILLERTURNERBLAKEJAMESKINGROWIDSMITHMARTINTURNERB樹索引ADAMSBLAK對于索引列的每一個可能的值,都有獨立的位圖項。在位圖項中的每一位代表一個可能的ROWID,為1意味著該行包含關鍵值。例如:LOC列(3種取值)北京(010011)天津(100000)上海(001100)第二個記錄第一個記錄位圖函數可以將位的位置轉換為實際的ROWID。通過位圖索引的合并簡化查詢條件,從而過濾被訪問的數據集合。位圖索引d01合資d02合資d03合資d04外企d05國企d06合資dnotype天津北京上海上海北京北京loc對于索引列的每一個可能的值,都有獨立的位圖項。位圖索引d01
selectdnofromdepwheretype=‘合資’andlocin(‘北京’,‘上海’);合資北京上海 1000 1 1 01 d02 1 011 d03 0AND 0OR1=0 0 100 1 10 1 d06 位圖索引的例子selectdnofromdep位圖索引的例子位圖索引建立位圖索引;createbitmapindexdep_indexondep(type);createbitmapindexdep_indexondep(doc);位圖索引適用于列的值取值不多的情況、索引列含有越多的值,位圖項就越多,需要存儲索引的空間也越大。由于Oracle必須展開一個位圖索引的方式,所以不適于經常插入或更新數據的應用。位圖索引典型地用于決策系統與數據倉庫應用中查詢數據。位圖索引建立位圖索引;簇(聚集)索引當cluster建立后,必須建立簇索引后,被聚集的表才能訪問。系統不會自動為簇建索引。例:createclusertdep_emp(depnochar(3));createtabledep(dno..,dname..,…)clusterdep_emp(dno);createtableemp(emp…,…dno...)clusterdep_emp(dno);createindexdep_emp_idxonclusterdep_emp;簇(聚集)索引當cluster建立后,必須建立簇索引后,被聚簇(聚集)索引簇索引表的存儲e01王山男d01佳月公司8200e02張麗女d01e10孫軍男d02運通公司2034d03安合物業6800來自emp來自depclusterkey簇(聚集)索引簇索引表的存儲分區選件分區選件93分區選件分區的原因表和索引迅速膨脹數據倉庫和決策支持的需要什么是分區大的表或索引可以拆分為小的易于管理的數據片斷,例如將銷售表按銷售日期拆分成一系列數據片斷其中每一個片斷稱為一個分區(partition)被分區的表稱為分區表。分區選件分區的原因數據倉庫的概念數據倉庫就是面向主題的、集成的、穩定的、不同時間的數據集合,用以支持經營管理中的決策制定過程。主題是一個在較高層次將數據歸類的標準,每一個主題對應一個宏觀的分析領域數據倉庫的集成特性是指在數據進入數據倉庫之前,必須經過數據加工和集成,統一原始數據中的矛盾之處,將原始數據結構做一個從面向應用向面向主題的轉變。數據倉庫的穩定性是指數據倉庫反映的是歷史數據的內容,而不是日常事務處理產生的數據,進入數據倉庫后是極少或根本不修改的數據倉庫的概念數據倉庫就是面向主題的、集成的、穩定的、不同時數據倉庫的概念數據倉庫最根本的特點是物理地存放數據。這些數據并不是最新的、專有的,而是來源于其它數據庫的。數據倉庫的建立并不是要取代數據庫,它要建立在一個較全面和完善的信息應用的基礎上,用于支持高層決策分析。而事務處理數據庫在企業的信息環境中承擔的是日常操作性的的任務。數據倉庫是數據庫技術的一種新的應用,而且到目前為止,數據倉庫還是用數據庫管理系統來管理其中的數據。數據倉庫的概念數據倉庫最根本的特點是物理地存放數據。這些數據分區只有表和索引可以分區。分區對于應用人員和用戶是透明的。分區可以控制數據的存儲地點:將數據分散存儲在多個磁盤上。將經常使用的數據放在快速的磁盤上。分區可以有不同的物理屬性:分區可以有不同的存儲參數(tablespace,pctfree,pctused,等等)分區表或索引可以跨表空間存儲,分區不可以。同一模式對象的所有分區必須具有相同的邏輯屬性:相同的列,數據類型,約束。分區只有表和索引可以分區。分區的作用增加了數據的可用性不同的分區可以跨表空間存儲,可以進行分區級的備份和恢復。不同的分區可以跨表空間存儲,降低了磁盤損壞帶來的數據不可用性。不可用的分區不會影響到對其它分區的查詢和維護提高了系統性能服務器可以進行智能的分區檢測跳過與查詢無關的分區訪問跳過不在線的分區在物理設備上負載均衡將數據分散存儲在多個磁盤上,實現并行存取分區的作用增加了數據的可用性分區關鍵字分區關鍵字決定了劃分分區的依據只能是標準數據類型:Number,Date,Character(VARCHAR2,CHAR)可以是多至16個的列的聯合對關鍵字的修改不能導致記錄在分區之間的移動分區的數據范圍LESSTHAN子句指定每個分區的上限值。除第一個分區外,每一個分區都有一個隱含的下限值(即前一個分區的上限值)。最后一個分區的上限值可以設定為MAXVALUE必須按照升序排列來聲明分區。分區關鍵字分區關鍵字建立分區表例1CREATETABLEsales97(acct_nonumber(5),product_idnumber(12),qtynumber(8),sales_datedate)PARTITIONBYRANGE(sales_date)(PARTITIONp1VALUESLESSTHAN(to_date('01-4月-1997','dd-mon-yyyy'))TABLESPACEp1_space,PARTITIONp2VALUESLESSTHAN(to_date('01-7月-1997','dd-mon-yyyy'))TABLESPACEp2_space,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北師大版八年級上數學專項訓練計劃
- 微塑料生態毒理效應-洞察及研究
- 小學二年級科學課程創新教學工作計劃
- 跨文化背景下教師職業行為心得體會
- 做幸福教師的課堂氛圍營造心得體會
- 五年級年級組長學生成長計劃
- 土壤抗蝕性評價-洞察及研究
- 情境創設與教育數字化轉型的協同發展研究-洞察及研究
- 旅游客戶關系管理畢業實習報告范文
- 高校法治文化建設2025年計劃
- 2025年濟南綜保控股集團有限公司公開招聘(22名)筆試備考試題含答案詳解
- 溺水安全知識課件
- 教育政策學全套課件
- 2025至2030年中國高速公路廣告行業市場行情監測及投資前景展望報告
- 識別心內科護理高風險
- 2025年 嘉峪關市招聘編制外聘用制教師筆試試卷附答案
- 貨代公司風險管理制度
- 食品公司衛生間管理制度
- 2025年數據挖掘和分析考試試卷及答案
- 2025河南省豫地科技集團社會招聘169人筆試參考題庫附帶答案詳解析集合
- JG/T 518-2017基樁動測儀
評論
0/150
提交評論