欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫 Oracle面試總結(jié)

柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫 Oracle面試總結(jié)

http://yzkb.51969.com/

1.體系結(jié)構(gòu)

1.1 DATA BLOCK,EXTENT和SEGMENT的區(qū)別是什么?

答案:DATA BLOCK是數(shù)據(jù)庫中最小的邏輯存儲單元。當(dāng)數(shù)據(jù)庫的對象需要更多的物理存儲空間時(shí),連續(xù)的DATA BLOCK就組成了EXTENT。一個數(shù)據(jù)庫對象擁有的所有EXTENT被稱為該對象的SEGMENT。

1.2 在Oracle中,數(shù)據(jù)塊、Redo日志塊及控制文件數(shù)據(jù)塊的大小分別是多少?如何查詢?

1)數(shù)據(jù)塊(Data Block),是讀寫數(shù)據(jù)文件的最小單位,默認(rèn)是8KB,可以通過SQL語句“SELECT FILE#,NAME,BLOCK_SIZE FROM V

D

A

T

A

F

I

L

E

;

”查詢,單位為

B

Y

T

E

。

2

R

e

d

o

日志數(shù)據(jù)塊(

R

e

d

o

L

o

g

B

l

o

c

k

),大小一般等于操作系統(tǒng)的系統(tǒng)塊的大小,一般為

512

4096

,可以通過

S

Q

L

語句“

S

E

L

E

C

T

B

L

O

C

K

S

I

Z

E

F

R

O

M

V

DATAFILE;”查詢,單位為BYTE。 2)Redo日志數(shù)據(jù)塊(Redo Log Block),大小一般等于操作系統(tǒng)的系統(tǒng)塊的大小,一般為512或4096 ,可以通過 SQL語句“SELECT BLOCKSIZE FROM V

DATAFILE;”查詢,單位為BYTE。2)Redo日志數(shù)據(jù)塊(RedoLogBlock),大小一般等于操作系統(tǒng)的系統(tǒng)塊的大小,一般為512或4096,可以通過SQL語句“SELECTBLOCKSIZEFROMVLOG;”或“SELECT LEBSZ FROM X

K

C

C

L

E

;

”查詢,單位為

B

Y

T

E

。

3

)控制文件數(shù)據(jù)塊(

C

o

n

t

r

o

l

F

i

l

e

B

l

o

c

k

),默認(rèn)為

16

K

B

,可以通過

S

Q

L

語句“

S

E

L

E

C

T

B

L

O

C

K

S

I

Z

E

F

R

O

M

V

KCCLE;”查詢,單位為BYTE。 3)控制文件數(shù)據(jù)塊(Control File Block),默認(rèn)為16KB,可以通過SQL語句“SELECT BLOCK_SIZE FROM V

KCCLE;”查詢,單位為BYTE。3)控制文件數(shù)據(jù)塊(ControlFileBlock),默認(rèn)為16KB,可以通過SQL語句“SELECTBLOCKS?IZEFROMVCONTROLFILE;”查詢,單位為BYTE。

1.3 行鏈接和行遷移有什么區(qū)別?

答案:當(dāng)一行的數(shù)據(jù)過長而不能存儲在單個數(shù)據(jù)塊中時(shí),可能發(fā)生兩種事情:行鏈接(Row Chaining)或行遷移(Row Migration)。 1)行鏈接(Row Chaining):當(dāng)?shù)谝淮尾迦胄袝r(shí),由于行太長而不能容納在一個數(shù)據(jù)塊中時(shí),就會發(fā)生行鏈接。在這種情況下,Oracle會使用與該塊鏈接的一個或多個數(shù)據(jù)塊來容納該行的數(shù)據(jù)。行鏈接經(jīng)常在插入比較大的行時(shí)才會發(fā)生,例如包含LONG、LONG ROW、LOB等類型的數(shù)據(jù)。在這些情況下,行鏈接是不可避免的。行鏈接通常由INSERT操作引起。 2)行遷移(Row Migration):當(dāng)一個行上的更新操作導(dǎo)致當(dāng)前的數(shù)據(jù)增加以致于不能再容納在當(dāng)前塊,這個時(shí)候就需要進(jìn)行行遷移,在這種情況下,Oracle將會遷移整行數(shù)據(jù)到一個新的數(shù)據(jù)塊中。一個行遷移意味著整行數(shù)據(jù)都將會移動,原始的數(shù)據(jù)塊上僅僅保留的是指向新塊的一個地址信息。發(fā)生行遷移的時(shí)候行的ROWID不會改變。行遷移的情況主要是由于表上的PCTFREE參數(shù)設(shè)置過小導(dǎo)致,所以必須設(shè)置一個合適的PCTFREE參數(shù)。可以使用exp/imp工具導(dǎo)入導(dǎo)出來處理行遷移。行遷移通常由UPDATE操作引起。

1.4 如何解決ORA-04030和ORA-04031錯誤?

1)是否仍然有足夠的可用內(nèi)存? 2)是否設(shè)置了操作系統(tǒng)限制? 3)是否設(shè)置了Oracle限制? 4)哪個進(jìn)程需要的內(nèi)存過多?

1.5 進(jìn)程mman、mmnl和mmon這3個進(jìn)程的作用分別是什么?

1)MMAN(Memory Manager Process,內(nèi)存管理進(jìn)程)進(jìn)程會隨著時(shí)間推移,根據(jù)系統(tǒng)負(fù)載的變化和內(nèi)存需要,自動調(diào)整SGA中各個組件的內(nèi)存大小。 2)MMON(Manageability Monitor Process,可管理性監(jiān)視器進(jìn)程)和它的slave進(jìn)程(Mnnn)主要用來維護(hù)AWR信息和各種與可管理性相關(guān)的后臺任務(wù),具體包括:①啟動slave進(jìn)程Mnnn去做AWR快照。若MMON進(jìn)程HANG住,則AWR不可用。②當(dāng)某個測量值(metrics)超過了其度量閥值(threshold value)時(shí)發(fā)出ALERT告警。③為最近改變過的SQL對象捕獲指標(biāo)信息。 3)MMNL(Manageability Monitor Lite Process)將SGA中的ASH(Active Session History)Buffer中的統(tǒng)計(jì)資料寫到磁盤。當(dāng)ASH Buffer滿的時(shí)候MMNL會把它寫到磁盤上。

1.6 什么是檢查點(diǎn)?如何調(diào)優(yōu)檢查點(diǎn)?

(1)什么是檢查點(diǎn)? 一般所說的檢查點(diǎn)是一種將內(nèi)存中的已修改數(shù)據(jù)塊與磁盤上的數(shù)據(jù)文件進(jìn)行同步的數(shù)據(jù)庫事件(Event),是Oracle在數(shù)據(jù)庫一致性關(guān)閉、實(shí)例恢復(fù)和Oracle基本操作不可缺少的機(jī)制。 (2)檢查點(diǎn)調(diào)優(yōu) 檢查點(diǎn)的主要任務(wù)就是催促DBWn刷新臟塊,如果DBWn刷新臟塊時(shí)的等待事件太多,那么就說明臟塊太多、存儲設(shè)備的寫速度太慢,或者就是增量檢查點(diǎn)的頻率設(shè)置不合理。DBWn寫臟塊的等待事件是db file parallel write。如果系統(tǒng)增量檢查點(diǎn)頻率很低,系統(tǒng)大量產(chǎn)生該事件,在排除了存儲設(shè)備寫性能的問題后,那么應(yīng)該將增量檢查點(diǎn)頻率設(shè)置得高一些。反之,如果增量檢查點(diǎn)頻率本身很高,若出現(xiàn)了db file parallel write事件,則說明檢查點(diǎn)頻率太高了。

1.7 什么是大文件表空間(Bigfile Tablespace)?

答案:從Oracle 10g開始推出了大文件表空間的概念,即表空間從Oracle 10g以后就分為兩種類型,小文件表空間(Smallfile Tablespace)和大文件表空間(Bigfile Tablespace)。所謂大文件表空間最顯著的特點(diǎn)就是一個表空間只能對應(yīng)一個數(shù)據(jù)文件。大文件表空間雖只對應(yīng)一個數(shù)據(jù)文件,但數(shù)據(jù)文件對應(yīng)的最大體積大大增加,可以達(dá)到32TB。傳統(tǒng)的小文件表空間中每個數(shù)據(jù)文件最大文件大小為32G,但每個小文件表空間理論上能夠包括1024個數(shù)據(jù)文件,所以,小文件表空間的最大值為32TB大小。所以,理論上小文件表空間和大文件表空間總?cè)萘肯嗤?/p>

1.8 本地管理表空間(LMT)和字典管理表空間(DMT)的特點(diǎn)有哪些?

字典管理表空間(Dictionary Managed Tablespace,DMT),它是Oracle 8i及以前版本使用的一種表空間管理模式,不過在Oracle 8i及以后的版本中仍然保存有該特性。DMT是通過數(shù)據(jù)字典管理表空間的空間使用(其實(shí)是管理區(qū))。每當(dāng)分配或取消分配區(qū)后,Oracle服務(wù)器會更新數(shù)據(jù)字典中的相應(yīng)表。用于管理的兩個數(shù)據(jù)字典表分別是:UET

