视窗
loading...
您现在的位置:首页 > IT认证 > oracle认证 >

Oracle:UNDO机制


Oracle:UNDO机制

Oracle绝对禁止一个用户查看另一个用户未提交的事务数据。

    启动一个DML事务时,已修改数据的象前版本被缓存在database buffer cache,再有一个缓冲副本被写入一个回退段(undo segment)上。

    Undo segment三个重要目的:

    1用户发布rollback命令,则可用来恢复数据原状态。

    2其他用户访问DML用户发布commit前的原数据,则提供一个已修改数据的读一致性视图。

    3在实例恢复期间,用来rollback一个在实例故障刚发生前进行的未提交的事务。

    回滚段由范围组成,这个范围由5个或5个以上的Oracle块组成。

    回滚段工作方式:

    1在一个回滚段内,以环形方式循环使用范围,直到段装满。由用户的commit或rollback命令发布后释放回滚段内的范围。

    2同一个undo segment可以存储很多个像前版本,同时,一个像前版本只会存储在一个undo segment而不会因空间等任何问题连接到其他undo segment。

    3如果一个undo segment中的一个范围启动了一个事务的像前版本,且逐渐增长装满了该范围,此时会环绕到下一个临近的范围继续使用空间,此时如果下一个临近范围已经被其他事务占领,则绝对不会跳过该临近范围查找其他可用范围,而是会在这个范围之间创建一个新的范围来使用。

    4一个undo segment能处理的事务个数,取决于Oracle块大小。

    5每个数据库都至少有一个回滚段(系统回滚段),一旦创建了其他回滚段,则该回滚段将只用于处理数据目录读一致性和事务控制。

    6set transaction use rollback segment命令可以申请一个指定的回滚段。

    7LOB列不使用undo segment,而使用创建时分配给表的空间来存储像前版本。

    5.5.1  测量UNDO I/O性能

    5.5.1.1undo segment头部的争用

    Oracle 使用undo segment头部块中一个事务表来跟踪使用他的那些事务,其内容通常被缓存在database buffer cache中以便被搜索。OLTP上很有可能会因为访问这个头部发生等待。

    SQL> select event,total_waits,time_waited,average_wait

    from v$system_event where event like '%undo%' and event like '%slot%';

    average_wait:平均每毫秒等待的次数,等于0或接近于0最好。

    SQL>select class,count from v$waitstat

    where class in ('undo header','system undo header');

    count:等候访问undo segment头部的次数。理想情况下,该值等于0或接近于0最好。

    SQL>select n.name,s.usn,

    decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio"

    from v$rollstat s,v$rollname n

    where s.usn = n.usn

    order by usn;

    RBS Header Get Ratio:等于1或接近1最好,至少为95%。

    5.5.1.2        undo segment范围的争用

    SQL>select class,count from v$waitstat

    where class ='system undo block' ;

    count:系统回滚段的范围的块争用次数

    SQL>select w.count,w.count/s.value as wait_ratio from v$waitstat w,v$sysstat s

    where w.class = 'undo block'

    and s.name = 'consistent gets';

    count:非系统回滚段的范围的块争用次数

    wait_ratio:回滚等待率,如果超过1%,则需要调整了。

    5.5.1.3        undo segment的环绕

    SQL> select n.name,s.usn,

    decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps

    from v$rollstat s,v$rollname n

    where s.usn = n.usn

    order by usn;

    s.wraps:该回滚段被环绕到下一个范围的次数。次数太多表示段范围可能太小。

    5.5.1.4        undo segment的动态范围分配

    事务的像前版本在undo segment中发生环绕,而下一个范围已经分配给其他事务的像前版本,此时会在他们之间动态创建一个范围来给该事务的像前版本环绕。应避免以减少I/O。

    SQL> select event,total_waits,time_waited,average_wait

    from v$system_event where event = 'undo segment extension';

    time_waited:表示动态分配的等待次数。若值很高或不断增长,说明undo segment太少或太小。

    SQL>select n.name,s.usn,s.extends,

    decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps

    from v$rollstat s,v$rollname n

    where s.usn = n.usn

    order by usn;

    s.extends:被动态添加的范围数。若经常发生动态添加,则说明undo segment可能太小。

    5.5.2        优化undo segment

    优化目标:

    1)        用户不用等待,就始终可找到undo segment来使用。

    2)        用户始终能得到完成事务所需要的读一致性视图。

    3)        回滚段不会引起过多的I/O。

    一般就是:

    1)        消除对undo segment header或block的争用。

    2)        尽量最小化undo segment的扩充和环绕。

    3)        避免undo segment用尽。

    4)        始终拥有为用户提供一致性视图的undo segment。

    做法:

    1)        添加更多的undo segment 。

    2)        增大现有undo segment。

    3)        明确管理大事务的undo segment。

    4)        undo segment需求最小化。

    5)        使用自动管理功能。

    5.5.2.1        增加更多的undo segment

    最好把新添加的undo segment放在另外的磁盘的表空间内。对undo要求最多的是delete,其次是update,最后是insert。

