日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

如何搭建一个数据库服务器平台 .

發(fā)布時間:2024/8/26 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何搭建一个数据库服务器平台 . 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

玩Oracle 2年多了,從接觸Oracle 到現(xiàn)在,一直沒有停止過學(xué)習(xí)。 要學(xué)的東西太多,剛?cè)腴T的時候是這樣的感覺,現(xiàn)在還是這樣的感覺。 有時候也在想,還要學(xué)多長時間才能感覺自我良好了,有十足的自信心了。 很多朋友都想做DBA, 因?yàn)樗麄冇X得這一個高薪的行業(yè)。 但是并不是所有都明白為什么DBA是個高薪的行業(yè)。 高薪意味著壓力大,責(zé)任大。

?

現(xiàn)代化的程度越高,對數(shù)據(jù)庫的依賴性越大。 數(shù)據(jù)安全性和系統(tǒng)的安全性也就越大。比如公司業(yè)務(wù)系統(tǒng)。 數(shù)據(jù)庫是直接的存儲地方的,他的重要性是不言而喻的,宕機(jī)帶來的損失可能是按分鐘或者秒算的。 而誰對這些數(shù)據(jù)庫負(fù)責(zé)--DBA。 所以很多公司,企業(yè)都是找有經(jīng)驗(yàn)的DBA ,他們也是在為他們的系統(tǒng)買保險(xiǎn)。 這也是為什么企業(yè)不愿意招一個沒有實(shí)戰(zhàn)經(jīng)驗(yàn)的DBA來管理自己的數(shù)據(jù)庫。

?

試想某個省移動的數(shù)據(jù)庫出了問題,造成數(shù)據(jù)丟失,在比如銀行數(shù)據(jù)庫掛了。 他們帶來的損失不光是影響正常的業(yè)務(wù)運(yùn)行,還有可能是數(shù)據(jù)錯誤。假如你在銀行存了100萬,結(jié)果銀行一不小心,在數(shù)據(jù)庫里少了幾個0. 這個是誰也不愿意看到的。 當(dāng)然以上都是假設(shè)的情況。 因?yàn)橄襁@些數(shù)據(jù)重要性極高的單位,他們都有一整套數(shù)據(jù)的保護(hù)機(jī)制。 是不會發(fā)生這種情況的。

?

下面就來總結(jié)一下如何的來搭建一個數(shù)據(jù)庫平臺。 主要從參數(shù)和一些特性的配置上來說明。當(dāng)然我玩Oracle也才2年,經(jīng)驗(yàn)不足,可能對與這些參數(shù)的設(shè)置也不是很合理。

?

從網(wǎng)上看到過一句話:每個DBA心中對重要的參數(shù)都有一個標(biāo)準(zhǔn)。 我想這也是經(jīng)驗(yàn)的價值。

?

?

?

一. Linux 系統(tǒng)

?

說明,在安裝操作系統(tǒng)之前,現(xiàn)在服務(wù)器上做個RAID。一般都用RAID5.

?

1.LINUX磁盤劃分:

?? a.對于內(nèi)置2塊磁盤(146GB)的系統(tǒng),/目錄20GB,SWAP與內(nèi)存大小相當(dāng)(8GB以下內(nèi)存機(jī)器SWAP配置8GB),/boot 100MB。如果作為應(yīng)用服務(wù)器,那么其余空間建立/apps文件系統(tǒng),mke2fs –j 命令;如果作為數(shù)據(jù)庫平臺,那么建立/dba文件系統(tǒng)20GB,其余建立/u01文件系統(tǒng)。

?? b.對于內(nèi)置4-6塊磁盤的系統(tǒng),/目錄60GB,SWAP與內(nèi)存大小相當(dāng)(8GB以下內(nèi)存機(jī)器SWAP配置8GB),/boot 100MB。如果作為應(yīng)用服務(wù)器,那么其余空間建立/apps文件系統(tǒng),mke2fs –j 命令;如果作為數(shù)據(jù)庫平臺,那么建立/dba文件系統(tǒng)40GB,其余建立/u01文件系統(tǒng)。

?? c.對于oracle數(shù)據(jù)文件目錄文件系統(tǒng)使用mke2fs –j –T largefiles命令建立

?

2.對于非外接存儲情況下:

a.ORACLE目錄標(biāo)準(zhǔn):ORACLE_HOME=/dba/app/oracle/product/10.2.0.4(按版本指定)

???? ORACLE_BASE=/dba? (dump目錄為/dba/admin/sid/)

???? Datafile目錄為/u01/oradata/sid

???? 歸檔空間目錄/u01/oradata/archive_sid

?

?? b.對于有外接存儲(/u02…)情況下:

ORACLE目錄標(biāo)準(zhǔn):ORACLE_HOME=/dba/app/oracle/product/10.2.0.4(按版本指定)

????? ORACLE_BASE=/u01? (dump目錄為/u01/admin/sid/)

????? Datafile目錄為/u02/oradata/sid??

????? 歸檔空間目錄/u01/oradata/archive_sid

?

c.ORACLE建庫采用CUSTOMER方式,直接更改初始UNDO和TEMP空間8GB(或者4GB,或者通過增加文件數(shù)目到更大,根據(jù)業(yè)務(wù)系統(tǒng)),system空間512MB(或者1GB)。Redolog為100MB,單個數(shù)據(jù)文件大小以8GB為宜(因EXT3文件系統(tǒng)特性使然),建議數(shù)據(jù)文件一次性劃分到8G, 以保證數(shù)據(jù)文件的連續(xù)性。

?

3.參數(shù)及服務(wù)配置:

? 方法一:建立NTP時間同步服務(wù),/etc/ntp.conf中加入server 10.0.30.172,執(zhí)行# ntpdate 10.0.30.172,# service ntpd start ,# chkconfig --level 235 ntpd on

?

? 方法二: 時間同步配置(編輯crontab)

? 輸入命令:ntpdate 10.0.30.172

? crontab –e(編輯crontab)

? 按i進(jìn)入輸入狀態(tài),輸入以下一行:

? 01 01 * * * root /usr/sbin/ntpdate 10.0.30.172 >/dev/null 2>&1(每天01:01與時間服務(wù)器10.0.30.172同步時間)

? :wq!(保存退出)

?

更多信息參考我的Blog: Linux 時間同步配置

http://blog.csdn.net/tianlesoftware/archive/2010/02/22/5315587.aspx

?

?

4. Linux 內(nèi)核參數(shù)修改

? 4.1 修改內(nèi)核參數(shù)/etc/sysctl.conf,對于8GB-16GB內(nèi)存機(jī)器

????? kernel.shmall = 2097152 à 4194304 ( 4KB單位,總內(nèi)存大小)

kernel.shmmax = ?à8589934592(實(shí)際物理內(nèi)存的2/3)

kernel.shmmni = 4096

???? 對于16GB內(nèi)存以上機(jī)器

????? kernel.shmall = 2097152 à 8388608? ( 4KB單位,總內(nèi)存大小)

kernel.shmmax = ?à10179869184(比實(shí)際物理內(nèi)存的2/3)

kernel.shmmni = 4096 –>8192

? net.ipv4.ip_local_port_range = 9000 65500

? net.core.rmem_default = 262144

? net.core.rmem_max = 4194304

? net.core.wmem_default = 262144

? net.core.wmem_max = 1048586

?

?以前也整理的相關(guān)的資料,詳見blog: Linux 內(nèi)核參數(shù)及Oracle相關(guān)參數(shù)調(diào)整

http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668741.aspx

?

??

?4.2.根據(jù)應(yīng)用情況修改進(jìn)程數(shù)限制 /etc/security/limits.conf

???? *?????????????? soft??????????? nproc?????????? 2047

*?????????????? hard?????????? nproc?????????? 16384

*?????????????? soft??????????? nofile????????? 1024 ->2048

*?????????????? hard??????????? nofile????????? 65536

?

?

注:關(guān)于內(nèi)核參數(shù)的修改,在Oracle 官方的安裝文檔里也有相關(guān)說明:

http://download.oracle.com/docs/cd/B28359_01/install.111/b32002/pre_install.htm#BABFDGHJ

在連接中的第 2.7 Configure Oracle Installation Owner Shell Limits 節(jié)。也有詳細(xì)介紹。

?

?

?

二. Oracle 配置

?

安裝實(shí)例之前,記得修改db_files , maxdatafiles 和MAXLOGHISTORY 參數(shù)。? 這2個參數(shù)是放在控制文件里的,如果在安裝實(shí)例的時候沒有設(shè)置成合適的值,以后調(diào)整起來會很麻煩。

?

具體參考:

Oracle db_files 和 maxdatafiles 說明

http://blog.csdn.net/tianlesoftware/archive/2011/06/07/6530421.aspx

?

?

1. 創(chuàng)建pfile 參數(shù)

Oracle 默認(rèn)只會創(chuàng)建spfile,但這是個二進(jìn)制文件,無法進(jìn)行修改。 為了保險(xiǎn)期間。我們要在開始就創(chuàng)建一個pfile 文件,語句很簡單,但作用不可忽略。

SQL>Create pfile from spfile;

?

Windows 下生成的pfile 文件默認(rèn)在$ORACLE_HOME/database 下

Linux 默認(rèn)位置在$ORACLE_HOME/dbs 下

?

2. SGA, PGA 設(shè)置

?

先來看幾個SQL

SQL> show parameter sga

NAME????????????????? TYPE??????? VALUE

------------------------------------ ----------- -------

lock_sga??????????????? boolean???? FALSE

pre_page_sga??????????? boolean???? FALSE

sga_max_size?????????? ?big integer ?584M

sga_target?????????????? big integer ?584M

SQL> show parameter pga

NAME??????????????????? TYPE??????? VALUE

------------------------------------ ----------- ------

pga_aggregate_target??????? big integer ???194M

