




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ORACLE的工作機制
體系結(jié)構(gòu)
實例
Oracle運行的時候,在內(nèi)存中會要開辟一個區(qū)間,這個區(qū)間主要是用于從磁盤(數(shù)據(jù)文
件)中讀出數(shù)據(jù)后的一個在內(nèi)存的緩存和處理。而處理這些數(shù)據(jù)的操作,需要有一些系統(tǒng)的
后臺進程,這些進行在Oracle數(shù)據(jù)庫啟動的時候,就開始運行,一直在響應(yīng)前臺的操作。實
際.上,這-一個區(qū)間(SGA)和這些后臺進程合在一起,就稱為實例。實例是包括SGA區(qū)和后
臺進程兩個部分的。
數(shù)據(jù)庫啟動執(zhí)行若干動作,經(jīng)歷三個階段,分別是天加載、加我和打開。
1、未加載(nomount)可以把數(shù)據(jù)庫啟動的這一階段看作是Oracle實例的啟動。
這種方式啟動下可執(zhí)行:聿建控制文件、重建數(shù)據(jù)庫。這一啟動命令:
?讀取數(shù)據(jù)庫參數(shù)文件。
?啟動所需的后臺進程并按參數(shù)文件中的定義分配內(nèi)存。
?將進展情況寫入告警日志文件中。
2、加載(mount)在實例啟動加載階段,數(shù)據(jù)庫參數(shù)文件中指定的控制文件被讀
取。記住控制文件將數(shù)據(jù)庫各部分聯(lián)系在一起。實例從控制文件中找到下列信息,然
后將進展寫入告警日志文件。這種方式啟動下可執(zhí)行:數(shù)據(jù)庫日志歸檔、數(shù)據(jù)庫恢復(fù)、
重新命名?些數(shù)據(jù)庫文件:
?所有數(shù)據(jù)文件和重做日志文件的名稱和位置。
?數(shù)據(jù)庫名。
?最新系統(tǒng)更改號(SCN)o
3、打開(opon)包含在數(shù)據(jù)庫中的每個聯(lián)機激據(jù)文件在數(shù)據(jù)庫打開前必須被同步.
在數(shù)據(jù)庫打開階段:
?所有聯(lián)機數(shù)據(jù)文件的頭與控制文件信息相比較。
?所有文件同步后,數(shù)據(jù)庫打開。
當(dāng)數(shù)據(jù)庫關(guān)閉時,取決于它的關(guān)閉方式執(zhí)行不同的任務(wù):
?正常(normal)在所有的用戶離線后發(fā)生的正常關(guān)閉。
?事務(wù)(transactional)事務(wù)關(guān)閉就是當(dāng)所有的用戶執(zhí)行完當(dāng)前的事務(wù)后,將用
戶從數(shù)據(jù)庫上清除。
?立即(immediate)立即關(guān)閉就是從數(shù)據(jù)庫清除所有當(dāng)前用戶之后,回退所有未
完成的操作。
?異常(abort)異常關(guān)閉沒有給數(shù)據(jù)庫任何整理的機會。這種方式關(guān)閉后需要實
行崩潰恢復(fù)。
實例是數(shù)據(jù)管理的核心一它做所有的工作,而數(shù)據(jù)庫存儲所有的數(shù)據(jù)。
其他啟動方式:
,startuprestrict
約束方式啟動
這種方式能夠啟動數(shù)據(jù)庫,但只允許具有一定特權(quán)的用戶訪問
非特權(quán)用戶訪問時,會出現(xiàn)以下提示:
ERROR:ORA-01035:ORACLE只允許具有RESTRICTEDSESSION權(quán)限的用戶使用
?startupforce
強制啟動方式
當(dāng)不能關(guān)閉數(shù)據(jù)庫時,可以用slarlupforce來完成數(shù)據(jù)庫的關(guān)閉
先關(guān)閉數(shù)據(jù)庫,再執(zhí)行正常啟動數(shù)據(jù)庫命令
,startuppfile二參數(shù)文件名
帶初始化參數(shù)文件的啟動方式
先讀取參數(shù)文件,再按參數(shù)文件中的設(shè)置啟動數(shù)據(jù)庫
?startupEXCLUSIVE
一個Delete操作的流程:
檢查語法、語義(V$ROWCACHE:datadictionarycache),計算HASHVALLE,
在session的UGA中進行匹配(session_cachcdcursors),如果UGA中沒有,
在librarychache中匹配(libraryohachelocklatch保護library
chachelock對地址堆的訪問,而后librarychachepinlatch保護
Iibrarycachepin對librarycache中sql相關(guān)信息的訪問)
根據(jù)執(zhí)行計劃讀取數(shù)據(jù):cachebufferchainlatch保護能定位到buffer
header并pin住該塊(如果沒有bufferheader,就pin住某個空塊(沒
有空塊就產(chǎn)生freebufferwaits),并到數(shù)據(jù)文件中讀?。?。如果此時有
某個進程想訪問該塊,將產(chǎn)生bufferbusywaits。
在redologb」ffer中記錄delete操作的細節(jié)。(包括回滾段前后鏡像、數(shù)據(jù)塊前
后鏡像)。
在相應(yīng)回滾段段頭的事務(wù)表中創(chuàng)建一個undo條目,把將要刪除的記錄創(chuàng)建前鏡
像,存放到UndoBlock中。
在BufferCache中的相應(yīng)數(shù)據(jù)塊上刪除記錄,并且標(biāo)記相應(yīng)的數(shù)據(jù)塊為Dirty。
提交(COMMIT)1,Oracle產(chǎn)生一個SCN2.在回滾段事務(wù)表中標(biāo)記該事務(wù)狀態(tài)為
commiled
3.LGWRFlushLogBuffer到日志文件3.如果此時數(shù)據(jù)塊仍然在BufferCache中,
那么SCN將被記錄到BlockHeader上,這被稱為快速提交(fastconimit)
4.如果dirtyblock已經(jīng)被寫回到磁盤,那么下一個訪問這個block的進程將會自回
滾段中獲取該事務(wù)的狀態(tài),確認該事務(wù)被提交。然后這個進程獲得提交SCN并寫回
到BlockHeader上。這被稱為延遲塊清除(delayedblockcleanout)?
內(nèi)存
SGA(系統(tǒng)全局區(qū)、共享全局區(qū))、PGA(進程全局區(qū)、私有全局區(qū))
內(nèi)存分配原則:
10%冗余內(nèi)存,OSSYS進程(約1.6冗,OSBUFFER(約0.8G),數(shù)據(jù)庫連接消耗內(nèi)存(每
個連接約5~8M),PGA(每個連接約2M,V$PGATARGETADVICE),SGA
SGA
vSsgastat
注意showparamptersga_maxsize
Oracle的
?軟件
?系統(tǒng)
?進程
?排序
SGA中的Thefixedarea包含了數(shù)千個原子變量,以及如指向SGA中其它區(qū)域的
pointers(指針)等小的數(shù)據(jù)結(jié)構(gòu).通過對fixedtable內(nèi)表X$KSMFSV查詢(如卜)可.以獲得這些變
量的名字,變量類型,大小和在內(nèi)存中的地址.
thevariablearea是由largepool和sharedpool組成
Sharedpool中永久性的內(nèi)存包含各種數(shù)據(jù)結(jié)構(gòu)如:lhebufferheaders,processes,sessions,
v$shared_poo1_advice
ALTERSYSTEMFLUSHSHARED_POOL
HowtoKeepObjects一重點
使用DBMS_SHARED_POOL.KEEP過程來keepobjects,UNKEEP過程從sharedpool中移走
pinnedobjects
executedbms_shared_pool.keep('address,hash_value');—keep該匿名塊
共享池包括庫高遨緩存/librarycache人數(shù)據(jù)字典高速緩存和服務(wù)器控制結(jié)構(gòu)I例價
數(shù)據(jù)庫字符集)。Oracle服務(wù)器用庫高速緩存來提高執(zhí)行SQL語句的性能;庫高速緩存包括共
享和專用SQL區(qū)。共享SQL區(qū)包括SQL語句語法分析樹和執(zhí)行路徑,而專用SQL區(qū)存儲特定的
會話信息,例如捆綁變量、環(huán)境和會話參數(shù)、運行堆棧和緩沖區(qū)等。
Softparse使用的資源包括CPU和librarycachelatchgets
Hardparse是指要解圻的SQL沒有在librarycache中,或者執(zhí)行的時候發(fā)現(xiàn)解析過的
SQL已經(jīng)agedout,就是離開了librarycache,稱為Librarycachemisses.使用的資源
包括額外的CPU,librarycachelatchgets,以及sharedpoollatchgets.
專用SQL區(qū)在每個事務(wù)初始化時創(chuàng)建,在與專用SQL區(qū)相關(guān)的游標(biāo)關(guān)閉時被釋放。一個
用戶會話能夠一次打開的專用SQL區(qū)的數(shù)量由init.ora參數(shù)0PEN_CURS0RS決定。使用這兩
個結(jié)構(gòu),Oracle服務(wù)器能夠重用一條SQL語句的所有執(zhí)行的共同信息。與此同時,可以從專
用SQL區(qū)中查詢執(zhí)行的特定會話信息。
注意游標(biāo)使用過程中并不關(guān)閉游標(biāo)的應(yīng)用會繼續(xù)為應(yīng)用分配越來越多的內(nèi)存,部分原因
是為每個打開的游標(biāo)分配了專用SQL區(qū)。
庫高速緩存中的專用SQL區(qū)可更進一步分為永久區(qū)和運行區(qū)。
共享池的大小取決于init.ora文件參數(shù)SHARED_POOL_SIZE,它是以字節(jié)為單位的。你
必須將這個值設(shè)得足夠大,以確保有足夠的可用空間來裝載和存儲PL/SQL塊和SQL語句。共
享區(qū)經(jīng)過長期裝卸和卸載數(shù)據(jù)對象會產(chǎn)生許多碎片,如吳在共享池中沒有足夠的連續(xù)空間用
來裝載目標(biāo)數(shù)據(jù),會產(chǎn)生錯誤。解決這個問題的捷徑是運行SQL命令A(yù)LTERSYSTEMFLUSH
S11ARED_POOLV但是如果在數(shù)據(jù)庫操作時,經(jīng)常遇到共享池錯誤,你必須增大共亨池
Librarycache包含sharedSQLandPL/SQLareas(PL/SQL包括
Procedures,Functions,Packages,Trigger,匿名PL/SQL塊)
SizingtheLibraryCache
定義storedobject(packages,views等等)的內(nèi)存需求;定義經(jīng)常使用的sqlstatement
的所需內(nèi)存
1.初始時將SHARED"OLSIZE設(shè)得很大,運行應(yīng)用程序
2.計算storedobject所占的內(nèi)存
SELECTSUM(sharab1e_mem)FROMv$db_object_cacheWHEREtype=
'PACKAGEfortype='PACKAGEBODY,ortype='FUNCTION'ortype='PROCEDURE';
3.應(yīng)用程序運行一段時間后,估計常用sql語句所占的內(nèi)存(不包括動態(tài)SQL)
SELECTSUM(sharab1e_mem)FROMv$sqlareaWHEREexecutions>5;
4.對每個user每個打開的cursor,需要250bytes,可在運行高峰期間使用杳詢:
SELECTSUM(250*users_opening)FROMv$sqlarea;
5.在測試環(huán)境中,可讓一個用戶打開一定數(shù)量的cursor,運行下列語句測試共享內(nèi)存,
然后乘上user數(shù)
SELECT250*valuebytesperuserFROMv$sesstats,v$statname
nWHEREs.statistic#=n.statistic#ANDn.name=Jopenedcursorscurrent'AND
s.sid=15;
以上內(nèi)存的和,再加上一點內(nèi)存(留給動態(tài)SQL使用),作為你的應(yīng)用的理想內(nèi)存設(shè)置;預(yù)
留一部分空間作為大的內(nèi)存需要,避免miss和碎片;一些大的內(nèi)存需要:PL/SQL塊的編譯
譯,trigger的編譯;小的object不會使預(yù)留空間碎片化,反而保證reservedlist有大的連
續(xù)塊,一旦從reservedlist中分配的內(nèi)存釋放它就返回reservedlist。
影響的參數(shù):SHAREDP00L_RESERVED_SIZE初始值二SHARED_P00L_SIZE*10%,超過
50%,oreicleserver報錯
0PEN_CURS0RS缺省二50
定義了涉及分配給用戶進程的私有SQL區(qū)域的cursors數(shù)量,一個privateSQLarea
一直存在直至cursor關(guān)比;為了利用更多的內(nèi)存給共享SQL區(qū)域,需要提高session每個
session允許多cursor數(shù)量,開發(fā)人員應(yīng)關(guān)閉不需要的cursor節(jié)省內(nèi)存
CURSOR_SPACE_FOR_TIME缺省=FALSE布爾值
設(shè)置TRUE,表示以空間換取時間,共享SQL區(qū)不會被agedout直至相關(guān)的cursor被關(guān)閉,
因此確信有足夠的內(nèi)存,沒有cachemiss;除非RELOADSmV$LIBRARYCACHE一直為0,否則不
要改變此參數(shù)值
若應(yīng)用為FORM或使用動態(tài)SQL,設(shè)此值為FALSE—因為動態(tài)sql總是不一致,將占用過
多內(nèi)存
SESSION_CACHED_CURSORS缺省=0表示沒有cache
當(dāng)一個session打算關(guān)閉一個cursor時,如果這個cursor的parsecount超過3次,那
么這個cursor將會被加到sessioncursorcachelist的MRU端.當(dāng)一個session打算parse
一個sql時,它會先去session的pga內(nèi)搜索sessioncursorcachelist,如果找到那么會
把這個cursor脫離list,然后當(dāng)關(guān)閉的時候再把這個cui'sor力口至MRU端.
session_cached_cursor提供了快速軟分析的功能,提供了比softparse更高的性能.
檢查系統(tǒng)是否需要此參數(shù)的方法:
對某個典型用戶session
selecta.sid,b.name,a.valuefromv$sesstata,v$statnamebwhere
a.statistic#=b.statistictiand(b.name='sessioncursorcachehits'orb.namelike
'parsecounl%);
Iffewparsesresultinhits,則可提高此參數(shù),注意它將increaseoveralldemands
onmemory.—????
DataDictionaryCache
Select
type,parameter,gets,getmisses,round(getmisses/decode(gets,0,null,gets)*100,2)
“ratio(%)“fromv$rowc&che;
GoalforaGoodRatio
SUM(GETMISSES)/SUM(GETS)<15%,否則應(yīng)增大SHARED_POOL_SIZE
不可能希望getmisses趨近于0,因為數(shù)據(jù)庫啟動后需要讀取objects定義
OEM―>PerformanceManager—>Memory—>DataDictionaryCacheHit%
檢索需要在共享池中要求大于100K連續(xù)空間的對象:
select*fromv$db_Gbject_cachewheresharab1e_mem>andtypein('PACKAGE',
'PACKAGEBODY*,'PROCEDURE','FUNCTION*);
考察返回的結(jié)果,確認是否需要pin到共享池中,返回結(jié)果中的KEPT字段如果是YES,
那么表示該對象已經(jīng)固定在了共享池中,為N0,則表示還沒有固定。
如果需要固定,使用下面的語句:
execdbmsshared_poo1.keep('SYS.STANDARD');
數(shù)據(jù)庫默認安裝的時侯沒有創(chuàng)建dbms_shared_pool包,所以需要先創(chuàng)建該包。
cd$()RAC【,E_HOME/rdbms/admin
sqlplus"/assysdba”
@dbmspool.sql
DATABUFFER--數(shù)據(jù)庫緩沖區(qū)高速緩存
v$db_cache_advice
二=一堆數(shù)據(jù)塊(DB_BLOCK_SIZE*DB_BLOCK_BUFFERS)
數(shù)據(jù)庫的任何修改都在該緩沖里完成(LRU—>LRUW)o
所有的塊,被讀到內(nèi)存中后,它的塊頭(datablockheader)放在一個Cachebufferchain
+,Cachebufferchain由多個雙向hash鏈表組成,hash鏈表數(shù)量由
db_blockhashbuckets決定.每個數(shù)據(jù)塊頭由DBA(datablockaddress)作為key,經(jīng)hash
函數(shù)后放在鏈表上,它和blockbuffer中的block一一對應(yīng),數(shù)據(jù)塊頭不包括實際的數(shù)據(jù),僅
是一個簡單的描述.后臺進程掃描hash鏈表前,必須獲得cachebufferchainlatch,如果
在CacheBufferchain中找小某塊,就由磁盤讀入.若需要查找某個block,則根據(jù)block
的信息能計算hashvalue然后迅速定位到hashtable,然后根據(jù)hashtable信息去查看是
否存在所想要的buffer,若有則命中,若沒有則不命中。顯然不可能根據(jù)list去逐個搜索,
這樣效率太低.
LRU就是一種盡可能將常用的數(shù)據(jù)保留在內(nèi)存的算法.當(dāng)數(shù)據(jù)庫需要一個數(shù)據(jù)緩沖區(qū),
他會從數(shù)據(jù)庫緩沖區(qū)的LRU隊列的尾部找一個空閑的緩沖,將一個數(shù)據(jù)塊讀入,然后數(shù)據(jù)
庫會把這個緩沖區(qū)放到LRU隊列的中部,如果該緩沖被其他程序用到的話,那么他會往隊
列的頭上移動,如果這個緩沖沒有被其他程序用到,并且沒有被修改過,那么他會慢慢的移
動到LRU隊列的尾部,最終被認為是空緩沖區(qū)被其他數(shù)據(jù)塊所覆蓋.?旦這個緩沖區(qū)被修改
過DBWR把他從LRU隊列中移出,放到LRUW隊列(也叫贓緩沖區(qū))中,等待DBWR把他們批
量寫入數(shù)據(jù)文件,然后再把他們的緩沖區(qū)連接到LRU隊列的尾部.周而復(fù)始的工作.
如果查找在一個閥值內(nèi)沒有結(jié)果或者造成dirty緩沖區(qū)已經(jīng)溢此在進一步查找free
buffer前系統(tǒng)將發(fā)出一個消息給DBWR讓他可以將LRUW隊列的緩沖區(qū)寫入磁盤.這個閥值被
叫做這個閥值被叫做DBWRscandepthd個ty緩沖區(qū)大小可以用_DBLARGE_DIRTY_QUEUE和
2*_DB_BL0C:K_WRITE_BATCH來確定.前臺進程繼續(xù)搜索freebuffer.直到
_DB_BLOCK_MAX_SCAN_CNT還沒有發(fā)現(xiàn)系統(tǒng)就會掛起該進程.記錄dirtybuffersinspected的
的靜態(tài)變量并把該進程標(biāo)志為freebufferwait.
cache和buffer_pool_keep足不一樣的,cache足如果對該表全表掃描的話,會把塊
放在mru端,buffer_pool_keep是放在keep池中
selecttablename,cache,bufferpoolfromdbatableswheretablename:'TEST';
將表和索引Cache到SGA中
從0RACLE805之后,支持ALTERTABLEtable_nameSTORAGE(BUFFER_P00LKEEP)命令了。
但是在805與8i中,需要設(shè)置buffer_pool_keep參數(shù)來設(shè)置KEEP池大小。這塊內(nèi)存來自數(shù)
據(jù)緩存區(qū),也就是從db_block_buffcrs中分配。在0RACLE8和8i中,還必須設(shè)置
db_block_lru」atchos參數(shù)“該參數(shù)應(yīng)該比2*3*CPU數(shù)量少,但是要大于1,否則無法設(shè)置
buffer_pooLkeepo在0RACLE9i中則需要設(shè)置DBKEEP_CACH憶SIZE來設(shè)置KEEP池內(nèi)存的
大小。這樣將表KEEP才有用。而且KEEP池要能夠容納得下才行的
將函數(shù)Cache到SGA中
@SORACLE_HOMI'Ardbms\admin\dbmspooI.sql;
execdbms_shared_poo1.keep('procedure_name','P');
重做日志緩沖區(qū)(LOG_BUFFER)
logbuffer分成內(nèi)部的bufferblocks,而這些block各有8個字節(jié)的頭部信息存在于
variablearea中.
當(dāng)重做日志緩沖區(qū)填滿時,將它的內(nèi)容寫入聯(lián)機重做日志文件。是循環(huán)使用。是數(shù)據(jù)庫
最活躍的情形,可以用V$SYSSTAT視圖進行監(jiān)控。查詢Y$SYSSTAT視圖value域,它表明用
戶進程等待重做日志緩沖區(qū)所花費的時間(此處value的值應(yīng)接近于0,否則應(yīng)增大初始化
參數(shù)文件的Logbuffers的值):
SELECTNAME,VALUEFROMV$SYSSTATWHERENAME='redologspacerequests*;
PGA
v$pgastatv$pgatarget_advice
后臺進程
v$bgpi'occss
■數(shù)據(jù)庫寫進程(DBWR)
(DBBLOCKWRITEBATCH,DBBLOCKMAXSCAN,DBWRITES,DBBLOCKLRULATCHES,DBBLO
OCKCHECKPOINTBATCH,DBBLOCKCHECKSUM)
負責(zé)數(shù)據(jù)文件的讀寫和db^data_buffer的清理
dbwr負責(zé)搜集dirtybuffer,slaves負貴寫磁盤
工作的前提條件:
1.dirtybuffer超出了dirtybufferlistMthreshold.2.serverprocess4
buffercache中查找freebuffeH寸,則也可能會通知DBWn將dirtybuffer寫入
datafile.3.DBWn每3秒會檢查是否有dirty數(shù)據(jù)要寫入
datafile.4.CKPT5.tablespaceoffline或tablespacebeginbackup(這里實際上
是由CKPT引起).6.dropobject7.shutdown(這里實際上也是由CKPT引起)
建議你使用與存儲數(shù)據(jù)文件的物理磁盤一樣多的DBVR進程;
DBWR寫入數(shù)據(jù)文件的任何修改已經(jīng)被記錄在重做日志文件中.
?次checkpoint的成功過程是:dbw「搜集dirtybuffer,交給slave寫磁盤,寫完畢
通知dbwr,然后dbwr才返回檢杳點完成。
增加寫進程,同時要調(diào)整db_block」ru」atches參數(shù),如修改或添加如下兩個參數(shù):
db_writer_processes=4
db_block」ru」atches=8
■日志寫進程(LGWR〕。
LOGCHI-CKPOINT^INTERVAL,L(X;_CHECKP()INT_TIMKOCT,LOG_CHI-CKP()1\TS_TO_ALERT
LGWR工作的主要條件如下
1.用戶提交
2.有1/3重做日志緩沖區(qū)未被寫入磁盤
3.有大于1M重做日志緩沖區(qū)未被寫入磁盤
4.超時
5.DBWR需要寫入的數(shù)據(jù)的SCN號大于LGWR記錄的SCN號,DBWR觸發(fā)LGWR寫入
■歸檔進程(ARCH)。
ARCHIVE_LOG_START
■檢查點(CKPT)o
同步數(shù)據(jù)文件,口志文件和控制文件
CKPT會更新數(shù)據(jù)文件/控制文件的頭信息.
CKPT工作的主要條件如下.
1.在日志切換的時候
2.數(shù)據(jù)庫用immediate,transaction,normal選項shutdown數(shù)據(jù)庫的時候
3.根據(jù)初始話文件LOG_CIiECKPOINT_INTERVAL.
LOG.CHECKPOINT_TIMI-OUT,FAST_START_IO_TARGET的設(shè)置的數(shù)值來確定
4.用戶觸發(fā)
■系統(tǒng)監(jiān)控和進程監(jiān)控進程(SMON和PMON)o
■調(diào)度進程(Dnnn)o
MTSDISPATCHERS
■恢復(fù)進程(RECO)o
DISTRIBUTED_TRANSACTIONS
■快照進程(SNPn)o
OB_QUEUE_PROCESS,JOB_QUEUE_INTERVAL
■鎖進程(LCKn)o
■并行查詢進程(Pnr.n)。
PARALLEL_MIN_SERVERS,PARALLEL_MAX_SERVERS
■用戶和服務(wù)器進程(Snnn)o
回滾
v$rollstatv$waitstatv$sysstatx$bhdba_rolIbacksegs
一下事務(wù)的流程:
1.分配一個回滾段
2.在回滾段事務(wù)表中分配一個事務(wù)槽
3.分配undoblock
4.更新數(shù)據(jù)塊上的ITL事務(wù)槽
5.把前鏡像記錄在undoblock內(nèi)
6.更改數(shù)據(jù)塊的內(nèi)容
ITL事務(wù)槽一InterestedTransactionList(ITL)
ITL內(nèi)容包括:
xid—TransactionID
UbaUndoBlockAddress
LekLockStatus
xid=Undo.Segment.Number+Transaction.Table.Slot.Number+Wrap
uba=Address.Of.Last.Undo.Block.Used+Sequence+Last.Entry,in.UNDO.Record.Map
ALTERSYSTI-MSETUNDO_MANAGEMENT=MANUALSCOPE二SPFILE;
SETTRANSACTIONUSEROLLBACKSEGMENTRBJARGEl;
當(dāng)一個事務(wù)開始的時候,會首先把變化前的數(shù)據(jù)和變化后的數(shù)據(jù)先寫入日志緩沖區(qū),然
后把變化前的數(shù)據(jù)寫入回滾段,最后才在數(shù)據(jù)緩沖區(qū)中修改數(shù)據(jù)
一致性讀取consistentreads
假設(shè)查詢開始的時候的SCN為T,則在查詢所掃描的數(shù)據(jù)塊中,如果數(shù)據(jù)的COMMITSCN
小于T,則查詢接受該數(shù)據(jù),如果COMMITSCN人于T或者說還沒有產(chǎn)生COMMITSCN,則查
詢會嘗試去回滾段中查找數(shù)據(jù)。這是為了保證數(shù)據(jù)的讀取的時間點的一致性,所以叫一致性
讀。
我們可以參考vSrollstatxv$transaction和x$bh表,在x$bh中的class字段,如果
是回滾段塊,假設(shè)回滾段USN為n,則回滾段頭class為ll+2n,回滾段塊為12+2n。
回滾段的使用、擴展、回縮
同一個事務(wù)不能跨越回滾段;一個回滾段至少包含2個exleni。每個回滾段有一個回滾
段頭,回滾段頭是一個block,里面主要記錄了事務(wù)表信息。當(dāng)產(chǎn)生一個事務(wù)的時候,就在
回滾段頭的事務(wù)表中記錄一條信息,該信息中包含了事務(wù)標(biāo)志、事務(wù)狀態(tài)、使用的回滾段塊
數(shù)等等信息。使用時從第一個extent的第二個block到最后一個extent循環(huán)使用:如果其
中的一個extent有未提交的事物,那么前面的extent不能跨越該extent,只能在2個extent
之間擴展新的extent,并修改相應(yīng)的節(jié)點指針(回滾段的extent之間是通過指針連起來的
一個單向循環(huán)的鏈表結(jié)構(gòu)〕;
系統(tǒng)回滾段與延遲回滾段
SYSTEM回滾段是創(chuàng)建在系統(tǒng)表空間中,主要是用于系統(tǒng)級的事務(wù)和分配普通事務(wù)于其他
回滾段上。當(dāng)手工創(chuàng)建數(shù)據(jù)庫后需要創(chuàng)建普通回滾段之前必須首先創(chuàng)建系統(tǒng)回滾段。
系統(tǒng)回滾段主要用于兩個方面。一是系統(tǒng)事務(wù),比如針對數(shù)據(jù)字典的操作的
truncatetabl?和droptablev如果truncatetableordroptable的過程中沒有成功,
則系統(tǒng)會根據(jù)系統(tǒng)回滾段中的數(shù)據(jù)字典操作信息對該DDL操作進行回退。另一個方面,就是
延遲回滾段(DeferredRollbackSegment)。表空間offline時用戶申請回滾,數(shù)據(jù)庫會將
回滾信息寫入系統(tǒng)回滾段(就是延遲回滾段),等到。nLne時,在寫入表空間。
回滾段的設(shè)置和管理
init.ora:transactionsperrollback_segmentfUtransactions,
maxrollbacksegments
1:系統(tǒng)并發(fā)事務(wù)數(shù)有多少?(主要是產(chǎn)生恢復(fù)信息的會話數(shù)+一部分冗余數(shù)(20)=總回滾
段數(shù))
2:系統(tǒng)是否存在大查詢或者大是事務(wù)?頻繁么?
3:能提供給系統(tǒng)的回滾段表空間的磁盤空間是多少?
不要將回滾段的MAXEXTENTS設(shè)為UNLIMITED,回滾段所在表空間也不要設(shè)為AUTOEKTEND
方式,否則將會使得由于某個不正常的事務(wù)導(dǎo)致整個數(shù)據(jù)庫處于失控狀態(tài)。
9i
undo_retention表示在自動管理模式下,回滾段中的數(shù)據(jù)在被覆蓋前保留多長的時間,
單位是秒。這個參數(shù)應(yīng)該決定于系統(tǒng)所中一些大查詢運行的時間改度,以避免0RA-01555錯
誤。
在9i下創(chuàng)建非自動管理的的回滾段而不使用UNDO表空間,則設(shè)置undojnanagement
為MANUAL,然后在系統(tǒng)表空間中創(chuàng)建一個回滾段(注意這是必須的),創(chuàng)建自己的回滾段表空
間,這時可以在I可滾段表空間中創(chuàng)建回滾段,創(chuàng)建完畢刪除系統(tǒng)表空間中的回滾段。
著名的0RA-01555問題
一致讀獲取的時候發(fā)現(xiàn)回滾段已經(jīng)被覆蓋而出現(xiàn)找人著變化前映像,也就是當(dāng)COMMIT
SCN大于T行詢嘗試去回滾段中找回數(shù)據(jù)卻發(fā)現(xiàn)回滾段已經(jīng)被覆蓋了(因為回滾段是循環(huán)使
用的),則會出現(xiàn)著名的0M名的55錯誤。
重做
vSs>fsstatvSlogv$logfilcv$1og_history
altersystemswitchlogfile;
重做記錄了塊的改變,包括I可滾段頭塊、I可滾段塊、數(shù)據(jù)塊,并且在塊改變之前先記錄
重做信息。
更改矢量(changevector)一當(dāng)要改變數(shù)據(jù)庫的數(shù)據(jù)時,這些改變的細節(jié)被記錄為更改
矢量。通過這些記錄,數(shù)據(jù)庫處理過程可以被重現(xiàn)。
簡而言之,一個更改矢量就是記錄/一個數(shù)據(jù)塊的行槽從一個狀態(tài)改變到另一個狀態(tài)的
過程。
也就是redo的記錄單位是entry,即:fileX,blockY,rowslotZ。
Redo也記錄了數(shù)據(jù)塊(tableblock&indexblock)前照,其實記錄的就是undo,因
為即使沒有commit,改動也會被記錄到redo文件里,這時的tableblock&indexblock
就是未提交的最新狀態(tài),如果此時系統(tǒng)崩潰,則需要redo中記錄的undo(前照)進行恢復(fù),
所以redo記錄了數(shù)據(jù)塊、索引塊、回滾塊。
ORACLE推薦logswitch時間最好在15—30分鐘之間“
跟redologfile有關(guān)的其它數(shù)據(jù)庫參數(shù)
1、log_buffer它最好不要大于512K或者128K*CPU個數(shù)。
我們可以用下面的SQL語句檢測log_buffer使用情況:
SELECTRBAR.NAME,RBAR.VALUE,RE.NAME,RE.V^.LUE,(RBAR.VALUE*100)/
RE.VALUE|'"radio”FR0MV$SYSSTATRBAR,V$SYSSTATREWHERERBAR.NAME
='redobufferallocationretries,ANDRE.NAME='redoentries,;
這個比率小于1%才好,否則增加log_buffer的大小
2、log_checkpoint_interval
0racle8.1版本后log_checkpoint_interval指的是兩次checkpoint之間操作系統(tǒng)數(shù)據(jù)
塊的個數(shù)。checkpoint時Oracle把內(nèi)存里修改過的數(shù)據(jù)塊用DBWR寫到物理文件,用LGWR
寫到日志和控制文件.
從性能優(yōu)化來說logcheckpoint_interval=redologfilesizebytes/512bytes
3、logcheckpoint_timcout
0raclc8.1版本后1ogcheckpoint_timcout指的是兩次checkpoint之間時間秒數(shù)。
Oracle建議不用這個參數(shù)來控制,因為事務(wù)(transaction)大小不是按時間等量分布的。用
log_checkpoint_incerva1參數(shù)控制會好一些。禁用此參數(shù)或者按默認的900。
altersystemarchivelogcurrent;
第二個存檔日志目的地可以通過初始化參數(shù)LOG_ARCHEV憶DUPIEX_DEST設(shè)定。
L()G_ARCHEVE_DEST和LOG_ARCHEVE_DUPLEX_DEST都可以存檔所有的聯(lián)機重作日志文件。另一
個初始化參數(shù)LOGAKCH1VJM1NSUCCEEDDEST如果設(shè)置「的話,可以決定一個重作Fl志組必
須被成功存檔到的存檔日志目的地數(shù),在一個目的地滿或其介質(zhì)有錯時,該參數(shù)可以防止
Oracle被凍結(jié)。要確保這兩個目的地被配置在兩個分離的磁盤/控制器上,避免I/O沖突對
數(shù)據(jù)庫性能的影響。
一些參數(shù)
vSparameter
查看系統(tǒng)當(dāng)前使用的所有參數(shù)
SETpagesize9000
SETheadOFF
SETtermOFF
SELECTI)ECODI-(isdefault,'TRUE','#')11DECODE(isdefault,'TRUE',
RP.AD(name,43),RPAD(name,45))I'='||valueFROMv$parajneterORDERBYname;
查看所有參數(shù)是否已被init.ora重新設(shè)定
SELECTname,isspecifiedFROMv$obsoleteparameter;
查看過時參數(shù)和強調(diào)參數(shù)
SELECTkspponm,DECODE(ksppoflg,1,,Obsolete*,2,*Underscored*)FROMxSksppo
ORDERBYkspponm;
杳看當(dāng)前系統(tǒng)中的所有隙藏參數(shù)(以sys身份登錄)
SELECTksppinm,ksppstvl,ksppdescFROMx$ksppix,x$ksppcvyWHEREx.inst_id
=usorenv(,Instance')andy.instid=uscrcnv(,Instance')andx.indx=y.indx
andx.ksppinmlike*%_&par%'orderbytranslatc(x.ksppinm,''');
用戶參數(shù)
select*fromv$fixed_tablewherenamelike'%NLS%';
SELECT*FROMV$NLS_PARAMETERS;
ALTERSESSIONSETNLS_l)ATE_FOI^fAT=,YYYY-MM-DDHH24:MISS';
最常被修改的參數(shù):
Shared_pool_size分配給共享池的內(nèi)存字節(jié)數(shù)隨著用戶的需求,可以按時增加
此值
Rollback_segments數(shù)據(jù)庫啟動時獲取的一個或多個當(dāng)事務(wù)處理量增加或減少時,可
以從該回滾段名列表中增加或刪除回滾段名
Processes可同時訪問數(shù)據(jù)庫的最大進程數(shù)量
session=l.l*process+5,一般而言,session和process是對應(yīng)的,5是Oracle
后臺進程的session,10%是提供給recursivesession使用的。
db_b1ock_buffers見SG.A介紹中的相關(guān)內(nèi)容
shared_pool_size見SGA介紹中的相關(guān)內(nèi)容
log_buffer見邈_介紹中的相關(guān)內(nèi)容
sort_area_size
針對每個session,排序首先會使用sortareasize,如果不足則會使用臨時表空訶。實
際上就是外排序過程,把要排序的對象分割為內(nèi)存可以容納的小段(sortrun),然后每個
sortrun都放至sortarea里面去排序,排序結(jié)果作為中間信息放在臨時表空間的臨時段內(nèi),
由于分段排序的結(jié)果當(dāng)然不會是最終要求的排序結(jié)果,所以還要經(jīng)過一個merge的過程,才
會得到最終排序結(jié)果,原理大概是比較每個sortrun的第一名,取出領(lǐng)先者,然后該sortrun
的第二名頂上,繼續(xù)上述過程直到取完。
所以建議:Sort_arec_Size所能容納記錄數(shù)至少大于排序記錄數(shù)的平方根
5.open_cursor見SGA介紹中的相關(guān)內(nèi)容
6.database_writers
許多DBA有個錯誤的概念,認為此參數(shù)受CPU數(shù)量的限制,實際并非如此。提示:如果
工作在一個可以支持多進程的操作系統(tǒng)上,需做的第一件事就是改變這個參數(shù)的值。
重新啟動數(shù)據(jù)庫,使月startup命令,Oralce將會按照以下順序在缺省目錄中搜索參數(shù)
文件:
spfile${ORACLE_SID}.ora
缺省目錄UNIX:${OEACLE_HOME)/dbs/NT:${ORACLEJ1OME)\database
spfile.ora
缺省目錄UNIX:${ORACLE_HOME)/dbs/NT:S(ORACLE_HOME)\database
init${ORACLESID).ora
缺省目錄UNIX:${ORACLE_HOME}/dbs/
NT:${ORACLE_HOME}\databaseor${ORACLE_H()ME}\a(lmin\db_name\pfile\
創(chuàng)建了spfile,重新啟動數(shù)據(jù)庫,()racle會按順序搜索以上目錄,spfile就會自動生效。
startuppfile=,E:\Oracle\admin\eyglen\pfile\init.ora';
createspfilefrompfile;
然后我們可以使用ALTERSYSTEM方式將修改固定到SPFILE.
ALTERSYSTEMSETleg.archive_start=FALSESCOPE二spfile;
空間管理
.主體思想一直圍繞著內(nèi)部段的擴展。不僅僅影響到空間大小,自由塊太分散的話會影響
性能(I/O,及擴展時間等)
空閑表(主空閑表、進程空閑表、事務(wù)空閑表),可能存在于表頭塊中
表空間
droptablespace***includingcontents;
注:LMT是segment中extent的管理,ASSM是thefreespacoofsegment的管理<,
在0racle8I的版本中,Oracle推出了一種全新的表空間管理方式:本地化管理的表空
間。所謂本地化管理,就是指Oracle不再利用數(shù)據(jù)字典表來記錄Oracle表空間里面的extent
的使用狀況,而是在每個表空間的數(shù)據(jù)文件的頭部加入了一個位圖區(qū),在其中記錄每個
extent的使用狀況。每當(dāng)一個extent被使用,或者被釋放以供重新使用時,Oracle都會更
新數(shù)據(jù)文件頭部的這個記錄,反映這個變化。
Oracle之所以推出了這種新的表空間管理方法,這種表空間組織方法的優(yōu)點:
1.本地化管理的表空間避免了遞歸的空間管理操作。而這種情況在數(shù)據(jù)字典管理的表空
間是經(jīng)常出現(xiàn)的,當(dāng)表空間里的區(qū)的使用狀況發(fā)生改變時,數(shù)據(jù)字典的表的信息發(fā)生改變,
從而同時也使用了在系統(tǒng)表空間里的回滾段。2.本地化管理的表空間避免了在數(shù)據(jù)字典
相應(yīng)表里面寫入空閑空間、已使用空間的信息,從而減少了數(shù)據(jù)字典表的競爭,提高了空間
管理的并發(fā)性3.區(qū)的本地化管理自動跟蹤表空間里的空閑塊,減少了手工合并自由空間
的需要。4.表空間里的區(qū)的大小可以選擇由Oracle系統(tǒng)來決定,或者由數(shù)據(jù)庫管理員指
定一個統(tǒng)一的大小,避免了字典表空間一直頭疼的碎片問題.5.從由數(shù)據(jù)字典來管理空
閑塊改為由數(shù)據(jù)文件的頭部記錄來管理空閑塊,這樣避免產(chǎn)生回滾信息,不再使用系統(tǒng)表空
間里的問滾段。因為由數(shù)據(jù)字典來管理的話,它會把相關(guān)信息記在數(shù)據(jù)字典的表里,從而產(chǎn)
生回滾信息。
由于這種表空間的以上特性,所以它支持在一個表空間里邊進行更多的并發(fā)操作,并減
少了對數(shù)據(jù)字典的依賴。
對于表空間中的每一個空間(一個或多個extent),我們必須知道:
1、這個可用空間位于什么數(shù)據(jù)文件
2、這個空間的尺寸是多大
3、如果它在用了,是哪一個段占用的這個空間
直到8i之前,所有的表空間都是采用字典管理模式,為了確保能保存以上的信息,ORACLE
用了兩個數(shù)據(jù)字典表:UET5(已使用的區(qū)間)或FET$(空閑空間):當(dāng)一個段被刪除的時候,
ORACLE就移動UET$中相應(yīng)的行到FET$,這個過程的發(fā)生是連續(xù)的,而且可能發(fā)生等待。當(dāng)并
發(fā)性很高的時候,數(shù)據(jù)字典的爭用就來了。另外有一個問題就是,當(dāng)表的空間很不連續(xù)或表
空間有大量的碎片引起這兩個表的增大,那么也就會引起數(shù)據(jù)庫性能上的下降。
表空間分段:
氣泡(bubble):一個連續(xù)的自由空間塊;蜂窩(honeycomb):一系列看起來相連的塊。
蜂窩由氣泡構(gòu)成(氣泡間有邊界),去掉邊界,蜂窩并成一個大的氣泡。氣泡和蜂窩多是由于
擴展段的釋放而產(chǎn)生。過多的小的氣泡會導(dǎo)致DDL操作時多次掃描SYS.FET$,并花時間合并
可用空間,影響性能。
讓我們看一下當(dāng)一個行被從一個應(yīng)用程序中插入到表中時發(fā)生的一系列動作:
1)杳表的自由列表,考慮在哪可以放一個新行。如果沒有自由塊可用,需要分配一個新
的擴展段。
2)Oracle掃描SYS.FET$表,為空間中的擴展段定位自由空間。
3)第一次掃描找出可以供新的擴展段使用的氣泡。新擴展段的大小計算使用大于擴展段
所需塊數(shù)的、下一個可被5整除的數(shù)。例如,如果一個擴展段包含23塊,則得到的數(shù)是25
塊v然而,如果需要的是5塊或更小,就不必這樣計算,一旦塊數(shù)確定,第一次掃描就尋找
塊數(shù)恰好滿足需要的氣泡。
4)如果沒有找到恰好合適的,那么Oracle掃描大些的氣泡。如果一個大的氣泡所擁有
的塊數(shù)比所需要的塊數(shù)多5塊或5塊以上(當(dāng)然是在取了約數(shù)以后),那么氣泡中的自由空間
分成兩部分,一部分滿足擴展段的需要,另一部分仍作為自由空間。新的(小一些的)的自
由空間氣泡包括去掉所需的塊數(shù)后剩下的塊數(shù)(5塊或多于5塊)。例如,如果需要的塊數(shù)
是25,但找到了一個32塊的氣泡,那么Oracle占用其中的25塊分配給擴展段并保持剩下
的7塊形成一個分開的氣泡,仍然保留在原處。另外一種情況,找到了一個28塊的氣泡,那
么只是把此氣泡供擴展段使用。換句話說,如果多余的塊數(shù)少于5就不產(chǎn)生分割操作。
5)如果所有現(xiàn)有的氣泡都太小,不足以滿足擴展段的需要(即沒有找到大小相等的也沒
有找到大于數(shù)據(jù)塊數(shù)的氣泡),那么進行第三次掃描尋找是否有可以合并的蜂窩能提供所需的
空間。在合并以后,再次進行第3步和第4步。
6)如果前面的幾步都沒有找到能夠供擴展段使用的氣泡,那么Oracle檢查AUTOEXTEND
功能是否已被使能(后面詳細介紹這一選項)。如果是的,再檢查數(shù)據(jù)文件是否是可擴展的。
7)如果AUTOEXTEND沒有被使能或者在磁盤上(數(shù)據(jù)文件所在的磁盤)沒有足夠的空間
來擴大該數(shù)據(jù)文件,Oracle返回“0RAT650-55:Unabletoextend”錯誤消息,引起應(yīng)用失
敗。
預(yù)防措施:
1)將大小相同而且增長率相似的段應(yīng)該保存在相同的表空間集合中,保證釋放的氣泡可
以高效地被別的段重新使用。
2)理想情況下,一個表空間中的所有段應(yīng)該有相同的存儲參數(shù)(對每一個段有相同的
1NITIAL/NEXT值)。如果不能做到這一點,要保證不同段的存儲參數(shù)要互為倍數(shù),為所有的
表空間指定DEFAULTSTORAGE參數(shù)。
3)一旦可能,指定PCTINCREASE=O。當(dāng)由于沒有定義增長模式而不可能指定該值時,
用100作為PCTINCREASE的可能值。在任何情況下,不要用如1、5等的隨機值,以防止生成
奇數(shù)大小的擴展段。
4)周期性顯式地合并應(yīng)用程序的表空間。不要配置SMON來自動合并表空間,因為它需
要在表空間的DEFAULTSTORAGE語句中指定一個大于0的PCTINCREASE的值。
識別表空間段情況、重構(gòu)特定文件:
1)識別表空間中的擴展段、氣泡、蜂窩:
SETLINES132
SETPAGES500
COLUMN“FIL」D”FROMAT999HEADING
COLUMN“FIL”FORMATA55HEADING"Fl『NAME”
COLUMN“SEGMENT”FROMATA55
COLUMN“STARTBLK”FROMATHEADING“START|BLK”
COLUMN"BLOCKS”FORMAT999,999HEADING“中BLKS”
SELECTD.FILE.ID“FIL」D",D.FILE_NAME“FIL”,SEGMENT-TYPE11''||OWNER
I|'/IlSEGMENT_NAME“SEGMENT",E.BLOCKED“STARTBLK”,
E.BLOCKS“#BLOCKS”
FROMDBA_EXTENTSE,DBA_DATA_FILESD
WHEREE.TABLESPACE.NAME=UPPER('&&TBLSPC_NAME')
ANDD.TABLESPACE_NAME=E.TABLESPACE_NAMEANDD.FILE_ID=E.FILE_ID
INION
SELECTS.FILE_IDrtFIL_IDw,D.FILE.NAME“FIL",'FREECHUNK'"SEGMENT”,
S.BLOCK」D“STARTBLK”,S.BLOCKS“#BLOCKS”
FROMDBA_FREE_SPACES,DBA_DATA_FILESD
WHERES.TABLESPACE_NAME=UPPER('&&TBLSPC_NAME')
ANDD.TABLESPACE_NAME=S.TABLESPACE_NAMEANDD.FILEJD=S.FILE_ID
ORDERBY1,4,5
結(jié)果:
FISTART
L_IDFILSEGMENTBLKBLOCKS
/opt/app/oracle/oradata/or(
1cl/systemOl.dbfROIJ.BACKSYS,SYSTEM210
/opt/app/orac1e/oradata/orc.
1cl/systemOl.dbfROLLBACKSYS,SYSTEM1210
/opt/app/orac1e/oradata/orc
1cl/systemOl.dbfCLUSTERSYS,C_OBJ#2220
1/opt/app/orac1e/oradata/orcINDEXSYS,IOBJ#422
cl/systcmOl.dbf
/opt/app/orac1e/oradata/or(
1cl/systemOl.dbfCLUSTERSYS,C_TS#442
/opt/app/orac1e/oradata/orc
1cl/systemOl.dbfINDEXSYS,I一TS#462
/opt/app/orac1e/oradata/orcCLUSTER
1cl/systcmOl.dbfSYS,C_FILE#_BLOC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東工貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫審定版
- 砂子生產(chǎn)合同范本
- Unit+7+Art+Writing+Workshop+ Reading+Club+知識點及默寫清單 高一英語北師大版(2019)必修第三冊
- 2025年海南外國語職業(yè)學(xué)院單招職業(yè)傾向性測試題庫新版
- 團購車合同范本
- 雇傭管工合同范本
- 2025年02月上半年團省委事業(yè)單位工作人員3人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解-1
- 2025-2030年中國玄武巖行業(yè)發(fā)展?fàn)顩r與投資戰(zhàn)略研究報告
- 2025-2030年中國激光雷達行業(yè)運營狀況及投資前景預(yù)測報告
- 2025-2030年中國涂布白板紙行業(yè)運營狀況及發(fā)展規(guī)模分析報告
- 青少年網(wǎng)絡(luò)安全教育課件
- 2021年全國統(tǒng)一高考英語試卷(新課標(biāo)Ⅰ)(原卷版)
- 產(chǎn)科抗磷脂綜合征診斷與處理專家共識護理課件
- 中醫(yī)護理中藥封包課件
- 2024年中智集團及下屬單位招聘筆試參考題庫含答案解析
- 中草藥材種植基地項目申請報告
- 2022年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)技能題庫及答案解析
- 小兒急乳蛾(小兒急性扁桃體炎)中醫(yī)臨床路徑(2018年版)
- 地質(zhì)災(zāi)害安全教育 主題班會
- 10G409預(yù)應(yīng)力管樁圖集
- 市場營銷-OPPO手機市場營銷策略優(yōu)化研究
評論
0/150
提交評論