国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle9i 數(shù)據(jù)庫(kù)設(shè)計(jì)指引全集

2024-08-29 13:47:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
數(shù)據(jù)庫(kù)物理設(shè)計(jì)原則

1.1 數(shù)據(jù)庫(kù)環(huán)境配置原則

1.1.1 操作系統(tǒng)環(huán)境:

對(duì)于中小型數(shù)據(jù)庫(kù)系統(tǒng),采用linux操作系統(tǒng)比較合適,對(duì)于數(shù)據(jù)庫(kù)冗余要求負(fù)載均衡能力要求較高的系統(tǒng),可以采用Oracle9i RAC的集群數(shù)據(jù)庫(kù)的方法,集群節(jié)點(diǎn)數(shù)范圍在2—64個(gè)。對(duì)于大型數(shù)據(jù)庫(kù)系統(tǒng),可以采用Sun Solaris SPARC 64位小型機(jī)系統(tǒng)或HP 9000 系列小型機(jī)系統(tǒng)。RAD5 適合只讀操作的數(shù)據(jù)庫(kù),RAD1 適合OLTP數(shù)據(jù)庫(kù)

1.1.2 內(nèi)存要求

對(duì)于linux操作系統(tǒng)下的數(shù)據(jù)庫(kù),由于在正常情況下Oracle對(duì)SGA的治理能力不超過(guò)1.7G。所以總的物理內(nèi)存在4G以下。SGA的大小為物理內(nèi)存的50%—75%。對(duì)于64位的小型系統(tǒng),Oracle數(shù)據(jù)庫(kù)對(duì)SGA的治理超過(guò)2G的限制,SGA設(shè)計(jì)在一個(gè)合適的范圍內(nèi):物理內(nèi)存的50%—70%,當(dāng)SGA過(guò)大的時(shí)候會(huì)導(dǎo)致內(nèi)存分頁(yè),影響系統(tǒng)性能。

1.1.3 交換區(qū)設(shè)計(jì)

當(dāng)物理內(nèi)存在2G以下的情況下,交換分區(qū)swap為物理內(nèi)存的3倍,當(dāng)物理內(nèi)存>2G的情況下,swap大小為物理內(nèi)存的1—2倍。

1.1.4 其他環(huán)境變量參考Oracle相關(guān)的安裝文檔和隨機(jī)文檔。

1.2 數(shù)據(jù)庫(kù)設(shè)計(jì)原則

1.2.1 數(shù)據(jù)庫(kù)SID

數(shù)據(jù)庫(kù)SID是唯一標(biāo)志數(shù)據(jù)庫(kù)的符號(hào),命名長(zhǎng)度不能超過(guò)5個(gè)字符。對(duì)于單節(jié)點(diǎn)數(shù)據(jù)庫(kù),以字符開(kāi)頭的5個(gè)長(zhǎng)度以?xún)?nèi)字串作為SID的命名。對(duì)于集群數(shù)據(jù)庫(kù),當(dāng)命名SID后,各節(jié)點(diǎn)SID自動(dòng)命名為SIDnn,其中nn為節(jié)點(diǎn)號(hào):1,2,…,64。例如rac1、rac2、rac24。

1.2.2 數(shù)據(jù)庫(kù)全局名



數(shù)據(jù)庫(kù)全局名稱(chēng):

<sid>.domain


1.2.3 數(shù)據(jù)庫(kù)類(lèi)型選擇

對(duì)于海量數(shù)據(jù)庫(kù)系統(tǒng),采用data warehouse的類(lèi)型。對(duì)于小型數(shù)據(jù)庫(kù)或OLTP類(lèi)型的數(shù)據(jù)庫(kù),采用Transaction PRocessing類(lèi)型。



1.2.4 數(shù)據(jù)庫(kù)連接類(lèi)型選擇

Oracle數(shù)據(jù)庫(kù)有專(zhuān)用服務(wù)器連接類(lèi)型和多線(xiàn)程服務(wù)器MTS連接類(lèi)型。對(duì)于批處理服務(wù),需要專(zhuān)用服務(wù)器連接方式,而對(duì)于OLTP服務(wù)則MTS的連接方式比較合適。由于采用MTS后,可以通過(guò)配置網(wǎng)絡(luò)服務(wù)實(shí)現(xiàn)某些特定批處理服務(wù)采用專(zhuān)用服務(wù)器連接方式,所以數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)一般采用MTS類(lèi)型。



1.2.5 數(shù)據(jù)庫(kù)SGA配置

數(shù)據(jù)庫(kù)SGA可以采用手工配置或按物理內(nèi)存比例配置,在數(shù)據(jù)庫(kù)初始設(shè)計(jì)階段采用按比例配置方式,在實(shí)際應(yīng)用中按系統(tǒng)調(diào)優(yōu)方式修改SGA。



1.2.6 數(shù)據(jù)庫(kù)字符集選擇

為了使數(shù)據(jù)庫(kù)能夠正確支持多國(guó)語(yǔ)言,必須配置合適的數(shù)據(jù)庫(kù)字符集,采用UTF8字符集。



注重:假如沒(méi)有大對(duì)象,在使用過(guò)程中進(jìn)行語(yǔ)言轉(zhuǎn)換沒(méi)有什么影響,具體過(guò)程如下(切記設(shè)定的字符集必須是ORACLE支持,不然不能start)

SQL> shutdown immediate;SQL> startup mount;SQL> alter system enable restricted session;SQL> alter system set job_queue_processes=0;SQL> alter database open;SQL> alter database character set internal_use we8iso8859p1;SQL> shutdown immediate;SQL> startup


1.2.7 數(shù)據(jù)庫(kù)其他參數(shù)配置

1.2.7.1 DB_FILES

Db_files是數(shù)據(jù)庫(kù)能夠同時(shí)打開(kāi)的文件數(shù)量,默認(rèn)值是200個(gè)。當(dāng)數(shù)據(jù)庫(kù)規(guī)劃時(shí)文件數(shù)量FILES接近或超過(guò)200個(gè)時(shí)候,按以下估計(jì)值配置:

DB_FILES = FILES * 1.5



1.2.7.2 Db_block_size

一個(gè)extent要是5個(gè)blocks的倍數(shù)為好,如:一個(gè)blocks是4096字節(jié),那一個(gè)extent就是2M、4M或8M為好。Db_block_size是數(shù)據(jù)庫(kù)最小物理單元,一旦數(shù)據(jù)庫(kù)創(chuàng)建完成,該參數(shù)無(wú)法修改,db_block_size按以下規(guī)則調(diào)整:

數(shù)據(jù)倉(cāng)庫(kù)類(lèi)型: db_block_size盡可能大,采用8192 或 16384

OLTP類(lèi)型: db_block_size 用比較小的取值范圍: 2048 或 4096