SQL> select name,value ,ISSYS_MODIFIABLE from v$parameter where name like 'sga%';

NAME??????????? VALUE?????????? ISSYS_MOD

--------------- --------------- ---------

sga_max_size??? 612368384?????? FALSE

sga_target????? 612368384?????? IMMEDIATE

SQL> select name,value,issys_modifiable from v$parameter where name like 'pga%';

NAME??????? ??????VALUE??? ISSYS_MOD

-------------------- ?????---------- ???---------

pga_aggregate_target ?203423744? ?IMMEDIATE

如果ISSYS_MODIFIABLE 返回的是false,說明該參數(shù)無法用alter system語句動態(tài)修改,需要重啟數(shù)據(jù)庫。

所以sga_max_size 是不可以動態(tài)調(diào)整的。

?

在安裝之后我們要對PGA 和 SGA 進(jìn)行設(shè)置。 因?yàn)閟ga_max_size 是非動態(tài)的,修改后需要重啟,所以我們在開始設(shè)置的時候可以把sga_max_size設(shè)大一點(diǎn)。 sga_target 是動態(tài)的,我們可以根絕需要進(jìn)行調(diào)整。這個調(diào)整主要根據(jù)命中率來。這里就不多說。當(dāng)指定SGA_TARGET小于SGA_MAX_SIZE,實(shí)例重啟后,SGA_MAX_SIZE就自動變?yōu)楹蚐GA_TARGET一樣的值了。

?

對于OLTP系統(tǒng),一般的建議是將SGA_MAX_SIZE 設(shè)為物理內(nèi)存的60%,PGA 設(shè)為20%。

?

下表是一個參考值:

系統(tǒng)內(nèi)存

SGA_MAX_SIZE值

1G

400-500M

2G

1G

4G

2500M

8G

5G

?

?

這個參數(shù)修改可以在pfile里修改,也可以通過命令直接來:

SQL> alter system set pga_aggregate_target=150m scope=spfile;

系統(tǒng)已更改。

SQL> alter system set sga_target=500m scope=spfile;

系統(tǒng)已更改。

SQL> alter system set sga_max_size=510m scope=spfile;? --要是參數(shù)生效,需要重啟

系統(tǒng)已更改。

SQL> alter system set sga_max_size=510m scope=both;

alter system set sga_max_size=510m scope=both

???????????????? *

第 1 行出現(xiàn)錯誤:

ORA-02095: 無法修改指定的初始化參數(shù)

SQL> alter system set sga_target=550m scope=both;

系統(tǒng)已更改。

SQL> show parameter sga

NAME?????????????? TYPE??????? VALUE

------------------------------------ ----------- --------

lock_sga????????????? boolean???? FALSE

pre_page_sga????????? boolean???? FALSE

sga_max_size????????? big integer ?584M

sga_target???????????? big integer ?550M

?

以上都是針對Oracle 10g 版本的。 如果是9i的話,還需要對每個參數(shù)進(jìn)行配置,如Share Pool,DB buffer,Java Pool,redo log buffer等。

?

Oracle 內(nèi)存詳細(xì)分析請參考CSDN blog:Oracle 內(nèi)存 架構(gòu) 詳解

http://blog.csdn.net/tianlesoftware/archive/2010/05/16/5594080.aspx

?

?

3. UNDO, TEMP 表空間設(shè)置

?

3.1 UNDO

undo 表空間放的是數(shù)據(jù)的前鏡像,當(dāng)做某個記錄多修改時,原記錄就會放到undo 中。所以Undo 表空間的大小影響數(shù)據(jù)的恢復(fù)能力。 對它的配置要用點(diǎn)心思。

SQL> show parameter undo

NAME???????????????????????????????? TYPE??????? VALUE

------------------------------------ ----------- -----------

undo_management????????????????????? string????? AUTO

undo_retention?????????????????????? integer???? 900

undo_tablespace????????????????????? string????? UNDOTBS1

?

undo_retention 只是指定undo 數(shù)據(jù)的過期時間,默認(rèn)是900s,15分鐘。建議改成10800s,即3個小時。

?

SQL> alter system set undo_retention=10800 scope=both;

系統(tǒng)已更改。

?

至于undo 表空間的大小,如果磁盤空間允許,就將表空間設(shè)為32G,分成4個數(shù)據(jù)文件,單個數(shù)據(jù)文件8G。 如果空間有限,就設(shè)為8G或者16G(8*2)。

不過現(xiàn)在的服務(wù)器硬盤都是比較大,如果放在存儲上,那空間更大,所以32G。相對而言就就是一個很小的空間了。

?

ALTER DATABASE DATAFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF' RESIZE 50M;

?

ALTER TABLESPACE UNDOTBS1 ADD DATAFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS02.DBF' SIZE 5M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED;

?

大量的DML 操作會產(chǎn)生大量的undo,尤其是update,delete。 當(dāng)Undo 特別大的時候,我們可以把undo 刪了重建。

?

具體參考我的blog:Oracle undo 回滾段管理

http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx

?

3.2 Temp

臨時表空間主要用途是在數(shù)據(jù)庫進(jìn)行排序運(yùn)算、管理索引、訪問視圖等操作時提供臨時的運(yùn)算空間,當(dāng)運(yùn)算完成之后系統(tǒng)會自動清理。當(dāng)oracle里需要用到sort的時候,PGA中sort_area_size大小不夠時,將會把數(shù)據(jù)放入臨時表空間里進(jìn)行排序,同時如果有異常情況的話,也會被放入臨時表空間,正常來說,在完成Select語句、create index等一些使用TEMP表空間的排序操作后,Oracle是會自動釋放掉臨時段的。但有些有侯我們則會遇到臨時段沒有被釋放,TEMP表空間幾乎滿的狀況,甚至是我們重啟了數(shù)據(jù)庫仍沒有解決問題。

?

ALTER DATABASE TEMPFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TEMP01.DBF' RESIZE 30M;

?

ALTER TABLESPACE TEMP ADD TEMPFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TEMP02.DBF' SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

?

和UNDO 一樣,可以設(shè)為32G (4*8G)或者16G(2*8G),具體情況具體對待。如果遇到temp tablespace 滿了的話,我們也可以重建其表空間。 具體操作方法,參考blog:Oracle Temp 臨時表空間

http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4697417.aspx

?

4. 修改sessions 和 processes 參數(shù)

?? 數(shù)據(jù)庫默認(rèn)的sessions 是170,Processes 是150. 這2個數(shù)值肯定是不能滿足系統(tǒng)需要的。我們需要把這2個參數(shù)調(diào)大一點(diǎn)。 方法還是一樣,可以直接修改pfile,也可以用SQL. 建議把processes改成1000.sessions 改成2000. 當(dāng)然具體情況具體對待。

SQL> select name,value,issys_modifiable from v$parameter where name='sessions';

NAME??????? VALUE????? ISSYS_MOD

-------------------- ---------- ---------

sessions?????? 170??????? FALSE

SQL> select name,value,issys_modifiable from v$parameter where name='processes';

NAME???????? VALUE????? ISSYS_MOD

-------------------- ---------- ---------

processes?????? 150??????? FALSE

?

從上面的結(jié)果我們可以知道,修改這2個參數(shù)必須重啟數(shù)據(jù)庫。

SQL> alter system set sessions=2000 scope=spfile;

系統(tǒng)已更改。

SQL> alter system set processes=1000 scope=spfile;

系統(tǒng)已更改。

?

?

5. 啟動歸檔模式,并部署定期刪除歸檔文件腳本.

生產(chǎn)庫必定運(yùn)行在歸檔模式下,因?yàn)橥ㄟ^歸檔,我們對數(shù)據(jù)進(jìn)行恢復(fù)。我們RMAN 備份,Data Guard也需要?dú)w檔文件。

數(shù)據(jù)庫歸檔非歸檔的切換比較簡單。

SQL> alter system set log_archive_dest_1='location=/u01/newccs_archive';

SQL> shutdown immediate

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;

SQL> archive log list;

Database log mode????????????? Archive Mode

Automatic archival???????????? Enabled

Archive destination??????????? /u01/newccs_archive

Oldest online log sequence???? 27622

Next log sequence to archive?? 0

Current log sequence?????????? 27624

?

Oracle 歸檔與非歸檔的切換

http://blog.csdn.net/tianlesoftware/archive/2009/10/19/4693470.aspx

?

要強(qiáng)調(diào)的一點(diǎn),在切換為歸檔之前一定要指定歸檔目錄,即log_archive_dest_1。 這個目錄用來指定歸檔文件存放的位置,如果不指定,就會放到閃回區(qū)。 閃回區(qū)默認(rèn)只有2G,一但滿了之后就會出現(xiàn)問題,如導(dǎo)致數(shù)據(jù)庫hang或者不能啟動。 這個也是初學(xué)者容易犯的問題。 要是遇到這種問題,處理方法參考我的blog:

?

ORA-16014: log string sequence# string not archived, no available destinations Flash Recovery Area 空間不足

http://blog.csdn.net/tianlesoftware/archive/2010/04/29/5537550.aspx

?

刪除歸檔日志的腳本,請參考BLog:

http://blog.csdn.net/tianlesoftware/archive/2010/01/20/5211659.aspx

?

6. 開啟Flashback

Flashback 技術(shù)是以Undo segment中的內(nèi)容為基礎(chǔ)的, 因此受限于UNDO_RETENTON參數(shù)。要使用flashback 的特性,必須啟用自動撤銷管理表空間。

在Oracle 10g中, Flash back家族分為以下成員: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三種) 和Flashback Table。

Flashback 是不完全恢復(fù)的一種補(bǔ)充,它很靈活。但是Flashback Database默認(rèn)是關(guān)閉的,所以我們要啟動它。

?

要注意的是:啟動它必須在mount 狀態(tài)

SQL> startup mount

SQL> select name, current_scn, flashback_on from v$database;

