Oracle第章模式對(duì)象_第1頁
Oracle第章模式對(duì)象_第2頁
Oracle第章模式對(duì)象_第3頁
Oracle第章模式對(duì)象_第4頁
Oracle第章模式對(duì)象_第5頁
已閱讀5頁,還剩176頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第9章模式對(duì)象本章內(nèi)容模式概念表管理索引管理分區(qū)表與分區(qū)索引的管理視圖、序列、同義詞、數(shù)據(jù)庫鏈接管理本章要求掌握表的管理掌握索引的管理掌握分區(qū)的概念及分區(qū)管理了解視圖、序列、同義詞、數(shù)據(jù)庫鏈接等的管理9.1模式模式概念模式與用戶的關(guān)系模式選擇與切換模式概念是指一系列邏輯數(shù)據(jù)結(jié)構(gòu)或?qū)ο蟮募?。模式與用戶的關(guān)系模式與用戶相對(duì)應(yīng),一個(gè)模式只能被一個(gè)數(shù)據(jù)庫用戶所擁有,并且模式的名稱與這個(gè)用戶的名稱相同。通常情況下,用戶所創(chuàng)建數(shù)據(jù)庫對(duì)象都保存在與自己同名的模式中。同一模式中數(shù)據(jù)庫對(duì)象的名稱必須惟一,而在不同模式中的數(shù)據(jù)庫對(duì)象可以同名。默認(rèn)情況下,用戶引用的對(duì)象是與自己同名模式中的對(duì)象,如果要引用其他模式中的對(duì)象,需要在該對(duì)象名之前指明對(duì)象所屬模式。模式選擇與切換如果用戶以NORMAL身份登錄,則進(jìn)入同名模式;若以SYSDBA身份登錄,則進(jìn)入SYS模式;如果以SYSOPER身份登錄,則進(jìn)入PUBLIC模式。9.2表創(chuàng)建表表約束的管理表參數(shù)設(shè)置修改表刪除表利用OEM管理表9.2.1創(chuàng)建表表的創(chuàng)建創(chuàng)建臨時(shí)表利用子查詢創(chuàng)建表(1)表的創(chuàng)建表的規(guī)劃與設(shè)計(jì)表名稱列的數(shù)量列名稱與類型表約束表內(nèi)部數(shù)據(jù)的組織方式(標(biāo)準(zhǔn)表、索引化表、分區(qū)表)表存儲(chǔ)位置、存儲(chǔ)空間分配等。使用CREATETABLE語句創(chuàng)建表CREATETABLEtable_name(column_namedatatype[column_level_constraint][,column_namedatatype[column_level_constraint]…][,table_level_constraint])[parameter_list];CREATETABLEemployee(empnoNUMBER(5)PRIMARYKEY,enameVARCHAR2(15),deptnoNUMBER(3)NOTNULLCONSTRAINTfk_empREFERENCESdept(deptno))TABLESPACEUSERSPCTFREE10PCTUSED40STORAGE(INITIAL50KNEXT50KMAXEXTENTS10PCTINCREASE25);表名(table_name)必須是合法標(biāo)標(biāo)識(shí)符,長度度為1~30字節(jié),并且以以字母開頭,,可以包含字字母(A~Z,a~z)、數(shù)字(0~9),下劃線((_)、美元符號(hào)號(hào)($)和井號(hào)(#)。此外,表表名稱不能是是Oracle數(shù)據(jù)庫的保留留字?jǐn)?shù)據(jù)類型(datatype)字符類型數(shù)字類型日期類型LOB類型二進(jìn)制類型行類型CHAR(n)定長字符串,,n的取值范圍為為1-2000字節(jié)VARCHAR2(n)可變字符串,,n取值范圍為1-4000字節(jié)自動(dòng)調(diào)整數(shù)據(jù)據(jù)長度NCHAR(n)用來存儲(chǔ)Unicode類型字符串。。NVARCHAR2(n)它用來存儲(chǔ)Unicode類型字符串。。LONG可變長字符列列,最大長度度為2GB用于不需設(shè)置置成索引的字字符,不常用用字符類型數(shù)字類型NUMBER(m,n)用于存儲(chǔ)整數(shù)數(shù)和實(shí)數(shù)。m表示數(shù)值的總總位數(shù)(精度度),取值范范圍為1~38,默認(rèn)為38;n表示小數(shù)位數(shù)數(shù),若為負(fù)數(shù)數(shù)則表示把數(shù)數(shù)據(jù)向小數(shù)點(diǎn)點(diǎn)左邊舍入,,默認(rèn)值為0。日期類型DATE可以存儲(chǔ)的日日期范圍為公公元前4712年1月1日到公元4712年1月1日,由世紀(jì)、、年、月、日日、時(shí)、分、、秒組成??煽梢栽谟脩舢?dāng)當(dāng)前會(huì)話中使使用參數(shù)NLS_DATE_FORMAT指定日期和時(shí)時(shí)間的格式,,或者使用TO_DATE函數(shù),將表示示日期和時(shí)間間的字符串按按特定格式轉(zhuǎn)轉(zhuǎn)換成日期和和時(shí)間。TIMESTAMP[(n)]:表示時(shí)間戳戳,是DATE數(shù)據(jù)類型的擴(kuò)擴(kuò)展,允許存存儲(chǔ)小數(shù)形式式的秒值。n表示秒的小數(shù)數(shù)位數(shù),取值值范圍為1~9,默認(rèn)值為6。TIMESTAMP[(n)]WITHTIMEZONE:通過存儲(chǔ)一一個(gè)時(shí)區(qū)偏差差來擴(kuò)展TIMESTAMP類型。時(shí)區(qū)區(qū)偏差值為相相對(duì)于通用協(xié)協(xié)調(diào)時(shí)間(或或稱UTC,以前稱為格格林威治時(shí)間間或GMT)的時(shí)差。TIMESTAMP[(n)]WITHLOCALTIMEZONE與TIMESTAMP[(n)]WITHTIMEZONE的不同之處在在于,存儲(chǔ)日日期時(shí)直接轉(zhuǎn)轉(zhuǎn)換為數(shù)據(jù)庫庫時(shí)區(qū)日期,,而讀取日期期時(shí)將數(shù)據(jù)庫庫時(shí)區(qū)日期轉(zhuǎn)轉(zhuǎn)換為用戶會(huì)會(huì)話時(shí)區(qū)日期期。INTERVALYEAR(n)TOMONTH存儲(chǔ)以年份和和月份表示的的時(shí)間段。n是表示YEAR的最多數(shù)字位位數(shù),默認(rèn)為為2。例如,INTERVAL'2-11'YEARTOMONTH表示2年11個(gè)月。INTERVALDAY(m)TOSECOND(n)存儲(chǔ)以天數(shù)、、小時(shí)數(shù)、分分鐘數(shù)和秒數(shù)數(shù)表示的時(shí)間間段。m是表示DAY的最多數(shù)字位位數(shù),默認(rèn)為為2。n是表示SECOND的小數(shù)部分的的位數(shù),默認(rèn)認(rèn)為6。例如,INTERVAL'510:30:40'DAYTOSECOND表示5天10小時(shí)30分40秒。LOB類型CLOB用于存儲(chǔ)可變變長度的字符符數(shù)據(jù),如文文本文件等,,最大數(shù)據(jù)量量為4GB。NCLOB用于存儲(chǔ)可變變長度的Unicode字符數(shù)據(jù),最最大數(shù)據(jù)量為為4GB。BLOB用于存儲(chǔ)大型型的、未被結(jié)結(jié)構(gòu)化的可變變長度的二進(jìn)進(jìn)制數(shù)據(jù)(如如二進(jìn)制文件件、圖片文件件、音頻和視視頻等非文本本文件),最最大數(shù)據(jù)量為為4GB。BFILE用于存儲(chǔ)指向向二進(jìn)制格式式文件的定位位器,該二進(jìn)進(jìn)制文件保存存在數(shù)據(jù)庫外外部的操作系系統(tǒng)中,文件件最大為4GB。二進(jìn)制類型RAW(n)用于存儲(chǔ)可變變長度的二進(jìn)進(jìn)制數(shù)據(jù),n表示數(shù)據(jù)長度度,取值范圍圍為1~2000字節(jié);LONGRAW用于存儲(chǔ)可變變長度的二進(jìn)進(jìn)制數(shù)據(jù),最最大存儲(chǔ)數(shù)據(jù)據(jù)量為2GB。行類型ROWID行標(biāo)識(shí)符,表表中行的物理理地址的偽列列類型。ROWID類型數(shù)據(jù)由18位十六進(jìn)制數(shù)數(shù)構(gòu)成,包括括對(duì)象編號(hào)、、文件編號(hào)、、數(shù)據(jù)塊編號(hào)號(hào)和塊內(nèi)行號(hào)號(hào)。UROWID行標(biāo)識(shí)符,用用于表示索引引化表中行的的邏輯地址。。約束(constraint)在Oracle數(shù)據(jù)庫中對(duì)列列的約束包括括主鍵約束、、惟一性約束束、檢查約束束、外鍵約束束和空/非空約束等5中,定義方法法有表級(jí)約束束和列級(jí)約束束2種。參數(shù)(parameter_list)在定義表時(shí),,可以通過參參數(shù)設(shè)置表存存儲(chǔ)在哪一個(gè)個(gè)表空間中,,和存儲(chǔ)空間間分配等。(2)創(chuàng)建臨時(shí)表表臨時(shí)表中的數(shù)數(shù)據(jù)在特定條條件下自動(dòng)釋釋放,但其結(jié)結(jié)構(gòu)將一直存存在。根據(jù)臨時(shí)表中中數(shù)據(jù)被釋放放的時(shí)間不同同,臨時(shí)表分分為事務(wù)級(jí)別別的臨時(shí)表和和會(huì)話級(jí)別的的臨時(shí)表兩類類。ONCOMMITDELETEROWS//事務(wù)級(jí)臨時(shí)表表ONCOMMITPRESERVEROWS//會(huì)話級(jí)臨時(shí)表表語法使用CREATEGLOBALTEMPORARYTABLE語句創(chuàng)建臨時(shí)時(shí)表使用ONCOMMIT子句說明臨時(shí)時(shí)表的類型,,默認(rèn)為事務(wù)務(wù)級(jí)別的臨時(shí)時(shí)表。事務(wù)級(jí)別的臨臨時(shí)表是在事事務(wù)提交時(shí)系系統(tǒng)自動(dòng)刪除除表中所有記記錄。CREATEGLOBALTEMPORARYTABLEtran_temp(IDNUMBER(2)PRIMARYKEY,nameVARCHAR2(20))ONCOMMITDELETEROWS;會(huì)話級(jí)別的臨臨時(shí)表是在會(huì)會(huì)話終止時(shí)系系統(tǒng)自動(dòng)刪除除表中所有記記錄。CREATEGLOBALTEMPORARYTABLEsess_temp(IDNUMBER(2)PRIMARYKEY,nameVARCHAR2(20))ONCOMMITPRESERVEROWS;(3)利用子查詢?cè)儎?chuàng)建表語法CREATETABLEtable_name(column_name[column_level_constraint][,column_name[column_level_constraint]…][,table_level_constraint])[parameter_list]ASsubquery;注意通過該方法創(chuàng)創(chuàng)建表時(shí),可可以修改表中中列的名稱,,但是不能修修改列的數(shù)據(jù)據(jù)類型和長度度;源表中的約束束條件和列的的缺省值都不不會(huì)復(fù)制到新新表中;子查詢中不能能包含LOB類型和LONG類型列;當(dāng)子查詢條件件為真時(shí),新新表中包含查查詢到的數(shù)據(jù)據(jù);當(dāng)查詢條條件為假時(shí),,則創(chuàng)建一個(gè)個(gè)空表。創(chuàng)建一個(gè)標(biāo)準(zhǔn)準(zhǔn)表,保存工工資高于3000的員工的員工工號(hào)、員工名名和部門號(hào)。。語句為CREATETABLEemp_select(emp_no,emp_name,dept_no)ASSELECTempno,ename,deptnoFROMemployeeWHEREsal>3000;創(chuàng)建一個(gè)會(huì)話話級(jí)臨時(shí)表,,保存部門號(hào)號(hào)、部門人數(shù)數(shù)和部門的平平均工資。CREATEGLOBALTEMPORARYTABLEept_tempONCOMMITPRESERVEROWSASSELECTdeptno,count(*)num,avg(sal)avgsalFROMempGROUPBYdeptno;9.2.2表約束約束的類別定義約束添加和刪除約約束設(shè)置約束狀態(tài)態(tài)約束的延遲檢檢查查詢約束信息息(1)約束的類別別約束作用是在表中定義義的用于維護(hù)護(hù)數(shù)據(jù)庫完整整性的一些規(guī)規(guī)則。通過對(duì)對(duì)表中列定義義約束,可以以防止在執(zhí)行行DML操作時(shí),將不不符合要求的的數(shù)據(jù)插入到到表中。約束類型PRIMARYKEYUNIQUECHECKFOREIGNKEYNULL/NOTNULLPRIMARYKEY特點(diǎn)定義主鍵,起起惟一標(biāo)識(shí)作作用,其值不不能為NULL,也不能重復(fù)復(fù);一個(gè)個(gè)表表中中只只能能定定義義一一個(gè)個(gè)主主鍵鍵約約束束;;建立立主主鍵鍵約約束束的的同同時(shí)時(shí),,在在該該列列上上建建立立一一個(gè)個(gè)惟惟一一性性索索引引,,可可以以為為它它指指定定存存儲(chǔ)儲(chǔ)位位置置和和存存儲(chǔ)儲(chǔ)參參數(shù)數(shù);;主鍵鍵約約束束可可以以是是列列級(jí)級(jí)約約束束,,也也可可以以是是表表級(jí)級(jí)約約束束。。UNIQUE特點(diǎn)點(diǎn)定義義為為惟惟一一性性約約束束的的某某一一列列或或多多個(gè)個(gè)列列的的組組合合的的取取值值必必須須惟惟一一;;如果果某某一一列列或或多多個(gè)個(gè)列列僅僅定定義義惟惟一一性性約約束束,,而而沒沒有有定定義義非非空空約約束束,,則則該該約約束束列列可可以以包包含含多多個(gè)個(gè)空空值值;;Oracle自動(dòng)動(dòng)在在惟惟一一性性約約束束列列上上建建立立一一個(gè)個(gè)惟惟一一性性索索引引,,可可以以為為它它指指定定存存儲(chǔ)儲(chǔ)位位置置和和存存儲(chǔ)儲(chǔ)參參數(shù)數(shù);;惟一一性性約約束束可可以以是是列列級(jí)級(jí)約約束束,,也也可可以以是是表表級(jí)級(jí)約約束束。。在一一個(gè)個(gè)基基本本表表中中只只能能定定義義一一個(gè)個(gè)PRIMARYKEY約束束,,但但可可定定義義多多個(gè)個(gè)UNIQUE約束束;;對(duì)于于指指定定為為PRIMARYKEY的一一個(gè)個(gè)列列或或多多個(gè)個(gè)列列的的組組合合,,其其中中任任何何一一個(gè)個(gè)列列都都不不能能出出現(xiàn)現(xiàn)空空值值,,而而對(duì)對(duì)于于UNIQUE所約約束束的的唯唯一一鍵鍵,,則則允允許許為為空空。。不能能為為同同一一個(gè)個(gè)列列或或一一組組列列既既定定義義UNIQUE約束束,,又又定定義義PRIMARYKEY約束束。。PRIMARYKEY與UNIQUE比較較CHECK特點(diǎn)點(diǎn)檢查查約約束束用用來來限限制制列列值值所所允允許許的的取取值值范范圍圍,,其其表表達(dá)達(dá)式式中中必必須須引引用用相相應(yīng)應(yīng)列列,,并并且且表表達(dá)達(dá)式式的的計(jì)計(jì)算算結(jié)結(jié)果果必必須須是是一一個(gè)個(gè)布布爾爾值值;;約束束表表達(dá)達(dá)式式中中不不能能包包含含子子查查詢?cè)?,,也也不不能能包包含含SYSDATE、USER等SQL函數(shù)數(shù),,和和ROWID、ROWNUM等偽偽列列;;一個(gè)個(gè)列列可可以以定定義義多多個(gè)個(gè)檢檢查查約約束束;;檢查查約約束束可可以以是是列列級(jí)級(jí)約約束束,,也也可可以以是是表表級(jí)級(jí)約約束束。。概念念FOREIGNKEY約束束指指定定某某一一個(gè)個(gè)列列或或一一組組列列作作為為外外部部鍵鍵,,其其中中,,包包含含外外部部鍵鍵的的表表稱稱為為從從表表,,包包含含外外部部鍵鍵所所引引用用的的主主鍵鍵或或唯唯一一鍵鍵的的表表稱稱主主表表。。系統(tǒng)統(tǒng)保保證證從從表表在在外外部部鍵鍵上上的的取取值值要要么么是是主主表表中中某某一一個(gè)個(gè)主主鍵鍵值值或或唯唯一一鍵鍵值值,,要要么么取取空空值值。。以以此此保保證證兩兩個(gè)個(gè)表表之之間間的的連連接接,,確確保保了了實(shí)實(shí)體體的的參參照照完完整整性性。。FOREIGNKEY特點(diǎn)點(diǎn)定義義外外鍵鍵約約束束的的列列的的取取值值要要么么是是主主表表參參照照列列的的值值,,要要么么為為空空;;外鍵鍵列列只只能能參參照照于于主主表表中中的的主主鍵鍵約約束束列列或或惟惟一一性性約約束束列列;;可以以在在一一列列或或多多列列組組合合上上定定義義外外鍵鍵約約束束;;外鍵鍵約約束束可可以以是是列列級(jí)級(jí)約約束束,,也也可可以以是是表表級(jí)級(jí)約約束束。。NULL/NOTNULL特點(diǎn)點(diǎn)在同同一一個(gè)個(gè)表表中中可可以以定定義義多多個(gè)個(gè)NOTNULL約束束;;只能能是是列列級(jí)級(jí)約約束束。。(2)定定義義約約束束列約約束束對(duì)某某一一個(gè)個(gè)特特定定列列的的約約束束,,包包含含在在列列定定義義中中,,直直接接跟跟在在該該列列的的其其他他定定義義之之后后,,用用空空格格分分隔隔,不必必指指定定列列名名;表約約束束與列列定定義義相相互互獨(dú)獨(dú)立立,,不不包包括括在在列列定定義義中中。。通通常常用用于于對(duì)對(duì)多多個(gè)個(gè)列列一一起起進(jìn)進(jìn)行行約約束束,,與與列列定定義義用用’,’分隔隔。。定定義義表表約約束束時(shí)時(shí)必必須須指指出出要要約約束束的的那那些些列列的的名名稱稱。。定義義列列級(jí)級(jí)約約束束的的語語法法為為::[CONSTRAINTconstraint_name]constraint_type[conditioin];定義義表表級(jí)級(jí)約約束束的的語語法法為為::[CONSTRAINTconstraint_name]constraint_type([column1_name,column2_name,…]|[condition]);注意意Oracle約束束通通過過名名稱稱進(jìn)進(jìn)行行標(biāo)標(biāo)識(shí)識(shí)。。在在定定義義時(shí)時(shí)可可以以通通過過CONSTRAINT關(guān)鍵鍵字字為為約約束束命命名名。。如如果果用用戶戶沒沒有有為為約約束束命命名名,,Oracle將自自動(dòng)動(dòng)為為約約束束命命名名。。創(chuàng)建一個(gè)student表。CREATETABLEstudent(snoNUMBER(6)CONSTRAINTS_PKPRIMARYKEY,snameVARCHAR2(10)NOTNULL,sexCHAR(2)CONSTRAINTS_CK1CHECK(sexin('M','F')),sageNUMBER(6,2),CONSTRAINTS_CK2CHECK(sagebetween18and60));創(chuàng)建一個(gè)course表,同時(shí)為主主鍵約束列上上的唯一性索索引設(shè)置存儲(chǔ)儲(chǔ)位置和存儲(chǔ)儲(chǔ)參數(shù),語句句為CREATETABLEcourse(cnoNUMBER(6)PRIMARYKEY,cnameCHAR(20)UNIQUEUSINGINDEXTABLESPACEindxSTORAGE(INITIAL64KNEXT64K));創(chuàng)建一個(gè)SC表,語句為CREATETABLESC(snoNUMBER(6)REFERENCESstudent(sno),cnoNUMBER(6)REFERENCEScourse(cno),gradeNUMBER(5,2),CONSTRAINTSC_PKPRIMARYKEY(sno,cno));定義列級(jí)FOREIGNKEY約束[CONSTRAINTconstraint_name][FOREIGNKEY]REFERENCESref_table_name(column_name,…)定義表級(jí)FOREIGNKEY約束[CONSTRAINTconstraint_name]FOREIGNKEY(column_name,…)REFERENCESref_table_name(column_name,…)[ONDELETECASCADE|SETNULL];ONDELETECASCADE刪除子表中所所有相關(guān)記錄錄ONDELETESETNULL將子表中相關(guān)關(guān)記錄的外鍵鍵約束列值設(shè)設(shè)置為NULLONDELETERESTRICTED受限刪除,即即如果子表中中有相關(guān)子記記錄存在,則則不能刪除主主表中的父記記錄,默認(rèn)引引用方式。DEFAULT如果用戶在插插入新行時(shí)沒沒有顯示為列列提供數(shù)據(jù),,系統(tǒng)將默認(rèn)認(rèn)值賦給該列列。語法[CONSTRAINT<約束名>]DEFAULT表達(dá)式(3)添加和刪除除約束添加約束語法法為:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]constraint_type(column1_name,column2_name,…)[condition];創(chuàng)建一個(gè)player表CREATETABLEplayer(IDNUMBER(6),snoNUMBER(6),snameVARCHAR2(10),sageNUMBER(6,2),resumeVARCHAR2(1000));添加主鍵約束束ALTERTABLEplayerADDCONSTRAINTP_PKPRIMARYKEY(ID);添加惟一性約約束ALTERTABLEplayerADDCONSTRAINTP_UKUNIQUE(sname);添加檢查約束束ALTERTABLEplayerADDCONSTRAINTP_CKCHECK(sageBETWEEN20AND30);添加外鍵約束束ALTERTABLEplayerADDCONSTRAINTP_FKFOREIGNKEY(sno)REFERENCESstudent(sno)ONDELETECASCADE;添加空/非空約束為表列添加空空/非空約束時(shí)必必須使用MODIFY子句代替ADD子句ALTERTABLEplayerMODIFYresumeNOTNULL;ALTERTABLEplayerMODIFYresumeNULL;刪除約束使用ALTERTABLE…DROP語句刪除已經(jīng)經(jīng)定義的約束束??梢酝ㄟ^直接接指定約束的的名稱來刪除除約束,或指指定約束的內(nèi)內(nèi)容來刪除約約束。刪除指定內(nèi)容容的約束ALTERTABLEplayerDROPUNIQUE(sname);刪除指定名稱稱的約束ALTERTABLEplayerDROPCONSTRAINTP_CK;刪除主鍵約束束、唯一性約約束的同時(shí)將將刪除唯一性性索引,如果果要在刪除約約束時(shí)保留唯唯一性索引,,則必須在ALTERTABLE…DORP語句中指定KEEPINDEX子句。ALTERTABLEplayerDROPCONSTRAINTP_UKKEEPINDEX;如果要在刪除除約束的同時(shí)時(shí),刪除引用用該約束的其其他約束,則則需要在ALTERTABLE…DORP語句中指定CASCADE關(guān)鍵字。ALTERTABLEplayerDROPCONSTRAINTP_PKCASCADE;(4)設(shè)置約束狀狀態(tài)激活(ENABLE)狀態(tài)當(dāng)約束處于激激活狀態(tài)時(shí),,約束將對(duì)表表的插入或更更新操作進(jìn)行行檢查,與約約束規(guī)則沖突突的操作被回回退。禁用(DISABLE)狀態(tài)當(dāng)約束處于禁禁用狀態(tài)時(shí),,約束不起作作用,與約束束規(guī)則沖突的的插入或更新新操作也能夠夠成功執(zhí)行。。利用SQL*Loader從外部數(shù)據(jù)源源提取大量數(shù)數(shù)據(jù)到數(shù)據(jù)庫庫中;進(jìn)行數(shù)據(jù)庫中中數(shù)據(jù)的大量量導(dǎo)入、導(dǎo)出出操作;針對(duì)表執(zhí)行一一項(xiàng)包含大量量數(shù)據(jù)操作的的批處理工作作時(shí)。禁用約束在定義約束時(shí)時(shí),可以將約約束設(shè)置為禁禁用狀態(tài),默默認(rèn)為激活狀狀態(tài)。也可以以在約束創(chuàng)建建后,修改約約束狀態(tài)為禁禁用。創(chuàng)建表時(shí)禁用用約束CREATETABLES(SNOCHAR(11)PRIMARYKEYDISALBE,…);利用ALTERTABLE…DISABLE禁用約束ALTERTABLESTUDENTDISABLECONSTRAINTS_CK1;ALTERTABLESTUDENTDISABLEUNIQUE(sname);禁用主鍵約束束、惟一性約約束時(shí),會(huì)刪刪除其對(duì)應(yīng)的的惟一性索引引,而在重新新激活時(shí),Oracle為它們重建惟惟一性索引。。若在禁用約約束時(shí),保留留對(duì)應(yīng)的惟一一性索引,可可使用ALTERTABLE…DISABLE…KEEPINDEX語句。ALTERTABLESTUDENTDISABLEUNIQUE(sname)KEEPINDEX;ALTERTABLESTUDENTDISABLEPRIMARYKEYKEEPINDEX;若當(dāng)前約束(主鍵約束、惟惟一性約束)列被引用,則則需要使用ALTERTABLE…DISABLE…CASCADE語句同時(shí)禁用用引用該約束束的約束。ALTERTABLESTUDENTDISABLEPRIMARYKEYKEEPINDEXCASCADE;激活約束創(chuàng)建或添加約約束時(shí),默認(rèn)認(rèn)為激活狀態(tài)態(tài)。利用ALTERTABLE…ENABLE…語句激活約束束ALTERTABLESTUDENTENABLEUNIQUE(sname);禁用主鍵約束束、惟一性約約束時(shí),會(huì)刪刪除其對(duì)應(yīng)的的惟一性索引引,而在重新新激活時(shí),Oracle為它們重建惟惟一性索引,,可以為索引引設(shè)置存儲(chǔ)位位置和存儲(chǔ)參參數(shù)(索引與表盡量量分開存儲(chǔ))。ALTERTABLESTUDENTENABLEPRIMARYKEYUSINGINDEXTABLESPACEindxSTORAGE(INITIAL32KNEXT16K);通過ALTERTABLE…MODIFY…DISABLE|ENABLE語句改變約束束狀態(tài)ALTERTABLESTUDENTMODIFYCONSTRAINTS_CK2DISABLE;(5)約束的延遲遲檢查默認(rèn)情況下,,在表中的約約束都是不可可延遲約束,,Oracle在一條DML語句執(zhí)行完畢畢之后立即進(jìn)進(jìn)行約束檢查查(除非禁用用)。創(chuàng)建約束時(shí)可可以顯式使用用DEFERRABLE關(guān)鍵字,創(chuàng)建建可延遲的約約束。INITIALLYIMMEDIATE或INITIALLYDEFERRED說明可延遲約約束在初始狀狀態(tài)下是立即即檢查還是延延遲檢查如果在定義約約束時(shí)設(shè)定為為不可延遲,,則約束創(chuàng)建建后不能更改改其可延遲性性。只有創(chuàng)建建時(shí)設(shè)定為可可延遲的約束束,創(chuàng)建后才才能更改其可可延遲性。創(chuàng)建兩個(gè)表,,其約束都是是可延遲的。。CREATETABLEnew_dept(deptnoNUMBERPRIMARYKEYDEFERRABLEINITIALLYIMMEDIATE,dnameCHAR(11)UNIQUE);CREATETABLEnew_emp(empnoNUMBERPRIMARYKEY,enameCHAR(11),deptnoNUMBERCONSTRAINTNE_FKREFERENCESnew_dept(deptno)ONDELETECASCADEDEFERRABLE);由于外鍵約束束的作用,執(zhí)執(zhí)行下面語句句時(shí)會(huì)產(chǎn)時(shí)錯(cuò)錯(cuò)誤。INSERTINTOnew_empVALUES(1,'ZHANG',11);*ERROR位于第1行:ORA-02291:違反完整約束束條件(SCOTT.E_FK)-未找到父項(xiàng)關(guān)關(guān)鍵字將new_emp表的外鍵約束束檢查延遲。。ALTERTABLEnew_empMODIFYCONSTRAINTNE_FKINITIALLYDEFERRED;此時(shí),由由于將new_emp表外鍵約約束延遲遲到事務(wù)務(wù)結(jié)束后后進(jìn)行檢檢查,因因此可以以先向new_emp中插入數(shù)數(shù)據(jù),而而后向new_dept中插入數(shù)數(shù)據(jù)。INSERTINTOnew_empVALUES(1,'ZHANG',11);INSERTINTOnew_deptVALUES(11,'COMPUTER');COMMIT;操作完后后,應(yīng)將將new_emp外鍵約束束檢查恢恢復(fù)原來來狀態(tài)。。ALTERTABLEnew_empMODIFYCONSTRAINTNE_FKINITIALLYIMMEDIATE;注意在修改約約束的檢檢查延遲遲性時(shí),,如果無無法確定定約束的的名稱或或需要設(shè)設(shè)置多個(gè)個(gè)約束的的延遲性性,可以以一次性性將所有有可延遲遲的約束束延遲或或恢復(fù)。。SETCONSTRAINTALLDEFERRED;SETCONSTRAINTALLIMMEDIATE;(6)查詢約約束信息息ALL_CONSTRAINTSUSER_CONSTRAINTSDBA_CONSTRAINTSALL_CONS_COLUMNSUSER_CONS_COLUMNSDAB_CONS_COLUMNS查看student表中的所所有約束束。SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,DEFERRED,STATUSFROMUSER_CONSTRAINTSWHERETABLE_NAME='STUDENT';查看student表中各個(gè)個(gè)約束所所作用的的列。SELECTCONSTRAINT_NAME,COLUMN_NAMEFROMUSER_CONS_COLUMNSWHERETABLE_NAME='STUDENT';9.2.3表參數(shù)設(shè)設(shè)置TABLESPACETABLESPACE子句用于于指定表表存儲(chǔ)的的表空間間。STORAGESTORAGE子句用于于設(shè)置表表的存儲(chǔ)儲(chǔ)參數(shù)。。若不指指定,則則繼承表表空間的的存儲(chǔ)參參數(shù)設(shè)置置。NITIALNEXTPCTINCREASEMINEXTENTSMAXEXTENTSBUFFER_POOL(KEEP、RECYCLE、DEFAULT)STORAGE參數(shù)設(shè)置置需注意意如果表空空間管理理方式為為EXTENTMANAGEMENTLOCALAUTOALLOCATE,則在STORAGE中只能指指定INITIAL,NEXT和MINEXTENTS這3個(gè)參數(shù);;如果表空空間管理理方式為為EXTENTMANAGEMENTLOCALUNIFORM,則不能能指定任任何STORAGE子句;如果表空空間管理理方式為為EXTENTMANAGEMENTDICTIONARY,則在STORAG中可以設(shè)設(shè)置任何何參數(shù)。。數(shù)據(jù)塊管管理參數(shù)數(shù)PCTFREE:用于指指定數(shù)據(jù)據(jù)塊中必必須保留留的最小小空閑空空間。PCTUSED:用于指指定當(dāng)數(shù)數(shù)據(jù)塊空空閑空間間達(dá)到PCTFREE參數(shù)的限限制后,,數(shù)據(jù)塊塊能夠被被再次使使用前,,已占用用的存儲(chǔ)儲(chǔ)空間必必須低于于的比例例。INITRANS:用于指指定能夠夠并發(fā)訪訪問同一一個(gè)數(shù)據(jù)據(jù)塊的事事務(wù)的數(shù)數(shù)量。MAXTRANS:用于指指定能夠夠并發(fā)訪訪問同一一個(gè)數(shù)據(jù)據(jù)塊的事事務(wù)的最最大數(shù)量量。LOGGING與NOLOGGING子句默認(rèn)為NOLOGGING,即表的的創(chuàng)建操操作不會(huì)會(huì)記錄到到重做日日志文件件中,尤尤其適合合通過查查詢創(chuàng)建建表的情情況。使使用LOGGING子句,表表的創(chuàng)建建操作((包括通通過查詢?cè)儎?chuàng)建表表時(shí)的插插入記錄錄操作))都將記記錄到重重做日志志文件中中。PARALLEL、NOPARALLELCACHE、NOCACHEMONITORING、NOMONITORING9.2.4修改表基本語法法列的添加加、刪除除、修改改表參數(shù)修修改表結(jié)構(gòu)重重組表重命名名等為表和列列添加注注釋(1)修修改表基基本語法法ALTERTABLE<表名>ADD<新列名><數(shù)據(jù)類型型>[<完整性約約束定義義]MODIFY<列名><數(shù)據(jù)類型型>RENAMECOLUMNoldnameTOnewnameSETUNUSEDCOLUMNcolumn//singlecolumnSETUNUSEDCOLUMNS(column1,column2…)DROPCOLUMN<col>//singlecolumnDROP<col1,col2…>//multicolumnDROPUNUSEDCOLUMNS(2)列列的添加加、刪除除、修改改添加列語法ALTERTABLEtable_nameADD(new_column_namedatatype[NOTNULL][DEFAULTvalue]);示例ALTERTABLEemployeeADD(phoneVARCHAR2(11),hiredateDATEDEFAULTSYSDATENOTNULL);修改列類類型語法ALTERTABLEtable_nameMODIFYcolumn_namenew_datatype;修改表中中列類型型時(shí),必必須滿足足下列條條件:可以增大大字符類類型列的的長度和和數(shù)值類類型列的的精度;;如果字符符類型列列、數(shù)值值類型列列中數(shù)據(jù)據(jù)滿足新新的長度度、精度度,則可可以縮小小類型的的長度、、精度;;如果不改改變字符符串的長長度,可可以將VARCHAR2類型和CAHR類型轉(zhuǎn)換換;如果更改改數(shù)據(jù)類類型為另另一種非非同系列列類型,,則列中中數(shù)據(jù)必必須為NULL。示例ALTERTABLEemployeeMODIFYenameCHAR(20);ALTERTABLEemployeeMODIFYphoneNUMBER;修改列名名語法ALTERTABLEtable_nameRENAMECOLUMNoldnameTOnewname;示例ALTERTABLEemployeeRENAMECOLUMNenameTOemployee_name;刪除列直接刪除除列語法法ALTERTABLEtable_nameDROP[COLUMNcolumn_name]|[(column1_name,column2_name,…)][CASCADECONSTRAINTS];直接刪除除列示例例ALTERTABLEscDROPCOLUMNsnoCASCADECONSTRAINTS;ALTERTABLEemployeeDROP(phone,hiredate);將列標(biāo)記記為UNUSED,然后進(jìn)進(jìn)行刪除除。ALTERTABLEtable_nameSETUNUSED[COLUMNcolumn_name]|[(column1_name,column2_name,…)][CASCADECONSTRAINTS];示例ALTERTABLEplayerSETUNUSEDCOLUMNsage;ALTERTABLEplayerSETUNUSED(sname,resume);ALTERTABLEplayerDROPUNUSEDCOLUMNS;如果數(shù)據(jù)據(jù)庫表空空間處于于字典管管理方式式,可以以對(duì)表的的參數(shù)進(jìn)進(jìn)行修改改,包括括存儲(chǔ)參參數(shù)、存存儲(chǔ)位置置、數(shù)據(jù)據(jù)塊設(shè)置置等。ALTERTABLEemployeePCTFREE30PCTUSED60STORAGE(NEXT512KPCTINCREASE11);注意表創(chuàng)建后后不能對(duì)對(duì)INITIAL、MINEXTENTS兩個(gè)參數(shù)數(shù)進(jìn)行修修改。(3)表表參數(shù)修修改將一個(gè)非非分區(qū)的的表移動(dòng)動(dòng)到一個(gè)個(gè)新的數(shù)數(shù)據(jù)段中中,或者者移動(dòng)到到其他的的表空間間中,通通過這種種操作可可以重建建表的存存儲(chǔ)結(jié)構(gòu)構(gòu),稱為為表結(jié)構(gòu)構(gòu)重組。。如果發(fā)現(xiàn)現(xiàn)表的數(shù)數(shù)據(jù)段具具有不合合理的區(qū)區(qū)分配方方式,但但是又不不能通過過別的方方法來進(jìn)進(jìn)行調(diào)整整(改變變存儲(chǔ)參參數(shù)不會(huì)會(huì)影響到到已經(jīng)分分配的區(qū)區(qū)),可可以考慮慮將表移移動(dòng)到一一個(gè)新的的數(shù)據(jù)段段中。此此外,如如果頻繁繁地對(duì)表表進(jìn)行DML操作,會(huì)會(huì)產(chǎn)生大大量空間間碎片和和行遷移移、行連連接,可可以考慮慮進(jìn)行表表結(jié)構(gòu)重重組。(4)表表結(jié)構(gòu)重重組語法ALTERTABLEtbnameMOVE[TABLESPACEtbs_name]注意直到表被被完全移移動(dòng)到新新的數(shù)據(jù)據(jù)段中之之后,Oracle才會(huì)刪除除原來的的數(shù)據(jù)段段;表結(jié)構(gòu)重重組后,,表中每每個(gè)記錄錄的ROWID會(huì)發(fā)生變變化,因因此該表表的所有有索引失失效,需需要重新新建立索索引;如果表中中包含LOB列,則默默認(rèn)情況況下不移移動(dòng)LOB列數(shù)據(jù)和和LOB索引段。。語法ALTERTABLEold_nameRENAMETOnew_name;RENAMEold_nameTOnew_name;說明表重命名名后,Oracle會(huì)自動(dòng)將將舊表上上的對(duì)象象權(quán)限、、約束條條件等轉(zhuǎn)轉(zhuǎn)換到新新表上,,但是所所有與舊舊表相關(guān)關(guān)聯(lián)的對(duì)對(duì)象都會(huì)會(huì)失效,,需要重重新編譯譯。(5)表表重命名名為表添加加注釋COMMENTONTALBEtable_nameIS…;為列添加加注釋COMMENTONCOLUMNtable_name.column_nameIS…注釋可以以通過以以下數(shù)據(jù)據(jù)字典來來查看.ALL_COL_COMMENTSUSER_COL_COMMENTSALL_TAB_COMMENTSUSER_TAB_COMMENTS(6)為為表和列列添加注注釋語法DROPTABLEtable_name[CASCADECONSTRAINTS][PURGE]刪除一個(gè)個(gè)表同時(shí)時(shí),Oracle將執(zhí)行下下列操作作:刪除該表表中所有有記錄;;從數(shù)據(jù)字字典中刪刪除該表表定義;;刪除與該該表相關(guān)關(guān)的所有有索引和和觸發(fā)器器;回收為該該表分配配的存儲(chǔ)儲(chǔ)空間;;依賴于該該表的數(shù)數(shù)據(jù)庫對(duì)對(duì)象處于于INVALID狀態(tài)。9.2.5刪除表注意在Oracle10g中,使用用DROPTABLE語句刪除除一個(gè)表表時(shí),并并不立即即回收該該表的空空間,而而只是將將表及其其關(guān)聯(lián)對(duì)對(duì)象的信信息寫入入一個(gè)稱稱為“回收站”(RECYCLEBIN)的邏輯輯容器中中,從而而可以實(shí)實(shí)現(xiàn)閃回回刪除表表操作。。如果要要回收該該表空間間,可以以采用清清空“回收站”(PURGERECYCLEBIN)或在DROPTABLE語句中使使用PURGE語句。9.2.6利用OEM管理表創(chuàng)建表刪除表修改表查詢表(1)創(chuàng)建表表(2)表的其其他管理理9.3索引索引概述述索引管理理利用OEM管理索引引9.3.1索引概述述索引概念念及作用用索引是為為了加速速對(duì)表中中元組的的檢索而而創(chuàng)建的的一種分分散存儲(chǔ)儲(chǔ)結(jié)構(gòu);;是對(duì)表而而建立的的,由除除存放表表的數(shù)據(jù)據(jù)頁面以以外的索索引頁面面組成,,獨(dú)立于于被索引引的表;;通過使用用索引加加速行的的檢索,,但減慢慢更新的的速度;;快速定位位數(shù)據(jù),,減少磁磁盤I/O;Oracle自動(dòng)使用用、維護(hù)護(hù)索引索引分類類惟一性索索引與非非惟一性性索引平衡樹索索引與位位圖索引引單列索引引與復(fù)合合索引函數(shù)索引引聚簇索引引全局索引引與本地地索引索引使用用原則導(dǎo)入數(shù)據(jù)據(jù)后再創(chuàng)創(chuàng)建索引引在適當(dāng)?shù)谋砗秃妥侄紊蟿?chuàng)建建索引經(jīng)常查詢的記記錄數(shù)目少于于表中所有記記錄總數(shù)的5%時(shí)就應(yīng)當(dāng)創(chuàng)建建索引;經(jīng)常進(jìn)行連接接查詢表時(shí),,在連接列上上建立索引能能夠顯著提高高查詢的速度度;對(duì)于取值范圍圍很大的列應(yīng)應(yīng)當(dāng)創(chuàng)建B樹索引;對(duì)于取值范圍圍很小的列應(yīng)應(yīng)當(dāng)創(chuàng)建位圖圖索引;不能在LONG,LONGRAW,LOB數(shù)據(jù)類型的列列上創(chuàng)建索引引;Oracle會(huì)自動(dòng)在PRIMARYKEY和UNIQUE約束的列上創(chuàng)創(chuàng)建唯一性索索引。合理設(shè)置復(fù)合合索引中的字字段順序限制表中索引引的數(shù)目表中索引數(shù)目目越多,查詢?cè)兯俣仍娇欤?,但表的更新新速度越慢。。因?yàn)樗饕皆蕉?,維護(hù)索索引所需開銷銷越大,當(dāng)更更新表時(shí),需需要同時(shí)更新新與表相關(guān)的的所有索引。。為索引設(shè)置合合適的PCTFREE參數(shù)選擇存儲(chǔ)索引引的表空間默認(rèn)情況下,,索引與表存存儲(chǔ)在同一表表空間中。索索引與表存儲(chǔ)儲(chǔ)在同一表空空間中,有利利于數(shù)據(jù)庫維維護(hù)操作,具具有較高的可可用性;反之之,若索引與與表存儲(chǔ)在不不同的表空間間中,則可提提高系統(tǒng)的存存取性能,減減少硬盤I/O沖突,但是表表與索引可用用狀態(tài)可能出出現(xiàn)不一致,,如一個(gè)處于于聯(lián)機(jī)狀態(tài),,另一個(gè)處于于脫機(jī)狀態(tài)。。9.3.2管理索引創(chuàng)建索引修改索引監(jiān)視索引刪除索引索引的查詢語法CREATE[UNIQUE]|[BITMAP]INDEXindex_nameONtable_name([column_name[ASC|DESC],…]|[expression])[REVERSE][parameter_list];說明UNIQUE表示建立惟一一性索引;BITMAP表示建立位圖圖索引;ASC/DESC用于指定索引引值的排列順順序,ASC表示按升序排排序,DESC表示按降序排排序,缺省值值為ASC;REVERSE表示建立反鍵鍵索引;parameter_list用于指定索引引的存放位置置、存儲(chǔ)空間間分配和數(shù)據(jù)據(jù)塊參數(shù)設(shè)置置。(1)創(chuàng)建索引創(chuàng)建非惟一性性索引CREATEINDEXemployee_enameONemployee(ename)TABLESPACEusersSTORAGE(INITIAL20KNEXT20kPCTINCREASE75);創(chuàng)建惟一性索索引CREATEUNIQUEINDEXdeptartment_indexONdepartment(dname);創(chuàng)建位圖索引引CREATEBITMAPINDEXstudent_sexONstudent(sex);創(chuàng)建反序索引引CREATEINDEXplayer_sageONplayer(sage)REVERSE;創(chuàng)建函數(shù)索引引CREATEINDEXidxONemployee(UPPER(ename));定義約束時(shí)創(chuàng)創(chuàng)建索引CREATETABLEnew_employee(empnoNUMBER(5)PRIMARYKEYUSINGINDEXTABLESPACEusersPCTFREE0,enameVARCHAR2(20));(2)修改索引合并索引合并索引是對(duì)對(duì)索引進(jìn)行合合并操作,但但只是簡單地地將B樹葉節(jié)點(diǎn)中的的存儲(chǔ)碎片合合并在一起,,并不會(huì)改變變索引的物理理組織結(jié)構(gòu)語法ALTERINDEX…COALESCE示例ALTERINDEXemployee_enameCOALESCE;重建索引重建索引的實(shí)實(shí)質(zhì)是在指定定的表空間中中重新建立一一個(gè)新的索引引,然后再刪刪除原來的索索引,這樣不不僅能夠消除除存儲(chǔ)碎片,,還可以改變變索引的存儲(chǔ)儲(chǔ)參數(shù)設(shè)置,,并且將索引引移動(dòng)到其他他的表空間中中。語法ALTERINDEX…REBUILD示例ALTERINDEXplayer_sageREBUILD;合并索引與重重建索引比較較合并索引重建索引不能將索引移到其他表空間中可以將索引移到其他表空間中代價(jià)較低,不需要使用額外的存儲(chǔ)空間代價(jià)較高,需要使用額外的存儲(chǔ)空間只能在B樹的同一子樹中進(jìn)行合并,不會(huì)改變樹的高度重建整個(gè)B樹,可能會(huì)降低樹的高度可以快速釋放葉子節(jié)點(diǎn)中未使用的存儲(chǔ)空間可以快速更改索引的存儲(chǔ)參數(shù)。在重建過程中如果指定了ONLINE關(guān)鍵字,不會(huì)影響對(duì)當(dāng)前索引的使用索引重命名語法ALTERINDEX…RENAMETO語句為索引重重命名。示例ALTERINDEXemployee_enameRENAMETOemployee_new_ename;(3)監(jiān)視索引已經(jīng)建立的索索引是否能夠夠有效地工作作,取決于在在查詢執(zhí)行過過程中是否會(huì)會(huì)使用到這個(gè)個(gè)索引。要查查看某個(gè)指定定索引的使用用情況,可以以使用ALTERINDEX語句打開索引引的監(jiān)視狀態(tài)態(tài)。打開索引監(jiān)視視狀態(tài)ALTERINDEXindex_enameMONITORINGUSAGE;關(guān)閉索引監(jiān)視視狀態(tài)ALTERINDEXindex_enameNOMONITORINGUSAGE;查看索引使用用情況通過V$OBJECT_USAGE動(dòng)態(tài)性能視圖圖中查看索引引的使用情況況。USED列為YES,表示索引正正被引用,否否則為NO。(4)刪除索引語法DROPINDEXindex_name;在下面幾種情情況下,可以以考慮刪除索索引該索引不再使使用。通過一段時(shí)間間監(jiān)視,發(fā)現(xiàn)現(xiàn)幾乎沒有查查詢或只有極極少數(shù)查詢會(huì)會(huì)使用該索引引。由于索引中包包含損壞的數(shù)數(shù)據(jù)塊或包含含過多的存儲(chǔ)儲(chǔ)碎片等,需需要?jiǎng)h除該索索引,然后重重建索引。由于移動(dòng)了表表數(shù)據(jù)而導(dǎo)致致索引失效(5)索引的查詢?cè)僁BA_INDEXES、ALL_INDEXES、USER_INDEXES包含索引的基基本描述信息息和統(tǒng)計(jì)信息息,包括索引引的所有者、、索引的名稱稱、索引的類類型、對(duì)應(yīng)表表的名稱、索索引的存儲(chǔ)參參數(shù)設(shè)置、由由分析得到的的統(tǒng)計(jì)信息等等信息DBA_IND_COLUMNS、ALL_IND_COLUMNS、USER_IND_COLUMNS包含索引列的的描述信息,,包括索引的的名稱、表的的名稱和索引引列的名稱等等信息DBA_IND_EXPRESSIONS、ALL_IND_EXPRESSIONS、USER_IND_EXPRESSIONS包含函數(shù)索引引的描述信息息,通過該視視圖可以查看看到函數(shù)索引引的函數(shù)或表表達(dá)式V$OBJECT_USAGE包含通過ALTERINDEX…MONITORINGUSAGE語句對(duì)索引進(jìn)進(jìn)行監(jiān)視后得得到的索引使使用信息。9.3.3利用OEM管理索引創(chuàng)建索引修改索引刪除索引查詢索引(1)創(chuàng)建索引(2)索引的其他他管理9.4分區(qū)表與分區(qū)區(qū)索引分區(qū)概述創(chuàng)建分區(qū)表維護(hù)分區(qū)表查詢分區(qū)表和和分區(qū)索引信信息利用OEM管理分區(qū)表和和分區(qū)索引分區(qū)概述分區(qū)概念所謂的分區(qū)區(qū)是指將一一個(gè)巨型表表或巨型索索引分成若若干獨(dú)立的的組成部分分進(jìn)行存儲(chǔ)儲(chǔ)和管理,,每一個(gè)相相對(duì)小的、、可以獨(dú)立立管理的部部分,稱為為原來表或或索引的分分區(qū)。每個(gè)分區(qū)都都具有相同同的邏輯屬屬性,但物物理屬性可可以不同。。如具有相相同列、數(shù)數(shù)據(jù)類型、、約束等,,但可以具具有不同的的存儲(chǔ)參數(shù)數(shù)、位于不不同的表空空間等。分區(qū)后,表表中每個(gè)記記錄或索引引條目根據(jù)據(jù)分區(qū)條件件分散存儲(chǔ)儲(chǔ)到不同分分區(qū)中。。分區(qū)原則表的大小超超過2GB要對(duì)一個(gè)表表進(jìn)行并行行DML操作,必須須分區(qū)為了平衡硬硬盤的I/O操作,將一一個(gè)表分散散存儲(chǔ)在不不同的表空空間中,必必須對(duì)它進(jìn)進(jìn)行分區(qū)如果需要將將表一部分分設(shè)置為只只讀,另一一部分為可可更新的,,必須對(duì)表表進(jìn)行分區(qū)區(qū)9.4.1創(chuàng)建分區(qū)表表分區(qū)方法范圍分區(qū)列表分區(qū)散列分區(qū)復(fù)合分區(qū)(1)范圍分區(qū)區(qū)概述范圍分區(qū)是是按照分區(qū)區(qū)列值的范范圍來對(duì)表表進(jìn)行分區(qū)區(qū)的。參數(shù)通過PARTITIONBYRANGE子句說明根根據(jù)范圍進(jìn)進(jìn)行分區(qū),,其后括號(hào)號(hào)中列出分分區(qū)列,可可以進(jìn)行多多列分區(qū)。。每個(gè)分區(qū)區(qū)以PARTITION關(guān)鍵字開頭頭,其后是是分區(qū)名。。VALUESLESSTHAN子句用于設(shè)設(shè)置分區(qū)中中分區(qū)列值值的范圍。??梢詫?duì)每每個(gè)分區(qū)的的存儲(chǔ)進(jìn)行行設(shè)置,也也可以對(duì)所所有分區(qū)采采用默認(rèn)的的存儲(chǔ)設(shè)置置。示例創(chuàng)建一個(gè)分分區(qū)表,將將學(xué)生信息息根據(jù)其出出生日期進(jìn)進(jìn)行分區(qū),,將1980年1月1日前出生的的學(xué)生信息息保存在ORCLTBS1表空間中,,將1980年1月1日到1990年1月1日出生的學(xué)學(xué)生信息保保存在ORCLTBS2表空間中,,將其他學(xué)學(xué)生信息保保存在ORCLTBS3表空間中。。CREATETABLEstudent_range(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sageint,birthdayDATE)PARTITIONBYRANGE(birthday)(PARTITIONp1VALUESLESSTHAN(TO_DATE('1980-1-1','YYYY-MM-DD'))TABLESPACEORCLTBS1,PARTITIONp2VALUESLESSTHAN(TO_DATE('1990-1-1','YYYY-MM-DD'))TABLESPACEORCLTBS2,PARTITIONp3VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS3STORAGE(INITIAL10MNEXT20M))STORAGE(INITIAL20MNEXT10MMAXEXTENTS10);(2)列表分分區(qū)概述如果分區(qū)區(qū)列的值值并不能能劃分范范圍(非非數(shù)值類類型或日日期類型型),同同時(shí)分區(qū)區(qū)列的取取值范圍圍只是一一個(gè)包含含少數(shù)值值的集合合,則可可以對(duì)表表進(jìn)行列列表分區(qū)區(qū)(LIST),如按按地區(qū)、、性別等等分區(qū)。。與范圍分分區(qū)不同同,列表表分區(qū)不不支持多多列分區(qū)區(qū),只能能根據(jù)一一個(gè)單獨(dú)獨(dú)的列來來進(jìn)行分分區(qū)。創(chuàng)創(chuàng)建列表表分區(qū)時(shí)時(shí)需要指指定分區(qū)區(qū)列和分分區(qū)描述述。通過PARTITIONBYLIST子句說明明根據(jù)列列表進(jìn)行行分區(qū),,其后括括號(hào)中列列出分區(qū)區(qū)列。每每個(gè)分區(qū)區(qū)以PARTITION關(guān)鍵字開開頭,其其后是分分區(qū)名。。VALUES子句用于于設(shè)置分分區(qū)所對(duì)對(duì)應(yīng)的分分區(qū)列取取值。示例創(chuàng)建一個(gè)個(gè)分區(qū)表表,將學(xué)學(xué)生信息息按性別別不同進(jìn)進(jìn)行分區(qū)區(qū),男學(xué)學(xué)生信息息保存在在表空間間ORCLTBS1中,而女女學(xué)生信信息保存存在ORCLTBS2中。CREATETABLEstudent_list(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sexCHAR(2)CHECK(sexin('M','F')))PARTITIONBYLIST(sex)(PARTITIONstudent_maleVALUES('M')TABLESPACEORCLTBS1,PARTITIONstudent_femaleVALUES('F')TABLESPACEORCLTBS2);(3)散列分分區(qū)概述在進(jìn)行范范圍分區(qū)區(qū)或列表表分區(qū)時(shí)時(shí),由于于無法對(duì)對(duì)各個(gè)分分區(qū)中可可能具有有的記錄錄數(shù)量進(jìn)進(jìn)行預(yù)測(cè)測(cè),可能能導(dǎo)致數(shù)數(shù)據(jù)在各各個(gè)分區(qū)區(qū)中分布布不均衡衡,某個(gè)個(gè)分區(qū)中中數(shù)據(jù)很很多,而而某個(gè)分分區(qū)中數(shù)數(shù)據(jù)很少少。此時(shí)時(shí)可以采采用散列列分區(qū)((HASH)方法,,在指定定數(shù)量的的分區(qū)中中均等地地分配數(shù)數(shù)據(jù)。為了創(chuàng)建建散列分分區(qū),需需要指定定分區(qū)列列、分區(qū)區(qū)數(shù)量或或單獨(dú)的的分區(qū)描描述。通過PARTITIONBYHASH指定分區(qū)區(qū)方法,,其后的的括號(hào)指指定分區(qū)區(qū)列。使使用PARTITION子句指定定每個(gè)分分區(qū)名稱稱和其存存儲(chǔ)空間間?;蛘哒呤褂肞ARTITIONS子句指定定分區(qū)數(shù)數(shù)量,用用STOREIN子句指定定分區(qū)存存儲(chǔ)空間間。示例創(chuàng)建一個(gè)個(gè)分區(qū)表表,根據(jù)據(jù)學(xué)號(hào)將將學(xué)生信信息均勻勻分布到到ORCLTBS1和ORCLTBS2兩個(gè)表空空間中。。CREATETABLEstudent_hash(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10))PARTITIONBYHASH(sno)(PARTITIONp1TABLESPACEORCLTBS1,PARTITIONp2TABLESPACEORCLTBS2);CREATETABLEstudent_hash2(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10))PARTITIONBYHASH(sno)PARTITIONS2STOREIN(ORCLTBS1,ORCLTBS2);(4)復(fù)合分分區(qū)復(fù)合分區(qū)區(qū)包括::范圍-列表復(fù)合合分區(qū)范圍-散列復(fù)合合分區(qū)。。創(chuàng)建復(fù)合合分區(qū)時(shí)時(shí)需要指指定分區(qū)方法法(PARTITIONBYRANGE)分區(qū)列子分區(qū)方方法(SUBPARTITIONBYHASH,SUBPARTITIONBYLIST)子分區(qū)列列每個(gè)分區(qū)區(qū)中子分分區(qū)數(shù)量量或子分分區(qū)的描描述。范圍-列表復(fù)合合分區(qū)范圍-列表復(fù)合合分區(qū)先先對(duì)表進(jìn)進(jìn)行范圍圍分區(qū),,然后再再對(duì)每個(gè)個(gè)分區(qū)進(jìn)進(jìn)行列表表分區(qū),,即在一一個(gè)范圍圍分區(qū)中中創(chuàng)建多多個(gè)列表表子分區(qū)區(qū)。范圍-列表復(fù)合合分區(qū)示示例創(chuàng)建一個(gè)個(gè)范圍-列表復(fù)合合分區(qū)表表,將1980年1月1日前出生生的男、、女學(xué)生生信息分分別保存存在ORCLTBS1和ORCLTBS2表空間中中,1980年1月1日到1990年1月1日出生的的男、女女學(xué)生信信息分別別保存在在ORCLTBS3和ORCLTBS4表空間中中,其他他學(xué)生信信息保存存在ORCLTBS5表空間中中。CREATETABLEstudent_range_list(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sexCHAR(2)CHECK(sexIN('M','F')),sageNUMBER(4),birthdayDATE)PARTITIONBYRANGE(birthday)SUBPARTITIONBYLIST(sex)(PARTITIONp1VALUESLESSTHAN(TO_DATE('1980-1-1','YYYY-MM-DD'))(SUBPARTITIONp1_sub1VALUES('M')TABLESPACEORCLTBS1,SUBPARTITIONp1_sub2VALUES('F')TABLESPACEORCLTBS2),PARTITIONp2VALUESLESSTHAN(TO_DATE('1990-1-1','YYYY-MM-DD'))(SUBPARTITIONp2_sub1VALUES('M')TABLESPACEORCLTBS3,SUBPARTITIONp2_sub2VALUES('F')TABLESPACEORCLTBS4),PARTITIONp3VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS5);范圍-散列復(fù)合合分區(qū)范圍-散列復(fù)合合分區(qū)先先對(duì)表進(jìn)進(jìn)行范圍圍分區(qū),,然后再再對(duì)每個(gè)個(gè)分區(qū)進(jìn)進(jìn)行散列列分區(qū),,即在一一個(gè)范圍圍分區(qū)中中創(chuàng)建多多個(gè)散列列子分區(qū)區(qū)。示例創(chuàng)建一個(gè)個(gè)范圍-散列復(fù)合合分區(qū)表表,將1980年1月1日前出生生的學(xué)生生信息均均勻地保保存在ORCLTBS1和ORCLTBS2表空間中中,1980年1月1日到1990年1月1日出生的的學(xué)生信信息保存存在ORCLTBS3和ORCLTBS4表空間中中,其他他學(xué)生信信息保存存在ORCLTBS5表空間中中。CREATETABLEstudent_range_hash(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sageNUMBER(4),birthdayDATE)PARTITIONBYRANGE(birthday)SUBPARTITIONBYHASH(sage)(PARTITIONp1VALUESLESSTHAN(TO_DATE('1980-1-1','YYYY-MM-DD'))(SUBPARTITIONp1_sub1TABLESPACEORCLTBS1,SUBPARTITIONp1_sub2TABLESPACEORCLTBS2),PARTITIONp2VALUESLESSTHAN(TO_DATE("1990-1-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論