U

s

e

d

E

x

t

e

n

t

s

)和

F

E

T

(Used Extents)和FET

(UsedExtents)和FET(Free Extents)。DMT是為了實(shí)現(xiàn)向后兼容而提供的,建議使用本地管理的表空間。 **本地管理表空間(Locally Managed Tablespace,LMT)**是從Oracle 8i出現(xiàn)的一種新的表空間的管理模式,通過位圖來管理表空間的空間使用(其實(shí)是管理區(qū))。位圖中的每個位都對應(yīng)于一個塊或一組塊。Oracle 在分配區(qū)或釋放區(qū)后可以重新使用,Oracle 服務(wù)器通過更改位圖值來顯示塊的新狀態(tài)。LMT 在Oracle 9i及以后版本中成了默認(rèn)選項(xiàng)。

1.9 Redo日志文件(Redo Log Files)的作用是什么?

答案:Redo日志文件包含所有的數(shù)據(jù)庫變化歷史記錄,例如所有的DML變化(INSERT、UPDATE、DELETE和SELECT FOR UPDATE)和所有DDL語句造成的數(shù)據(jù)字典對象的更改及遞歸語句的更改等,所以,日志文件可以最大限度地保證數(shù)據(jù)的一致性與安全性。當(dāng)發(fā)生提交動作時(shí),后臺進(jìn)程 LGWR 將Redo日志緩沖區(qū)中的數(shù)據(jù)刷到Redo日志文件里。

1.10 Oracle系統(tǒng)進(jìn)程主要有哪些,作用是個啥?

數(shù)據(jù)寫進(jìn)程(DBWR):負(fù)責(zé)將更改的數(shù)據(jù)從數(shù)據(jù)庫緩沖區(qū)高速緩存寫入數(shù)據(jù)文件日志寫進(jìn)程(LGWR):將重做日志緩沖區(qū)中的更改寫入在線重做日志文件系統(tǒng)監(jiān)控 (SMON): 檢查數(shù)據(jù)庫的一致性如有必要還會在數(shù)據(jù)庫打開時(shí)啟動數(shù)據(jù)庫的恢復(fù)進(jìn)程監(jiān)控 (PMON): 負(fù)責(zé)在一個Oracle 進(jìn)程失敗時(shí)清理資源檢查點(diǎn)進(jìn)程(CKPT):負(fù)責(zé)在每當(dāng)緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫中時(shí),更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫狀態(tài)信息。歸檔進(jìn)程 (ARCH):在每次日志切換時(shí)把已滿的日志組進(jìn)行備份或歸檔恢復(fù)進(jìn)程 (RECO): 保證分布式事務(wù)的一致性,在分布式事務(wù)中,要么同時(shí)commit,要么同時(shí)rollback;作業(yè)調(diào)度器(CJQ ): 負(fù)責(zé)將調(diào)度與執(zhí)行系統(tǒng)中已定義好的job,完成一些預(yù)定義的工作.

1.11 Oracle Undo相關(guān)面試題

1.11.1 請描述什么是Oracle Undo?

Oracle數(shù)據(jù)庫創(chuàng)建和管理用于回滾或撤消對數(shù)據(jù)庫的更改的數(shù)據(jù)。 這些信息主要包括交易行為的記錄,主要是在交易被提交之前。 這些記錄統(tǒng)稱為undo。

1.11.2 請描述UNDO的作用?

1.回滾事務(wù)。 2.實(shí)例恢復(fù)。 實(shí)例恢復(fù)過程中,想通過redo記錄對checkpoint之后的臟塊隊(duì)列進(jìn)行前滾操作。 對于所有未提交的臟塊,oracle根據(jù)undo的前鏡像進(jìn)行回滾(行級別的邏輯反操作),重新將內(nèi)存中緩存的相關(guān)數(shù)據(jù)臟塊換為非臟塊。 3.提供一致性讀。 執(zhí)行查詢時(shí),服務(wù)器進(jìn)程掃描這個表中的數(shù)據(jù)塊時(shí),會把每個數(shù)據(jù)塊ITL槽中最大的SCN與查詢SCN進(jìn)行比較,如果比查詢SCN小則說明這個數(shù)據(jù)塊沒有被修改服務(wù)器進(jìn)程直接進(jìn)行數(shù)據(jù)讀取即可。 如果數(shù)據(jù)塊ITL槽中的SCN大于查詢SCN那么說明這個數(shù)據(jù)塊在發(fā)起查詢后被修改了,需要借助undo去獲取發(fā)起查詢那個時(shí)刻數(shù)據(jù)塊的數(shù)據(jù)。 4.閃回部分相關(guān)操作

1.11.3 請描述對UNDO Retention的理解?

undo_retention表示已經(jīng)提交或回滾的事物在UNDO EXTENT中保留的時(shí)間;

1.11.4 請描述ORA-01555錯誤原因和解決思路。

構(gòu)建一致性讀時(shí),需要的undo數(shù)據(jù)已經(jīng)被覆蓋。 通常原因如下: (1)SQL語句執(zhí)行時(shí)間太長。 (2)UNDO表空間過小。 (3)事務(wù)量過大。 (4)過于頻繁的提交。 比如對一個塊上的10行數(shù)據(jù),每次修改1行并提交,就會對這個塊生成10次UNDO鏡像數(shù)據(jù)。 (5)導(dǎo)致執(zhí)行SQL過程中進(jìn)行一致性讀時(shí),SQL執(zhí)行后修改的前鏡像(即UNDO數(shù)據(jù))在UNDO表空間中已經(jīng)被覆蓋,不能構(gòu)造一致性讀塊(CR blocks)。 建議: (1)增加UNDO表空間大小。 (2)增加undo_retention 時(shí)間,默認(rèn)只有15分鐘。 (3)優(yōu)化出錯的SQL,減少查詢的時(shí)間,首選方法。 (4)避免頻繁的提交。

1.11.5 如何找到ORA-01555對應(yīng)的SQL

How to find the complete SQL statement caused ORA-1555 : If the Database was not restarted after the error ORA-1555 , so the Statement can be obtained from : select SQL_TEXT from v$sqlarea where SQL_ID=‘’; If the Database was restarted after the error ORA-1555 and an AWR snapshot was gathered before the restart , so the Statement can be obtained from : select SQL_TEXT from DBA_HIST_SQLTEXT where SQL_ID=‘’;

1.11.6 請描述ORA-30036錯誤原因和解決思路。

ORA-30036:unable to extend segment by 8 in undo tablespace ‘UNDOTBS1’ 當(dāng)當(dāng)前UNDO表空間沒有更多可用空間用于活動事務(wù)時(shí),將報(bào)告ORA-30036錯誤。 UNDO空間分配按以下順序進(jìn)行: ?1.在沒有活動事務(wù)的UNDO段中分配數(shù)據(jù)塊。Oracle嘗試將事務(wù)分發(fā)到所有UNDO段。 ?2.如果找不到UNDO段,則oracle會嘗試將脫機(jī)UNDO段聯(lián)機(jī)并使用它。 ?3.如果沒有要聯(lián)機(jī)的UNDO段,則創(chuàng)建一個新的UNDO段并使用它。 ?4.如果空間不允許創(chuàng)建undo段,那么我們嘗試重用現(xiàn)有undo段中過期的區(qū)段。 對于與UNDO段/extent關(guān)聯(lián)的正在運(yùn)行的事務(wù),如果它需要更多的UNDO空間,則: ?1.如果當(dāng)前extent有更多可用塊,則使用下一個已準(zhǔn)備好分配給該extent的可用塊。 ?2.如果當(dāng)前區(qū)段沒有空閑塊,并且該段的下一區(qū)段已過期,則在下一區(qū)段中包裝該區(qū)段并返回第一個區(qū)段。 ?3.如果下一個extent尚未過期,則從UNDO表空間獲取空間。如果有可用的擴(kuò)展數(shù)據(jù)塊,則將其分配給UNDO段,并返回新擴(kuò)展數(shù)據(jù)塊中的第一個塊。 ?4.如果沒有可用的extent,則從脫機(jī)UNDO段進(jìn)行竊取。從脫機(jī)UNDO段取消分配數(shù)據(jù)塊,并將其添加到當(dāng)前UNDO段。返回?cái)?shù)據(jù)塊的第一個空閑塊。 ?5.從聯(lián)機(jī)UNDO段竊取。從聯(lián)機(jī)UNDO段取消分配數(shù)據(jù)塊,并將其添加到當(dāng)前UNDO段。返回?cái)?shù)據(jù)塊的第一個空閑塊。 ?6.在UNDO表空間中擴(kuò)展文件。如果文件可以擴(kuò)展,則向當(dāng)前UNDO段添加一個區(qū)段,然后返回塊。 ?7.否則,嘗試從自己的UNDO段重用未過期的區(qū)段。如果所有擴(kuò)展數(shù)據(jù)塊當(dāng)前都很忙(它們包含未提交的信息),請轉(zhuǎn)至步驟8。否則,請換行到下一個擴(kuò)展數(shù)據(jù)塊。 ?8.從脫機(jī)UNDO段隨機(jī)竊取未過期的數(shù)據(jù)塊。如果失敗,則嘗試聯(lián)機(jī)UNDO段以供重用。 ?9.如果上述操作都失敗,則返回ORA-30036無法將段擴(kuò)展%s(在UNDO表空間“%s”中)