NAME????? CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

ORCL??????????????? 0 NO

SQL> alter database flashback on;

數(shù)據(jù)庫已更改。

SQL> select name, current_scn, flashback_on from v$database;

NAME????? CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

ORCL??????????????? 0 YES

?

?

Oracle Flashback 技術(shù) 總結(jié)

http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4677378.aspx

?

7. 檢查redo

Redo 里記錄的是數(shù)據(jù)庫的操作。 在相關(guān)事務(wù)操作的時候,都會是先寫redo,等redo 寫完會再去修改相應(yīng)的數(shù)據(jù)。 這也Oracle的一種機(jī)制。如果出現(xiàn)問題,也可以通過這些記錄進(jìn)行恢復(fù)。

Redo 默認(rèn)有3個組,每個組有一個文件,每個文件50M。

?

?????? 將redo log 的文件大小改成100M一個。 每組創(chuàng)建2個成員。 最好將每組的2個成員放在不同的磁盤上。 因?yàn)閷憆edo 的時候是并行的,放在一起,可能會出現(xiàn)等待事件:Log file parallel write。

?????? 關(guān)于等待事件,參考:

?????? ?????? Oracle 常見的33個等待事件

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2010/08/12/5807800.aspx

?

與控制文件一樣,如果每組具有多個成員(事實(shí)也應(yīng)當(dāng)如此),那么仍然不必?fù)?dān)心保持這些成員同步的問題。LGWR能夠確保對所有成員進(jìn)行并行寫操作,從而使這些成員完全相同。如果丟失某個組的一個成員,只要還存在其他成員,數(shù)據(jù)庫仍然能夠繼續(xù)運(yùn)行。

?

Redo 空間的不足還會導(dǎo)致一種警告: checkpoint not complete. 具體參考Blog:

?

Redo Log 和Checkpoint not complete

http://blog.csdn.net/tianlesoftware/archive/2009/12/01/4908066.aspx

?

RedoLog Checkpoint 和 SCN關(guān)系

http://blog.csdn.net/tianlesoftware/archive/2010/01/25/5251916.aspx

?

?

?

顯示當(dāng)前歸檔日志組和成員:
SQL> select group#,member from v$logfile;

GROUP# MEMBER

---------- ---------------------------------------------------

? 3 ?????? ?????? D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG

? 2 ?????? ?????? D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG

? 1 ?????? ?????? D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG
??
添加redo log組:
SQL> alter database add logfile group 4 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO04.LOG') size 10m;

SQL> select group#,member from v$logfile;

??? GROUP# MEMBER

---------- ----------------------------------------------------

???????? 3 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG

???????? 2 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG

???????? 1 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG

???????? 4 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO04.LOG

檢查新加入的log狀態(tài)
SQL> select group#,sequence#,bytes,members,status from v$log;

?

??? GROUP#? SEQUENCE#????? BYTES??? MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

???????? 1???????? 17?? 52428800????????? 1 CURRENT

???????? 4????????? 0?? 10485760????????? 1 UNUSED

???????? 3???????? 16?? 52428800????????? 1 INACTIVE

???????? 2???????? 15?? 52428800????????? 1 INACTIVE
??? (雖然這里是UNUSED的狀態(tài),但是通過切換日志文件或者數(shù)據(jù)庫自動切換,該文件會被改為active狀態(tài))
??
添加新的文件到group 1
??? SQL> alter database add logfile member 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG' to group 1;
?????? SQL> select group#,sequence#,bytes,members,status from v$log;

??? GROUP#? SEQUENCE#????? BYTES??? MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

???????? 1???????? 17?? 52428800????????? 2 CURRENT

???????? 4????????? 0?? 10485760????????? 1 UNUSED

???????? 3???????? 16?? 52428800????????? 1 INACTIVE

???????? 2???????? 15?? 52428800????????? 1 INACTIVE
??? 這里的group組中的member就變?yōu)?;


?????? SQL> select member from v$logfile where group#=1;

MEMBER

-------------------------------------------------------

D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG

D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG

刪除新增的group 4
??? SQL> alter database drop logfile group 4;

刪除新增的group 1的logfile;
??? SQL> alter database drop logfile member 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG';

清空logfile:
??? SQL> alter database clear logfile 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG';

??
?????? SQL> select group#,sequence#,bytes,members,status from v$log;

??? GROUP#? SEQUENCE#????? BYTES??? MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

???????? 1???????? 17?? 52428800????????? 1 ACTIVE

???????? 2???????? 18?? 52428800????????? 1 CURRENT

???????? 3????????? 0?? 52428800????????? 1 UNUSED

8. 設(shè)置CONTROL_FILE_RECORD_KEEP_TIME 參數(shù)

?????? 該參數(shù)設(shè)置控制文件中存儲備份記錄的時間,在用RMAN的時候會涉及到這個參數(shù)。 備份記錄包括完全的數(shù)據(jù)庫備份記錄,以及指定的數(shù)據(jù)文件,控制文件,參數(shù)文件和歸檔目錄的備份記錄。數(shù)據(jù)庫參數(shù)CONTROL_FILE_RECORD_KEEP_TIME以天為單位(默認(rèn)值為7天),因此在默認(rèn)情況下,Oracle 會將RMAN備份和恢復(fù)記錄保存7天。 可以將該參數(shù)設(shè)置為0到365之間的任意值。

?????? CONTROL_FILE_RECORD_KEEP_TIME參數(shù)會影響一系列的數(shù)據(jù)庫操作。 首先,產(chǎn)生RMAN備份時,由于與這些備份相關(guān)的記錄存儲在控制文件中,所以該參數(shù)直接影響數(shù)據(jù)庫控制文件的大小。 備份記錄將不斷的保存在控制文件中,控制文件將耗盡空間。 這時,Oracle 會擴(kuò)展控制文件來調(diào)整備份記錄所需的存儲空間。 此外,設(shè)置為0時,將禁止擴(kuò)展控制文件,并且會使得RMAN備份的保存周期不穩(wěn)定。

?????? 建議將CONTROL_FILE_RECORD_KEEP_TIME 參數(shù)設(shè)置為不小于選中數(shù)據(jù)庫的備份保存周期,否則就可能在備份介質(zhì)上有數(shù)據(jù)庫備份,但是控制文件不存在與備份相關(guān)的備份記錄,在這種情況下,將無法恢復(fù)這些較早的文件。這個參數(shù)根據(jù)自己的本份策略來決定。

??????

SQL> select name,value from v$parameter where name='control_file_record_keep_time';

NAME?????????????????????????? VALUE

------------------------------ -------------------------------------------------

control_file_record_keep_time?? 7

SQL> alter system set control_file_record_keep_time=20;

系統(tǒng)已更改。

SQL> show parameter control_file_record_keep_time

NAME???????????????????????????????? TYPE??????? VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time?????? ?integer???? 20

SQL>

?

關(guān)于RMAN與control_file_record_keep_time的內(nèi)容參考:

?????? RMAN 系列(二) ---- RMAN 設(shè)置和配置

?????? http://blog.csdn.net/tianlesoftware/archive/2010/06/16/5674309.aspx

?

9. 設(shè)置open_links_per_instance 和 open_links 參數(shù)

?????? 關(guān)于這2個參數(shù)的說明,參考Blog:

?????? open_links_per_instance 和 open_links 參數(shù)說明

?????? http://blog.csdn.net/tianlesoftware/archive/2010/12/22/6090729.aspx

??????

?????? 這2個參數(shù)修改之后,需要重啟才能生效,所以,在安裝DB的時候,就把這個參數(shù)修改了。 默認(rèn)值是4,如果用到話就太小了。 所以在安裝的時候,就給修改了。 修改建議值:100。

?

?????? SQL> alter system set open_links=100 scope=spfile;

?????? 系統(tǒng)已更改。

10.修改用戶的profile 參數(shù)

SQL>alter profile PROFILE_PERSONAL limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

?

11. 部署statistic Job

?????? Oracle 10g statistic數(shù)據(jù)統(tǒng)計(jì),Oracle會根據(jù)這些統(tǒng)計(jì)信息來決定是走RBO(Rule-BasedOptimization),還是走CBO(Cost-BasedOptimization),會去選擇哪種執(zhí)行計(jì)劃更劃算,影響是否走相關(guān)的索引等.如果是CBO的話,它依靠準(zhǔn)確的(或者說比較準(zhǔn)確的)統(tǒng)計(jì)信息來產(chǎn)生優(yōu)化的執(zhí)行路徑,如果沒有做過統(tǒng)計(jì),CBO也就沒有做cost評估的依據(jù),所以雖然是CBO,但是實(shí)際上還是用RBO了,而且如果不常做統(tǒng)計(jì)的話,由于CBO是以統(tǒng)計(jì)為依據(jù)的,所以這時CBO的依據(jù)信息有問題,CBO也會不準(zhǔn)。 所以 DBA 需要確保定期收集統(tǒng)計(jì)信息,創(chuàng)建另一個執(zhí)行核對清單。

?????? 更多內(nèi)容,參考:

?????? ?????? Oracle 10g Statistic數(shù)據(jù)統(tǒng)計(jì)

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668723.aspx

?

11.1 創(chuàng)建存儲過程:

CREATE OR REPLACE PROCEDURE USER."ANALYZEDB"

IS

?? CURSOR get_ownertable

?? IS

????? SELECT table_name

??????? FROM user_tables;

?? ownertable?? get_ownertable%ROWTYPE;

BEGIN

?? OPEN get_ownertable;

?? LOOP

????? FETCH get_ownertable

?????? INTO ownertable;

????? EXIT WHEN get_ownertable%NOTFOUND;

????? EXECUTE IMMEDIATE??? 'analyze table '

??????????????????????? || ownertable.table_name

??????????????????????? || ' compute statistics for table for all indexes for all indexed columns ';

