




已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 理解鎖什么是鎖?鎖 是一種軟件機(jī)制,用于控制對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的訪(fǎng)問(wèn)。在出現(xiàn)同時(shí)讀取和更新數(shù)據(jù)的多用戶(hù)環(huán)境中,鎖能夠確保每個(gè)事務(wù)的原子性、隔離、一致性和持續(xù)性(ACID)不受到威脅,并且維護(hù)數(shù)據(jù)的完整性。鎖的粒度Informix 提供各種粒度的鎖。它們是: 數(shù)據(jù)庫(kù)鎖:針對(duì)整個(gè)數(shù)據(jù)庫(kù)的鎖 表鎖:針對(duì)整個(gè)表的鎖 頁(yè)鎖:針對(duì)整頁(yè)數(shù)據(jù)的鎖 行鎖:針對(duì)一個(gè)數(shù)據(jù)行的鎖 字節(jié)鎖:在包含 VARCHAR 的行上的鎖 鍵鎖:在索引中的一個(gè)鍵值上的鎖 鎖的粒度越粗,它就能鎖住越多的數(shù)據(jù)庫(kù)對(duì)象。例如,對(duì)于能夠在一個(gè)磁盤(pán)頁(yè)上包含 4 行的表,在該頁(yè)放置一個(gè)鎖將鎖住其中包含的所有 4 個(gè)行。相反,如果使用行鎖,那么將僅鎖住一個(gè)行。因此,鎖的粒度越粗,并發(fā)性就越低,從而影響到性能,尤其是應(yīng)用程序試圖訪(fǎng)問(wèn)相同的行集時(shí)。不過(guò),粗粒度也意味著在某些情況下鎖住相同數(shù)量的行需要的鎖數(shù)量更少。例如,鎖住整個(gè)表僅需要一個(gè)表鎖。表的鎖模式創(chuàng)建一個(gè)表時(shí),它的默認(rèn)鎖粒度是頁(yè)鎖??梢栽趧?chuàng)建表的過(guò)程中使用 LOCK MODE 子句覆蓋默認(rèn)值。例如:CREATE TABLE t1(c1 int) LOCK MODE ROW;這個(gè)上下文中的鎖模式表明訪(fǎng)問(wèn)表時(shí)需要使用的鎖的粒度。如果從 CREATE SQL 語(yǔ)句省略掉這個(gè) LOCK MODE 子句,那么就使用默認(rèn)的鎖模式。 如果表已經(jīng)創(chuàng)建,那么可以使用 ALTER TABLE 語(yǔ)句更改鎖模式。對(duì)于以上提到的表 t1 例子,您可以使用下面的 ALTER 語(yǔ)句將鎖模式從行鎖更改頁(yè)鎖:dbaccess db1 -ALTER TABLE t1 LOCK MODE(PAGE);可以使用配置參數(shù) DEF_TABLE_LOCKMODE 更改已創(chuàng)建的表的默認(rèn)鎖模式。該參數(shù)的值可以是 ROW 或 PAGE。例如,如果 DEF_TABLE_LOCKMODE 設(shè)置為 ROW,那么數(shù)據(jù)庫(kù)服務(wù)器重啟之后創(chuàng)建的表的默認(rèn)鎖模式將為 ROW。類(lèi)似地,可以使用環(huán)境變量 IFX_DEF_TABLE_LOCKMODE 實(shí)現(xiàn)相同的效果。注意:如果從運(yùn)行 oninit 以啟動(dòng)服務(wù)器的窗口設(shè)置環(huán)境變量,那么通過(guò)環(huán)境變量指定的默認(rèn)鎖模式將對(duì)所有會(huì)話(huà)有效。然而,如果僅在特定客戶(hù)端會(huì)話(huà)環(huán)境中設(shè)置鎖模式,那么它僅對(duì)特定會(huì)話(huà)有效。清單 1 - 4 顯示了檢查表的鎖模式的不同方法(表名為 t1;數(shù)據(jù)庫(kù)名為 db1):清單 1. 使用 dbschemadbschema -d db1 -t t1 -ss 清單 2. 輸出create table informix.t1 ( c1 integer ) extent size 16 next size 16 lock mode row;清單 3. 使用 oncheckoncheck -pt db1:t1Output:TBLspace Report for db1:informix.t1 Physical Address 1:64070 Creation date 07/14/2009 04:51:27 TBLspace Flags 802 Row Locking TBLspace use 4 bit bit-maps Maximum row size 4 Number of special columns 0 Number of keys 0 Number of extents 1 Current serial value 1 Current SERIAL8 value 1 Current BIGSERIAL value 1 Current REFID value 1 Pagesize (k) 2 First extent size 8 Next extent size 8 Number of pages allocated 8 Number of pages used 1 Number of data pages 0 Number of rows 0 Partition partnum 1049067 Partition lockid 1049067 Extents Logical Page Physical Page Size Physical Pages 0 1:64999 8 8清單 4. 使用 dbaccess 從數(shù)據(jù)庫(kù)的系統(tǒng)目錄表查詢(xún)系統(tǒng)表dbaccess db1 - select * from systables where tabname=t1;tabname t1owner informixpartnum 1049067tabid 100rowsize 4ncols 1nindexes 0nrows 0.00created 07/14/2009version 6553601tabtype Tlocklevel Rnpused 0.00fextsize 16nextsize 16flags 0sitedbnametype_xid 0am_id 0pagesize 2048ustlowtssecpolicyid 0protgranularity字段 “l(fā)ocklevel” 為 R,表明這是一個(gè)行鎖。另外,使用 onstat -k 來(lái)監(jiān)控鎖模式。這將在 “使用 onstat 實(shí)用程序監(jiān)控鎖” 小節(jié)進(jìn)行介紹?;仨?yè)首鎖的類(lèi)型數(shù)據(jù)庫(kù)、表、頁(yè)和行(在這個(gè)小節(jié)中統(tǒng)稱(chēng)為對(duì)象)通過(guò)不同類(lèi)型的鎖來(lái)控制對(duì)自身的訪(fǎng)問(wèn)。IDS 使用以下類(lèi)型的鎖:共享鎖當(dāng)需要讀取數(shù)據(jù)并且不允許更改行時(shí),那么就可以在該對(duì)象(比如表、頁(yè)或行)上設(shè)置一個(gè)共享鎖。一個(gè)對(duì)象可以由不同的會(huì)話(huà)設(shè)置多個(gè)共享鎖。因此,可以在需要時(shí)在一個(gè)對(duì)象上設(shè)置多個(gè)共享鎖。更新/提升鎖可以在需要更新的對(duì)象上設(shè)置更新鎖。如果一個(gè)對(duì)象已經(jīng)設(shè)置了共享鎖,另一個(gè)會(huì)話(huà)還可以在其上設(shè)置一個(gè)更新鎖。如果需要更改對(duì)象,那么更新鎖必須提升為獨(dú)占鎖。不過(guò),為了實(shí)現(xiàn)獨(dú)占鎖,在提升過(guò)程中該對(duì)象不能包含共享鎖或更新鎖。獨(dú)占鎖當(dāng)一個(gè)會(huì)話(huà)請(qǐng)求單獨(dú)使用某個(gè)對(duì)象時(shí),可以在該對(duì)象上放置一個(gè)獨(dú)占鎖。如果一個(gè)對(duì)象上已經(jīng)放置了獨(dú)占鎖,那么其他會(huì)話(huà)就不能再在該對(duì)象上放置其他類(lèi)型的鎖。INSERT、UPDATE 和 DELETE 語(yǔ)句在它們所更改的行上使用這個(gè)鎖。在事務(wù)完成之后將釋放該鎖。onstat 實(shí)用程序和 syslocks 表使用以下符號(hào)表示鎖的類(lèi)型: 共享鎖 - S 更新鎖 - U 獨(dú)占鎖 - X 在某些情況下,可以通過(guò)放置一個(gè)意向鎖(intent lock)來(lái)表明要放置特定鎖的意向。例如,意向共享鎖的表示符號(hào)為 IS。在使用 SELECT 語(yǔ)句期間通??梢栽诒砩峡吹?IS 鎖。在使用 INSERT、UPDATE 或 DELETE 語(yǔ)句期間通??梢栽诒砩峡吹揭庀颡?dú)占鎖。 表 1 使用這些符號(hào)列出了一個(gè)兼容性矩陣,顯示當(dāng)一個(gè)會(huì)話(huà)已經(jīng)在某個(gè)對(duì)象上放置了特定的鎖時(shí),另一個(gè)會(huì)話(huà)可以在該對(duì)象上請(qǐng)求的鎖。表 1. 鎖兼容性矩陣持有 X 鎖持有 U 鎖持有 S 鎖持有 IS 鎖持有 SIX 鎖持有 IX 鎖請(qǐng)求 X 鎖No No No No No No 請(qǐng)求 U 鎖No No Yes Yes No No 請(qǐng)求 S 鎖No Yes Yes Yes No No 請(qǐng)求 IS 鎖No Yes Yes Yes Yes Yes 請(qǐng)求 SIX 鎖No No No Yes No No 請(qǐng)求 IX 鎖No No No Yes No Yes 回頁(yè)首鎖請(qǐng)求失敗當(dāng)會(huì)話(huà)請(qǐng)求鎖失敗時(shí),數(shù)據(jù)庫(kù)服務(wù)器的默認(rèn)行為是返回一個(gè)錯(cuò)誤。要讓該會(huì)話(huà)等待擁有鎖的會(huì)話(huà)釋放鎖,請(qǐng)?jiān)谶\(yùn)行預(yù)定語(yǔ)句之前運(yùn)行以下 SQL 語(yǔ)句:SET LOCK MODE TO WAIT;這將讓會(huì)話(huà)一直等到鎖釋放。如果要設(shè)置固定的等待期限(例如,5 秒),則使用以下語(yǔ)句:SET LOCK MODE TO WAIT 5;回到默認(rèn)行為:SET LOCK MODE TO NOT WAIT;SET LOCK MODE 語(yǔ)句僅在會(huì)話(huà)級(jí)別有效。我們通過(guò)以下例子查看鎖模式的行為:清單 5. 開(kāi)始會(huì)話(huà)dbaccess - -DROP DATABASE db1;CREATE DATABASE db1 WITH BUFFERED LOG;CREATE TABLE t1 (c1 int);INSERT INTO t1 VALUES (1);清單 6. 會(huì)話(huà) Adbaccess db1 -BEGIN WORK;UPDATE t1 SET c1=5;清單 7. 會(huì)話(huà) Bdbaccess db1 -SELECT* FROM t1;清單 8. 收到的錯(cuò)誤244: Could not do a physical-order read to fetch next row.107: ISAM error: record is locked.清單 9. onstat -g sql 輸出$ onstat -g sqlIBM Informix Dynamic Server Version 11.50.FC4 - On-Line - Up 1 days 06:16:34 - 149504 KbytesSess SQL Current Iso Lock SQL ISAM F.E.Id Stmt type Database Lvl Mode ERR ERR Vers Explain30 - db1 CR Not Wait 0 0 9.24 Off輸出結(jié)果顯示 db1 的隔離級(jí)別為 “Committed Read”(后面將討論隔離級(jí)別)。因?yàn)楸?t1 上有一個(gè)未提交的更新,錯(cuò)誤提示需要使用鎖定的記錄。 讓我們?cè)跁?huì)話(huà) B 中嘗試使用 SET LOCK MODE WAIT 語(yǔ)句:SET LOCK MODE TO WAIT;SELECT* FROM t1;這個(gè)會(huì)話(huà)并沒(méi)有立即返回錯(cuò)誤,而是等待鎖釋放?,F(xiàn)在,在會(huì)話(huà) A 中,完成事務(wù):COMMIT WORK;在會(huì)話(huà) B 中,現(xiàn)在是等待提交結(jié)束之后才返回查詢(xún)結(jié)果。2、 死鎖當(dāng)兩個(gè)會(huì)話(huà)都持有它們需要使用的鎖時(shí)就會(huì)導(dǎo)致死鎖。結(jié)果是兩個(gè)會(huì)話(huà)都等待對(duì)方釋放鎖。不過(guò),數(shù)據(jù)庫(kù)服務(wù)器可以檢測(cè)到這種情況并阻止它發(fā)生。例如:T1:讀取行 A 并在其上放置一個(gè)鎖。T2:讀取行 B 并在其上放置一個(gè)鎖。T1:在行 B 上請(qǐng)求一個(gè)鎖。T2:在行 A 上請(qǐng)求一個(gè)鎖。IDS 維護(hù)一個(gè)內(nèi)部鎖表。為了防止出現(xiàn)死鎖,IDS 將檢查內(nèi)部鎖表,查看在會(huì)話(huà)等待鎖期間是否會(huì)導(dǎo)致死鎖。發(fā)生的情況如下所示:T1:將鎖模式設(shè)置為等待。T2:將鎖模式設(shè)置為等待。T1:讀取行 A 并在其上放置一個(gè)鎖。T2:讀取行 B 并在其上放置一個(gè)鎖。T1:在行 B 上請(qǐng)求一個(gè)鎖;必須等待 T2 在行 B 上釋放該鎖。T2:在行 A 上請(qǐng)求一個(gè)鎖,但被拒絕了,因?yàn)榈却撴i的釋放會(huì)導(dǎo)致死鎖。IDS 從內(nèi)部鎖表檢測(cè)到: T1 持有行 A 上的鎖 T2 持有行 B 上的鎖 T1 等待 T2 持有的行 B 上的鎖 如果允許 T2 等待 T1 在行 A 上持有的鎖,那么將出現(xiàn)死鎖。因此,鎖請(qǐng)求被拒絕,并返回錯(cuò)誤 (-143 ISAM error: deadlock detected)。檢查 onstat -p 的輸出看看是否有死鎖:清單 10. 檢查 onstat -p 輸出中的死鎖$ onstat -pIBM Informix Dynamic Server Version 11.50.FC4 - On-Line - Up 2 days 22:34:37 - 157696 KbytesProfiledskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached13851 44301 1894394 99.27 22604 41159 429311 94.73isamtot open start read write rewrite delete commit rollbk1178884 64495 88313 413795 46723 58450 5657 17833 16gp_read gp_write gp_rewrt gp_del gp_alloc gp_free gp_curs0 0 0 0 0 0 0ovlock ovuserthread ovbuff usercpu syscpu numckpts flushes0 0 0 89.23 13.32 366 70849bufwaits lokwaits lockreqs deadlks dltouts ckpwaits compress seqscans191 0 750183 5 0 6 4010 6770ixda-RA idx-RA da-RA RA-pgsused lchwaits231 2 3080 3313 254查看 “deadlks” 字段,您可以看到在數(shù)據(jù)庫(kù)服務(wù)器上線(xiàn)至今發(fā)生了 5 個(gè)死鎖事件。如果頻繁發(fā)生死鎖,請(qǐng)檢查應(yīng)用程序并交錯(cuò)使用頻繁更改的行。通過(guò)減少鎖等待時(shí)間可以降低出現(xiàn)死鎖的幾率。對(duì)于分布式事務(wù),會(huì)話(huà)在返回錯(cuò)誤之前使用 DEADLOCK_TIMEOUT 配置參數(shù)等待來(lái)自遠(yuǎn)程數(shù)據(jù)庫(kù)的響應(yīng)。在 onstat -p 輸出中的 “dlouts” 字段顯示分布式死鎖超時(shí)的統(tǒng)計(jì)數(shù)據(jù)。日志和非日志數(shù)據(jù)庫(kù)在日志數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)服務(wù)器記錄其事務(wù)以及在事務(wù)期間持有的鎖。一般都能夠識(shí)別到事務(wù)持有的鎖,除非事務(wù)沒(méi)有提交或被回滾。非日志數(shù)據(jù)庫(kù)中沒(méi)有事務(wù),但仍然使用鎖。盡管很容易錯(cuò)過(guò),但是服務(wù)器在執(zhí)行 Data Manipulation Language 時(shí)使用鎖,并且在該語(yǔ)句完成之后快速釋放鎖。3、 監(jiān)控鎖onstat 實(shí)用程序監(jiān)控鎖數(shù)據(jù)庫(kù)服務(wù)器使用的鎖保持在一個(gè)內(nèi)部鎖表中。使用 onstat -k 命令可以監(jiān)控?cái)?shù)據(jù)庫(kù)服務(wù)器持有的鎖的類(lèi)型和粒度。onstat -k 命令的輸出包含以下字段:表 2. onstat -k 命令輸出包含的字段字段說(shuō)明address鎖表中的鎖的位置。如果用戶(hù)線(xiàn)程正在等待這個(gè)鎖,那么該鎖的地址就會(huì)出現(xiàn)在 onstat -u(用戶(hù))輸出的 wait 字段中。wtlist等待鎖的用戶(hù)線(xiàn)程列表的第一項(xiàng),如果存在的話(huà)。owner持有鎖的線(xiàn)程的共享內(nèi)存地址。這個(gè)地址與 onstat -u(用戶(hù))輸出中的 address 字段中的地址對(duì)應(yīng)。當(dāng)持有者值顯示在圓括號(hào)中時(shí),它表示事務(wù)結(jié)構(gòu)的共享內(nèi)存地址。僅當(dāng)為全局事務(wù)分配鎖時(shí)才會(huì)發(fā)生這種情況。這個(gè)地址與 onstat -G 輸出的 address 字段對(duì)應(yīng)。lklist剛才列出的持有者持有的鏈接鎖列表中的下一個(gè)鎖。type使用以下符號(hào)表示鎖的類(lèi)型: HDR - 頭部 B - 字節(jié) S - 共享 X - 獨(dú)占 I - 意向 U - 更新 IX - 意向獨(dú)占 IS - 意向共享 SIX - 共享意向獨(dú)占 tblsnum行標(biāo)識(shí)號(hào)碼。rowid 提供以下鎖信息: 如果 rowid 為 0,那么這個(gè)鎖是一個(gè)表鎖。 如果 rowid 以?xún)蓚€(gè) 0 結(jié)尾,那么這個(gè)鎖是一個(gè)頁(yè)鎖。 如果 rowid 小于等于 6 位數(shù)并且不以 0 結(jié)尾,那么這個(gè)鎖可能是一個(gè)行鎖。 如果 rowid 大于 6 位數(shù),那么該鎖可能是一個(gè)索引鍵-值鎖。 key#/bsiz索引鍵值號(hào),或?yàn)?VARCHAR 鎖鎖定的字節(jié)數(shù)。如果這個(gè)字段包含 “K-” 并且其后接一個(gè)值,那么這是一個(gè)鍵鎖。該值標(biāo)識(shí)要鎖住的索引。例如,K-1 表示為表定義的第一個(gè)索引包含一個(gè)鎖?;仨?yè)首o(hù)nstat -k 命令的示例輸出這個(gè)例子使用不遵從 ANSI 的日志數(shù)據(jù)庫(kù)和兩個(gè)表:CREATE DATABASE db1 WITH LOG;CREATE TABLE t1 (c1 int);CREATE TABLE t2 (c1 int) LOCK MODE ROW;以下值被插入到這兩個(gè)表中:INSERT INTO t1 VALUES (1);INSERT INTO t2 VALUES (1);INSERT INTO t2 VALUES (2);執(zhí)行以下語(yǔ)句:BEGIN WORK;UPDATE t1 SET c1=5;UPDATE t2 SET c1=5;onstat -k 的輸出:清單 11. onstat -k 的輸出$ onstat -kIBM Informix Dynamic Server Version 11.50.FC4 - On-Line - Up 2 days 21:39:44 - 157696 KbytesLocksaddress wtlist owner lklist type tblsnum rowid key#/bsiz10a3134d8 0 111535cd8 0 HDR+S 100002 204 010a44bcd8 0 111535488 0 S 100002 204 010a44bd58 0 111536528 0 S 100002 204 010a44c4d8 0 111537e18 0 HDR+S 100002 202 011348b028 0 111537e18 10a44c4d8 HDR+IX 1001ef 0 011348b0a8 0 111537e18 11348b028 HDR+X 1001ef 100 011348b128 0 111537e18 11348b0a8 HDR+IX 1001f0 0 011348b2a8 0 111537e18 11348b128 HDR+X 1001f0 101 0 U11348b328 0 111537e18 11348b2a8 HDR+X 1001f0 102 0 U 9 active, 80000 total, 16384 hash buckets, 2 lock table overflows該輸出包含以下信息: 表鎖: o 查看地址為 11348b028 的行,其 rowid 為 0,表明這個(gè)鎖是表鎖。IX 表明其類(lèi)型為意向獨(dú)占。 頁(yè)鎖: o 查看地址為 11348b0a8 的行,其 rowid 的最后兩位為 00,表明這個(gè)鎖是頁(yè)鎖。類(lèi)型 X 表明它是獨(dú)占鎖。這是針對(duì) t1 的,它使用頁(yè)級(jí)鎖模式。 行鎖: o 查看地址為 11348b328 的行,其 rowid 為 0x102,表明這個(gè)鎖是行鎖,在這里為獨(dú)占鎖。這是針對(duì) t2 的,它使用行級(jí)鎖模式。 數(shù)據(jù)庫(kù)鎖: o 查看地址為 10a3134d8 的行,表上有一個(gè)行鎖。不過(guò),tblsnum 0x100002 是一個(gè)數(shù)據(jù)庫(kù) tblspace,它是在服務(wù)器中保持?jǐn)?shù)據(jù)庫(kù)列表的特殊表。因此,它行上的鎖相當(dāng)于鎖定數(shù)據(jù)庫(kù)。類(lèi)型 S 表明該鎖是一個(gè)共享鎖。 要在 onstat -k, 中找出 tblsnum 的表名,需要對(duì) systables 表使用以下語(yǔ)句:清單 12. 識(shí)別 tbslnum 的表名SELECT * FROM systables WHERE partnum=1049072;Output:tabname t2owner informixpartnum 1049072tabid 101rowsize 4ncols 1nindexes 0nrows 0.00created 07/20/2009version 6619137tabtype Tlocklevel Rnpused 0.00fextsize 16nextsize 16flags 0sitedbnametype_xid 0am_id 0pagesize 2048ustlowtssecpolicyid 0protgran
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療信息安全培訓(xùn)提升員工安全意識(shí)
- 醫(yī)療設(shè)備操作標(biāo)準(zhǔn)化與質(zhì)量管理
- 醫(yī)療器械清潔滅菌的宣傳教育
- 從教育到醫(yī)療區(qū)塊鏈技術(shù)的跨領(lǐng)域應(yīng)用案例
- 健康管理計(jì)劃與科技創(chuàng)新的深度融合
- 醫(yī)學(xué)領(lǐng)域中數(shù)據(jù)挖掘的倫理邊界探討
- 小學(xué)語(yǔ)文統(tǒng)編五年級(jí)下冊(cè)《梅花魂》教學(xué)設(shè)計(jì)
- 區(qū)塊鏈技術(shù)對(duì)各行業(yè)的影響與機(jī)遇分析
- nome加盟合同范例
- 為垃圾找個(gè)家教學(xué)設(shè)計(jì)
- 科技創(chuàng)業(yè)孵化園項(xiàng)目書(shū)專(zhuān)題培訓(xùn)課件
- 市供銷(xiāo)社規(guī)章制度匯編
- 辦公用品及辦公耗材售后維護(hù)服務(wù)方案
- 思想道德與法治 第三章
- 信息光學(xué)課件
- 北師大版數(shù)學(xué)八年級(jí)下冊(cè)全冊(cè)同步練習(xí)附答案
- 開(kāi)放水域潛水員理論知識(shí)考試試題與答案
- 機(jī)械設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)題目范文
- 報(bào)價(jià)單報(bào)價(jià)表
- 職業(yè)衛(wèi)生檔案全套
-
評(píng)論
0/150
提交評(píng)論