Oracle11g體系-課堂筆記_第1頁
Oracle11g體系-課堂筆記_第2頁
Oracle11g體系-課堂筆記_第3頁
Oracle11g體系-課堂筆記_第4頁
Oracle11g體系-課堂筆記_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Oraclellg體系-課堂筆記

第一部分體系架構

第一章:實例與數(shù)據(jù)庫

1.1Oracle基礎架構及應用環(huán)境

OverviewofPrimaryComponents

User

process

Server、

process)

PGA

n

CDRZKGLe

1-3Copyright?OracleCorporation,2002.Allrightsreserved.

1.1.1OracIeServer的基本結構

1)oracleserver:database+instance

2)database:datafile>controlfile>redologfile

3)instance:aninstanceaccessadatabase

4)oraclememory:sga+pga

5)instance:sga+backgroudprocess

1.1.2系統(tǒng)全局區(qū)SGA:

1)在一個instance只有一個sga

2)sga為所有session共享,隨著instance啟動而分配

3)instancedown,sga被釋放

1.2SGA的基本組件:

1)sharedpooI

共享池是對SQL、PL/SQL程序進行語法分析、編譯、執(zhí)行的內(nèi)存區(qū)域。

共享池由庫緩存(librarycache),和數(shù)據(jù)字典緩存(datadictionarycache)以及結果緩存(resultcache)等組成。

共享池的大小直接影響數(shù)據(jù)庫的性能。

關于sharedpool中的幾個概念

?librarycache:

sql和plsql的解析場所,存放sql/plsql語句代碼,以及它們的執(zhí)行計劃。以備其他用戶共享

②datadictionarycache

存放重要的數(shù)據(jù)字典信息,以備其他用戶共享使用

③serverresultcache:

存放服務器端的SQL結果集及PL/SQL函數(shù)返回值

④UserGlobalArea(UGA):

共享服務器連接模式下如果沒有配置largepool,則UGA屬于SGA的sharedpool,專用連接模式時UGA屬于PGA

2)databasebuffercache(PPT-II-328)

用于存儲從磁盤數(shù)據(jù)文件中讀入的數(shù)據(jù),為所有用戶共享。

服務器進程(serverprocess)負責將數(shù)據(jù)文件的數(shù)據(jù)從磁盤讀入到數(shù)據(jù)緩沖區(qū)中,當后續(xù)的請求需要這些數(shù)據(jù)時如果在內(nèi)存中找

到,則不需要再從磁盤讀取。

數(shù)據(jù)緩沖區(qū)中被修改的數(shù)據(jù)塊(臟塊)由后臺進程DBWR將其寫入磁盤。

數(shù)據(jù)緩沖區(qū)的大小對數(shù)據(jù)庫的讀取速度有直接的影響。

要弄明白DatabaseBufferCache中的幾個cache概念:

①Bufferpool=(defaultpool)+(nodefaultpool)

Defaultpool禾口Nodefalutpoo1

DatabaseBufferCache

其中:

defaultpool(參數(shù)db_cache_size)是標準塊存放的內(nèi)存空間大小,SGA自動管理時此參數(shù)不用設置。使用LRU算法清理空間

nodefaultpool:對應的參數(shù)有

db_nk_cache_size指定非標準塊大小內(nèi)存空間,比如2k、4k、16k、32k。

db_keep_cache_size存放經(jīng)常訪問的小表或索引等。

db_recycle_cache_size與keep相反,存放偶爾做全表掃描的大表的數(shù)據(jù)。

①如何指定使用某個表調(diào)入nodefaultpool

SQL>altertablescott.emplstorage(buffer_poolkeep);

SQL>

selectsegment_name,buffer_poolfromdba_segmentswheresegment_name='EMPl,;

②defaultpool對應的參數(shù)是db_cache_size與標準塊defaultblock是配套的,如果defaultblock是8k,db_cache_size這個參數(shù)將

代替

db_8k_cache_sizeo

③如果要建立非標準塊的表空間,先前要設定dbbuffer中的與之對應的db_nk_cache_size參數(shù)。

第一步,先指定dbbuffer里的16kcache空間大小。

SQL>altersystemsetdb_16k_cache_size=8m;

第二步,建立非標準塊表空旖

SQL>createtablespacetbs_16kdatafile7u01/oradata/prod/tbsl6k01.dbf'size10mblocksize16k;

SQL>selectTABLESPACE_NAME,block_sizefromdba_tablespaces;

3)redoIogbuffer

以日志條目(redoentries)方式記錄了數(shù)據(jù)庫的所有修改信息(包括DML和DDL),目的是為數(shù)據(jù)庫恢復,日志條目首先產(chǎn)生于

日志緩沖區(qū),日志緩沖區(qū)較小,一般缺省值在3M-15M之間,它是以字節(jié)為單位的。

日志緩沖區(qū)的大小啟動后就是固定不變的,如要調(diào)整只能通過修改參數(shù)文件后重新啟動生效。不能動態(tài)修改!不能由SGA自動

管理!

4)Iargepool(可選)

為了進行大的后臺進程操作而分配的內(nèi)存空間,主要用于共享服務器的sessionmemory(UGA),RMAN備份恢復以及并行查詢

等操作。有助于降低sharedpool碎片。

5)javapool(可選)

為了java虛擬機及應用而分配的內(nèi)存空間,包含所有session指定的JAVA代碼和數(shù)據(jù)。