Blocks推薦是系統(tǒng)操作的塊倍數(shù)(裸設(shè)備塊大小是512字節(jié),NTFS是 4K,使用8K的方式在大部分系統(tǒng)上通用)。 1.2.8 數(shù)據(jù)庫(kù)控制文件配置

1.2.8.1 控制文件鏡象

多個(gè)控制文件存放在不同的物理位置。

1.2.8.2 控制文件配置

控制文件中參數(shù)設(shè)置,最大的數(shù)據(jù)文件數(shù)量不能小于數(shù)據(jù)庫(kù)參數(shù)db_files。

1.2.9 數(shù)據(jù)庫(kù)日志文件配置

1.2.9.1 日志文件大小

日志文件的大小由數(shù)據(jù)庫(kù)事務(wù)處理量決定,在設(shè)計(jì)過(guò)程中,確保每20分鐘切換一個(gè)日志文件。所以對(duì)于批處理系統(tǒng),日志文件大小為幾百M(fèi) 到幾G的大小。對(duì)于OLTP系統(tǒng),日志文件大小為幾百M(fèi)以?xún)?nèi)。

1.2.9.2 日志文件組數(shù)量

對(duì)于批處理系統(tǒng),日志文件組為5—10組;對(duì)于OLTP系統(tǒng),日志文件組為 3—5組,每組日志大小保持一致;對(duì)于集群數(shù)據(jù)庫(kù)系統(tǒng),每節(jié)點(diǎn)有各自獨(dú)立的日志組。

1.2.9.3 日志成員數(shù)量

為了確保日志能夠鏡象作用,每日志組的成員為2個(gè)。

1.2.10 數(shù)據(jù)庫(kù)回滾段配置

在Oracle9i數(shù)據(jù)庫(kù)中,設(shè)計(jì)Undo表空間取代以前版本的回滾段表空間。

Undo 表空間大小的設(shè)計(jì)規(guī)范由以下公式計(jì)算:

Undospace = UR * UPS *db_block_size+ 冗余量

UR: 表示在undo中保持的最長(zhǎng)時(shí)間數(shù)(秒),由數(shù)據(jù)庫(kù)參數(shù)UNDO_RETENTION值決定。

UPS:表示在undo中,每秒產(chǎn)生的數(shù)據(jù)庫(kù)塊數(shù)量。

例如:在數(shù)據(jù)庫(kù)中保留2小時(shí)的回退數(shù)據(jù),假定每小時(shí)產(chǎn)生200個(gè)數(shù)據(jù)庫(kù)塊。則Undospace = 2 * 3600 * 200 * 4K = 5.8G

1.2.11 數(shù)據(jù)庫(kù)臨時(shí)段表空間配置

數(shù)據(jù)庫(kù)臨時(shí)段表空間根據(jù)實(shí)際生產(chǎn)環(huán)境情況調(diào)整其大小,表空間屬性為自動(dòng)擴(kuò)展。

1.2.12 數(shù)據(jù)庫(kù)系統(tǒng)表空間配置

系統(tǒng)表空間大小1G左右,除了存放數(shù)據(jù)庫(kù)數(shù)據(jù)字典的數(shù)據(jù)外,其他數(shù)據(jù)不得存儲(chǔ)在系統(tǒng)表空間。

1.3 數(shù)據(jù)庫(kù)表空間設(shè)計(jì)原則

1.3.1 表空間大小定義原則

當(dāng)表空間 大小小于操作系統(tǒng)對(duì)最大文件限制時(shí),表空間由一個(gè)文件組成。假如表空間大小大于操作系統(tǒng)對(duì)最大文件限制時(shí),該表空間由多個(gè)數(shù)據(jù)文件組成,表空間的總大小為估算為:

Tablespace + sum (數(shù)據(jù)段+索引段)*150%。

1.3.2 表空間擴(kuò)展性設(shè)計(jì)原則
表空間數(shù)據(jù)文件采用自動(dòng)擴(kuò)展的方式,擴(kuò)展容量快大小按2的整數(shù)倍(1M、2M、4M、8M、16M、32M、64M)進(jìn)行擴(kuò)展,創(chuàng)建表空間時(shí)盡量采用nologing選項(xiàng)。表空間的最大限制一般采用unlimited,除非確切知道表空間數(shù)據(jù)文件的最大使用范圍。(一般windows 32位系統(tǒng)的文件最大2G,64位的unix系統(tǒng)系統(tǒng)文件最大128G,但也要注重文件格式設(shè)定的文件大小),建議最大為2G。表空間采用local治理方式,例如:

CREATE TABLESPACE TBS_USERINFODATAFILE '/oradata/tbs_userinfo.dbf' SIZE 8M REUSE AUTOEXTEND ON NEXT 2M MAXSIZE UNLIMITEDNOLOGGINGEXTENT MANAGEMENT LOCAL AUTOALLOCATESEGMENT SPACE MANAGEMENT AUTO;


1.4 裸設(shè)備的使用

一個(gè)scsi設(shè)備可以 14個(gè)分區(qū),unix操作系統(tǒng)256個(gè)分區(qū),性能比文件系統(tǒng)方式高15%左右,空間大于要小于(實(shí)際分區(qū)大小減兩個(gè)ORACLE的數(shù)據(jù)塊),比如100M,大于為100000K,推薦在unix使用軟連接(ln)方式把裸設(shè)備形成文件,用加入表空間時(shí)加resue 選項(xiàng),當(dāng)然也可只接把設(shè)備加入表空間,移動(dòng)裸設(shè)備使用dd命令

對(duì)于windows平臺(tái),oracle提供軟連接工具,實(shí)現(xiàn)裸設(shè)備的使用,計(jì)算一條記錄的長(zhǎng)度

2 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)原則

2.1 命名規(guī)范

2.1.1 表屬性規(guī)范

2.1.1.1 表名

前綴為T(mén)bl_ 。數(shù)據(jù)表名稱(chēng)必須以有特征含義的單詞或縮寫(xiě)組成,中間可以用“_”分割,例如:tbl_pstn_detail。表名稱(chēng)不能用雙引號(hào)包含。

2.1.1.2 表分區(qū)名

前綴為p 。分區(qū)名必須有特定含義的單詞或字串。

例如 :tbl_pstn_detail 的分區(qū)p2004100101表示該分區(qū)存儲(chǔ) 2004100101時(shí)段的數(shù)據(jù)。

2.1.1.3 字段名

字段名稱(chēng)必須用字母開(kāi)頭,采用有特征含義的單詞或縮寫(xiě),不能用雙引號(hào)包含。

2.1.1.4 主鍵名

前綴為PK_。主鍵名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的字段名。假如復(fù)合主鍵的構(gòu)成字段較多,則只包含第一個(gè)字段。表名可以去掉前綴。

2.1.1.5 外鍵名

前綴為FK_。外鍵名稱(chēng)應(yīng)是 前綴+ 外鍵表名 + 主鍵表名 + 外鍵表構(gòu)成的字段名。表名可以去掉前綴。

2.1.2 索引