?? END LOOP;

EXCEPTION

?? WHEN OTHERS

?? THEN

????? RAISE;

END;

?

11.2. 將存儲過程寫進(jìn)JOB

DECLARE

? X NUMBER;

BEGIN

? SYS.DBMS_JOB.SUBMIT

? ( job?????? => X

?? ,what????? => 'ANALYZEDB;'

?? ,next_date => to_date('14-10-2009 06:00:00','dd/mm/yyyy hh24:mi:ss')

?? ,interval? => 'trunc(sysdate + 7) + 6/24'

?? ,no_parse? => FALSE

? );

? SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));

COMMIT;

END;

?

?????? 具體多長時間執(zhí)行一次,根據(jù)自己的業(yè)務(wù)來決定, 這個Job 對DB的影響是比較大的,找個業(yè)務(wù)不忙的時候來執(zhí)行。

?

12. 注意對索引的維護(hù)

??????

?????? 這塊具體參考Blog:

?????? ?????? Oracle 索引的維護(hù)

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2010/06/19/5680706.aspx

?

?

13. 部署監(jiān)控系統(tǒng)

這里的監(jiān)控系統(tǒng)包括磁盤空間,alert log日志等。 以前整理的一篇blog里有8個DBA 常用的腳本。 可以參考:

?

8個DBA最常用的監(jiān)控Oracle數(shù)據(jù)庫的常用shell腳本

http://blog.csdn.net/tianlesoftware/archive/2009/11/11/4792798.aspx

?

在補(bǔ)充幾個腳本,很簡單。

?

13.1 監(jiān)控磁盤空間并發(fā)送到郵箱:

?

Checkdisk.sh

df -k >/data/app/scripts/monitor/DiskSpace.log

/usr/bin/mailx -s "Whitney(Disk Space)" tianlesoftware@vip.qq.com < /data/app/scripts/monitor/DiskSpace.log

?

13.2 Windows 下,如果alert 的日志文件日志文件如果太大,查看起來非常麻煩,所以每天進(jìn)行一次備份,這樣只需要查看一天的即可.

back_log_file.bat

rem 復(fù)制日志文件并改名,請根據(jù)各區(qū)SID情況修改腳本
set year=%DATE:~0,4%
set month=%DATE:~5,2%
set day=%DATE:~8,2%
copy D:/oracle/admin/wbi/bdump/alert_wbi.log D:/oracle/admin/wbi/bdump/alert_wbi"%year%%month%%day%".log
rem 清空日志文件
rem 下面一句是用來清空alert_wbi.log的
cd. >D:/oracle/admin/wbi/bdump/alert_wbi.log

?

?

14. 制定備份策略

主要指制定RMAN 備份策略。 RMAN 備份的東西,細(xì)講起來也很多。 具體參考:

?????? ?????? 如何 搭建 RMAN 備份平臺

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740896.aspx

?

?

14. 做DG,RAC等高可用性并對相關(guān)環(huán)境進(jìn)行監(jiān)控

?

?????? 這塊的東西暫時還沒有整理全,等以后整理全了在補(bǔ)充。

?

DG,RAC 的安裝請參考我的Blog:

Oracle Data Gurad -- Logical Standby 相關(guān)說明

http://blog.csdn.net/tianlesoftware/archive/2010/05/07/5564208.aspx

?

Oracle Data Gurad Physical Standby 相關(guān)說明

http://blog.csdn.net/tianlesoftware/archive/2010/05/05/5557410.aspx

?

RAC 的一些概念性和原理性的知識

http://blog.csdn.net/tianlesoftware/archive/2010/02/28/5331067.aspx

?

RAW+ASM 的RAC 安裝文檔

http://blog.csdn.net/tianlesoftware/archive/2010/02/28/5332909.aspx

?

OCFS2+ASM 的RAC安裝文檔

http://blog.csdn.net/tianlesoftware/archive/2010/02/28/5331074.aspx

?

刪除歸檔日志的腳本,請參考BLog:

http://blog.csdn.net/tianlesoftware/archive/2010/01/20/5211659.aspx

?

補(bǔ)充一個腳本:

對DG 系統(tǒng)的監(jiān)控還有一個小腳本。批處理格式的。比較方便:

?

Check.sql

conn sys/PWD@SID as sysdba

host title 數(shù)據(jù)庫日常檢查

column dest_name format a30

column destination format a20

column MEMBER format a45

column 歸檔地 format a20

column TABLESPACE_NAME format a10

column FREE_RATE format a10

host cls

prompt **************************** 實(shí) 例 狀 態(tài) ************************************;

select instance_name 實(shí)例名,version 版本,status 狀態(tài),database_status 數(shù)據(jù)庫狀態(tài) from v$instance;

prompt **************************** 數(shù)據(jù)庫狀態(tài) *************************************;

select name,log_mode 歸檔模式,open_mode 打開模式 from v$database;

prompt **************************** 控制文件狀態(tài) ***********************************;

column name format a40

select status,name from v$controlfile;

prompt **************************** 日志文件狀態(tài) ***********************************;

select GROUP#,status,type,member from v$logfile;

prompt***************************** 歸檔目的地狀態(tài) *********************************;

select dest_name ,status 狀態(tài),database_mode 數(shù)據(jù)庫模式,destination 歸檔地 from v$archive_dest_status where dest_id in? ('1','2');

set heading off;

select '************數(shù)據(jù)庫已連續(xù)運(yùn)行 '|| round(a.atime-b.startup_time)||' 天 '||'*******************************************' from(select sysdate atime from dual) a,v$instance b;

set heading on;

prompt***************************** 會? 話? 數(shù) *************************************;

select sessions_current 當(dāng)前會話數(shù),sessions_highwater 實(shí)例最高值 from v$license;

prompt********************** 表空間監(jiān)控(FREE_RATE小于10%為異常) ********************;

select a.tablespace_name, round(a.total_size) "total_size(MB)",

round(a.total_size)-round(b.free_size,3) "used_size(MB)",

round(b.free_size,3) "free_size(MB)", round(b.free_size/total_size*100,2)||'%' free_rate

from ( select tablespace_name, sum(bytes)/1024/1024 total_size

?????? from dba_data_files

?????? group by tablespace_name ) a,

?????? ( select tablespace_name, sum(bytes)/1024/1024 free_size

???????? from dba_free_space

???????? group by tablespace_name ) b

?????? where a.tablespace_name = b.tablespace_name(+);

?

prompt **************************** 表空間OFFLINE(顯示為空正常) ********************;

select tablespace_name 表空間名,status 狀態(tài) from dba_tablespaces where status='OFFLINE';

prompt **************************** SEQUENCE同步數(shù) *********************************;

select max(sequence#)from v$log_history;

?

CONN sys/PWD@SID_ST as sysdba;

prompt **************************** 備庫SEQUENCE同步數(shù) *****************************;

select max(sequence#)from v$log_history;

prompt **************************** 備庫日志未應(yīng)用(顯示為空正常) *******************;

select sequence#,applied from v$archived_log where applied='NO' and sequence#>2453;

prompt **************************** 備庫日志應(yīng)用(顯示最近十個日志) *****************;

select * from(select sequence#,applied from v$archived_log order by sequence# desc) where rownum<=10;

set time on

disconnect

?

Check.bat

sqlplus /nolog @check.sql

?

?

8. 定期的做AWR,statspack 分析

Oracle AWR 介紹

http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4682300.aspx

?

statspack安裝使用 和 report 分析

http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4682329.aspx

?

?

小結(jié):

?????? 作為一個DBA,我們要考慮的是如何保證系統(tǒng)7*24的正常運(yùn)行,如何保證系統(tǒng)高效的運(yùn)行,還有就是保證數(shù)據(jù)的安全性。 所有的監(jiān)控都是輔助的,關(guān)鍵還得靠DBA,需要DBA的經(jīng)驗(yàn)來處理各種異常情況。就像電視劇《士兵突擊》里老A 袁朗 講的一句話:戰(zhàn)爭的最后, 還是人與人之間的較量,同樣對數(shù)據(jù)庫的維護(hù)最終還是要靠DBA,用存儲也罷,高性能的服務(wù)器也罷,使用更健壯的監(jiān)控的系統(tǒng)也罷。但這些都是機(jī)器,誰也不能保證這些硬件或者軟件100% 不出問題,這些只是我們的工具,就像士兵使用的搶一樣,保養(yǎng)的好,就好使,但也不能保證它不出問題。 指不定哪天就出先故障或者出現(xiàn)bug。所以經(jīng)驗(yàn)對一個DBA來說,是一筆財(cái)富。

?

最后強(qiáng)調(diào)一點(diǎn),要養(yǎng)成做備份的習(xí)慣,慎用RM 命令。 只要有備份, 就還有挽回的余地。 不經(jīng)想起去年幫一個朋友恢復(fù)過的一個數(shù)據(jù)庫。 當(dāng)時的情況是: 數(shù)據(jù)庫除了半年前的一次冷備外,沒有其他的備份,也沒有歸檔。然后有一天出了問題,朋友折騰了半天,實(shí)在搞不定。 拿到這樣的庫,我也沒辦法,最后用了最近一次的冷備還原了下。 數(shù)據(jù)丟失了半年。教訓(xùn)也是深刻的。

?

這也是中國很多小公司或者企業(yè)的現(xiàn)狀,不注重?cái)?shù)據(jù)庫的維護(hù),只要能運(yùn)行就可以了。對與這種情況,我也只能說祈求老天,不讓數(shù)據(jù)庫庫出問題,因?yàn)槌鰡栴}就是災(zāi)難。

?

我也是剛踏上DBA的路,希望能在這條路上能走的更遠(yuǎn),借用網(wǎng)友的吉言:成為明日之eygle(Oracle ACE,OCM).