6)streampooI(可選)

為了streamprocess而分配的內(nèi)存空間。stream技術是為了在不同數(shù)據(jù)庫之間共享數(shù)據(jù),因此,它只對使用了stream數(shù)據(jù)庫特

性的系統(tǒng)是重要的。

1.3Oracle的進程:

1)userprocess:

客戶端的process,訪問數(shù)據(jù)庫分為三種形式,①sql*plus,②應用程序,③web方式(EM)

①sql*plus可以執(zhí)行sql和plsql請求,是典型的客戶端進程。

linux作為客戶端:可以使用ps看到sqlplus關鍵字:

$ps-ef|grepsqlplus

windows作為客戶端:可以通過查看任務管理器看到sqlplus用戶進程:

C:\DocumentsandSettings\prod>sqlplussys/system@assysdba

②應用程序

例如:通過java程序直接嵌套sql語句,或調(diào)用Oracle存儲過程。

③web方式

例如:使用OEM登錄、管理數(shù)據(jù)庫。

$emctlstartdbconsole

2)serverprocess:

服務器端的進程,userprocess不能直接訪問Oracle,必須通過相應的serverprocess訪問實例,進而訪問數(shù)據(jù)庫。

[oracle@prod~]$ps-ef|grepLOCAL

在linux下看到的serverprocess,(LOCAL=YES)是本地連接,(LOCAL=NO)是遠程連接。

可以在oracle查看V$process視圖,它包括了當前所有的后臺進程和服務器進程。

SQL>selectpid,program,backgroundfromv$process;

background字段為1是backgroundprocess,其余都是serverprocess

3)backgroundprocess

基本的后臺進程有

1)smon:系統(tǒng)監(jiān)控進程

①當實例崩潰之后,Oracle會自動恢復實例。②釋放不再使用的臨時段。

2)pmon:進程監(jiān)控

①當userprocess失敗時,清理出現(xiàn)故障的進程。釋放所有當前掛起的鎖定。釋放服務器端使用的資源

②監(jiān)控空閑會話是否到達閾值

③動態(tài)注冊監(jiān)聽

3)dbwn:數(shù)據(jù)寫入進程

1、將變更的數(shù)據(jù)緩沖區(qū)的臟buffer寫入數(shù)據(jù)文件中。

2、釋放數(shù)據(jù)緩沖區(qū)空間。

3、觸發(fā)條件:

①ckpt發(fā)生

②臟塊太多時(閾值)

③db_buffer自由空間不夠時

④3拓

⑤表空間readonly/offline/backup模式等

以上5個狀況之一發(fā)生時,dbwn都會被觸發(fā)

4)Igwr:寫日志條目

RedologbufferLogWriterprocessRedologfiles

1、將日志緩沖區(qū)中的日志條目寫入日志文件。

2、不像DBWR可以有多個進程并行工作,LGWR只有一個工作進程

3、觸發(fā)條件:

?commit

②三分之一滿(或1M滿)

③先于dbwr寫(先記后寫,必須在dbwr寫臟塊之前寫入日志,保證未提交數(shù)據(jù)都能回滾)

④3秒(因為有③,則由DBWR的3秒傳導而來)

以上4個狀況之一發(fā)生時,Igwr都會記日志

5)ckpt:生成檢查點

作用:通知或督促dbwr寫臟塊

1、完全檢查點:保證數(shù)據(jù)庫的一致性。

2、增量檢查點:不斷更新控制文件中的檢查點位置,當發(fā)生實例崩潰時,可以盡量縮短實例恢復的時間。

3、局部檢查點:特定的操作下,針對某個表空間。

6)arcn:歸檔當前日志

歸檔模式下,發(fā)生日志切換時,把當前日志組中的內(nèi)容寫入歸檔日志,作為歷史日志提供數(shù)據(jù)庫的recovery

1,4PGA的基本組件

1)程序全局區(qū)(ProgramGlobalArea)的作用

①緩存來自服務器進程和后臺進程的數(shù)據(jù)和控制信息。

②提供排序、hash連接

③不提供session之間的共享,

④PGA在進程創(chuàng)建時被分配,進程終止時被釋放。所有進程的PGA之和構成了PGA的大小。

PGA的管理是比較復雜的,10g后,Oracle推薦使用PGA自動管理,屏蔽了PGA的復雜性。

2)PGA的結構:

①SQL工作區(qū)(SQLWorkArea):有幾個子區(qū)1、SortArea,2,HarhArea3>BitmapMergeArea

作用:排序操作(orderby/groupby/distinct/union等),多表hash連接,位圖連接,創(chuàng)建位圖

②會話空間(SessionMemory)

作用:存放logon信息等會話相關的控制信息

③私有SQL區(qū)域(PrivateSQLArea)

作用:存儲serverprocess執(zhí)行SQL所需要的私有數(shù)據(jù)和控制結構,如綁定變量,它包括固定區(qū)域和運行時區(qū)域

④游標區(qū)域(CursorArea):PLSQL游標使用的就是這塊區(qū)域

1.5連接方式

1)專用連接模式(dedicated)

對于客戶端的每個userprocess,服務器端都會出現(xiàn)一個serverprocess,會話與專用服務器之間存在一對一的映射(一根繩上的

兩個螞蚱)。

專用連接的PGA的管理方式是私有的。Oracle缺省采用專用連接模式。

PGA