1.11.7 如何評估所需UNDO大?。?/p>

How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1) 調(diào)整UNDO表空間的大小需要三個數(shù)據(jù)。 Sizing an UNDO tablespace requires three pieces of data. (UR) UNDO_RETENTION in seconds (UPS) Number of undo data blocks generated per second (DBS) Overhead varies based on extent and file size (db_block_size) 所需的undo空間計(jì)算如下: The undo space needed is calculated as: UndoSpace = UR * (UPS * DBS) 以下公式計(jì)算每秒生成的峰值undo塊: The following formula calculates the peak undo blocks generated per second: SELECT undoblks / ((end_time - begin_time) * 86400) “Peak Undo Block Generation” ? FROM v

u

n

d

o

s

t

a

t

?

W

H

E

R

E

u

n

d

o

b

l

k

s

=

(

S

E

L

E

C

T

M

A

X

(

u

n

d

o

b

l

k

s

)

F

R

O

M

v

undostat ?WHERE undoblks = (SELECT MAX(undoblks) FROM v

undostat?WHEREundoblks=(SELECTMAX(undoblks)FROMvundostat); 列結(jié)束時(shí)間和開始時(shí)間是日期數(shù)據(jù)類型。 減去日期數(shù)據(jù)類型后,結(jié)果值為兩個日期之間的天數(shù)。 要將天轉(zhuǎn)換為秒,需要將86400乘以一天中的秒數(shù)(24小時(shí)60分鐘60秒)。 Column END_TIME and BEGIN_TIME are DATE data types.? When DATE data types are subtracted, the resulting value is the # of days between both dates.? To convert days to seconds, you multiply by 86400, the number of seconds in a day (24 hours * 60 minutes * 60 seconds). 以下查詢計(jì)算處理峰值撤消活動所需的字節(jié)數(shù): The following query calculates the number of bytes needed to handle a peak undo activity: SELECT (UR * (UPS * DBS)) AS “Bytes” ? FROM (SELECT value AS UR FROM v

p

a

r

a

m

e

t

e

r

W

H

E

R

E

n

a

m

e

=

u

n

d

o

r

e

t

e

n

t

i

o

n

)

,

????

(

S

E

L

E

C

T

u

n

d

o

b

l

k

s

/

(

(

e

n

d

t

i

m

e

?

b

e

g

i

n

t

i

m

e

)

?

86400

)

A

S

U

P

S

?????

F

R

O

M

v

parameter WHERE name = 'undo_retention'), ? ? ? ?(SELECT undoblks / ((end_time - begin_time) * 86400) AS UPS ? ? ? ? ? FROM v

parameterWHEREname=′undor?etention′),????(SELECTundoblks/((endt?ime?begint?ime)?86400)ASUPS?????FROMvundostat ? ? ? ? ?WHERE undoblks = (SELECT MAX(undoblks) FROM v

u

n

d

o

s

t

a

t

)

)

,

????

(

S

E

L

E

C

T

b

l

o

c

k

s

i

z

e

A

S

D

B

S

?????

F

R

O

M

d

b

a

t

a

b

l

e

s

p

a

c

e

s

?????

W

H

E

R

E

t

a

b

l

e

s

p

a

c

e

n

a

m

e

=

????????

(

S

E

L

E

C

T

U

P

P

E

R

(

v

a

l

u

e

)

?????????

F

R

O

M

v

undostat)), ? ? ? ?(SELECT block_size AS DBS ? ? ? ? ? FROM dba_tablespaces ? ? ? ? ?WHERE tablespace_name = ? ? ? ? ? ? ? ?(SELECT UPPER(value) ? ? ? ? ? ? ? ? ? FROM v

undostat)),????(SELECTblocks?izeASDBS?????FROMdbat?ablespaces?????WHEREtablespacen?ame=????????(SELECTUPPER(value)?????????FROMvparameter ? ? ? ? ? ? ? ? ?WHERE name = ‘undo_tablespace’)); 對于使用調(diào)優(yōu)撤消保留的10g及更高版本,請使用以下查詢:? For 10g and Higher Versions where Tuned undo retention is being used,please use below query: SELECT (UR * (UPS * DBS)) AS “Bytes” ? FROM (select max(tuned_undoretention) AS UR from v

u

n

d

o

s

t

a

t

)

,

????

(

S

E

L

E

C

T

u

n

d

o

b

l

k

s

/

(

(

e

n

d

t

i

m

e

?

b

e

g

i

n

t

i

m

e

)

?

86400

)

A

S

U

P

S

?????

F

R

O

M

v

undostat), ? ? ? ?(SELECT undoblks / ((end_time - begin_time) * 86400) AS UPS ? ? ? ? ? FROM v

undostat),????(SELECTundoblks/((endt?ime?begint?ime)?86400)ASUPS?????FROMvundostat ? ? ? ? ?WHERE undoblks = (SELECT MAX(undoblks) FROM v

u

n

d

o

s

t

a

t

)

)

,

????

(

S

E

L

E

C

T

b

l

o

c

k

s

i

z

e

A

S

D

B

S

?????

F

R

O

M

d

b

a

t

a

b

l

e

s

p

a

c

e

s

?????

W

H

E

R

E

t

a

b

l

e

s

p

a

c

e

n

a

m

e

=

????????

(

S

E

L

E

C

T

U

P

P

E

R

(

v

a

l

u

e

)

?????????

F

R

O

M

v

undostat)), ? ? ? ?(SELECT block_size AS DBS ? ? ? ? ? FROM dba_tablespaces ? ? ? ? ?WHERE tablespace_name = ? ? ? ? ? ? ? ?(SELECT UPPER(value) ? ? ? ? ? ? ? ? ? FROM v

undostat)),????(SELECTblocks?izeASDBS?????FROMdbat?ablespaces?????WHEREtablespacen?ame=????????(SELECTUPPER(value)?????????FROMvparameter ? ? ? ? ? ? ? ? ?WHERE name = ‘undo_tablespace’));

2.索引相關(guān)

2.1 什么是索引分裂?

索引分裂(Index Block Split)就是索引塊的分裂。當(dāng)一次DML操作修改了索引塊上的數(shù)據(jù),但是舊有的索引塊沒有足夠的空間去容納新修改的數(shù)據(jù)時(shí),將分裂出一個新的索引塊,舊有塊的部分?jǐn)?shù)據(jù)放到新開辟的索引塊上,這個過程就稱為索引塊的分裂,簡稱索引分裂。

3.SQL優(yōu)化相關(guān)

3.1 表和表之間的關(guān)聯(lián)方式有哪幾種?

目前為止,無論連接操作符如何,典型的連接類型共有3種: (1)**排序合并連接(SMJ)**如果連接屬性上都建有索引,那么可利用索引已有的排序做合并連接。但如果在連接屬性上沒有索引時(shí),那么需要首先對兩表在連接屬性上排序,對排序結(jié)果再做連接。 (2)嵌套循環(huán)(NL) NL是一種比較高效的連接方式,內(nèi)部表循環(huán)與外部表相匹配。這個連接方法用到了驅(qū)動表(外部表)的概念,該連接過程是一個2層嵌套循環(huán)。 (3)哈希連接(HJ) HJ的連接原理如下:首先把小表的哈希操作存放到內(nèi)存中,然后用大表的每條記錄做哈希,與之前小表的哈希值匹配。這種連接是在Oracle 7.3引入的,從理論上來說比NL和SMJ更高效,而且只用在CBO(Cost Based Optimization,基于代價(jià)的優(yōu)化器)優(yōu)化器中。

3.2 表的訪問方式有哪幾種?

訪問表的方式也稱為優(yōu)化器訪問路徑,主要有3種訪問路徑:全表掃描(FULL TABLE SCAN,F(xiàn)TS)、索引掃描(INDEX SCAN)和ROWID掃描。

3.2 索引掃描的類型

第一種: index unique ?scan 索引唯一掃描,當(dāng)可以優(yōu)化器發(fā)現(xiàn)某個查詢條件可以利用到主鍵、唯一鍵、具有外鍵約束的列,或者只是訪問其中某行索引所在的數(shù)據(jù)的時(shí)候,優(yōu)化器會選擇這種掃描類型。 第二種: index range scan索引范圍掃描,當(dāng)優(yōu)化器發(fā)現(xiàn)在UNIQUE列上使用了大于、小于、大于等于、小于等于以及BETWEEN等就會使用范圍掃描,在組合列上只使用部分進(jìn)行查詢,導(dǎo)致查詢出多行數(shù)據(jù)。對非唯一的索引列上進(jìn)行任何活動都會使用 index range scan。 第三種: index full scan?全索引掃描,如果要查詢的數(shù)據(jù)可以全部從索引中獲取,則使用全索引掃描。 第四種:** index fast full scan索引快速掃描**,掃描索引中的全部的數(shù)據(jù)塊,與全索引掃描的方式基本上類似。兩者之間的明顯的區(qū)別是,索引快速掃描對查詢的數(shù)據(jù)不進(jìn)行排序,數(shù)據(jù)返回的時(shí)候不是排序的?!霸谶@種存取方法中,可以使用多塊讀功能,也可以使用并行讀入,從而得到最大的吞吐量和縮短執(zhí)行時(shí)間”。 第五種:**索引跳躍式掃描(INDEX SKIP SCAN)**適用于所有類型的復(fù)合B樹索引(包括唯一性索引和非唯一性索引),它使那些在where條件中沒有對目標(biāo)索引的前導(dǎo)列指定查詢條件但同時(shí)又對該 索引的非前導(dǎo)列指定了查詢條件的目標(biāo)SQL依然可以用上該索引,這就像是在掃描該索引時(shí)跳過了它的前導(dǎo)列,直接從該索引的非前導(dǎo)列開始掃描一樣(實(shí)際的執(zhí)行過程并非如此),這也是索引跳躍式掃描中"跳躍"(SKIP)一詞的含義。