玩Oracle 2年多了,從接觸Oracle 到現(xiàn)在,一直沒有停止過學(xué)習(xí)。 要學(xué)的東西太多,剛?cè)腴T的時候是這樣的感覺,現(xiàn)在還是這樣的感覺。 有時候也在想,還要學(xué)多長時間才能感覺自我良好了,有十足的自信心了。 很多朋友都想做DBA, 因?yàn)樗麄冇X得這一個高薪的行業(yè)。 但是并不是所有都明白為什么DBA是個高薪的行業(yè)。 高薪意味著壓力大,責(zé)任大。

?

現(xiàn)代化的程度越高,對數(shù)據(jù)庫的依賴性越大。 數(shù)據(jù)安全性和系統(tǒng)的安全性也就越大。比如公司業(yè)務(wù)系統(tǒng)。 數(shù)據(jù)庫是直接的存儲地方的,他的重要性是不言而喻的,宕機(jī)帶來的損失可能是按分鐘或者秒算的。 而誰對這些數(shù)據(jù)庫負(fù)責(zé)--DBA。 所以很多公司,企業(yè)都是找有經(jīng)驗(yàn)的DBA ,他們也是在為他們的系統(tǒng)買保險(xiǎn)。 這也是為什么企業(yè)不愿意招一個沒有實(shí)戰(zhàn)經(jīng)驗(yàn)的DBA來管理自己的數(shù)據(jù)庫。

?

試想某個省移動的數(shù)據(jù)庫出了問題,造成數(shù)據(jù)丟失,在比如銀行數(shù)據(jù)庫掛了。 他們帶來的損失不光是影響正常的業(yè)務(wù)運(yùn)行,還有可能是數(shù)據(jù)錯誤。假如你在銀行存了100萬,結(jié)果銀行一不小心,在數(shù)據(jù)庫里少了幾個0. 這個是誰也不愿意看到的。 當(dāng)然以上都是假設(shè)的情況。 因?yàn)橄襁@些數(shù)據(jù)重要性極高的單位,他們都有一整套數(shù)據(jù)的保護(hù)機(jī)制。 是不會發(fā)生這種情況的。

?

下面就來總結(jié)一下如何的來搭建一個數(shù)據(jù)庫平臺。 主要從參數(shù)和一些特性的配置上來說明。當(dāng)然我玩Oracle也才2年,經(jīng)驗(yàn)不足,可能對與這些參數(shù)的設(shè)置也不是很合理。

?

從網(wǎng)上看到過一句話:每個DBA心中對重要的參數(shù)都有一個標(biāo)準(zhǔn)。 我想這也是經(jīng)驗(yàn)的價值。

?

?

?

一. Linux 系統(tǒng)

?

說明,在安裝操作系統(tǒng)之前,現(xiàn)在服務(wù)器上做個RAID。一般都用RAID5.

?

1.LINUX磁盤劃分:

?? a.對于內(nèi)置2塊磁盤(146GB)的系統(tǒng),/目錄20GB,SWAP與內(nèi)存大小相當(dāng)(8GB以下內(nèi)存機(jī)器SWAP配置8GB),/boot 100MB。如果作為應(yīng)用服務(wù)器,那么其余空間建立/apps文件系統(tǒng),mke2fs –j 命令;如果作為數(shù)據(jù)庫平臺,那么建立/dba文件系統(tǒng)20GB,其余建立/u01文件系統(tǒng)。

?? b.對于內(nèi)置4-6塊磁盤的系統(tǒng),/目錄60GB,SWAP與內(nèi)存大小相當(dāng)(8GB以下內(nèi)存機(jī)器SWAP配置8GB),/boot 100MB。如果作為應(yīng)用服務(wù)器,那么其余空間建立/apps文件系統(tǒng),mke2fs –j 命令;如果作為數(shù)據(jù)庫平臺,那么建立/dba文件系統(tǒng)40GB,其余建立/u01文件系統(tǒng)。

?? c.對于oracle數(shù)據(jù)文件目錄文件系統(tǒng)使用mke2fs –j –T largefiles命令建立

?

2.對于非外接存儲情況下:

a.ORACLE目錄標(biāo)準(zhǔn):ORACLE_HOME=/dba/app/oracle/product/10.2.0.4(按版本指定)

???? ORACLE_BASE=/dba? (dump目錄為/dba/admin/sid/)

???? Datafile目錄為/u01/oradata/sid

???? 歸檔空間目錄/u01/oradata/archive_sid

?

?? b.對于有外接存儲(/u02…)情況下:

ORACLE目錄標(biāo)準(zhǔn):ORACLE_HOME=/dba/app/oracle/product/10.2.0.4(按版本指定)

????? ORACLE_BASE=/u01? (dump目錄為/u01/admin/sid/)

????? Datafile目錄為/u02/oradata/sid??

????? 歸檔空間目錄/u01/oradata/archive_sid

?

c.ORACLE建庫采用CUSTOMER方式,直接更改初始UNDO和TEMP空間8GB(或者4GB,或者通過增加文件數(shù)目到更大,根據(jù)業(yè)務(wù)系統(tǒng)),system空間512MB(或者1GB)。Redolog為100MB,單個數(shù)據(jù)文件大小以8GB為宜(因EXT3文件系統(tǒng)特性使然),建議數(shù)據(jù)文件一次性劃分到8G, 以保證數(shù)據(jù)文件的連續(xù)性。

?

3.參數(shù)及服務(wù)配置:

? 方法一:建立NTP時間同步服務(wù),/etc/ntp.conf中加入server 10.0.30.172,執(zhí)行# ntpdate 10.0.30.172,# service ntpd start ,# chkconfig --level 235 ntpd on

?

? 方法二: 時間同步配置(編輯crontab)

? 輸入命令:ntpdate 10.0.30.172

? crontab –e(編輯crontab)

? 按i進(jìn)入輸入狀態(tài),輸入以下一行:

? 01 01 * * * root /usr/sbin/ntpdate 10.0.30.172 >/dev/null 2>&1(每天01:01與時間服務(wù)器10.0.30.172同步時間)

? :wq!(保存退出)

?

更多信息參考我的Blog: Linux 時間同步配置

http://blog.csdn.net/tianlesoftware/archive/2010/02/22/5315587.aspx

?

?

4. Linux 內(nèi)核參數(shù)修改

? 4.1 修改內(nèi)核參數(shù)/etc/sysctl.conf,對于8GB-16GB內(nèi)存機(jī)器

????? kernel.shmall = 2097152 à 4194304 ( 4KB單位,總內(nèi)存大小)

kernel.shmmax = ?à8589934592(實(shí)際物理內(nèi)存的2/3)

kernel.shmmni = 4096

???? 對于16GB內(nèi)存以上機(jī)器

????? kernel.shmall = 2097152 à 8388608? ( 4KB單位,總內(nèi)存大小)

kernel.shmmax = ?à10179869184(比實(shí)際物理內(nèi)存的2/3)

kernel.shmmni = 4096 –>8192

? net.ipv4.ip_local_port_range = 9000 65500

? net.core.rmem_default = 262144

? net.core.rmem_max = 4194304

? net.core.wmem_default = 262144

? net.core.wmem_max = 1048586

?

?以前也整理的相關(guān)的資料,詳見blog: Linux 內(nèi)核參數(shù)及Oracle相關(guān)參數(shù)調(diào)整

http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668741.aspx

?

??

?4.2.根據(jù)應(yīng)用情況修改進(jìn)程數(shù)限制 /etc/security/limits.conf

???? *?????????????? soft??????????? nproc?????????? 2047

*?????????????? hard?????????? nproc?????????? 16384

*?????????????? soft??????????? nofile????????? 1024 ->2048

*?????????????? hard??????????? nofile????????? 65536

?

?

注:關(guān)于內(nèi)核參數(shù)的修改,在Oracle 官方的安裝文檔里也有相關(guān)說明:

http://download.oracle.com/docs/cd/B28359_01/install.111/b32002/pre_install.htm#BABFDGHJ

在連接中的第 2.7 Configure Oracle Installation Owner Shell Limits 節(jié)。也有詳細(xì)介紹。

?

?

?

二. Oracle 配置

?

安裝實(shí)例之前,記得修改db_files , maxdatafiles 和MAXLOGHISTORY 參數(shù)。? 這2個參數(shù)是放在控制文件里的,如果在安裝實(shí)例的時候沒有設(shè)置成合適的值,以后調(diào)整起來會很麻煩。

?

具體參考:

Oracle db_files 和 maxdatafiles 說明

http://blog.csdn.net/tianlesoftware/archive/2011/06/07/6530421.aspx

?

?

1. 創(chuàng)建pfile 參數(shù)

Oracle 默認(rèn)只會創(chuàng)建spfile,但這是個二進(jìn)制文件,無法進(jìn)行修改。 為了保險(xiǎn)期間。我們要在開始就創(chuàng)建一個pfile 文件,語句很簡單,但作用不可忽略。

SQL>Create pfile from spfile;

?

Windows 下生成的pfile 文件默認(rèn)在$ORACLE_HOME/database 下

Linux 默認(rèn)位置在$ORACLE_HOME/dbs 下

?

2. SGA, PGA 設(shè)置

?

先來看幾個SQL

SQL> show parameter sga

NAME????????????????? TYPE??????? VALUE

------------------------------------ ----------- -------

lock_sga??????????????? boolean???? FALSE

pre_page_sga??????????? boolean???? FALSE

sga_max_size?????????? ?big integer ?584M

sga_target?????????????? big integer ?584M

SQL> show parameter pga

NAME??????????????????? TYPE??????? VALUE

------------------------------------ ----------- ------

pga_aggregate_target??????? big integer ???194M

SQL> select name,value ,ISSYS_MODIFIABLE from v$parameter where name like 'sga%';

NAME??????????? VALUE?????????? ISSYS_MOD

--------------- --------------- ---------

sga_max_size??? 612368384?????? FALSE