PrivateCursor

SessionWork

SQLandSQL

memoryarea

areasarea

2)共享連接模式(shared)

共享連接模式(sharedserverprocess)

userprocess1userprocess2userprocess3

III

dispatcherprocess1dispatcherprocess2

III

responsequeue1responsequeue2

^^^commonresquestconnectpoo!

?

serverprocess1serverprocess2

多個userprocess共享一個serverprocess?

①,共享服務器實際上就是一種連接池機制(connectionpooling),連接池可以重用已有的超時連接,服務于其它活動會話。但容

易產(chǎn)生鎖等待。此種連接方式現(xiàn)在已經(jīng)很少見了(具體配置方法見第十四章Oracle網(wǎng)絡)。

②所有調(diào)度進程(dispatcher)共享一個公共的請求隊列(resquestqueue),但是每個調(diào)度進程都有與自己響應的隊列(response

queue)0

③在共享服務器中會話的(UGA)存儲信息是在SGA中的,而不像專用連接那樣在PGA中存儲信息,這時的PGA的存儲結構為

堆??臻g。

3)駐留連接池模式(databaseresidentconnectionpooling,簡稱DRCP):

適用于必須維持數(shù)據(jù)庫的永久連接。結合了專用服務器模式和共享服務器模式的特點。它使用連接代理(而不是專用服務器)

連接客戶機到數(shù)據(jù)庫,優(yōu)點是可以用很少的內(nèi)存處理大量并發(fā)連接(11g新特性,特別適用于Apache的PHP應用環(huán)境)。

第二章:實例管理及數(shù)據(jù)庫的啟動/關閉

2.1參數(shù)文件

2.1.1概念

1)instance在啟動階段讀取初始化參數(shù)文件(initparameterfiles)0該文件管理實例相關啟動參數(shù)。

基本初始化參數(shù):大約10-20個左右(見聯(lián)機文檔)

初始化參數(shù):300個左右

隱含參數(shù):Oracle不推薦使用

2)兩種形式

①動態(tài)參數(shù):可以直接在內(nèi)存中修改,并對當前instance立即生效

②靜態(tài)參數(shù)。必須修改參數(shù)文件,下次啟動后生效

SQL>selectdistinctissys_modifiablefromv$parameter;

ISSYS_MODIFIABLE

IMMEDIATE動態(tài)參數(shù)

FALSE靜態(tài)參數(shù)

DEFERRED延遲參數(shù),session下次連接有效

2.1.2兩種參數(shù)文件

1)pfiIe(parameterfile)

特點:

①必須通過文本編輯器修改參數(shù),便于一次修改多個參數(shù)。

②缺省的路徑及命名方式:$ORACLE_HOME/dbs/initSID.ora

2)spfiIe(systemparameterfile)

特點:

①二進制文件,不可以通過編輯器修改。通過Linux命令strings可以查看內(nèi)容。

②路徑及命名方式:$ORACLE_HOME/dbs/spfileSID.ora

③修改spfile文件的方法:

altersystemset參數(shù)二值[scope=memory|spfile|both]

①scope二memory參數(shù)修改立刻生效,但不修改spfile文件。

②scope=spfile修改了spfile文件,重啟后生效。

③scope=both前兩種都要滿足。要求spfile參數(shù)文件存在

④不寫scope限定詞,缺省③。但不如③嚴格,即spfile如果不存在,僅僅修改內(nèi)存中參數(shù)。

如果不修改spfile,將無法更改靜態(tài)參數(shù)。

SQL>selectnameJSSES_MODIFIABLE,ISSYS_MODIFIABLEfromv$parameterwherename='sql_trace';

NAMEISSESISSYS_MOD

sql_traceTRUEIMMEDIATE

這個結果表示sql_trace參數(shù)在session級別可以改,在system級也可以both修改(動態(tài)參數(shù))。

3)讀取參數(shù)文件欣順序及相互生成

優(yōu)先其次

spfile,pfileo

pfile和spfile可以相互生成:

SQL>createpfilefromspfile

SQL>createspfilefrompfile

SQL>createpfilefrommemory;

SQL>createspfilefrommemory;

注意:使用spfile啟動后不能重寫spfile

盡可能使用spfile,pfile一般留做備用,特殊情況也可以使用pfile啟動:

SQL>startuppfile=$ORACLE_HOME/dbs/initprod.ora

如果pfile不是缺省命名或放在其他路徑,則指定命令路徑和文件名即可。

SQL>startuppfile=/home/oracle/mypfile

怎樣知道實例是spfile啟動還是pfile啟動的

SQL>showparameterspfile

NAMETYPEVALUE

spfilestring/uOl/oracle/dbs/spfile.ora

如果value有值,說明數(shù)據(jù)庫啟動時讀的是spfile

另一個辦法是看v$spparameter(spfile參數(shù)視圖)中的參數(shù)memory_target的isspecified字段值,如果是TRUE說明是spfile啟

動的(考點)

SQL>selectname,value,isspecifiedfromv$spparameterwherenamelike'memory_target';

NAMEVALUEISSPECIFIED

memory_target423624704TRUE

2.2數(shù)據(jù)庫啟動與關閉

2.2.1啟動分為三個階段

StartingUpanOracleDatabaseInstance:

OPEN

OPEN

STARTUPDetailsTheinstanceisopen.____Allfilesopenedas

___________________describedbythecontrol

MOUNTfileforthisinstance