3.3 Hash Join是不是有排序?Hash Join會在什么時(shí)候慢?

答案:哈希連接(Hash Join,HJ)自身不需要排序,這是區(qū)別排序合并連接(Sort Merge Join,SMJ)的特點(diǎn)之一。Hash Join原理比較復(fù)雜,但是如果HASH_AREA_SIZE過小,HASH TABLE不能完全放到內(nèi)存中,那么會發(fā)生磁盤HASH運(yùn)算,這樣的情況下Hash Join連接就比較慢。

3.4 什么是物理讀和邏輯讀?

答案:當(dāng)會話所需要的數(shù)據(jù)在內(nèi)存的Buffer Cache中找不到,此時(shí)就要去磁盤上的數(shù)據(jù)文件中讀取,這樣就產(chǎn)生了物理讀(Physical Reads),即物理讀是從磁盤文件把需要的數(shù)據(jù)讀入內(nèi)存(SGA中的Buffer Cache)。 需要注意的是,物理讀過大表現(xiàn)為磁盤I/O較高,邏輯讀過大表現(xiàn)為CPU使用率過高。

3.5 什么是直接路徑訪問?

答案:直接路徑訪問是繞過SGA,直接把數(shù)據(jù)讀入到PGA中,這個過程數(shù)據(jù)不經(jīng)過SGA的緩沖,所以在理論上性能更快。在 PGA 中的數(shù)據(jù)只能由當(dāng)前會話進(jìn)程訪問,當(dāng)其他會話需要訪問這部分?jǐn)?shù)據(jù)時(shí)需要從磁盤讀取數(shù)據(jù),會發(fā)生物理讀。若多個會話同時(shí)需要相同的數(shù)據(jù),則會導(dǎo)致系統(tǒng)物理讀增大,從而影響了數(shù)據(jù)庫的性能。 保存數(shù)據(jù)的方法分為常規(guī)路徑加載和直接路徑加載: (1)常規(guī)路徑加載 執(zhí)行INSERT語句來填充數(shù)據(jù)庫中的表。直接路徑加載會格式化Oracle數(shù)據(jù)塊,并將數(shù)據(jù)塊直接寫入數(shù)據(jù)庫文件,從而可消除大量數(shù)據(jù)庫開銷。直接加載不與其他用戶競爭數(shù)據(jù)庫資源,因此通常可以用接近磁盤速度的速度加載數(shù)據(jù)。常規(guī)路徑加載使用SQL處理和數(shù)據(jù)庫COMMIT操作來保存數(shù)據(jù)。插入記錄數(shù)組后會執(zhí)行COMMIT操作。每次數(shù)據(jù)加載可能涉及多個事務(wù)處理。 (2)直接路徑加載 使用數(shù)據(jù)保存將數(shù)據(jù)塊寫入Oracle數(shù)據(jù)文件。這就是為什么直接路徑加載比常規(guī)路徑加載快很多的原因。數(shù)據(jù)保存與COMMIT的區(qū)別在于: 1)在數(shù)據(jù)保存期間,僅將整個數(shù)據(jù)庫塊寫入數(shù)據(jù)庫中。這些塊是在表的高水位標(biāo)記(HWM)之后寫入的。 2)完成數(shù)據(jù)保存后,HWM會移動。 3)完成數(shù)據(jù)保存后不會釋放內(nèi)部資源。 4)完成數(shù)據(jù)保存不會結(jié)束事務(wù)處理。 5)每次執(zhí)行數(shù)據(jù)保存時(shí)不會更新索引。

3.6 執(zhí)行計(jì)劃里的access和filter有什么區(qū)別?

一般而言,access表示這個謂詞條件的值將會影響數(shù)據(jù)的訪問路徑(表還是索引);filter表示謂詞條件的值不會影響數(shù)據(jù)的訪問路勁,只起到過濾的作用。NOT IN或MIN函數(shù)等容易產(chǎn)生filter操作。

3.7 什么是基數(shù)(Cardinality)和可選擇率(Selectivity)?

答案: **基數(shù)(Cardinality)**是Oracle預(yù)估的返回行數(shù),即對目標(biāo)SQL的某個具體執(zhí)行步驟的執(zhí)行結(jié)果所包含記錄數(shù)的估算值。如果是針對整個目標(biāo)SQL,那么此時(shí)的Cardinality就表示該SQL最終執(zhí)行結(jié)果所包含記錄數(shù)的估算值。 **可選擇率(Selectivity)**是指施加指定謂詞條件后返回結(jié)果集的記錄數(shù)占未施加任何謂詞條件的原始結(jié)果集的記錄數(shù)的比率??蛇x擇率的取值范圍顯然是0~1,它的值越小,就表明可選擇性越好。

4.統(tǒng)計(jì)信息

4.1 什么是動態(tài)采樣(Dynamic Sampling)?

對于沒有收集統(tǒng)計(jì)信息的表,Oracle為了能夠得到相對準(zhǔn)確的執(zhí)行計(jì)劃,會在執(zhí)行SQL之前對SQL語句涉及的表做動態(tài)采樣(Dynamic Sampling,從Oracle 11gR2開始稱之為Dynamic Statistic)。 有兩種方法可以開啟動態(tài)采樣: 1)將參數(shù)OPTIMIZER_DYNAMIC_SAMPLING的值設(shè)為大于或等于1。從Oracle 10g開始,該值默認(rèn)為2,若設(shè)置為0,則禁用動態(tài)采樣。 2)使用動態(tài)采樣的Hint:DYNAMIC_SAMPLING(T LEVEL)。該Hint表示對目標(biāo)表T強(qiáng)制使用等級為參數(shù)level指定值的動態(tài)采樣。 默認(rèn)采樣數(shù)據(jù)塊數(shù)量受隱含參數(shù)“_OPTIMIZER_DYN_SMP_BLKS”的控制,其默認(rèn)值是 32,表示動態(tài)采樣時(shí)默認(rèn)采樣數(shù)據(jù)塊數(shù)量為32。

4.2 什么是待定的統(tǒng)計(jì)信息(Pending Statistic)?

簡單地說,DBA可以對一系列的數(shù)據(jù)表設(shè)置PENDING屬性。設(shè)置PENDING屬性之后,數(shù)據(jù)的統(tǒng)計(jì)信息在數(shù)據(jù)字典中相當(dāng)于已經(jīng)鎖定。當(dāng)新的統(tǒng)計(jì)信息生成之后,不是直接替換原有的數(shù)據(jù),而是存放在PENDING數(shù)據(jù)字典中。在PENDING字典中的統(tǒng)計(jì)信息在默認(rèn)情況下是不會參與SQL執(zhí)行計(jì)劃的生成的。只有在進(jìn)行SQL測試通過的時(shí)候,經(jīng)過用戶手工的確定,才會將其PUBLISH出來,替換原有的統(tǒng)計(jì)信息。

4.3 什么是直方圖(Histogram)?

直方圖是一種列的特殊的統(tǒng)計(jì)信息,主要用來描述列上的數(shù)據(jù)分布情況。當(dāng)數(shù)據(jù)分布傾斜時(shí),直方圖可以有效地提升Cardinality評估的準(zhǔn)確度。構(gòu)造直方圖最主要的原因就是幫助優(yōu)化器在表中數(shù)據(jù)嚴(yán)重偏斜時(shí)做出更好的規(guī)劃。如果對目標(biāo)列收集了直方圖,那么意味著 CBO 將不再認(rèn)為該目標(biāo)列上的數(shù)據(jù)是均勻分布的了,CBO就會用該目標(biāo)列上的直方圖統(tǒng)計(jì)信息來計(jì)算對該列施加查詢條件后的可選擇率和返回結(jié)果集的Cardinality,進(jìn)而據(jù)此計(jì)算成本并選擇相應(yīng)的執(zhí)行計(jì)劃。

5.等待事件

5.1 等待事件的分類?常見等待事件?