4.1.2.1 普通索引

前綴為IDX_。索引名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的字段名。假如復(fù)合索引的構(gòu)成字段較多,則只包含第一個(gè)字段,并添加序號(hào)。表名可以去掉前綴。

2.1.2.2 主鍵索引

前綴為IDX_PK_。索引名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的主鍵字段名,在創(chuàng)建表時(shí)候用using index指定主鍵索引屬性。

2.1.2.3 唯一所以

前綴為IDX_UK_。索引名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的字段名。

2.1.2.4 外鍵索引

前綴為IDX_FK_。索引名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的外鍵字段名。

2.1.2.5 函數(shù)索引

前綴為IDX_func_。索引名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的特征表達(dá)字符。

2.1.2.6 蔟索引

前綴為IDX_clu_。索引名稱(chēng)應(yīng)是 前綴+表名+構(gòu)成的簇字段。

2.1.3 視圖

前綴為V_。按業(yè)務(wù)操作命名視圖。

2.1.4 實(shí)體化視圖

前綴為MV_。按業(yè)務(wù)操作命名實(shí)體化視圖。

2.1.5 存儲(chǔ)過(guò)程

前綴為Proc_ 。按業(yè)務(wù)操作命名存儲(chǔ)過(guò)程

2.1.6 觸發(fā)器

前綴為T(mén)rig_ 。觸發(fā)器名應(yīng)是 前綴 + 表名 + 觸發(fā)器名。

2.1.7 函數(shù)

前綴為Func_ 。按業(yè)務(wù)操作命名函數(shù)

2.1.8 數(shù)據(jù)包

前綴為Pkg_ 。按業(yè)務(wù)操作集合命名數(shù)據(jù)包。

2.1.9 序列

前綴為Seq_ 。按業(yè)務(wù)屬性命名。

2.1.10 表空間

2.1.10.1 公用表空間

前綴為T(mén)bs_ 。 根據(jù)存儲(chǔ)的特性命名,例如: tbs_parameter 。

2.1.10.2 專(zhuān)用表空間

Tbs_<表名稱(chēng)>_nn。該表空間專(zhuān)門(mén)存儲(chǔ)指定的某一個(gè)表,或某一表的若干個(gè)分區(qū)的數(shù)據(jù)

2.1.11 數(shù)據(jù)文件

<表空間名>nn.dbf 。nn =1,2,3,4,…等。

2.1.12 普通變量

前綴為Var_ 。 存放字符、數(shù)字、日期型變量。

2.1.13 游標(biāo)變量

前綴為Cur_ 。存放游標(biāo)記錄集。

2.1.14 記錄型變量

前綴為Rec_ 。 存放記錄型數(shù)據(jù)。

2.1.15 表類(lèi)型變量

前綴為T(mén)ab_ 。 存放表類(lèi)型數(shù)據(jù)。

2.1.16 數(shù)據(jù)庫(kù)鏈

前綴為dbl_ 。 表示分布式數(shù)據(jù)庫(kù)外部鏈接關(guān)系。

2.2 命名

2.2.1 語(yǔ)言

命名應(yīng)該使用英文單詞,避免使用拼音,非凡不應(yīng)該使用拼音簡(jiǎn)寫(xiě)。命名不答應(yīng)使用中文或者非凡字符。

英文單詞使用用對(duì)象本身意義相對(duì)或相近的單詞。選擇最簡(jiǎn)單或最通用的單詞。不能使用毫不相干的單詞來(lái)命名

當(dāng)一個(gè)單詞不能表達(dá)對(duì)象含義時(shí),用詞組組合,假如組合太長(zhǎng)時(shí),采用用簡(jiǎn)或縮寫(xiě),縮寫(xiě)要基本能表達(dá)原單詞的意義。

當(dāng)出現(xiàn)對(duì)象名重名時(shí),是不同類(lèi)型對(duì)象時(shí),加類(lèi)型前綴或后綴以示區(qū)別。

2.2.2 大小寫(xiě)

名稱(chēng)一律大寫(xiě),以方便不同數(shù)據(jù)庫(kù)移植,以及避免程序調(diào)用問(wèn)題。

2.2.3 單詞分隔

命名的各單詞之間可以使用下劃線(xiàn)進(jìn)行分隔。

2.2.4 保留字

命名不答應(yīng)使用SQL保留字。

2.2.5 命名長(zhǎng)度

表名、字段名、視圖名長(zhǎng)度應(yīng)限制在20個(gè)字符內(nèi)(含前綴)。

2.2.6 字段名稱(chēng)

同一個(gè)字段名在一個(gè)數(shù)據(jù)庫(kù)中只能代表一個(gè)意思。比如telephone在一個(gè)表中代表“電話(huà)號(hào)碼”的意思,在另外一個(gè)表中就不能代表“手機(jī)號(hào)碼”的意思。

不同的表用于相同內(nèi)容的字段應(yīng)該采用同樣的名稱(chēng),字段類(lèi)型定義。

2.3 數(shù)據(jù)類(lèi)型

2.3.1 字符型

固定長(zhǎng)度的字串類(lèi)型采用char,長(zhǎng)度不固定的字串類(lèi)型采用varchar。避免在長(zhǎng)度不固定的情況下采用char類(lèi)型。假如在數(shù)據(jù)遷移等出現(xiàn)以上情況,則必須使用trim()函數(shù)截去字串后的空格。

2.3.2 數(shù)字型

數(shù)字型字段盡量采用number類(lèi)型。

2.3.3 日期和時(shí)間

2.3.3.1 系統(tǒng)時(shí)間

由數(shù)據(jù)庫(kù)產(chǎn)生的系統(tǒng)時(shí)間首選數(shù)據(jù)庫(kù)的日期型,如DATE類(lèi)型。

2.3.3.2 外部時(shí)間

由數(shù)據(jù)導(dǎo)入或外部應(yīng)用程序產(chǎn)生的日期時(shí)間類(lèi)型采用varchar類(lèi)型,數(shù)據(jù)格式采用:YYYYMMDDHH24MISS。

2.3.3.3 大字段

如無(wú)非凡需要,避免使用大字段(blob,clob,long,text,image等)。

2.3.3.4 唯一鍵

對(duì)于數(shù)字型唯一鍵值,盡可能用系列sequence產(chǎn)生。

2.4 設(shè)計(jì)

2.4.1 范式

如無(wú)性能上的必須原因,應(yīng)該使用關(guān)系數(shù)據(jù)庫(kù)理論,達(dá)到較高的范式,避免數(shù)據(jù)冗余,但是假如在數(shù)據(jù)量上與性能上無(wú)非凡要求,考慮到實(shí)現(xiàn)的方便性可以有適當(dāng)?shù)臄?shù)據(jù)冗余,但基本上要達(dá)到3NF.如非確實(shí)必要,避免一個(gè)字段中存儲(chǔ)多個(gè)標(biāo)志的做法。如11101表示5個(gè)標(biāo)志的一種取值。這往往是增加復(fù)雜度,降低性能的地方。
2.4.2 表設(shè)計(jì)