Controlfile

rtnonorlforthic

1)nomount階段:讀取initparameter

SQL>selectstatusfromv$instance;

STATUS

STARTED

2)mount階段:讀取控制文件

SQL>selectstatusfromv$instance;

STATUS

MOUNTED

3)open階段:

1、檢查所有的datafile、redolog>group、passwordfile正常

2、檢查數(shù)據(jù)庫的一致性(controlfile>datafile>redofile的檢查點是否一致)

SQL>selectfile#,checkpoint_change#Jast_change#fromv$datafile;從控制文件讀出

SQL>selectfile#,checkpoint_change#fromv$datafile_header;從數(shù)據(jù)文件讀出

注意:啟動時last_change#不為空說明之前是干凈的關閉數(shù)據(jù)庫

SQL>selectstatusfromv$instance;

STATUS

OPEN

2.2.2啟動數(shù)據(jù)庫時的一些特殊選項

startupforce;相當于shutdownabort后再接startup

startupupgrade只有sysdba能連接

startuprestrict有restrictsession權限才可登錄,sys不受限制

altersystemenablerestrictedsession;open后再限制

alterdatabaseopenreadonly;sen不會增長

2.2.3實例關閉:

ShutdownOptions

Onthewaydown:?During:Onthewayup:

-UncommittedIt-Noinstance

changesrolledINORMAL/recovery

back,for\Or/

①shutdownnormal拒絕新而逢建,等待當前會話結束,生:成檢查點

②shutdowntransactional拒絕新的連接,等待當前事務結束,生成檢查點

③shutdownimmediate拒絕新的連接,未提交的事務回滾,生成檢查點

?shutdownabort事務不回滾,不生成檢查點,下次啟動需要做instancerecovery

ShutdownModes

ShutdownModesAITN

AllowsnewconnectionsNoNoNoNo

WaitsuntilcurrentsessionsendNoNoNoYes

WaitsuntilcurrenttransactionsendNoNoYesYes

ForcesacheckpointandclosesfilesNoYesYesYes

2.3自動診斷信息庫ADR

ADR(AutomaticDiagnosticRepository)是11g新特性

存儲在操作系統(tǒng)下的一個目錄(樹)結構

包括:①告警日志文件,②跟蹤文件,③健康記錄,?DUMP轉儲文件等

SQL>showparameterdiagnostic_dest

NAMETYPEVALUE

diagnostic_deststring/uOl

$ORACLE_BASE=/u01,它也是ADR的基目錄,如果你沒有設置ORACLE_BASE環(huán)境變量,Oracle給你設置的ADR基目錄是

$ORALE_HOME/log

SQL>showparameterdump

在oracle11g中,故障診斷及跟蹤的文件路徑改變較大,告警文件分別xml的文件格式和普通文本格式兩種形式存在。這兩份文

件的位置分別是丫$口以6_1呼0中的DiagAlert和DiagTrace對應的目錄。

2.3.1跟蹤文件:

1)后臺進程的跟蹤文件(Bdump)

SID_processname_PID.trc如:_lgwr_5616.trc

2)1艮務器進程而艮蹤文件(Udump)"

SID_ora_PID.trc如:_ora_10744.trc

另外增加.trm(tracemap)文件,記錄trc文件的結構信息。

SQL>select*fromv$diag_info;

232告警日志

以文本格去保署告警日志。命名是:alter_SID.log,它包含通知性的消息,如數(shù)據(jù)庫啟動或關閉,以及有關數(shù)據(jù)庫物理結構變化

的信息,也包括一些內(nèi)部錯誤信息等。

告警日志會不斷增長,定期清理是必要的

$cat/dev/null>alert_prod.log將文件清空

直接刪掉也沒有關家,下次啟動會自動創(chuàng)建

$tail-f/u01/diag/rdbms/prod/prod/trace/alert_prod.log

2.4口令文件

2.4.1登錄認證方式

主要有以下四種

1)OS認證:

特點:?Oracle用戶以本地登錄。?Oracle用戶必須屬于DBA組,?Oracle的sysdba身份不驗證密碼。

如:sqlplua/assysdba

2)口令文件認證:

是一種通過網(wǎng)絡的遠程認證方式,只有sysdba權限的用戶可以使用口令文件,登錄時必須輸入密碼和網(wǎng)絡連接符。

如:sqlplussys/oracle@assysdba

3)口令密碼認證方式

普通用戶是指沒有sysdba權限的用戶,比如system、scott,或者是tim什么的,不管是本地還是遠程,普通用戶登錄時必須在

數(shù)據(jù)庫open下輸入口令,它們的口令密碼保管在數(shù)據(jù)字典里。

4)外部密碼認證

如果配置了os_authent_prefix參數(shù),如缺省值為‘ops$',當數(shù)據(jù)庫中存在用戶10Ps$tim',且對該用戶啟用了外部驗證。那么在操

作系統(tǒng)上以tim用戶登泵成功后,就可以直接鍵入sqlplus/,登錄用戶是。ps$tim,密碼由操作系統(tǒng)外部提供,不是數(shù)據(jù)字典認

證。(見SQL課程用戶訪問控制章節(jié))

2.4.2口令文件

是sysdba身份的用戶的遠程認證密碼文件,主要用于sys用戶(嚴格來說是具有sysdba系統(tǒng)權限的用戶)的遠程登錄認證。