Oracle的等待事件主要可以分為兩類:空閑(Idle)等待事件和非空閑(Non-Idle)等待事件。 1)空閑等待事件是指 Oracle 正等待某種工作,在診斷和優(yōu)化數(shù)據(jù)庫的時(shí)候,不用過多注意這部分事件。 2)非空閑等待事件專門針對Oracle的活動,是指數(shù)據(jù)庫任務(wù)或應(yīng)用運(yùn)行過程中發(fā)生的等待,這些等待事件是在調(diào)整數(shù)據(jù)庫的時(shí)候需要關(guān)注與研究的。 一些常見的、重要的等待事件如下: (1)數(shù)據(jù)文件I/O相關(guān)的等待事件 db file sequential read、db file scattered read 、db file parallel read、direct path read、direct path write。 (2)控制文件I/O相關(guān)的等待事件 control file parallel write、control file sequential read、control file single write。 (3)Redo日志文件I/O相關(guān)的等待事件 log file parallel write、log file sync、log file sequential read、log file single write、switch logfile command、log file switch completion、log file switch (clearing log file)、log file switch (checkpoint incomplete)、log switch/archive、log file switch (archiving needed)。 (4)高速緩存區(qū)I/O相關(guān)的等待事件 db file parallel write、db file single write、write complete waits、free buffer waits。

6.Oracle性能相關(guān)

6.1 ROWID和ROWNUM有什么區(qū)別?

(1)ROWID ROWID是一個偽列,既然是偽列,那么這個列就不是用戶定義,而是系統(tǒng)自己給加上的。對每個表都有一個ROWID的偽列,但是表中并不物理存儲ROWID列的值。不過可以像使用其他列那樣使用它,但是不能刪除該列,也不能對該列的值進(jìn)行修改、插入。 (2)ROWNUM ROWNUM是一個偽列,不是真正的列,在表中并不真實(shí)存在,它是Oracle數(shù)據(jù)庫從數(shù)據(jù)文件或緩沖區(qū)中讀取數(shù)據(jù)的順序。切勿理解成記錄的行號

6.2 什么是死鎖?

所謂死鎖是指兩個或兩個以上的進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。Oracle對于“死鎖”是要做處理的。

6.3 在高并發(fā)、高負(fù)載的情況下,如何給表添加字段并設(shè)置DEFAULT值?

當(dāng)Oracle表數(shù)據(jù)量上億時(shí),對表執(zhí)行“ALTER TABLE XXX ADD COLUMN_XX VARCHAR2(2)DEFAULT ‘XXX’;”操作時(shí),效率及安全性是必須要考慮的因素。若直接執(zhí)行,則會在該過程中給表加上6級表鎖,也就是連查詢都需要等待,這在生產(chǎn)庫上是相當(dāng)危險(xiǎn)的操作。因?yàn)镺racle在執(zhí)行上述操作過程中,不僅要更新數(shù)據(jù)字典,還會刷新全部的記錄,并且會使得 Undo表空間暴漲,所以,正確的做法是將更新數(shù)據(jù)字典和更新字段值分開。

6.4 若臨時(shí)表空間使用率過高有什么調(diào)優(yōu)思路?

臨時(shí)表空間是Oracle數(shù)據(jù)庫的重要組成部分,尤其是對于大型的頻繁操作,如創(chuàng)建索引、排序等都需要在臨時(shí)表空間完成來減少內(nèi)存的開銷。當(dāng)然對于查詢性能要求較高的操作應(yīng)盡可能地避免在磁盤上完成這些操作。 若臨時(shí)表空間占用過大,首先,要去檢查是什么會話占用了臨時(shí)表空間,具體占用了多少,臨時(shí)段的具體類型是什么。通過查詢視圖GV

S

O

R

T

U

S

A

G

E

G

V

SORT_USAGE(GV

SORTU?SAGE(GVSORT_USAGE和GV

T

E

M

P

S

E

G

U

S

A

G

E

查詢的結(jié)果是一致的)和

G

V

TEMPSEG_USAGE查詢的結(jié)果是一致的)和 GV

TEMPSEGU?SAGE查詢的結(jié)果是一致的)和GVSESSION 可以獲取到臨時(shí)表空間的占用情況和臨時(shí)段的類型等信息。

6.5 如何有效地刪除一個大表(即表的EXTENT數(shù)很多)?

答案:一個有很多EXTENT(100k+)的表,如果只是簡單地用DROP TABLE的話,那么會大量消耗CPU(在DMT管理下,Oracle要對FET

、

U

E

T

、UET

、UET數(shù)據(jù)字典進(jìn)行操作),可能會用上幾天的時(shí)間,較好的方法是分多次刪除EXTENT,以減輕這種消耗

6.6 Oracle 降低高水位線的方法

釋放表的高水位通常有如下幾種辦法: (1)對表進(jìn)行MOVE操作:ALTER TABLE TABLE_NAME MOVE;。若表上存在索引,則記得重建索引。 (2)對表進(jìn)行SHRINK SPACE操作:ALTER TABLE TABLE_NAME SHRINK SPACE;,注意,在執(zhí)行該指令之前必須開啟行移動:ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;。該方法的優(yōu)點(diǎn)是:在碎片整理結(jié)束后,表上相關(guān)的索引仍然有效,缺點(diǎn)是會產(chǎn)生大量的UNDO和REDO。 (3)復(fù)制要保留的數(shù)據(jù)到臨時(shí)表T,DROP原表,然后RENAME臨時(shí)表T為原表。 (4)exp/imp或expdp/impdp重構(gòu)表。 (5)若表中沒有數(shù)據(jù)則直接使用TRUNCATE來釋放高水位。

7.數(shù)據(jù)庫診斷

7.1 數(shù)據(jù)庫運(yùn)行很慢,如何解決?

導(dǎo)致數(shù)據(jù)庫運(yùn)行很慢的原因非常多,例如可能是開發(fā)人員SQL語句寫的不好導(dǎo)致執(zhí)行性能比較差。所以,碰到這類問題,不能給出一個非常精確的答案,但是可以按照如下的步驟去檢測排除: 1)top或topas查看系統(tǒng)的CPU利用率是否正常,找到最耗費(fèi)資源的Oracle進(jìn)程,然后進(jìn)入數(shù)據(jù)庫查詢相關(guān)的會話,找到SQL語句再進(jìn)行具體分析。如果CPU正常,那么就很可能是由于開發(fā)人員寫的SQL語句不好,導(dǎo)致SQL執(zhí)行時(shí)間過長,因此,開發(fā)人員誤認(rèn)為是數(shù)據(jù)庫運(yùn)行緩慢。 2)進(jìn)入數(shù)據(jù)庫查看等待事件是否正常

7.2 Undo的作用

1)事務(wù)回滾(Rollback Transaction) 2)事務(wù)恢復(fù)(Transaction Recovery) 3)提供一致性讀(Consistent Read) 4)實(shí)現(xiàn)閃回功能

7.3 常用的10046及10053診斷事件的區(qū)別是什么?

10046事件是Oracle提供的內(nèi)部事件,是對SQL_TRACE的增強(qiáng)。Oracle的10046事件可以跟蹤應(yīng)用程序所執(zhí)行的SQL語句,并且得到其解析次數(shù)、執(zhí)行次數(shù)、CPU使用時(shí)間等信息。這對DBA來分析、定位數(shù)據(jù)庫性能問題是非常有用的。 10053事件是最常用的Oracle優(yōu)化器跟蹤Trace。10053事件解析優(yōu)化器為什么選擇某個執(zhí)行計(jì)劃但并不記錄這個執(zhí)行計(jì)劃到底運(yùn)行地如何。10046事件并不解釋優(yōu)化器的工作,但它記錄了在SQL解析階段所遇到的等待事件和所消耗的CPU等資源,以及執(zhí)行階段的各項(xiàng)指標(biāo)。需要注意的是,如果一個SQL語句已經(jīng)被解析過,那么就不會生成10053的trace文件,但10046的trace文件可以重復(fù)生成。 簡而言之,10046事件記錄SQL如何運(yùn)行,而10053記錄優(yōu)化器為什么為這個SQL選擇某個執(zhí)行計(jì)劃。

8.會話

9.ASM和RAC維護(hù)

9.1 集群(Cluster)特有的后臺進(jìn)程有哪些?

集群由若干進(jìn)程組成,其中,最重要的幾個進(jìn)程包括 OCSSD、CRSD、EVMD 等

9.2 集群有哪幾種心跳機(jī)制?

在幾乎所有高可用的環(huán)境中都有心跳的存在,心跳的主要目的是為了檢測集群中節(jié)點(diǎn)的狀態(tài)。如果檢測失敗,那么管理軟件會認(rèn)為某個節(jié)點(diǎn)存在故障,并根據(jù)一定的算法來做出適當(dāng)?shù)靥幚?,避免對環(huán)境的破壞,即高可用性軟件進(jìn)行自動修復(fù)。 Oracle集群有3種心跳機(jī)制,分別為網(wǎng)絡(luò)心跳(Network HeartBeat,NHB)、磁盤心跳(Disk HeartBeat, DHB)和本地心跳(Local HeartBeat,LHB)

9.3 RAC的腦裂和健忘分別指的是什么?