sga_target????? 612368384?????? IMMEDIATE

SQL> select name,value,issys_modifiable from v$parameter where name like 'pga%';

NAME??????? ??????VALUE??? ISSYS_MOD

-------------------- ?????---------- ???---------

pga_aggregate_target ?203423744? ?IMMEDIATE

如果ISSYS_MODIFIABLE 返回的是false,說明該參數(shù)無法用alter system語句動態(tài)修改,需要重啟數(shù)據(jù)庫。

所以sga_max_size 是不可以動態(tài)調(diào)整的。

?

在安裝之后我們要對PGA 和 SGA 進(jìn)行設(shè)置。 因?yàn)閟ga_max_size 是非動態(tài)的,修改后需要重啟,所以我們在開始設(shè)置的時候可以把sga_max_size設(shè)大一點(diǎn)。 sga_target 是動態(tài)的,我們可以根絕需要進(jìn)行調(diào)整。這個調(diào)整主要根據(jù)命中率來。這里就不多說。當(dāng)指定SGA_TARGET小于SGA_MAX_SIZE,實(shí)例重啟后,SGA_MAX_SIZE就自動變?yōu)楹蚐GA_TARGET一樣的值了。

?

對于OLTP系統(tǒng),一般的建議是將SGA_MAX_SIZE 設(shè)為物理內(nèi)存的60%,PGA 設(shè)為20%。

?

下表是一個參考值:

系統(tǒng)內(nèi)存

SGA_MAX_SIZE值

1G

400-500M

2G

1G

4G

2500M

8G

5G

?

?

這個參數(shù)修改可以在pfile里修改,也可以通過命令直接來:

SQL> alter system set pga_aggregate_target=150m scope=spfile;

系統(tǒng)已更改。

SQL> alter system set sga_target=500m scope=spfile;

系統(tǒng)已更改。

SQL> alter system set sga_max_size=510m scope=spfile;? --要是參數(shù)生效,需要重啟

系統(tǒng)已更改。

SQL> alter system set sga_max_size=510m scope=both;

alter system set sga_max_size=510m scope=both

???????????????? *

第 1 行出現(xiàn)錯誤:

ORA-02095: 無法修改指定的初始化參數(shù)

SQL> alter system set sga_target=550m scope=both;

系統(tǒng)已更改。

SQL> show parameter sga

NAME?????????????? TYPE??????? VALUE

------------------------------------ ----------- --------

lock_sga????????????? boolean???? FALSE

pre_page_sga????????? boolean???? FALSE

sga_max_size????????? big integer ?584M

sga_target???????????? big integer ?550M

?

以上都是針對Oracle 10g 版本的。 如果是9i的話,還需要對每個參數(shù)進(jìn)行配置,如Share Pool,DB buffer,Java Pool,redo log buffer等。

?

Oracle 內(nèi)存詳細(xì)分析請參考CSDN blog:Oracle 內(nèi)存 架構(gòu) 詳解

http://blog.csdn.net/tianlesoftware/archive/2010/05/16/5594080.aspx

?

?

3. UNDO, TEMP 表空間設(shè)置

?

3.1 UNDO

undo 表空間放的是數(shù)據(jù)的前鏡像,當(dāng)做某個記錄多修改時,原記錄就會放到undo 中。所以Undo 表空間的大小影響數(shù)據(jù)的恢復(fù)能力。 對它的配置要用點(diǎn)心思。

SQL> show parameter undo

NAME???????????????????????????????? TYPE??????? VALUE

------------------------------------ ----------- -----------

undo_management????????????????????? string????? AUTO

undo_retention?????????????????????? integer???? 900

undo_tablespace????????????????????? string????? UNDOTBS1

?

undo_retention 只是指定undo 數(shù)據(jù)的過期時間,默認(rèn)是900s,15分鐘。建議改成10800s,即3個小時。

?

SQL> alter system set undo_retention=10800 scope=both;

系統(tǒng)已更改。

?

至于undo 表空間的大小,如果磁盤空間允許,就將表空間設(shè)為32G,分成4個數(shù)據(jù)文件,單個數(shù)據(jù)文件8G。 如果空間有限,就設(shè)為8G或者16G(8*2)。

不過現(xiàn)在的服務(wù)器硬盤都是比較大,如果放在存儲上,那空間更大,所以32G。相對而言就就是一個很小的空間了。

?

ALTER DATABASE DATAFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF' RESIZE 50M;

?

ALTER TABLESPACE UNDOTBS1 ADD DATAFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS02.DBF' SIZE 5M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED;

?

大量的DML 操作會產(chǎn)生大量的undo,尤其是update,delete。 當(dāng)Undo 特別大的時候,我們可以把undo 刪了重建。

?

具體參考我的blog:Oracle undo 回滾段管理

http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx

?

3.2 Temp

臨時表空間主要用途是在數(shù)據(jù)庫進(jìn)行排序運(yùn)算、管理索引、訪問視圖等操作時提供臨時的運(yùn)算空間,當(dāng)運(yùn)算完成之后系統(tǒng)會自動清理。當(dāng)oracle里需要用到sort的時候,PGA中sort_area_size大小不夠時,將會把數(shù)據(jù)放入臨時表空間里進(jìn)行排序,同時如果有異常情況的話,也會被放入臨時表空間,正常來說,在完成Select語句、create index等一些使用TEMP表空間的排序操作后,Oracle是會自動釋放掉臨時段的。但有些有侯我們則會遇到臨時段沒有被釋放,TEMP表空間幾乎滿的狀況,甚至是我們重啟了數(shù)據(jù)庫仍沒有解決問題。

?

ALTER DATABASE TEMPFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TEMP01.DBF' RESIZE 30M;

?

ALTER TABLESPACE TEMP ADD TEMPFILE 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TEMP02.DBF' SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

?

和UNDO 一樣,可以設(shè)為32G (4*8G)或者16G(2*8G),具體情況具體對待。如果遇到temp tablespace 滿了的話,我們也可以重建其表空間。 具體操作方法,參考blog:Oracle Temp 臨時表空間

http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4697417.aspx

?

4. 修改sessions 和 processes 參數(shù)

?? 數(shù)據(jù)庫默認(rèn)的sessions 是170,Processes 是150. 這2個數(shù)值肯定是不能滿足系統(tǒng)需要的。我們需要把這2個參數(shù)調(diào)大一點(diǎn)。 方法還是一樣,可以直接修改pfile,也可以用SQL. 建議把processes改成1000.sessions 改成2000. 當(dāng)然具體情況具體對待。

SQL> select name,value,issys_modifiable from v$parameter where name='sessions';

NAME??????? VALUE????? ISSYS_MOD

-------------------- ---------- ---------

sessions?????? 170??????? FALSE

SQL> select name,value,issys_modifiable from v$parameter where name='processes';

NAME???????? VALUE????? ISSYS_MOD

-------------------- ---------- ---------

processes?????? 150??????? FALSE

?

從上面的結(jié)果我們可以知道,修改這2個參數(shù)必須重啟數(shù)據(jù)庫。

SQL> alter system set sessions=2000 scope=spfile;

系統(tǒng)已更改。

SQL> alter system set processes=1000 scope=spfile;

系統(tǒng)已更改。

?

?

5. 啟動歸檔模式,并部署定期刪除歸檔文件腳本.

生產(chǎn)庫必定運(yùn)行在歸檔模式下,因?yàn)橥ㄟ^歸檔,我們對數(shù)據(jù)進(jìn)行恢復(fù)。我們RMAN 備份,Data Guard也需要?dú)w檔文件。

數(shù)據(jù)庫歸檔非歸檔的切換比較簡單。

SQL> alter system set log_archive_dest_1='location=/u01/newccs_archive';

SQL> shutdown immediate

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;

SQL> archive log list;

Database log mode????????????? Archive Mode

Automatic archival???????????? Enabled

Archive destination??????????? /u01/newccs_archive

Oldest online log sequence???? 27622

Next log sequence to archive?? 0

Current log sequence?????????? 27624

?

Oracle 歸檔與非歸檔的切換

http://blog.csdn.net/tianlesoftware/archive/2009/10/19/4693470.aspx

?

要強(qiáng)調(diào)的一點(diǎn),在切換為歸檔之前一定要指定歸檔目錄,即log_archive_dest_1。 這個目錄用來指定歸檔文件存放的位置,如果不指定,就會放到閃回區(qū)。 閃回區(qū)默認(rèn)只有2G,一但滿了之后就會出現(xiàn)問題,如導(dǎo)致數(shù)據(jù)庫hang或者不能啟動。 這個也是初學(xué)者容易犯的問題。 要是遇到這種問題,處理方法參考我的blog:

?

ORA-16014: log string sequence# string not archived, no available destinations Flash Recovery Area 空間不足

http://blog.csdn.net/tianlesoftware/archive/2010/04/29/5537550.aspx

?

刪除歸檔日志的腳本,請參考BLog:

http://blog.csdn.net/tianlesoftware/archive/2010/01/20/5211659.aspx

?

6. 開啟Flashback

Flashback 技術(shù)是以Undo segment中的內(nèi)容為基礎(chǔ)的, 因此受限于UNDO_RETENTON參數(shù)。要使用flashback 的特性,必須啟用自動撤銷管理表空間。

在Oracle 10g中, Flash back家族分為以下成員: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三種) 和Flashback Table。

Flashback 是不完全恢復(fù)的一種補(bǔ)充,它很靈活。但是Flashback Database默認(rèn)是關(guān)閉的,所以我們要啟動它。

?

要注意的是:啟動它必須在mount 狀態(tài)

SQL> startup mount

SQL> select name, current_scn, flashback_on from v$database;

NAME????? CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

ORCL??????????????? 0 NO

SQL> alter database flashback on;

數(shù)據(jù)庫已更改。

SQL> select name, current_scn, flashback_on from v$database;

NAME????? CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