2.4.2.1 邏輯段設(shè)計(jì)原則

2.4.2.1.1 Tablespace

每個(gè)表在創(chuàng)建時(shí)候,必須指定所在的表空間,不要采用默認(rèn)表空間以防止表建立在系統(tǒng)表空間上導(dǎo)致性能問(wèn)題。對(duì)于事務(wù)比較繁忙的數(shù)據(jù)表,必須存放在該表的專(zhuān)用表空間中。

2.4.2.1.2 Pctused

默認(rèn)pctused導(dǎo)致數(shù)據(jù)庫(kù)物理空間利用率非常低40%左右;對(duì)于update比較少或update不導(dǎo)致行增大的表,pctused可設(shè)置在60—85之間;對(duì)于update能夠?qū)е滦性龃蟮谋恚瑄pdate設(shè)置在40—70之間

2.4.2.1.3 Initrans

對(duì)于需要并行查詢(xún)或者在RAC數(shù)據(jù)庫(kù)中需要并行處理的表,initrans設(shè)置為2的倍數(shù),否則,不設(shè)該值。

2.4.2.1.4 Storage

2.4.2.1.4.1 Initial

盡量減少表數(shù)據(jù)段的extents數(shù)量,initial的大小盡量接近數(shù)據(jù)段的大小64K,128K,… ,1M,2M,4M,8M,16M ,…,等按2的倍數(shù)進(jìn)行圓整。例如表或分區(qū)數(shù)據(jù)段大小為28M,則initial取32M。

2.4.2.1.4.2 Next

表或分區(qū)擴(kuò)展extents的大小,按上述方法進(jìn)行圓整。當(dāng)表或分區(qū)數(shù)據(jù)段無(wú)法按Initial接近值進(jìn)行圓整的情況下,其大小可以按 Initial+Next進(jìn)行圓整。此時(shí),必須設(shè)置Minextents=2。例如:表或分區(qū)數(shù)據(jù)段大小為150M,則Initial=128M;Next=32M,Minextents=2。

2.4.2.1.4.3 Minextents

該參數(shù)表示表創(chuàng)建時(shí)候Extents的初始數(shù)量,一般取1—2。

2.4.2.1.4.4 Pctincrease

表示每個(gè)擴(kuò)展Extents的增長(zhǎng)率,設(shè)置pctincrease=0能夠獲得較好的存儲(chǔ)性能。

2.4.2.2 非凡表設(shè)計(jì)原則

2.4.2.2.1 分區(qū)表

對(duì)于數(shù)據(jù)量比較大的表,根據(jù)表數(shù)據(jù)的屬性進(jìn)行分區(qū),以得到較好的性能。假如表按某些字段進(jìn)行增長(zhǎng),則采用按字段值范圍進(jìn)行范圍分區(qū);假如表按某個(gè)字段的幾個(gè)要害值進(jìn)行分布,則采用列表分區(qū);對(duì)于靜態(tài)表,則采用hash分區(qū)或列表分區(qū);在范圍分區(qū)中,假如數(shù)據(jù)按某要害字段均衡分布,則采用子分區(qū)的復(fù)合分區(qū)方法。

2.4.2.2.2 聚蔟表

假如某幾個(gè)靜態(tài)表關(guān)系比較密切,則可以采用聚蔟表的方法。

2.4.2.3 完整性設(shè)計(jì)原則

2.4.2.3.1 主鍵約束

關(guān)聯(lián)表的父表要求有主健,主健字段或組合字段必須滿(mǎn)足非空屬性和唯一性要求。對(duì)于數(shù)據(jù)量比較大的父表,要求指定索引段。

2.4.2.3.2 外鍵關(guān)聯(lián)

對(duì)于關(guān)聯(lián)兩個(gè)表的字段,一般應(yīng)該分別建立主鍵、外鍵。實(shí)際是否建立外鍵,根據(jù)對(duì)數(shù)據(jù)完整性的要求決定。為了提高性能,對(duì)于數(shù)據(jù)量比較大的標(biāo)要求對(duì)外健建立索引。對(duì)于有要求級(jí)聯(lián)刪除屬性的外鍵,必須指定on delete cascade 。

2.4.2.3.3 NULL值

對(duì)于字段能否null,應(yīng)該在sql建表腳本中明確指明,不應(yīng)使用缺省。由于NULL值在參加任何運(yùn)算中,結(jié)果均為NULL。所以在應(yīng)用程序中必須利用nvl()函數(shù)把可能為NULL值得字段或變量轉(zhuǎn)換為非NULL的默認(rèn)值。例如:NVL(sale,0)。

2.4.2.3.4 Check條件

對(duì)于字段有檢查性約束,要求指定check規(guī)則。

2.4.2.3.5 觸發(fā)器

觸發(fā)器是一種非凡的存儲(chǔ)過(guò)程,通過(guò)數(shù)據(jù)表的DML操作而觸發(fā)執(zhí)行,起作用是為確保數(shù)據(jù)的完整性和一致性不被破壞而創(chuàng)建,實(shí)現(xiàn)數(shù)據(jù)的完整約束。

觸發(fā)器的before或after事務(wù)屬性的選擇時(shí)候,對(duì)表操作的事務(wù)屬性必須與應(yīng)用程序事務(wù)屬性保持一致,以避免死鎖發(fā)生。在大型導(dǎo)入表中,盡量避免使用觸發(fā)器。

2.4.2.4 注釋

表、字段等應(yīng)該有中文名稱(chēng)注釋?zhuān)约靶枰f(shuō)明的內(nèi)容。

2.4.3 索引設(shè)計(jì)

對(duì)于查詢(xún)中需要作為查詢(xún)條件的字段,可以考慮建立索引。最終根據(jù)性能的需要決定是否建立索引。對(duì)于復(fù)合索引,索引字段順序比較要害,把查詢(xún)頻率比較高的字段排在索引組合的最前面。在分區(qū)表中,盡量采用local分區(qū)索引以方便分區(qū)維護(hù)。

除非時(shí)分區(qū)local索引,否則在創(chuàng)建索引段時(shí)候必須指定指定索引段的tablespace、storage屬性,具體參考4.4.2.1內(nèi)容。

2.4.4 視圖設(shè)計(jì)

視圖是虛擬的數(shù)據(jù)庫(kù)表,在使用時(shí)要遵循以下原則:

從一個(gè)或多個(gè)庫(kù)表中查詢(xún)部分?jǐn)?shù)據(jù)項(xiàng);

為簡(jiǎn)化查詢(xún),將復(fù)雜的檢索或字查詢(xún)通過(guò)視圖實(shí)現(xiàn);

提高數(shù)據(jù)的安全性,只將需要查看的數(shù)據(jù)信息顯示給權(quán)限有限的人員;

