Oracle模式對象基礎(chǔ)教案_第1頁
Oracle模式對象基礎(chǔ)教案_第2頁
Oracle模式對象基礎(chǔ)教案_第3頁
Oracle模式對象基礎(chǔ)教案_第4頁
Oracle模式對象基礎(chǔ)教案_第5頁
已閱讀5頁,還剩176頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論