1)位置:$ORACLE_HOME/dbs/orapwSID,

2)可以通過remote_login_passwordfile參數(shù)控制是否生效

3)使用orapwd命令創(chuàng)建新的sys口令文件:

[oracle@cuug-]$cd$ORACLE_HOME/dbs

[oracle@cuugdbs]$$orapwdfile=orapwprodpassword=systementries=5force=y

file=orapw+sid的寫法,不能拼錯entries的含義是表示口令文件中可包含的SYSDBA/SYSOPER權限登錄的最大用戶數(shù)。Force強

制覆蓋原文件

第三章:控制文件

3.1功能和特點:

1)記錄數(shù)據(jù)庫當前物理狀態(tài)

2)維護數(shù)據(jù)庫的一致性

3)是一個二進制小文件

4)在mount階段被讀取

5)記錄RMAN備份的元數(shù)據(jù)

查看database控制文件位置:

SQL>showparametercontrol_file

SQL>selectnamefromv$controlfile;

NAME

/uOl/oradata/prod/controlOl.ctl

/u01/oradata/prod/control02.ctl

/u01/oradata/prod/control03.ctl

3.2實時更新機制

①當增加、重命名、刪除一個數(shù)據(jù)文件或者一個聯(lián)機日志文件時,Oracle服務器進程(ServerProcess)會立即更新控制文件以

反映數(shù)據(jù)庫結構的變化。

②日志寫進程LGWR負責把當前日志序列號記錄到控制文件中。

③檢查點進程CKPT負責把校驗點的信息記錄到控制文件中。

④歸檔進程ARCn負責把歸檔日志的信息記錄到控制文件中。

通過視圖v$controlfile_record_section可以了解到控制文件中記錄了大量的數(shù)據(jù)庫當前狀態(tài)信息

3.3多元化

1)配置多個control_files,控制文件最好是3個(最多8個)。多路復用指的是相互鏡像。

一般配置方法

①修改spfile中的control_files參數(shù)(修改之前最好將spfile先備份一份)

?shutdownimmediate

③復制控制文件,Oracle建議將多個控制文件分配在不同的物理磁盤上。

2)三個control文件要一致(同一版本,sen相同),本來就是鏡像關系

3.4備份與重建

3.4.1備份

指對控制文件的實時備份,用于恢復數(shù)據(jù)文件。

SQL>alterdatabasebackupcontrolfileto'/uOl/oradata/prod/con.bak';

數(shù)據(jù)庫打開時是不能cp控制文件的。

3.4.2重建

可以在mount或open模式生成一個trace文件,方便重建控制文件:

①文件內(nèi)容在DefaultTraceFile中

SQL>alterdatabasebackupcontrolfiletotrace;

②或者存到自己起的文件名里

SQL>alterdatabasebackupcontrolfiletotraceas'/uOl/oradata/prod/con.trace,;

3.5恢復與重建

3.5.1恢復控制文件方法

控制文件一旦損壞,系統(tǒng)將不能正常工作。受損的控制文件會記錄在告警日志中,恢復或重建控制文件必須使系統(tǒng)在NOMOUNT

1)單個文件損壞了:參照多元化章節(jié),通過簡單復制解決。

2)所有的控制文件丟失:

①如果有binary控制文件備份,利用備份恢復控制文件,

②如果沒有備份,利用trace腳本文件重新創(chuàng)建控制文件(代價:丟失歸檔記錄信息和RMAN信息)

3.5.2重建控制文件示例

第一步、Mount或open下生成trace腳本

SQL>alterdatabasebackupcontrolfiletotraceas'/uOl/oradata/prod/con.trace,;

第二步、啟動到nomount狀態(tài)下準備執(zhí)行trace腳本

SQL>startupforcenomount

第三步、執(zhí)行重建控制文件語句

SQL>CREATECONTROLFILEREUSEDATABASE"prod"NORESETLOGSARCHIVELOG

MAXLOGFILES16

MAXLOGMEMBERS3

MAXDATAFILES100

MAXINSTANCES8

MAXLOGHISTORY292

LOGFILE

GROUP1'/uOl/oradata/prod/redoOl.log'SIZE50M,

GROUP27u01/oradata/prod/redo02.log'SIZE50M,

GROUP37u01/oradata/prod/redo03.log'SIZE50M

-STANDBYLOGFILE

DATAFILE

'/uOl/oradata/prod/systemOl.dbf',

7u01/oradata/prod/sysaux01.dbf\

7u01/oradata/prod/users01.dbf'z

7u01/oradata/prod/example01.dbf',

'/uOl/oradata/prod/testOl.dbf',

'/uOl/oradata/prod/undotbsOl.dbf'

CHARACTERSETZHS16GBK

.以看到執(zhí)行后三個控制文件又重新建立了。這時數(shù)據(jù)庫已在mount下

說明:這個重建控制文件的過程主要有兩大部分內(nèi)容:

第一部分是腳本中的可見信息:

1)定義db_name,

2)指定幾不參數(shù)限定控制文件的最大值,

3)在線日志的物理信息,

4)數(shù)據(jù)文件的物理信息,

5)使用的字符集。

第二部分是隱含的不可見信息,比如SCN信息,重建復制了當前所有數(shù)據(jù)文件頭部的最新SCN信息復制到了控制文件中。以便

接下來打開數(shù)據(jù)庫。

SQL>selectfile#,checkpoint_change#fromv$datafile;

