Nls_characterset、Nls_nchar_characterset。
Db_block_size參數決定Oracle數據庫塊的大小,一般可以選擇的范圍是2K、4K、8K、16K、32K,使用下一個較大值數據庫塊大小的效果一般可以集中查詢中性能提高50%。但是按常規來說對於一般服務器不提倡把這個值設的很大,小型機除外,因為這樣一來數據庫塊中將會有更多的行,在數據庫維護期間發生塊級競爭的可能性比較大,避免這種競爭的辦法是在表級和索引級增大Freelists、maxtrans和initrans 的設置值,通常Freelists設置為大於4會帶來更多的好處。
Db_name該參數指定一個數據庫標識符,一般在Create Database中指定的名稱,改參數是可選的(在Oracle9i實時應用集群時是必選的,多個實例有相同的參數值),但是建議在Create Database之前設置它,如果不指定則要出現在Startup或Alter Database mount命令中。
Db_domain該參數指定全局數據庫名的擴展部分,在Oracle9i實時應用集群時是必選的,多個實例有相同的參數值。
Compatible該參數指定Oracle服務器維護版本的兼容性,保證與早期的版本向下兼容的時候允許用戶使用新的版本,在Oracle9i實時應用集群時是必選的,多個實例有相同的參數值。
Nls_language和Nls_characterset及Nls_nchar_characterset三個參數是數據庫的字符集參數,在數據庫創建完成後一般也不能改變或很難改變,所以在創建數據庫的時候要先設置好。
四.設置和管理內存
Oracle使用共享內存來管理其內存和文件結構,Oracle常使用的內存結構如下:
系統全局區(System Global Area,SGA),SGA隨著不同的環境而不同,沒有一種普通的最佳方案,我們在設置它直前要先考慮以下的幾個方面:物理內存多大;操作系統是那種及占多大的內存,數據庫系統是文件系統還是裸設備;數據庫運行的模式。SGA包括:Fixed size、Variable size、Database Buffers、Redo Buffers。SGA占有物理內存的比例沒有嚴格的規定,只能遵從一般的規則:SGA占據物理內存的40%--60%左右。如果通過直觀的公式化來表達則為:OS使用內存+SGA+並發進程數*(Sort_area_size+Hash_area_size+2M)<0.7RAM,這個公式也只是參考,不必拘於此,實際情況可以自由發揮。初始化參數文件中的一些參數對SGA的大小有決定性的影響。參數Db_block_Buffers(SGA中存儲區高速緩存的緩沖區數目),參數Shared_pool_size(分配給共享SQL區的字節數),是SGA大小的主要影響者。Database Buffers 參數是SGA大小和數據庫性能的最重要的決定因素。該值較高,可以提高系統的命中率,減少I/O。每個緩沖區的大小等於參數Db_block_size的大小。Oracle數據庫塊以字節表示大小。Oracle SGA區共享池部分由庫高速緩存、字典高速緩存及其他一些用戶和服務器會話信息組成,共享池是最大的消耗成分。調整SGA區各個結構的大小,可以極大地提高系統的性能。
數據塊緩沖緩存區(Data block buffers cache),Data buffers在8i中是Db_block_buffers*Db_block_size,9i中用Db_cache_size來代替這個參數。在內存的配置中把別的參數設置完成後,應該把能給的都給Data buffers。Oracle 在運行期間向數據庫高速緩存讀寫數據,高速緩存命中表示信息已在內存中,高速緩存失敗意味著Oracle必需進行磁盤I/O。保持高速緩存失敗率最小的關鍵是確保高速緩存的大小。Oracle8i中初始化參數Db_block_
查詢V$ROWCACHE表:
SELECT (1-(SUM(getmisses)/(SUM(gets)+SUM(getmisses))))*100
FROM V$rowcache;
如果該值>90%,說明命中率合適。否則,應增大共享池的大小。
重做日志緩沖區(Read log buffer),下面將有陳述,在此就不做說明。
SQL共享池(Shared pool size),該共享池包括包括執行計劃及針對數據庫執行SQL語句的語法分析用的,在第二次運行相同的SQL語句時可用SQL中的語法分析來加快執行速度。如果它太小,語句會連續不斷地再裝入到庫緩存區,從而影響性能。可以通過Alter system命令來修改此參數,9I以後的版本可以動態地修改其大小。
大池(Large pool size),是一個可選的內存區。如果選擇可對數據庫象備份/恢復這些大的操作提高性能。如果不選擇此參數,則系統會使用共享池。
JAVA池(Java pool size),由其名字而言可知,是為滿足JAVA命令語法分析的需求。在UNIX系統中如果區組的大小為4MB,則默認大小應該為24M,如果區組大小為 16MB,則默認大小為32M。如果數據庫沒有使用Java,則保持在10M—20M足夠。
多緩沖區池(Multiple buffer pools),可以使用多緩沖區池把大數據集與應用的剩余部分分開,以減少它們爭奪緩存區內相同資源的可能性,創建時需要在初始化參數中設定其大小。
程序全局區(Program global area,PGA)是Oracle的一個私有的內存區,9i以後的版本中,如果Workarea_size_policy=auto,則所有的會話共用一塊內存,該內存在參數Pga_aggregate_target設置,它的一個好的初始設置是:對於一個OLTP系統 Pga_aggregate_target=(totalL_mem*80%)*20%;對於一個DSS系統Pga_aggregate_target= (total_mem*80%)*50%。這裡的total_mem是物理內存。在調整Pga_aggregate_target參數時,下面的幾個動態視圖會有幫助的:V$sysstat和V$sesstat;V$sql_workarea_active;V$pgastat;V$ sql_workarea; V$process。
五.設置和管理CPU
在設置和安裝數據庫的過程中,基本不用對CPU做什麼配置的,系統會自動默認的,但是在管理過程中我們可以利用操作系統監控工具來監控CPU的狀況。例如在UNIX系統中,可以運行sar–u的工具來檢查整個系統使用CPU的水平。其統計信息包括:用戶時間、系統時間、空閒時間、I/O等待時間。在正常工作負載的情況下,如果空閒時間和I/O等待時間接近於0或少於5%,那就表示CPU的使用存在問題。
對於Windows系統可以通過性能監視器(Performance monitor)來檢查CPU的使用狀況可以提供以下信息:處理器時間、用戶時間、特權時間、中斷時間、DPC時間。
如果CPU的使用存在問題,則可以通過以下的方式來解決:優化系統和數據庫;增加硬件的能力;對CPU資源分配進行劃分優先級,Oracle數據庫資源管理器(Database Resource Manager)負責在用戶和應用程序之間分配和管理CPU資源。
六.設置和管理表空間
數據庫文件之間的I/O競爭是數據庫之大忌, 所以對數據庫規劃之前要先對數據文件的I/O進行初步的評估, 通常情況下, 應用的產品數據庫表所在的表空間會很活躍, 索引表空間和數據字典之類的表空間也很活躍的, 對於事物比較頻繁的應用中, 重做表空間也很活躍的, 所以對不同類型的數據庫其數據文件的I/O競爭也會略有不同的, 但是基本上還是遵從以下的原則比較好: 應用的表和索引通常應該被分配或分區到多個表空間中, 以降低單個數據文件的I/O, 最好把每一種功能相同的區域對象建立單獨的表空間; 沒有理由把除數據字典表和系統回退段外的其他東西放到系統表空間中, 要把能移出系統表空間的對象都移出; 索引段不應該和相關表放在同一表空間中, 因為他們在數據管理和查詢時會產生很多的並發I/O; 臨時表空間是用以存儲大量的排序, 所以其它的應用對象是不能放在臨時表空間。
以上講的是數據庫文件分布的原理, 原理歸原理, 事實應用中, 我們還是以經驗來設置分布比較好些, 當然在沒有經驗之前還是參考原理以致於不會走彎路。
數據庫和表空間可以是一對多的關系,表空間和數據文件也可以是一對多的關系,數據文件和數據對象也可以是一對多的關系。當創建一個數據對象(如表或索引)時,可以通過默認值或特殊命令將其賦予一個表空間,這樣就會在該表空間中創建一個段(Segment)來存儲與該對象有關的數據。一個段由一些稱作區間(Extent,一組連續的Oracle塊)的區段組成,一但現有的區段不能存儲數據時,這個段就要獲得另一個區間來支持將數據插入到對象中。
您正在看的SQLserver教程是:數據庫物理設計經驗談。atabase open
第二種方法﹕(Alter tablespace)
關閉數據庫-移動數據庫文件-裝載並改名-啟動
1> svrmgrl
2> connect internal
3> shutdown
4> exit
5> mv /u/product/oradata/foxmold/user01.dbf /db3/oradata
6> svrmgrl
7> connect internal
10> alter database rename file
‘/u/product/oradata/foxmold/user01.dbf’ to
‘/db3/oradata/user01.dbf’
8> alter database open
上面的foxmold代表當前的database name。
七.設置和管理回滾段
回滾段一般可以處理任意大小的事物,所以也就需要大小不同的回滾段。回滾段的大小是通過創建回滾段時指定存儲子句來設置,但一般會遵從下面原則:
OLTP事物特征有許多並發的事物,每個可能只修改少量的數據,可以建立10KB到20KB大小的回滾段,每個有2到4的范圍;對於時間很長的查詢為了維護讀一致性有大量的回滾信息,所以需要較大的回滾段,建立回滾段的大小最好為最大表的10%左右(大多數查詢只影響到表約10%的數據量)。設置回滾段的大小可以通過Create rollback segment和Alter rollback segment語句來實現。一般情況下,initial=next ,設置Optimal參數來節約空間的使用 ,不要設置maxextents為unlimited,回滾段應創建在一個特定的回滾段表空間內 。
回滾段的目標容量可以用存儲參數Optimal來定義,它指定回滾段要縮小到的尺寸。
具體的實現方法如下:
您正在看的SQLserver教程是:數據庫物理設計經驗談。stem switch logfile;
alter system switch logfile;
alter system switch logfile;
8.刪除中間過渡的日志組4,5
alter database drop logfile group 4;
alter database drop logfile group 5;
9.到操作系統下刪除過渡日志文件組4,5中的文件。
10.備份當前最新的控制文件
SQL>connect internal
SQL>alter database backup controlfile to trace resetlogs;
聯機重做日志文件也是可以移動的,具體的方法是:首先關閉數據庫,移動聯機重做日志文件,然後安裝數據庫,使用alter database命令通知數據庫聯機重做日志文件的新位置。然後就可以用新位置上的日志文件打開實例。
九.設置和管理歸檔重做日志
當Oracle以archivelog模式運行時,數據庫在每個聯機重做日志文件寫滿後,對它進行拷貝,通常是寫入磁盤,也可以寫入別的設備,但這需要人為的干預的。arch後台執行歸檔功能,如果有大量頻繁的事物的時候,會產生重做日志文件磁盤方面的競爭,避免這種競爭的方式是將聯機重做日志文件分布到多個磁盤上。為了提高歸檔的性能,可以創建具有多個成員的聯機重做日志文件組,但是必須考慮到每個設備的I/O。
歸檔重做日志文件不應與system、rbs、data、temp、indexes表空間等存儲在同一個設備中,更不能與任何的聯機重做日志文件存儲在同一個設備中,以免發生磁盤的競爭。
歸檔重做日志文件備份之後是可以刪除或移走的,否則會占據比較大的空間影響硬盤使用和降低系統的性能。
十.設置和管理控制文件
控制文件的位置在實例初始化參數文件中指定的,若要移動控制文件,必須先關閉數據庫實例,移動控制文件,編輯初始化參數文件,然後重新啟動該實例。
下面就以Oracle8i為例說明如何移動控制文件:
OS為Linux,Database為Oracle8i。
1. 查詢當前數據庫的控制文件的位置
SELECT * FROM v$controlfile;
2. 把控制文件/u/oradata/foxmold/control01.ctl
移到/db4/oradata/目錄下。
3. svrmgrl
4. connect internal
5. shutdown
6. exit
7. cp /u/oradata/foxmold/control01.ctl /db4/oradata/control01.ctl
8. chmod 660 /db4/oradata/control01.ctl
9. initsid.ora control_files=…
10. startup mount foxmold
上面的foxmold代表當前的database name。
十一.總結
以上是針對Oracle數據庫來對數據庫物理設計作以簡單陳述, 針對各種不同的數據庫可能會略有不同, 但是整體思想還是一致的。
以上寫的難免有不當之處, 歡迎大家批評指正!