Oracle建议,为每4个并发事务创建一个undo segment,最多只能添加20个undo segment.

为了更准确的确定到底需要多大的undo segment,可以跟踪用户使用的undo segment大小:

//查询当前用户所使用的undo segment大小

SQL>select s.osuser,s.username,t.used_ublk

from v$session s,v$transaction t

where s.taddr = t.addr;

t.used_ublk:单位为Oracle块,*block size等于该用户将使用的size。

//查询某个大事务的具体使用大小。

1) 只保留一个undo segment online,其他的都offline。

Alter rollback segment xxxxx offline;

2) 统计当前所使用了的undo segment大小。

Select n.name,s.sun,s.writes from v$rollname n,v$rollstat s

Where n.usn = s.usn and name != ‘SYSTEM’;

s.writes:有多少字节的数据被写到该rollback segment上了。

3) 执行遇到回滚问题的大事务。

如:delete from alarminfo;

4) 重新执行“2)”的统计,使用新查询的s.writes减去(-)“2)”中查询出来的s.writes值,就是“3)”中事务所要使用的undo segment大小。

如果设置的undo segment大小是按大事务来设置,可能会浪费很多空间,只需要明确管理undo segment就可以了。

典型错误:ORA-01555 SNAPSHOT TOO OLD

一个修改事务很长时间未提交,别人查的时候在undo segment中找到了一个像前版本得到一致性读,别人还在查询到该修改前,最先修改的人提交了,并且此时undo segment中因为接受了commit而不守护该范围,此范围被其他事务写了。

这时候就会发生这种错误,只需要在查一次就可以了。

防范:

1) 表上发生小事务时候,设法避免运行时间很长的查询。

2) 增加undo segment的大小和数量。

一般设置:initial=512k,next=512k,minextents=20,这样就会创建一个10M的undo segment.

5.5.2.2 明确管理大事务的undo segment

创建一个很大的undo segment,专用于处理特定的事务。

由于Oracle会自动把任务分配给undo segment,所以一般创建完和使用完后,需要手工把他们offline.

1) 创建大回滚段。

Create private rollback segment rbs_for_large_tran

Storage (initial 10M next 10M) tablespace rbs;

2) 直到在作业开始前,把rbs_for_large_tran 联机。

Alter rollback segment rbs_for_large_tran online;

或:execute dbms_transaction.use_rollback_segment(‘rbs_for_large_tran’);

3) 启动作业。

Delete from alarminfo;

4) 一旦"3)"执行完,马上在另外一个窗口把该rbs_for_large_tran段offline.

Alter rollback segment rbs_for_large_tran offline;

注意:在作业中的任何commit,都将导致rbs_for_large_tran脱机。若脱机了,需重新联机。

5.5.2.3 undo segment需求最小化

最大限度的减少写往undo segment的项目数量和大小。

如:

imp的时候使用commit=y.

exp的时候不要使用consistent选项。

Sql*loader时设置适当的commit值。

5.5.2.4 使用自动管理功能

Oracle 9i的新功能,通过配置init.ora,让Oracle自动来进行管理undo segment(Oracle推荐)。

undo_managementl

=auto //使用undo 自动管理(AUM)

=manual //不使用AUM。

l undo_retention

单位是秒。指定一个像前版本在commit后被保存的时间。(减少ORA-01555错误)

l undo_suppress_errors

FALSE,TRUE.指定是否抑制在RBU中可用的命令。

l undo_tablespace

指定用于AUM的表空间名。

(同一时间,只能有一个undo tablespace在线,也必须有一个undo tablespace在线。

如果数据库未创建而undo_management=auto,则系统自动创建一个SYS_UNDOTBS表空间来使用)

创建的语法:

create undo tablespace undo_tbs

datafile ‘/u01/oradata/prod/undo01.dbf’ size 500M

autoextend on

next 5M maxsize 2000M;

