??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲第一二三四区,亚洲成a∧人片在线观看无码,亚洲成在人天堂一区二区http://www.tkk7.com/faintbear/category/705.html风嗖嗖的刮着......zh-cnTue, 27 Feb 2007 12:32:10 GMTTue, 27 Feb 2007 12:32:10 GMT60ORACLE : invalid specification for system parameterhttp://www.tkk7.com/faintbear/archive/2005/04/26/3811.html力力力力力力Tue, 26 Apr 2005 02:33:00 GMThttp://www.tkk7.com/faintbear/archive/2005/04/26/3811.htmlhttp://www.tkk7.com/faintbear/comments/3811.htmlhttp://www.tkk7.com/faintbear/archive/2005/04/26/3811.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/3811.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/3811.html注释掉initXX.ora里面的mts所有参?启动okay

 一、简?BR>
  MTSQMulti-Threaded ServerQ是ORACLE SERVER的一个可选的配置选择Q是相对DEDICATE方式而言Q它最大的优点是在以不用增加物理资源(内存Q的前提下支持更多的q发的连接。换句话_如果你只?G的物理内存,而你又想支持2000个连接,在获取最好性能的前提下Q你应该选择MTS了?BR>
  本文先说一说MTS的工作方式,然后与DEDICATE方式的做一下比较,接下来说一下MTS具体配置实现Q最后说一些优化MTS配置选项的问题?BR>
  二、MTS的工作方?BR>
  1、Joseph C.Johnson以餐馆给Z个MTS的Ş象的比喻

  假设ORACLE是一安馆,当你走进一安馆时你感觉最舒服的服务方式就是有一个专门的waiter来ؓ你服务,而不餐馆中来了多少人,她只对你h应答Q这是DEDICTE的处理方式,也就是说每一个ORACLE客户端的q接都有一个专门的服务q程来ؓ它服务。而大部的馆的服方式都不是一对一的,当你走进的时侯,你就被指定了一个waiterQ她也可能ؓ其它桌服着务,q对于餐馆来说是最有利的,因ؓ他们可以服务更多的客不需要增加他们的员工。这样对你来说也可能是不错的Q如果餐馆不是太忙,Ҏ(gu)务的客h的请求都很简短且Ҏ(gu)完成Q你的感觉也好像自己拥有一个专门的waiterQwaiter把你的ORDER转给厨师Q然后把做好的菜拿给你,q就是MTS的处理方式,q些׃n的waiters我们叫她们ؓDispatchersQ厨师我们则叫他们ؓShared Server Processes?BR>
  2、以图说一下MTS的工作方?SYBEX书中的一q图)

20040301_Oracle.jpg


 1)客户端向Dispatcher发一个服务请?BR>
  2)Dispatch把这个请求放到SGA区的h寚w列中

  3)׃个或几个服务q程来处理这个请?BR>
  4)服务q程把进行的l果攑ֈDispatch的SGA区的的响应队列中

  5)Dispatcher从响应队列拾L(fng)?BR>
  6)完成客户端的hq把l果回送给客户?BR>
  三、MTS与DEDICATE方式斚w做一下比较,为方便比较绘制如下的?BR>

序号

比较?/SPAN>

MTS方式

DEDICATE方式

1

服务q程

多个q接׃n一个服务进E?/SPAN>

一个连接有一个专门的服务q程

2

每个客户端的q接使用的内存量

3-4M

150-200K

3

适合的应用环?/SPAN>

适合q接数很多且h很短的OLTP环境

如果Oracle服务器的资源够用Q这U方式是优?/SPAN>

4

CPU负蝲

会造成一?/SPAN>CPU的负载,如果你的CPU有瓶颈,则不要用q种方式

 

 



 



力力力 2005-04-26 10:33 发表评论
]]>
oracle 函数速查手册 http://www.tkk7.com/faintbear/archive/2005/04/21/3562.html力力力力力力Thu, 21 Apr 2005 01:20:00 GMThttp://www.tkk7.com/faintbear/archive/2005/04/21/3562.htmlhttp://www.tkk7.com/faintbear/comments/3562.htmlhttp://www.tkk7.com/faintbear/archive/2005/04/21/3562.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/3562.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/3562.htmlfunction StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}  
Oracle函数列表速查
2004-10-20 22:53:13

 