SQL>selectfile#,checkpoint_change#fromv$datafile_header;

第四步、打開數(shù)據(jù)庫

SQL>alterdatabaseopen;

第五步、添加臨時數(shù)據(jù)文件信息(腳本中的最后一行)

SQL>ALTERTABLESPACETEMPADDTEMPFILE'/uOl/oradata/prod/tempOl.dbf'

SIZE30408704REUSEAUTOEXTENDONNEXT655360MAXSIZE32767M;

第四章:redo日志

4.1作用和特征

作用:數(shù)據(jù)recovery

特征:

1)記錄數(shù)據(jù)庫的變化(DML、DDL)

2)用于數(shù)據(jù)塊的recover

3)以組的方式管理redofile,最少兩組redo,循環(huán)使用

4)和數(shù)據(jù)文件存放到不同的磁盤上,需讀寫速度快的磁盤(比如采用RAID10)

5)日志的block和數(shù)據(jù)文件的block不是一回事

4.2日志組及切換

1)最少兩組,最好每組有兩個成員(多路復用),并存放到不同的磁盤(不同路徑)上,大小形同,互相鏡像

2)日志在組寫滿時將自動切換

①歸檔模式:將歷史日志連續(xù)的進行保存。

②非歸檔:歷史日志被覆蓋

③切換產(chǎn)生checkpoint(考慮性能有延遲),通知dbwn寫臟塊并且更新控制文件

3)在歸檔模式,日志進行歸檔,并把相關的信息寫入controlfile

4.3添加日志組和成員

1)三個重要視圖

SQL>select*fromv$log;

SQL>select*fromv$log;

GROUP#THREAD#SEQUENCE#BYTESMEMBERSARCSTATUSFIRST_CHANGE#FIRST_TIME

1161524288001YESINACTIVE43851732016-02-0322:00:40

2162524288001NOCURRENT44204392016-02-0323:22:38

3160524288001YESINACTIVE43275512016-02-0308:59:51

SQL>select*fromv$logfile;

SQL>select*fromv$logfile;

GROUP#STATUSTYPEMEMBERIS_

3ONLINE/u01/oradata/prod/redo03.logNO

2ONLINE/u01/oradata/prod/redo02.logNO

1ONLINE/u01/oradata/prod/redo01.1ogNO

SQL>selectname,sequence#fromv$archived_log;

SQL>selectname,sequence#fromv$archived_log;

NAMESEQUENCE#

/u01/arch/arch_l_884761251_7.1og7

/u01/arch/arch_l_884761251_8.log8

/u01/arch/arclog9

2)增加一個組group4,

SQL>alterdatabaseaddlogfilegroup4'/uOl/oradata/prod/redo04.log'size50m;

SQL>selectgroup#,memberfromv$logfileorderbygroup#;

GROUP#MEMBER

1/u01/oradata/prod/redoOl.log

2/u01/oradata/prod/redo02.log

3/u01/oradata/prod/redo03.log

4/u01/oradata/prod/redo04.log

3)添加日志組的成員

為每個組增加一個member(一共是4個組)

先建好目錄,準備放在/u01/disk2/prod/下

[oracle@cuug~]$mkdir-p/u01/disk2/prod

SQL>alterdatabaseaddlogfilemember

7u01/disk2/prod/redo01b.log'togroup1,

7u01/disk2/prod/redo02b.log'togroup2,

7u01/disk2/prod/redo03b.log'togroup3,

7u01/disk2/prod/redo04b.log'togroup4;

SQL>selectgroup#,member,statusfromv$logfile;

GROUP#MEMBERSTATUS

3/u01/oradata/prod/redo03.log

2/u01/oradata/prod/redo02.log

1/u01/oradata/prod/redo01.log

4/u01/oradata/prod/redo04.log

1/u01/disk2/prod/redo01b.logINVALID

2/u01/disk2/prod/redo02b.logINVALID

3/u01/disk2/prod/redo03b.logINVALID

4/u01/disk2/prod/redo04b.logINVALID

STATUS是INVALID,說明member還沒有同步好。

SQL>altersystemswitchlogfile;至少做4次切換,消除invalid。這步很必要。

4.4v$log視圖的狀態(tài)

STATUS列有四種狀態(tài):

①unused:新添加的日志組,還沒有使用

②inactive日志組對應的臟塊已經(jīng)從databuffer寫入到datafile,可以覆蓋

③active:日志組對應的臟塊還沒有完全從databuffer寫入到datafile,含有實例恢復需要的信息,不能被覆蓋

?current:當前日志組對應的臟塊還沒有全部從databuffer寫入到datafile,含有實例恢復需要的信息,不能被覆蓋

THREAD:線程在單實例的環(huán)境下,thread#永遠是1

SEQUENCE#日志序列號。在日志切換時會遞增

FIRST_CHANGE#在每個日志組對應一個sequence號,其中首條日志條目的第一個的sen。

4.5日志恢復(PPT-II-146-148)

RecoveringfromtheLossofaRedoLogGroup

ClearingaLogFile

4.5.1inactive日志組損壞,

假如日志組4損壞,狀態(tài)inactive。解決很簡單,重建日志組即可

SQL>alterdatabaseclearlogfilegroup4;這里clear的意思是重建group4的文件。

4.5.2current日志組丟失。

本例日志組1狀態(tài)是CURRENT狀態(tài)的,現(xiàn)在模擬當前日志組損壞