(1)腦裂(SplitBrain) 在集群中,節(jié)點(diǎn)間通過心跳來了解彼此的健康狀態(tài),以確保各節(jié)點(diǎn)協(xié)調(diào)工作。假設(shè)當(dāng)“心跳”出現(xiàn)問題,但各個節(jié)點(diǎn)還在正常運(yùn)行,這時(shí),每個節(jié)點(diǎn)都認(rèn)為其他的節(jié)點(diǎn)宕機(jī)了,自己才是整個集群環(huán)境中的“唯一健在者”,自己應(yīng)該獲得整個集群的“控制權(quán)”。在集群環(huán)境中,存儲設(shè)備都是共享的,這就意味著數(shù)據(jù)災(zāi)難。簡單點(diǎn)說,就是如果由于私有網(wǎng)絡(luò)硬件或軟件的故障,導(dǎo)致集群節(jié)點(diǎn)間的私有網(wǎng)絡(luò)在一定時(shí)間內(nèi)無法進(jìn)行正常的通信,這種現(xiàn)象稱為腦裂。在發(fā)生腦裂情況后,集群的某些節(jié)點(diǎn)間的網(wǎng)絡(luò)心跳丟失,但磁盤心跳依然正常,集群根據(jù)投票算法(Quorum Algorithm)將不正確的節(jié)點(diǎn)踢出集群。磁盤心跳的主要目的是當(dāng)集群發(fā)生腦裂時(shí)可以幫助指定腦裂的解決方案。 (2)健忘(Amnesia) 集群環(huán)境的配置文件不是集中存放的,而是每個節(jié)點(diǎn)都有一個本地副本,在集群正常運(yùn)行時(shí),用戶可以在任何節(jié)點(diǎn)更改集群的配置,并且這種更改會自動同步到其他節(jié)點(diǎn)。健忘是由于某個節(jié)點(diǎn)更新了OCR(Oracle Cluster Registry,Oracle集群注冊)中的內(nèi)容,而集群中的另外一些節(jié)點(diǎn)此時(shí)處于關(guān)閉、維護(hù)或重啟階段,OCR Master進(jìn)程來不及將其信息更新到這些異常節(jié)點(diǎn)緩存而導(dǎo)致的狀態(tài)不一致。譬如,A節(jié)點(diǎn)發(fā)出了添加OCR鏡像的命令,在這個時(shí)候B節(jié)點(diǎn)處于重啟階段。重啟后A已經(jīng)更新完畢,而此時(shí)B并不知道已經(jīng)為OCR增加了一個新的鏡像磁盤,健忘由此而生。OCR用于解決健忘問題。

9.4 什么是GPnP?

網(wǎng)格即插即用(Grid Plug and Play,GPnP)是Oracle 11gR2 RAC提供的新組件,該組件的功能由gpnpd.bin守護(hù)進(jìn)程實(shí)現(xiàn)。GPnP可以提供一個動態(tài)的GI環(huán)境,能隨著負(fù)載的增加而動態(tài)改變GI環(huán)境。GPnP能非常容易地添加、替換或者移除集群中的節(jié)點(diǎn),就像電源插頭一樣即插即用。

9.5 oraInventory目錄的作用是什么?

答案:由于Oracle支持將多個Oracle軟件(或者多版本的數(shù)據(jù)庫軟件)安裝到同一臺服務(wù)器上,這就需要一個位置統(tǒng)一記錄安裝的軟件信息。中央目錄(Central Inventory)實(shí)際上就是一臺主機(jī)上安裝的Oracle產(chǎn)品清單。

9.6 談?wù)剬racle中RAC用到的Cache Fusion的理解。

答案:Cache Fusion即緩存融合,它能實(shí)現(xiàn)RAC在各個節(jié)點(diǎn)之間同步SGA中的緩存信息,從而達(dá)到提高訪問速度的效果,也保證了數(shù)據(jù)的一致性。要發(fā)揮Cache Fusion的作用,要有一個前提條件,那就是網(wǎng)絡(luò)的速度要比訪問磁盤的速度要快。否則,沒有引入Cache Fusion的意義。

9.7 如果$GRID_HOME下的權(quán)限被人為修改過,那么如何來修復(fù)該權(quán)限問題?

1)根據(jù)MOS文檔提供的建議通過$GRID_HOME/crs/install/rootcrs.pl -init或roothas.pl -init進(jìn)行解決。 2)采用MOS文檔1515018.1上提供的腳本在正常庫上生成腳本,然后將生成的腳本在異常庫上執(zhí)行從而來修復(fù)權(quán)限問題。 3)Oracle 11gR2可以deconfig crs的配置,然后重新運(yùn)行root.sh即可。 4)MOS文檔1515018.1上提供了一個修復(fù)腳本:permission.pl??梢愿鶕?jù)該腳本來修復(fù)。

9.8 RAC等待事件gc buffer busy acquire和gc buffer busy release的區(qū)別是什么?

gc buffer busy acquire是當(dāng)會話1嘗試請求訪問遠(yuǎn)程實(shí)例上的數(shù)據(jù)塊,但是在會話1之前已經(jīng)有相同實(shí)例上另外一個會話2請求訪問了相同的數(shù)據(jù)塊,并且沒有完成,那么會話1等待gc buffer busy acquire。 gc buffer busy release是在會話1之前已經(jīng)有遠(yuǎn)程實(shí)例的會話2請求訪問了相同的數(shù)據(jù)塊,并且沒有完成,那么會話1等待gc buffer busy release。

9.9 RAC節(jié)點(diǎn)被踢出可能有哪些原因?

答案:可能的原因包括服務(wù)器負(fù)載嚴(yán)重或內(nèi)核HANG住、網(wǎng)絡(luò)心跳丟失、磁盤心跳丟失、CSSD進(jìn)程HANG住。

9.10 Oracle11g RAC 啟動流程梳理

啟動流程步驟層次梳理: 第一層:OHASD 啟動:

cssdagent - 負(fù)責(zé)啟動 CSSD 的 Agent。orarootagent - 負(fù)責(zé)啟動所有 root 用戶下的 ohasd 資源 的Agent。oraagent - 負(fù)責(zé)啟動所有 oracle 用戶下的 ohasd 資源的 Agent。cssdmonitor - 監(jiān)控 CSSD 以及節(jié)點(diǎn)健康(和 cssdagent 一起)。

第二層:OHASD rootagent 啟動:

CRSD - 管理集群資源的主要后臺進(jìn)程。CTSSD - Cluster Time Synchronization Services DaemonDiskmonACFS (ASM Cluster File System)驅(qū)動

第三層:OHASD oraagent 啟動:

MDNSD - 用來實(shí)現(xiàn) DNS 查詢GIPCD - 用來做節(jié)點(diǎn)間通信GPNPD - Grid Plug & Play Profile DaemonEVMD - Event Monitor DaemonASM - ASM 資源

第四層:CRSD 啟動:

orarootagent - 負(fù)責(zé)啟動所有 root 用戶下的 crsd 資源的 Agent。oraagent - 負(fù)責(zé)啟動所有 oracle 用戶下的 crsd 資源的 Agent。

第五層:CRSD rootagent 啟動:

Network resource - 監(jiān)控公共網(wǎng)絡(luò)SCAN VIP(s) - Single Client Access Name Virtual IPsNode VIPs - 每個節(jié)點(diǎn)1個ACFS Registery - 掛載 ASM Cluster File SystemGNS VIP (optional) - VIP for GNS

第六層:CRSD oraagent 啟動:

ASM Resouce - ASM 資源Diskgroup - 用來管理/監(jiān)控 ASM 磁盤組DB Resource - 用來管理/監(jiān)控?cái)?shù)據(jù)庫和實(shí)例SCAN Listener - SCAN 監(jiān)聽,監(jiān)聽在 SCAN VIP 上Listener - 節(jié)點(diǎn)監(jiān)聽,監(jiān)聽在 Node VIP 上Services - 用來管理/監(jiān)控 servicesONS - Oracle Notification ServiceeONS - 加強(qiáng)版 Oracle Notification ServiceGSD - 為了向下兼容 9iGNS (optional) - Grid Naming Service - 處理域名解析

10.DG維護(hù)

10.1 DG的分類

DG 根據(jù)備庫(Standby Database)重演日志方式的不同,可以分為物理 DG(PhysicalDG)、邏輯DG(LogicalDG)和快照DG(Snapshot DG),它們對應(yīng)的數(shù)據(jù)庫分別可以稱為Physical Standby、Logical Standby和Snapshot Standby。

10.2 RFS、LNSn、MRP、LSP進(jìn)程的作用分別是什么?

(1)RFS進(jìn)程 RFS(Remote File Server)進(jìn)程主要用來接受從主庫傳送過來的日志信息。 (2)LNSn(LGWR Network Server process)進(jìn)程 DG可以使用ARCn、LGWR來傳送日志,但它們都是把日志發(fā)送給本地的LNSn(如果有多個目標(biāo)備庫,那么會啟動相應(yīng)數(shù)量的LNSn 進(jìn)程,同時(shí)發(fā)送數(shù)據(jù))進(jìn)程,然后備庫的RFS進(jìn)程接收數(shù)據(jù),接收到的數(shù)據(jù)可以存儲在備庫的備用Redo日志文件中或備庫的歸檔日志中,然后再應(yīng)用到備庫中。 (3)MRP(Managed Recovery Process)進(jìn)程 該進(jìn)程只針對物理備庫,作用為應(yīng)用從主庫傳遞過來的Redo 日志到物理備庫,稱為 Redo Apply。 (4)LSP(logical standby process)進(jìn)程 只有邏輯備庫才會有該進(jìn)程。

10.3 DG的3種保護(hù)模式

DG 提供了 3 種數(shù)據(jù)保護(hù)模式(Protection Mode):最大保護(hù)(Maximum Protection)、最高性能(Maximum Performance)和最高可用(Maximum Availability)

10.4 Switchover和Failover的區(qū)別

1)Switchover是指主庫轉(zhuǎn)換成備庫,然后將原備庫轉(zhuǎn)換成新主庫;而Failover是指將備庫轉(zhuǎn)換成主庫。 2)使用場合不同:Switchover用于有準(zhǔn)備的、計(jì)劃之中的切換,通常是系統(tǒng)升級、數(shù)據(jù)遷移等常態(tài)任務(wù);Failover用于意料之外的突發(fā)情況,例如異常斷電、自然災(zāi)難等。 3)數(shù)據(jù)丟失程度不同:Switchover表示不會丟失數(shù)據(jù),F(xiàn)ailover通常意味著有部分?jǐn)?shù)據(jù)丟失。 4)善后處理的不同:Switchover之后DG環(huán)境不會被破壞,仍然有Primary、Standby兩種角色的系統(tǒng)存在,但是Failover之后,DG環(huán)境就會被破壞,一般情況下需要重建。

10.5 主庫丟失歸檔,物理DG如何恢復(fù)?

可以通過對主庫進(jìn)行基于SCN的增量備份來恢復(fù)物理DG。

11.OGG維護(hù)

11.1 OGG主要包含Manager進(jìn)程、Extract進(jìn)程、Pump進(jìn)程、Replicat進(jìn)程

1)Manager進(jìn)程是OGG的控制進(jìn)程,運(yùn)行在源端和目標(biāo)端上。它的主要作用包含啟動、監(jiān)控、重啟 OGG的其他進(jìn)程;報(bào)告錯誤及事件;分配數(shù)據(jù)存儲空間;發(fā)布閥值報(bào)告等。 2)Extract進(jìn)程運(yùn)行在數(shù)據(jù)庫源端,負(fù)責(zé)從源端數(shù)據(jù)表或者日志中捕獲數(shù)據(jù)。在初始數(shù)據(jù)裝載階段, Extract進(jìn)程直接從源端的數(shù)據(jù)表中抽取數(shù)據(jù);在初始數(shù)據(jù)同步完成以后,Extract進(jìn)程負(fù)責(zé)捕獲源端數(shù)據(jù)的變化(包括DML和DDL)。 3)Data Pump進(jìn)程(簡稱Pump進(jìn)程)運(yùn)行在數(shù)據(jù)庫源端。其作用是如果源端使用了本地的trail文件,那么Pump進(jìn)程就會把trail以數(shù)據(jù)塊的形式通過TCP/IP協(xié)議發(fā)送到目標(biāo)端,這通常也是推薦的方式。 4)Replicat 進(jìn)程也稱為應(yīng)用進(jìn)程,運(yùn)行在目標(biāo)端,是數(shù)據(jù)傳遞的最后一站,負(fù)責(zé)讀取目標(biāo)端 trail文件中的內(nèi)容,并將其解析為DML或DDL語句,然后應(yīng)用到目標(biāo)數(shù)據(jù)庫中。

11.2 OGG-00446 Could not find archived log for sequence錯誤的處理辦法

如果面試官問到維護(hù)OGG曾經(jīng)碰到的一次故障處理過程,那么就可以拿這個錯誤作為案例來說明。OGG-00446主要是歸檔文件丟失引起,處理辦法就是將缺失的歸檔日志找回來。如果找不到所需歸檔日志,那么可以按照如下2種辦法來處理: 第一種辦法是改變抽取進(jìn)程的時(shí)間,但這可能會導(dǎo)致數(shù)據(jù)不一致 第二種辦法:重新初始化,基于scn重新初始化

12.備份恢復(fù)

**RMAN可以用來備份:**① 數(shù)據(jù)庫:包括數(shù)據(jù)文件、控制文件、SPFILE(Server Parameter File)文件;② 表空間;③ 歸檔文件;④ 備份集。 **RMAN不能用來備份:**① 聯(lián)機(jī)日志文件(Online Redo Logs);② 非READ/WRITE狀態(tài)的可傳輸表空間;③ PFILE(Parameter File)文件。

12.1 TRUNCATE恢復(fù)方法

1)是否有測試庫,測試庫的表數(shù)據(jù)和當(dāng)前數(shù)據(jù)是否一致,若一致,則可以考慮從測試庫把表數(shù)據(jù)導(dǎo)入到被刪除的庫中。 2)是否有exp或expdp邏輯備份,若有,則可以導(dǎo)入到被刪除的庫中。 3)是否有RMAN備份,若有,則可以將數(shù)據(jù)恢復(fù)到其他地方,然后將數(shù)據(jù)庫exp出來,最后導(dǎo)入到被刪除的庫中。 4)數(shù)據(jù)庫是否開啟了閃回,如果開了閃回則可以利用閃回?cái)?shù)據(jù)庫的特性找回?cái)?shù)據(jù)。 5)利用TSPITR,表空間基于時(shí)間點(diǎn)的恢復(fù)技術(shù)來恢復(fù)。 6)是否有歸檔,若有則可以采用LogMiner進(jìn)行日志挖掘。 7)若以上這些辦法都不能恢復(fù),則可以嘗試無備份情況下的恢復(fù),這里推薦兩種辦法, fy_recover_data包和gdul工具

12.2 Oracle的SCN是什么?

SCN(System Change Number,系統(tǒng)改變號)是一個由系統(tǒng)內(nèi)部維護(hù)的序列號,SCN在數(shù)據(jù)庫全局是唯一的。當(dāng)系統(tǒng)需要更新的時(shí)候自動增加,它是系統(tǒng)中維持?jǐn)?shù)據(jù)的一致性和順序恢復(fù)的重要標(biāo)志,是數(shù)據(jù)庫中非常重要的一種數(shù)據(jù)結(jié)構(gòu)。在數(shù)據(jù)庫中,SCN作為一種時(shí)鐘機(jī)制來標(biāo)記數(shù)據(jù)庫動作,比如,當(dāng)事務(wù)發(fā)生時(shí),數(shù)據(jù)庫會用一個SCN來標(biāo)記它。

12.3 實(shí)例恢復(fù)和介質(zhì)恢復(fù)的區(qū)別是什么?

(1)介質(zhì)恢復(fù) 介質(zhì)恢復(fù)是基于物理備份恢復(fù)數(shù)據(jù),它是Oracle數(shù)據(jù)庫出現(xiàn)介質(zhì)故障時(shí)恢復(fù)的重要保障。介質(zhì)恢復(fù)包括塊恢復(fù)、數(shù)據(jù)文件恢復(fù)、表空間恢復(fù)和整個數(shù)據(jù)庫的恢復(fù)。介質(zhì)恢復(fù)主要是針對錯誤類型中的介質(zhì)失敗,如果是少量的塊失敗,那么可以使用介質(zhì)恢復(fù)中的塊恢復(fù)來快速修復(fù);但如果是其他情況的丟失,那么需要根據(jù)具體情況,可使用數(shù)據(jù)文件恢復(fù)、表空間恢復(fù)甚至全庫恢復(fù) (2)實(shí)例恢復(fù) 實(shí)例恢復(fù)可確保數(shù)據(jù)庫在一個實(shí)例失敗后仍能回到一致性的狀態(tài)。Redo日志記錄了對實(shí)例的所有更改。單實(shí)例數(shù)據(jù)庫擁有一個重做線程,而一個RAC數(shù)據(jù)庫擁有多個重做線程,且RAC數(shù)據(jù)庫的每個實(shí)例擁有一個重做線程。當(dāng)事務(wù)提交時(shí),LGWR 將內(nèi)存中的重做條目和事務(wù) SCN 同時(shí)寫入聯(lián)機(jī)Redo日志。但是,DBWn進(jìn)程只在最有利的時(shí)機(jī)將已修改的數(shù)據(jù)塊寫入數(shù)據(jù)文件。所以,未提交的更改可能會暫時(shí)存在于數(shù)據(jù)文件中,而已提交的更改也可能還不在數(shù)據(jù)文件中。

12.4 DELETE了一條數(shù)據(jù)并且提交了,該如何找回?

在Oracle中可以通過閃回技術(shù)來找回已經(jīng)刪除并且提交了的數(shù)據(jù)。當(dāng)然,除了閃回技術(shù)外還可以采用LogMiner(使用該工具可以輕松獲得Redo日志文件包含歸檔日志文件中的具體內(nèi)容)進(jìn)行日志挖掘,找出其撤銷SQL并執(zhí)行就可以找回DELETE語句刪除的數(shù)據(jù)。

12.5 rm-rf誤操作的恢復(fù)過程

如果執(zhí)行了rm-rf操作刪除了所有的基于FS的數(shù)據(jù)文件,但是數(shù)據(jù)庫還處于OPEN狀態(tài),那么,在這種情況下如何快速地恢復(fù)數(shù)據(jù)庫呢?這里的前提條件是沒有任何可用的RMAN 備份、數(shù)據(jù)庫冷備份等,也就是說,沒有任何備份。在這種情況下可以通過系統(tǒng)的文件句柄號來恢復(fù)數(shù)據(jù)文件。整個恢復(fù)過程可以簡單分為如下幾步: (1)找到被刪除文件的文件句柄所在的目錄 首先通過命令“ps -ef|grep ora_lgwr”找到LGWR的進(jìn)程號。假設(shè)這里的進(jìn)程號為31863,則被刪除的文件句柄在/proc/31863/fd目錄下。 (2)采用操作系統(tǒng) cp 命令復(fù)制文件句柄到原數(shù)據(jù)庫文件路徑 假設(shè)這里看到的是如下的情況,被刪除的文件末尾一般都有deleted標(biāo)識。

12.6 如何處理Oracle中的壞塊?

(1)壞塊的簡介 Oracle數(shù)據(jù)文件的壞塊可以分為物理壞塊和邏輯壞塊。物理壞塊指的是塊格式本身已經(jīng)損壞,塊內(nèi)的數(shù)據(jù)沒有任何意義。邏輯壞塊指的是塊內(nèi)的數(shù)據(jù)在邏輯上存在問題,比如說索引塊的索引值沒有按順序排列導(dǎo)致的邏輯壞塊。物理壞塊一般是由于內(nèi)存問題、OS問題、I/O子系統(tǒng)問題或硬件引起的,邏輯壞塊一般是由Oracle系統(tǒng)Bug等原因引起的。 (2)BMR 恢復(fù)壞塊 如果數(shù)據(jù)庫只有很少的數(shù)據(jù)塊被破壞,那么使用塊介質(zhì)恢復(fù)(Block Media Recovery,BMR)是較好的塊恢復(fù)方法。BMR只能用于恢復(fù)物理損壞(Physical Corruptions),在數(shù)據(jù)文件聯(lián)機(jī)時(shí)即可恢復(fù)相關(guān)壞塊。

12.7 LogMiner是什么?其有哪些用途?

LogMiner 工具的主要用途有:①跟蹤數(shù)據(jù)庫的變化:可以離線地跟蹤數(shù)據(jù)庫的變化,而不會影響在線系統(tǒng)的性能;②回退數(shù)據(jù)庫的變化:回退特定的變化數(shù)據(jù),減少Point-In-Time Recovery的執(zhí)行;③優(yōu)化和擴(kuò)容計(jì)劃:可通過分析日志文件中的數(shù)據(jù)以分析數(shù)據(jù)的增長模式;④確定數(shù)據(jù)庫的邏輯損壞時(shí)間:準(zhǔn)確定位操作執(zhí)行的時(shí)間和SCN;⑤確定事務(wù)級要執(zhí)行的精細(xì)邏輯恢復(fù)操作,可以取得相應(yīng)的Undo操作;⑥執(zhí)行后續(xù)審計(jì)。

12.8 什么是BBED?它有哪些作用?

BBED(Block Brower and Editor)是用來直接查看和修改Oracle數(shù)據(jù)塊的一個內(nèi)部工具,它可以直接修改Oracle數(shù)據(jù)文件塊的內(nèi)容,在一些極端恢復(fù)場景下比較有用。因?yàn)樵摴ぞ卟槐籓racle服務(wù)支持,所以,默認(rèn)是沒有生成可執(zhí)行文件的,在使用前需要編譯生成。

12.9 如果必須利用備份恢復(fù)數(shù)據(jù)庫,但是又沒有控制文件,如何解決問題?

答案:可以重建控制文件,然后利用帶BACKUP CONTROL FILE子句的RECOVER命令恢復(fù)數(shù)據(jù)庫。

12.10 歸檔和非歸檔模式之間的不同點(diǎn)是什么?它們各自的優(yōu)缺點(diǎn)是什么?

答案:在Oracle數(shù)據(jù)庫操作中,數(shù)據(jù)庫可以設(shè)置為歸檔模式和非歸檔模式。歸檔模式保存所有的事務(wù)日志,包括在線日志和歸檔日志,而非歸檔模式?jīng)]有歸檔日志。歸檔模式是指可以備份所有的數(shù)據(jù)庫事務(wù)并恢復(fù)到任意一個時(shí)間點(diǎn)。非歸檔模式則相反,不能恢復(fù)到任意一個時(shí)間點(diǎn)但是非歸檔模式可以帶來數(shù)據(jù)庫性能上的少許提高,因?yàn)榉菤w檔模式?jīng)]有歸檔日志。利用 RMAN 備份數(shù)據(jù)庫,若是歸檔模式則可以在OPEN狀態(tài)下備份,若是非歸檔模式則不能在OPEN狀態(tài)下備份。

12.11 在控制文件丟失且無備份的情況下如何恢復(fù)?

答案:重建控制文件,在重建控制文件之前,需要使用包DBMS_BACKUP_RESTORE來抽取數(shù)據(jù)文件

12.12 在Undo表空間數(shù)據(jù)文件丟失的情況下如何恢復(fù)?

答案:恢復(fù)大約可以分為 3 種情況: ①有備份,這種情況下直接采用備份的文件進(jìn)行恢復(fù)即可。 ②無備份但是有完整的歸檔文件存在,這種情況下可以使用命令“ALTER DATABASE CREATE DATAFILE 文件號 AS ‘/u01/app/oracle/oradata/lhrdb/undotbs01.dbf’ size 50m;”來創(chuàng)建丟失的Undo文件,然后使用“RECOVER DATAFILE 文件號;”進(jìn)行恢復(fù)數(shù)據(jù)庫文件即可。 ③無備份,歸檔文件丟失,在這種情況下的恢復(fù)比較復(fù)雜。首先應(yīng)該切換Undo表空間到一個新建的Undo表空間中,并設(shè)置原有表空間的管理模式為手動管理模式,然后將隱含參數(shù)“_OFFLINE_ROLLBACK_SEGMENTS”設(shè)置為TRUE

12.13 如果控制文件損壞如何恢復(fù)?

答案:如果控制文件有多個,而只損壞了單個控制文件,那么只需要關(guān)閉數(shù)據(jù)庫,拷貝其他好的控制文件覆蓋掉壞的控制文件即可。也可以修改參數(shù)文件,只保留1個控制文件。如果損壞了全部控制文件,那么需要重新創(chuàng)建控制文件或從備份恢復(fù)。重新創(chuàng)建控制文件的腳本可以通過命令“ALTER DATABASE BACKUP CONTROLFILE TO TRACE;”獲取。

13.ASH/AWR/ADDM

13.1 AWR報(bào)告中主要關(guān)注哪些方面內(nèi)容?

(1)DB Time/Elapsed 該部分位于AWR報(bào)告的頭部 (2)Load Profile 該部分位于AWR報(bào)告的總覽部分(Report Summary),AWR報(bào)告總覽部分包括了5個部分:緩存尺寸(Cache Sizes)、負(fù)載性能(Load Profile)、數(shù)據(jù)庫效率(Instance Efficiency Percentages)、共享池統(tǒng)計(jì)(Shared Pool Statistics)、TOP5事件(Top 5 Timed Events)。 (3)Instance Efficiency Percentages (Target 100%) 該部分包含了Oracle關(guān)鍵指標(biāo)的內(nèi)存命中率及其他數(shù)據(jù)庫實(shí)例操作的效率。 (4)Top 5 Timed Events? (5)SQL Statistics SQL Statistics分別從執(zhí)行時(shí)間、物理讀、邏輯讀、子游標(biāo)個數(shù)、執(zhí)行次數(shù)等方面羅列出TOP語句,從該部分可以迅速獲取有性能問題的SQL語句 (6)Segment Statistics 該部分從段(表段、索引段)的角度描述了數(shù)據(jù)庫的繁忙程度,包含了邏輯讀、物理讀、ITL等方面。

14.審計(jì)

14.1 審計(jì)如何分類

在Oracle中分別支持以下三種標(biāo)準(zhǔn)審計(jì)類型,或者說,可以從3個角度去啟用審計(jì): 1)語句審計(jì)(Statement Auditing),對某種類型的SQL語句審計(jì),不指定結(jié)構(gòu)或?qū)ο蟆徲?jì)SQL語句的成功執(zhí)行或不成功執(zhí)行。這里從SQL語句的角度出發(fā),進(jìn)行指定。審計(jì)只關(guān)心執(zhí)行的語句。 2)權(quán)限審計(jì)(Privilege Auditing),對執(zhí)行相應(yīng)動作的系統(tǒng)特權(quán)的使用審計(jì),對涉及某些權(quán)限的操作進(jìn)行審計(jì),這里強(qiáng)調(diào)“系統(tǒng)權(quán)限” 3)對象審計(jì)(Object Auditing),對一特殊模式對象上的指定對象的審計(jì)。對一個特殊模式對象上的DML語句進(jìn)行審計(jì)。記錄作用在指定對象上的操作。

15.Oracle鎖相關(guān)知識

柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫 Oracle面試總結(jié)

http://yzkb.51969.com/

相關(guān)文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18921953.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