PL/SQL单行函数和组函数详解
 函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏了一pd函数Q这些函数都可被UCؓSQL或PL/SQL语句Q函C要分Z大类Q?


   单行函数


   l函?


  本文讨论如何利用单行函C及用规则?/FONT>


  SQL中的单行函数


  SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX{单行函数?BR>SELECT ename,TO_CHAR(hiredate,''day,DD-Mon-YYYY'')FROM empWhere UPPER(ename) Like ''AL%''ORDER BY SOUNDEX(ename)


  单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中?/FONT>


  NULL和单行函?/FONT>


  在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ他能直接处理NULL|NVL有两个参敎ͼNVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则q回x1?/FONT>


  下面我们看看emp数据表它包含了薪水、奖金两,需要计ȝ补偿
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2


  不是单的薪水和奖金加v来就可以了,如果某一行是null值那么结果就是nullQ比如下面的例子Q?BR>update empset salary=(salary+bonus)*1.1


  q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃得出错误的结论,q个时候就要用nvl函数来排除null值的影响?BR>所以正的语句是:
update empset salary=(salary+nvl(bonus,0)*1.1
单行字符串函?/FONT>


  单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串


  ASCII()
  c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()
SELECT ASCII(''A'') BIG_A,ASCII(''z'') BIG_z FROM empBIG_A BIG_z65 122


  CHR(QiQ?[NCHAR_CS]
  i是一个数字,函数q回十进制表C的字符
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B


  CONCAT(,)
  c1,c2均ؓ字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓnullQ则q回null。他和操作符||q回的结果相?BR>select concat(''slobo '',''Svoboda'') username from dualusernameslobo Syoboda


  INITCAP()
  c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?BR>select INITCAP(''veni,vedi,vici'') Ceasar from dualCeasarVeni,Vedi,Vici


  INSTR(,[,QiQ[,]])
  c1,c2均ؓ字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ1.
select INSTR(''Mississippi'',''i'',3,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)11select INSTR(''Mississippi'',''i'',-2,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)2


  INSTRB(,[,i[,j])
  与INSTRQ)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()


  LENGTH()
  c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?BR>select LENGTH(''Ipso Facto'') ergo from dualergo10


  LENGTHb()
  与LENGTH()一Pq回字节.


  lower()
  q回c的小写字W,l常出现在where子串?BR>select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE ''%white%''COLORNAMEWinterwhite


  LPAD(,QiQ[,])
  c1,c2均ؓ字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空|参见RPAD?BR>select LPAD(answer,7,'''') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe


  LTRIM(,)
  把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃会改变?BR>select LTRIM(''Mississippi'',''Mis'') from dualLTRppi


  RPAD(,QiQ[,])
  在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空?其他与LPAD怼


  RTRIM(,)
  把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃会改变?/FONT>


  REPLACE(,[,])
  c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?BR>select REPLACE(''uptown'',''up'',''down'') from dualREPLACEdowntown


  STBSTR(,QiQ[,])
  c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓj的子字符Ԍ如果j为空Q则直到串的N?BR>select SUBSTR(''Message'',1,4) from dualSUBSMess


  SUBSTRB(,QiQ[,])
  与SUBSTR大致相同Q只是I,J是以字节计算?/FONT>


  SOUNDEX()
  q回与c1发音怼的词
select SOUNDEX(''dawes'') Dawes SOUNDEX(''daws'') Daws, SOUNDEX(''dawson'') from dualDawes Daws DawsonD200 D200 D250


  TRANSLATE(,,)
  c1中与c2相同的字W以c3代替
select TRANSLATE(''fumble'',''uf'',''ar'') test from dualTEXTramble


  TRIM([[]] from c3)
  c3串中的第一个,最后一个,或者都删除?BR>select TRIM('' space padded '') trim from dual TRIMspace padded


  UPPER()
  q回c1的大写,常出现where子串?BR>select name from dual where UPPER(name) LIKE ''KI%''NAMEKING
单行数字函数


  单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?/FONT>


  ABS()
  q回n的绝对?/FONT>


  ACOS()
  反余玄函敎ͼq回-1?之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0


  ASIN()
  反正玄函敎ͼq回-1?Qn表示弧度


  ATAN()
  反正切函敎ͼq回n的反正切|n表示弧度?/FONT>


  CEIL()
  q回大于或等于n的最整数?/FONT>


  COS()
  q回n的余玄|n为弧?/FONT>


  COSH()
  q回n的双曲余玄|n 为数字?BR>select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847


  EXP()
  q回e的nơ幂Qe=2.71828183.


  FLOOR()
  q回于{于N的最大整数?/FONT>


  LN()
  q回N的自然对敎ͼN必须大于0


  LOG(,)
  q回以n1为底n2的对?/FONT>


  MOD()
  q回n1除以n2的余敎ͼ


  POWER(,)
  q回n1的n2ơ方


  ROUND(,)
  q回舍入数点右边n2位的n1的|n2的缺省gؓ0Q这回将数Ҏ(gu)接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?BR>select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54


  SIGN()
  如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.


  SINQ?
  q回n的正玄?n为弧度?/FONT>


  SINH()
  q回n的双曲正玄?n为弧度?/FONT>


  SQRT()
  q回n的^Ҏ(gu),n为弧?/FONT>


  TANQ?
  q回n的正切?n为弧?/FONT>


  TANH()
  q回n的双曲正切?n为弧?/FONT>


  TRUNC(,)
  q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时会将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/FONT>




单行日期函数


  单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/FONT>


  ADD_MONTHS(,QiQ?
  q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会截去数点后面的部分?/FONT>


  LAST_DAY()
  函数q回包含日期d的月份的最后一?


  MONTHS_BETWEEN(,)
  q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则会返回的l果包含一个分数?/FONT>


  NEW_TIME(,,)
  d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/FONT>


  NEXT_DAY(,)
  q回日期d后由dowl出的条件的W一天,dow使用当前会话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?BR>select NEXT_DAY(''01-Jan-2000'',''Monday'') "1st Monday",NEXT_DAY(''01-Nov-2004'',''Tuesday'')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004


  ROUND([,])
  日期d按照fmt指定的格式舍入,fmt为字W串?/FONT>


  SYADATE
  函数没有参数Q返回当前日期和旉?/FONT>


  TRUNC([,])
  q回由fmt指定的单位的日期d.
单行转换函数


  单行转换函数用于操作多数据类型,在数据类型之间进行{换?/FONT>


  CHARTORWID()
  c 使一个字W串Q函数将c转换为RWID数据cd?BR>SELECT test_id from test_case where rowid=CHARTORWID(''AAAA0SAACAAAALiAAA'')


  CONVERT(,[,])
  c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓdset字符集,sset的缺省设|ؓ数据库的字符集?/FONT>


  HEXTORAW()
  x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/FONT>


  RAWTOHEX()
  x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ16q制的数据类型?/FONT>


  ROWIDTOCHAR()
  函数ROWID数据cd转换为CHAR数据cd?/FONT>


  TO_CHAR([[,)
  x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及货币W号?BR>NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"


  TO_DATE([,[,Q?BR>  c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/FONT>


  TO_MULTI_BYTE()
  c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/FONT>


  TO_NUMBER([,[,)
  c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/FONT>


  TO_SINGLE_BYTE()
  字W串c中得多字节字W{化成{h(hun)的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/FONT>


  其它单行函数


  BFILENAME(
,)
  dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/FONT>


  DECODE(,,[,,,[])
  x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/FONT>


  DUMP(,[,[,[,]]])
  x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/FONT>


  EMPTY_BLOB()
  该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/FONT>


  EMPTY_CLOB()
  该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/FONT>


  GREATEST()
  exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/FONT>


  LEAST()
  exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/FONT>


  UID
  该函数没有参敎ͼq回唯一标示当前数据库用L(fng)整数?/FONT>


  USER
  q回当前用户的用户名


  USERENV()
  Zoptq回包含当前会话信息。opt的可选gؓQ?/FONT>


  ISDBA    会话中SYSDBA脚色响应Q返回TRUE
  SESSIONID  q回审计会话标示W?BR>  ENTRYID   q回可用的审计项标示W?
  INSTANCE  在会话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?BR>  LANGUAGE  q回语言、地域、数据库讄的字W集?BR>  LANG    q回语言名称的ISO~写?BR>  TERMINAL  为当前会话用的l端或计机q回操作pȝ的标C符?/FONT>


  VSIZE()
  x是一个表辑ּ。返回x内部表示的字节数?BR>SQL中的l函?/FONT>


  l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.


  l(多行Q函?/FONT>


  与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/FONT>


  AVG([{DISYINCT|ALL}])
  q回数值的q_倹{缺省设|ؓALL.
SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413


  COUNT({*|DISTINCT|ALL} )
  q回查询中行的数目,~省讄是ALL,*表示q回所有的行?/FONT>


  MAX([{DISTINCT|ALL}])
  q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/FONT>


  MIN([{DISTINCT|ALL}])
  q回选择列表目的最倹{?/FONT>


  STDDEV([{DISTINCT|ALL}])
  q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/FONT>


  SUM([{DISTINCT|ALL}])
  q回选择列表目的数值的d?/FONT>


  VARIANCE([{DISTINCT|ALL}])
  q回选择列表目的统计方差?/FONT>


  用GROUP BYl数据分l?/FONT>


  正如题目暗示的那L(fng)函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ一cR?BR>select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982


  在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?BR>select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982


  用HAVING子句限制分组数据


  现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' AND SUM(sale_amount)>10000 GROUP BY sales_clerk


  q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ(gu)是用HAVING语句Q?BR>SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;


  嵌套函数


  函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?/FONT>


  嵌套函数可以包括在组函数中嵌套单行函敎ͼ或者组函数嵌套入单行函数或l函C。比如下面的例子Q?BR>SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2




力力力 2005-04-21 09:20 发表评论
]]>
快?删除 字典理 表空??http://www.tkk7.com/faintbear/archive/2005/04/11/3126.html力力力力力力Mon, 11 Apr 2005 05:27:00 GMThttp://www.tkk7.com/faintbear/archive/2005/04/11/3126.htmlhttp://www.tkk7.com/faintbear/comments/3126.htmlhttp://www.tkk7.com/faintbear/archive/2005/04/11/3126.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/3126.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/3126.html

我的试环境:Hp rp7410LQHp-unix11.11 OS,Oracle8.1.7.4的数据库,一个有90张表大约100G的测试表I间TBS_TEST.

问题的提?/STRONG>QOracle中在使用drop tablespace <tablespace_name> including contents;删除数据字典理的表I间时存在着很大的效率问题?/P>

试开?

1、用drop tablespace <tablespace_name> including contents;方式直接来删?

SQL>set linesize 132
SQL>set pagezie 0
SQL>set timing on
SQL>drop tablespace TBS_TEST including contents
  2 /

已用旉:  03: 35: 39.10

l过我耐心的等待,׃三个半小时?nbsp;

2、测一下同L(fng)表空_把它转换为Local方式理的删除效率?/STRONG>

a、把TBS_TEST通过恢复回来?/P>

b、把TBS_TEST转化为Local理的方式?/P>

SQL>set timing on
SQL> exec sys.dbms_space_admin.tablespace_migrate_to_local('TBS_TEST') ;

已用旉:  00: 06: 33.25

c、删个空间?/P>

SQL> drop tablespace TBS_TEST including contents
  2 /
 
已用旉:  00: 00: 45.56

可以看到d才花费了7分多钟?/P>

3、测一下同L(fng)表空_先删除其中的对象Q然后再删这个表I间的效率如何?/STRONG>

a、把TBS_TEST通过恢复回来?/P>

b、Ş成删除表的语?/P>

SQL>set linesize 132
SQL>set pagezie 0
SQL>set timing off
SQL>spool drop_test_tables.sql
SQL>SELECT 'Drop table '||TABLE_name||';' FROM dba_tables WHERE tablespace_name='TBS_TEST';
SQL>spool off

c、删除表
SQL>@drop_test_tables.sql

q一步大U花?0U?/P>

d、删个空间?/P>

SQL>set timing on
SQL> drop tablespace TBS_TEST including contents;

已用旉:  00: 07: 35.53
 
可以看到d才花费了近8分钟?/P>


ȝQ我们在做数据字典管理的表空间的删除Ӟ最好先删除表空间中的对象再q行删除该表I间操作。也可以先把它{换ؓ本地(local)理的空间再q行删除。不q需要补充的是本地管理的I间?i以后的版本中才是有的?BR>
作者BlogQ?/STRONG>http://blog.csdn.net/hrb_qiuyb/



力力力 2005-04-11 13:27 发表评论
]]>
exp/imp导出导入工具的?(?http://www.tkk7.com/faintbear/archive/2005/04/07/2946.html力力力力力力Thu, 07 Apr 2005 08:17:00 GMThttp://www.tkk7.com/faintbear/archive/2005/04/07/2946.htmlhttp://www.tkk7.com/faintbear/comments/2946.htmlhttp://www.tkk7.com/faintbear/archive/2005/04/07/2946.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/2946.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/2946.html 2004-02 余枫 一. 导出工具 exp 1. 它是操作pȝ下一个可执行的文?存放目录/ORACLE_HOME/bin exp导出工具数据库中数据备份压~成一个二q制pȝ文g.可以在不同OS间迁U? 它有三种模式Q? a. 用户模式Q?导出用户所有对象以及对象中的数据; b. 表模式: 导出用户所有表或者指定的表; c. 整个数据库: 导出数据库中所有对象? 2. 导出工具exp交互式命令行方式的用的例子 $exp test/test123@appdb Enter array fetch buffer size: 4096 > 回R Export file: expdat.dmp > m.dmp 生成导出的文件名 (1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3 Export table data (yes/no): yes > 回R Compress extents (yes/no): yes > 回R Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set About to export specified tables via Conventional Path ... Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要导出的表名 . . exporting table CMAMENU 4336 rows exported Table(T) or Partition(T:P) to be exported: (RETURN to quit) >要导出的表名n Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 回R Export terminated successfully without warnings. 3. 导出工具exp非交互式命o行方式的例子 $exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y 说明:把scott用户里两个表emp,dept导出到文?directory/scott.dmp $exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\<1600\" file=/directory/scott2.dmp 说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600 (但我个h很少q样?q是把满x件的记录生成临时表后,再exp会方便一? $exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log 参数文gusername.par内容 userid=username/userpassword buffer=8192000 compress=n grants=y 说明:username.par为导出工具exp用的参数文g,里面具体参数可以Ҏ(gu)需要去修改 filesize指定生成的二q制备䆾文g的最大字节数 (可用来解x些OS?G物理文g的限制及加快压羃速度和方便刻历史数据光盘{? ?导入工具 imp 1. 它是操作pȝ下一个可执行的文?存放目录/ORACLE_HOME/bin imp导入工具EXP形成的二q制pȝ文g导入到数据库? 它有三种模式Q? a. 用户模式Q?导出用户所有对象以及对象中的数据; b. 表模式: 导出用户所有表或者指定的表; c. 整个数据库: 导出数据库中所有对象? 只有拥有IMP_FULL_DATABASE和DBA权限的用h能做整个数据库导? imp步骤Q? (1) create table (2) insert data (3) create index (4) create triggers,constraints 2.导入工具imp交互式命令行方式的例? $ imp Import: Release 8.1.6.0.0 - Production on 星期?12?7 17:01:08 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. 用户? test 口o:**** q接? Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit Production With the Partitioning option JServer Release 8.1.6.0.0 - Production 导入文g: expdat.dmp> /tmp/m.dmp 输入插入~冲区大(最ؓ 8192 ) 30720> l由常规路径导出由EXPORT:V08.01.06创徏的文? 警告: 此对象由 TEST 导出, 而不是当前用? 已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导? 只列出导入文件的内容(yes/no)Qno> ׃对象已存? 忽略创徏错误(yes/no)Qno> yes 导入权限(yes/no)Qyes> 导入表数?yes/no)Qyes> 导入整个导出文g(yes/no)Qno> yes . 正在TEST的对象导入到 SCOTT . . 正在导入? "CMAMENU" 4336行被导入 成功l止导入Q但出现警告? 3.导入工具imp非交互式命o行方式的例子 $ imp system/manager fromuser=jones tables=(accts) $ imp system/manager fromuser=scott tables=(emp,dept) $ imp system/manager fromuser=scott touser=joe tables=emp $ imp scott/tiger file = expdat.dmp full=y $ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log $ imp system/manager parfile=params.dat params.dat 内容 file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp) 4.导入工具imp可能出现的问? (1) 数据库对象已l存? 一般情? 导入数据前应该彻底删除目标数据下的表, 序列, 函数/q程,触发器等; 数据库对象已l存? 按缺省的imp参数, 则会导入p| 如果用了参数ignore=y, 会把exp文g内的数据内容导入 如果表有唯一关键字的U束条g, 不合条g不被导? 如果表没有唯一关键字的U束条g, 引赯录重? (2) 数据库对象有d键约? 不符合主外键U束? 数据会导入失? 解决办法: 先导入主? 再导入依存表 disable目标导入对象的主外键U束, 导入数据? 再enable它们 (3) 权限不够 如果要把A用户的数据导入B用户? A用户需要有imp_full_database权限 (4) 导入大表( 大于80M ) ? 存储分配p| 默认的EXP? compress = Y, 也就是把所有的数据压羃在一个数据块? 导入? 如果不存在连l一个大数据? 则会导入p|. 导出80M以上的大表时, 记得compress= N, 则不会引赯U错? (5) imp和exp使用的字W集不同 如果字符集不? 导入会失? 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息. 导入完成后再改回? (6) imp和exp版本不能往上兼? imp可以成功导入低版本exp生成的文? 不能导入高版本exp生成的文? Ҏ(gu)情况我们可以? $ imp username/password@connect_string 说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora 定义的本地或者远端数据库的名U? 注意事项: UNIX: /etc/hosts 要定义本地或者远端数据库服务器的L? win98: windows\hosts 和IP地址的对应关p? win2000: winnt\system32\drivers\etc\hosts




uand me.jpg

力力力 2005-04-07 16:17 发表评论
]]>
Oracle DECODE & CASE Functionshttp://www.tkk7.com/faintbear/archive/2005/03/30/2624.html力力力力力力Wed, 30 Mar 2005 13:03:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/30/2624.htmlhttp://www.tkk7.com/faintbear/comments/2624.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/30/2624.html#Feedback1http://www.tkk7.com/faintbear/comments/commentRss/2624.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/2624.htmlhttp://www.psoug.org/reference/decode_case.html

Oracle DECODE & CASE Functions

Version 10.1

Note: Decode and Case are very similar in their appearance but can produce very different results.
Demo Tables & Data
 
Decode Built-in Function
Simple DECODE SELECT DECODE (value, <if this value>, <return this value>)
FROM dual;
SELECT program_id, 
  DECODE
(customer_id, 'AAL', 'American Airlines') AIRLINE,
  delivered_date
FROM airplanes
WHERE ROWNUM < 11;
More Complex DECODE SELECT DECODE (value,<if this value>,<return this value>,
                     <if this value>,<return this value>,
                     ....)
FROM dual;
SELECT program_id,
       DECODE(customer_id, 
              'AAL', 'American Airlines'
,
              'ILC', 'Intl. Leasing Corp.',
              'NWO', 'Northwest Orient',
              'SAL', 'Southwest Airlines',
              'SWA', 'Sweptwing Airlines',
              'USAF', 'U.S. Air Force') AIRLINE,
       delivered_date
FROM airplanes
WHERE ROWNUM < 11;
DEOCODE with DEFAULT SELECT DECODE (value,<if this value>,<return this value>,
                     <if this value>,<return this value>,
                     ....
                     <otherwise this value>)
FROM dual;
SELECT program_id,
       DECODE(customer_id,
             'AAL', 'American Airlines',
             'ILC', 'Intl. Leasing Corp.',
             'NWO', 'Northwest Orient',
             'SAL', 'Southwest Airlines',
             'SWA', 'Sweptwing Airlines',
             'USAF', 'United States Airforce',
             'Not Known') AIRLINE,
       delivered_date
FROM airplanes
WHERE ROWNUM < 11;
Simple DECODE Crosstab

Note how each decode only looks at a single possible value and turns it into a new column
SELECT program_id,
       DECODE(customer_id, 'AAL', 'AAL') AMERICAN,
       DECODE(customer_id, 'DAL', 'DAL') DELTA,
       DECODE(customer_id, 'NWO', 'NWO') NORTHWEST,
       DECODE(customer_id, 'ILC', 'ILC') INTL_LEASING
FROM airplanes
WHERE rownum < 20;
DECODE as an in-line view with crosstab summation The above DECODE, in blue, used as an in-line view
SELECT program_id,
       COUNT (AMERICAN) AAL,
       COUNT (DELTA) DAL,
       COUNT (NORTHWEST) NWO,
       COUNT(INTL_LEASING) ILC
FROM (
   SELECT program_id,
          DECODE(customer_id, 'AAL', 'AAL') AMERICAN,
          DECODE(customer_id, 'DAL', 'DAL') DELTA,
          DECODE(customer_id, 'NWO', 'NWO') NORTHWEST,
          DECODE(customer_id, 'ILC', 'ILC') INTL_LEASING
   FROM airplanes)
GROUP BY program_id;
Query for DECODE demo CREATE TABLE stores (
store_name      VARCHAR2(20),
region_dir      NUMBER(5),
region_mgr      NUMBER(5),
store_mgr1      NUMBER(5),
store_mgr2      NUMBER(5),
asst_storemgr1  NUMBER(5),
asst_storemgr2  NUMBER(5),
asst_storemgr3  NUMBER(5))
TABLESPACE data_sml;

INSERT INTO stores 
VALUES ('San Francisco',100,200,301,302,401,0,403);

INSERT INTO stores
VALUES ('Oakland',100,200,301,0,404,0,0);

INSERT INTO stores
VALUES ('Palo Alto',100,200,0,305,0,405,406);

INSERT INTO stores
VALUES ('Santa Clara',100,250,0,306,0,0,407);
COMMIT;

SELECT DECODE(asst_storemgr1, 0,
       
DECODE(asst_storemgr2, 0,
        
DECODE(asst_storemgr3, 0, 0, asst_storemgr3),
        asst_storemgr2), asst_storemgr1)
ASST_MANAGER,
        DECODE(store_mgr1,0, DECODE(store_mgr2,0, 0, store_mgr2)
,
       store_mgr1)
STORE_MANAGER,
       REGION_MGR,
       REGION_DIR
FROM stores;
DECODE with Summary Function SELECT SUM(CA_COUNT) CA, SUM(TX_COUNT) TX
FROM (
   SELECT state,
   DECODE(state, 'CA', COUNT(*), 0) CA_COUNT,
   DECODE(state, 'TX', COUNT(*), 0) TX_COUNT
   FROM locations
   GROUP BY state);
DECODE in the WHERE Clause

set serveroutput on

DECLARE

posn  PLS_INTEGER := 0;
empid PLS_INTEGER := 178;
x     NUMBER;

BEGIN
  SELECT NVL(SUM(ah.quantity * ah.saleprice * ap.payoutpct), 0)
  INTO x
  FROM accessoryhistory ah, payoutpercentage ap, 
  sku s, store st
  WHERE empid = DECODE(posn, 
    0, st.areadir,
    1, st.areamgr,
    2, NVL(st.storemgr1, st.storemgr2),
    3, NVL(st.asstmgr1, NVL(st.asstmgr2,
    st.asstmgr3)))
  AND ah.statustype IN ('ACT', 'DEA')
  AND ah.store = st.store
  AND s.dbid = ah.dbid
  AND s.sku = ah.sku
  AND ap.productgroup = s.productgroup
  AND ap.position = posn;

  dbms_output.put_line(x);
END;
/

 
Case Built-in Function
Simple CASE Demo SELECT CASE WHEN (<column_value> = <value>) THEN
            WHEN (<column_value> = <value>) THEN
            ELSE <value>
FROM <table_name>;
SELECT line_number,
   CASE WHEN (line_number = 1) THEN 'One'
        WHEN (line_number = 2) THEN 'Two'
        ELSE 'More Than Two'
   END
AS RESULTSET
FROM airplanes;
More Complex CASE Demo With Between SELECT CASE WHEN (<column_value> BETWEEN <value> 
             AND <value>) THEN
            WHEN (<column_value>
            BETWEEN <value> AND <value>) THEN
            ELSE <value>
FROM <table_name>;
SELECT line_number,
   CASE WHEN (line_number BETWEEN 1 AND 10) THEN 'One'
        WHEN (line_number BETWEEN 11 AND 100) THEN 'Big'
   ELSE 'Bigger'
   END
FROM airplanes;
More Complex CASE Demo With Booleans SELECT CASE WHEN (<column_value> <= <value>) THEN
            WHEN (<
column_value> <= <value>) THEN
            ELSE <value>
FROM <table_name>;
SELECT line_number,
   CASE WHEN (line_number < 10) THEN 'Ones'
        WHEN (line_number < 100) THEN 'Tens'
        WHEN (line_number < 1000) THEN 'Hundreds'
   ELSE 'Thousands'
   END RESULT_SET
FROM airplanes;
The above demo turned into a view CREATE OR REPLACE VIEW line_number_view AS
SELECT line_number,
   CASE WHEN (line_number < 10) THEN 'Ones'
        WHEN (line_number < 100) THEN 'Tens'
        WHEN (line_number < 1000) THEN 'Hundreds'
   ELSE 'Thousands'
   END RESULT_SET
FROM airplanes;
 
CASE - DECODE Comparison
The same functionality written using both functions SELECT parameter, DECODE(SIGN(parameter-1000),-1,'C','P') AS BAND
FROM parameter_table;

SELECT parameter,
       CASE WHEN parameter < 1000 THEN 'C' ELSE 'P' END AS BAND
FROM parameter_table;


力力力 2005-03-30 21:03 发表评论
]]>
oracle decode 应用 http://www.tkk7.com/faintbear/archive/2005/03/30/2623.html力力力力力力Wed, 30 Mar 2005 12:59:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/30/2623.htmlhttp://www.tkk7.com/faintbear/comments/2623.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/30/2623.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/2623.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/2623.html
select yw_seq,sum(bill),sum(louisa),sum(lynn),sum(wang),com_no  from (select com_no,yw_seq,decode(person,'0001',(agree)) as lynn,decode(person,'0011',(agree)) as bill,decode(person,'0054',(agree))as wang,decode(person,'0005',(agree)) as louisa from ywht_shenpi group by yw_seq,person,agree,com_no) group by yw_seq,com_no

版权声明QCSDN是本Blog托管服务提供商。如本文牉|版权问题QCSDN不承担相兌任,L(fng)权拥有者直接与文章作者联p解冟?/B>


评论

faintbear 发表?2004-12-02 11:35 AM   
set serveroutput on;

declare

l_count integer;

begin

for e in (select emp_no,emp_name from cus_emp_basic) loop

select count(*) into l_count from cus_emp_basic

where e.emp_no = emp_no and emp_no = '00006006';

if l_count != 0 then

dbms_output.put_line(e.emp_name);

end if;

end loop;

end;


faintbear 发表?2004-12-02 11:39 AM   
关于in exists 的区?

select emp_name from cus_emp_basic e
where exists (select 0 from cus_emp_basic where e.emp_no=emp_no and emp_no='00006006');


faintbear 发表?2004-12-02 11:54 AM   
select * from (select rownum r,b.* from cus_emp_basic b where rownum<=3) t where t.r>=1

faintbear 发表?2004-12-02 11:55 AM   
select * from (select rownum r,b.* from cus_emp_basic b where rownum<=3) t where t.r>=1


力力力 2005-03-30 20:59 发表评论
]]>
Java数据库编E中的几个常用技??http://www.tkk7.com/faintbear/archive/2005/03/23/2351.html力力力力力力Wed, 23 Mar 2005 01:38:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/23/2351.htmlhttp://www.tkk7.com/faintbear/comments/2351.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/23/2351.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/2351.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/2351.html 

1、java数据库操作基本流E?

  2、几个常用的重要技巧:

  可滚动、更新的记录?

  扚w更新

  事务处理

  java数据库操作基本流E:取得数据库连?- 执行sql语句 - 处理执行l果 - 释放数据库连?

  1、取得数据库q接

  1Q用DriverManager取数据库q接

  例子Q?

String className,url,uid,pwd;
className = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;
uid = "system";
pwd = "manager";
Class.forName(className);
Connection cn = DriverManager.getConnection(url,uid,pwd);

  2Q用jndi(java的命名和目录服务)方式

  例子

String jndi = "jdbc/db";
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup(jndi);
Connection cn = ds.getConnection();

  多用于jsp?

  2、执行sql语句

  1Q用Statement来执行sql语句

String sql;
Statement sm = cn.createStatement();
sm.executeQuery(sql); // 执行数据查询语句QselectQ?
sm.executeUpdate(sql); // 执行数据更新语句Qdelete、update、insert、drop{)statement.close();

  2Q用PreparedStatement来执行sql语句

String sql;
sql = "insert into user (id,name) values (?,?)";
PreparedStatement ps = cn.prepareStatement(sql);
ps.setInt(1,xxx);
ps.setString(2,xxx);
...
ResultSet rs = ps.executeQuery(); // 查询
int c = ps.executeUpdate(); // 更新

  3、处理执行结?

  查询语句Q返回记录集ResultSet?

  更新语句Q返回数字,表示该更新媄响的记录数?

  ResultSet的方法:

  1、next()Q将游标往后移动一行,如果成功q回trueQ否则返回false?

  2、getInt("id")或getSting("name")Q返回当前游标下某个字段的倹{?

  3、释放连接?

cn.close();

  一般,先关闭ResultSetQ然后关闭StatementQ或者PreparedStatementQ;最后关闭Connection

  可滚动、更新的记录?

  1、创建可滚动、更新的Statement

Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);

  该Statement取得的ResultSet是可滚动的

  2、创建PreparedStatement时指定参?

PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet.absolute(9000);

  扚w更新

  1、Statement

Statement sm = cn.createStatement();
sm.addBatch(sql1);
sm.addBatch(sql2);
...
sm.executeBatch()

  一个Statement对象Q可以执行多个sql语句以后Q批量更新。这多个语句可以是delete、update、insert{或兼有

  2、PreparedStatement

PreparedStatement ps = cn.preparedStatement(sql);
{
 ps.setXXX(1,xxx);
 ...
 ps.addBatch();
}
ps.executeBatch();

  一个PreparedStatementQ可以把一个sql语句Q变换参数多ơ执行,一ơ更新?

  事务的处?

  1、关闭Connection的自动提?

cn.setAutoCommit(false);

  2、执行一pdsql语句

  要点Q执行每一个新的sql语句前,上一ơ执行sql语句的StatementQ或者PreparedStatemetQ必dclose

Statement sm ;
sm = cn.createStatement(insert into user...);
sm.executeUpdate();
sm.close();

sm = cn.createStatement("insert into corp...);
sm.executeUpdate();
sm.close();

  3、提?

cn.commit();

  4、如果发生异常,那么回滚

cn.rollback();
 



力力力 2005-03-23 09:38 发表评论
]]>如何修改默认的XDB监听端口http://www.tkk7.com/faintbear/archive/2005/03/22/2339.html力力力力力力Tue, 22 Mar 2005 12:00:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/22/2339.htmlhttp://www.tkk7.com/faintbear/comments/2339.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/22/2339.html#Feedback1http://www.tkk7.com/faintbear/comments/commentRss/2339.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/2339.html我的?sh)脑之前装有oracle9i,今天安装tomcat成功后,试http://localhost:8080出现 让输入XDB登陆的用户名和密码。一查原来是q个原因Q特记录下来Q备用。。?BR>
Oracle9i默认的XML DB把HTTP的默认端口设?080Q这是一个太常用的端口了Q很多别的WebServer都会使用q个端口Q?BR>如果我们安装了它Q最好修改一下,避免冲突Q如果不使用呢,最好不要安?BR>提供三种修改的方?BR>1.dbcaQ选择你的数据库,然后Standard Database Features->Customize->Oracle XML DB optionQ进入这个画面你应该q道怎么改了?
2.OEM consoleQ在XML Database 的配|里面修?
3.用oracle提供的包Q?
-- 把HTTP/WEBDAV端口?080改到8081
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081))
/
-- 把FTP端口?100改到2111
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111))
/
SQL> commit;
SQL> exec dbms_xdb.cfg_refresh;
-- 查修Ҏ(gu)否已l成?
SQL> select dbms_xdb.cfg_get from dual;



力力力 2005-03-22 20:00 发表评论
]]>
Oracle常用的一些功能集??http://www.tkk7.com/faintbear/archive/2005/03/22/2317.html力力力力力力Tue, 22 Mar 2005 04:57:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/22/2317.htmlhttp://www.tkk7.com/faintbear/comments/2317.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/22/2317.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/2317.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/2317.html数值函敎ͼ
abs(m)  m的绝对?BR>mod(m,n) m被n除后的余?BR>power(m,n) m的nơ方
round(m[,n]) m四舍五入臛_数点后n位的|n~省?Q?BR>trunc(m[,n]) m截断n位小C的|n~省?Q?/FONT>

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

字符函数Q?BR>initcap(st) q回st每个单词的首字母大写,所有其他字母小?BR>lower(st) q回st每个单词的字母全部写
upper(st) q回st每个单词的字母全部大写
concat(st1,st2)  q回st为st2接st1的末(可用操作W?||"Q?BR>lpad(st1,n[,st2]) q回叛_齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省ؓI格
rpad(st1,n[,st2]) q回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省ؓI格
ltrim(st[,set])  q回st,stZ左边删除set中字W直到第一个不是set中的字符。缺省时Q指的是I格
rtrim(st[,set])  q回st,stZ双删除set中字W直到第一个不是set中的字符。缺省时Q指的是I格
replace(st,search_st[,replace_st]) 每ơ在st中出现的search_st用replace_st替换Q返回一个st。缺省时Q删除search_st
substr(st,m[,n]) n=q回st串的子串Q从m位置开始,取n个字W长。缺省时Q一直返回到st末端
length(st) 数|q回st中的字符?BR>instr(st1,st2[,m[,n]])  数|q回st1从第m字符开始,st2Wnơ出现的位置Qm及n的缺省gؓ1
例:
1.
select initcap('THOMAS'),initcap('thomas') from test;
initca initca
------ ------
Thomas Thomas
2.
select concat('abc','def') "first" from test;
first
-----
abcdef
3.
select 'abc'||' '||'def' "first" from test;
first
-----
abc def
4.
select lpad(name,10),rpad(name,5,'*') from test;
lpad(name,10) rpad(name,5,'*')
------------ ----------------
         mmx mmx**
      abcdef abcde
5.
L地址字段末端的点及单词st和rd
select rtrim(address,'. st rd') from test
6.
select name,replace(name,'a','*') from test;
name  replace(name,'a','*')
----  ---------------------
great gre*t
7.
select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test;
a         b
-------   -------
bald bear bearisol
8.
select name,instr(name,' ') a,instr(name,' ',1,2) b from test;
name    a        b
------- -------- ---------
li lei  3        0
l i l   2        4

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

转换函数Q?BR>nvl(m,n) 如果mgؓnull,q回n,否则q回m
to_char(m[,fmt]) m从一个数D{换ؓ指定格式的字W串fmt~省Ӟfmt值的宽度正好能容Ux有的有效数字
to_number(st[,fmt]) st从字W型数据转换成按指定格式的数|~省时数值格式串的大正好ؓ整个?BR>附:
to_char()函数的格式:
---------------------------------
W号    说明
---------------------------------
9       每个9代表l果中的一位数?BR>0       代表要显C的先导0
$       元W号打印在数的左?BR>L       L的当地货币符?BR>.       打印十进制的数?BR>,       打印代表千分位的逗号
---------------------------------
例:
1.
select to_number('123.45')+to_number('234.56') form test;
to_number('123.45')+to_number('234.56')
----------------------------------------
                               358.01
2.
select to_char(987654321) from test;
to_char(987654321)
------------------
987654321
3.
select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(9874321,'$9,999,999') c from test;
a       b          c
------- ---------- -----------
$123    $54,321    $9,874,321
4.
select to_char(1234.1234,'999,999.999') a,to_char(0.4567,'999,999.999') b,to_char(1.1,'999,999.999') from test;
a         b          c
--------- ---------- ------------
1,234.123 .457       1.100

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

分组函数Q?BR>avg([distinct/all] n) 列n的^均?BR>count([all] *)  q回查询范围内的行数包括重复值和I?BR>count([distinct/all] n) 非空值的行数
max([distinct/all] n) 该列或表辑ּ的最大?BR>min([distinct/all] n) 该列或表辑ּ的最?BR>stdev([distinct/all] n) 该列或表辑ּ的标准偏差,忽略I?BR>sum([distinct/all] n) 该列或表辑ּ的d
variance([distinct/all] n) 该列或表辑ּ的方差,忽略I?/FONT>

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

日期函数Q?BR>add_months(d,n)  日期d加n个月
last_day(d)  包含d的月份的最后一天的日期
month_between(d,e) 日期d与e之间的月份数Qe先于d
new_time(d,a,b)  a时区的日期和旉d在b时区的日期和旉
next_day(d,day)  比日期d晚,由day指定的周几的日期
sysdate  当前的系l日期和旉
greatest(d1,d2,...dn) l出的日期列表中最后的日期
least(d1,k2,...dn) l出的日期列表中最早的日期
to_char(d [,fmt]) 日期d按fmt指定的格式{变成字符?BR>to_date(st [,fmt]) 字符串st按fmt指定的格式{成日期|若fmt忽略Qst要用~省格式
round(d [,fmt])  日期d按fmt指定格式舍入到最q的日期
trunc(d [,fmt])  日期d按fmt指定格式截断到最q的日期
附:
日期格式Q?BR>Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-
格式代码     说明   举例或可取值的范围
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-
DD            该月某一?nbsp; 1Q?
DY    三个大写字母表示的周?nbsp;SUNQ?..SAT
DAY    完整的周几,大写英文 SUNDAYQ?..SATURDAY
MM       月䆾   1Q?2
MON      三个大写字母表示的月?nbsp;JANQ?..DEC
MONTH         完整   JANUARY,...DECEMBER
RM       月䆾的罗马数?nbsp; I,...XII
YY或YYYY      两位Q四位数字年
HH:MI:SS   Ӟ分:U?BR>HH12或HH24  ?2时?4时昄
MI      ?BR>SS      U?BR>AM或PM    上下午指C符
SP      后缀SP要求拼写ZQ何数值字D?BR>TH      后缀TH表示d的数字是序数 4th,1st
FM            前缀Ҏ(gu)或日或年|止填充
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?BR>例:
1.
下一个周五的日期
select next_day(sysdate,6) from test;
2.
两个月前的今天的日期
select add_months(sysdate,-2) from test;



力力力 2005-03-22 12:57 发表评论
]]>
ORACLE公司之v?/title><link>http://www.tkk7.com/faintbear/archive/2005/03/10/1916.html</link><dc:creator>力力力</dc:creator><author>力力力</author><pubDate>Thu, 10 Mar 2005 08:10:00 GMT</pubDate><guid>http://www.tkk7.com/faintbear/archive/2005/03/10/1916.html</guid><wfw:comment>http://www.tkk7.com/faintbear/comments/1916.html</wfw:comment><comments>http://www.tkk7.com/faintbear/archive/2005/03/10/1916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faintbear/comments/commentRss/1916.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faintbear/services/trackbacks/1916.html</trackback:ping><description><![CDATA[<H2><FONT size=2></FONT> </H2><BR><FONT size=2>很难惌QORACLE公司的这一D传奇居然要?ACRONYM title="International Business Machines">IBM</ACRONYM>开始?<BR><BR>1970q的6月,<ACRONYM title="International Business Machines">IBM</ACRONYM>公司的研I员埃d加¯特 QEdgar Frank CoddQ??Communications of ACM 上发表了那篇著名的《大型共享数据库数据的关pL型》(A Relational Model of Data for Large Shared Data BanksQ的论文。这是数据库发展史上的一个{折。要知道Q当时还是层ơ模型和|状模型的数据库产品在市Z占主要位|。从q篇论文开始,拉开了关pd数据库Y仉命的序幕?<BR><BR>虽然早在1970q就诞生了关pL型理论,但是市场上迟q不见关pd数据库管理Y件的推出。主要原因是很多反对者认为关pd数据库速度太慢Q比不上当时的层ơ式数据库。值得好笑的是Q?ACRONYM title="International Business Machines">IBM</ACRONYM>虽然1973q就启动了System R的项目来研究关系型数据库的实际可行性,也没有及时推L(fng)产品Q因为当?ACRONYM title="International Business Machines">IBM</ACRONYM>的的IMSQ著名的层次型数据库Q市Z错,如果推出关系型数据库Q牵涉到<ACRONYM title="International Business Machines">IBM</ACRONYM>很多人的自n利益。再者,<ACRONYM title="International Business Machines">IBM</ACRONYM>庞大复杂的官僚机构处在决{上q不那么灉|?<BR><BR>1977q?月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名Y件开发实验室QSoftware Development LaboratoriesQSDLQ的计算机公司(ORACLE公司的前w)。那个时候,32岁的Larry EllisonQ这个读了三家大学都没能毕业的辍学生Q还只是一个普通的软g工程师。公司创立之初,Miner是总裁QOates为副总裁Q而EllisonQ因Z个合同的事情Q还在另一家公怸班。没多久Q第一位员工Bruce ScottQ用qORACLE数据库Y件的人都知道有个Scott用户的吧Q没错,是q个ScottQ至于Scott用户的密码TigerQ那是Scottȝ猫的名字Q加盟进来,在Miner和Oates有些厌倦了那种合同式的开发工作后Q他们决定开发通用软gQ不q们q不知道自己能开发出来什么样的品。Oates最先看C埃d加¯特的那著名的论文q同其他几篇相关的文章ƈ推荐Ellison和Miner也阅M下。Ellison和Miner预见到数据库软g的巨大潜力(跟着<ACRONYM title="International Business Machines">IBM</ACRONYM>赎ͼ没错Q,于是QSDL开始策划构建可商用的关pd数据库管理系l(<ACRONYM title="Relational Database Mangement System">RDBMS</ACRONYM>Q?<BR></FONT> <P align=center><FONT size=2><IMG alt="Oracle Company Gang of four" src="http://www.dbanotes.net/Images/Oracle_Gang_of_4.jpg"> <BR>? 左v Ed Oates、Bruce Scott、Bob Miner、Larry Ellison</FONT></P><BR><FONT size=2>很快他们弄出来一个不太像L(fng)产品Q或者具体的_更像一个Demo。根据Ellison和Miner他们在前一家公总事的一个由中央情报局投资的项目代?他们把这个品命名ؓORACLE。因Z们相信,ORACLEQ字兔R的解释有“神? 预言”之意)是一切智慧的源泉?979q_SDL更名为关pY件有限公司(Relational SoftwareQInc.Q?ACRONYM title="Relational SoftwareQInc.">RSI</ACRONYM>Q,毕竟“Y件开发实验室”不太像一个大公司的名字?983q_ZH出公司的核心品,<ACRONYM title="Relational SoftwareQInc.">RSI</ACRONYM>再次更名为ORACLE?<BR><BR></FONT> <P align=center><FONT size=2><IMG height=415 alt="Oracle Company" src="http://www.dbanotes.net/Images/Oracle_Company.jpg" width=553> <BR>? 国 Oracle 公司总部一?/FONT></P><BR><FONT size=2> <HR> <BR></FONT> <H2><FONT size=2>发展与壮?/FONT></H2><BR><FONT size=2>RSI?979q的夏季发布了可用于<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司?ACRONYM title="Progammable Data Processor">PDP</ACRONYM>-11计算Z的商用ORACLE产品Q这个数据库产品整合了比较完整的<ACRONYM title="Structured Query Language">SQL</ACRONYM>实现Q其中包括子查询、连接及其他Ҏ(gu)。但不得不说QY件不是很E_Qƈ~少事务处理q样的重要功能。出于市场策略,公司宣称q是该品的W二版,但却是实际上的第一版。之所以被命名为第2版而不是第1版,是因为Ellison认ؓ潜在的客h愿意购买W?个版本,而不是初始版本。(虽然q样做有些不太诚实,q是要承认这是个十分高明的技巧。到现在q有一些公司把自己卖给客户的版本叫?.0 Q学?979q的ORACLE吧!Q多q以后的今天QORACLE公司声称是他们第一个提供了W一?ACRONYM title="Structured Query Language">SQL</ACRONYM>关系型数据库理pȝ?<BR><BR>虽然软g不是很好Q但是客戯是有的。美国中央情报局q不及待的想C套这L(fng)软g来满他们的需求。但在咨询了<ACRONYM title="International Business Machines">IBM</ACRONYM>公司之后发现<ACRONYM title="International Business Machines">IBM</ACRONYM>没有可以商用的品,他们联系?ACRONYM title="Relational SoftwareQInc.">RSI</ACRONYM>。于?ACRONYM title="Relational SoftwareQInc.">RSI</ACRONYM>有了W一个客戗在当时Q政府和军方的机构往往同时有几U计机Q而那时还没有什么“Y件可UL”这L(fng)说法Q当Ӟ也几乎没有具有这L(fng)能力的应用Y件。也是_l?ACRONYM title="Progammable Data Processor">PDP</ACRONYM>-11开发的ORACLE数据库不能用?ACRONYM title="International Business Machines">IBM</ACRONYM>L?ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>?ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上。很快用户就表现出来q样的需求:ORACLE能否同时在不同的操作pȝ上运行?q给<ACRONYM title="Relational SoftwareQInc.">RSI</ACRONYM>带来了新的挑战(主要是Miner和ScottQ?0q代末期?0q代早期的Y件一般都设计成在单一操作pȝ上运行,h可移植能力的软g很少?<BR><BR>1983q?月,<ACRONYM title="Relational SoftwareQInc.">RSI</ACRONYM>发布了ORACLEW三版。Miner和Scott历尽艰辛用C语言重新写就q一版本。要知道QC语言当时推出不久Q用它来写ORACLE软g也是h一定的风险的,但除此之外,别无他法。很快就证明了这样做是多么的正确:C~译器便宜而又有效Q还有很好的UL性。从现在PORACLE产品有了一个关键的Ҏ(gu):<STRONG>[可移植性]</STRONG>。ORACLEW?版还推出?ACRONYM title="Structured Query Language">SQL</ACRONYM>语句和事务处理的“原子性?-<ACRONYM title="Structured Query Language">SQL</ACRONYM>语句要么全部成功Q要么全部失败,事务处理要么全部提交Q要么全部回滚。ORACLEW?版还引入了非d查询Q用存储在<STRONG>"Before Image File"</STRONG>中的数据来查询和回滚事务Q从而避免了读锁定(read lockQ的使用Q虽焉过使用表锁定限制了它的吞吐量Q。同h1983q_<ACRONYM title="International Business Machines">IBM</ACRONYM>发布了姗姗来q的Database 2Q?ACRONYM title="Database 2">DB2</ACRONYM>Q,但只可在MVS上用。不怎么_ORACLE已经占取了先机?<BR><BR>在开发第三版q没有结束的时候,Scottd了ORACLE。当时用C语言改写ORACLE的压力很大,无休止的软g调试l于让Scott不堪重负Q选择了一C之。把剩下的重担交l了Miner一个h。在出售了自q%4的股之后,Scott 后来创徏了Gupta公司Q现更名为Centura SoftwareQ和PointBase公司Q提供百分之癄Java嵌入式数据库Q,都是开发和数据库相关的产品。多q后有h问到他的%4的ORACLE股票的时候,ScottQ这个曾l给ORACLE写出W一行代码的技术高手,也只能报以一W了。如果能坚持下来Q那是一W几亿美金的财富。不q当时的Scott没有那么多的xQ他只是太篏了?<BR><BR></FONT> <P align=center><BR><FONT size=2><IMG height=76 alt="Bruce Scott" src="http://www.dbanotes.net/Images/Scott.jpg" width=65> <BR>? Bruce Scott 现在是PointBase公司的创办者之一</FONT></P><BR><FONT size=2>ORACLE最先将其Y件移植到<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM> <ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>计算Z的VMS操作pȝ上。早?979q公司就已经雇了一?ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司的技术高手Robot Brandtq行<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上ORACLE的开发。开始的时候资金有限,只能到加州大学伯克利分校去蹭机器q行开发,后来好一些,但机器也是借来的。尽困N重,Brandtq是比较成功的完成了UL工作。随着<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>型机的大量销售乃至供不应求,ORACLE软g也成?ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上最受欢q的E序。这一点要归功于Larry对市场的先知先觉。如果说Q是<ACRONYM title="International Business Machines">IBM</ACRONYM>引领着ORACLE公司C数据库的大船Q那?ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司?ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>是带着他们扬帆出v了。短短的几年之后QORACLE数据库被UL到各U主要^C上。ORACLE产品也一直因为有可移植性这个关键特性而被那些潜在的客户关注?<BR><BR>Oatesq个时候因为婚姻趋于破裂而情l沮丧,已经不能把精力全部放到公怸Q不得不d公司。几q后Q他又重q公司,重新为ORACLE做出巨大的A(ch)献,他许下诺aQ在公司员工过1万h的时候会再度d?999q_他完成了心愿。现在他正在U|于音乐,自得其乐?<BR><BR>很长一D|间里Q公司研发由Miner独力承担。Miner视金钱如无物QؓZ调,和Ellison的锋芒必露Ş成鲜明的Ҏ(gu)。在公司里,大家一致认Z是老好人,他也深受员工爱戴。Ellison是公司的大脑QMiner则当之无愧的成ؓ公司的心脏。他是个沉默的英雄,正如Steve Jobs背后的Steve Wozniak一栗?<BR><BR>1984q?0月,ORACLE发布了第4版品。品的E_性ȝ得到了得C一定的增强Q用Miner的话_辑ֈ了“工业强度”。但是还不够令h满意Q用户对产品的抱怨似乎永无休止。这一版增加了<STRONG>M致性(Read ConsistencyQ?/STRONG>Q这是数据库的一个关键特性,可以保用户在查询期间看C致的数据。也是_当一个会话正在修Ҏ(gu)据时Q其他的会话看不到该会话未提交的修攏V可以看刎ͼ在ORACLEW四版之前,产品始终是不E_的,但是ORACLE的这销售h员,主要是EllisonQ他在宣传ORACLE的时候L要夸大其词,但他是有能力把软g卖出去,而且Q还卖得很好Q不得不承认Q这的确有些奇。让我们看看1984qY件市场的情ŞQ在数据库市Z的霸LAsnton-Tale公司Q他们的招_产品是刚推出不久的dBase IIIQ确切的说dBase是PC上的数据库Y仉主)Q刚刚成为全球第三大的独立Y件公司(W一和第二分别是微Y、LotusQORACLE在当时还排不上号Q,q一q_也是Ҏ(gu)公司Macintosh诞生的年度,Steven Jobs用这个拳头品挑战老大?ACRONYM title="International Business Machines">IBM</ACRONYM>。同样在q一q中QORACLE公司的开发h员刚刚把产品UL到PC上。这是最好的q代Q也是最坏的q代。数以千计的公司在软g领域里争斗不休,新公司如雨后春笋般成立,ORACLE如何才能于不败之圎ͼ <BR><BR>?985q_ORACLE发布?.0版。有用户_q个版本得上是ORACLE数据库的E_版本。这也是首批可以在Client/Server模式下运行的?ACRONYM title="Relational Database Mangement System">RDBMS</ACRONYM>产品Q在技术趋势上QORACLE数据库始l没有落后。这意味着q行在桌面PC机(客户机)上的商务应用E序能够通过|络讉K数据库服务器?986q发布的5.1版还支持<STRONG>分布式查?/STRONG>Q允讔R过一ơ性查询访问存储在多个位置的数据?<BR><BR>那是?985q_当时曄的最大的独立软g公司Cullinet(主要销售网状数据库)已经如流星般陨落。ORACLE的主要竞争对手是Ingres数据库。Ingres在加州大学伯克利分校诞生Q主要的设计者是当时鼎鼎大名的Michael Stonebraker教授。可以说Ingres数据库Y件是上个世纪80q代技术上最好的数据库,Ingres市场分额的快速增长已l给ORACLE早成了很大的压力。y的是Q这个时候,<ACRONYM title="International Business Machines">IBM</ACRONYM>公司再一ơ出“上帝之手”?<BR><BR>Ingres使用的是Stonebraker 发明?ACRONYM title="QUEry Language">QUEL</ACRONYM>QQuery LanguageQ)的查询技术,q和<ACRONYM title="International Business Machines">IBM</ACRONYM>?ACRONYM title="Structured Query Language">SQL</ACRONYM>大不相同。在某些地方<ACRONYM title="QUEry Language">QUEL</ACRONYM>甚至要优?ACRONYM title="Structured Query Language">SQL</ACRONYM>?ACRONYM title="International Business Machines">IBM</ACRONYM>当时担心Ingres?ACRONYM title="QUEry Language">QUEL</ACRONYM>变成标准会对自己不利。经q一番衡量,军_把自q<ACRONYM title="Structured Query Language">SQL</ACRONYM>提交l数据库标准委员会。而Stonebraker教授可不打算?ACRONYM title="QUEry Language">QUEL</ACRONYM>提交l数据库标准委员会,学院z他认麽做实际上是扼杀了创新精。m蚌相争,渔翁得利。ORACLE看到q抓住了q个l佳的机会,大肆宣布ORACLE全面?ACRONYM title="Structured Query Language">SQL</ACRONYM>兼容Q加上ORACLE当时对Ingres PC上的版本的攻击(弱化Ҏ(gu)优势Q化解自己弱势是他们最拿手的本领)Q再加上ORACLE公司销售上的强势,Ingres不断丢城失地Q等到后来推出支?ACRONYM title="Structured Query Language">SQL</ACRONYM>的数据库的时候ؓ时已晚。紧?ACRONYM title="International Business Machines">IBM</ACRONYM>让ORACLE得以成长、壮大,拥抱标准Q拥抱开放,拥抱变化Q让ORACLE立于不|之地?<BR><BR>1986q??2日,ORACLE公司以每?5元公开上市Q当日以20.75元收盘Q公司市?.7亿美元??3日,微Y以每?1元的发行h(hun)上市Q以28元收市Q公司市D?亿美元。远q超q了ORACLE。成功的光环的微软和盖茨遮盖住了ORACLE和Ellison的光芒,可能q也是Ellison敌视微Y的开始?</FONT> <P align=center><FONT size=2><IMG height=455 alt="Larry Ellison" src="http://www.dbanotes.net/Images/Larry_Ellison.jpg" width=351> <BR>? 桀骜不驯的Larry Ellison</FONT></P><BR> <H2><FONT size=2>l受挫折 </FONT></H2><BR><FONT size=2>ORACLEW?版于1988q发布。由于过ȝ版本在性能上屡受诟病,Miner带领着工程师对数据库核心进行了重新的改写。引入了<STRONG>行锁(row-level lockingQ?/STRONG>q个重要的特性,也就是说Q执行写入的事务处理只锁定受影响的行Q而不是整个表。这个版本引入了q算不上完善?ACRONYM title="Procedural Language extension to SQL">PL/SQL</ACRONYM>QProcedural Language extension to SQLQ语a。第6版还引入?STRONG>联机热备?/STRONG>功能Q数据库能够在使用q程中创机的备䆾Q这极大地增Z可用性。同时在q一q_ORACLE开始研?ACRONYM title="Enterprise Resource Planning">ERP</ACRONYM>软g?<BR><BR>公司发展看上L较顺利,不过Q噩梦才刚刚开始?<BR><BR>׃q去对Y件测试重视的E度不够--那个时候公司规模小Q基本上都是客户帮助免费试的。在W六版刚发布之后Q很多迫不及待开始用的用户怨声载道。这是个Ҏ(gu)没有测试好p行发布的产品Q也怪EllisonQ大话总要说在前头Q只好自苦果)。用户开始对ORACLE大肆抨击QORACLE的一些对手也开始落井下矻I针对ORACLE产品的一些弱点进行攻凅R开发h员一面应付愤怒的用户Q一面加班加点地对程序进行接q不断的修正Q最后,ȝ得到了一个比较稳定的版本Q暂时^息了用户的愤怒?<BR><BR>但是Q实际的问题q不在这里,几年来高速增长的同时也给公司带来了巨大的隐?zhn)Q?990财年W三季度报表的公布引爆了一切。胦务h员发C1500万美元的坏帐Qƈ且公司利润距预期相差甚q。接下来的时间里Q大公司病的诸般症状接踵而来Q面对股东的指控Q股一落千丈,公司前景暗EQ甚至面临破产。一度靠h来维持自q奢华生活也不变卖股票的Ellison也快撑不住了。公怸大力气整胦务(财务ȝ杰夫·沃克从某U程度上解救了公司)。公司宣布削减开支,裁退大量销售h员,同时聘用了专门的理人才?<BR><BR>噩梦延箋到ORACLEW七版的推出而结束。这个公司已l空谈了好几q的新版本(一度被讥讽Zq是Ellison的故计重施而已Q,直到1992q?月才l于闪亮dQ这一ơ公司吸取了W六版匆忙上市的教训Q听取了用户的多斚w的徏议,q中力量对新版本进行了大量而细致的试。该版本增加了许多新的性能Ҏ(gu):<STRONG>分布式事务处理功?/STRONG>、增强的理功能、用于应用程序开发的新工具以及安全性方法。ORACLE7q包含了一些新功能Q如存储q程、触发过E和说明性引用完整性等Qƈ使得数据库真正的h可编E能力。还有一点必需要说明的是,q个版本在原有的Z规则的优化器QRBOQ之外引入一U新的优化器Q?STRONG>Z开销的优化器</STRONG>QCost-Based Optimizer , <ACRONYM title="Cost-Based Optimizer">CBO</ACRONYM>Q?ACRONYM title="Cost-Based Optimizer">CBO</ACRONYM>Ҏ(gu)数据库自w对对象的统计来计算语句的执行开销Q从而得出具体的语句执行计划。在以后的几个重大版本中QORACLE的工E师们逐步对这个优化器q行改进Q?ACRONYM title="Cost-Based Optimizer">CBO</ACRONYM>逐渐取代了RBO?<BR><BR>ORACLE W七版是ORACLE真正的?取得了巨大的成功。这个版本的出现真是好时机,当时Sybase公司的数据库已经占据了不䆾额,ORACLE借助q一版本的成功,一具击退了咄咄gh的Sybase。公司的销售h员这ơ算Cl用户兑现空头许诺的时候。公司经q两三年的治理,l于摆脱了种U麻烦,重新开始健康发展,销售额也从92q的15亿美元变为四q后?2亿美元?<BR><BR></FONT> <H2><FONT size=2>跨上巅峰</FONT></H2><BR><FONT size=2>“搅水”是Ellison的一绝技。在1995q巴黎D行的Ƨ洲信息技术论坛会议上QEllison在即兴演讲中介绍了网l计机QNetwork ComputerQNCQ的概念,所谓NC指的是配|简单却能充分利用网l资源的低h(hun)?sh)脑Q最为重要的是,它不需要操作系l,或者更准确的说Q不需要微软的操作pȝ。Ellison希望借此来抵制微软的强势。很快,ORACLE联合<ACRONYM title="International Business Machines">IBM</ACRONYM>、Sun、Apple和Netscape?996q制定了|络计算机的标准Q但事实上h们从头到没有看C台真正的NC生出来。这ơ的演讲在业界引起了轩然大LQ通过q个事gQORACLE公司吸引了够多的注意力Q同时也让h们看到ORACLE公司对于|络的巨大信心?<BR><BR>1997q?月,ORACLEW八版发布。ORACLE8支持<STRONG>面向对象的开?/STRONG>及新的多媒体应用Q这个版本也为支持Internet、网l计等奠定了基。同时这一版本开始具有同时处理大量用户和量数据的特性。这个版本也可圈可点了?<BR><BR>1998q?月,ORACLE公司正式发布ORACLE 8i。“i”代表InternetQ这一版本中添加了大量为支持Internet而设计的Ҏ(gu)。这一版本为数据库用户提供了全方位的Java支持。ORACLE 8i成ؓW一个完全整合了本地Javaq行时环境的数据库,用Java可以编写ORACLE的存储过E。对QJavaQ只要是能够打击微Y的武器,ORACLE都要z上用场。ORACLE8i d了SQLJQ一U开攑ּ标准Q用于将<ACRONYM title="Structured Query Language">SQL</ACRONYM>数据库语句嵌入客h或服务器Java代码Q和ORACLE interMediaQ用于管理多媒体内容Q以?ACRONYM title="Extensible Markup Language">XML</ACRONYM>{特性。同ӞORACLE 8i 极大E度上提高了伸羃性、扩展性和可用性以满|络应用需要。接下来的几q中QORACLE陆箋发布?i的几个版本,q渐d了一些面向网l应用的新特性。面对开源运动的蓬勃发展QORACLE自然不甘落后Q?998q十月ORACLE发布了可用于Linuxq_的ORACLE 8 以及ORACLE Application Server 4.0Q随后不久,ORACLE又发布了ORACLE 8i for Linux。在 .com大潮中,ORACLE是站在风口浪的弄潮ѝ?<BR><BR>?001q?月的ORACLE OpenWorld大会中,ORACLE发布了ORACLE 9i。在ORACLE 9i的诸多新Ҏ(gu)中Q最重要的就是Real Application ClustersQ?ACRONYM title="Real Application Clusters">RAC</ACRONYM>Q了。说起ORACLE集群服务器,早在W五版的时候,ORACLE开始开发ORACLEq行服务器(ORACLE Parallel Server QOPSQ,q在以后的版本中逐渐的完善了其功能,不过Q严格来_管OPS得上是个集环境,但是q没有体现出集群技术应有的优点。在完全吸收了RdbQORACLE?994q收购了Compaq公司的Rdb数据库,此前Rdb属于<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司Q?ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司?ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上实CW一个可以商用的Rdb集群数据库)的一些技术优势之后,ORACLEl于推出了真正的应用集群软g?ACRONYM title="Real Application Clusters">RAC</ACRONYM>使得多个集群计算够共享对某个单一数据库的讉KQ以获得更高的可伸羃性、可用性和l济性。ORACLE 9i?ACRONYM title="Real Application Clusters">RAC</ACRONYM>在TPC-C的基准测试中打破了数记录,一旉业内瞩目。这个新的数据库q包含集成的商务QBIQ功能。ORACLE 9iW?版还做出了很多重要的改进QORACLE数据库成Z个本地的<ACRONYM title="Extensible Markup Language">XML</ACRONYM>数据库;此外q包括自动管理?STRONG>Data Guard</STRONG>{高可用斚w的特性?<BR><BR></FONT> <H2><FONT size=2>历史q在l箋</FONT></H2><BR><FONT size=2>2003q??日,旧金׃D办的ORACLE World大会上,Ellison宣布下一代数据库产品为“ORACLE 10g”。ORACLE应用服务?0gQORACLE Application Server 10gQ也作为甲骨文公司下一代应用基架构软g集成套g。“g”代表“grid ,|格”。这一版的最大的Ҏ(gu)就是加入了|格计算的功能。何谓网D?|格计算可以把分布在世界各地的计机q接在一Pq且各地的计算源通过高速的互联|组成充分共享的资源集成。通过合理调度Q不同的计算环境被综合利用ƈ׃n。ORACLE宣称10g可以作ؓ|格计算的基Q矛头直指最大的敌h<ACRONYM title="International Business Machines">IBM</ACRONYM>的“随需应变”!看来QORACLE公司已经把这一ơ的“赌注”押在了|格计算的大市场上。但前景如何Q让我们拭目以待?<BR><BR>如果_<ACRONYM title="International Business Machines">IBM</ACRONYM>是IT产业中的一头巨鲸,那么ORACLE一定就是一条大鲨鱼Q咄咄ghQ善于进攅R就?003q?月初QORACLEH然宣布51亿美金收购仁U(PeopleSoftQ,业内再次震动。此丑֏一ơ露出ORACLE 一贯善于进ȝ本性。要知道QORACLE在发展过E中很少对企业进行收购的Q那么收购仁U目的何在?首先QORACLE觊觎企业应用软g市场已久Q但苦于不能q一步扩大市场分额,ؓ重要的是Q一旦成功,可以直接Ҏ(gu)大的敌h<ACRONYM title="International Business Machines">IBM</ACRONYM>q行打击Q还可以dSAP{巨头的强势。时至今日,ORACLE依然以不辄的不|休的态势和仁U缠斗,l果如何Q让我们拭目以待?<BR><BR>"人生最大的快乐是击败敌?QEllison一定很喜欢q句话?<BR><BR>后记Q?004q?2?3日,Oracle公司宣布{订了以每股26.50元、总计U?03亿美元的代h(hun)收购 仁科(PeopleSoft) 的最l协议。历时十八个月的争斗l于埃落定?<BR> <HR> <SCRIPT type=text/javascript><!-- google_ad_client = "pub-2198040673582211"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_channel ="0605826110"; google_ad_type = "text"; google_color_border = "336699"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--></SCRIPT> <SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT> <HR> </FONT> <H2><FONT size=2>本文作?/FONT></H2><FONT size=2>FenngQ某资公司DBAQ业余时间؜q于各数据库相关的技术论坛且乐此不疲。目前关注如何利用ORACLE数据库有效地构徏企业应用。对Oracle tuning、troubleshooting有一点研I?BR>个h技术站?</FONT><A ><FONT size=2>http://www.dbanotes.net/</FONT></A><FONT size=2> 。可以通过?sh)子邮g dbanotes@gmail.com 联系C?</FONT><img src ="http://www.tkk7.com/faintbear/aggbug/1916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faintbear/" target="_blank">力力力</a> 2005-03-10 16:10 <a href="http://www.tkk7.com/faintbear/archive/2005/03/10/1916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何搭徏Oracle 8高复制环境http://www.tkk7.com/faintbear/archive/2005/03/10/1912.html力力力力力力Thu, 10 Mar 2005 07:39:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/10/1912.htmlhttp://www.tkk7.com/faintbear/comments/1912.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/10/1912.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/1912.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/1912.htmlOracle高复制Q也UCؓ对称复制。和Oracle的其他功能不同,Oracle的高U复制不是即插即用的Q用户必Lȝ解它们是如何工作的以及各U复制方案的优缺炏V深ȝ解复制的基本概念可以帮助你设计一个可靠的复制环境Q有关高U复制的基本概念?/SPAN>参看此文Q?/SPAN>
本文主要介绍了搭?/SPAN>Oracle 8高复制环境旉要设|的一些系l参数。需要提醒读者注意的是,W者所l出的这些系l参数的具体配置数值只能保证可以成功的搭徏Z个相对较好的高复制环境Q但本文q未对这些参数的优化配置q行q一步的深入探讨?/SPAN>


现在我们正式开始。假设有两个节点Q节点名分别?/SPAN>ora_bj?/SPAN>ora_nb?/SPAN>


1.
pȝ环境参数Q?/SPAN>init.ora文gQ设|(对于非确省|

如果要搭?/SPAN>Oracle 8.0.x个高U复制环境,必须在初始化文g中设|下列参敎ͼ见表1所C?/SPAN>

?/SPAN>1Q?/SPAN>Oracle8高复制环境初始化参数设|?/SPAN>

参数名称

推荐?/FONT>

备注

processes

100

 

shared_pool_size

30000000

臛_30MQ如果有很多的复制对象的话,则需要更多的I间

large_pool_size

500K

 

db_block_buffers

550

 

compatible

8.0.5.0

 

db_file_multiblock_read_count

16

 

dml_locks

100

 

sequence_cache_entries

30

 

sequence_cache_hash_buckets

23

 

global_names

TRUE

 

distributed_lock_timeout

300

 

distributed_transactions

10

 

Open_links

6

复制节点多的话,需要增?/FONT>

Sort_area_size

1000000

 

db_name

ORA_BJ

或?SPAN lang=EN-US>ORA_NB

job_queue_processes

6

 

job_queue_interval

60

 

parallel_max_servers

10

只适用于ƈ行传?/FONT>

parallel_min_servers

2

只适用于ƈ行传?/FONT>

PEPLICATION_DEPENDENCY_TRACKING

true

如果采用q行传播Q必设|ؓTRUE


?/SPAN>1中各个参数的推荐D为目前的复制环境只有两个节点Q一个简单的高复制环境Q如果节点较多,且复制关pd杂,需要复制的表也很多Q则需要相应增大一些参数的|q可以通过修改不同的参数试验获得?/SPAN>

所有的SNAPSHOT_ 或者是JOB_QUEUE_KEEP_CONNECTIONS参数都删除,因ؓoracle8以后已经不支持这些参数?/SPAN>


2.Net8
参数文g

(1)sqlnet.ora文g讄

 

automatic_ipc=off
names.default_domain = world
name.default_zone = world
sqlnet.expire_time = 0
DISABLE_OOB = ON

 

(2)tnsnames.ora文g讄

 

ORA_BJ.world =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL= TCP)(Host= 80.24.16.201)(Port= 1521))
      (CONNECT_DATA = (SID = ORA8))
    )
ORA_NB.world =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL= TCP)(Host= 80.24.16.14 )(Port= 1521))
      (CONNECT_DATA = (SID = ORA8))
  )


上面Host为各个复制节点的IP地址Q如果复制节点很多,则全部加入到tnsnames.ora文g中,本例中有两个节点?/SPAN>

3.
表空?/SPAN>

如果搭徏Oracle 8高的高U复制环境,额外需要加大一些表I间Q表2是徏议的初始表空间?/SPAN>

?/SPAN>2Q?/SPAN>Oraclepȝ表空间大设|?/SPAN>

表空?/FONT>

初始?/FONT>

SYSTEM

臛_20M

ROLLBACK SEGMENTS

臛_20M

TEMPORARY

臛_10M

TOOLS

臛_20M


同时Q我q徏议回滚段的下一个区大小讄臛_?/SPAN>100K?/SPAN>

上面q些的设|是一U较?yu)复制环境下的空间设|。如果要复制的表很多Q每天的变化量很大,复制节点复杂Q则需要相应增大表I间的大?/SPAN>



力力力 2005-03-10 15:39 发表评论
]]>
Oracle 8高数据复制技?/title><link>http://www.tkk7.com/faintbear/archive/2005/03/10/1910.html</link><dc:creator>力力力</dc:creator><author>力力力</author><pubDate>Thu, 10 Mar 2005 07:36:00 GMT</pubDate><guid>http://www.tkk7.com/faintbear/archive/2005/03/10/1910.html</guid><wfw:comment>http://www.tkk7.com/faintbear/comments/1910.html</wfw:comment><comments>http://www.tkk7.com/faintbear/archive/2005/03/10/1910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faintbear/comments/commentRss/1910.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faintbear/services/trackbacks/1910.html</trackback:ping><description><![CDATA[<P><FONT size=2>本文首先单介l和数据库复制有关的基本概念Q然后探讨Oracle8数据复制技术中的几个重要模型,最后介lOracle8的数据复制管理器以及如何利用它来配置和维护复制环境?<BR><BR>  在文章的开_我想首先单谈一下复制的基本概念Q也是什么是复制Q复制简单地说就是在׃个或者多个数据库pȝ构成的一个分布式数据库环境中拯数据的过E。Oracle高复制Q也UCؓ对称复制Q第一ơ是在Oracle 7.1.6版本中出现的Q在q之前的Oracle版本中,Oracle数据复制Ҏ(gu)仅有只读快照形式的基本复制一U方法。随着Oracle版本的每一ơ升U,数据复制的功能、管理以及速度{方面都得到了很大的改进和完善。目前,׃对分布式数据环境需求的不断增长Q越来越多的应用提出了数据复制的需求?<BR><BR><STRONG>一、基本概?/STRONG> <BR>  1.分布式数据库技?<BR><BR>  分布式数据库技术是目前我们l常提及的分布式计算的一个重要组成部分,该技术允许数据在多个服务器端׃n。采用分布式数据库技术,一个本地服务器可以存取不同物理地点的远E服务器上的数据Q也可以使所有的服务器均可以持有数据的拷?复制Q这样分布式pȝ中的所有服务器均可q行本地存取?<BR><BR>  设计一个分布式计算解决Ҏ(gu)首先需要考虑的问题就是应用的完整性、复杂性、性能和可用性以及响应时间等Q同时还需要考虑的是对于不同的应用需求是采用实时存取q程数据q是采用延迟存取q程数据。这对于数据复制来讲是采取实时更新复制Ҏ(gu)q是延迟数据复制Ҏ(gu)?<BR><BR>  2.同步和异步的概念 <BR><BR>  同步分发数据库技术是一U实时远E存取和实时更新数据的技术。这U技术可以保证应用的完整性降低了应用的复杂性,但是如果pȝ存在|络存取速度很慢q样的问题,相应响应旉׃很慢?<BR><BR>  异步分发数据库技术是一Ugq远E存取和延迟传播Ҏ(gu)据更新的技术。这U技术具有很高的可用性和很短的响应时间。相比同步分发数据库技术就昑־复杂一些,Z保应用的完整性需要仔l考虑和设计?<BR><BR>  对于实际的商业问题,必须权衡q两U技术的利弊最l选择最佳的解决Ҏ(gu)Q有些问题选用同步技术比较适合Q也有一些问题采用异步技术是比较好的解决Ҏ(gu)Q还有一些问题必ȝ合这两种技术?<BR><BR>  3.复制的概?<BR><BR>  复制Q顾名思义是数据库中的数据拯C同物理地点的数据库中以支持分布式应用Q它是整个分布式计算解决Ҏ(gu)的一个重要组成部分。上面介l了同步和异步的概念Q这里针对复制也存在同步复制和异步复制的问题?<BR><BR>  同步复制Q复制数据在M旉在Q何复制节点均保持一致。如果复制环境中的Q何一个节点的复制数据发生了更新操作,q种变化会立d映到其他所有的复制节点。这U技术适用于那些对于实时性要求较高的商业应用中?<BR><BR>  异步复制Q所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,q种改变在不同的事务中被传播和应用到其他所有复制节炏V这些不同的事务间可以间隔几U,几分U,几小Ӟ也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最l将保证所有复制节炚w的数据一致?<BR><BR>  4.更新冲突 <BR><BR>  在异步复制环境中Q对于所有应用最关键的就是要保数据的一致性。我们来看下面这U情况会有什么后果发生呢Q在同一旉对同一个表的同一行数据的同一列在两个不同的地点作更新。这U情况就会发生称之ؓ更新冲突的错误。ؓ保证数据的一致性,更新冲突必须被检到q且处理以确保在不同地点的数据元素保持同L(fng)倹{更新冲H可以通过限制"所有权" 到单一节点或者将更新某个特定数据元素的权利限制到某一具体节点的方法来避免?<BR><BR><STRONG>二、Oracle 8数据复制应用模型(usage models)</STRONG> <BR>  为确保实际应用数据的一致性,必须在异步复制应用模型中考虑冲突避免或者冲H检和消除的方法。例如,对于一个实际商业应用,首先必须在逻辑上了解该商业应用采取的冲H避免方法和在某个节Ҏ(gu)那些数据以及q些数据中那些是可更新的Q而那些又是不可更新的。在下面的这一部分中,我们首先详l讨ZU常用的冲突避免Ҏ(gu)Q主站点所有权模型和动态所有权模型。然后,讨论׃n所有权模型以及q种模型引v的冲H检和处理问题Q最后,讨论针对Fail-over的复刉|,q种复制Ҏ(gu)同时考虑了冲H避免和冲突与消除两种情况?<BR><BR>  1.ȝҎ(gu)有权 <BR><BR>  ȝҎ(gu)有权Q异步复制数据被一个单一节点"所?Q这些要复制的数据仅能被该节Ҏ(gu)斎ͼ其他节点向拥有该数据的主节点订阅QsubscribeQ数据,q意味着他们在本地系l上只能够存取这些复制数据的只读拯。下面是一些这L(fng)例子?<BR><BR>  Q?Q决{支持系l(DSSQ的联机事务处理数据的卸载。来自一个或者多个OLTPpȝ的数据可以被卸蝲C个独立的局部DSS中,用于只读分析?<BR><BR>  Q?Q中央信息的分发。品信息,如h(hun)格列表等在总部节点上维护,然后这些信息复制到q程销售办事处的只M品目录系l中?<BR><BR>  Q?Q远E信息的集中。许多远E节点上的品目录数据复制到总部节点Q这里总部节点只需要有数据只读的权限?<BR><BR>  一个主节点拥有一个表的完全所有权Q而其他节点只能订阅这个表的只L贝。也可以是多个主节点拥有同一个表的截然不同子集或者划分,而另一些节点则订阅q些子集或者划分的只读拯。如Q一个分布的产品目录pȝ可以让不同的销售办事处拥有一个表的属于自q一?水^"部分Q如在客PCUSTOMERSQ表, 订单QORDERSQ表和目录(ITEMSQ这些表中含有每个销售办事处Z服务的客户和产品信息。中心总部节点可以通过订阅每个办事处拥有的数据来保持一个完整的所有品和客户信息的只L贝?<BR><BR>  2.动态所有权 <BR><BR>  动态所有权Q异步更新将复制数据从一个节点移到另一个节点,而在该过E中Q必M证在同一时刻只有一个特定的节点可以Ҏ(gu)据进行更新。一个典型实际应用就?关订单处理pȝ"Q订单处理的典型步骤是,报关→同意→装运→开单→收单→入帐等。应用模型可以执行其中的M步骤Q但必须保证各个不同模块的同一个数据应该在一个综合数据库中。在该系l中Q当且仅当订单的状态表明前一个步骤已l完成时Q下一个应用模块才可以执行更新订单数据的操作。例如,"装运"应用模块仅能?报关"q且得到"同意"后才能被执行?<BR><BR>  通过使用动态所有权复制模型Q可以将一个系l分布在多个节点和数据库上,也就是说应用模型可以建立在不同的pȝ上。我们还是来看上面的例子Q?报关"?批准"q两部分可以q行在一个系l上Q?装运"在另一个系l上Q?开??收单"{又可在一个系l上。在q个分布式系l中Q数据可以被复制C同的节点上,q些节点对复制的数据只要h只读的权限即可。如Q利用复Ӟ"报关"节点可以监视已经报关的订单处理过E?<BR><BR>  前面讨论的主节点所有权和动态所有权复制模型h一个共同的特征Q在M一个给定的旉点,只允怸个节Ҏ(gu)更新数据的权利,而其余节点对于复制的数据拯仅有只读权限。然而,q存在这L(fng)情况Q允许多个节点可以更新同一个数据,在极端情况下可以是在同一时刻Q这是所说的׃n所有权?<BR><BR>  3.׃n所有权 <BR><BR>  ׃n所有权使用异步复制Q这对于主节点和动态所有权模型来讲存在一些限制。在׃n所有权情况下,整个pȝ可以存在暂时的不一_同时必须使用冲突和消除。共享所有权模型相对于前面两U模型具有一些新的特炏V?<BR><BR>  例如Q对于前面我们讨论的那个采用h水^划分主节点复制方案来的分布式"订单处理pȝ"的例子。采用共享所有权模型Q每个销售办事处都有库表中不同的水^划分Q该库表含有每一个办事处Z服务的一些订单信息和与消费者有关的֮信息。每一个销售办事处只输入与自己有关的顾客订单情况,而不其余顾客信息?<BR><BR>  然而,在实际商业应用中Q这个模型不是最佳的选择。例如,q种情况Q一个零售集团在一个大城市中可以有好几个商场。顾客可能经常去M们住的最q的那个商场Q但是偶也可能到其他商场去购物。这Ӟ如果多家商场执行更新同一个顾客和其订单数据的信息Q更新冲H就会发生。所以在q种情况下必要采用冲突和消除Ҏ(gu)?<BR><BR>  Oracle8高复制支持同时既考虑冲突避免又考虑冲突和消除的复制模型。Oracle8高复制之所以又UCؓ对称复制Q其原因之一是支持对称复制模型Q也是可以在Q何地Ҏ(gu)斎ͼx有的复制节点都可以进行更新处理。ؓ了避免冲H,一U方法就是将应用设计为将更新限制在一些特定的节点。对于共享所有权QOracle 8提供了自动冲H检和消除Ҏ(gu)?<BR><BR>  4.备用数据库(Fail-Over Q?<BR><BR>  异步复制通过一个主pȝ数据复制到另一pȝQ可以v到对ȝl的崩溃提供保护的作用,q也是所说的fail-overpȝQ如果主pȝ出现问题Q业务依旧可以通过复制数据库进行?<BR><BR>  Oracle 8高复制支持q种fail-over配置。同ӞOracle也针对fail-over提供了另外两个可选的解决Ҏ(gu)QOracleq行服务器和备用数据库配|。用户可以根据吞吐量、可用性、事务损q可能性和其他一些如数据一致性、方法的局限性等参考指标来权衡选择合适的fail-overҎ(gu)?</FONT><BR><BR><BR><span id="vojeknb" class=content><FONT size=2><STRONG>三、Oracle 高复制配置</STRONG> <BR>  Oracle 8高复制卛_支持Z整个表的复制也可支持Z部分表的复制两种复制Ҏ(gu)。这两种复制Ҏ(gu)主要是通过Oracle的两U复制机制来完成的,卛_d制和可更新快照复Ӟ同时q可以将q两U复制机制结合v来以满不断变化的业务需求?<BR><BR>  1.多主复制 <BR><BR>  多主复制Ҏ(gu)支持全表在各个主节点间的对称复制Q允许所有主节点对主表都有更新操作的权利。Q何一个主节点上的复制表的更新都会被传播ƈ被直接应用到其他所有主表。一个主节点出现问题Q不会对其他主节点之间变化的传播造成影响?<BR><BR>  多主复制采用一U称?延迟q程q程调用Qdeferred remote procedure calls RPCs)"的机制作Z要的传播和应用变化的机制。各节点之间变化的传播,既可以以Z事g的方式立即传播,也可以在某个特定的时间点Q如在网l空闲时Q如晚上Q传播。在传播变化Ӟ如果其中的一个远端系l没有准备好Q传播变化的延迟q程q程调用QRPCsQ就会保存在其本地队列中Q等到系l准备好以后再执行?<BR><BR>  2.可更新快?<BR><BR>  Oracle 最早Oracle 7上的只读快照机制扩展ZU允许快照可更新的对U复制机制。快照更新的传播方式和如何应用到快照主节炚w用了和多d制一L(fng)延迟q程q程调用机制?<BR><BR>  对于快照的定义,既可以是包含一个主表的完全拯Q也可以是ؓ满Z值的选择标准的主表中行的子集。快照在主节点的h是按照一定的旉间隔或用户单独请求进行的。最后一ơ刷新后主表的Q何变化也同样被传播ƈ应用到快照。多个快照的h是在一个一致的事务中完成的Q这q保了数据和引用的完整性?<BR><BR>  3.混合配置 <BR><BR>  可以多d制和可更新快照复制结合在一P构成一U新的؜合配|,q种配置可以完成对全表或者子表的复制。例如下面这U应用就是一个典型的混合配置Ҏ(gu)Q一个系l具有两个位于不同地理区域的中心节点Q这两个不同的地理区域下面还有一些分支机构,两个中心节点可以彼此看做是自q备䆾节点。采用多d制方法在两个中心站点之间复制数据Q同旉用只L者可更新快照复制Ҏ(gu)在每个区域范围中的主节点之间复制全表或者子表。这U配|的一个显著好处就是当其中的一个中心节点发生问题时Q这些快照的主节点可以被重新定义到另一个运行良好的中心节点Q从而提高了pȝ的可靠性?<BR><BR>  4.其他复制机制 <BR><BR>  Oracle除了前面讨论的三U复制机制以外,q提供了另外两种复制机制Q过E复制和同步复制?<BR><BR>  Q?Q过E复制 <BR><BR>  q种复制Ҏ(gu)主要应用在存在大量数据更C及采取批处理方式操作数据旉要复制数据的情况。例如,下面q个应用Q一个以qؓ单位理客户订单的公司,对于老的订单数据不再需要在U保存,而需要卸载到某存储介质中。这Ӟ如果在多个节炚w复制每一独立的行U变化效率将是非怽的。对于这U情况,可以直接在每个复制节Ҏ(gu)行一个过E来直接q行q种更新操作。Oralce8高复制提供的分布式模式理功能Q将在下面详l讨论)可以非常方便地在多个节点上设|和l护q程U复制的q程q程?<BR><BR>  Q?Q同步复?<BR><BR>  一个采用同步复制方案的表发生变化时QOracle会确保这U变化能够成功地作用在本地表和其他节点的复制表,如果p|则整个事务会被成功回滚。同步复制在|络的稳定性比较高的情况下是可行的Q可以保证复制节点之间的复制数据一直保持同步?<BR><BR><STRONG>四、Oracle 8理工具</STRONG> <BR>  很显Ӟ有效的管理工具对于成功的分布式应用是非常关键的,如果没有能力L作它Q再专业的复制功能也不能发挥很好的作用。Oracle 8高复制提供了几个功能强大的理工具Q诸如复制目录,分布式模式管理以及其他的一些Oracle 复制理工具?<BR><BR>  1.复制目录 <BR><BR>  复制目录是一个包含定义复制环境原数据的一个单一l合库。复制目录本w也被复制到多个节点以确保高可用性和授权用户可以单地实现本地存取理?<BR><BR>  复制目录定义了被复制的数据库对象Q复制的节点以及用于复制的机制。数据库对象有需要复制的库表和其他一些相关的对象Q如索引Q视图,q程Q触发器和同义词{等。这些原数据是开攄Q用户可以通过标准SQL语句q行索和查询?<BR><BR>  2.分布式模式管?<BR><BR>  Oracle 8高复制的分布式模式理功能允许在一个控制点可q行复制环境的定义和改变。对复制环境的Q何改变,都将自动复制q且应用q些数据定义语言QDDLQ命令到其他复制环境节点Q同时也利用数据库触发器和复制相兌E自动生成复制所需要的一些支持对象?<BR><BR>  分布式模式管理在一个被UCؓd义节点的地方q行控制。它自动DDL推向其他所有主节点q且也允许快照节??回ƈ且执行这些DDL命o。由于主定义节点使用q且l护着整个复制目录Q该复制目录本n也被复制到其他节点,所以该d义节点一旦出现问题,必ȝ其他节点来代ѝ分布式模式理可以通过一个图形用L(fng)面管理工PGUIQ来配置?<BR><BR>  3.Oracle复制理?<BR><BR>  Oracle复制理器是Oracle提供的一个图形界面的复制理工具Q通过该工具可以配|,定时和通过一个节Ҏ(gu)理整个的复制环境。该理工具可以单独q行也可以在Oracle企业理器中通过一个applet来激zR?<BR><BR>  采用Oracle复制理器,用于复制的对象组可以通过一些鼠标操作非常简单地定义。复制组可以包含表和其他相关的对象,如触发器Q存储过E,索引Q视图,同义词以及序列等。Oracle除了可以复制每个复制l的全部拯以外Q还可以选择复制数据的子集。复制组的配|可以在M时候修改,q种变化自动应用到其他所有的复制节点?<BR><BR>  一旦定义了对象l,可以通过Oracle复制理器,单进行拖拉操作,可自动部v复制l到一个新的节炏V这些快照节Ҏ(gu)可以是只ȝ也可以是可更新的。复制节炚w|完成以后,用户可以配置定时以复制环境中的变化传播到其他节点,当然也可以选择采用同步复制?<BR><BR>  4.选择冲突解决Ҏ(gu) <BR><BR>  如果选择采用一U可以在M地方更新的复制方案,Oracle复制理器提供了几个内徏的冲H解x案,诸如"最q时间戳"?站点优先"{来解决潜在的冲H。对于不同的表可以选择不同的方法,甚至可以对一个表中的不同列选择不同的冲H消除方案。用户对于一些特D的商业需求也可以创徏自己的冲H解x案?<BR><BR>  5.实时理 <BR><BR>  通过Oracle的复制管理器Q复制环境中M地方发生的错误均可以非常快速和单地分离出来q且Ҏ(gu)。通过一个单一的节点,用户可以看到每个节点的延迟事务队列Q也可以重新定时或者强制立x行事务。另外,用户也可以利用Oracle企业理器的事g理功能来对复制环境q行监视Q该事g理器提供了对多个站炚w的复制状态的d监视功能Q另外还提供了可以定义自动改正的选项{?<BR><BR><STRONG>l论</STRONG> <BR>  和Oracle的其他功能不同,Oracle的高U复制不是即插即用的Q用户必Lȝ解它们是如何工作的以及各U复制方案的优缺炏V深ȝ解复制的基本概念可以帮助你设计一个可靠的复制环境?</FONT><BR></SPAN></P><img src ="http://www.tkk7.com/faintbear/aggbug/1910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faintbear/" target="_blank">力力力</a> 2005-03-10 15:36 <a href="http://www.tkk7.com/faintbear/archive/2005/03/10/1910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的高U复制资?2http://www.tkk7.com/faintbear/archive/2005/03/10/1909.html力力力力力力Thu, 10 Mar 2005 07:35:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/10/1909.htmlhttp://www.tkk7.com/faintbear/comments/1909.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/10/1909.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/1909.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/1909.html阅读全文

力力力 2005-03-10 15:35 发表评论
]]>
ORACLE的高U复制资?1http://www.tkk7.com/faintbear/archive/2005/03/10/1908.html力力力力力力Thu, 10 Mar 2005 07:32:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/10/1908.htmlhttp://www.tkk7.com/faintbear/comments/1908.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/10/1908.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/1908.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/1908.html阅读全文

力力力 2005-03-10 15:32 发表评论
]]>
oracle update多表兌 http://www.tkk7.com/faintbear/archive/2005/03/10/1890.html力力力力力力Thu, 10 Mar 2005 02:22:00 GMThttp://www.tkk7.com/faintbear/archive/2005/03/10/1890.htmlhttp://www.tkk7.com/faintbear/comments/1890.htmlhttp://www.tkk7.com/faintbear/archive/2005/03/10/1890.html#Feedback0http://www.tkk7.com/faintbear/comments/commentRss/1890.htmlhttp://www.tkk7.com/faintbear/services/trackbacks/1890.htmlUPDATE A.A3 = A.A3+B.B3 的问?BR>
表A l构 : A1 , A2 ,A3
表B l构: B1,  B2,  B3
其中 A1 ,B1 为PK ,切值相?是可以使用A1 = B1 ?

请问用SQL 语句或过E该如何实现如下的功???

更新A 表的 A3 ,用A.A3 与B.B3之和更新.

3>update A
set A3 = (select A.A3 + B.B3 from B where A.A1 = B.B1) ;

7>update (select a1,a3,b1,b3 from a,b where a1=b1) set a3=a3+b3

开执行计划, 谈论效率是没有太多的意义的^_^..


三楼的写法与7楼的写法得到的结果是不同?

三楼的写法会更新所有记? ?楼的写法只修改两者相交的相关记录信息.

7楼的写法可以更加Ҏ(gu)的控制这条update语句的执行计? 不过要求B表必d对应的字D上有主键烦?) , 在B表在对应字段上有主键索引的时? 使用7楼的写法.

可以参考一下这个帖子^_^

http://www.cnoug.org/viewthread.php?tid=44070
(试没有成功..不知道怎么搞的.)
参考了下面?
非常佩服。抱着学习的态度Q重写了一下三楼的Q在没有主键的情况,h教:
update a
set a3=(select a3+b3 from b where a1=b1)
where a1=(select b1 from b where a1=b1)
如下:
update con_eme_on20050309 a set a.con_price=(select a.con_price+(b.annuity-a.annuity)+(b.nojob-a.nojob)
+(b.medicare-a.medicare)+(b.birthfee-a.birthfee)+(b.bruisefee-a.bruisefee) from con_eme_on200404 b
where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.emp_base=(select b.emp_base from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.annuity=(select b.annuity from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.nojob=(select b.nojob from con_eme_on200404 bwhere a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.medicare=(select b.medicare from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.birthfee=(select b.birthfee from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.bruisefee=(select b.bruisefee from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.nojobbase=(select b.nojobbase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.mediabase=(select b.mediabase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.birthbase=(select b.birthbase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.bruisebase=(select b.bruisebase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)where a.emp_cod in(select b.emp_cod from con_eme_on200404 b
where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)
公积?
update con_eme_on20050309 a set a.con_price=(select a.con_price+(b.accumulation-a.accumulation) from con_eme_on200404 b
where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),a.accumulation=(select b.accumulation from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),
a.accumulationbase=(select b.accumulationbase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),a.accumulationbase1=(select b.accumulationbase1 from con_eme_on200404 b
where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)
where a.emp_cod in(select b.emp_cod from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)

28DE6CC0EDBBE9A61E23D9E9D46BB8A9.gif



力力力 2005-03-10 10:22 发表评论
]]>
վ֩ģ壺 ޹Ʒһ| ޻ɫַ| þҹɫƷAV̬ͼ | Ƭ߹ۿ| պһ| avרavëƬ| ޹Ů߹ۿ| ޹˾þþƷ| һؼaaaaëƬѹۿ | þavСݲ| Ծ޾ƷAAƬ߲| xxxxxܴƬƵ| **ʵëƬѹۿ | þþƷѹۿ| ֻˬֳƵ| ѹԺ߹ۿ| AVרӰ| ¶ۺ| ɫѿ| þþƷ˽ӰԺѿ| ŮƬѹۿƵ| Ů˱ͰúˬƵ | պƷƵ߹ۿ| ҹƵ| պƵ| AV12þ| AVһɫ| ѻɫƵ| Ů糱ëƬѲ| avרavý| ݺɫۺϳ| 337pŷ޴| ؼëƬƵ| ƷһVR| ޾ƷƷ벻| ޹պ߳ѿ| Ѿþþþþ| Ůվ߿| ˳ɵӰ| ޾ƷۺϾþĻ| ëƬһƵѲ|