視圖中假如嵌套使用視圖,級(jí)數(shù)不得超過(guò)3級(jí);

由于視圖中只能固定條件或沒(méi)有條件,所以對(duì)于數(shù)據(jù)量較大或隨時(shí)間的推移逐漸增多的庫(kù)表,不宜使用視圖;可以采用實(shí)體化視圖代替。

除非凡需要,避免類(lèi)似Select * from [TableName] 而沒(méi)有檢索條件的視圖;

視圖中盡量避免出現(xiàn)數(shù)據(jù)排序的SQL語(yǔ)句。

2.4.5 包設(shè)計(jì)

存儲(chǔ)過(guò)程、函數(shù)、外部游標(biāo)必須在指定的數(shù)據(jù)包對(duì)象PACKAGE中實(shí)現(xiàn)。存儲(chǔ)過(guò)程、函數(shù)的建立如同其它語(yǔ)言形式的編程過(guò)程,適合采用模塊化設(shè)計(jì)方法;當(dāng)具體算法改變時(shí),只需要修改需要存儲(chǔ)過(guò)程即可,不需要修改其它語(yǔ)言的源程序。當(dāng)和數(shù)據(jù)庫(kù)頻繁交換數(shù)據(jù)是通過(guò)存儲(chǔ)過(guò)程可以提高運(yùn)行速度,由于只有被授權(quán)的用戶(hù)才能執(zhí)行存儲(chǔ)過(guò)程,所以存儲(chǔ)過(guò)程有利于提高系統(tǒng)的安全性。

存儲(chǔ)過(guò)程、函數(shù)必須檢索數(shù)據(jù)庫(kù)表記錄或數(shù)據(jù)庫(kù)其他對(duì)象,甚至修改(執(zhí)行Insert、Delete、Update、Drop、Create等操作)數(shù)據(jù)庫(kù)信息。假如某項(xiàng)功能不需要和數(shù)據(jù)庫(kù)打交道,則不得通過(guò)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程或函數(shù)的方式實(shí)現(xiàn)。在函數(shù)中避免采用DML或DDL語(yǔ)句。

在數(shù)據(jù)包采用存儲(chǔ)過(guò)程、函數(shù)重載的方法,簡(jiǎn)化數(shù)據(jù)包設(shè)計(jì),提高代碼效率。存儲(chǔ)過(guò)程、函數(shù)必須有相應(yīng)的出錯(cuò)處理功能。

2.4.6 安全性設(shè)計(jì)

4.4.6.1 治理默認(rèn)用戶(hù)

在生產(chǎn)環(huán)境中,必須嚴(yán)格治理sys和system用戶(hù),必須修改其默認(rèn)密碼,禁止用該用戶(hù)建立數(shù)據(jù)庫(kù)應(yīng)用對(duì)象。刪除或鎖定數(shù)據(jù)庫(kù)測(cè)試用戶(hù)scott 。

2.4.6.2 數(shù)據(jù)庫(kù)級(jí)用戶(hù)權(quán)限設(shè)計(jì)

必須按照應(yīng)用需求,設(shè)計(jì)不同的用戶(hù)訪(fǎng)問(wèn)權(quán)限。包括應(yīng)用系統(tǒng)治理用戶(hù),普通用戶(hù)等,按照業(yè)務(wù)需求建立不同的應(yīng)用角色。

用戶(hù)訪(fǎng)問(wèn)另外的用戶(hù)對(duì)象時(shí),應(yīng)該通過(guò)創(chuàng)建同義詞對(duì)象synonym進(jìn)行訪(fǎng)問(wèn)。

2.4.6.3 角色與權(quán)限

確定每個(gè)角色對(duì)數(shù)據(jù)庫(kù)表的操作權(quán)限,如創(chuàng)建、檢索、更新、刪除等。每個(gè)角色擁有剛好能夠完成任務(wù)的權(quán)限,不多也不少。在應(yīng)用時(shí)再為用戶(hù)分配角色,則每個(gè)用戶(hù)的權(quán)限等于他所兼角色的權(quán)限之和。

2.4.6.4 應(yīng)用級(jí)用戶(hù)設(shè)計(jì)

應(yīng)用級(jí)的用戶(hù)帳號(hào)密碼不能與數(shù)據(jù)庫(kù)相同,防止用戶(hù)直接操作數(shù)據(jù)庫(kù)。用戶(hù)只能用帳號(hào)登陸到應(yīng)用軟件,通過(guò)應(yīng)用軟件訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),而沒(méi)有其它途徑操作數(shù)據(jù)庫(kù)。

2.4.6.5 用戶(hù)密碼治理

用戶(hù)帳號(hào)的密碼必須進(jìn)行加密處理,確保在任何地方的查詢(xún)都不會(huì)出現(xiàn)密碼的明文。

2.5 SQL編寫(xiě)

2.5.1 字符類(lèi)型數(shù)據(jù)

SQL中的字符類(lèi)型數(shù)據(jù)應(yīng)該統(tǒng)一使用單引號(hào)。非凡對(duì)純數(shù)字的字串,必須用單引號(hào),否則會(huì)導(dǎo)致內(nèi)部轉(zhuǎn)換而引起性能問(wèn)題或索引失效問(wèn)題。利用trim(),lower()等函數(shù)格式化匹配條件。

2.5.2 復(fù)雜sql

對(duì)于非常復(fù)雜的sql(非凡是有多層嵌套,帶子句或相關(guān)查詢(xún)的),應(yīng)該先考慮是否設(shè)計(jì)不當(dāng)引起的。對(duì)于一些復(fù)雜SQL可以考慮使用程序?qū)崿F(xiàn)。

USER_TAB_COMMENTS 數(shù)據(jù)字典

Comment on 可加注解

2.5.3 高效性

2.5.3.1 避免In子句

使用In 或 not In子句時(shí),非凡是當(dāng)子句中有多個(gè)值時(shí),且查詢(xún)數(shù)據(jù)表數(shù)據(jù)較多時(shí),速度會(huì)明顯下降。可以采用連接查詢(xún)或外連接查詢(xún)來(lái)提高性能。

Char 比 varchar 查詢(xún)時(shí)高詢(xún)

在進(jìn)行查詢(xún)及建立索引時(shí),char比varchar的效率要高,當(dāng)然varchar在存儲(chǔ)上比char要好

2.5.3.2 避免嵌套的Select子句

這個(gè)實(shí)際上是In子句的特例。

2.5.3.3 避免使用Select * 語(yǔ)句

假如不是必要取出所有數(shù)據(jù),不要用*來(lái)代替,應(yīng)給出字段列表,注:不含select count(*)。

2.5.3.4 避免不必要的排序

不必要的數(shù)據(jù)排序大大的降低系統(tǒng)性能。

2.5.4 健壯性

2.5.4.1 Insert語(yǔ)句

