a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 83|回复: 0

[考试辅导] Oracle技术:Oracle中最容易被忽视的两个重要进程

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
在Oracle数据库中有两个过程很是的细微,可是其浸染却长短常的重大年夜。因为其斗劲小而往往被数据库打点员所轻忽。笔者此次就给巨匠提醒提醒,不要轻忽了这两个过程的浸染。如不美不美观操作的好的话,会削减系统打点员不少的工作。一、系统据守过程SMON
+ ^# S* y/ w$ U4 ~  这个过程对于Oracle数据库来说,可以操作一句话来归纳综合,即人小鬼大年夜。其负责的内容并不是良多,可是对于数据的安然与数据库的机能却竽暌剐很关头的浸染。如跟着表空间中的数据不竭的成立、删除、更新等等,在表空间中难免会发生碎片。因为这些碎片的存在,数据库的机能会逐渐的降低。而此刻系统据守过程SMON的浸染,就可以解决这些碎片。SMON过程会将各个表空间的余暇碎片合并在一路,让数据库系统加倍等闲分配。大年夜而提高数据库的机能。此外,在数据库运行的过程中,会因为断电或者其他的原因而发生故障。此时因为数据高速缓存中的脏缓存块还没有来得及写入到数据文件中,大年夜而导致数据的丢失踪踪。在数据库启动的时辰,系统据守过程SMON会不才一次启动例程的时辰,自动篡夺重做日志文件并对数据库进行恢复。也就是说,进行将已提交的事物写入数据文件(已经写入到日志文件中而没有写入到数据文件中的数据)、回退未提交的事务操作。可见,SMON过程在Oracle数据库中是一个斗劲小可是却很是首要的脚色。6 Q5 ^) g' |7 q2 T  p3 |
9 V' y, t( L% a1 [) O. M. K$ Y! X
  在打点这个过程的时辰,笔者认为首要需要注重两个问题。一是其启动的机缘。一般气象下,例程大年夜头启动的时辰,会启动这个系统据守过程。然后在这个例程运行时代,这个过程也会被系统按期的叫醒,然后其会搜检是否有工作需要其完成。最首要的是,在有需要的时辰,数据库打点员可以经由过程其他过程来启动这个SMON系统系统据守过程,来完成一些特定的工作。% J# ?2 }8 X! s: \! h
  第二需要注重表空间设置装备放置对这个过程的影响。在表空间打点中,有一个参数叫做PCTINCREASE。如不美不美观将这个参数设置为0的话,则这个 SMON系统据守过程对于这个表空间的浸染就要打折扣了。在设置为0的气象下,SMON过程就不会对这个表空间中的余暇碎片进行清理、合并操作。也就是说,需要数据库打点员经由过程数据的导出导入等手工操作,才能够解决表空间的碎片问题。显然这会增添数据库打点员的工作量。为此笔者成立,除非有出格的需要,不要将这个参数设置为0。让SMON过程自动对表空间中的碎片进行打点,自动合并表空间中的余暇碎片。不外如不美不美观某个表空寄这个参数设置为0的话,不会影响到系统据守过程的其他用途,如不会影响到在例程非正常封锁时对数据的恢复操作。即即使这个参数设置为0 ,在有需要的时辰其仍然可以操作重做日志文件中的记实来恢复相关的数据。  \7 W( o  D8 T+ d
二、归档过程ARCH   三是在数据库初始化的过程中,可能需要导入大年夜量的数据。此时会对数据库中的数据进行大年夜量的插入、删除、更新等操作,大年夜而导致重做日志文件切换频仍。这就会导致数据库需要频仍启动ARCH归档过程。数据库大年夜量的更新操作、重做日志文件(LGWR过程)、归档重做日志文件(ARCH)过程之间就形成了一条无形的链条。因为“蝴蝶效应”,大年夜而降低了数据库的机能。为此在需要的时辰,需要砍断这跟链条,以提高数据库的机能。如可以在数据大年夜量导入、更新、删除的时辰,不往日志文件中插入记实,或者姑且增添重做日志文件的空间。如斯的话,在进行这些操壮杀就可以避免进行重做日志切换或者延迟重做日志切换的侍旧肃离。大年夜而ARCH归档日志过程也可以避免或者延迟那侍旧肃离,大年夜而提高数据库的机能。当数据库初始化完成之后,再将其恢复过来。这些姑且性的调整虽然斗劲麻烦,可是却可以提高数据库的机能。为此笔者认为这是值得的。# F4 E1 ], l6 w. f5 c. J3 O
  在重做日志文件打点中有归档与非归档两种模式。在日志进行切换时,如不美不美观不合错误原先的日志文件进行归档,而直接笼盖的话,就叫做非归档模式。相反,在写入下矣闽日志文件的时辰,会先对方针日志文件进行归档,这就叫做归档模式。归档过程ARCH就是负责在重做日志文件切换后将已经写满的重做日志文件复制到归档日志文件中,以防止轮回写入重做日志文件时将其笼盖。所以说,只罕有据库运行在归档模式时,这个ARCH过程才会被启动。在任何一中操作模式下,重做日志文件城市被轮回使用。所以当LGWR过程在进行日志切换,需要用到下矣闽日志文件时,则数据库会被且则的挂起,进行方针日志文件的归档工作。直到这个方针重做日志文件归档完毕后,数据库才会恢复正常。所以说,归档日志的操作,有时辰也会影响数据库的机能,出格是当需要进行频仍的多量量数据更改的时辰。
$ t9 z9 _6 s* }( K+ G: J  那么竽暌剐什么编制可以提高归档功课的效率呢?笔者如下一些建议可供数据库打点员参考。7 j# N- q4 m0 \8 S4 k9 d! i; J! ~" b
  一是可以增添归档过程的个数。在默认气象下,一个例程只会启动一个归档过程ARCH。当ARCH过程正在归档一个重做日志文件时,任何其他的过程都不能够访谒这个重做日志文件。如不美不美观在Oracle数据库中,可以按照需要启动多个归档过程ARCH。在Oracle数据库中,启动多个归档过程时分为手工与自动两个编制。为了提高重做日志文件归档的速度,当用户过程发生斗劲长时刻的等候时, LGWR过程会按照机缘气象来自动启动多个归档过程。在Oracle数据库中其最多可以启动十个归档过程。此外如不美不美观数据库打点员执政署数据库的时辰,估量日志归档功课会影响到数据库的机能,就可以手工来启动多个归档过程。这是经由过程初始化参数LOG_ARCHIVE_MAX_PROCESSES确定的。可以将这个参数设置为大年夜于1 的数值(注重不能够跨越9个归档过程)。如斯的话,数据库在建树例程的时辰就会启动多个归档过程。不外笔者仍是倾向于让数据库系统来自动打点这个过程。数据库打点员最好不要干与。此外需要注重,这个ARCH归档过程个数与DBWR过程个数的区别。默认气象下,DBWR过程也只有一个。为了提高数据库的机能,可以按照气象增添这个DBWR过程的个数。不外其增添时受到CPU数目的限制,即一个DBWR过程需要使用一个自力的CPU。如不美不美观想启动三个DBWR 过程的话,就必需采用3个CPU措置器。而对于ARCH归档过程来说,则没有这个限制。即使只有一个CPU措置器,其也可以启动三个甚至更多的ARCH过程。
% W5 Y4 \, ]& Z4 w' |/ W2 ?  二是增添重做日志文件来延迟归档日志过程启动的侍旧肃离。凡是气象下,只有当前一个重做日志文件写满、需要进行日志切换的时辰,才会触发这个 ARCH归档日志过程。所以如不美不美观重做文件斗劲大年夜,其日志切换的侍旧肃离就会延迟。则ARCH归档日志过程的启动侍旧肃离业会斗劲长。所以说,经由过程调整重做日志文件的巨细,可以延迟归档过程启动的侍旧肃离。大年夜而降低因为归档过程启动而对数据库机能造成的负面影响。0 ^" a8 ?" o* V* O' T0 P& j" I  \
  可见以上两个过程在Oracle数据库中其浸染虽然有限,可是却跟数据库的机能互相关注。在日常操作中,矫捷使用这个两个过程的特征,就可以提高某些操作的速度。
2 ~' U: s# X4 d</p>  /**体例1**/ with Tab as(select 1 as Col1,'a'  as Col2 from dual union all select 1,'b' from dual  union all select 1,'c' from dual union all select 2,'d' from dual union all select 2,'e' from dual union all select 3,'f' from dual)! _- [4 G* ^" t) Y* B5 n
  select Col1,wmsys.wm_concat(Col2 ) as Col2 from tab  group by Col1& w4 X# M+ Z; G6 p, s. c
  /**oracle9i可以用connect by**/0 X9 ?3 ]/ _5 C1 I9 @8 J8 k
  /**体例2**/ with Tab as(select 1 as Col1,'a'  as Col2 from dual union all select 1,'b' from dual  union all select 1,'c' from dual union all select 2,'d' from dual union all select 2,'e' from dual union all select 3,'f' from dual)
/ ?( ~/ W2 K  m! j* G  select Col1,substr(max(sys_connect_by_path(Col2,',')),2) Col2 from(select a.*,row_number()over(partition by Col1 order by Col1) rn from Tab a )' d  {) u6 H3 W+ J
  group by Col1 start with rn=1 connect by rn-1=prior rn and Col1=prior Col1 order by Col1;
; G" h  J9 X! J+ [. m! _1 B  /**——分拆9 i" y. c& N, ]) N2 R
  ——模拟数据Col1    Col2 1   a,b,c 2   d,e 3   f **/
4 O- r& C# K2 w' h2 x0 s. D  /**——生成结不美观8 k: A" d6 S4 Q0 U. F' ]
  COL1    COL2 1   a 1   b 1   c 2   d 2   e 3   f **/ /**体例1**/ with Tab as(select 1 as Col1,N'a,b,c' as Col2  from dual union all select 2,N'd,e' from dual union all select 3,N'f'   from dual )
; W0 M: _8 D! J6 n) p! Q. y  d" P" V1 K& K$ c
  SELECT Col1,substr(Col2,lev,instr(Col2||',',',',lev)-lev) as Col2 from Tab,(SELECT LEVEL lev FROM DUAL CONNECT BY LEVEL
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 22:59 , Processed in 0.217771 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表