[oracle@prod]$rm/uOl/oradata/prod/redoOl.log

[oracle@prod]$rm/u01/disk2/prod/redo01b.log

SQL>altersystemswitchlogfile;切換幾次,觸動它一下。

告警日志會記錄有關信息

暫時好像沒有什么問題發(fā)生,繼續(xù)切換,當current又轉會到groupl時,session死!

當前日志損壞的問題比較復雜,見上圖可以分以下幾種情況討論

1)數(shù)據(jù)庫沒有崩潰

第一步,可以做一個完全檢查點,將dbbuffer中的所有dirtybuffer全部刷新到磁盤上。

SQL>altersystemcheckpoint;

第二步,嘗試數(shù)據(jù)庫在打開狀態(tài)下進行不做歸檔的強制清除。

SQL>alterdatabaseclearunarchivedlogfilegroupn;

數(shù)據(jù)庫此時為打開狀態(tài),這步若能成功,一定要做一個新的數(shù)據(jù)庫全備,因為當前日志無法歸檔,歸檔日志sequence已無法保

持連續(xù)性。全備的目的就是甩掉之前的歸檔日志。

2)數(shù)據(jù)庫已經(jīng)崩潰,只能做傳統(tǒng)的基于日志的不完全恢復或使用閃回數(shù)據(jù)庫。

SQL>recoverdatabaseuntilcancel;

SQL>alterdatabaseopenresetlogs;

3)如果之前沒有可用的備份,或問題嚴重到任何方法都不能resetlogs打開數(shù)據(jù)庫,為了搶救數(shù)據(jù),考慮最后一招使用Oracle

的隱含參數(shù):_allow_resetlogs_corruption二TRUE

Oracle不推薦侵用后隱含參藪

該參數(shù)的含義是:允許數(shù)據(jù)庫在不致性的情況下強制打開數(shù)據(jù)庫。_

在不一致狀態(tài)下強行打開了數(shù)據(jù)庫后,建議做一個邏輯全備。

4.5.3active日志組損壞

做檢查點切換,如成功,按照inactive損壞處理。否則,按current損壞處理。

4.6使日志恢復到原來的配置

1)刪除日志組

SQL>alterdatabasedroplogfilegroup4;狀態(tài)是current和active的組不能刪除

2)刪除成員

SQL>alterdatabasedroplogfilemember7u01/disk2/prod/redo01b.log';狀態(tài)是current組不能刪除成員,需要切換一下。

3)清理物理日志文件。刪除物理文件需要rm

第五章:歸檔日志archivelog

5.1歸檔和非歸檔的區(qū)別

1)歸檔會在日志切換時,備份歷史日志,對于OLTP系統(tǒng)都應考慮歸檔模式,以便數(shù)據(jù)庫能支持熱備,并提供數(shù)據(jù)庫完全恢復

和不完全恢復(基于時間點)

2)歸檔會啟用ARCn的后臺進程、也會占用磁盤空間

3)非歸檔適用某種靜態(tài)庫、測試庫、或者可由遠程提供數(shù)據(jù)恢復的數(shù)據(jù)庫。非歸檔只能冷備,且僅能還原最后一次全備。

5.2設置歸檔模式

1)SQL>shutdownimmediate一定要干凈的關閉數(shù)據(jù)庫

2)SQL>startupmount啟動到mount下

3)SQL>alterdatabasearchivelog;設置歸檔方式

4)SQL>archiveloglist;查看歸檔狀態(tài)

5)SQL>alterdatabaseopen;打開數(shù)據(jù)庫

5.3路徑及命名方法

1)Oracle判斷歸檔目的地時按如下順序優(yōu)先擇取

?log_archive_dest_n值或log_archive_dest值

?db_recover_fiIe_dest參數(shù)指定的位置

?$ORACLE_HOME/dbs位置

2)路徑可以通過archiveloglist命令顯示

SYS@prod>archiveloglist:

DatabaselogmodeArchiveMode

AutomaticarchivalEnabled

Archivedestination/u01/arch

Oldestonlinelogsequence11

Nextlogsequencetoarchive13

Currentlogsequence13

SYS@prod>|

Archivedestination(存檔終點)有兩種情形

①缺省是USE_DB_RECOVERY_FILE_DEST,其含義是采用參數(shù)db」ecovery_file_dest參數(shù)的定義,即閃回恢復區(qū)

②采用參數(shù)Iog_archive_dest_n或log_archive_dest指定的路徑

SQL>showparameterarchive

NAMETYPEVALUE

archive_lag_targetinteger0

log_archive_configstring

log_archive_deststring

log_archive_dest_lstringIocation=/u01/arch

log_archive_dest_10string

Iog_archive_dest_2string

log_archive_dest_3

Iog_archive_dupIex_deststring

log_archive_formatstringarch_%t_%r_%s.log

SQL>showparameterdb_recovery

3)首先來看這兩個參數(shù):

Iog_archive_dest_n

log_archive_format

loglarchiveldest_n(n:l-10)表示可以有10個目標路徑存放歸檔日志(鏡像關系),即可以多路復用10個歸檔日志的備份。

如工顯示或只使論了log_archive_dest_l,也就是說只有一套歸檔日志,沒有做鏡像。

參數(shù)設定的格式如下:

SQL>altersystemsetIog_archive_dest_l='location=/u01/arch';