使用Insert語(yǔ)句一定要給出要插入值的字段列表,這樣即使更改了表結(jié)構(gòu)加了字段也不會(huì)影響現(xiàn)有系統(tǒng)的運(yùn)行。

2.5.4.2 Count(*)、Count(*)、count(distinct id)的區(qū)別

Select count(*) from testtab

得到表testtab的記錄數(shù)

select count(id) from testtab

得到表testtab id字段非空記錄數(shù)

select count(distinct id) from testtab

得到表testtab id字段值非相同記錄數(shù)

2.5.4.3 Not null 為字段類(lèi)型性質(zhì)的約束

本約束功能在后期無(wú)語(yǔ)法使期失效,可使用修改字段類(lèi)型方式

alter table modify 字段名 類(lèi)型 not null

alter table modify 字段名 類(lèi)型 外鍵列如沒(méi)有明確說(shuō)明not null,可插入null記錄(而null是在外部表的記錄中沒(méi)有的),如無(wú)可插null記錄的想法,要對(duì)外鍵字段加not null約束。

2.5.4.5 序列 sequence 跳號(hào)的問(wèn)題

sequence 因回滾,系統(tǒng)崩潰(使用cache 內(nèi)的值將認(rèn)為已用),多表引用都將使其跳號(hào),所以不能用于為連續(xù)序號(hào) utl_row.cast_to_row

2.5.4.6 unicn/ intersect/ minus 使用ordey by的注重事項(xiàng)

以上語(yǔ)句進(jìn)行連表操作,而表同表的字段順序的類(lèi)型相同但字段標(biāo)題名可不同,使用ordey by時(shí)后面假如是字段名,要求所有的表的字段標(biāo)題名相同,否則用字段的順序號(hào)

select id,name,year from user1unionselect no,name,to_number(null) year from user2order by 1,name,year



2.5.5 安全性

2.5.5.1 Where 條件

無(wú)論在使用Select,還是使用破壞力極大的Update和Delete語(yǔ)句時(shí),一定要檢查Where條件判定的完整性,不要在運(yùn)行時(shí)出現(xiàn)數(shù)據(jù)的重大丟失。假如不確定,最好先用Select語(yǔ)句帶上相同條件來(lái)果一下結(jié)果集,來(lái)檢驗(yàn)條件是否正確。

2.5.6 完整性

有依靠關(guān)系的表,例如主外鍵關(guān)系表,在刪除父表時(shí)必須級(jí)聯(lián)刪除其子表相應(yīng)數(shù)據(jù),或則按照某種業(yè)務(wù)規(guī)則轉(zhuǎn)移該數(shù)據(jù)。9I中表中字段縮小及變類(lèi)型,字段為空或表空,varchar和char長(zhǎng)度不變可任意改,字段名和表名可字段可用 ALTER TABLE table SET UNUSED (column) 設(shè)定為不可用,注重?zé)o命令再設(shè)為可用

3 備份恢復(fù)設(shè)計(jì)原則

3.1 數(shù)據(jù)庫(kù)eXP/imp備份恢復(fù)

Oracle數(shù)據(jù)庫(kù)的Exp、Imp提供了數(shù)據(jù)快速的備份和恢復(fù)手段,提供了數(shù)據(jù)庫(kù)級(jí)、用戶(hù)級(jí)和表級(jí)的數(shù)據(jù)備份恢復(fù)方式。這種方法一般作為數(shù)據(jù)庫(kù)輔助備份手段。

3.1.1 數(shù)據(jù)庫(kù)級(jí)備份原則

在數(shù)據(jù)庫(kù)的數(shù)據(jù)量比較小,或數(shù)據(jù)庫(kù)初始建立的情況下采用。不適合7*24的在線(xiàn)生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)備份。

3.1.2 用戶(hù)級(jí)備份原則

在用戶(hù)對(duì)象表數(shù)據(jù)容量比較小、或則用戶(hù)對(duì)象初始建立的情況下使用。

3.1.3 表級(jí)備份原則

主要在以下場(chǎng)合采用的備份方式:

參數(shù)表備份

靜態(tài)表備份

分區(qū)表的分區(qū)備份。

3.2 數(shù)據(jù)庫(kù)冷備份原則

數(shù)據(jù)庫(kù)冷備份必須符合以下原則:

數(shù)據(jù)庫(kù)容量比較小。

數(shù)據(jù)庫(kù)答應(yīng)關(guān)閉的情況。

3.3 Rman備份恢復(fù)原則

這種方式適用于7*24環(huán)境下的聯(lián)機(jī)熱備份情形。

3.3.1 Catalog數(shù)據(jù)庫(kù)

單獨(dú)建立備份恢復(fù)用的數(shù)據(jù)庫(kù)實(shí)例,盡可能與生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)分開(kāi),確保catalog與生產(chǎn)數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)連接良好。在9I系統(tǒng)使用良好的備份策略以可,支持完全使用控制文件保存catalog信息,備份策略如下:

backup spfile format '/data/backup/%d_SPFILE_%T_%s_%p.bak';sql "alter system archive log current";backup archivelog all format '/data/backup/%d_ARC_%T_%s_%p.bak' delete all input;backup current controlfile format '/data/backup/%d_CTL_%T_%s_%p.bak';在spfile、控制文件、數(shù)據(jù)庫(kù)全丟的情況下可通過(guò)下面的方式恢復(fù)RMAN> connect targetconnected to target database (not started)RMAN> startupRMAN> restore spfile from '/data/backup/COMMDB_SPFILE_20030411_9_1.bak';SQL> startupORA-00205: error in identifying controlfile, check alert log for more infoRMAN> restore controlfile from 'd:/DB92_CTL_20031113_9_1.BAK';Mout database:RMAN> recover database;RMAN> alter database open resetlogs;


注重:對(duì)數(shù)據(jù)庫(kù)設(shè)定控制文件保存?zhèn)浞菪畔?65天,具體語(yǔ)句如下。

alter system set control_file_record_keep_time=365 SCOPE=BOTH;


3.3.2 Archive Log

設(shè)置Archive Log 的位置,確保存儲(chǔ)介質(zhì)有足夠的空間來(lái)保留指定時(shí)間內(nèi)archive log的總量。建設(shè)定期對(duì)RMAN進(jìn)行全備份,刪除冗余歸檔日志文件。

3.3.3 全備份策略

對(duì)于小容量數(shù)據(jù)庫(kù),可以采用全備份策略。對(duì)于大容量數(shù)據(jù)庫(kù),必須制定全備份策略方案,備份時(shí)對(duì)archive log進(jìn)行轉(zhuǎn)儲(chǔ),同時(shí)冷備份catalog 數(shù)據(jù)庫(kù)。

3.3.4 增量備份策略

對(duì)于大容量數(shù)據(jù)庫(kù),必須制定增量備份、累積備份和全備份的周期,備份時(shí)對(duì)archive log進(jìn)行轉(zhuǎn)儲(chǔ),同時(shí)冷備份catalog 數(shù)據(jù)庫(kù)。