(不能指定初始范围和下一个范围大小,因系统要自己指定)

估计undo tablespace大小的公式:

Undo space = (undo_retention * (undo blocks per second * db_block_size)) + db_block_size;

删除一个大的undo tbs:

8) 创建一个新的undo tbs undo_tbs02.

9) SQL>alter system setundo_tablespace=undo_tbs02;

此时,新的事务会使用undo_tbs02,而以前的事务,依然会继续使用undo_tbs.

10) 待Undo_tbs上的所有事务commit或rollback,且超过了undo_retention指定的时间后,drop tablespace删除该undo tbs.

(此时注意,如果drop 了undo_tbs,此时任何发生在undo_tbs的像前读都要报错,此时最好发生在alter命令前的所有事物都commit了或rollback了。)

SQL>select u.begin_time,u.end_time,

t.name "undo_tbs_name",

u.undoblks "blocks_used",

u.txncount "transactions",

u.maxquerylen "longest query",

u.expblkreucnt "expired blocks"

from v$undostat u,v$tablespace t

where u.undotsn = t.ts#;

查询统计时间内,被undo使用的Oracke块数,发生的事务数,最长的查询时间,在需要查一致性时有多少块已经被覆盖(出现>0的数表示ORA-01555就很可能发生)。

闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闁诲骸鍘滈崑鎾绘煕閺囥劌浜為柨娑欑洴濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�

闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闁诲骸鍘滈崑鎾绘煕閺囥劌浜為柨娑欑洴濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�

闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕婵犵數鍋涘Λ娆撳箰閸濄儳鐭嗗鑸靛姈閻撴盯鏌涢妷锝呭姎闁诲繆鏅犻弻娑氫沪鐠囨彃顫囬梺鍝勬湰濞茬喎鐣烽悡搴樻斀闁搞儜灞拘熼梻浣筋嚙鐎涒晠鎳濇ィ鍐b偓锕傛倻閽樺鎽曢梺闈浨归崕顕€寮ㄦ禒瀣厱闁斥晛鍘鹃鍫熷仧闁哄啫鍊荤壕钘壝归敐鍥ㄥ殌闁轰礁澧界槐鎾愁吋閸曨厾鐛㈤悗娈垮枛椤兘寮幘缁樺亹闁肩⒈鍓﹀Σ瑙勪繆閻愵亜鈧牠宕濊閳ь剟娼ч惌鍌炲春閳ь剚銇勯幒宥囪窗婵炲牊绮撻弻鈥崇暆閳ь剟宕伴弽顓炵閹兼番鍔岀壕鍏兼叏濮楀棗澧伴柕鍫櫍濮婄粯鎷呯粵瀣異闂佸摜鍣ラ崑濠傜暦閹偊妯勯梺鍝ュ仜閻栫厧顫忛搹鍦<婵☆垵宕甸崣鍡涙⒑绾懎袚缂侇喖娴烽崚鎺楀籍閸偅鏅㈤梺鍛婃处閸撴盯宕㈡禒瀣拺缂備焦鈼ら鍕靛殨闁割偅娲栫粻褰掓煙閹殿喖顣奸柣鎾跺枛楠炴帡骞庨挊澶岊槷闁诲繒鍋犲Λ鍕矈椤愶附鈷掑ù锝勮閺€浼存煙濞茶绨界紒顔碱煼楠炲鏁愰崶鈺婂晬闂傚倸鍊搁崐宄懊归崶褉鏋栭柡鍥ュ灩闂傤垶鏌ㄩ弴鐐测偓鍝ョ不椤栫偞鐓ラ柣鏇炲€圭€氾拷
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈡晜閽樺缃曟繝鐢靛Т閿曘倝鎮ч崱娆戠焼闁割偆鍠撶粻楣冩煙鐎涙ḿ鎳冮柣蹇d邯閺屾稓鈧綆鍓欓弸鎴︽煏閸パ冾伃鐎殿喕绮欓、鏇綖椤撶喎濯伴梻鍌欒兌缁垳鏁敍鍕笉闁哄稁鍘奸拑鐔兼煛閸モ晛鏋旂紒鐘荤畺閺屾盯鈥﹂幋婵囩亪婵犳鍠栭柊锝咁潖閾忚瀚氶柛娆忣槸閺€顓烆渻閵堝棙鑲犻柛鈩冾殘閸婃帡姊婚崒娆戝妽闁诡喖鐖煎畷鏇㈡嚒閵堝懐绛忛梺鍏间航閸庢彃鈻嶉悩缁樼厵缂備焦锚绾偓閻熸粎澧楃敮妤呭磻閸岀偛绠规繛锝庡墮閻忊晜绻涢崼鐕佹疁闁诡喗顨呴埢鎾诲垂椤旂晫浜梻浣虹帛閻楁洟宕ョ€n偆鈹嶅┑鐘叉处閸婂鏌ら幁鎺戝姕婵炲懎妫濆娲川婵犲啫鐦烽梺鍛婂姦娴滄粎鏁Δ鈧埞鎴︽偐閸偅姣勯梺绋款儐閻╊垶骞冨ú顏勎╃憸宥夊垂濠靛牃鍋撻崗澶婁壕闂侀€炲苯澧撮柟宕囧仱閺屽棗顓奸崱妤佺暟闂備礁鍟块幖顐も偓姘煎墮閻剚绻濋悽闈涗粶妞ゆ洦鍙冨畷銏n樄闁诡喗妞芥俊鎼佸煛娴e憡鍎梻浣呵归惉濂稿磻閻愮儤鍋傛繛鎴欏灪閻撴洟鏌熼幍铏珔濠碘€炽偢閺屽秷顧侀柛鎾寸箓閻g兘鎮介棃娑樼亰闂佸搫鍟ú銏$瑜版帗鐓欓柣鎴炆戠亸鐢告煕濞嗗繑顥滈柍瑙勫灴閹瑩寮堕幋鐘辩礃婵犵數鍋涢幊蹇撁哄⿰鍫濈劦妞ゆ帊鑳堕崯鏌ユ煙閸戙倖瀚�闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃秹婀侀梺缁樺灱濡嫰寮告笟鈧弻鐔兼⒒閹绢喗顎栭梺閫炲苯鍘搁柣鎺炲閹广垹鈹戠€n亞锛涘銈嗙墬濮樸劎绮旈搹鍏夊亾鐟欏嫭绀€鐎规洦鍓濋悘鎺楁煟閻樺弶鎼愭俊顖氾工宀e潡顢涢悙绮规嫽婵炶揪缍侀ˉ鎾寸▔閼碱剛纾奸棅顐幘閻瑧鈧鍠氶弫濠氥€佸Δ鍛妞ゆ巻鍋撳ù鐘层偢濮婃椽宕ㄦ繝搴㈢暭闂佺ǹ锕ラ崹鍫曞箚閺冨牆惟闁靛/鍐e亾閻愮儤鈷戦柟绋挎捣缁犳捇鏌熼崘鏌ュ弰闁糕晜绋掑鍕偓锝庡墰椤旀洟鏌f惔锝嗘毄閺嬵亪鎮介姘卞煟闁哄瞼鍠栭幖褰掝敃椤掑啠鍋撻崸妤佺厽婵炴垵宕弸銈夋煃瑜滈崜銊х礊閸℃稑绐楅柡宥庡亞娑撳秹鏌ㄥ┑鍡橆棤缂佲檧鍋撳┑鐘垫暩婵挳宕愰幖渚囨晜妞ゆ劧闄勯悡娆撴煛鐎i潧浜滃┑顔煎€归幈銊︾節閸愨斂浠㈤悗瑙勬磸閸斿秶鎹㈠┑瀣闁挎繂妫楅鍝ョ磽閸屾艾鈧绮堟笟鈧、鏍幢濞嗘劖娈伴梺璺ㄥ枔婵绮诲鑸电厱闁靛绲芥俊鍏笺亜閺囶澀鎲鹃柡灞稿墲瀵板嫮鈧綆浜炴禒鎾⒑閸濄儱浜奸柛鏃€鍨甸~蹇撁洪鍕啇闂佺粯鍔栬ぐ鍐╂叏瀹€鍕拺闁告稑锕ラ悡銉х磼婢跺﹦绉洪柡浣瑰姍閹瑩宕崟顐㈡暏婵$偑鍊ら崗娆撳磿闁秵鐓€闁挎繂鎳愰弳锕傛煕椤愶絾绀冮柡鍛叀閺屾稑鈽夐崡鐐茬闂佽鐏氶崐鏇㈠煘閹达附鍊风€瑰壊鍠栧▓鍫曟⒑閸涘⿴鐒奸柛銉戝懐鏋冩繝娈垮枟閵囨盯宕戦幘鎼闁绘劕寮堕ˉ銏⑩偓瑙勬礃閿曘垽銆佸▎鎾村殐闁冲搫锕ユ晥婵犵绱曢崑鎴﹀磹閺嶎厼绀夐柟杈剧畱閸ㄥ倹绻涘顔荤凹闁稿骸锕弻锟犲礃閿濆懍澹曠紓鍌欒兌缁垳鎹㈤崼鐔稿弿闁逞屽墴閺屻劌鈹戦崱姗嗘¥闂侀潧妫欓崝娆撳蓟閿濆棙鍎熼柕蹇ョ到椤ユ繈姊虹涵鍛撶紒顔艰嫰瀹撳嫰姊虹憴鍕棆濠⒀勵殜瀵煡骞栨担鍦弳闂佺粯娲栭崐鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛顐f礀缁犵娀鏌熼崜褏甯涢柛瀣ㄥ€濋弻鏇熺箾閻愵剚鐝旈梺鎼炲妼閸婂潡寮诲☉銏犵疀妞ゆ挾濮伴崑鐐烘⒑閸撴彃浜藉ù婊庝邯瀵鎮㈢悰鈥充壕闁汇垻娅ラ悷鎵瘓闂傚倷鑳剁划顖滄暜閹烘鏅濋柕鍫濐槸閻撴﹢鏌熸潏楣冩闁稿鍔欓弻娑樷枎韫囷絾效闂佽鍠楅悷銉╁煘閹达附鍊烽柛娆忣槸濞咃繝姊洪幖鐐插缂傚秴锕ら敃銏$瑹閳ь剙顫忓ú顏勭閹艰揪绲块悾闈涒攽閳藉棗浜濋柣鈺婂灦楠炲棛浠﹂悙顒€鍔呴梺闈涒康婵″洭宕㈤幘缁樺仭婵犲﹤瀚惌鎺斺偓瑙勬礃缁矂鍩㈡惔銊ョ鐎规洖娲ㄩ弸鍐⒒娴e摜绉洪柛瀣躬瀹曟顫滈埀顒€顕i幖浣哥睄闁割偆鍠撻崢鐢告煛婢跺﹦澧︾紒鐘崇墪椤﹪顢氶埀顒勫蓟濞戞埃鍋撻敐搴濇喚闁稿孩妫冮弻锛勪沪閸撗勫垱濡炪們鍨哄ú鐔镐繆閸洖宸濇い鏃堟暜閸嬫捇宕滆绾句粙鏌涚仦鐐殤鐞氾箓姊虹粙娆惧剱闁圭懓娲ら~蹇曠磼濡顎撻梺鑽ゅ枑婢瑰棙绂嶆导瀛樷拺缂備焦锚闁叉粎绱掗悩铏鞍濞e洤锕幃浠嬪川婵犲倵鍋撻悜鑺ョ厽闁靛繈鍨洪弳鈺傘亜閿旇鐏︽慨濠冩そ瀹曨偊宕熼锝嗩唲闂備胶绮〃鍛涘☉銏″剦妞ゅ繐娴傚Ο鍕⒑閸濆嫭婀伴柣鈺婂灦閻涱噣宕堕澶嬫櫖濠电偞鍨堕崫搴ㄥ焵椤掆偓閿曪妇妲愰幘瀛樺闁圭粯甯婃竟鏇㈡⒒娴h姤纭堕柛锝忕畵楠炲繘鏁撻敓锟�闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘鎳為柆宥嗗殐闁宠桨鑳剁粵蹇旂節閻㈤潧校闁绘棏鍓涚槐鐐哄冀瑜滈悢鍡涙煠閹间焦娑у┑顔兼喘閺屾盯濡搁妷銉㈠亾閸︻厽宕叉繝闈涙川缁♀偓闂佺ǹ鏈崙瑙勫閳ь剚淇婇悙顏勨偓鎰板疾閻樿缁╅梺顒€绉存闂佸憡娲﹂崹鎵不閹惰姤鐓欓悗娑欋缚缁犳牗绻涢崼锝呯毢缂佽鲸鎸婚幏鍛槹鎼淬倗鐛ラ梻渚€娼荤紞鍥╁緤娴犲鏁嬮柨婵嗩槸闁卞洭鏌¢崶鈺佹瀻闁逞屽墰閸忔﹢寮诲☉鈶┾偓锕傚箣濠靛懐鍑归梻浣虹帛缁诲秵绂嶅⿰鍫濈厴闁硅揪闄勯崐鐑芥煠绾板崬澧い銈傚亾闂傚倷鐒﹂幃鍫曞礉鐏炵偓娅犻幖杈剧到閸ㄦ繃鎱ㄥΟ鍨厫闁绘帟鍋愰埀顒€绠嶉崕閬嶅箠閹版澘绀夐柟缁㈠枟閳锋垿鏌涘☉姗堝伐濠㈢懓鍟撮弻娑樷槈閸楃偟浼囧┑鈥虫▕閸撴氨鎹㈠┑瀣仺闂傚牊鍒€閵夛负浜滈柨婵嗗閻瑩鏌涢埞鎯т壕婵$偑鍊栧濠氬磻閹剧粯鐓曢柣鏃堟敱閸嬨儵鏌涢埞鎯т壕婵$偑鍊栫敮鎺楀磹瑜版帒鍚归柍褜鍓熷娲箰鎼淬垻锛橀梺鎼炲妽濡炰粙鐛箛娑樺窛闁哄鍨归ˇ顓㈡⒑閸︻厾甯涢悽顖涱殜椤㈡﹢宕稿Δ浣叉嫽婵炶揪绲介幊娆掋亹閹烘垵鐝樺銈嗗笒閸婄懓鐣烽懠顑藉亾楠炲灝鍔氭い锔诲灦閹虫粏銇愰幒鎾跺幍缂傚倷闄嶉崹褰掑几閻斿吋鐓熼柟鎯ь嚟閹冲洭鏌熼绛嬫當闁宠棄顦埢搴b偓锝庡墰缁愭鈹戦悩顐e閻忕偠妫勯~顏嗙磽娴h櫣甯涚紒璇茬墦瀹曟椽鍩€椤掍降浜滈柟鍝勭Ф閸斿秴鈹戦娑欏唉闁哄本鐩弫鍌滄嫚閹绘帞顔掗梻浣侯攰濞呮洜鎹㈤崼婵愭綎婵炲樊浜滅粈鍫ユ煠绾板崬澧悽顖樺劦濮婅櫣绮欏▎鎯у壈闂佺娅曢崝妤€危閹扮増鍊烽柛婵嗗閸旓箑顪冮妶鍡楃瑨閻庢凹鍙冮崺娑㈠箣閿旂晫鍘介梺缁樻⒒鏋い銉ヮ儔閺岀喖鎮剧仦瑙f瀰闂佸搫鐭夌徊鍊熺亙闂佸憡鍔戦崝瀣箣閻戣姤鈷戦柣鐔稿閻n參鏌涢妸銉хШ闁挎繄鍋涢埞鎴犫偓锝呯仛閺呯偤姊洪崗闂磋埅闁稿氦娅曠粋宥呪枎閹剧补鎷绘繛杈剧到閹诧繝骞嗛崼鐔虹閻犲泧鍛殼闂佽鍨伴惌鍌炪€佸▎鎾村€锋い鎺嗗亾閹兼潙锕铏瑰寲閺囩偛鈷夌紓浣割儐鐢繝骞冮垾鏂ユ瀻闁规壋鏅欑花濠氭⒑閸︻厼浜炬い銊ユ嚇瀹曨垶鎮ч崼銏╂祫闂佸搫顦伴崺鍫濄€掓繝姘厪闁割偅绻冮ˉ鐐差熆鐠哄搫顏柡灞剧洴楠炴ḿ鎹勯悜妯尖偓濠氭⒑娴兼瑧鎮奸柛蹇旓耿瀵偊骞囬弶鍨€垮┑鐐叉閸ㄧ懓危閸ヮ剚鈷掑ù锝呮啞閸熺偤鏌涢弬璺ㄧ鐎殿喗鐓¢崺鈩冩媴閸曞墎绉い銏$洴閹瑧鍒掔憴鍕伖闂傚倷绀侀妶鎼佸焵椤掍胶鈽夌€规挸妫濋弻娑樷攽閸繂濡洪梺閫涚┒閸斿秶鎹㈠┑瀣<闁靛牆娲ら幃鎴︽⒒娴e憡鎯堥柤娲诲灦閹囧箻閼姐倕绁﹀┑顔姐仜閸嬫挻銇勯姀锛勬噰闁硅櫕鐗犻崺鈩冪節閸屾稑鈧盯姊婚崒姘偓鐑芥嚄閸洖绠犻柟鍓х帛閸嬨倝鏌曟繛褍鍟悘濠囨倵楠炲灝鍔氭繛灞傚€濆畷鐟扳攽鐎n偆鍙嗛梺鍝勬川閸嬫盯鍩€椤掆偓缂嶅﹪骞冮敓鐘参ㄩ柨鏂垮⒔椤旀洟姊洪悷閭﹀殶闁稿﹥鐗犻獮瀣攽閹惧厜鍋撻崸妤佺厽婵°倐鍋撻柣妤€绻掑褔鍩€椤掑嫭鈷戦梺顐ゅ仜閼活垱鏅剁€涙﹩娈介柣鎰皺鏁堝銈冨灪閻熲晠鐛崱姘兼Щ闁荤喐鐟遍梽鍕崲濠靛鍋ㄩ梻鍫熺◥缁泛鈹戦埥鍡椾簼妞ゃ劌鎳樺﹢浣逛繆閻愬樊鍎忔繛瀵稿厴閹磭绱掑Ο鍦畾闂侀潧鐗嗛幊搴ㄥ汲閻旇櫣妫柟顖嗕礁浠梺鍝勭焿缁绘繂鐣烽幒鎴旀闁告鍋涙俊濂告⒒娴e懙瑙勵殽閸濄儲宕查柟鐑橆殔閻掑灚銇勯幒鎴濇灓婵炲吋鍔欓弻鐔煎传閵夊洨顢婇悘瀣攽閻樼粯娑ф俊顐g洴瀵娊鏁傞懞銉ュ伎濠碘槅鍨伴悘婵嬫偂閹扮増鐓曢悗锝庡亜婵绱掓潏銊﹀鞍闁瑰嘲鎳愰幏褰掝敍濠婂懐鐛ラ梺鑽ゅ枑缁孩鏅跺Δ鍛瀭闁割煈鍣ḿ鏍ㄧ箾瀹割喕绨荤紒鐘卞嵆楠炴牜鍒掗崗澶婁壕闁惧浚鍋嗘禍鐐烘⒒閸屾瑨鍏岄柟铏崌瀹曠敻寮介鐐殿唵闂佽法鍣﹂幏锟�闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃秹婀侀梺缁樺灱濡嫰寮告笟鈧弻鐔兼⒒鐎靛壊妲紓浣哄Х婵炩偓闁哄瞼鍠栭獮鎴﹀箛椤掑倸甯块梻浣告惈濡瑧鍒掑澶娢﹂柛鏇ㄥ灠缁犳盯鏌涢幘鑼跺厡闁哄棛濮风槐鎾存媴閹绘帊澹曢梻浣虹《閸撴繂鐜荤捄銊т笉濡わ絽鍟悡娆撴倵閻㈠憡娅滅紒杈珪閵囧嫯绠涢幘璺侯暫闂佸搫顑勭欢姘跺蓟濞戙埄鏁冮柨婵嗘椤︺劑姊虹粙鍖″姛闁轰焦鎮傞幆鈧い蹇撶墱閺佸洭鏌i幇顓熺稇妞ゅ孩绋戦埞鎴︽倷閹绘帗鍊梺鍛婃⒐閻熲晛顕g拠娴嬫闁靛繒濮堥埡鍛叆闁哄倸鐏濋埛鏃堟煟閹捐尪鍏岀紒杈ㄦ尰閹峰懐绮欐惔鎾充壕闁革富鍘介弳婊堟煥閻斿搫袨闁逞屽厸缁€浣界亙婵炶揪绲块幊鎾活敁閹惧墎纾藉ù锝呭閸庡繘鏌¢崨顔剧疄妞ゃ垺娲熼弫鍌滄喆閿濆棗顏归梻浣藉吹閸犳劙鎮烽妷褉鍋撳鐓庡箻婵炲棎鍨介幊鐘活敆閸屾粣绱茬紓鍌氬€烽悞锕傛晪闂佽绻愰顓㈠焵椤掍緡鍟忛柛锝庡櫍瀹曟垶绻濋崶銉㈠亾娴g硶鏋庨柟鐐綑娴犲ジ鎮楅崗澶婁壕婵犵數濮撮崯浼村Χ椤愨懇鏀介柣妯诲墯閸熷繘鏌涢悩鎰佹疁濠碉繝娼ч埥澶愬閻樼绱遍梻浣烘嚀婢х晫鍒掗鐐村亗闁告劦浜濋崰鎰節婵犲倻澧曠紒鈧崼鐔虹闁糕剝蓱鐏忣厾鐥幆褏绉洪柡灞剧☉閳规垿宕熼銏犘戠紓鍌欒閸嬫挸鈹戦悩鍙夊闁稿﹦鏁婚弻銊モ攽閸℃侗鈧鏌$€n剙鏋涢柡灞剧⊕閹棃鏁嶉崟鎳峰洦鐓涢悘鐐插⒔濞插鈧鍠楅幐铏繆閹间礁唯闁靛/鍛枦闂備浇宕甸崰鎰垝鎼淬垺娅犳俊銈呭暞閺嗘粍淇婇妶鍛櫤闁稿鍊块弻宥堫檨闁告挻鐟╅垾鏃堝礃椤斿槈褔鏌涢埄鍐炬畼闁荤喆鍔戝娲箰鎼淬垻鈹涙繝纰樷偓铏窛闁告帗甯″畷濂稿Ψ閿旇姤顏熼梻浣芥硶閸o箓骞忛敓锟�闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊閵娧呭骄闂佸壊鍋嗛崰鍡樼閸垻纾奸悗锝庡亽閸庛儲绻涢崗鑲╁ⅹ闁宠鍨块幃鈺佺暦閸ヨ埖娈归梻浣虹帛鐢紕绮婚弽顓炶摕闁绘棁娅g壕濂告煏韫囨洖校闁诲繐鐗嗛埞鎴﹀煡閸℃ぞ绨奸梺鎸庢磸閸ㄨ棄顕f繝姘櫜濠㈣泛顑呮禍婊呯磽娴e壊鍎愭い鎴炵懃铻為柛鈩冪懅绾捐偐绱撴担闈涚仼妤犵偞鍔欓弻娑氣偓锝庡亝瀹曞本鎱ㄦ繝鍕笡闁瑰嘲鎳橀幃鐑芥焽閿曗偓濞堟繄绱撻崒娆戭槮妞ゆ垵妫涢弫顕€骞掑Δ浣镐患濠电娀娼ч鍛不閻熸噴褰掓晲閸涱喗鍠愰梺鎸庣⊕閻╊垰顫忓ú顏勪紶闁告洦鍘滈悩缁樼厱闁哄倸娼¢崣鍕煏閸℃鍤囬柟顔界矒閹崇偤濡疯瀵娊姊绘担铏瑰笡婵炲弶鐗犲畷鎰板捶椤撴稑浜炬慨妯煎亾鐎氾拷:webmaster@jscj.com闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闁诲骸鍘滈崑鎾绘煕閺囥劌浜為柨娑欑洴濮婃椽鎮烽弶搴撴寖缂備緡鍣崹鍫曞箖閿熺姵鍋勯柟鑲╁仒缁ㄨ顪冮妶鍡楀Е闁稿瀚伴悰顔嘉熼懖鈺冿紲婵炶揪绲介幖顐﹀储閹绢喗鐓涚€光偓鐎n剛袦闂佽桨绀侀崐濠氬箲閸曨垰惟鐟滃繘宕㈤鐐粹拻濞达綀濮ら妴鍐磼閳ь剚鎷呴搹鍦厠閻熸粎澧楃敮鎺楀几娓氣偓閺岀喖宕滆鐢盯鏌¢崨顔藉€愰柡灞诲姂閹倝宕掑☉姗嗕紦4008816886