把歷史日志歸檔到本機后錄下"location代表本機)

SQL>altersystemsetlog_archive_dest_2='service=standby';

遠程備份,把歷史日志春份到雨絡最符為standby的數(shù)據(jù)庫上。(service代表遠程),配置DG時有用。

log_archive_format是定義命名格式的,一般考慮使用下面三個內(nèi)置符號(模板)

%tthread#日志線程號

%ssequence日志序列號

%rresetlog代表數(shù)據(jù)庫的周期

參數(shù)設定的格式如下:

SQL>altersystemsetlog_archive_format='arch_%t_%r_%s.log'scope=spfile;

4)再來看看這兩個參數(shù):

log_archive_dest

Iog_archive_duplex_dest

這兩個參癡已經(jīng)棄沌了,它們能完成兩路復用(鏡像)但只能指定本機location,無法指定遠程。

一旦使用log_archive_dest_n,log_archive_dest參數(shù)就失效了。

5.4歸檔進程和手動切換

1)歸檔進程

$ps-ef|grepora_arc

oracle12152435013:26pts/200:00:00grepora_arc

oracle317961013:00?00:00:00ora_arcO_

oracle317981013:00?00:00:00ora_arcl_

ARCn就是歸檔進程,n最多可達30個,由Iog_archive_max_processes參數(shù)指定。

2)手動切換日志:

第一種:SQL>altersystemswitchlogfile;僅切換當前實例,適用歸檔和非歸檔。

第二種:SQL>altersystemarchivelogcurrent;在RAC下切換所有實例,僅適用于歸檔模式。

第六章:日志挖掘logminer

6.1作用

OracleLogMiner是一個非常有用的分析工具

可以輕松獲得Oracle在線/歸檔日志文件中的具體內(nèi)容,

可以解析出所有對于數(shù)據(jù)庫操作的DML和DDL語句。

特別適用于調(diào)試、審計或者回退某個特定的事務。

由一組PL/SQL包和一些動態(tài)視圖組成

一個完全免費的工具。沒有提供任何的圖形用戶界面(GUI)

6.2方法

6.2.1DML日志挖掘

1)添加database補充日志

SQL>ALTERDATABASEADDSUPPLEMENTALLOGDATA;

注意:為了避免日志遺漏,這步要先執(zhí)行。

2)確定要分析的日志范圍,添加日志,分析

SQL>executedbms_logmnr.add_logfile(logfilename=>'日志',options=>dbms_logmnr.new);

提供第一個要加薪的日志文正

SQL>executedbms」ogmnr.add」ogfile(logfilename=>'追力口日志',options=>dbms」ogmnr.addfile);

可以反復添加補九個日志文件

3)執(zhí)行l(wèi)ogmnr分析

SQL>executedbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

4)查詢分析結果「

SQL>selectusername,sen,timestamp,sql_redofromv$logmnr_contentswhereseg_name='表名';

可以設置時間格式,也可以在顯示方式里再確定格式.

5)關閉日志分析

SQL>executedbmsjogmnr.endjogmnr;

示例演示

6.2.2DDL日志挖掘

1)建立一個存放dict.oral的目錄,設置參數(shù)utl_file_dir指定該目錄,

$mkdir/home/oracle/logmnr

SQL>altersystemsetutl_file_dir=7home/oracle/logmnr'scope=spfile;

2)建立數(shù)據(jù)字典文件diet.ora

SQL>executedbms_logmnr_d.build(,dict.ora,,7home/oracle/logmnr,,dbms_logmnr_d.store_in_flat_file);

3)添加日志分析一

SQL>executedbmsjogmnr.addjogfile(logfilename=>'日志文件:options二〉dbms_logmnr.new);

SQL>executedbms_logmnr.add_logfile(logfilename=〉'追力口日志-options二〉dbms_logmnr.addfile);

4)執(zhí)行分析

SQL>

executedbms_logmnr.start_logmnr(dictfilename=>

7home/oracle/logmnr/dict.ora',options=>dbmsjogmnr.ddl_dict_tracking);

5)查看分析結果

SQL>selectusername,sen,to_char(timestamp/yyyy-mm-ddhh24:mi:ss)sql_redofromv$logmnr_contentsWHEREUSERNAME

='SCOTT'andlower(sql_redo)like'%table%';

6)關閉日志分析

SQL>executedbms_logmnr.end_logmnr;

示例將在備份恢復^程中演示二

第七章:管理undo

7.1Undo作用

使用undotablespace存放從數(shù)據(jù)緩存區(qū)讀出的數(shù)據(jù)塊的前鏡像

提供以下四種情況所需要的信息

1)回滾事務:rollback

2)讀一致性:正在做DML操作的數(shù)據(jù)塊,事務結束前,其他用戶讀undo里面的數(shù)據(jù)前鏡像

3)實例的恢復:instancerecover(undo-->rollback)

4)閃回技術:flashbackquery>flashbacktable等

updateempsetsal=8000whereempno=7788;

Pbuffercacheundotables

老值sal=3000將6號文件的51塊

放入塊-惆入buffercache

undopf

15b

Redolog-

ADBWR

buffer]f4.b32

userstablespace

更新LGWR

Execute|將4號文件的32塊廠^

sal=8000^ff

四號塊中一J^active|調(diào)入buffercachel

currentlogk^^^activelog

事務提交commit

溫馨提示

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

評論

0/150

提交評論