3.3.5 恢復(fù)原則

采用Rman腳本進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)。數(shù)據(jù)庫(kù)恢復(fù)有以下幾種:

3.3.5.1 局部恢復(fù)

主要用于恢復(fù)表空間、數(shù)據(jù)文件,一般不影響數(shù)據(jù)庫(kù)其他操作。

3.3.5.2 完全恢復(fù)

數(shù)據(jù)庫(kù)恢復(fù)到故障點(diǎn),由catalog當(dāng)前數(shù)據(jù)庫(kù)決定。

3.3.5.3 不完全恢復(fù)

恢復(fù)到數(shù)據(jù)庫(kù)的某一時(shí)間點(diǎn)或備份點(diǎn)。

恢復(fù)catalog數(shù)據(jù)庫(kù)。

恢復(fù)數(shù)據(jù)庫(kù)control file 。

恢復(fù)到數(shù)據(jù)庫(kù)某一時(shí)間點(diǎn)。

重設(shè)日志序列。

3.4 備用數(shù)據(jù)庫(kù)原則

數(shù)據(jù)庫(kù)系統(tǒng)在以下情況下可以考慮采用備用數(shù)據(jù)庫(kù)data guard原則:

數(shù)據(jù)庫(kù)容量適中。

數(shù)據(jù)庫(kù)嚴(yán)格要求7*24不間斷,或間斷時(shí)間要求控制在最小范圍內(nèi)。

數(shù)據(jù)庫(kù)要求有異地備份冗余。

3.5 一些小經(jīng)驗(yàn)

使用oemc的oms時(shí),首選項(xiàng)要求是節(jié)點(diǎn)和數(shù)據(jù)庫(kù)分別加入系統(tǒng)用戶(hù)(如:administrator)和數(shù)據(jù)庫(kù)DBA用戶(hù)(system)。節(jié)點(diǎn)的系統(tǒng)用戶(hù)必須有批處理作業(yè)登錄的權(quán)限

agent 不能啟動(dòng),lisnter修改后都要手動(dòng)刪除oracle/ora9/network/agent 中的*.q文件

oracle/admin/my9i/bdump 中是用戶(hù)的出錯(cuò)日志

改變表的空間的方式alter table hr.ssss move TABLESPACE example(要重建索引); 或用imp導(dǎo)入時(shí),設(shè)定導(dǎo)入用戶(hù)只有某一表空間的使用權(quán),無(wú)RESOURCE角色和UNLIMITED TABLESPACE權(quán)限

aleter system set log_checkpoint_to_alter=true,后可報(bào)警文件發(fā)現(xiàn)checkpoint的起動(dòng)和結(jié)束時(shí)間。

3.6 系統(tǒng)調(diào)優(yōu)知識(shí)

3.6.1.1 生成狀態(tài)報(bào)表(statspack的使用)

使用(存放位置@?/rdbms/admin/)的文件生成報(bào)表用戶(hù)

@?/rdbms/admin/Spcreate.sql建表

將timed_statistics設(shè)定true

使用生成的perfstat用戶(hù)登錄,執(zhí)行以下語(yǔ)句手動(dòng)收集信息

Exex statspack.snap

Exec statspack.snap(I_SNAP_LEVEL=>0,I_MODEFY_PRAMETER=>TRUE) 0級(jí),最少10最大

使用下面的語(yǔ)句生成狀態(tài)報(bào)表

@?/rdbms/admin/Spreport.sql

其他相關(guān)文件

delete stats$snapshot ;清原來(lái)記錄數(shù)據(jù)

@?/rdbms/admin/Saputo.sql

select job from user_jobs 取用戶(hù)作業(yè)號(hào)

exec dbms_remove(作業(yè)號(hào))

timed_statistics=true要求

@?/rdbms/admin/spdrop.sql ;

3.6.1.2 sql追蹤

設(shè)定全部用戶(hù)跟蹤

alter system set sql_trace=true;

用戶(hù)級(jí)別跟蹤

alter session set sql_trace=true;

用戶(hù)的跟蹤文件生成在 admin/{pid}/udump/{pid} _ora_{ SPID}.trc 中,spid從下面語(yǔ)句得到

SELECT b.name bkpr, s.username, p.spid,s.sid,s.serial# FROM v$bgprocess b, v$session s, v$process p WHERE p.addr = b.paddr(+) AND p.addr = s.paddr and s.username=user;

DBA對(duì)特定用戶(hù)跟蹤

exec dbms_system_set_Sql_trace_in_session(sid,serial#,true)

信息從下面得到

SELECT b.name bkpr, s.username, p.spid,s.sid,s.serial#,osuser,s.program

FROM v$bgprocess b, v$session s, v$process p

WHERE p.addr = b.paddr(+)

AND p.addr = s.paddr;

/*p.spid用于sql_trace時(shí)日志編號(hào),dbms_system.set_sql_trace_in_session(sid,erial#,true)*/

用戶(hù)的跟蹤文件生成在 admin/{pid}/udump 中

系統(tǒng)的跟蹤文件生成在admin/{pid}/bdump/alert_{pid}.log

tkprof.exe將log文件生成格式化文本

在av Rd(ms) 20以上說(shuō)明表空間使用過(guò)用頻繁,考慮將表分開(kāi)其他表空間上

系統(tǒng)變量fast_start_mttr_target的值要大到不產(chǎn)生log等待,當(dāng)然也可通過(guò)加log組使其不等待

reao log大小應(yīng)為每30分鐘切換一次

建議表空間的利用率不超80%

buffer hit 要達(dá)80%以上為好

3.6.1.3 內(nèi)存調(diào)整

一般的內(nèi)存分配原則

SGA 50%(其中80% DATA BUFFER,15% SHARE POOL,5其他)

PGA30%

OS 20%

例如:2G的WINDOWS的平臺(tái),OS 300M,SAG 1.2G,PGA 500M

內(nèi)存分配的基本單位

SGA《=128M 4M

SGA》128M  64位系統(tǒng)16M,32M系統(tǒng)8M

動(dòng)態(tài)分配時(shí)總值不可大于sga_max_size

通過(guò)V$SGA_DYNAMIC_FREE_MEMORY取空閑內(nèi)存空間

在縮小時(shí)假如內(nèi)存空間實(shí)際在應(yīng)用中,CPU利用率將達(dá)100%,最后將語(yǔ)句出錯(cuò)。

V$SGASTAT 可看實(shí)際的使用情況

Redo log buffer一般在5M內(nèi),可通過(guò)v$sessuon_wait看是否等,v$sysstat

可也通過(guò)報(bào)警文件看是否等切換,方法可加組。可通過(guò)nologging(數(shù)據(jù)庫(kù)也要設(shè)定支持nologging)方法減少日志文件產(chǎn)生量。

java_pool 沒(méi)有設(shè)定時(shí),使用shared_pool_size

3.6.1.3.1 shared_pool

本緩沖區(qū)用于sql語(yǔ)句,pl sql等的對(duì)象保存

Cursor_sharing{ExactSimilarforce} 游標(biāo)共享設(shè)定

Force方式適用OLTP數(shù)據(jù)庫(kù),Exact方式適合數(shù)據(jù)倉(cāng)庫(kù),similar為智能方式

hard parses 硬SQL語(yǔ)句分析,每秒要底于100次,小要加大shared_pool

soft parse 軟SQL語(yǔ)句分析,OLTP要達(dá)90%以上,小要加大shared_pool

不建議用無(wú)命名PL SQL段

假如有大PL SQL(存儲(chǔ)過(guò)程)對(duì)象可強(qiáng)制保存于內(nèi)存,也可加大SHARED_POOL_RESERVED_SIZE,大小不可過(guò)SHARED_POOL_SIZE的50%,不然實(shí)例不能起動(dòng)

3.6.1.3.2 db_cache

本緩沖區(qū)用于數(shù)據(jù)庫(kù)數(shù)據(jù)對(duì)象保存

db_cache_advice 為on,可以提出通過(guò)企業(yè)治理器看到系統(tǒng)建議

通過(guò)select * from v$system_event 進(jìn)行系統(tǒng)查看。

發(fā)現(xiàn)存在free buffer waits,說(shuō)明不能將data buffer及時(shí)寫(xiě)入data file;

可通過(guò)增加加CPU后,加db_writer_processes=CPU數(shù)改善。

也可設(shè)disk_asynch_io為true,使用異步IO(前提同要操作系統(tǒng)支持)db_writer_processes=1時(shí)(只有一個(gè)CPU的情況下),也可通加大dbwr_io_slaves來(lái)改善。db_writer_processes>1,不可用本功能

調(diào)整效果排序:異步IO>CPU>dbwr_io_slaves

Buffer Busy Waits大說(shuō)明出現(xiàn)IO沖突

Buffer Busy Waits 大 和 dbbock大說(shuō)明全表掃描多,說(shuō)明數(shù)據(jù)不能讀入,可加大

db_cache_size來(lái)改善.

Undo block大要加大回滾段(手動(dòng)治理方式,9I默認(rèn)是自動(dòng)治理)

undo header 大要加大回滾段(手動(dòng)治理方式,9I默認(rèn)是自動(dòng)治理)

db_cache命中率99%,不是唯一因素,關(guān)系是不要出現(xiàn)等待。建議達(dá)90%以上。

內(nèi)存使用建議:

系統(tǒng)可以設(shè)三個(gè)緩沖區(qū),建表時(shí)可設(shè)定用那個(gè)緩沖區(qū)(默認(rèn)在db_cache_size)

db_cache_size   (默認(rèn)區(qū))

db_keep_cache_size (常訪(fǎng)問(wèn),小于db_keep_cache_size的10%的表可放于本區(qū))

db_recycle_cache_size (一個(gè)事物完成后常時(shí)間不再使用,或兩倍大小于緩沖區(qū))

3.6.2 排序的優(yōu)化

9I為專(zhuān)用服務(wù)器時(shí)系統(tǒng)變量workarea_size_policy 設(shè)定為auto, statistics_level設(shè)定為 TYPICAL 可獲取v$pga_target_advice中的優(yōu)化建議。參數(shù)pga_aggregate_target值為所有連接用戶(hù)可用排序內(nèi)存。

9I為共享服務(wù)器時(shí)workarea_size_policy設(shè)定為menaul, sort_area_size值為每用戶(hù)排序內(nèi)存。

假如內(nèi)存不足將使用TEMP表空間進(jìn)行排序,排序使用比率disk/meme應(yīng)小于5%

盡量少用排序,假如使用排序功能,盡量在字段上加索引進(jìn)行優(yōu)化。

SQL分析模式:RBO(基于規(guī)則)方案小表(驅(qū)動(dòng)表)放在最后,優(yōu)先使用索引,對(duì)SQL語(yǔ)句要求嚴(yán)格(8I以前的模式);CBO (基于開(kāi)銷(xiāo))根據(jù)統(tǒng)計(jì)值進(jìn)行選擇開(kāi)銷(xiāo)最少,性能最優(yōu)的最佳方式進(jìn)行,但本方式DBA(使用analyze table語(yǔ)句)要定期進(jìn)行分析統(tǒng)計(jì).系統(tǒng)設(shè)定通過(guò)optimizer_mode 系統(tǒng)參數(shù)

說(shuō)明: 指定優(yōu)化程序的行為。假如設(shè)置為 RULE, 就會(huì)使用基于規(guī)則的優(yōu)化程序, 除非查詢(xún)含有提示。假如設(shè)置為 CHOOSE, 就會(huì)使用基于成本的優(yōu)化程序, 除非語(yǔ)句中的表不包含統(tǒng)計(jì)信息。ALL_ROWS 或 FIRST_ROWS

始終使用基于成本的優(yōu)化程序。

值范圍: RULE CHOOSE FIRST_ROWS ALL_ROWS

默認(rèn)值: CHOOSE

{rule(RBO)choose(自動(dòng)選擇)fist_rows fist_rows_nall_row}

3.6.3 統(tǒng)計(jì)信息

進(jìn)行某表的統(tǒng)計(jì)分析

EXECUTE dbms_stats.gather_table_stats ('HR','EMPLOYEES');

查看結(jié)果

SELECT num_rows, blocks, empty_blocks as empty, avg_space, chain_cnt, avg_row_lenFROM dba_tablesWHERE owner = 'HR'AND table_name = 'EMPLOYEES';



4 設(shè)計(jì)工具

統(tǒng)一使用sybase power designer設(shè)計(jì)工具,在該工具上完成物理模型的設(shè)計(jì)。所有的數(shù)據(jù)庫(kù)對(duì)象盡可能在物理模型上進(jìn)行設(shè)計(jì),而且每個(gè)物理模型都要有相應(yīng)的文字描述。

所有的數(shù)據(jù)庫(kù)對(duì)象變更以數(shù)據(jù)庫(kù)物理模型為基準(zhǔn)。為了避免字符敏感問(wèn)題,產(chǎn)生的腳本以大寫(xiě)字母為標(biāo)準(zhǔn)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄底市| 屯门区| 苍山县| 行唐县| 庆安县| 邵阳县| 开化县| 察隅县| 库伦旗| 诸城市| 宣城市| 兴隆县| 江华| 临夏县| 永年县| 郸城县| 东乡县| 长宁县| 株洲市| 江油市| 乌鲁木齐市| 正镶白旗| 琼中| 凌云县| 蒲城县| 台前县| 龙门县| 永嘉县| 维西| 高雄市| 定边县| 长寿区| 宁南县| 普兰县| 亚东县| 蒙城县| 克什克腾旗| 阜平县| 汨罗市| 宜章县| 申扎县|