ORCL??????????????? 0 YES

?

?

Oracle Flashback 技術(shù) 總結(jié)

http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4677378.aspx

?

7. 檢查redo

Redo 里記錄的是數(shù)據(jù)庫的操作。 在相關(guān)事務(wù)操作的時候,都會是先寫redo,等redo 寫完會再去修改相應(yīng)的數(shù)據(jù)。 這也Oracle的一種機(jī)制。如果出現(xiàn)問題,也可以通過這些記錄進(jìn)行恢復(fù)。

Redo 默認(rèn)有3個組,每個組有一個文件,每個文件50M。

?

?????? 將redo log 的文件大小改成100M一個。 每組創(chuàng)建2個成員。 最好將每組的2個成員放在不同的磁盤上。 因?yàn)閷憆edo 的時候是并行的,放在一起,可能會出現(xiàn)等待事件:Log file parallel write。

?????? 關(guān)于等待事件,參考:

?????? ?????? Oracle 常見的33個等待事件

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2010/08/12/5807800.aspx

?

與控制文件一樣,如果每組具有多個成員(事實(shí)也應(yīng)當(dāng)如此),那么仍然不必?fù)?dān)心保持這些成員同步的問題。LGWR能夠確保對所有成員進(jìn)行并行寫操作,從而使這些成員完全相同。如果丟失某個組的一個成員,只要還存在其他成員,數(shù)據(jù)庫仍然能夠繼續(xù)運(yùn)行。

?

Redo 空間的不足還會導(dǎo)致一種警告: checkpoint not complete. 具體參考Blog:

?

Redo Log 和Checkpoint not complete

http://blog.csdn.net/tianlesoftware/archive/2009/12/01/4908066.aspx

?

RedoLog Checkpoint 和 SCN關(guān)系

http://blog.csdn.net/tianlesoftware/archive/2010/01/25/5251916.aspx

?

?

?

顯示當(dāng)前歸檔日志組和成員:
SQL> select group#,member from v$logfile;

GROUP# MEMBER

---------- ---------------------------------------------------

? 3 ?????? ?????? D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG

? 2 ?????? ?????? D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG

? 1 ?????? ?????? D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG
??
添加redo log組:
SQL> alter database add logfile group 4 ('D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO04.LOG') size 10m;

SQL> select group#,member from v$logfile;

??? GROUP# MEMBER

---------- ----------------------------------------------------

???????? 3 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG

???????? 2 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG

???????? 1 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG

???????? 4 D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO04.LOG

檢查新加入的log狀態(tài)
SQL> select group#,sequence#,bytes,members,status from v$log;

?

??? GROUP#? SEQUENCE#????? BYTES??? MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

???????? 1???????? 17?? 52428800????????? 1 CURRENT

???????? 4????????? 0?? 10485760????????? 1 UNUSED

???????? 3???????? 16?? 52428800????????? 1 INACTIVE

???????? 2???????? 15?? 52428800????????? 1 INACTIVE
??? (雖然這里是UNUSED的狀態(tài),但是通過切換日志文件或者數(shù)據(jù)庫自動切換,該文件會被改為active狀態(tài))
??
添加新的文件到group 1
??? SQL> alter database add logfile member 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG' to group 1;
?????? SQL> select group#,sequence#,bytes,members,status from v$log;

??? GROUP#? SEQUENCE#????? BYTES??? MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

???????? 1???????? 17?? 52428800????????? 2 CURRENT

???????? 4????????? 0?? 10485760????????? 1 UNUSED

???????? 3???????? 16?? 52428800????????? 1 INACTIVE

???????? 2???????? 15?? 52428800????????? 1 INACTIVE
??? 這里的group組中的member就變?yōu)?;


?????? SQL> select member from v$logfile where group#=1;

MEMBER

-------------------------------------------------------

D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG

D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG

刪除新增的group 4
??? SQL> alter database drop logfile group 4;

刪除新增的group 1的logfile;
??? SQL> alter database drop logfile member 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG';

清空logfile:
??? SQL> alter database clear logfile 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG';

??
?????? SQL> select group#,sequence#,bytes,members,status from v$log;

??? GROUP#? SEQUENCE#????? BYTES??? MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

???????? 1???????? 17?? 52428800????????? 1 ACTIVE

???????? 2???????? 18?? 52428800????????? 1 CURRENT

???????? 3????????? 0?? 52428800????????? 1 UNUSED

8. 設(shè)置CONTROL_FILE_RECORD_KEEP_TIME 參數(shù)

?????? 該參數(shù)設(shè)置控制文件中存儲備份記錄的時間,在用RMAN的時候會涉及到這個參數(shù)。 備份記錄包括完全的數(shù)據(jù)庫備份記錄,以及指定的數(shù)據(jù)文件,控制文件,參數(shù)文件和歸檔目錄的備份記錄。數(shù)據(jù)庫參數(shù)CONTROL_FILE_RECORD_KEEP_TIME以天為單位(默認(rèn)值為7天),因此在默認(rèn)情況下,Oracle 會將RMAN備份和恢復(fù)記錄保存7天。 可以將該參數(shù)設(shè)置為0到365之間的任意值。

?????? CONTROL_FILE_RECORD_KEEP_TIME參數(shù)會影響一系列的數(shù)據(jù)庫操作。 首先,產(chǎn)生RMAN備份時,由于與這些備份相關(guān)的記錄存儲在控制文件中,所以該參數(shù)直接影響數(shù)據(jù)庫控制文件的大小。 備份記錄將不斷的保存在控制文件中,控制文件將耗盡空間。 這時,Oracle 會擴(kuò)展控制文件來調(diào)整備份記錄所需的存儲空間。 此外,設(shè)置為0時,將禁止擴(kuò)展控制文件,并且會使得RMAN備份的保存周期不穩(wěn)定。

?????? 建議將CONTROL_FILE_RECORD_KEEP_TIME 參數(shù)設(shè)置為不小于選中數(shù)據(jù)庫的備份保存周期,否則就可能在備份介質(zhì)上有數(shù)據(jù)庫備份,但是控制文件不存在與備份相關(guān)的備份記錄,在這種情況下,將無法恢復(fù)這些較早的文件。這個參數(shù)根據(jù)自己的本份策略來決定。

??????

SQL> select name,value from v$parameter where name='control_file_record_keep_time';

NAME?????????????????????????? VALUE

------------------------------ -------------------------------------------------

control_file_record_keep_time?? 7

SQL> alter system set control_file_record_keep_time=20;

系統(tǒng)已更改。

SQL> show parameter control_file_record_keep_time

NAME???????????????????????????????? TYPE??????? VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time?????? ?integer???? 20

SQL>

?

關(guān)于RMAN與control_file_record_keep_time的內(nèi)容參考:

?????? RMAN 系列(二) ---- RMAN 設(shè)置和配置

?????? http://blog.csdn.net/tianlesoftware/archive/2010/06/16/5674309.aspx

?

9. 設(shè)置open_links_per_instance 和 open_links 參數(shù)

?????? 關(guān)于這2個參數(shù)的說明,參考Blog:

?????? open_links_per_instance 和 open_links 參數(shù)說明

?????? http://blog.csdn.net/tianlesoftware/archive/2010/12/22/6090729.aspx

??????

?????? 這2個參數(shù)修改之后,需要重啟才能生效,所以,在安裝DB的時候,就把這個參數(shù)修改了。 默認(rèn)值是4,如果用到話就太小了。 所以在安裝的時候,就給修改了。 修改建議值:100。

?

?????? SQL> alter system set open_links=100 scope=spfile;

?????? 系統(tǒng)已更改。

10.修改用戶的profile 參數(shù)

SQL>alter profile PROFILE_PERSONAL limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

?

11. 部署statistic Job

?????? Oracle 10g statistic數(shù)據(jù)統(tǒng)計(jì),Oracle會根據(jù)這些統(tǒng)計(jì)信息來決定是走RBO(Rule-BasedOptimization),還是走CBO(Cost-BasedOptimization),會去選擇哪種執(zhí)行計(jì)劃更劃算,影響是否走相關(guān)的索引等.如果是CBO的話,它依靠準(zhǔn)確的(或者說比較準(zhǔn)確的)統(tǒng)計(jì)信息來產(chǎn)生優(yōu)化的執(zhí)行路徑,如果沒有做過統(tǒng)計(jì),CBO也就沒有做cost評估的依據(jù),所以雖然是CBO,但是實(shí)際上還是用RBO了,而且如果不常做統(tǒng)計(jì)的話,由于CBO是以統(tǒng)計(jì)為依據(jù)的,所以這時CBO的依據(jù)信息有問題,CBO也會不準(zhǔn)。 所以 DBA 需要確保定期收集統(tǒng)計(jì)信息,創(chuàng)建另一個執(zhí)行核對清單。

?????? 更多內(nèi)容,參考:

?????? ?????? Oracle 10g Statistic數(shù)據(jù)統(tǒng)計(jì)

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668723.aspx

?

11.1 創(chuàng)建存儲過程:

CREATE OR REPLACE PROCEDURE USER."ANALYZEDB"

IS

?? CURSOR get_ownertable

?? IS

????? SELECT table_name

??????? FROM user_tables;

?? ownertable?? get_ownertable%ROWTYPE;

BEGIN

?? OPEN get_ownertable;

?? LOOP

????? FETCH get_ownertable

?????? INTO ownertable;

????? EXIT WHEN get_ownertable%NOTFOUND;

????? EXECUTE IMMEDIATE??? 'analyze table '

??????????????????????? || ownertable.table_name

??????????????????????? || ' compute statistics for table for all indexes for all indexed columns ';

?? END LOOP;

EXCEPTION

?? WHEN OTHERS

?? THEN

????? RAISE;

END;

?

11.2. 將存儲過程寫進(jìn)JOB

DECLARE

? X NUMBER;

BEGIN

? SYS.DBMS_JOB.SUBMIT

? ( job?????? => X

?? ,what????? => 'ANALYZEDB;'

?? ,next_date => to_date('14-10-2009 06:00:00','dd/mm/yyyy hh24:mi:ss')

?? ,interval? => 'trunc(sysdate + 7) + 6/24'

?? ,no_parse? => FALSE

? );

? SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));

COMMIT;

END;

?

?????? 具體多長時間執(zhí)行一次,根據(jù)自己的業(yè)務(wù)來決定, 這個Job 對DB的影響是比較大的,找個業(yè)務(wù)不忙的時候來執(zhí)行。

?

12. 注意對索引的維護(hù)

??????

?????? 這塊具體參考Blog:

?????? ?????? Oracle 索引的維護(hù)

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2010/06/19/5680706.aspx

?

?

13. 部署監(jiān)控系統(tǒng)

這里的監(jiān)控系統(tǒng)包括磁盤空間,alert log日志等。 以前整理的一篇blog里有8個DBA 常用的腳本。 可以參考:

?

8個DBA最常用的監(jiān)控Oracle數(shù)據(jù)庫的常用shell腳本

http://blog.csdn.net/tianlesoftware/archive/2009/11/11/4792798.aspx

?

在補(bǔ)充幾個腳本,很簡單。

?

13.1 監(jiān)控磁盤空間并發(fā)送到郵箱:

?

Checkdisk.sh

df -k >/data/app/scripts/monitor/DiskSpace.log

/usr/bin/mailx -s "Whitney(Disk Space)" tianlesoftware@vip.qq.com < /data/app/scripts/monitor/DiskSpace.log

?

13.2 Windows 下,如果alert 的日志文件日志文件如果太大,查看起來非常麻煩,所以每天進(jìn)行一次備份,這樣只需要查看一天的即可.

back_log_file.bat

rem 復(fù)制日志文件并改名,請根據(jù)各區(qū)SID情況修改腳本
set year=%DATE:~0,4%
set month=%DATE:~5,2%
set day=%DATE:~8,2%
copy D:/oracle/admin/wbi/bdump/alert_wbi.log D:/oracle/admin/wbi/bdump/alert_wbi"%year%%month%%day%".log
rem 清空日志文件
rem 下面一句是用來清空alert_wbi.log的
cd. >D:/oracle/admin/wbi/bdump/alert_wbi.log

?

?

14. 制定備份策略

主要指制定RMAN 備份策略。 RMAN 備份的東西,細(xì)講起來也很多。 具體參考:

?????? ?????? 如何 搭建 RMAN 備份平臺

?????? ?????? http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740896.aspx

?

?

14. 做DG,RAC等高可用性并對相關(guān)環(huán)境進(jìn)行監(jiān)控

?

?????? 這塊的東西暫時還沒有整理全,等以后整理全了在補(bǔ)充。

?

DG,RAC 的安裝請參考我的Blog:

Oracle Data Gurad -- Logical Standby 相關(guān)說明

http://blog.csdn.net/tianlesoftware/archive/2010/05/07/5564208.aspx

?

Oracle Data Gurad Physical Standby 相關(guān)說明

http://blog.csdn.net/tianlesoftware/archive/2010/05/05/5557410.aspx

?

RAC 的一些概念性和原理性的知識

http://blog.csdn.net/tianlesoftware/archive/2010/02/28/5331067.aspx

?

RAW+ASM 的RAC 安裝文檔

http://blog.csdn.net/tianlesoftware/archive/2010/02/28/5332909.aspx

?

OCFS2+ASM 的RAC安裝文檔

http://blog.csdn.net/tianlesoftware/archive/2010/02/28/5331074.aspx

?

刪除歸檔日志的腳本,請參考BLog:

http://blog.csdn.net/tianlesoftware/archive/2010/01/20/5211659.aspx

?

補(bǔ)充一個腳本:

對DG 系統(tǒng)的監(jiān)控還有一個小腳本。批處理格式的。比較方便:

?

Check.sql

conn sys/PWD@SID as sysdba

host title 數(shù)據(jù)庫日常檢查

column dest_name format a30

column destination format a20

column MEMBER format a45

column 歸檔地 format a20

column TABLESPACE_NAME format a10

column FREE_RATE format a10

host cls

prompt **************************** 實(shí) 例 狀 態(tài) ************************************;

select instance_name 實(shí)例名,version 版本,status 狀態(tài),database_status 數(shù)據(jù)庫狀態(tài) from v$instance;

prompt **************************** 數(shù)據(jù)庫狀態(tài) *************************************;

select name,log_mode 歸檔模式,open_mode 打開模式 from v$database;

prompt **************************** 控制文件狀態(tài) ***********************************;

column name format a40

select status,name from v$controlfile;

prompt **************************** 日志文件狀態(tài) ***********************************;

select GROUP#,status,type,member from v$logfile;

prompt***************************** 歸檔目的地狀態(tài) *********************************;

select dest_name ,status 狀態(tài),database_mode 數(shù)據(jù)庫模式,destination 歸檔地 from v$archive_dest_status where dest_id in? ('1','2');

set heading off;

select '************數(shù)據(jù)庫已連續(xù)運(yùn)行 '|| round(a.atime-b.startup_time)||' 天 '||'*******************************************' from(select sysdate atime from dual) a,v$instance b;

set heading on;

prompt***************************** 會? 話? 數(shù) *************************************;

select sessions_current 當(dāng)前會話數(shù),sessions_highwater 實(shí)例最高值 from v$license;

prompt********************** 表空間監(jiān)控(FREE_RATE小于10%為異常) ********************;

select a.tablespace_name, round(a.total_size) "total_size(MB)",

round(a.total_size)-round(b.free_size,3) "used_size(MB)",

round(b.free_size,3) "free_size(MB)", round(b.free_size/total_size*100,2)||'%' free_rate

from ( select tablespace_name, sum(bytes)/1024/1024 total_size

?????? from dba_data_files

?????? group by tablespace_name ) a,

?????? ( select tablespace_name, sum(bytes)/1024/1024 free_size

???????? from dba_free_space

???????? group by tablespace_name ) b

?????? where a.tablespace_name = b.tablespace_name(+);

?

prompt **************************** 表空間OFFLINE(顯示為空正常) ********************;

select tablespace_name 表空間名,status 狀態(tài) from dba_tablespaces where status='OFFLINE';

prompt **************************** SEQUENCE同步數(shù) *********************************;

select max(sequence#)from v$log_history;

?

CONN sys/PWD@SID_ST as sysdba;

prompt **************************** 備庫SEQUENCE同步數(shù) *****************************;

select max(sequence#)from v$log_history;

prompt **************************** 備庫日志未應(yīng)用(顯示為空正常) *******************;

select sequence#,applied from v$archived_log where applied='NO' and sequence#>2453;

prompt **************************** 備庫日志應(yīng)用(顯示最近十個日志) *****************;

select * from(select sequence#,applied from v$archived_log order by sequence# desc) where rownum<=10;

set time on

disconnect

?

Check.bat

sqlplus /nolog @check.sql

?

?

8. 定期的做AWR,statspack 分析

Oracle AWR 介紹

http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4682300.aspx

?

statspack安裝使用 和 report 分析

http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4682329.aspx

?

?

小結(jié):

?????? 作為一個DBA,我們要考慮的是如何保證系統(tǒng)7*24的正常運(yùn)行,如何保證系統(tǒng)高效的運(yùn)行,還有就是保證數(shù)據(jù)的安全性。 所有的監(jiān)控都是輔助的,關(guān)鍵還得靠DBA,需要DBA的經(jīng)驗(yàn)來處理各種異常情況。就像電視劇《士兵突擊》里老A 袁朗 講的一句話:戰(zhàn)爭的最后, 還是人與人之間的較量,同樣對數(shù)據(jù)庫的維護(hù)最終還是要靠DBA,用存儲也罷,高性能的服務(wù)器也罷,使用更健壯的監(jiān)控的系統(tǒng)也罷。但這些都是機(jī)器,誰也不能保證這些硬件或者軟件100% 不出問題,這些只是我們的工具,就像士兵使用的搶一樣,保養(yǎng)的好,就好使,但也不能保證它不出問題。 指不定哪天就出先故障或者出現(xiàn)bug。所以經(jīng)驗(yàn)對一個DBA來說,是一筆財(cái)富。

?

最后強(qiáng)調(diào)一點(diǎn),要養(yǎng)成做備份的習(xí)慣,慎用RM 命令。 只要有備份, 就還有挽回的余地。 不經(jīng)想起去年幫一個朋友恢復(fù)過的一個數(shù)據(jù)庫。 當(dāng)時的情況是: 數(shù)據(jù)庫除了半年前的一次冷備外,沒有其他的備份,也沒有歸檔。然后有一天出了問題,朋友折騰了半天,實(shí)在搞不定。 拿到這樣的庫,我也沒辦法,最后用了最近一次的冷備還原了下。 數(shù)據(jù)丟失了半年。教訓(xùn)也是深刻的。

?

這也是中國很多小公司或者企業(yè)的現(xiàn)狀,不注重?cái)?shù)據(jù)庫的維護(hù),只要能運(yùn)行就可以了。對與這種情況,我也只能說祈求老天,不讓數(shù)據(jù)庫庫出問題,因?yàn)槌鰡栴}就是災(zāi)難。

?

我也是剛踏上DBA的路,希望能在這條路上能走的更遠(yuǎn),借用網(wǎng)友的吉言:成為明日之eygle(Oracle ACE,OCM).

-------------------------------------------------------------------------------------------------------------------------------------------------------

轉(zhuǎn)載來源戴明明的博客

http://blog.csdn.net/tianlesoftware/article/details/5602291

總結(jié)

以上是生活随笔為你收集整理的如何搭建一个数据库服务器平台 .的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。