相关文章

无相关信息
更新时间2022-03-13 11:11:03【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柟闂寸绾惧潡鏌熺€电ǹ啸缂佲偓婵犲洦鐓冪憸婊堝礈濮樿泛桅闁告洦鍨伴崡鎶芥煕閳╁喚娈旀い蹇d邯閺屾稑鈻庤箛鏇狀啋闂佸搫鐭夌紞渚€鐛崶顒夋晪闁告侗鍠楅惁婊堟⒒娴e懙褰掝敄閸℃稑绠查柛銉墯閸嬫ɑ銇勯弴妤€浜鹃悗瑙勬礀缂嶅﹪銆佸▎鎾崇煑闁靛/鍕剁础濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩绾惧鏌熼崜褏甯涢柣鎾存礋閺屾洘寰勭€n亞浠撮梺鍏兼た閸ㄤ即鍩㈤幘娲绘晝闁靛繆鏅滅€靛矂姊洪棃娑氬婵☆偅鐟╄棢闁糕剝菧娴滄粓鏌¢崒姘殹闁告梻鍠栭弻鐔肩嵁閸喚浼堥梺杞扮劍閹瑰洭寮幘缁樻櫢闁跨噦鎷�

付款方式留言簿投诉中心网站纠错二维码手机版

客服电话: