淺談Oracle數(shù)據(jù)庫的建模與設(shè)計
更新時間:2007年03月07日 00:00:00 作者:
正在看的ORACLE教程是:淺談Oracle數(shù)據(jù)庫的建模與設(shè)計。要開發(fā)一個基于數(shù)據(jù)庫的應(yīng)用系統(tǒng),其中最關(guān)鍵的一步就是整個系統(tǒng)所依據(jù)的數(shù)據(jù)庫的建模設(shè)計,從邏輯的到物理的,一個環(huán)節(jié)疏于設(shè)計,整個的應(yīng)用系統(tǒng)便似建立在危房之上,隨著開發(fā)過程的不斷深入,它要隨時面臨著各種難
以預(yù)料的風(fēng)險,開發(fā)者要為修改或重新設(shè)計沒有設(shè)計好的數(shù)據(jù)庫系統(tǒng)而付出難以預(yù)料的代價。所以,一個良好的數(shù)據(jù)庫設(shè)計是高效率的系統(tǒng)所必須的。
一、邏輯建模
數(shù)據(jù)庫設(shè)計的方法因具體數(shù)據(jù)庫而異,但是建模階段的相同的,所以可以用一些通用的工具來進行,如Rational rose,PowerDesigner等,這一階段主要是依據(jù)系統(tǒng)的需求,獲取與分析要實現(xiàn)的應(yīng)用系統(tǒng)信息,進行數(shù)據(jù)內(nèi)部以及外在關(guān)系的分析,從而有效地建立整個系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(在關(guān)系數(shù)據(jù)庫中通常稱為表結(jié)構(gòu)),在此基礎(chǔ)上對數(shù)據(jù)庫的數(shù)據(jù)量、數(shù)據(jù)流量、及響應(yīng)速度的估算分析,這樣數(shù)據(jù)模型就產(chǎn)生了。具體的操作準則是數(shù)據(jù)庫的幾個范式、用戶的具體需求和分析者的經(jīng)驗,從數(shù)據(jù)庫的性能、安全、方便管理、易于開發(fā)等方面出發(fā),具體方法因分析員的喜好和習(xí)慣而異,可以不用工具,最好使用工具,能讓分析過程簡便,最主要是能生成一些圖,如E-R圖,讓分析過程一目了然。
二、物理設(shè)計
此步設(shè)計和系統(tǒng)將具體使用的數(shù)據(jù)庫有關(guān),也和數(shù)據(jù)庫所運行的硬、軟件平臺有關(guān),目的是盡量合理地給數(shù)據(jù)庫分配物理空間,這一步在數(shù)據(jù)庫設(shè)計中很重要,關(guān)系到數(shù)據(jù)庫數(shù)據(jù)的安全和數(shù)據(jù)庫的性能,具體的來說,這一步包括相應(yīng)表空間的數(shù)據(jù)文件在磁盤上的分配,還要根據(jù)數(shù)據(jù)量的大小確定redolog文件、rollback段的大小,然后進行分配,這些文件的分配要遵循一些原則,本著利于備份,利于性能優(yōu)化的原則,原則如下(以O(shè)RACLE數(shù)據(jù)庫為例):
1、為表和索引建立不同的表空間,禁止在系統(tǒng)表空間中放入非核心oracle系統(tǒng)成分的對象,確保數(shù)據(jù)表空間和索引表空間位于不同的磁盤磁盤驅(qū)動器上。
2、了解終端用戶怎樣訪問數(shù)據(jù),如果可能,將經(jīng)常同時查詢和頻繁查詢的對象放在不同的物理磁盤上。
3、當(dāng)數(shù)據(jù)庫包含允許用戶并行訪問不同數(shù)據(jù)元素的大對象時,將對象分割存放在多個磁盤上是有好處的??梢圆捎梅謪^(qū)。在某個操作系統(tǒng)平臺上定義擁有數(shù)百萬行的表時,則更需小心,因為數(shù)據(jù)庫文件的大小受到限止,這種限制是由操作系統(tǒng)而不是由oracle引起的。
4、在獨立的各盤上至少創(chuàng)建兩個用戶定義的rollback表空間,以存放用戶自己的rollback段。在初始化文件中安排rollback段的次序,使它們在多個磁盤之間進行切換。
5、將redo log文件放在一個讀寫較少的盤上。對于每個oracle 實例要建立兩個以上的redo log 組,同組的兩個成員放在不同的設(shè)備上。
6、確立表和索引的大小,這決定了保存它們所需的表空間的尺寸,也決定了哪些表空間物理地裝在哪些盤上和哪些表空間可以結(jié)合在一起。具體的估算方法可以按照oracle 一些公式,這里還要按照各個表的具體特性,用途,定義它的存貯參數(shù)如(pctfree,pctused)。
三、關(guān)于數(shù)據(jù)庫參數(shù)的設(shè)計
每個數(shù)據(jù)庫在建立時,都有缺省的參數(shù)設(shè)置,但是對于具體的應(yīng)用要求參數(shù)設(shè)置可能不同,缺省的參數(shù)設(shè)置往往需要根據(jù)應(yīng)用系統(tǒng)的特點而需要改動,如每個數(shù)據(jù)庫的操作系統(tǒng)平臺、instance 數(shù)目、各種內(nèi)存大小的設(shè)置、采取的線程方式、備份方式等不同,具體的參數(shù)就一定要進行最為恰當(dāng)?shù)男薷?,這個步驟對數(shù)據(jù)庫性能很重要,也是保證應(yīng)用系統(tǒng)所要求的數(shù)據(jù)庫功能得以實現(xiàn)重要一步。
四、與開發(fā)軟件的接口問題
數(shù)據(jù)庫設(shè)計最后要考慮的是與要選擇的開發(fā)軟件之間的接口問題,要準備好接口程序,有些是第三方軟件已經(jīng)備好的,有些是數(shù)據(jù)庫本身要具備的,如jdbc,bde,ado,等與數(shù)據(jù)庫的接口,主要是考慮接口的可用性、效率問題。這一步主要從經(jīng)驗出發(fā),因為這種產(chǎn)品不斷出臺,而且都是經(jīng)過各商家的吹捧,要在實踐中決定哪個是最適合。
以上是數(shù)據(jù)庫建模設(shè)計的幾個重要步驟的大致分析,整個設(shè)計過程是不斷地改進的,是數(shù)據(jù)庫管理員、設(shè)計人員、開發(fā)人員共同完成的,只是各有側(cè)重點不同,數(shù)據(jù)庫管理員側(cè)重于是2、3步的設(shè)計,設(shè)計人員側(cè)重于1步的設(shè)計,而開發(fā)人員側(cè)重于4步的設(shè)計,由于有些應(yīng)用系統(tǒng)的編程環(huán)境和實際應(yīng)用環(huán)境不同,所以要做兩套設(shè)計,并注意兩套設(shè)計的兼容性可移植性。
下面結(jié)合一個實際開發(fā)的勞資管理系統(tǒng)中的數(shù)據(jù)庫設(shè)計,對以上幾個步驟做進一步解釋。
該系統(tǒng)應(yīng)用于大型企業(yè)集團,包括幾十個分廠,基本數(shù)據(jù)均來源于各分廠,各分廠有一套access數(shù)據(jù)庫,存貯著自己的人才檔案信息,由各廠自己維護,定期傳到總的數(shù)據(jù)庫里,供勞資處各室查詢、統(tǒng)計用,。這是一個分部式的數(shù)據(jù)庫。
一、邏輯建模
首先是對數(shù)據(jù)庫的數(shù)據(jù)量、數(shù)據(jù)流量、及響應(yīng)速度的估算分析,這一步對物理設(shè)計也是必須的,勞資系統(tǒng)的主要數(shù)據(jù)是人員檔案,大概有100兆左右,還有人員配備等信息加上工種序列、工資等級、廠礦車間等各種編碼,總的數(shù)據(jù)量大約在某些方面300兆左右。數(shù)據(jù)的輸入、維護大部分在各廠礦進行,然后到處里集中,所以數(shù)據(jù)流量很大,對響應(yīng)速度要求一般。
在邏輯建模上的工具上,采用Rantional rose 2000,根據(jù)用戶的需求,設(shè)計各種use case view, 在 logic view中生成數(shù)據(jù)庫的實體,及實體之間的E-R圖,然后生成Data modeler,確定以后,用Schema generation在建好的數(shù)據(jù)庫中的對應(yīng)的用戶下生成表。
詳細的圖很繁瑣,在這里就不展示了。
二、物理設(shè)計
1、因為職工檔案信息庫很大,還有照片,所以把它分成兩個表,把照片單獨地放在一個表中,并且采用分區(qū)技術(shù),在檔案表、照片表上建立分區(qū),不同的分區(qū)分別放在不同的表空間。
2、因為職工檔案信息庫里有許多編碼,查詢的時候要和編碼庫一起進行read操作,所以不把職工檔案信息表和編碼庫放在一個表空間。
3、建立二個rollback 表空間,十個rollback段,分區(qū)放在二個表空間里,建立一個比較大的rollback段,因為職工檔案信息表經(jīng)常會有批量的修改與添加。
4、將redo log文件放在一個讀寫較少的盤上。建立三個redo log 組,同組的兩個成員放在兩個盤上。因為選用的是ARCHIVELOG的備份方式。
5、根據(jù)每個表的性質(zhì),確定其存貯的參數(shù),如職工檔案信息表的修改、刪除、插入都比較多,所以把它的Pctfree 10,Pctused 80定大小,估算出它大致需要的block數(shù),算出存放這些表的表空間的數(shù)據(jù)文件的大小。
6、根據(jù)用戶的需求,建立一套數(shù)據(jù)庫的安全體系。也就是總結(jié)出幾種權(quán)限級別的用戶,建立這些用戶,并給這些用戶賦上相應(yīng)的僅限,供開發(fā)人員編程時使用。
三、參數(shù)的設(shè)置
缺省的初始化參數(shù)文件中,選擇large。因為用戶數(shù)很多,100個左右。
SHARED_POOL_SIZE, 與數(shù)據(jù)庫大小有關(guān),也與應(yīng)用軟件有關(guān)。這里設(shè)成缺省值的1.5倍。
DB_BLOCK_BUFFERS 根據(jù)所用服務(wù)器的內(nèi)存與交易數(shù)的大小,設(shè)為25兆。
SORT_AREA_SIZE 根據(jù)所用服務(wù)器的內(nèi)存,設(shè)為10兆
LOG_BUFFER 用缺省值的1.5倍。
DBWR_IO_SLAVES 設(shè)為1
ROLLBACK_SEGMENTS 根據(jù)交易量的大小,定為10個。分別放在兩個磁盤上。
PROCESS 80
MTS_SERVERS 3
MTS_DISPATCHERS tcp,3
ARCHIVE_LOG_START TRUE 采用ARCHIVE方式備份。
這些參數(shù)的確定是暫時的,沒有一個系統(tǒng)可以運行之前把參數(shù)確定得正好,需要在應(yīng)用程序運行之后進行調(diào)整。
四、與開正在看的ORACLE教程是:淺談Oracle數(shù)據(jù)庫的建模與設(shè)計。發(fā)軟件的接口問題
因為我們這個系統(tǒng)的開發(fā)軟件用的是Borland c++builder 5,所以采用的是比較成熟的BDE的接口,它是Borland公司提供的,性能比較好。
以上是根據(jù)多年數(shù)據(jù)庫管理、開發(fā)的實踐總結(jié)而出的數(shù)據(jù)庫建模與設(shè)計的大致思路,希望能對大家有所幫助。
以預(yù)料的風(fēng)險,開發(fā)者要為修改或重新設(shè)計沒有設(shè)計好的數(shù)據(jù)庫系統(tǒng)而付出難以預(yù)料的代價。所以,一個良好的數(shù)據(jù)庫設(shè)計是高效率的系統(tǒng)所必須的。
一、邏輯建模
數(shù)據(jù)庫設(shè)計的方法因具體數(shù)據(jù)庫而異,但是建模階段的相同的,所以可以用一些通用的工具來進行,如Rational rose,PowerDesigner等,這一階段主要是依據(jù)系統(tǒng)的需求,獲取與分析要實現(xiàn)的應(yīng)用系統(tǒng)信息,進行數(shù)據(jù)內(nèi)部以及外在關(guān)系的分析,從而有效地建立整個系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(在關(guān)系數(shù)據(jù)庫中通常稱為表結(jié)構(gòu)),在此基礎(chǔ)上對數(shù)據(jù)庫的數(shù)據(jù)量、數(shù)據(jù)流量、及響應(yīng)速度的估算分析,這樣數(shù)據(jù)模型就產(chǎn)生了。具體的操作準則是數(shù)據(jù)庫的幾個范式、用戶的具體需求和分析者的經(jīng)驗,從數(shù)據(jù)庫的性能、安全、方便管理、易于開發(fā)等方面出發(fā),具體方法因分析員的喜好和習(xí)慣而異,可以不用工具,最好使用工具,能讓分析過程簡便,最主要是能生成一些圖,如E-R圖,讓分析過程一目了然。
二、物理設(shè)計
此步設(shè)計和系統(tǒng)將具體使用的數(shù)據(jù)庫有關(guān),也和數(shù)據(jù)庫所運行的硬、軟件平臺有關(guān),目的是盡量合理地給數(shù)據(jù)庫分配物理空間,這一步在數(shù)據(jù)庫設(shè)計中很重要,關(guān)系到數(shù)據(jù)庫數(shù)據(jù)的安全和數(shù)據(jù)庫的性能,具體的來說,這一步包括相應(yīng)表空間的數(shù)據(jù)文件在磁盤上的分配,還要根據(jù)數(shù)據(jù)量的大小確定redolog文件、rollback段的大小,然后進行分配,這些文件的分配要遵循一些原則,本著利于備份,利于性能優(yōu)化的原則,原則如下(以O(shè)RACLE數(shù)據(jù)庫為例):
1、為表和索引建立不同的表空間,禁止在系統(tǒng)表空間中放入非核心oracle系統(tǒng)成分的對象,確保數(shù)據(jù)表空間和索引表空間位于不同的磁盤磁盤驅(qū)動器上。
2、了解終端用戶怎樣訪問數(shù)據(jù),如果可能,將經(jīng)常同時查詢和頻繁查詢的對象放在不同的物理磁盤上。
3、當(dāng)數(shù)據(jù)庫包含允許用戶并行訪問不同數(shù)據(jù)元素的大對象時,將對象分割存放在多個磁盤上是有好處的??梢圆捎梅謪^(qū)。在某個操作系統(tǒng)平臺上定義擁有數(shù)百萬行的表時,則更需小心,因為數(shù)據(jù)庫文件的大小受到限止,這種限制是由操作系統(tǒng)而不是由oracle引起的。
4、在獨立的各盤上至少創(chuàng)建兩個用戶定義的rollback表空間,以存放用戶自己的rollback段。在初始化文件中安排rollback段的次序,使它們在多個磁盤之間進行切換。
5、將redo log文件放在一個讀寫較少的盤上。對于每個oracle 實例要建立兩個以上的redo log 組,同組的兩個成員放在不同的設(shè)備上。
6、確立表和索引的大小,這決定了保存它們所需的表空間的尺寸,也決定了哪些表空間物理地裝在哪些盤上和哪些表空間可以結(jié)合在一起。具體的估算方法可以按照oracle 一些公式,這里還要按照各個表的具體特性,用途,定義它的存貯參數(shù)如(pctfree,pctused)。
三、關(guān)于數(shù)據(jù)庫參數(shù)的設(shè)計
每個數(shù)據(jù)庫在建立時,都有缺省的參數(shù)設(shè)置,但是對于具體的應(yīng)用要求參數(shù)設(shè)置可能不同,缺省的參數(shù)設(shè)置往往需要根據(jù)應(yīng)用系統(tǒng)的特點而需要改動,如每個數(shù)據(jù)庫的操作系統(tǒng)平臺、instance 數(shù)目、各種內(nèi)存大小的設(shè)置、采取的線程方式、備份方式等不同,具體的參數(shù)就一定要進行最為恰當(dāng)?shù)男薷?,這個步驟對數(shù)據(jù)庫性能很重要,也是保證應(yīng)用系統(tǒng)所要求的數(shù)據(jù)庫功能得以實現(xiàn)重要一步。
四、與開發(fā)軟件的接口問題
數(shù)據(jù)庫設(shè)計最后要考慮的是與要選擇的開發(fā)軟件之間的接口問題,要準備好接口程序,有些是第三方軟件已經(jīng)備好的,有些是數(shù)據(jù)庫本身要具備的,如jdbc,bde,ado,等與數(shù)據(jù)庫的接口,主要是考慮接口的可用性、效率問題。這一步主要從經(jīng)驗出發(fā),因為這種產(chǎn)品不斷出臺,而且都是經(jīng)過各商家的吹捧,要在實踐中決定哪個是最適合。
以上是數(shù)據(jù)庫建模設(shè)計的幾個重要步驟的大致分析,整個設(shè)計過程是不斷地改進的,是數(shù)據(jù)庫管理員、設(shè)計人員、開發(fā)人員共同完成的,只是各有側(cè)重點不同,數(shù)據(jù)庫管理員側(cè)重于是2、3步的設(shè)計,設(shè)計人員側(cè)重于1步的設(shè)計,而開發(fā)人員側(cè)重于4步的設(shè)計,由于有些應(yīng)用系統(tǒng)的編程環(huán)境和實際應(yīng)用環(huán)境不同,所以要做兩套設(shè)計,并注意兩套設(shè)計的兼容性可移植性。
下面結(jié)合一個實際開發(fā)的勞資管理系統(tǒng)中的數(shù)據(jù)庫設(shè)計,對以上幾個步驟做進一步解釋。
該系統(tǒng)應(yīng)用于大型企業(yè)集團,包括幾十個分廠,基本數(shù)據(jù)均來源于各分廠,各分廠有一套access數(shù)據(jù)庫,存貯著自己的人才檔案信息,由各廠自己維護,定期傳到總的數(shù)據(jù)庫里,供勞資處各室查詢、統(tǒng)計用,。這是一個分部式的數(shù)據(jù)庫。
一、邏輯建模
首先是對數(shù)據(jù)庫的數(shù)據(jù)量、數(shù)據(jù)流量、及響應(yīng)速度的估算分析,這一步對物理設(shè)計也是必須的,勞資系統(tǒng)的主要數(shù)據(jù)是人員檔案,大概有100兆左右,還有人員配備等信息加上工種序列、工資等級、廠礦車間等各種編碼,總的數(shù)據(jù)量大約在某些方面300兆左右。數(shù)據(jù)的輸入、維護大部分在各廠礦進行,然后到處里集中,所以數(shù)據(jù)流量很大,對響應(yīng)速度要求一般。
在邏輯建模上的工具上,采用Rantional rose 2000,根據(jù)用戶的需求,設(shè)計各種use case view, 在 logic view中生成數(shù)據(jù)庫的實體,及實體之間的E-R圖,然后生成Data modeler,確定以后,用Schema generation在建好的數(shù)據(jù)庫中的對應(yīng)的用戶下生成表。
詳細的圖很繁瑣,在這里就不展示了。
二、物理設(shè)計
1、因為職工檔案信息庫很大,還有照片,所以把它分成兩個表,把照片單獨地放在一個表中,并且采用分區(qū)技術(shù),在檔案表、照片表上建立分區(qū),不同的分區(qū)分別放在不同的表空間。
2、因為職工檔案信息庫里有許多編碼,查詢的時候要和編碼庫一起進行read操作,所以不把職工檔案信息表和編碼庫放在一個表空間。
3、建立二個rollback 表空間,十個rollback段,分區(qū)放在二個表空間里,建立一個比較大的rollback段,因為職工檔案信息表經(jīng)常會有批量的修改與添加。
4、將redo log文件放在一個讀寫較少的盤上。建立三個redo log 組,同組的兩個成員放在兩個盤上。因為選用的是ARCHIVELOG的備份方式。
5、根據(jù)每個表的性質(zhì),確定其存貯的參數(shù),如職工檔案信息表的修改、刪除、插入都比較多,所以把它的Pctfree 10,Pctused 80定大小,估算出它大致需要的block數(shù),算出存放這些表的表空間的數(shù)據(jù)文件的大小。
6、根據(jù)用戶的需求,建立一套數(shù)據(jù)庫的安全體系。也就是總結(jié)出幾種權(quán)限級別的用戶,建立這些用戶,并給這些用戶賦上相應(yīng)的僅限,供開發(fā)人員編程時使用。
三、參數(shù)的設(shè)置
缺省的初始化參數(shù)文件中,選擇large。因為用戶數(shù)很多,100個左右。
SHARED_POOL_SIZE, 與數(shù)據(jù)庫大小有關(guān),也與應(yīng)用軟件有關(guān)。這里設(shè)成缺省值的1.5倍。
DB_BLOCK_BUFFERS 根據(jù)所用服務(wù)器的內(nèi)存與交易數(shù)的大小,設(shè)為25兆。
SORT_AREA_SIZE 根據(jù)所用服務(wù)器的內(nèi)存,設(shè)為10兆
LOG_BUFFER 用缺省值的1.5倍。
DBWR_IO_SLAVES 設(shè)為1
ROLLBACK_SEGMENTS 根據(jù)交易量的大小,定為10個。分別放在兩個磁盤上。
PROCESS 80
MTS_SERVERS 3
MTS_DISPATCHERS tcp,3
ARCHIVE_LOG_START TRUE 采用ARCHIVE方式備份。
這些參數(shù)的確定是暫時的,沒有一個系統(tǒng)可以運行之前把參數(shù)確定得正好,需要在應(yīng)用程序運行之后進行調(diào)整。
四、與開正在看的ORACLE教程是:淺談Oracle數(shù)據(jù)庫的建模與設(shè)計。發(fā)軟件的接口問題
因為我們這個系統(tǒng)的開發(fā)軟件用的是Borland c++builder 5,所以采用的是比較成熟的BDE的接口,它是Borland公司提供的,性能比較好。
以上是根據(jù)多年數(shù)據(jù)庫管理、開發(fā)的實踐總結(jié)而出的數(shù)據(jù)庫建模與設(shè)計的大致思路,希望能對大家有所幫助。
相關(guān)文章
oracle下一條SQL語句的優(yōu)化過程(比較詳細)
很簡單的一次調(diào)整,語句加了適當(dāng)?shù)乃饕笮阅芫陀写蠓奶嵘?。?dāng)時看到這條語句的時候,第一感覺就是執(zhí)行效率肯定低下。語句的功能是求某一客戶當(dāng)天產(chǎn)品的總銷量。2010-04-04刪除EM,強制結(jié)束EM進程后,啟動數(shù)據(jù)庫ORA-00119,ORA-00132報錯的解決方法
通過emca -deconfig dbcontrol db -repos drop命令刪除EM資料庫時,很長時間沒有刪除完成,期間數(shù)據(jù)庫連接數(shù)暴漲,達到數(shù)據(jù)庫最大連接數(shù),結(jié)果前臺及后臺均連接不上數(shù)據(jù)庫。強制殺死EM及應(yīng)用相關(guān)進程,關(guān)閉數(shù)據(jù)庫后,重啟數(shù)據(jù)庫時報:ORA-00119,ORA-00132錯誤2015-12-12oracle中fdisk導(dǎo)致的ASM磁盤數(shù)據(jù)丟失的解決方法
oracle中fdisk 導(dǎo)致的ASM磁盤數(shù)據(jù)丟失 有需要的朋友可參考一下2012-10-10linux oracle數(shù)據(jù)庫刪除操作指南
本文將詳細介紹Linux操作系統(tǒng)下完全刪除Oracle數(shù)據(jù)庫的操作方法,需要的朋友可以參考下2012-11-11