??xml version="1.0" encoding="utf-8" standalone="yes"?>区三区激情福利综合中文字幕在线一区亚洲视频1 ,久久亚洲中文无码咪咪爱,亚洲AV色欲色欲WWWhttp://m.tkk7.com/alex/category/5491.html不求多得,只求一? about java,hibernate,spring,design,database,Ror,ruby,快速开?lt;br/><br/> 最q关心的内容关键?RoR zh-cnTue, 12 Jun 2007 16:18:54 GMTTue, 12 Jun 2007 16:18:54 GMT60Oracle 自动启动命o(h)http://m.tkk7.com/alex/archive/2007/06/12/123519.htmlAlexAlexTue, 12 Jun 2007 01:13:00 GMThttp://m.tkk7.com/alex/archive/2007/06/12/123519.htmlhttp://m.tkk7.com/alex/comments/123519.htmlhttp://m.tkk7.com/alex/archive/2007/06/12/123519.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/123519.htmlhttp://m.tkk7.com/alex/services/trackbacks/123519.htmlecho "begin to start oracle"
lsnrctl start
sqlplus /nolog 
<<EOF
connect /as sysdba
startup
exit
exit
echo "oracle have started"


Alex 2007-06-12 09:13 发表评论
]]>
[zt]插入囄到数据库(BLOB大字D保存对?http://m.tkk7.com/alex/archive/2007/03/28/107018.htmlAlexAlexWed, 28 Mar 2007 08:55:00 GMThttp://m.tkk7.com/alex/archive/2007/03/28/107018.htmlhttp://m.tkk7.com/alex/comments/107018.htmlhttp://m.tkk7.com/alex/archive/2007/03/28/107018.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/107018.htmlhttp://m.tkk7.com/alex/services/trackbacks/107018.html阅读全文

Alex 2007-03-28 16:55 发表评论
]]>
powerdesigner中外建问?/title><link>http://m.tkk7.com/alex/archive/2007/01/31/96861.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Wed, 31 Jan 2007 02:42:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2007/01/31/96861.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/96861.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2007/01/31/96861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/96861.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/96861.html</trackback:ping><description><![CDATA[key words: pd, powerdesigner,外徏<br /><br />在PD中徏立外键碰C个问题,? forum(id,name)表,forum_thread(id,forum_id)表,需要将forum的id设ؓ(f)forum_thread的外建,指向forum_id,默认的在 PD中是主键设为外?<br /><br />需要如下设|才可以: <br /><br /><img height="522" alt="foreign_key.png" src="http://m.tkk7.com/images/blogjava_net/alex/images/foreign_key.png" width="685" border="0" /><img src ="http://m.tkk7.com/alex/aggbug/96861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2007-01-31 10:42 <a href="http://m.tkk7.com/alex/archive/2007/01/31/96861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]PowerDesigner 11 使用心得http://m.tkk7.com/alex/archive/2007/01/17/94353.htmlAlexAlexWed, 17 Jan 2007 01:55:00 GMThttp://m.tkk7.com/alex/archive/2007/01/17/94353.htmlhttp://m.tkk7.com/alex/comments/94353.htmlhttp://m.tkk7.com/alex/archive/2007/01/17/94353.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/94353.htmlhttp://m.tkk7.com/alex/services/trackbacks/94353.html
引言:
发现powerdesign的文真的是不多Q不qpowerdesignq是很有用的Q见到此cL就收藏下吧.

转自edeed

 附上一些用pd11的心得:(x)

1、安装PD v11.0?br />
2、由pdm生成脚本Ӟ字段过15字符发生错误(oracleQ?br />原因未知Q解军_法是打开PDM后,?x)出现Database的菜单栏Q进入Database Q?Edit Current DBMS QscriptQobjectsQcolumnQmaxlenQ把valueD?原ؓ(f)30)Q比如改?0。出现表或者其它对象的长度也有q种错误的话都可以选择对应的objects照此U方法更改!
或者用下面的q种Ҏ(gu)Q?br />生成脚本时会(x)弹出Database generation提示框:(x)把options Q?check model的小勄LQ就是不q行(g)查(不推荐)Q?br />或者可以修改C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\DBMS\oracl9i2.xdb文g
修改好后Q再cdm转ؓ(f)pdmӞ选择“Copy the DBMS definition in model”把把这个资源文件拷贝到模型中?br />
3、生成的脚本中如何把对象的双引号LQ?br />打开cdm的情况下Q进入ToolsQModel OptionsQNaming ConventionQ把Name和Code的标{Charcter case选项讄成Uppercase或者LowercaseQ只要不是Mixed CasepQ?br />或者选择Database->Edit current database->Script->Sql->FormatQ有一CaseSensitivityUsingQuoteQ它?comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否适用双引h规定标识W的大小写,可以看到双的values默认gؓ(f)“YES?改ؓ(f)“No”即可!
或者在打开pdm的情况下Q进入ToolsQModel OptionsQNaming ConventionQ把Name和Code的标{Charcter case选项讄成Uppercase可以!

4、徏立一个表?Z(g)出现Existence of index的警?br />A table should contain at least one column, one index, one key, and one reference.
可以不检?Existence of index q项Q也没有这个警告错误了Q?br />意思是说没有给表徏立烦(ch)引,而一个表一般至要有一个烦(ch)引,q是一个警告,不用也没有关系Q?br />
5、创Z个表在修改字D늚时候,一修改name的内容,code也跟着变化Q如何让code不随着name变化
Name和Code 的右侧都有一个按钮“=”,如果需要不同步的话Q把q个按钮弹v来就可以了?br />Tools->General Options->Dialog->Name to Code Mirroring (L)

6、由CDM生成PDMӞ自动生成的外键的重命?br />PDM Generation Options->Detail->FK index names默认?REFR%_FKQ改为FK_%REFRCODE%Q其?REFRCODE%指的是CDM中Relationship的codeQ另外自动生成的父字D늚规则是PDM Generation Options->Detail->FK column name template中设|的Q默认是%.3:PARENT%_%COLUMN%Q可以改为Par%COLUMN%表示是父字段Q?br />
7、如何防止一对一的关pȝ成两个引用(外键Q?br />要定义关pȝ支配方向Q占支配C的实体(有D标志Q变为父表?br />在cdm中双M对一关系->Detail->Dominant role选择支配关系

8、修Ҏ(gu)表模板中一些术语的定义
xӞ(x)C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\Report Languages\Chinese.xrl
ToolsQResourcesQReport LanguagesQ选择ChineseQ单击Properties或双ȝ?br />修改某些对象的名Uͼ(x)Object Attributes\Physical Data Model\Column\
        ForeignKeyQ外?br />        MandatoryQؓ(f)I?br />        PrimaryQ主?br />        TableQ表
用查找替换,把“表格”替换成“表?br />修改昄的内容ؓ(f)别的QValues Mapping\Lists\StandardQ添加TRUE的{化列为是QFALSE的{化列为空
另外ReportQTitle Page里可以设|标题信?img src ="http://m.tkk7.com/alex/aggbug/94353.html" width = "1" height = "1" />

Alex 2007-01-17 09:55 发表评论
]]>
不要费资源 : 数据库连接池http://m.tkk7.com/alex/archive/2007/01/04/91838.htmlAlexAlexThu, 04 Jan 2007 12:58:00 GMThttp://m.tkk7.com/alex/archive/2007/01/04/91838.htmlhttp://m.tkk7.com/alex/comments/91838.htmlhttp://m.tkk7.com/alex/archive/2007/01/04/91838.html#Feedback8http://m.tkk7.com/alex/comments/commentRss/91838.htmlhttp://m.tkk7.com/alex/services/trackbacks/91838.html
发现一个有意思的现象Q好多h在开发过E中不知道是Z训练自己~码q是Z重新发明轮子QM明明已经存在的功能他非要自己实现一遍?br />
今天又碰C个?br />
jdbc的连接,好多Z喜欢自己实现一个连接池Q但是对于app server来说本n一般都有支持连接池的,Z么不用呢?
写了一通又长又臭的代码Q自׃为牛B的很Q其实算个球啊?br />
不要费Q不要自己发明轮子,你不是最牛的Q一定还有比你更牛的Q?br />
对于weblogic或者oracle以及(qing)ibm的品来_(d)大家q是比较?fn)惯于用容器的jndi,但是即对于tomcatQ我个h也徏议用tomcat自带的?br />
? jndiq接数据?br />
public final static synchronized Connection getConnection(String inputJNDI) throws
      DBMException 
{
    Connection conn 
= null;
    String strConnJNDI 
= null;
    
try {
      Context ctx 
= new InitialContext();
      _log.debug(ctx);

      
if (null != inputJNDI) {
        
if(inputJNDI.length() > 0)
          strConnJNDI 
= inputJNDI;
        
else
          strConnJNDI 
= dbJndiName;
      }

      
else {
        strConnJNDI 
= dbJndiName;
      }

      DataSource ds 
= (DataSource) ctx.lookup(strConnJNDI);
      _log.debug(ds);
      conn 
= ds.getConnection();
    }

    
catch (Exception ex) {
      _log.error(
"It's error to get connection", ex);
      
throw new DBMException("Error to get connection");
    }

    _log.debug(conn);
    
return conn;
  }


以此cLQ类gxml解析{的工作也没有必要自׃步一步地用dom或者什么ؕ七八p的sax自己L一遍,搞了半天׃Z得到其中的一个valueQ何苦来着?    如果你不是ؓ(f)了做研究Q那么,效率W一Q安全第一.

随便说说Q也许有Z同意我的观点Q没关系Q尽谈谈,哈哈  :)

Alex 2007-01-04 20:58 发表评论
]]>
[zt]单用户实例下恢复master的方?/title><link>http://m.tkk7.com/alex/archive/2006/12/21/89289.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 21 Dec 2006 07:08:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/12/21/89289.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/89289.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/12/21/89289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/89289.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/89289.html</trackback:ping><description><![CDATA[key words: sql server,单用?master恢复<br /><br /><span style="FONT-SIZE: 12px"> 作?jankie<br />日期:2006-12-1<br /><br />一、MASTER数据库备份与恢复<br />   1、数据库master正常情况下对masterq行(完全)备䆾;<br />若要恢复:<br />   2、停止SQL Server服务;<br />   3、以单用户实例的方式启动SQL Server,启动时不要把H口关闭;(具体看二)<br />   4、然后再对MASTE数据库进行恢复即?<br /><br />二、MSSQL单用户实例的启动Ҏ(gu):<br />  如何在单用户模式下启动SQL Server的命名实例(命o(h)提示W)   <br />  在单用户模式下从命o(h)提示W启动SQL Server 的命名实例?   <br />  从命令提C符输入Q?   <br />  sqlservr.exe -c  -m   -s   {instancename}   <br /><br />?:<br />  1、sqlserver.exe -c -m 回R(默认实例)<br />  2、sqlserver.exe -c -m -s benet (实例名ؓ(f)benet)<br />   <br />  说明在启?sqlservr.exe之前Q必d命o(h)H口中切换到适当的目?br />?c:\program files\microsoft sql server\mssql\bin目录?br /></span><img src ="http://m.tkk7.com/alex/aggbug/89289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-12-21 15:08 <a href="http://m.tkk7.com/alex/archive/2006/12/21/89289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]jdbc如何q接到sql server实例http://m.tkk7.com/alex/archive/2006/12/17/88306.htmlAlexAlexSat, 16 Dec 2006 16:35:00 GMThttp://m.tkk7.com/alex/archive/2006/12/17/88306.htmlhttp://m.tkk7.com/alex/comments/88306.htmlhttp://m.tkk7.com/alex/archive/2006/12/17/88306.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/88306.htmlhttp://m.tkk7.com/alex/services/trackbacks/88306.html
注意Q这文章是由无人工介入的自动的机器译pȝ译完成。这些文章是微YZ懂英语的用户提供? 以他们能够理解q些文章的内宏V微软不保证机器译的正度Q也不对׃内容的误译或者客户对它的使用所引v的Q何直接的, 或间接的可能的问题负责?/div>

概要

Microsoft SQL Server 2000 支持同一计算Z同时q行的多?SQLServer 数据库引擎实例?以下是两U类型的 SQLServer 数据库引擎实例:(x) 默认和命名?只能? M计算Zq行一个默认实例ƈ且由默认实例q行计算Z的名U标识它? 通常指定以下列格式:(x) 计算机名和实例名U?
computer_name\instance_name
?MicrosoftSQLServer2000JDBC, q接命名实例通过 SQL 服务?2000 MicrosoftTextDriver 必须指定端口号与命名实例, 代替的命名实例名U相兌如前面?

更多信息

要查?SQLServer 实例端口? h照下列步骤:(x)
1.?Microsoft SQL Server 2000 服务? 启动 SQL Server |络实用工具?/font>
2.要从 实例 下拉菜单实例依次, 常规 选项卡?/font>
3.TCP/IP, 依次 属??注意Q?? 属? 对话框中出现端口号ؓ(f)此实例?/font>

当?zhn)q接?SQLServer 通过 JDBC q接 URL 中用只要有该??下面是典型连?URL 的示例:(x)

jdbc:microsoft:sqlserverQ?/ 1433; yourServerName / 用户 = yourUser Q?密码 = yourPwd Q?/div> 在本CZ, 使用默认端口?1433?此默认替换端口号ؓ(f)(zhn)命名实例?


Alex 2006-12-17 00:35 发表评论
]]>mysql的外键问?/title><link>http://m.tkk7.com/alex/archive/2006/11/07/79523.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Tue, 07 Nov 2006 01:44:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/11/07/79523.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/79523.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/11/07/79523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/79523.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/79523.html</trackback:ping><description><![CDATA[key words: mysql,外键,fm150<br /><br />q次在mysql中徏立外键关联时发现问题:<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">alter</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">table</span><span style="color: rgb(0, 0, 0);"> CHILD </span><span style="color: rgb(0, 0, 255);">add</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">constraint</span><span style="color: rgb(0, 0, 0);"> FK3D1FCFC74B18345 </span><span style="color: rgb(0, 0, 255);">foreign</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">key</span><span style="color: rgb(0, 0, 0);"> (PARENTID) </span><span style="color: rgb(0, 0, 255);">references</span><span style="color: rgb(0, 0, 0);"> PARENT;       <br /></span></div><br /><br />提示..fm150错误,最后发现是mysql的版本问题,我用的是4.1的,对外键不知道是不支持q是支持的有问题Q下?.0的解?<br /><img src ="http://m.tkk7.com/alex/aggbug/79523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-11-07 09:44 <a href="http://m.tkk7.com/alex/archive/2006/11/07/79523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle分页的一个问?/title><link>http://m.tkk7.com/alex/archive/2006/09/20/70817.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Wed, 20 Sep 2006 07:36:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/09/20/70817.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/70817.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/09/20/70817.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/70817.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/70817.html</trackback:ping><description><![CDATA[key words :Oracle分页 视图<br /><br />google了一下关于Oracle的分|法,Ҏ(gu)q不,大多数效果差不多-有点恶心. 恶心也要作,不过后来是大家都用得这U方式在我这里出C新问题,奇怪的是怎么没有别h到?<br /><br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">String condition </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> teacher_id = </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> userId </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and school_id=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">siteId;<br />sql </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> select * </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> from your_table where </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> condition </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and rowid not in ( select rowid from your_table where</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> condition </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and rownum <= </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> (pageIndex </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">) </span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> Constants.PAGE_NUMS </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">) </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and rownum <= </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> Constants.PAGE_NUMS ;</span></div><br />现在的问题是我需要按照table的某个字D|序,于是Ҏ(gu)如下:<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">String condition </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> teacher_id = </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> userId </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and school_id=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">siteId;<br />sql </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> select * </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> from your_table where </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> condition </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and rowid not in ( select rowid from your_table where</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> condition </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and rownum <= </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> (pageIndex </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">) </span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> Constants.PAGE_NUMS </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><font color="#ff1493">order by id desc</font>) </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> and rownum <= </span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> Constants.PAGE_NUMS + " <font color="#ff1493">order by id desc</font>";</span></div><br />q个sql有问题么?<br />{案是可能有问题Q也可能没有问题Q因为据说在8i的Oracle版本之前都不行,实际上也不尽?dng)在我?i?0g我得到的是同L(fng)错误 "<b>missing right parenthesis</b>",q有一位兄弟估计是DBA我去metalink打一个patch,埃,动作太大了,不敢动?br /><br />问题q是要解冻I试了下类gselect a.*,rownum r from (select * from table where ...) a where rownum < 10 {的Ҏ(gu)Q效果一P是不能加嵌套的order by<br />最后,用视囄Ҏ(gu)间接解决问题Q因为我要解决的问题实际是按某个字D|序,那么在视N先对tableq行排序Q再在视囄基础上作操作O(jin)K?<br /><br />另,q有一U不错的实现Ҏ(gu)Q即用OracleCachedRowSet,分页也比较简单,有点cM于hibernate,׃旉关系没有旉ȝQ感兴趣的朋友可以看一?<br /><br /><br />BTW: 对于视图可能rowid有问题,可以Ҏ(gu)视图的某个主键替?br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">String condition </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> teacher_id = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> userId </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> and school_id=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">siteId;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" />sql </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> select * </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> from your_table where </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> condition </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> and <strong>id</strong> not in ( select <strong>id</strong> from your_table where</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> condition </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> and rownum <= </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> (pageIndex </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> Constants.PAGE_NUMS </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">order by id desc) </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> and rownum <= </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> Constants.PAGE_NUMS </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> order by id desc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div><br /><br /><br /><img src ="http://m.tkk7.com/alex/aggbug/70817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-09-20 15:36 <a href="http://m.tkk7.com/alex/archive/2006/09/20/70817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]JDBMonitor全攻?/title><link>http://m.tkk7.com/alex/archive/2006/08/31/66800.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 31 Aug 2006 02:59:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/08/31/66800.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/66800.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/08/31/66800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/66800.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/66800.html</trackback:ping><description><![CDATA[JDBMonitor是一个开源项目。用它开发者可以很L为系l增加数据库执行日志功能。它使用十分方便Q?zhn)所需要做的唯一事情是在?zhn)pȝ的JDBCq接字符串前增加cM? "listenerconfig=/config.xml:url=" 的字W即可,不用写Q何代码? <p>使用 JDBMonitorQ?zhn)可以把数据库执行情况记录通过各种方式记录下来Q比如打印到控制台、输出到文g或者通过socket传送给q程客户端。JDBMonitor是可扩展的,(zhn)可以扩展它来将执行情况通过其他方式记录下来Q?zhn)所需要做的就是写一个实现IDBListener接口的类卛_?/p><p>JDBMonitor遵守 GNU Lesser General Public Licence (LGPL)协议。此协议包含在发行包中?/p><h2>入门</h2><p>几乎所有大型数据库应用都包含有自己的SQL执行日志功能Q此功能不仅能帮助开发h员调试,而且可以为DBAQ数据库理员)提供pȝ的运行信息?/p><p>Q?Q很隑ְ业务逻辑同日志代码分?/p><p>Q?Q降低了代码的可L?/p><p>Q?Q降低了pȝ的运行速度。在记录日志的时候,E序?x)暂停运行等待直到记录完成,而I/O操作是相当耗时的?/p><p>Q?Q很难记录运行耗时、语句参数等其他信息</p><p>Q?Q很难ؓ(f)我们无法修改代码的系l(例如没有源代码的pȝQ或者很隑֢加记录日志功能代码的pȝQ比如系l用了ORMappingQ增加日志功能?/p><p>JDBMonitor 则不同:(x)</p><p>Q?Q?zhn)最多只需要修改一行代码。?zhn)需要修改的代码是q一?Class.forName("com.cownew.JDBMonitor.jdbc.DBDriver") ,然后再修改一?JDBCq接字符Ԍ只要?“jdbc:db2://10.74.198.247:50000/app”修Ҏ(gu)? listenerconfig=config.xml:url= jdbc:db2://10.74.198.247:50000/app”就可以了。在(zhn)用WebLogic ,Tomcat或其他服务器的数据源功能的时候,q修改代码这一步都是无需的?/p><p>Q?QJDBMonitor另v一个线E来记录SQLQ所以它不会(x)对程序运行速度有Q何媄(jing)响?/p><p>Q?Q它是高度可扩展的,所以?zhn)可以扩展它来把执行情况通过其他方式记录。比如,(zhn)可以写一个扩展类Q来通过?sh)子邮g日志发送出厅R?/p><h2>取得 JDBMonitor</h2><p>JDBMonitor的最新稳定版本可以在JDBMonitor的网站上取得Q?/p><p>http://www.cownew.com/JDBMonitor</p><h2>使用 JDBMonitor</h2><p>1 ?jdbmonitor.jar攑ֈ(zhn)系l的c\径下?/p><p>2 让系l加?JDBMonitor的JDBC驱动?/p><p>q一步将?x)依?zhn)系l加载JDBC驱动的方式的不同而不同?/p><p>Q?Q如果?zhn)通过代码的Ş式加载JDBC驱动Q例如:(x)</p><p>   Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver?;<br />   Connection cn = DriverManager.getConnection(…?;</p><p>在这U情况下 Q?zhn)必须修? “Class.forName”这一句来加蝲JDBMonitor的JDBC驱动Q“com.cownew.JDBMonitor.jdbc.DBDriver”)Q而非以前的数据库JDBC驱动?/p><p>例如Q?/p><p>Class.forName(“com.cownew.JDBMonitor.jdbc.DBDriver?;<br />   Connection cn = DriverManager.getConnection(…?;</p><p>Q?Q如果?zhn)在配|文件中指定JDBC驱动Q比如,数据源配|文件或者其他类似的文g?/p><p>请修改原来的  JDBC驱动cMؓ(f) “com.cownew.JDBMonitor.jdbc.DBDriver??<br /></p><p>3 ?JDBMonitor加蝲能够加蝲原来的JDBC驱动</p><p>JDBMonitor的工作原理就是截获JDBC驱动的SQL语句调用、记录SQL语句Q然后将SQL语句重新转发l原来的JDBC驱动Q所以JDBMonitor必须首先向DriverManager注册JDBC驱动?/p><p>原来的JDBC驱动定义在配|文件的“JdbcDrivers?D中?<br /><JdbcDrivers><br />    <JdbcDriver class=" com.mysql.jdbc.Driver"/><br />  </JdbcDrivers></p><p>4 在原来的JDBCq接字符串前增加 JDBMonitor所需的信息?/p><p>(zhn)所需要做的就是将?listenerconfig=<configfilepath>:url=? 增加到原来的JDBCq接字符串前。?lt;configfilepath>”代表配|文件的路径Q下面集中\径都是合法的Q?/p><p>/com/jdbmonitor/config.xml <br />com/jdbmonitor/config.xml<br />c:/ jdbmonitor /config.xml</p><p>JDBMoinitor使用getClass().getResourceAsStream加蝲cM于?com/jdbmonitor/config.xml? and “com/jdbmonitor/config.xml?的类路径文gQ?FileInputStream加蝲cM?“c:/ jdbmonitor /config.xml”的配置文g?br /></p><p>5 指定(zhn)要使用监听器:(x)</p><p>(zhn)可以把数据库执行情况记录通过各种方式记录下来Q比如打印到控制台、输出到文g或者通过socket传送给q程客户端?/p><p>我们已经开发了如下常用的监听器QFileDBListener、ConsoleDBListener? SocketDBListene、DataBaseDBListener。当然?zhn)也可以开发满x要求的监听器?br />监听器定义在配置文g? “Listeners”段中:(x)</p><p><Listeners><br />    <!--ConsoleDBListener no arguments--><br />    <Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/><br />    <br />    <!--the arguments of FileDBListener is the file to log the SQL statement --><br />    <Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/aaa.txt"/><br />    <br />    <!--the arguments of SocketDBListener is the bound socket port of the listener server --><br />    <Listener class="com.cownew.JDBMonitor.listenerImpl.SocketDBListener" arg="9527"/><br />  </Listeners></p><p>搞定Q启动?zhn)的系l。ӞSQL语句被记录下来了Q我们可以在控制台、文件甚臌E监视器中看到日志了?/p><h2>举例</h2><h3>mvnforum的例子:(x)</h3><p>(zhn)可以从http://www.mvnForum.com得到mvnforum。我演示用的版本?.0?/p><p>(1)打开webapp\WEB-INF\classes\ mvncore.xmlQ重新配|:(x)</p><p>修改之前Q?/p><p><driver_class_name>com.mysql.jdbc.Driver</driver_class_name><br /><database_url>listenerconfig=c:/log/jdbmonitor/config.xml:url= jdbc:mysql://localhost/mvnforum?useUnicode=true&amp;characterEncoding=utf-8</database_url></p><p>修改之后Q?<br /><driver_class_name> com.cownew.JDBMonitor.jdbc.DBDriver </driver_class_name><br />        <database_url>jdbc:mysql://localhost/mvnforum?useUnicode=true&amp;characterEncoding=utf-8</database_url></p><p>(2)创徏文g c:/log/jdbmonitor/config.xml。我只想SQL语句记录到文本文件中Q所以我做如下配|:(x) <br /><config><br />  <Listeners><br />    <!--the arguments of FileDBListener is the file to log the SQL statement --><br />    <Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/log.txt"/><br />  </Listeners><br />  <JdbcDrivers><br />    <JdbcDriver class="com.mysql.jdbc.Driver"/><br />  </JdbcDrivers><br /></config><br />(3) ? jdbmonitor.jar攑ֈwebapp\WEB-INF\lib下?br />(4) 搞定Q?/p><p>Jive的例子:(x)</p><p>(zhn)可以从http://www.jivesoftware.com得到Jive。我演示用的版本?Jive 2.0 beta版?/p><h3>(1)打开<a href="http://localhost:8080/jive/admin/">http://localhost:8080/jive/admin/</a></h3><h3>“jdbc?填ؓ(f)Qcom.cownew.JDBMonitor.jdbc.DBDriver</h3><h3>“server? 填ؓ(f)Qc:/log/jdbmonitor/config.xml:url=jdbc:mysql://locahost/jive<br />(2)? jdbmonitor.jar攑ֈWEB-INF\lib?br />(3) 象mvnforum中一样创建同L(fng) c:/log/jdbmonitor/config.xml 文g.<br />(4) 搞定!</h3><p>代码方式的例子:(x)</p><p>管直接在代码中指定pȝ所用的JDBC驱动cd和JDBCq接字符串是不推荐的Q但是仍然有pȝ是这么做的?/p><p>比如Q?/p><p><strong>              Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</strong><br /><strong>              Connection conn = null;</strong><br /><strong>              PreparedStatement ps = null;</strong><br /><strong>              try</strong><br /><strong>              {</strong><br /><strong>                     conn = DriverManager</strong><br /><strong>                                   .getConnection("jdbc:odbc:MQIS");</strong><br /><strong>                     for (int i = 0; i < 1000; i++)</strong><br /><strong>                     {                    </strong><br /><strong>                            ps = conn.prepareStatement("update T_Material set fid=fid");</strong><br /><strong>                            ps.execute();</strong><br /><strong>                            ps.close();</strong><br /><strong>                     }</strong><br /><strong>              } finally</strong><br /><strong>              {</strong><br /><strong>                     ....          </strong><br /><strong>              }</strong></p><p>Q?Q修改一下代码ؓ(f)Q?br /> <strong>              Class.forName("com.cownew.JDBMonitor.jdbc.DBDriver");</strong><br /><strong>              Connection conn = null;</strong><br /><strong>              PreparedStatement ps = null;</strong><br /><strong>              try</strong><br /><strong>              {</strong><br /><strong>                     conn = DriverManager.getConnection("listenerconfig= c:/log/jdbmonitor/config.xml:url=jdbc:odbc:MQIS");</strong><br /><strong>                     for (int i = 0; i < 1000; i++)</strong><br /><strong>                     {</strong><br /><strong>                            ps = conn.prepareStatement("update T_Material set fid=fid");</strong><br /><strong>                            ps.execute();</strong><br /><strong>                            ps.close();</strong><br /><strong>                     }</strong><br /><strong>              } finally</strong><br /><strong>              {</strong><br /><strong>                     ....          </strong><br /><strong>              }</strong></p><p>Q?Q创建c:/log/jdbmonitor/config.xml文g。我惌录SQL语句到文本文件中同时输出到控制台Q这样可以辅助我q行调试Q所以我配置如下Q? <br /><config><br />  <Listeners><br />    <!--the arguments of FileDBListener is the file to log the SQL statement --><br /><Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/log.txt"/></p><p><!--ConsoleDBListener no arguments--><br /><Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/><br />  </Listeners><br />  <JdbcDrivers><br />    <JdbcDriver class="com.mysql.jdbc.Driver"/><br />  </JdbcDrivers><br /></config><br />(3) ?jdbmonitor.jar攑ֈc\径下?br />(4) 搞定!</p><h2>监听?/h2><p>我们已经开发了如下常用的监听器QFileDBListener、ConsoleDBListener? SocketDBListener、DataBaseDBListener?/p><p><strong>1、ConsoleDBListener 控制台监听器</strong></p><p>ConsoleDBListener?x)将SQL语句打印到控制台中?/p><p><img src="http://java.chinaitlab.com/UploadFiles_8734/200605/20060515113131636.jpg" twffan="done" height="113" width="579" /></p><p>q个监听器很Ҏ(gu)配置Q?/p><p><Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/></p><p><strong>2、FileDBListener 文g监听?/strong></p><p>FileDBListener ?x)将SQL语句保存到文本文件中?/p><p><img src="http://java.chinaitlab.com/UploadFiles_8734/200605/20060515113136883.jpg" twffan="done" height="347" width="316" /></p><p>如下配置Q?/p><p><Listener class="com.cownew.JDBMonitor.listenerImpl.FileDBListener" arg="c:/aaa.txt"/></p><p><strong><em>arg="c:/aaa.txt"</em></strong>表示日志保存到文g<strong><em>c:/aaa.txt</em></strong>中?/p><p><strong>3、SocketDBListener Socket监听?/strong></p><p>SocketDBListener是一个socket服务器,客户端连接到它上边以后就可以接收到它发出的SQL语句?/p><p>如下配置Q?/p><p><Listener class="com.cownew.JDBMonitor.listenerImpl.SocketDBListener" arg="9527"/></p><p><em><strong>arg="9527"</strong></em>表示服务器将?527端口监听?/p><p>我们已经开发了如下两种客户端:(x)SocketConsoleClientQSocket控制台客L(fng)Q??SocketSwingClientQSocket Swing客户端)?/p><p>SocketConsoleClient工作在控制台中:(x)</p><p><img src="http://java.chinaitlab.com/UploadFiles_8734/200605/20060515113136805.jpg" twffan="done" height="223" width="665" /></p><p>SocketSwingClient是一个Swing GUI客户端:(x)</p><p><img src="http://java.chinaitlab.com/UploadFiles_8734/200605/20060515113137863.jpg" twffan="done" height="300" width="495" /></p><p>(zhn)可以运?em><strong>"java -classpath jdbmonitor.jar com.cownew.JDBMonitor.listenerImpl.sckListenerClient.SocketConsoleClient" </strong></em>来启?em><strong>SocketConsoleClient</strong></em>Q运?em><strong>"java -classpath jdbmonitor.jar com.cownew.JDBMonitor.listenerImpl.sckListenerClient.SocketSwingClient"</strong></em>启动<em><strong>SocketSwingClient</strong></em>?/p><p>(zhn)可以编写符合?zhn)自己要求的客L(fng)Q具体细节请参?em><strong>com.cownew.JDBMonitor.listenerImpl.sckListenerClient.ListenerClient</strong></em>?em><strong>com.cownew.JDBMonitor.listenerImpl.sckListenerClient.IDBSocketClientListener</strong></em>.</p><p><strong>4、DataBaseDBListener</strong></p><p>DataBaseDBListener会(x)把SQL语句记录到数据库中:(x)</p><p><img src="http://java.chinaitlab.com/UploadFiles_8734/200605/20060515113137930.jpg" twffan="done" height="194" width="851" /></p><p>如下配置Q?/p><p><em><strong><Listener class="com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener" <br />arg="dburl=jdbc:odbc:MQIS;user=;password=;logtable=T_Log_SQLLog"/> </strong></em></p><p><em><strong>"dburl=jdbc:odbc:MQIS;user=;password=;"</strong></em>表示目标数据库的JDBCq接字符丌Ӏ?em><strong>"logtable=T_Log_SQLLog"</strong></em> 表示SQL记录被保存到哪个表中,默认的是<em><strong>T_Log_SQLLog</strong></em>?/p><p>如果目标数据库用的JDBC驱动与被监控的数据库不同Q请它加入配置文g?"JdbcDrivers" 部分Q例如:(x)</p><p><em><strong><config><br /><Active>true</Active><br /><Listeners></strong></em></p><p><em><strong><Listener class="com.cownew.JDBMonitor.listenerImpl.ConsoleDBListener" arg=""/><br /><br /><Listener class="com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener" <br />arg="dburl=jdbc:odbc:MQIS;user=;password=;logtable=T_Log_SQLLog"/><br /></Listeners><br /><JdbcDrivers><br /><JdbcDriver class="com.microsoft.jdbc.sqlserver.SQLServerDriver"/><br /><JdbcDriver class="sun.jdbc.odbc.JdbcOdbcDriver"/><br /></JdbcDrivers><br /></config></strong></em></p><p>"<em><strong>T_Log_SQLLog</strong></em>"的结构是Q?/p><p><img src="http://java.chinaitlab.com/UploadFiles_8734/200605/20060515113137716.jpg" twffan="done" height="110" width="243" /></p><p>"<em><strong>T_Log_SQLLog</strong></em>"的徏库脚本在<em><strong>com/cownew/JDBMonitor/listenerImpl/dataBaseListener</strong></em>,(db2.sql,mssqlserver.sql,oracle.sql)?/p><p>DataBaseDBListener是跨数据库的Q你可以把记录SQLCQ何关pL据库中?/p><h2>FAQ:</h2><p>1 如果我暂时不惌录SQL语句执行怎么办?N我要重新修改成原来的样子Q?/p><p>{:(x)无须如此。?zhn)只要修改config.xmlQ增?strong><em><Active>false</Active></em></strong>到文件中卛_?/p><p>如下Q?</p><p><strong><em><config></em></strong><br /><strong><em>  <Active> false </Active></em></strong><br /><strong><em>  <Listeners></em></strong><br /><strong><em>......</em></strong><br /><strong><em></config></em></strong><strong></strong></p><h2>如何扩展JDBMonitorQ?/h2><p>我们已经开发了如下常用的监听器QFileDBListener、ConsoleDBListener? SocketDBListener、DataBaseDBListener。当然?zhn)也可以开发满x要求的监听器。所有的监听器必d现接口:(x)com.cownew.JDBMonitor.commo. IDBListener。IDBListener有两个方法需要实玎ͼ(x)</p><p><strong><em>public void init(String arg);</em></strong><br /><strong><em>public void logSql(SQLInfo info);</em></strong></p><p>JDBMonitor?x)将配置文g中监听器定义中“arg”的g递给 “init”方法、将代表SQL语句执行信息的SQLInfo传递给“logSql”方法?/p><p>更多信息请参考API文?/p><img src ="http://m.tkk7.com/alex/aggbug/66800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-08-31 10:59 <a href="http://m.tkk7.com/alex/archive/2006/08/31/66800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]JDBCq接数据库经验集?/title><link>http://m.tkk7.com/alex/archive/2006/08/29/66520.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Tue, 29 Aug 2006 14:01:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/08/29/66520.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/66520.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/08/29/66520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/66520.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/66520.html</trackback:ping><description><![CDATA[ <span style="font-family: 宋体;" lang="EN-US"> <font size="4">Java 数据库连接(JDBCQ由一l用 Java ~程语言~写的类和接口组成。JDBC 为工?数据库开发h员提供了一个标准的 APIQ他们能够用纯Java API 来编写数据库应用E序。然而各个开发商的接口ƈ不完全相同,所以开发环境的变化?x)带来一定的配置变化。本文主要集合了不同数据库的q接方式?br />一、连接各U数据库方式速查?br />    下面|列了各U数据库使用JDBCq接的方式,可以作ؓ(f)一个手册用?br /><br />    1</font> </span> <span style="font-family: 宋体;"> <font size="4">?span lang="EN-US">Oracle8/8i/9i</span>数据库(<span lang="EN-US">thin</span>模式Q?span lang="EN-US"> <br />Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl</span>为数据库?span lang="EN-US">SID <br />String user="test"; <br />String password="test"; <br />Connection conn= DriverManager.getConnection(url,user,password); <br /><br />    2</span>?span lang="EN-US">DB2</span>数据?span lang="EN-US"> <br />Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <br />String url="jdbc:db2://localhost:5000/sample"; //sample</span>Z的数据库?span lang="EN-US"> <br />String user="admin"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password); <br /><br />    3</span>?span lang="EN-US">Sql Server7.0/2000</span>数据?span lang="EN-US"> <br />Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <br />String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; <br />//mydb</span>为数据库<span lang="EN-US"> <br />String user="sa"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password); <br /><br />    4</span>?span lang="EN-US">Sybase</span>数据?span lang="EN-US"> <br />Class.forName("com.sybase.jdbc.SybDriver").newInstance(); <br />String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB</span>Z的数据库?span lang="EN-US"> <br />Properties sysProps = System.getProperties(); <br />SysProps.put("user","userid"); <br />SysProps.put("password","user_password"); <br />Connection conn= DriverManager.getConnection(url, SysProps); <br /><br />    5</span>?span lang="EN-US">Informix</span>数据?span lang="EN-US"> <br />Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <br />String url = <br />"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; <br />user=testuser;password=testpassword"; //myDB</span>为数据库?span lang="EN-US"> <br />Connection conn= DriverManager.getConnection(url); <br /><br />    6</span>?span lang="EN-US">MySQL</span>数据?span lang="EN-US"> <br />Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <br />String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" <br />//myDB</span>为数据库?span lang="EN-US"> <br />Connection conn= DriverManager.getConnection(url); <br /><br />    7</span>?span lang="EN-US">PostgreSQL</span>数据?span lang="EN-US"> <br />Class.forName("org.postgresql.Driver").newInstance(); <br />String url ="jdbc:postgresql://localhost/myDB" //myDB</span>为数据库?span lang="EN-US"> <br />String user="myuser"; <br />String password="mypassword"; <br />Connection conn= DriverManager.getConnection(url,user,password); <br /></span></font> </span> <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"> <span style="font-family: 宋体;"> <span lang="EN-US"> <font size="4"> <br />    8、access</font> </span> <font size="4">数据库直q用ODBC?span lang="EN-US"><br />Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;<br />String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");<br />Connection conn = DriverManager.getConnection(url,"","");<br /> Statement stmtNew=conn.createStatement() ;<br /><o:p><br />二、JDBCq接MySql方式<br />    下面是用JDBCq接MySql的一个小的教E    ?/o:p></span></font> </span> </p> <p> <font size="4">    1、查N动程?br />    MySQL目前提供的java驱动E序为Connection/JQ可以从MySQL官方|站下蝲Qƈ扑ֈmysql-connector-java-3.0.15-ga-bin.jar文gQ此驱动E序为纯java驱动E序Q不需做其他配|?br /><br />    2、动态指定classpath<br />    <font color="#ff0000">如果需要执行时动态指定classpathQ就在执行时采用Qcp方式。否则将上面?jar文g加入到classpath环境变量中?/font><br /><br />    3、加载驱动程?br />try{<br />    Class.forName(com.mysql.jdbc.Driver);<br />    System.out.println(Success loading Mysql Driver!);<br />}catch(Exception e)<br />{<br />    System.out.println(Error loading Mysql Driver!);<br />    e.printStackTrace();<br />} <br /><br />    4、设|连接的url<br />    jdbcQmysqlQ?/localhost/databasename[?pa=va][Qpa=va]<br /><br />三、以下列Z在用JDBC来连接Oracle数据库时可以使用的一些技巧,q些技巧能够我们更好地发挥系l的性能和实现更多的功能Q系转蝲Q?/font> </p> <p> <font size="4">  1、在客户端Y件开发中使用Thin驱动E序</font> </p> <p> <font size="4">  在开发Java软g斚wQOracle的数据库提供了四U类型的驱动E序Q二U用于应用Y件、applets? servlets{客L(fng)软gQ另外二U用于数据库中的Java存储q程{服务器端Y件。在客户机端软g的开发中Q我们可以选择OCI驱动E序或Thin 驱动E序。OCI驱动E序利用Java本地化接口(JNIQ,通过Oracle客户端Y件与数据库进行通讯。Thin驱动E序是纯Java驱动E序Q它? 接与数据库进行通讯。ؓ(f)了获得最高的性能QOracle在客L(fng)软g的开发中使用OCI驱动E序Q这g是正的。但我徏议用Thin驱动E序Q因 为通过多次试发现Q在通常情况下,Thin驱动E序的性能都超q了OCI驱动E序?/font> </p> <p> <font size="4">  2、关闭自动提交功能,提高pȝ性能</font> </p> <p> <font size="4">  在第一ơ徏立与数据库的q接Ӟ在缺省情况下Q连接是在自动提交模式下的。ؓ(f)了获得更好的性能Q可以通过调用带布?yu)(dng)值false参数的ConnectioncȝsetAutoCommit()Ҏ(gu)关闭自动提交功能Q如下所C:(x)</font> </p> <p> <font size="4">  conn.setAutoCommit(false);</font> </p> <p> <font size="4">  值得注意的是Q一旦关闭了自动提交功能Q我们就需要通过调用Connectioncȝcommit()和rollback()Ҏ(gu)来h工的方式对事务进行管理?/font> </p> <p> <font size="4">  3、在动态SQL或有旉限制的命令中使用Statement对象</font> </p> <p> <font size="4">  在执行SQL命o(h)Ӟ我们有二U选择Q可以用PreparedStatement对象Q也可以使用 Statement对象。无论多次C用同一个SQL命o(h)QPreparedStatement都只对它解析和编译一ơ。当使用Statement对象 Ӟ每次执行一个SQL命o(h)Ӟ都会(x)对它q行解析和编译。这可能?x)你认为,使用PreparedStatement对象比用Statement对象? 速度更快。然而,我进行的试表明Q在客户端Y件中Q情况ƈ非如此。因此,在有旉限制的SQL操作中,除非成批地处理SQL命o(h)Q我们应当考虑使用 Statement对象?/font> </p> <p> <font size="4">  此外Q用Statement对象也得编写动态SQL命o(h)更加单,<b>因ؓ(f)我们可以字W串q接在一P建立一个有效的SQL命o(h)</b>。因此,我认为,<font color="#ff0000">Statement对象可以使动态SQL命o(h)的创建和执行变得更加单?/font></font> </p> <p> <font size="4">  4、利用helper函数对动态SQL命o(h)q行格式?/font> </p> <p> <font size="4">  在创Z用Statement对象执行的动态SQL命o(h)Ӟ我们需要处理一些格式化斚w的问题。例如,如果我们 惛_Z个将名字O'Reilly插入表中的SQL命o(h)Q则必须使用二个相连的?'”号替换O'Reilly中的?”号。完成这些工作的最好的Ҏ(gu)? 创徏一个完成替换操作的helperҎ(gu)Q然后在q接字符串心服用公式表达一个SQL命o(h)Ӟ使用创徏的helperҎ(gu)。与此类似的是,我们可以? helperҎ(gu)接受一个Date型的|然后让它输出ZOracle的to_date()函数的字W串表达式?/font> </p> <p> <font size="4">  5、利用PreparedStatement对象提高数据库的M效率</font> </p> <p> <font size="4">  在用PreparedStatement对象执行SQL命o(h)Ӟ命o(h)被数据库q行解析和编译,然后被放到命? ~冲区。然后,每当执行同一个PreparedStatement对象Ӟ它就?x)被再解析一ơ,但不?x)被再次~译。在~冲Z可以发现预编译的命o(h)Qƈ? 可以重新使用。在有大量用L(fng)企业U应用Y件中Q经怼(x)重复执行相同的SQL命o(h)Q用PreparedStatement对象带来的编译次数的减少能够 提高数据库的M性能。如果不是在客户端创建、预备、执行PreparedStatementd需要的旉长于StatementdQ我?x)徏议在除? 态SQL命o(h)之外的所有情况下使用PreparedStatement对象?/font> </p> <p> <font size="4">  6?font color="#ff0000">在成批处理重复的插入或更新操作中使用PreparedStatement对象</font></font> </p> <p> <font size="4">  如果成批地处理插入和更新操作Q就能够显著地减它们所需要的旉。Oracle提供的Statement? CallableStatementq不真正地支持批处理Q只有PreparedStatement对象才真正地支持批处理。我们可以? addBatch()和executeBatch()Ҏ(gu)选择标准的JDBC批处理,或者通过利用PreparedStatement对象? setExecuteBatch()Ҏ(gu)和标准的executeUpdate()Ҏ(gu)选择速度更快的Oracle专有的方法。要使用Oracle专有的批 处理机制Q可以以如下所C的方式调用setExecuteBatch()Q?br />PreparedStatement pstmt3D null;<br />try {<br />((OraclePreparedStatement)<br />pstmt).setExecuteBatch(30);<br />...<br />pstmt.executeUpdate();<br />} <br /></font> </p> <p> <font size="4">  调用setExecuteBatch()时指定的值是一个上限,当达到该值时Q就?x)自动地引发SQL命o(h)执行Q? 标准的executeUpdate()Ҏ(gu)׃(x)被作为批处理送到数据库中。我们可以通过调用PreparedStatementcȝsendBatch ()Ҏ(gu)随时传输批处理Q务?/font> </p> <p> <font size="4">  7、用Oracle locatorҎ(gu)插入、更新大对象QLOBQ?/font> </p> <p> <font size="4">  Oracle的PreparedStatementcM完全支持BLOB和CLOB{大对象的处理,其? Thin驱动E序不支持利用PreparedStatement对象的setObject()和setBinaryStream()Ҏ(gu)讄BLOB? |也不支持利用setCharacterStream()Ҏ(gu)讄CLOB的倹{只有locator本n中的Ҏ(gu)才能够从数据库中获取LOBcd的倹{? 可以使用PreparedStatement对象插入或更新LOBQ但需要用locator才能获取LOB的倹{?i><font color="#ff0000">׃存在q二个问题,因此Q我使用 locator的方法来插入、更新或获取LOB的倹{?/font></i></font> </p> <p> <font size="4">  8、用SQL92语法调用存储q程</font> </p> <p> <font size="4">  在调用存储过E时Q我们可以用SQL92或Oracle PL/SQLQ由于用Oracle PL/SQLq没有什么实际的好处Q而且?x)给以后l护你的应用E序的开发h员带来麻?ch),因此Q我在调用存储过E时使用SQL92?/font> </p> <p> <font size="4">  9、用Object SQL对象模式{Ud数据库中</font> </p> <p> <font size="4">  既然可以Oracle的数据库作ؓ(f)一U面向对象的数据库来使用Q就可以考虑应用程序中的面向对象模式{到数 据库中。目前的Ҏ(gu)是创建Java bean作ؓ(f)伪装的数据库对象Q将它们的属性映到关系表中Q然后在q些bean中添加方法。尽这样作在Java中没有什么问题,但由于操作都是在数据 库之外进行的Q因此其他访问数据库的应用Y件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创徏一个新的数据库对象cd在数据库中模 仿其数据和操作,然后使用JPublisher{工L(fng)成自qJava beancR如果用这U方式,不但Java应用E序可以使用应用软g的对象模式,其他需要共享你的应用中的数据和操作的应用Y件也可以使用应用软g中的 对象模式?/font> </p> <p> <font size="4">  10、利用SQL完成数据库内的操?/font> </p> <p> <font size="4">  我要向大家介l的最重要的经验是充分利用SQL的面向集合的Ҏ(gu)来解x据库处理需求,而不是用Java{过E化的编E语a?/font> </p> <p> <font size="4">  如果~程人员要在一个表中查找许多行Q结果中的每个行都会(x)查找其他表中的数据,最后,~程人员创徏了独立的 UPDATE命o(h)来成批地更新W一个表中的数据。与此类似的d可以通过在set子句中用多列子查询而在一个UPDATE命o(h)中完成。当能够在单一? SQL命o(h)中完成Q务,何必要让数据在网上流来流ȝQ我用户认真学习(fn)如何最大限度地发挥SQL的功能?</font> </p> <img src ="http://m.tkk7.com/alex/aggbug/66520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-08-29 22:01 <a href="http://m.tkk7.com/alex/archive/2006/08/29/66520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中查询被锁的表ƈ释放sessionhttp://m.tkk7.com/alex/archive/2006/08/21/64895.htmlAlexAlexMon, 21 Aug 2006 13:58:00 GMThttp://m.tkk7.com/alex/archive/2006/08/21/64895.htmlhttp://m.tkk7.com/alex/comments/64895.htmlhttp://m.tkk7.com/alex/archive/2006/08/21/64895.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/64895.htmlhttp://m.tkk7.com/alex/services/trackbacks/64895.html查询sql:
SELECT A.OWNER,
A.
OBJECT_NAME,
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID,
B.ORACLE_USERNAME, 
B.OS_USER_NAME,
B.PROCESS, 
B.LOCKED_MODE, 
C.MACHINE,
C.STATUS,
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM
FROM ALL_OBJECTS A,
V$LOCKED_OBJECT B,
SYS.GV_$SESSION C 
WHERE ( A.OBJECT_ID = B.OBJECT_ID )
AND (B.PROCESS = C.PROCESS )
ORDER BY 1,2 

释放session Sql:
alter system kill session 'sid, serial#'

alter system kill session '379, 21132'
alter system kill session '374, 6938'



Alex 2006-08-21 21:58 发表评论
]]>
Oracle函数http://m.tkk7.com/alex/archive/2006/07/31/61040.htmlAlexAlexMon, 31 Jul 2006 08:34:00 GMThttp://m.tkk7.com/alex/archive/2006/07/31/61040.htmlhttp://m.tkk7.com/alex/comments/61040.htmlhttp://m.tkk7.com/alex/archive/2006/07/31/61040.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/61040.htmlhttp://m.tkk7.com/alex/services/trackbacks/61040.html
sysdate
systimestamp
to_char
to_date:
select to_date('06-5?1957','DD-Mon-YY'from dual;

nvl:

select nvl(sal,'I?/span>'from emp;


decode:
decode(条g,?,译?,?,译?,...值n,译值n,~省?

该函数的含义如下Q?br />IF 条g=? THEN
    RETURN(译?)
ELSIF 条g=? THEN
    RETURN(译?)
    ......
ELSIF 条g=值n THEN
    RETURN(译值n)

ELSE
    RETURN(~省?
END IF
String sql =
        "
select product_name,sum(decode(bill_month,'"+chargePeriod+"',charge))/100 as cur_charge,
sum(decode(bill_month,'"+lastPeriod+"',charge))/100 as last_charge, "
        
+
        " 
sum(decode(bill_month,'"+chargePeriod+"',bill_time_len))/60 as cur_time,
sum(decode(bill_month,'"+lastPeriod+"',bill_time_len))/60 as last_time "
        
+
        " 
from tl_acc_report "
        
+
        " 
group by product_name ";


SELECT sid,serial#,username,

DECODE(command

,
0,’None?br />
,
2,?/span>Insert?br />
,
3,?/span>Select?br />
,
6,?/span>Update?br />
,
7,?/span>Delete?br />
,
8,?/span>Drop

,’Other? cmd 
from des



Alex 2006-07-31 16:34 发表评论
]]>
oracle表连?/title><link>http://m.tkk7.com/alex/archive/2006/07/27/60426.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 27 Jul 2006 13:21:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/07/27/60426.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/60426.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/07/27/60426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/60426.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/60426.html</trackback:ping><description><![CDATA[key words: 表连?<br />内连?br /><br />select statement from table1 join table2 on table1.fieled1 = table2.field2<br /><br />select statement from table1 ,table2 where table1.field1 = table2.field2<br /><br /><br />左连?br /><br />select .....table1 left outer join table2 on table1....= table2.field<br /><br />select .... table1 ,table2 where table1.field1= table2.field(+)<br /><br />合ƈ查询<br />union:获得qQƈ自动L重复行,q且?x)以W一列的l果q行排序<br />union all: 获得qQ但不去掉重复行Q也不排?br /><br />子查?<br />对于多行子查询,必须要用多行q算W?IN,NOT IN,EXISTS,NOT EXISTS,ALL,ANY)<br /><br /><img src ="http://m.tkk7.com/alex/aggbug/60426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-07-27 21:21 <a href="http://m.tkk7.com/alex/archive/2006/07/27/60426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]DB2与Oracle数据库之间远E复?/title><link>http://m.tkk7.com/alex/archive/2006/07/27/60409.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 27 Jul 2006 11:54:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/07/27/60409.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/60409.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/07/27/60409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/60409.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/60409.html</trackback:ping><description><![CDATA[key words: 数据库复制?<br /><b class="art_title f18">come from <a >here</a></b><br /><br />一、背?<br />  DB2 联合数据库是分布式数据库理的特DŞ式。在联合数据库系l中Q可以通过一?SQL 命o(h)来发出对多个数据源的命o(h)h。DB2 与非 DB2 数据库之间进行复制之前,首先需要保证非 DB2 数据源可以被 DB2 ESE Version 8 federated database讉K。对于DB2 Replication Version 8 所需的联合数据库功能可以在现有发布的 DB2 ESE Version 8 ?DB2 Connect Enterprise Edition Version 8 中提供?br /><br />  "SQL复制"又称?DB2复制"Q是?DB2 开发的两种数据复制cd中的一U,它是通过 SQL q行的复制。在q里单提一下,DB2 复制中的另一U?Q复制"是通过 Websphere MQ 消息队列q行的。在q行 SQL 复制ӞCapture E序d DB2 恢复日志以获取对指定源表的更攏V该E序更改保存到传输表格中,也称作变化数据表Qchanged data tableQ,Apply E序q行d更改q应用于目标事务Q见??br /><p align="center"><img alt="" src="http://www.pconline.com.cn/pcjob/other/data/db2/0607/pic/eyrgkwz1.jpg" border="0" /></p><p><br /><br /><br />  ?QSQL复制的结?br /><br />  WebSphere II 全球信息集成复制Q通过不同数据库之间的复制Q有效的利用了数据资源,为提高效率提供了良好的^台?br /><br />  DB2 与非 DB2 数据库之间的复制需要用?WebSphere II。本文力争通过复制实例让读者对不同数据库之间的复制有一个整体的概念?br /><br />二、动?br /><br />  商业上出于很多原因用复Ӟ可以归纳为:(x)<br /><br />分散Q把数据分散到各个位|; <br />整合Q把其他位置的数据联合v来; <br />交换Q与其他位置q行双向的数据交换; <br />灉|应用Q对上面提到的方式进行一些改变或者结合?br /><br />   联合 (Federated) 数据库系l的诞生Q利用了现有的数据资源,把不同商业数据库软g的数据整合到一P很大E度的提高了数据利用率。联合数据库可以用一个SQL语句对分布在 不同地点的多U数据源发出h。联合数据库pȝ可以把本地表和远E数据源联接hQ就像数据都在本CPq且可以通过Ҏ(gu)据源q行分布h来提高数据源 处理能力Q还可以通过在联合服务器处理部分分布h来补充数据源?SQL 限制?br /><br />  联合数据库具有两个与其他应用服务器不同的特点Q?br /><br />联合服务器可以被配置为接收全部或接收部分针对数据源的h。联合服务器把这些请求分散到数据源?<br />与其他应用服务器一P一个联合服务器?DRDA 通信协议Q例?SNA ?TCP/IPQ与 DB2 家族实例通信。然而,与其他应用服务器不同的是Q与?DB2 家族实例通信时用其他协议?br /><br />  ?描述了联合数据库pȝ的设|流E:(x)<br /></p><p align="center"><img alt="" src="http://www.pconline.com.cn/pcjob/other/data/db2/0607/pic/eyrgkwz2.jpg" border="0" /></p><br />  ?Q联合数据库pȝ的设|流E?br /><br /><br />   WebSphere II 包括两种包装器(WrapperQ,一Uؓ(f)关系型包装器Q负责DB2 UDB, Informix, Oracle, Microsoft SQL Server, Sybase, ODBC, OLE DB {数据的复制。另一Uؓ(f)非关pd包装器,负责 Flatfile, Excel, XML {非关系型数据的复制?br /><br />  包装器定义了一个负责本地数据库与远E数据库通信的库。包装器? 行很多Q务,比如Q它可以q接到数据源Q包装器应用了数据源的标准连接API。它q可以给数据源提交请求。联合数据库pȝ可以操作q程联合pȝ的表。远E? 表在本地联合数据库中虚拟存在Q客户应用程序可以操作这些虚拟表Q但是它们真正存在于q端数据库中。每个远E虚拟数据库Q把联合数据库当作数据库客户端, 他们只对数据库客L(fng)的请求有回应。因此联合数据库需要下载各U远E数据库的客L(fng)?br /><br />一个联合系l的构造,需要一个作合服务器?DB2 实例Q一个作合数据库的数据库Q一个或多个数据源,和可以存取数据库和数据源的客P用户和应用)。如果要完成q程不同数据库之间的复制Q还需要应用DB2的数据复制功能?br /><br />IBM DB2 复制Q在一些^C被称为数据传播)是一个从一个位|到另一个位|复?DB2 ?或其他数据库厂商数据的强大的Q灵zȝ工具。IBM的复制支持数据{换,数据q接和过滤数据。可以在不同的^C间搬q数据,也可以把数据分散C? 的地Ҏ(gu)从分散的地方把数据聚合到一个地斏V可以在不同的系l之间交换数据?br /><br />  IBM复制由四个主要部分组成:(x)理 (Administrator)QCaptureQApplyQ警报监视器 (Alert Monitor)?br /><br />  理的部分主要通过复制中心的图形界面来实现。通过复制中心可以定义复制源,定义从数据源到目标数据的地图。它也用来管理和监控本地和远E的 Capture ?Apply q程。从?中可以看出复制中心图形界面对其他几个部分的支持关pR?br /><br /><br />  ?Q复制中心的应用<br /><br /><p align="center"><img alt="" src="http://www.pconline.com.cn/pcjob/other/data/db2/0607/pic/eyrgkwz3.jpg" border="0" /></p><br />   在源数据服务器上q行?Capture E序可以获取 DB2 源数据表中的变化。DB2 的源数据服务器可以ؓ(f) DB2 ?z/os, os/390 上的版本 6Q??Q也可以?iseries ?os/400 V5R2Q或 DB2 ?Windows, Unix pȝ中的版本 8。当定义数据源的时候会(x)自动生成相应的触发器 (Triggers)Q可以用来捕h据源的变化。要复制的数据可以在 Capture q程中通过选择列来q行qo(h)。被捕获的更改信息首先存攑ֈ本地的源数据所在的数据库的表中q且当更改应用到目标数据中之后会(x)自动删除?br /><br />   当对源表q行改动ӞDB2 把相关的记录写入日志。这些日志服务于数据库发现和复制。Capture E序通过数据库自动连接ƈ获取日志记录。每个源表都有相应的 CD (change data) 表来获取数据的变化。当定义一个复制数据源Ӟ复制中心自动生成 CD 表?br /><br />对于 Apply 部分Q捕L(fng)改变通过 Apply E序应用到目标表中。Apply E序可以在Q何服务器上运行ƈ且必d所用到的源服务器和目标服务器都有连通性。数据可以通过列,行进行过滤,可以q行合ƈQ例如通过视图Q,也可以在 Apply q程中通过 SQL 表达式进行传送。DB2 与其他相关的数据间进行复制的时候,必须通过联合数据库系l来q行늧的创建。在本地机器上需要安装关pd包装器和非关pd包装器。对于本例中 db2<->ORACLE之间的复Ӟ需要安装关pd包装器。见??br /><br />  ?Q进行远E复制关pd<br /><p align="center"><img alt="" src="http://www.pconline.com.cn/pcjob/other/data/db2/0607/pic/eyrgkwz4.jpg" border="0" /></p><p><br /><br />  报警监视器用来进行对Capture和Apply部分的错误监控?/p><br /><p><br /></p><p><br /></p><br /><img src ="http://m.tkk7.com/alex/aggbug/60409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-07-27 19:54 <a href="http://m.tkk7.com/alex/archive/2006/07/27/60409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]在Oracle里设|访问多个SQL Serverhttp://m.tkk7.com/alex/archive/2006/07/27/60408.htmlAlexAlexThu, 27 Jul 2006 11:49:00 GMThttp://m.tkk7.com/alex/archive/2006/07/27/60408.htmlhttp://m.tkk7.com/alex/comments/60408.htmlhttp://m.tkk7.com/alex/archive/2006/07/27/60408.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/60408.htmlhttp://m.tkk7.com/alex/services/trackbacks/60408.html 如何在Oracle里设|访问多个SQL Server数据库?假设我们要在ORACLE里同时能讉KSQL Server里默认的pubs和Northwind两个数据库?

1? 在安装了ORACLE9i Standard Edition或者ORACLE9i Enterprise Edition的windows机器?IP:192.168.0.2), 产品要选了透明|关(Oracle Transparent Gateway)里访问Microsoft SQL Server数据?/b>

$ORACLE9I_HOME\tg4msql\admin下新写initpubs.ora和initnorthwind.ora配置文g.
initpubs.ora内容如下:
HS_FDS_CONNECT_INFO="SERVER=SQLSERVER_HOSTNMAE;DATABASE=pubs"
HS_DB_NAME=pubs
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
initnorthwind.ora内容如下:
HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=Northwind"
HS_DB_NAME=Northwind
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

$ORACLE9I_HOME\network\admin 下listener.ora内容如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = test9)
(ORACLE_HOME = d:\oracle\ora92)
(SID_NAME = test9)
)
(SID_DESC=
(SID_NAME=pubs)
(ORACLE_HOME=d:\Oracle\Ora92)
(PROGRAM=tg4msql)
)
(SID_DESC=
(SID_NAME=northwind)
(ORACLE_HOME=d:\Oracle\Ora92)
(PROGRAM=tg4msql)
)
)


重启动这台做gateway的windows机器?IP:192.168.0.2)TNSListener服务.

(凡是按此步骤新增可访问的SQL Server数据库时QTNSListener服务都要重启?

2、ORACLE8IQORACLE9I的服务器端配|tnsnames.ora, d下面的内?

pubs =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = pubs)
)
(HS = pubs)
)

northwind =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = northwind)
)
(HS = northwind)
)
保存tnsnames.ora?在命令行?br /> tnsping pubs
tnsping northwind


出现cM提示Q即为成?

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
(PORT = 1521))) (CONNECT_DATA = (SID = pubs)) (HS = pubs))
OKQ?0毫秒Q?br />Attempting to contact (DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
(PORT = 1521))) (CONNECT_DATA = (SID = northwind)) (HS = northwind))
OKQ?0毫秒Q?/ccid_code>


讄数据库参数global_names=false?

讄global_names=false不要求徏立的数据库链接和目的数据库的全局名称一致。global_names=true则要? 多少有些不方ѝ?

oracle9i和oracle8i都可以在DBA用户下用SQL命o(h)改变global_names参数

alter system set global_names=false;


建立公有的数据库链接:

create public database link pubs 
connect to testuser identified by testuser_pwd using 'pubs';
create public database link northwind
connect to testuser identified by testuser_pwd using 'northwind';
(假设SQL Server下pubs和northwind已有_权限的用L(fng)陆testuser,
密码为testuser_pwd)


讉KSQL Server下数据库里的数据:

select * from stores@pubs;
...... ......
select * from region@northwind;
...... ......


3、用时的注意事?/b>

ORACLE通过讉KSQL Server的数据库链接Ӟ用select * 的时候字D名是用双引号引h的?

例如Q?

create table stores as select * from stores@pubs;
select zip from storesQ?br />ERROR 位于W?1 ?
ORA-00904: 无效列名
select "zip" from stores;
zip
-----
98056
92789
96745
98014
90019
89076


已选择6行?

用SQL Navigator或Toad看从SQL Server转移到ORACLE里的表的语句?

CREATE TABLE stores
("stor_id" CHAR(4) NOT NULL,
"stor_name" VARCHAR2(40),
"stor_address" VARCHAR2(40),
"city" VARCHAR2(20),
"state" CHAR(2),
"zip" CHAR(5))
PCTFREE 10
PCTUSED 40
INITRANS 1
MAXTRANS 255
TABLESPACE users
STORAGE (
INITIAL 131072
NEXT 131072
PCTINCREASE 0
MINEXTENTS 1
MAXEXTENTS 2147483645
)
/


ȝ:

WINDOWS下ORACLE9i|关服务器在$ORACLE9I_HOME\tg4msql\admin目录下的initsqlserver_databaseid.ora

WINDOWS下ORACLE9i|关服务器listener.ora里面

(SID_DESC=
(SID_NAME=sqlserver_databaseid)
(ORACLE_HOME=d:\Oracle\Ora92)
(PROGRAM=tg4msql)
)
UNIX或WINDOWS下ORACLE8I,ORACLE9I服务器tnsnames.ora里面
northwind =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sqlserver_databaseid)
)
(HS = sqlserver_databaseid)
)


sqlserver_databaseid一致才?


Alex 2006-07-27 19:49 发表评论
]]>
[转]优化Oracle库表设计的若q方?/title><link>http://m.tkk7.com/alex/archive/2006/07/19/59052.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Wed, 19 Jul 2006 10:16:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/07/19/59052.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/59052.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/07/19/59052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/59052.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/59052.html</trackback:ping><description><![CDATA[ <p>key words: oracle优化 优化oracle  表设计优?powerdesigner<br /><font class="f14" id="zoom"><strong></strong></font></p> <p> <font class="f14" id="zoom"> <strong> <br /> </strong> </font> </p> <p> <font class="f14" id="zoom"> <strong>前言<br /><br /></strong>l? 大多数的Oracle数据库性能问题都是׃数据库设计不合理造成的,只有部分问题根植于Database Buffer、Share Pool、Redo Log Buffer{内存模块配|不合理QI/O争用QCPU争用{DBA职责范围上。所以除非是面对一个业已完成不可变更的pȝQ否则我们不应过多地关注点 投向内存、I/O、CPU{性能调整目上,而应x数据库表本n的设计是否合理,库表设计的合理性才是程序性能的真正执牛而?br /><br />合理的数据库设计需要考虑以下的方面:(x)<br /><br />·业务数据以何U方式表达。如一个员工有多个EmailQ你可以在T_EMPLOYEE表中建立多个Email字段如email_1、email_2?email_3Q也可以创徏一个T_EMAIL子表来存储,甚至可以用逗号分隔开多个Email地址存放在一个字D中?br /><br />·数据以何U方式物理存储。如大表的分区,表空间的合理设计{?br /><br />·如何建立合理的数据表索引。表索引几乎是提高数据表查询性能最有效的方法,Oracle拥有cd丰富的数据表索引cdQ如何取舍选择昑־特别重要?br /><br />? 文我们将目光主要聚焦于数据表的烦(ch)引上Q同时也提?qing)其他两点的内容。通过对一个简单的库表设计实例的分析引计中的不Iq一Ҏ(gu)。考虑到手工编? 库表的SQL脚本原始且低效,我们用目前最行的库表设计工具PowerDesigner 10来讲q表设计的过E,所以在本文中你q会(x)了解C些相关的PowerDesigner的用技巧?br /><br /><strong>一个简单的例子</strong><br /><br />某个开发h员着手设计一个订单的pȝQ这个系l中有两个主要的业务表,分别是订单基本信息表和订单条目表Q这两张表具有主从关pȝ表,其中T_ORDER是订单主表,而T_ORDER_ITEM是订单条目表。数据库设计人员的设计成果如?1所C:(x)<br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 554px; height: 116px;" alt="合理设计优化Oracle库表设计的若q方? src="http://www.51cto.com/files/uploadimg/20051031/1736190.gif" border="1" hspace="0" /><br /><br />?1 订单M?/div></td></tr></tbody></table><br /><br />ORDER_ID 是订单号Qؓ(f)T_ORDER的主键,通过名ؓ(f)SEQ_ORDER_ID的序列生键|而ITEM_ID是T_ORDER_ITEM表的主键Q通过名ؓ(f) SEQ_ORDER_ITEM的序列生键|T_ORDER_ITEM通过ORDER_ID外键兌到T_ORDER表?br /><br />需求文指单记录将通过以下两种方式来查询数据:(x)<br /><br />·CLIENT + ORDER_DATE+IS_SHPPEDQ根?客户Q订货日?是否发货"条g查询订单?qing)订单条目?br /><br />·ORDER_DATE+IS_SHIPPEDQ根?订货日期+是否发货"条g查询订单?qing)订单条目?br /><br />? 据库设计人员Ҏ(gu)q个要求Q在T_ORDER表的CLIENT? ORDER_DATE?qing)IS_SHPPED三字D上建立了一个复合烦(ch)引IDX_ORDER_COMPOSITEQ在T_ORDER_ITEM为外? ORDER_ID建立IDX_ORDER_ITEM_ORDER_ID索引?br /><br />让我们看一下该份设计的最lSQL脚本Q?br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>/*订单?/ <br /><br />create table T_ORDER (<br /><br />ORDER_ID NUMBER(10) not null, <br /><br />ADDRESS VARCHAR2(100), <br /><br />CLIENT VARCHAR2(60), <br /><br />ORDER_DATE CHAR(8), <br /><br />IS_SHIPPED CHAR(1), <br /><br />constraint PK_T_ORDER primary key (ORDER_ID)<br /><br />);<br /><br />create index IDX_CLIENT on T_ORDER (<br /><br /> CLIENT ASC, <br /><br /> ORDER_DATE ASC, <br /><br /> IS_SHIPPED ASC);<br /><br />/*订单条目子表*/<br /><br />create table T_ORDER_ITEM (<br /><br /> ITEM_ID NUMBER(10) not null,<br /><br /> ORDER_ID NUMBER(10), <br /><br /> ITEM VARCHAR2(20), <br /><br /> COUNT NUMBER(10), <br /><br /> constraint PK_T_ORDER_ITEM primary key (ITEM_ID)<br /><br />);<br /><br />create index IDX_ORDER_ITEM_ORDER_ID on T_ORDER_ITEM (<br /><br /> ORDER_ID ASC);<br /><br /> alter table T_ORDER_ITEM add constraint FK_T_ORDER__REFERENCE_T_ORDER foreign key (ORDER_ID) references T_ORDER (ORDER_ID);</td></tr></tbody></table></font> <font class="f14" id="zoom"> </font> </p> <p> <font class="f14" id="zoom"> <br /> <br />我们承认在ER关系上,q䆾设计q不存在的缺P但却存在以下有待优化的地方:(x)<br /><br />·没有表数据和烦(ch)引数据存储到不同的表I间中,而不加区别地它们存储到同一表空间里。这P不但?x)造成I/O竞争Q也为数据库的维护工作带来不ѝ?br /><br />·ORACLE?x)自动?f)表的主键列创Z个普通B-Tree索引Q但׃q两张表的主键值都通过序列提供Q具有严格的序性(升序或降序)Q此时手工ؓ(f)其指定一个反键烦(ch)引(reverse key indexQ将更加合理?br /><br />· 在子表T_ORDER_ITEM外键列ORDER_ID上徏立的IDX_ORDER_ITEM_ORDER_ID的普通B-Tree索引非常适合讄为压 ~型索引Q即建立一个压~型的B-Tree索引。因Z份订单会(x)对应多个订单条目Q这意味着T_ORDER_ITEM表存在许多同值的 ORDER_ID列|通过其索引指定为压~型的B-Tree索引Q不但可以减IDX_ORDER_ITEM_ORDER_ID所需的存储空_(d)q将 提高表操作的性能?br /><br />·企图仅通过建立一个包?字段IDX_ORDER_COMPOSITE复合索引满如前所q的两种查询条g方式的烦(ch)引是有问题的Q事实上使用ORDER_DATE+IS_SHIPPED复合条g的查询将利用不到IDX_ORDER_COMPOSITE索引?</font> </p> <p> <!--StartFragment --> <font class="f14" id="zoom"> <font class="f14" id="zoom"><strong>优化设计<br /><br /></strong>1、将表数据和索引数据分开表空间存?br /><br />1.1 表数据和索引Z需要用独立的表空?br /><br />Oracle 强烈建立QQ何一个应用程序的库表臛_需要创Z个表I间Q其中之一用于存储表数据,而另一个用于存储表索引数据。因为如果将表数据和索引数据攑֜一P 表数据的I/O操作和烦(ch)引的I/O操作生媄(jing)响系l性能的I/O竞争Q降低系l的响应效率。将表数据和索引数据存放在不同的表空间中Q如一个ؓ(f) APP_DATAQ另一个ؓ(f)APP_IDXQ,q在物理层面这两个表空间的数据文g攑֜不同的物理磁盘上Q就可以避免q种竞争了?br /><br />拥有独立的表I间Q就意味着可以独立Cؓ(f)表数据和索引数据提供独立的物理存储参敎ͼ而不?x)发生相互?jing)响,毕竟表数据和索引数据拥有不同的特性,而这些特性又直接影响了物理存储参数的讑֮?br /><br />此外Q表数据和烦(ch)引数据独立存储,q会(x)带来数据理和维护上的方面。如你在q移一个业务数据库ӞZ降低数据大小Q可以只q出表数据的表空_(d)在目标数据库中通过重徏索引的方式就可以生成索引数据了?br /><br />1.2 表数据和索引使用不同表空间的SQL语法<br /><br />指定表数据及(qing)索引数据存储表空间语句最单的形式如下?br /><br />表数据存储在APP_DATA表空间里Q?br /><br />create table T_ORDER ( ORDER_ID NUMBER(10) not null, ?tablespace APP_DATA;<br /><br />烦(ch)引数据存储在APP_IDX表空间里Q?br /><br />create index IDX_ORDER_ITEM_ORDER_ID on T_ORDER_ITEM ( ORDER_ID ASC)tablespace APP_IDX;<br /><br />1.3 PowerDesigner中如何操?br /><br />1) 首先Q必dZ个表I间。通过Model->Tablespace...在List of Tablespaces中创Z个表I间Q?br /><br /></font></font> </p> <table align="center" border="0" width="90%"> <tbody> <tr> <td> <div align="center"> <img style="width: 518px; height: 335px;" alt="合理设计优化Oracle库表设计的若q方?2)" src="http://www.51cto.com/files/uploadimg/20051031/1736191.jpg" border="1" hspace="0" /> <br /> <br />?2 创徏表空?/div> </td> </tr> </tbody> </table> <p> <font class="f14" id="zoom"> <font class="f14" id="zoom"> <br /> <br />2) 为每张表指定表数据存储的表空间。在设计Z双击表,打开Table Properties设计H口Q切换到options ,按图 3所C指定表数据的存储表I间?br /><br /></font> </font> </p> <table align="center" border="0" width="90%"> <tbody> <tr> <td> <div align="center"> <img style="width: 554px; height: 338px;" alt="合理设计优化Oracle库表设计的若q方?2)" src="http://www.51cto.com/files/uploadimg/20051031/1736192.jpg" border="1" hspace="0" /> <br /> <br />?3 指定表数据的存储表空?/div> </td> </tr> </tbody> </table> <p> <font class="f14" id="zoom"> <font class="f14" id="zoom"> <br /> <br />3) 为每个烦(ch)引指定烦(ch)引数据的存储表空间。在Table Properties中切换到Indexes,在这里列Z表的所有烦(ch)引,双击需讄表空间的索引Q在弹出的Index PropertiesH口中切换到Options,按如下方式指定烦(ch)引的存储表空间?/font> </font> </p> <p> <br /> </p> <p> <span id="w22kcmq" class="top11"> <br /> <table align="center" border="0" width="90%"> <tbody> <tr> <td> <div align="center"> <img style="width: 498px; height: 382px;" alt="合理设计优化Oracle库表设计的若q方?2)" src="http://www.51cto.com/files/uploadimg/20051031/1736193.jpg" border="1" hspace="0" /> <br /> <br />?4 指定索引数据的存储表I间</div> </td> </tr> </tbody> </table> <p> <br /> <br />表I间的问题g展一下:(x)一个应用系l库表的表空间可以进行更_的划分?br /><br />首先Q如果表中存在LOBcd的字D,有ؓ(f)其指定一个特定的表空_(d)因ؓ(f)LOBcd的数据在物理存储l构的管理上和一般数据的{略有很大的不同Q将其放在一个独立的表空间中Q就可方便地讄其物理存储参C?br /><br />? ơ,需要考虑库表数据的DML操作Ҏ(gu):(x)Ҏ(gu)DMLQINSERT,UPDATE,DELETEQ操作频J程度,几乎不发生MDML操作的数据放在独 立的表空间中Q因为极DML操作的表可设|符合其Ҏ(gu)的物理参数Q如PCTFREE可置?Q其BUFFER_POOL指定为KEEPQ以便将数据~存 在KEEP数据~存Z{等Q不一而?br /><br />此外Q还可以考虑按业务需要将不同的业务模块分开存放Q这主要是考虑到备份问题。假设我们有一部分业务数据重要性很强,而其他的业务数据重要性相对较弱,q样可以将两者分开存储Q以便设|不同的备䆾{略?<br /><br />当然Q无节制的细化表I间也将带来理上和部v上的复杂Q根据业务需求合理地规划表空间以辑ֈ理和性能上的最?jng)_往需要更多的权衡?/p> <p> <!--StartFragment --> <font class="f14" id="zoom">2、显式ؓ(f)主键列徏立反向键索引<br /><br />2.1 反向键烦(ch)引的原理和用?br /><br />? 们知道Oracle?x)自动?f)表的主键列徏立烦(ch)引,q个默认的烦(ch)引是普通的B-Tree索引。对于主键值是按顺?递增或递减)加入的情况,默认的B- Tree索引q不理想。这是因为如果烦(ch)引列的值具有严格顺序时Q随着数据行的插入Q烦(ch)引树(wi)的层U增长很快。搜索烦(ch)引发生的I/Odơ数和烦(ch)引树(wi)的层U数 成正比,也就是说Q一具?个层U的B-Tree索引Q在最l读取到索引数据时最多可能发生多?ơI/O操作。因而,减少索引的层U数是烦(ch)引性能调整 的一个重要方法?br /><br />如果索引列的数据以严格的有序的方式插入,那么B-Tree索引?wi)将变成一不对称?歪树(wi)"Q如?5所C:(x)<br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 212px; height: 209px;" alt="合理设计优化Oracle库表设计的若q方?3)" src="http://www.51cto.com/files/uploadimg/20051031/1736194.gif" border="1" hspace="0" /><br /><br />?5不对U的B-Tree索引</div></td></tr></tbody></table><br /><br />而如果烦(ch)引列的数据以随机值的方式插入Q我们将得到一趋向对U的索引?wi),如?6所C:(x)<br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 201px; height: 119px;" alt="合理设计优化Oracle库表设计的若q方?3)" src="http://www.51cto.com/files/uploadimg/20051031/1736195.gif" border="1" hspace="0" /><br /><br />?6对称的B-Tree索引 </div></td></tr></tbody></table><br /><br />比较?5和图 6Q在?5中搜索到A块需要进?ơI/O操作Q而图 6仅需?ơI/O操作?br /><br />? 然烦(ch)引列数据从序列中获取Q其有序性无法规避,但在建立索引ӞOracle允许对烦(ch)引列的D行反向,即预先对列D行比特位的反向,? 1000,10001,10011,10111,1100l过反向后的值将?001,1001,1101,0011。显然经q位反向处理的有序数据变? 比较随机了,q样所得到的烦(ch)引树(wi)比较对Uͼ从而提高表的查询性能?br /><br />但反向键索引也有它局限性:(x)如果在WHERE语句中,需要对索引列的 D行范围性的搜烦(ch)Q如BETWEEN?lt;?gt;{,其反向键索引无法使用Q此ӞOracle执行全表扫描;只有对反向键索引列进? <> ?= 的比较操作时Q其反向键烦(ch)引才?x)得C用?br /><br />2.2 反向键烦(ch)引的SQL语句<br /><br />回到我们上面的例子,׃T_ORDER和T_ORDER_ITEM的主键值来源于序列Q主键值是有严格顺序的Q所以我们应该摒弃默认的Oracle所提供的烦(ch)引,而采取显式ؓ(f)主键指定一个反向键索引的方式?br /><br />ORDER_ID为T_ORDER表的主键Q主键名为PK_ORDERQ我们ؓ(f)ORDER_ID列上建立一个反向键索引IDX_ORDER_IDQƈ使PK_ORDER_ID使用q个索引Q其SQL语句如下Q?br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>create table T_ORDER ( <br /><br /> ORDER_ID NUMBER(10) not null,<br /><br /> CLIENT VARCHAR2(60), <br /><br /> ADDRESS VARCHAR2(100),<br /><br /> ORDER_DATE CHAR(8));<br /><br />create unique index IDX_ORDER_ID on T_ORDER ( ORDER_ID ASC) reverse;alter table T_ORDER add constraint PK_ORDER primary key (ORDER_ID) using index IDX_ORDER_ID;</td></tr></tbody></table><br /><br />要保证创建IDX_ORDER_ID的SQL语句在创建PK_ORDER主键的SQL语句之前Q因Z键需要引用到q个反向键烦(ch)引?br /><br />׃主键列的数据是唯一的,所以ؓ(f)IDX_ORDER_ID加上unique限定Q其成为唯一型的索引?br /><br />2.3 PowerdDesigner如何操作<br /><br />1) 首先Q需要ؓ(f)ORDER_ID列徏立一个反向键索引。打开T_ORDER的Table Properties的窗口,切换到Indexes,新徏一个名为IDX_ORDER_ID的烦(ch)引。填写完索引的名U后Q双击这个烦(ch)引,弹出Index PropertiesH口Q在q个H口的Columns中选择ORDER_ID列。然后,切换到Options,按图 7的方式将其设|ؓ(f)反向键烦(ch)引?br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 546px; height: 428px;" alt="合理设计优化Oracle库表设计的若q方?3)" src="http://www.51cto.com/files/uploadimg/20051031/1736196.jpg" border="1" hspace="0" /><br /><br />?7 讄反向键烦(ch)?/div><div align="center"> </div></td></tr></tbody></table></font></p> <!--StartFragment --> 2) 昑ּ指定主键PK_ORDER使用q个索引。在Table PropertiesH口中切换到Keys,默认情况下,PowerDesigner为T_ORDER所指定的主键名为Key1Q我们将其更名ؓ(f) PK_ORDERQ双击这个主键,弹出Key PropertiesH口Q切换到Options,按图 8的方式ؓ(f)PK_ORDER指定IDX_ORDER_ID?br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 505px; height: 381px;" alt="合理设计优化Oracle库表设计的若q方?4)" src="http://www.51cto.com/files/uploadimg/20051031/1736197.jpg" border="1" hspace="0" /><br /><br />?8 Z键指定特定的索引</div></td></tr></tbody></table><br /><br />不可否认PowerDesigner实是目前业界最强大易用的数据库设计工具Q但很遗憾,当我们ؓ(f)表主键指定一个烦(ch)引时Q其产生的语句在序上有问题Q即创徏主键的语句位于创建烦(ch)引语句之前:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>create table T_ORDER (?;alter table T_ORDER add constraint PK_T_ORDER primary key (ORDER_ID) using index IDX_ORDER_ID;create unique index IDX_ORDER_ID on T_ORDER ( ORDER_ID ASC) reverse;</td></tr></tbody></table><br /><br />我们可以通过对PowerDesigner生成SQL语句的设|进行调_(d)先生成创和烦(ch)引的SQL语句Q再创徏d主键和外键的SQL语句来达到曲U救国的目的Q请看下一步?/span> </p> <p> <span id="auu4u42" class="top11">3)通过菜单Database->Generate Database...调出Database ConfigurationH口Q切换到Keys&Indexes,按图 9讄Q?/span> </p> <p> <br /> <span id="m2my24i" class="top11"> </span> </p> <p> <span id="ois4i4e" class="top11"> <br /> <table align="center" border="0" width="90%"> <tbody> <tr> <td> <div align="center"> <img style="width: 554px; height: 485px;" alt="合理设计优化Oracle库表设计的若q方?4)" src="http://www.51cto.com/files/uploadimg/20051031/1736198.jpg" border="1" hspace="0" /> <br /> <br />?9 讄生成键和索引SQL的选项</div> </td> </tr> </tbody> </table> <br /> <br />q里Q我们将Primary Keys和Foreign keys的选项都取消,而将IndexesN,以达到只生成表的索引SQL语句的目的?br /><br />点击"定"后,生成创徏数据库表?qing)其索引的SQL语句Q运行该SQL创徏数据库后Q再按图 10讄生成d主键和外键的SQL语句Q?br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 554px; height: 486px;" alt="合理设计优化Oracle库表设计的若q方?4)" src="http://www.51cto.com/files/uploadimg/20051031/1736199.jpg" border="1" hspace="0" /><br /><br />?10 生成创徏表主键和外键的SQL语句</div></td></tr></tbody></table><p><br /><br />除此讄外,q必d换到Tables & Views下Q取消所有选项Q避免重新生成创的语句?</p><p><!--StartFragment --> <font class="f14" id="zoom">3、将子表的外键列的烦(ch)引改为压~型<br /><br />3.1 压羃型烦(ch)引的原理和用?br /><br />在前面的例子中,׃一条订单会(x)对应多条订单条目Q所以T_ORDER_ITEM的ORDER_ID字段M(x)出现重复的|如:(x) <br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>ITEM_ID ORDER_ID ITEM COUNT<br /><br />1 100 101 1<br /><br />2 100 104 2<br /><br />3 100 201 3<br /><br />4 200 301 2<br /><br />5 200 401 1<br /><br />6 200 205 3</td></tr></tbody></table><br /><br />在ORDER_ID列上创徏一个普通未压羃的B-Tree索引Q则索引数据的物理上的存储Ş式如下:(x)<br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img alt="合理设计优化Oracle库表设计的若q方?5)" src="http://www.51cto.com/files/uploadimg/20051031/17361910.jpg" border="0" /><br /><br />?11 未进行压~的索引存储</div></td></tr></tbody></table><br /><br />ORDER_ID的重复值在索引块中重复出现Q这样不但增加了存储I间的需求,而且因ؓ(f)查询旉要读取更多的索引数据块,所以查询性能也会(x)降低Q。让我们来看一下经q压~后索引数据的存储方式:(x) <br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img alt="合理设计优化Oracle库表设计的若q方?5)" src="http://www.51cto.com/files/uploadimg/20051031/17361911.jpg" border="0" /><br /><br />?12 q行压羃的烦(ch)引存?/div></td></tr></tbody></table><br /><br />压羃型的索引消除了重复的索引|相同烦(ch)引列值所兌的ROWID存储在一赗这P不但节省了存储空_(d)查询效率也提高了Q真可谓两全齐美了?br /><br />对象T_ORDER和T_ORDER_ITEMq样的主从表q行查询Ӟ一般情况下Q我们都必须通过外键查询出子表所有关联的记录Q所以在子表的外键上建立压羃型的索引是非帔R合的?br /><br />3.2 压羃型烦(ch)引的SQL语句<br /><br />创徏压羃型烦(ch)引的SQL语句非常单,在T_ORDER_ITEM的ORDER_ID上创建压~型索引的SQL如下所C:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>create index IDX_ORDER_ITEM_ORDER_ID on T_ORDER_ITEM ( ORDER_ID ASC) compress;</td></tr></tbody></table><br /><br />需要在创徏索引的语句后附上compress关键字就可以了?br /><br />3.3 PowerDesigner如何创徏压羃型烦(ch)?br /><br />1) 打开T_ORDER_ITEM表的Table Properties的窗口,切换到Indexes,为ORDER_ID列创Z个名为IDX_ORDER_ITEM_ORDER_ID的烦(ch)引?br /><br />2) 双击IDX_ORDER_ITEM_ORDER_ID弹出Index PropertiesH口Q切换到Options,按图 13烦(ch)引设|ؓ(f)压羃型:(x)<br /><br /><table align="center" border="0" width="90%"><tbody><tr><td><div align="center"><img style="width: 455px; height: 403px;" alt="合理设计优化Oracle库表设计的若q方?5)" src="http://www.51cto.com/files/uploadimg/20051031/17361912.jpg" border="1" hspace="0" /><br /><br />?13 烦(ch)引指定ؓ(f)压羃?/div></td></tr></tbody></table><br /><br />4、徏立满需求的复合键烦(ch)?<br /><br />设计人员希望通过T_ORDER表上的IDX_ORDER_COMPOSITE复合索引满以下两种l合条g的查询:(x)<br /><br />·CLIENT + ORDER_DATE + IS_SHIPPED<br /><br />·ORDER_DATE + IS_SHIPPED<br /><br />为方侉Kqͼ我们特地IDX_ORDER_COMPOSITE的创建SQL语句再次列出Q?br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>create index IDX_ORDER_COMPOSITE on T_ORDER ( CLIENT ASC, ORDER_DATE ASC, IS_SHIPPED ASC);</td></tr></tbody></table><br /><br />事实上,在CLIENT + ORDER_DATE + IS_SHIPPED 三列上所执行的复合条件查询会(x)应用到这个烦(ch)引,而在ORDER_DATE + IS_SHIPPED列上所执行的复合查询不?x)用这个?ch)引,因而将D一个全表扫描的操作?br /><br />可以用许多工h了解查询语句的执行计划,通过SET AUTOTRACE ON来查询以上两个复合查询的执行计划Q?br /><br />打开SQL/PlusQ输入以下的语句Q?br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SQL> set autotrace on<br /><br />SQL> select * from t_order where CLIENT = '1' and ORDER_DATE='1' and IS_SHIPPED='1'; </td></tr></tbody></table><br /><br />分析得到的执行计划ؓ(f)Q?br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SELECT STATEMENT Optimizer=CHOOSETABLE ACCESS (BY INDEX ROWID) OF 'T_ORDER' INDEX (RANGE SCAN) OF 'IDX_ORDER_COMPOSITE' (NON-UNIQUE)</td></tr></tbody></table><br /><br />可见Oracle先利用IDX_ORDER_COMPOSITE得到满条g的记录ROWIDQ再通过ROWIDq回记录?br /><br />而下面查询语句:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SQL> select * from t_order where ORDER_DATE='1' and IS_SHIPPED='1'</td></tr></tbody></table><br /><br />的执行计划则为:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SELECT STATEMENT Optimizer=CHOOSE TABLE ACCESS (FULL) OF 'T_ORDER'</td></tr></tbody></table><br /><br />很明显,Oracle在T_ORDER表上执行了一个全表扫描的操作Q没有用到IDX_ORDER_COMPOSITE索引?br /><br />对复合列索引Q我们得个结论:(x)<br /><br />假设在COL_1,COL_2,?COL_nq些列上建立了一个复合烦(ch)引:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>create index IDX _COMPOSITE on TABLE1<br /><br />{<br /><br />COL_1,<br /><br />COL_2,<br /><br />?<br /><br />COL_n<br /><br />} </td></tr></tbody></table><br /><br />则只有WHERE语句上包含COL_1(复合索引的第一个字D?的查询才?x)用这个复合?ch)引,而未包含COL_1的查询则不会(x)使用q个复合索引?br /><br />回到我们的例子,如何建立满CLIENT + ORDER_DATE + IS_SHIPPED和ORDER_DATE + IS_SHIPPED两种查询的烦(ch)引呢Q?br /><br />? 虑到IS_SHIPPED列基数很,只有两个可能的|(x)0,1。在q种情况下,有两U方案:(x)W一Q分别ؓ(f)CLIENT + ORDER_DATE + IS_SHIPPED和ORDER_DATE + IS_SHIPPED建立一个复合烦(ch)引;W二Q分别在CLIENT和ORDER_DATE列上建立一个烦(ch)引,而IS_SHIPEED列不建立索引?br /><br />W一U方案的查询效率最快,但因为CLIENT和ORDER_DATE在烦(ch)引中?x)重复出Cơ,占用较大的存储空间。第二种Ҏ(gu)CLIENT和ORDER_DATE不会(x)在烦(ch)引存储出Cơ,较ؓ(f)节省I间Q查询效率比之于W一U方案会(x)E低一些,但媄(jing)响不大?<br /><br />我们采用W二U方案ؓ(f)CLIENT和ORDER_DATE分别创徏索引IDX_CLIENT和IDX_ORDER_DATEQ组合查询条件ؓ(f)CLIENT + ORDER_DATE + IS_SHIPPED时的执行计划为:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SELECT STATEMENT Optimizer=CHOOSE TABLE ACCESS (BY INDEX ROWID) OF 'T_ORDER' AND-EQUAL INDEX (RANGE SCAN) OF 'IDX_CLIENT' (NON-UNIQUE) INDEX (RANGE SCAN) OF 'IDX_ORDER_DATE' (NON-UNIQUE)</td></tr></tbody></table><br /><br />而组合条件ؓ(f)ORDER_DATE + IS_SHIPPED时的执行计划为:(x)<br /><br /><table align="center" bgcolor="#e3e3e3" border="1" bordercolor="#cccccc" width="90%"><tbody><tr><td>SELECT STATEMENT Optimizer=CHOOSE TABLE ACCESS (BY INDEX ROWID) OF 'T_ORDER' INDEX (RANGE SCAN) OF 'IDX_ORDER_DATE' (NON-UNIQUE)</td></tr></tbody></table><br /><br />通过q样的改造,我们得到了一个满两U组合查询的执行计划?br /><br /><strong>ȝ</strong><br /><br />贯穿本文的订单主从表实例l构上很单,但是其粗p的设计包含了许多问题,q也是许多对Oracle物理存储l构没有很好理解的数据库设计师容易忽视的地方?br /><br />在一般情况下Q这L(fng)设计q不?x)导致严重系l的性能问题Q但是精益求_是每一位优U软g设计师的品质Q此外,对于设计师,一定要清楚q样一条规律:(x)对于{质的性能提升Q在~码层面往往需要比设计层面付出更多的艰辛?br /><br />在Oracle中提高数据库的性能需要考虑的问题,注意的误很多Q本文涵盖是一些最常见的问题。下面,我们提高数据库操作性能Ҏ(gu)?qing)一些误Z个小l:(x) <br /><br />·对于大表Q可以考虑创徏分区表,分区表有范围分区、散列分区、列表分区和散列分区几种Q通过它可以达到化大表为小表的目的?br /><br />·考虑适量的数据冗余,如一个业务表有一个审批状态,审批需要经q多步,每一步对应审批表的一条记录,最后审批的那条记录军_了业务的状态。我们大可在业务表中存放一个审批状态的标志Q以取消每次需要通过兌审批表获取业务审批状态的复杂的关联表查询?br /><br />· 不要做太多的兌表查询,一些几乎不发生数据变动的表码表Q如性别Q学历,婚姻状态等表码表,可以考虑在应用程序启动时一ơ性地下蝲到应用程序的内存中缓 存v来,在从数据库获取结果集后,再由E序利用q些~存的表码表数据来翻译这些表码字D,而不要在数据库中通过表间的关联查询方式来译q些字段?<br /><br />· 常看C些o(h)我瞠目的设计Q在需要进行频JDML(INSERT,UPDATE,DELETE)操作的表的某些基C的字D(如性别Q婚ȝ态)上创Z 囄(ch)引。位囄(ch)引是好东西,但它是有使用范围的,在OLTPpȝ中,需要进行频JDML操作的表中不应该出现位图索引Q位囄(ch)引只适用于几乎不q行DML 操作Q只q行查询的DSSpȝ中。此外,聚簇和烦(ch)引组l表也都更适合DSSpȝQ而非OLTPpȝ?/font> Q完Q?/p></span> </p> <img src ="http://m.tkk7.com/alex/aggbug/59052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-07-19 18:16 <a href="http://m.tkk7.com/alex/archive/2006/07/19/59052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]监控Oracle数据库的常用shell脚本http://m.tkk7.com/alex/archive/2006/07/18/58801.htmlAlexAlexTue, 18 Jul 2006 08:08:00 GMThttp://m.tkk7.com/alex/archive/2006/07/18/58801.htmlhttp://m.tkk7.com/alex/comments/58801.htmlhttp://m.tkk7.com/alex/archive/2006/07/18/58801.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/58801.htmlhttp://m.tkk7.com/alex/services/trackbacks/58801.html key words: Oracle监控  shell脚本

前言

q篇文章介绍了DBA每天在监控Oracle? 据库斚w的职责,讲述了如何通过shell脚本来完成这些重复的监控工作。本文首先回了一些DBA常用的Unix命o(h)Q以?qing)解释了如何通过Unix Cron来定时执行DBA脚本。同时文章还介绍?个重要的脚本来监控Oracle数据库:(x)

(g)查实例的可用?br />
(g)查监听器的可用?br />
(g)查alert日志文g中的错误信息

在存放log文g的地Ҏ(gu)以前清空旧的log文g

分析table和index以获得更好的性能

(g)查表I间的用情?br />
扑և无效的对?br />
监控用户和事?/p>

DBA需要的Unix基本知识

基本的UNIX命o(h)

以下是一些常用的Unix命o(h)Q?br />
ps--昄q程 grep--搜烦(ch)文g中的某种文本模式 mailx--d或者发送mail cat--q接文g或者显C它们 cut--选择昄的列 awk--模式匚w语言 df--昄剩余的磁盘空?br />
以下是DBA如何使用q些命o(h)的一些例子:(x)

昄服务器上的可用实例:(x)

$ ps -ef | grep smon

oracle 21832 1 0 Feb 24 ? 19:05 ora_smon_oradb1

oracle 898 1 0 Feb 15 ? 0:00 ora_smon_oradb2

dliu 25199 19038 0 10:48:57 pts/6 0:00 grep smon

oracle 27798 1 0 05:43:54 ? 0:00 ora_smon_oradb3

oracle 28781 1 0 Mar 03 ? 0:01 ora_smon_oradb4?/pre>
昄服务器上的可用监听器Q?br />
$ ps -ef | grep listener | grep -v grep

Q译者注Qgrep命o(h)应该加上-i参数Q即grep -i listenerQ?br />
该参数的作用是忽略大写Q因为有些时候listener是大写的Q这时就?x)看不到l果Q?br />
oracle 23879 1 0 Feb 24 ? 33:36 /8.1.7/bin/tnslsnr listener_db1 -inherit

oracle 27939 1 0 05:44:02 ? 0:00 /8.1.7/bin/tnslsnr listener_db2 -inherit

oracle 23536 1 0 Feb 12 ? 4:19 /8.1.7/bin/tnslsnr listener_db3 -inherit

oracle 28891 1 0 Mar 03 ? 0:01 /8.1.7/bin/tnslsnr listener_db4 -inherit
查看Oracle存档目录的文件系l用情?br />
$ df -k | grep oraarch

/dev/vx/dsk/proddg/oraarch 71123968 4754872 65850768 7% /u09/oraarch
l计alter.log文g中的行数Q?br />
$ cat alert.log | wc -l

2984

列出alert.log文g中的全部Oracle错误信息Q?br />
$ grep ORA- alert.log

ORA-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []

ORA-00600: internal error code, arguments: [1881], [25860496], [25857716], []

CRONTAB基本

一个crontab文g中包含有六个字段Q?br />
分钟 0-59

时 0-23

月中的第几天 1-31

月䆾 1 - 12

星期?0 - 6, with 0 = Sunday

Unix命o(h)或者Shell脚本

要编辑一个crontab文gQ输入:(x)Crontab -e

要查看一个crontab文gQ输入:(x)

Crontab -l

0 4 * * 5 /dba/admin/analyze_table.ksh

30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2>&1

在上面的例子中,W一行显CZ一个分析表的脚本在每个星期5?Q?0amq行。第二行昄了一个执行热备䆾的脚本在每个周三和周六的3Q?0a.m.q行?br />
监控数据库的常用Shell脚本

以下提供?个shell脚本覆盖了DBA每日监控工作?0%Q你可能q需要修改UNIX的环境变量?/p>

(g)查Oracle实例的可用?/b>

oratab文g中列Z服务器上的所有数据库

$ cat /var/opt/oracle/oratab


############################################################


## /var/opt/oracle/oratab##


############################################################

oradb1:/u01/app/oracle/product/8.1.7:Y

oradb2:/u01/app/oracle/product/8.1.7:Y

oradb3:/u01/app/oracle/product/8.1.7:N

oradb4:/u01/app/oracle/product/8.1.7:Y
以下的脚本检查oratab文g中列出的所有数据库Qƈ且找数据库的状态(启动q是关闭Q?br />
##############################################################


## ckinstance.ksh ## ###################################################################

ORATAB=/var/opt/oracle/oratab

echo `date`

echo Oracle Database(s) Status `hostname` :

db=`egrep -i :Y|:N $ORATAB | cut -d: -f1 | grep -v # | grep -v *`

pslist=`ps -ef | grep pmon`

for i in $db ; do

echo $pslist | grep ora_pmon_$i > /dev/null 2>$1

if (( $? )); then

echo Oracle Instance - $i: Down

else

echo Oracle Instance - $i: Up

fi

done

使用以下的命令来认该脚本是可以执行的:(x)

$ chmod 744 ckinstance.ksh

$ ls -l ckinstance.ksh

-rwxr--r-- 1 oracle dba 657 Mar 5 22:59 ckinstance.ksh*
以下是实例可用性的报表Q?br />
$ ckinstance.ksh

Mon Mar 4 10:44:12 PST 2002

Oracle Database(s) Status for DBHOST server:

Oracle Instance - oradb1: Up

Oracle Instance - oradb2: Up

Oracle Instance - oradb3: Down

Oracle Instance - oradb4: Up

(g)查Oracle监听器的可用?/b>

以下有一个类似的脚本(g)查Oracle监听器。如果监听器停了Q该脚本会(x)重新启动监听器:(x)

#######################################################################

## cklsnr.sh ##

#######################################################################

#!/bin/ksh

DBALIST=primary.dba@company.com,another.dba@company.com;export DBALIST

cd /var/opt/oracle

rm -f lsnr.exist

ps -ef | grep mylsnr | grep -v grep > lsnr.exist

if [ -s lsnr.exist ]

then

echo

else

echo Alert | mailx -s Listener ‘mylsnr?on `hostname` is down $DBALIST

TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN

ORACLE_SID=db1; export ORACLE_SID

ORAENV_ASK=NO; export ORAENV_ASK

PATH=$PATH:/bin:/usr/local/bin; export PATH

. oraenv

LD_LIBRARY_PATH=${ORACLE_HOME}/lib;export LD_LIBRARY_PATH

lsnrctl start mylsnr

fi

(g)查Alert日志QORA-XXXXXQ?/b>

每个脚本所使用的一些环境变量可以放C个profile中:(x)

####################################################################### 

## oracle.profile ##

#######################################################################

EDITOR=vi;export EDITOR ORACLE_BASE=/u01/app/oracle; export

ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/8.1.7; export

ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export

LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export

TNS_ADMIN NLS_LANG=american; export

NLS_LANG NLS_DATE_FORMAT=‘Mon DD YYYY HH24:MI:SS? export

NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export

ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/

sbin:/usr/openwin/bin:/opt/bin:.; export

PATH DBALIST=primary.dba@company.com,another.dba@company.com;export

DBALIST
以下的脚本首先调用oracle.profile来设|全部的环境变量。如果发CQ何的Oracle错误Q该脚本q会(x)lDBA发送一个警告的email?br />
####################################################################

## ckalertlog.sh ##

####################################################################

#!/bin/ksh

.. /etc/oracle.profile

for SID in `cat $ORACLE_HOME/sidlist`

do

cd $ORACLE_BASE/admin/$SID/bdump

if [ -f alert_${SID}.log ]

then

mv alert_${SID}.log alert_work.log

touch alert_${SID}.log

cat alert_work.log >> alert_${SID}.hist

grep ORA- alert_work.log > alert.err

fi

if [ `cat alert.err|wc -l` -gt 0 ]

then

mailx -s ${SID} ORACLE ALERT ERRORS $DBALIST < alert.err

fi

rm -f alert.err

rm -f alert_work.log

done

清除旧的归档文g

以下的脚本将?x)在log文g辑ֈ90%定w的时候清I旧的归文Ӟ(x)

$ df -k | grep arch

Filesystem kbytes used avail capacity Mounted on

/dev/vx/dsk/proddg/archive 71123968 30210248 40594232 43% /u08/archive

#######################################################################

## clean_arch.ksh ##

#######################################################################

#!/bin/ksh

df -k | grep arch > dfk.result

archive_filesystem=`awk -F ‘{ print $6 }?dfk.result`

archive_capacity=`awk -F ‘{ print $5 }?dfk.result`

if [[ $archive_capacity > 90% ]]

then

echo Filesystem ${archive_filesystem} is ${archive_capacity} filled

# try one of the following option depend on your need

find $archive_filesystem -type f -mtime +2 -exec rm -r {} ;

tar

rman

fi

分析表和索引Q以得到更好的性能Q?/b>

以下我将展示如果传送参数到一个脚本中Q?br />
#################################################################### 

## analyze_table.sh ##

####################################################################

#!/bin/ksh

# input parameter: 1: password # 2: SID

if (($#<1)) then echo "Please enter oracle user password as the first parameter !" exit 0

fi

if (($#<2)) then echo "Please enter instance name as the second parameter!" exit 0

fi

要传入参C执行该脚本,输入Q?br />
$ analyze_table.sh manager oradb1 
脚本的第一部分产生了一个analyze.sql文gQ里面包含了分析表用的语句。脚本的W二部分分析全部的表Q?br />
#####################################################################

## analyze_table.sh ##

#####################################################################

sqlplus -s <
oracle/$1@$2

set heading off

set feed off

set pagesize 200

set linesize 100

spool analyze_table.sql

select ANALYZE TABLE || owner || . || segment_name ||

ESTIMATE STATISTICS SAMPLE 10 PERCENT;

from dba_segments

where segment_type = TABLE

and owner not in (SYS, SYSTEM);

spool off

exit

!

sqlplus -s <
oracle/$1@$2

@./analyze_table.sql

exit

!
以下是analyze.sql的一个例子:(x)

$ cat analyze.sql

ANALYZE TABLE HIRWIN.JANUSAGE_SUMMARY ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE HIRWIN.JANUSER_PROFILE ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE APPSSYS.HIST_SYSTEM_ACTIVITY ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE HTOMEH.QUEST_IM_VERSION ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE JSTENZEL.HIST_SYS_ACT_0615 ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE JSTENZEL.HISTORY_SYSTEM_0614 ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE JSTENZEL.CALC_SUMMARY3 ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE IMON.QUEST_IM_LOCK_TREE ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE APPSSYS.HIST_USAGE_SUMMARY ESTIMATE STATISTICS SAMPLE 10 PERCENT;

ANALYZE TABLE PATROL.P$LOCKCONFLICTTX ESTIMATE STATISTICS SAMPLE 10 PERCENT;

(g)查表I间的?/b>

以下的脚本检表I间的用。如果表I间只剩?0%Q它?yu)?x)发送一个警告email?br />
#####################################################################

## ck_tbsp.sh ##

#####################################################################

#!/bin/ksh

sqlplus -s <
oracle/$1@$2

set feed off

set linesize 100

set pagesize 200

spool tablespace.alert

SELECT F.TABLESPACE_NAME,

TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),999,999) "USED (MB)",

TO_CHAR (F.FREE_SPACE, 999,999) "FREE (MB)",

TO_CHAR (T.TOTAL_SPACE, 999,999) "TOTAL (MB)",

TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),999)|| % PER_FREE

FROM (

SELECT TABLESPACE_NAME,

ROUND (SUM (BLOCKS*(SELECT VALUE/1024

FROM V\$PARAMETER

WHERE NAME = db_block_size)/1024)

) FREE_SPACE

FROM DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME

) F,

(

SELECT TABLESPACE_NAME,

ROUND (SUM (BYTES/1048576)) TOTAL_SPACE

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME

) T

WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME

AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) < 10;

spool off

exit

!

if [ `cat tablespace.alert|wc -l` -gt 0 ]

then

cat tablespace.alert -l tablespace.alert > tablespace.tmp

mailx -s "TABLESPACE ALERT for ${2}" $DBALIST < tablespace.tmp

fi

警告email输出的例子如下:(x)

TABLESPACE_NAME USED (MB) FREE (MB) TOTAL (MB) PER_FREE 

------------------- --------- ----------- ------------------- ------------------

SYSTEM 2,047 203 2,250 9 %

STBS01 302 25 327 8 %

STBS02 241 11 252 4 %

STBS03 233 19 252 8 %
查找出无效的数据库对?/b>

以下查找出无效的数据库对象:(x)

#####################################################################
## invalid_object_alert.sh ##
##################################################################### 
#!/bin/ksh . /etc/oracle.profile 

sqlplus -s <
oracle/$1@$2

set feed off

set heading off column object_name format a30

spool invalid_object.alert

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE,
STATUS FROM DBA_OBJECTS WHERE STATUS = 
INVALID ORDER BY OWNER, OBJECT_TYPE, OBJECT_NAME;

spool off

exit ! if [ `cat invalid_object.alert|wc -l` -gt 0 ] then

mailx -s "INVALID OBJECTS for ${2}" $DBALIST < invalid_object.alert

fi$ cat invalid_object.alert

OWNER OBJECT_NAME OBJECT_TYPE STATUS

--------------------------------------------
HTOMEH DBMS_SHARED_POOL PACKAGE BODY INVALID

HTOMEH X_$KCBFWAIT VIEW INVALID

IMON IW_MON PACKAGE INVALID

IMON IW_MON PACKAGE BODY INVALID

IMON IW_ARCHIVED_LOG VIEW INVALID

IMON IW_FILESTAT VIEW INVALID

IMON IW_SQL_FULL_TEXT VIEW INVALID

IMON IW_SYSTEM_EVENT1 VIEW INVALID

IMON IW_SYSTEM_EVENT_CAT VIEW INVALIDLBAILEY CHECK_TABLESPACE_USAGE PROCEDURE INVALID

PATROL P$AUTO_EXTEND_TBSP VIEW INVALID

SYS DBMS_CRYPTO_TOOLKIT PACKAGE INVALID

SYS DBMS_CRYPTO_TOOLKIT PACKAGE BODY INVALID

SYS UPGRADE_SYSTEM_TYPES_TO_816 PROCEDURE INVALID

SYS AQ$_DEQUEUE_HISTORY_T TYPE INVALID

SYS HS_CLASS_CAPS VIEW INVALID SYS HS_CLASS_DD VIEW INVALID
监视用户和事务(死锁{)

以下的脚本在死锁发生的时候发送一个警告e-mailQ?br />
###################################################################

## deadlock_alert.sh ##

##################################################################
##!/bin/ksh

.. /etc/oracle.profile

sqlplus -s <
oracle/$1@$2

set feed off

set heading off

spool deadlock.alert

SELECT SID, DECODE(BLOCK, 0, NO, YES ) BLOCKER,

DECODE(REQUEST, 0, NO,YES ) WAITER

FROM V$LOCK

WHERE REQUEST > 0 OR BLOCK > 0

ORDER BY block DESC;

spool off

exit

!

if [ `cat deadlock.alert|wc -l` -gt 0 ]

then

mailx -s "DEADLOCK ALERT for ${2}" $DBALIST < deadlock.alert

fi


l论

0,20,40 7-17 * * 1-5 /dba/scripts/ckinstance.sh > /dev/null 2>&1

0,20,40 7-17 * * 1-5 /dba/scripts/cklsnr.sh > /dev/null 2>&1

0,20,40 7-17 * * 1-5 /dba/scripts/ckalertlog.sh > /dev/null 2>&1

30 * * * 0-6 /dba/scripts/clean_arch.sh > /dev/null 2>&1

* 5 * * 1,3 /dba/scripts/analyze_table.sh > /dev/null 2>&1

* 5 * * 0-6 /dba/scripts/ck_tbsp.sh > /dev/null 2>&1

* 5 * * 0-6 /dba/scripts/invalid_object_alert.sh > /dev/null 2>&1

0,20,40 7-17 * * 1-5 /dba/scripts/deadlock_alert.sh > /dev/null 2>&1

通过以上的脚本,可大大减M的工作。你可以使用q些是来做更重要的工作,例如性能调整?/p>

Alex 2006-07-18 16:08 发表评论
]]>
[转]客户端连服务器的注意事项http://m.tkk7.com/alex/archive/2006/07/17/58649.htmlAlexAlexMon, 17 Jul 2006 14:31:00 GMThttp://m.tkk7.com/alex/archive/2006/07/17/58649.htmlhttp://m.tkk7.com/alex/comments/58649.htmlhttp://m.tkk7.com/alex/archive/2006/07/17/58649.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/58649.htmlhttp://m.tkk7.com/alex/services/trackbacks/58649.html

									2003-05 余枫

ORACLE客户端连服务器的注意事项Q?br />
1. 通过SQL*NET协议QORACLE客户端连服务器时一般需要配|sqlnet.ora和tnsnames.ora?br /> 它们默认的目录在$ORACLE_HOME/network/admin 目录?br />
也可以设|环境变量TNS_ADMIN指向你想用的sqlnet.ora和tnsnames.ora目录
例如Q?br /> TNS_ADMIN=/home/oracle/config/9.0.1;export TNS_ADMIN

sqlnet.ora文g军_找数据库服务器别名的方式

默认的参数有
NAMES.DEFAULT_DOMAIN = WORLD
NAMES.DIRECTORY_PATH = (TNSNAMES, ONAMES, HOSTNAME)

如果你的ORACLE客户端和服务器默认的域名不一P需要用#h释第一?br /> #NAMES.DEFAULT_DOMAIN = WORLD
使它不v作用?br />
NAMES.DIRECTORY_PATH指定找服务器别名的顺?(本地的tnsnames.ora文g, 命名服务? L名方?

服务器的sqlnet.ora里可以设|检查客L(fng)是否alive的时间间?br /> sqlnet.expire_time = 10

tnsnames.ora文g里写数据库服务器别名的详l内容,有以下几U写?

# 一般的写法
APPDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = appdb)
)
)

# 明确标明用dedicated方式q接数据?br /> APPD=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.35)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=appdb)
(SERVER=DEDICATED)))

# 对多个listener端口做均衡负载方式连接数据库
APPS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1856))
)
(CONNECT_DATA =
(SERVICE_NAME = appdb)
)
)

# 注意Q如果数据库服务器用MTSQ客L(fng)E序需要用database link时最好明指明客L(fng)用dedicated直连方式,
# 不然?x)遇到很多跟分布式环境有关的ORACLE BUG?br /> # 一般情况下数据库服务器用直接的q接?x)好一些,除非你的实时数据库连接数接近1000?br />
2. /etc/hosts (UNIX)
或者windows\hosts(WIN98) winnt\system32\drivers\etc\hosts (WIN2000)
客户端需要写入数据库服务器IP地址和主机名的对应关pR?br />
127.0.0.1 localhost
192.168.0.35 oracledb oracledb
192.168.0.45 tomcat tomcat
202.84.10.193 bj_db bj_db

有些时候我们配|好W一步后Qtnsping 数据库服务器别名昄是成功的Q?br /> 但是sqlplus username/password@servicename不?jdbc thin link 也不通的时?
一定不要忘了在客户端做q一步,原因可能是DNS服务器里没有讄q个服务器IP地址和主机名的对应关pR?br />
如果同时有私有IP和Internet上公有IPQ私有IP写在前面Q公有IP写在后面?br />
~辑前最好留一个备份,增加一行时也最好用复制_脓(chung)Q避免编辑hosts时空格或者tab字符错误?br />
3. UNIX下ORACLE多数据库的环境,OS客户端需要配|下面两个环境变?br />
ORACLE_SID=appdb;export ORACLE_SID
TWO_TASK=appdb;export TWO_TASK

来指定默认的目标数据库?br />


Alex 2006-07-17 22:31 发表评论
]]>
[转]?Linux x86 上安?Oracle 数据?10g [官方文]http://m.tkk7.com/alex/archive/2006/07/13/57968.htmlAlexAlexThu, 13 Jul 2006 05:57:00 GMThttp://m.tkk7.com/alex/archive/2006/07/13/57968.htmlhttp://m.tkk7.com/alex/comments/57968.htmlhttp://m.tkk7.com/alex/archive/2006/07/13/57968.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/57968.htmlhttp://m.tkk7.com/alex/services/trackbacks/57968.html阅读全文

Alex 2006-07-13 13:57 发表评论
]]>
[转]Oracle 9i的闪回查询概q?/title><link>http://m.tkk7.com/alex/archive/2006/07/13/57913.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 13 Jul 2006 02:26:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/07/13/57913.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/57913.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/07/13/57913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/57913.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/57913.html</trackback:ping><description><![CDATA[ <span id="ArticleContent1_ArticleContent1_lblContent"> <font color="#993300" size="2"> <strong> </strong>key words: Oracle闪回 flash<br /><br />  1、Oracle 9i的闪回查询功?br /><br />   在Oracle 9i之前Q如果用户错误操作数据后Q除了不完全恢复外,没有好的解决办法。Oracle 9i中提供闪回查询,׃个新的包DBMS_FLASH来实现。用户用闪回查询可以及(qing)时取得误操作DMLQDelete、Update、InsertQ? 前某一旉Ҏ(gu)据库的映像视图,用户可以利用pȝ旉或系l改变号QSCNQSystem Change NumberQ来指定q个只读视图Qƈ可以针对错误q行相应的恢复措施。闪回查询功能完全依赖于自动回滚D늮理(AUMQ,对于Drop{误操作不能? 复。闪回特性可应用在以下方面:(x)<br /><br />  Q?Q自我维护过E中的修复:(x)当一些重要的记录被意外删除,用户可以向后UdC个时间点Q查看丢q行ƈ把它们重新插入现在的表内恢复?br /><br />  Q?Q恢复Email和声音EmailQ当用户意外删除了Email或者声音信息时Q可以通过Ud到固定时间点来恢复删除?br /><br />  Q?Q̎号^衡状况:(x)可以查看以前的历史数据。如银行外币理中用于记录特定时间的汇率。在以前Q汇率变更被记录在一个历史表中,现在可以通过闪回功能q行查询?br /><br />  Q?Q用于趋势分析的决策支持pȝQ决{支持系l和联机分析应用必须执行一个长旉的事务。用闪回查询,q些应用可以对历史数据执行分析和建模。例如,特定产品如矿泉水随季节变化需求情늚变化?<br /><br />  2、回滚段概述<br /><br />  回滚D는于存放数据修改之前的位置和|回滚D늚头部包含正在使用的该回滚D事务的信息。回滚段的作用如下:(x)<br /><br />  Q?Q事务回滚:(x)当事务修改表中数据的时候,该数据修改前的|卛_影像Q会(x)存放在回滚段中,当用户回滚事务时QOracle会(x)利用回滚D中的数据前影像来将修改的数据恢复到原来的倹{?<br /><br />  Q?Q事务恢复:(x)当事务正在处理的时候,例程p|Q回滚段的信息保存在重做日志文g中,Oracle在下次打开数据库时利用回滚来恢复未提交的数据?br /><br />  Q?Q读一致性:(x)当一个会(x)话正在修Ҏ(gu)据时Q其它的?x)话看不到该?x)话未提交的修攏V而且Q当一个语句正在执行时Q该语句看不到从该语句开始执行后的未提交的修改(语句U读一致性)?br /><br />  3、Oracle中Delete和Commit操作的流E分?<br /><br />  Q?Q删除(DeleteQ流E?br /><br />  ·Oracle读Block(数据?到Buffer CacheQ缓冲区Q?如果该Block在Buffer中不存在)Q?br /><br />  ·在Redo Log BufferQ重做日志缓冲区Q中记录Delete操作的细节;<br /><br />  ·在相应回滚段D头的事物表中创Z个UndoQ回滚)条目Q?br /><br />  ·把将要删除的记录创徏前镜像,存放到Undo BlockQ回滚块Q中Q?br /><br />  ·在Buffer Cache中的相应数据块上删除记录Qƈ且标记相应的数据块ؓ(f)DirtyQ脏Q?br /><br />  Q?Q提?Commit)程<br /><br />  ·Oracle产生一个SCNQ?br /><br />  ·在回滚段事物表中标记该事物状态ؓ(f)CommitedQ?br /><br />  ·LGWRQ日志读写进E) Flush Log Buffer到日志文Ӟ <br /><br />  ·如果此时数据块仍然在Buffer Cache中,那么SCN被记录到Block Header上,q被UCؓ(f)快速提交;<br /><br />  ·如果Dirty Block已经被写回到盘Q那么下一个访问这个Block的进E将?x)自回滚D中获取该事物的状态,认该事物被提交。然后这个进E获得提交SCNq写回到Block Header上,q被UCؓ(f)延迟块清除?br /><br />  4、Oracle 9i中闪回查询操作实?br /><br />  q行闪回查询必须讄自动回滚D늮理,在init.ora讄参数UNDO_MANAGEMENT=AUTOQ参数UNDO_RETENTION=nQ决定了能往前闪回的最大时_(d)D大就需要越多UndoI间?br /><br />  例:(x)Oracle 9i的Flashback Query操作?br /><br />  Q?Q创建闪回查询用?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL> create user flashtest identified by flashtest; <br />SQL> grant connect, resource to flashtest; <br />SQL> grant execute on dbms_flashback to flashtest; <br />SQL> connect flashtest/flashtest; </font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  Q?Q创建测试表Q插入测试记?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL> create table test(id number(3)); <br />SQL> insert into test values (1); <br />SQL> insert into test values(2); <br />SQL> commit; <br />SQL> create table rec_date(date_scn); </font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  注意Q在执行步骤3或者步?之前Q等?分钟?br /><br />  Q?Q删除记?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL> execute dbms_flashback.disable; <br />SQL> insert into rec_date select sysdate from dual; <br />SQL> commit; <br />SQL> delete from test where id=1; <br />SQL> commit; </font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  通过以上的操作,我们插入了两条记录,q删除了其中一条记录。在以下的操作中Q我们将通过flashback query扑ֈ删除的记?br /><br />  Q?Q闪回查?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL> DECLARE <br />Restore_scn date; <br />BEGIN <br />Select date_scn into restore_scn from rec_date; <br />Dbms_flashback.enable_at_time (restore_scn); <br />END; <br />SQL> select * from test; <br />ID<br />1<br />2</font> </td> </tr> </tbody> </table> <p> <br /> <font color="#993300" size="2">  可以看出Q虽然删除记录ƈ提交Q但是通过闪回操作Q仍能查询到删除? 的两条记录。需要注意Oracle?分钟记录一ơSCNQƈSCN和对应时间的映射q行U录。如果原来插入的记录到做闪回操作的时间在5分钟之内Q用 Z旉的闪回查询可能得不到记录Q因为基于时间点的查询实际上是{化ؓ(f)最q的一ơSCNQ然后从q个SCN开始进行恢复。因此,如果需要精的查询可以 采用ZSCN的闪回查询,可精闪回到需要恢复的旉。可以通过DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER语句 获取SCN?/font> </p> <p> <font color="#993300" size="2">  <strong><a target="_blank">Oracle</a> 10g的闪回查询概q?/strong><br /><br />  与Oracle 9i相比Oracle 10g?/font> <a target="_blank"> <font color="#993300" size="2">Flash</font> </a> <font color="#993300" size="2">back有了非常大的改进Q从普通的Flashback Query发展C多种形式Q主要表现在如下几方面新Ҏ(gu):(x)<br /><br />  1、Flashback Database<br /><br />  Oracle Flashback DatabaseҎ(gu)允?dng)R过SQL语句Flashback Database语句Q让</font> <a target="_blank"> <font color="#993300" size="2">数据?/font> </a> <font color="#993300" size="2">? 滚到当前的前一个时间点或者SCNQ而不需要做旉点的恢复。闪回数据库可以q速将数据库回到误操作或h为错误的前一个时间点Q如Word中的"撤消"? 作,可以不利用备份就快速的实现Z旉点的恢复。Oracle通过创徏新的Flashback LogsQ闪回日志)Q记录数据库的闪回操作。如果希望能闪回数据库,需要设|如下参敎ͼ(x)DB_RECOVER_FILE_DEST日志的存放位|, DB_RECOVER_FILE_DEST_SIZE恢复区的大小。在创徏数据库的时候,Oracle自动创建恢复区Q但默认是关闭的Q需要执? alter database flashback on命o(h)?br /><br />  例:(x)执行Flashback Database命o(h)格式?br /><br /></font> </p> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>flashback database to time to_timestamp(xxx);<br />SQL>flashback database to scn xxx</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  2、Flashback Table<br /><br />  Oracle Flashback TableҎ(gu)允许利用Flashback Table语句Q确保闪回到表的前一个时间点。与Oracle 9i中的Flashback Query怼Q利用回滚段信息来恢复一个或一些表C前的一个时间点Q一个快照)。要注意的是QFlashback Table不等于Flashback QueryQFlashback Query仅仅是查询以前的一个快照点而已Qƈ不改变当前表的状态,而Flashback Table改变当前表?qing)附属对象一起回C前的旉炏V?br /><br />  语法Q?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">flashback table tablename to timestamp xxx?br />flashback table tablename to scn xxx</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  注意Q如果需要闪回一个表Q需要以下条Ӟ(x)<br /><br />  ·需要有flashback any table的系l权限或者是该表的flashback对象权限Q?br /><br />  ·需要有该表的select,insert,delete,alter权限Q?br /><br />  ·必须保证该表row movement?br /><br />  例:(x)执行test表闪回到2005q??日下?炏V?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>flashback table test to timestamp to_timestamp(?005-05-07 15:00:00?’yyyy-mm-dd hh24:mi:ss?;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  3、Flashback Drop<br /><br />  Oracle Flashback DropҎ(gu)提供一个类似回收站的功能,用来恢复不小心被删除的表。当删除表时QOracle 10gq不立刻释放被删除的表所占用的空_(d)而是这个被删除的表q行自动重命名(Z避免同类对象名称的重复)q放q回收站中。所谓的回收站类g</font> <a target="_blank"> <font color="#993300" size="2">Windows</font> </a> <font color="#993300" size="2">pȝ中的回收站,是一个虚拟的容器Q用于存放所有被删除的对象,在回收站中被删除的对象将占用创徏时的同样的空间。如果这个被删除的表需要进行恢复,可利用Flashback Drop功能?br /><br />  例:(x)q行一个删除表后恢复的单测试?br /><br />  Q?Q显C回收站信息<br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>show recyclebin;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  可以看到Q回收站中是没有Ml果的,表示没有M表在回收站中?br /><br />  Q?Q创Z个表Qƈ删除Q再ơ显C回收站信息<br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>create table test_drop(name varchar2(10));<br />SQL>drop table test_drop;<br />SQL>show recyclebin;<br />ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME<br />TEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2005-05-07:14:30:47</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  Q?Q对被删除的表进行恢?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>flashback table test_drop to before drop;?br />SQL>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  Q?Q管理回收站<br /><br />  清除回收站中的单个表Qpurge table test_drop<br /><br />  清除整个回收站:(x)purge recyclebin<br /><br />  清除不同的对象回收站Qpurge user_recyclebin或purge dba_recyclebin<br /><br />  Q?Q确认删除一个表<br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>drop table test_drop purge;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  如果删除一个表且不攑ֈ回收站中不能q行恢复Q在drop语句中可以利用purge选项?br /><br />  4、Flash Version Query<br /><br />   Oracle Flashback Version QueryҎ(gu),利用保存的回滚信息,可以看到特定的表在时间段内的M修改Q如?sh)?jing)的回放一P可以了解表在该期间的M变化。Flashback version query一样依赖于AUMQ提供了一个查看行改变的功能,能找到所有已l提交了的行的记录,分析L间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:(x)<br /><br />  ·VERSIONS_SCN - pȝ改变?br /><br />  ·VERSIONS_TIMESTAMP - 旉<br /><br />   例如Q在test表中Q时?插入一条记录,旉2删除了这条记录,对于旉3执行select * from test当然查询不到q条记录Q只能看到该表最后的提交记录。这时如果利用Flash Table或者是Flash QueryQ只能看到过ȝ某一旉点的一个快照,而利用Flashback Version QueryQ能够把旉1、时?的操作给记录下来Qƈ详细的查询出对表q行的Q何操作?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id <br />from test versions <br />between timestamp minvalue and maxvalue <br />order by versions_starttime;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  在上q查询中Q列 versions_starttime、versions_endtime、versions_xid、versions_operation是伪列,q? 有一些伪列,如versions_startscn和versions_endscn昄了该时刻的系l更改号。列versions_xid昄了更改该 行的事务标识W?br /><br />  当然Q除了分析以上所有的变更之外Q可以根据需要指定时间段Q如昄?005-05-07旉?5:30?6:30之间test表的所有变更?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>select id from test <br />versions between timestamp to_date(?005-05-07 15:30:00?’yyyy-mm-dd hh24:mi:ss? and to_date(?005-05-07 16:30:00?’yyyy-mm-dd hh24:mi:ss?</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  5、Flashback Transaction Query<br /><br />  Oracle Flashback Transaction QueryҎ(gu)确保检查数据库的Q何改变在一个事务别,可以利用此功能进行诊?/font> <a target="_blank"> <font color="#993300" size="2">问题</font> </a> <font color="#993300" size="2">? 性能分析和审计事务。它其实是Flashback Version Query查询的一个扩充,Flashback Version Query说明了可以审计一D|间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及(qing)Undo_sqlQ回滚事务对应的sql语句Q,? 是说审计一个事务到底做了什么,甚至可以回滚一个已l提交的事务?br /><br />  例:(x)Flashback Transaction Query的操作实例?br /><br />  Q?Q在test表中删除记录Q获得事务的标识XIDQ然后提交?br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>delete from test where id=2;<br />SQL>select xid from v$transaction;<br />XID<br />----------------<br />04001200AE010000<br />SQL>commit;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  在测试中方便赯Q在事务没有提交的时候,获得事务的XID?4001F0035000000。实际情况下Q不可能去跟t每个事务,惌获得已提交事务的XIDQ就必须通过上面的Flashback Version Query?br /><br />  Q?Q进行Flashback Transaction Query<br /><br /></font> <table class="txcode" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <font color="#993300" size="2">SQL>select * from FLASHBACK_TRANSACTION_QUERY<br />where xid=?4001F0035000000?<br />UNDO_SQL<br />insert into "FLASHTEST"."TEST"("ID") values (??;</font> </td> </tr> </tbody> </table> <br /> <font color="#993300" size="2">  注意Q这个删除语句对应的?个Insert语句Q如果想回滚q个事务Q执行这个Insert语句卛_?br /><br />   可以看到QFlashback Transaction Query主要用于审计一个事务,q可以回滚一个已l提交的事务。如果确定出错的事务是最后一个事务,我们利用Flashback Table或者Flashback Query可以解决问题。但是,如果执行了一个错误的事务之后Q又执行了一pd正确的事务,那么上面的方法就无能为力Q利用Flashback Transaction Query可以查看或回滚这个错误的事务?br /><br />  <strong>l束?/strong><br /><br />  通过上面的描qͼ可以看出闪回功能使用h复偶然的错误删除更加Ҏ(gu)Q增Zpȝ的可用性与M致性?</font> </span> <img src ="http://m.tkk7.com/alex/aggbug/57913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-07-13 10:26 <a href="http://m.tkk7.com/alex/archive/2006/07/13/57913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>manage Oracle10g with oem methodhttp://m.tkk7.com/alex/archive/2006/07/11/57665.htmlAlexAlexTue, 11 Jul 2006 08:18:00 GMThttp://m.tkk7.com/alex/archive/2006/07/11/57665.htmlhttp://m.tkk7.com/alex/comments/57665.htmlhttp://m.tkk7.com/alex/archive/2006/07/11/57665.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/57665.htmlhttp://m.tkk7.com/alex/services/trackbacks/57665.html
emctl start dbconsole

then type following addrese in browser:

http://yoursrv:1561/em


it's convient.

It's B/S model ,and it's C/S model at Oracle9i.




Alex 2006-07-11 16:18 发表评论
]]>
[转]Oracle常用数据字典查询http://m.tkk7.com/alex/archive/2006/06/12/52203.htmlAlexAlexMon, 12 Jun 2006 06:25:00 GMThttp://m.tkk7.com/alex/archive/2006/06/12/52203.htmlhttp://m.tkk7.com/alex/comments/52203.htmlhttp://m.tkk7.com/alex/archive/2006/06/12/52203.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/52203.htmlhttp://m.tkk7.com/alex/services/trackbacks/52203.htmlkey words: 数据字典 用户 ?视图

1、用?br />
查看当前用户的缺省表I间
SQL>select username,default_tablespace from user_users;

查看当前用户的角?br /> SQL>select * from user_role_privs;

查看当前用户的系l权限和表权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;

昄当前?x)话所h的权?br /> SQL>select * from session_privs;

昄指定用户所h的系l权?br /> SQL>select * from dba_sys_privs where grantee='GAME';


2、表

查看用户下所有的?br /> SQL>select * from user_tables;

查看名称包含log字符的表
SQL>select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;

查看某表的创建时?br /> SQL>select object_name,created from user_objects where object_name=upper('&table_name');

查看某表的大?br /> SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');

查看攑֜ORACLE的内存区里的?br /> SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

3、烦(ch)?br />
查看索引个数和类?br /> SQL>select index_name,index_type,table_name from user_indexes order by table_name;

查看索引被烦(ch)引的字段
SQL>select * from user_ind_columns where index_name=upper('&index_name');

查看索引的大?br /> SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');

4、序列号

查看序列Plast_number是当前?br /> SQL>select * from user_sequences;

5、视?br />
查看视图的名U?br /> SQL>select view_name from user_views;

查看创徏视图的select语句
SQL>set view_name,text_length from user_views;
SQL>set long 2000; 说明Q可以根据视囄text_lengthD定set long 的大?br /> SQL>select text from user_views where view_name=upper('&view_name');

6、同义词

查看同义词的名称
SQL>select * from user_synonyms;

7、约束条?br />
查看某表的约束条?br /> SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
from user_constraints where table_name = upper('&table_name');

SQL>select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
and c.owner = cc.owner and c.constraint_name = cc.constraint_name
order by cc.position;

8、存储函数和q程

查看函数和过E的状?br /> SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';

查看函数和过E的源代?br /> SQL>select text from all_source where owner=user and name=upper('&plsql_name');

Alex 2006-06-12 14:25 发表评论
]]>
[转]oracle 问题_解[how to列表]http://m.tkk7.com/alex/archive/2006/06/12/52191.htmlAlexAlexMon, 12 Jun 2006 05:52:00 GMThttp://m.tkk7.com/alex/archive/2006/06/12/52191.htmlhttp://m.tkk7.com/alex/comments/52191.htmlhttp://m.tkk7.com/alex/archive/2006/06/12/52191.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/52191.htmlhttp://m.tkk7.com/alex/services/trackbacks/52191.htmlQ1.怎样创徏表?
A. CREATE TABLE ROYAL_MTABLE
(
RM_INT_FIELD INTEGER,
RM_STR_FIELD VARCHAR2(64)
)
CREATE TABLE ROYAL_DTABLE
(
RD_INT_FIELD INTEGER,
RD_STR_FIELD VARCHAR2(32)
)
Q2.怎样删除表?
A. DROP TABLE ROYAL_DTABLE;
Q3.怎样创徏视图Q?br /> A. CREATE OR REPLACE VIEW ROYAL_MDVIEW AS
SELECT T1.RM_STR_FIELD AS F1, T2.RD_STR_FIELD AS F2 FROM ROYAL_MTABLE T1, ROYAL_DTABLE T2
WHERE T1.RM_INT_FIELD = T2.RM_INT_FIELD
Q4.怎样删除视图Q?br /> A. DROP VIEW ROYAL_MDVIEW;
Q5.怎样l表d字段Q?br /> A. ALTER TABLE ROYAL_DTABLE ADD RM_INT_FIELD INTEGER;
Q6.怎样删除表中某个字段Q?br /> A. ALTER TABLE ROYAL_DTABLE DROP COLUMN RM_INT_FIELD;
Q7.怎样l某个字D|加约束?
A. ALTER TABLE ROYAL_MTABLE MODIFY RM_STR_FIELD NOT NULL;
Q8.怎样去除某个字段上的U束Q?br /> A. ALTER TABLE ROYAL_MTABLE MODIFY RM_STR_FIELD NULL;
Q9.怎样l表加上主键Q?br /> A. ALTER TABLE ROYAL_MTABLE ADD CONSTRAINT PK_ROYAL_MTABLE PRIMARY KEY (RM_INT_FIELD);
Q10.怎样删除表的主键Q?br /> A. ALTER TABLE ROYAL_MTABLE DROP CONSTRAINT PK_ROYAL_MTABLE CASCADE;
Q11.怎样l表d一个外键?
A. ALTER TABLE ROYAL_DTABLE ADD CONSTRAINT FK_ROYAL_DTABLE FOREIGN KEY (RM_INT_FIELD) REFERENCES ROYAL_MTABLE (RM_INT_FIELD) ON DELETE CASCADE;
Q12.怎样删除表的一个外键?
A. ALTER TABLE ROYAL_DTABLE DROP CONSTRAINT FK_ROYAL_DTABLE;
Q13.怎样l字D加上CHECKQ?br /> A. ALTER TABLE ROYAL_MTABLE ADD CONSTRAINT CHK_RM_STR_FIELD CHECK (RM_STR_FIELD IN ('Y','N'));
Q14.怎样L字段上的CHECKQ?br /> A. ALTER TABLE ROYAL_MTABLE DROP CONSTRAINT CHK_RM_STR_FIELD;
Q15.怎样l字D设|默认|
A. ALTER TABLE ROYAL_DTABLE MODIFY RD_STR_FIELD DEFAULT 'ROYAL';
Q16.怎样Ud字段的默认|
A. ALTER TABLE ROYAL_DTABLE MODIFY RD_STR_FIELD DEFAULT NULL;
Q17.怎样创徏索引Q?br /> A. CREATE UNIQUE INDEX IDX_ROYAL_DTABLE ON ROYAL_DTABLE (RM_INT_FIELD);
Q18.怎样删除索引Q?br /> A. DROP INDEX IDX_ROYAL_DTABLE;
Q19.怎样创徏用户Q?br /> A. CREATE USER TESTUSER IDENTIFIED EXTERNALLY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT;
Q20.怎样删除用户Q?br /> A. DROP USER TESTUSER CASCADE;
21.怎样对象权限(object privilegesQ授予用P
A. GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE TO TESTUSER;
GRANT INSERT, UPDATE, DELETE ON ROYAL_DTABLE TO TESTUSER;
GRANT SELECT, ALTER ON ROYAL_DTABLE TO TESTUSER WITH GRANT OPTION;
Q22.怎样从用h回对象权限?
A. REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_DTABLE FROM TESTUSER;
Q23.怎样角色权限(role privilegesQ授予用P
A. GRANT CONNECT TO TESTUSER WITH ADMIN OPTION;
GRANT DBA TO TESTUSER;
Q24.怎样从用h回角色权限?
A. REVOKE DBA FROM TESTUSER;
Q25.怎样系l权限(system privilegesQ授予用P
A. GRANT ALTER ANY TABLE TO TESTUSER WITH ADMIN OPTION;
Q26.怎样从用h回系l权限?
A. REVOKE ALTER ANY TABLE FROM TESTUSER;
Q27.怎样创徏序列Q?br /> A. CREATE SEQUENCE RM_INT_FIELD_SEQ
MINvalue 1
MAXvalue 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 10
ORDER;
Q28.怎样删除序列Q?br /> A. DROP SEQUENCE RM_INT_FIELD_SEQ;
Q29.怎样获取序列|
A. SELECT RM_INT_FIELD_SEQ.NEXTVAL FROM DUAL;
Q30.怎样创徏角色Q?br /> A. CREATE ROLE TESTROLE;
Q31.怎样删除角色Q?br /> A. DROP ROLE TESTROLE;
Q32.怎样对象权限(object privilegesQ授予角Ԍ
A. GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE TO TESTROLE;
Q33.怎样从角色收回对象权限?
A. REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE FROM TESTROLE;
Q34.怎样角色权限(role privilegesQ授予角Ԍ
A. GRANT DBA TO TESTROLE;
Q35.怎样从角色收回角色权限?
A. REVOKE DBA FROM TESTROLE;
Q36.怎样系l权限(system privilegesQ授予角Ԍ
A. GRANT CREATE TABLE TO TESTROLE;
Q37.怎样从角色收回系l权限?
A. REVOKE CREATE TABLE FROM TESTROLE;
Q38.不等于条件有哪几U写法?Q茴香豆问题Q?br /> A. SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD != 'Y';
SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD ^= 'Y';
SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD <> 'Y';
Q39.like子句的用法?
A. SELECT * FROM ROYAL_DTABLE WHERE RD_STR_FIELD LIKE '%Y%';
SELECT * FROM ROYAL_DTABLE WHERE RD_STR_FIELD LIKE '_Y%';
Q40.请DZ个where子查询简单例子?
A. SELECT * FROM ROYAL_DTABLE WHERE RM_INT_FIELD IN (SELECT RM_INT_FIELD FROM ROYAL_MTABLE WHERE RM_STR_FIELD NOT IN ('Y','B'));
Q41.Oracle常用字符串处理函数有哪些Q?br /> A. || q接两个字符Ԍ LENGTH 字符串长度; TRIM/LTRIM/RTRIM 截断串左Q右Q指定字W串Q包括空ԌQ?LOWER/UPPER 字W串转换为小/大写Q等{?br /> 例如QSELECT RM_INT_FIELD||'--'||RM_STR_FIELD||'YES' FROM ROYAL_MTABLE;
Q42.Oracle支持哪些数字处理函数Q?br /> A. Oracle支持所有常用数字函敎ͼ包括Q但不限于)+???、ABS、COS、EXP、LN、LOG、MOD、POWER、ROUND、SIN? SINH、SQRT、TAN、TRUNC、AVG、COUNT、MAX、MIN、SUM、GREATEST、LEAST{等?br /> 例如Q?br /> SELECT GREATEST(3, 4, 5)*4 FROM DUAL;
SELECT POWER(2,3) FROM DUAL;
Q43.怎样取得数据库服务器当前日期、时_(d)
A. SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
Q44.怎样字W串转换为日期、时间格式?
A. SELECT TO_DATE('2002-11-27', 'YYYY-MM-DD') FROM DUAL;
SELECT TO_DATE('2002-11-27 09:28:55', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
Q45.常用日期函数有哪些?
A. NEXT_DAY LAST_DAY ADD_MONTHS MONTHS_BETWEEN{等?br /> 例如QSELECT LAST_DAY(SYSDATE) FROM DUAL;
Q46.能给Z个DECODE函数用法的例子吗Q?br /> A. DECODE函数的格式ؓ(f)DECODE(value, if1, then1, if2, then2...,else)。假设表ROYAL_DTABLE中有如下数据Q?br /> RD_INT_FIELD RD_STR_FIELD RM_INT_FIELD
-------------------------------------
1 royal 1
2 bill 2
3 joy 1

误察如下SQL语句输出l果?br /> SELECT DECODE(RD_STR_FIELD, 'royal', 'royaltest', 'bill', 'billgates', RD_STR_FIELD) AS DC FROM ROYAL_DTABLE;
DC
---------
royaltest
billgates
joy

Q47.能给Z个group by、having和order by用法的例子吗Q?br /> A. SQL> SELECT * FROM ROYAL_MTABLE;
RM_INT_FIELD RM_STR_FIELD
-------------------------
1 Y
2 N
3 Y
SQL> SELECT * FROM ROYAL_DTABLE;
RD_INT_FIELD RD_STR_FIELD RM_INT_FIELD
--------------------------------------
1 royal 1
2 bill 2
3 joy 1
SQL> SELECT RM_INT_FIELD, SUM(RD_INT_FIELD) FROM ROYAL_DTABLE GROUP BY RM_INT_FIELD HAVING SUM(RD_INT_FIELD) >= 2 ORDER BY SUM(RD_INT_FIELD) ASC;

RM_INT_FIELD SUM(RD_INT_FIELD)
------------------------------
2 2
1 4
Q48.Oracle有哪些常用数据字典?
A. USER_TABLES(TABS)、USER_TAB_COLUMNS(COLS)、USER_VIEWS、USER_SEQUENCES(SEQ)? USER_CONSTRAINTS、USER_CONS_COLUMNS、USER_TAB_COMMENTS、USER_COL_COMMENTS? USER_INDEXES(IND)、USER_IND_COLUMNS、USER_USERS、DBA_USERS、ALL_USERS? USER_TABLESPACES{等?br /> 例如QSELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_ROYAL_DTABLE';
Q49.怎样日期、时间插入date型字D中Q?br /> A. INSERT INTO ROYAL_MTABLE (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) valueS (9, 'Y', TO_DATE('2002-05-23', 'YYYY-MM-DD'));
INSERT INTO ROYAL_MTABLE (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) valueS (10, 'Y', TO_DATE('2002-10-10 8:23:33', 'YYYY-MM-DD HH:MI:SS'));
Q50.能介l一下connect by的用法吗Q?br /> A. connect by子句提供了遍历“树(wi)”的手段?br /> 假设有这样一个表QCREATE TABLE ROYAL_TREETABLE (ID INTEGER, PARENT_ID INTEGER, NAME VARCHAR2(32));
表中有如下数据:(x)
ID PARENT_ID NAME
-----------------
2 1 AAA
3 1 BBB
4 2 CCC
5 2 DDD
6 4 EEE
8 7 GGG
假如我们现在需要从NAME = 'EEE'的记录开始,向上查找所有有父子关系的记录,可执行如下SQL语句Q?br /> SELECT * FROM ROYAL_TREETABLE START WITH NAME = 'EEE' CONNECT BY ID = PRIOR PARENT_ID;
ID PARENT_ID NAME
-----------------
6 4 EEE
4 2 CCC
2 1 AAA

Alex 2006-06-12 13:52 发表评论
]]>
oracle实现自动插入自增长序?/title><link>http://m.tkk7.com/alex/archive/2006/06/08/51429.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 08 Jun 2006 10:07:00 GMT</pubDate><guid>http://m.tkk7.com/alex/archive/2006/06/08/51429.html</guid><wfw:comment>http://m.tkk7.com/alex/comments/51429.html</wfw:comment><comments>http://m.tkk7.com/alex/archive/2006/06/08/51429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/alex/comments/commentRss/51429.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/alex/services/trackbacks/51429.html</trackback:ping><description><![CDATA[key words: Oracle自增?sequence<br /><br />SqlServer 和MySql都有自增长的功能QOracle必须Z个对应的sequence,有时候感觉不是很方便 ?br /><br />q次要实现在SqlServer中插入一条记录的时候自动在Oracle中增加一条对应的记录Qsequence有问题?br /><br />最后用触发器搞?<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">create or replace trigger mytable_trig_autoinc<br />before insert on </span><span style="color: rgb(0, 0, 0);">mytable</span><br /><span style="color: rgb(0, 0, 0);">for each row<br />begin<br />  if (:new.id is null) then<br />    select </span><span style="color: rgb(0, 0, 0);">mytable</span><span style="color: rgb(0, 0, 0);">_seq.nextval into :new.id from dual</span><span style="color: rgb(0, 128, 0);">;<br /></span><span style="color: rgb(0, 0, 0);">  end if</span><span style="color: rgb(0, 128, 0);">;<br /></span><span style="color: rgb(0, 0, 0);">end</span><span style="color: rgb(0, 128, 0);">;<br /></span></div><br /><img src ="http://m.tkk7.com/alex/aggbug/51429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/alex/" target="_blank">Alex</a> 2006-06-08 18:07 <a href="http://m.tkk7.com/alex/archive/2006/06/08/51429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle启动错误http://m.tkk7.com/alex/archive/2006/06/06/50789.htmlAlexAlexTue, 06 Jun 2006 08:02:00 GMThttp://m.tkk7.com/alex/archive/2006/06/06/50789.htmlhttp://m.tkk7.com/alex/comments/50789.htmlhttp://m.tkk7.com/alex/archive/2006/06/06/50789.html#Feedback0http://m.tkk7.com/alex/comments/commentRss/50789.htmlhttp://m.tkk7.com/alex/services/trackbacks/50789.html
上次安装的Oracle10g启动出现了问题,提示:
ORACLE not available
ORA-
27101: shared memory realm does not exist
Linux Error: 
2: No such file or directory



google了一下,有h有如下提?
make sure that both ORACLE_HOME and ORACLE_SID are written correctly.
In past, I've got same error because ORACLE_HOME in init script was
/opt/oracle/9iR1/ but the real ORACLE_HOME was /opt/oracle/9iR1 without ending slash.
Yes, a simple slash implies two different installation.
If in your scritps/programs you use sometime /opt/oracle/9iR1 and sometime /opt/oracle/9iR1/
(with ending slash) you'll fall in troubble!.
When u got "shared memory realm does not exist " at first check du a "ps -fe | grep ora"
in order to make sure if the instance is running.
also, if you want see that "shared memory realm" you can type "ipcs". If oracle is alive you can see a
huge segment of memory (aslo know as SGA)



最后检查结果好像也不是q个Q是配置文g出错,x务名不一?

其中SERVICE_NAME与SID_NAME一定要?bash_profile中的ORACLE_SID怸_(d)否则无法启动



Alex 2006-06-06 16:02 发表评论
]]>
[转]RHEL AS 3 安装?qing)启?Oracle10g 指南http://m.tkk7.com/alex/archive/2006/05/09/45191.htmlAlexAlexTue, 09 May 2006 05:12:00 GMThttp://m.tkk7.com/alex/archive/2006/05/09/45191.htmlhttp://m.tkk7.com/alex/comments/45191.htmlhttp://m.tkk7.com/alex/archive/2006/05/09/45191.html#Feedback5http://m.tkk7.com/alex/comments/commentRss/45191.htmlhttp://m.tkk7.com/alex/services/trackbacks/45191.html 转自: q里

1. 配置RedHat AS 3

操作pȝ版本Q?
Red Hat Enterprise Linux AS release 3 (Taroon)
Kernel 2.4.21-4.EL on an i686
按照常规来安装操作系l?记得要安装开发工?gcc{必要工?.

1.1 (g)查必要的g信息

(g)查内?/font> 最?/font> (g)查命令参?/font>
物理内存 512M # grep MemTotal /proc/meminfo
交换I间 1.0 GB或?倍内存大?/font> # grep SwapTotal /proc/meminfo
/tmp I间 400 MB # df -k /tmp
软g所需I间 2.5 GB # df -k (I间大好,如果是正式系l?应该q行详尽的规?
数据库文?/font> 1.2 GB # df -k (I间大好,如果是正式系l?应该q行详尽的规?
(g)查完如上各项之后, 应该修改核心参数.执行如下命o(h):

#vi /etc/sysctl.conf

#注释:
#表示使用root用户操作,$表示使用oracle 用户q行操作.提示W后面的蓝色部分表示需要输入的命o(h)Q以下同Q?

在该文g末尾加入如下内容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

~辑完之?保存,执行 # /sbin/sysctl -p 命o(h)操作来我们所做的变更生效.
?上面kernel.shmmax/kernel.sem{是典型的核心参数配|?(zhn)可能需要根据?zhn)的实际环境进行适当的变?

关于q些核心参数的说明在Oracle?Oracle9i Installation Guide Release 2 (9.2.0.1.0) for UNIX Systems 中有很详l的说明.( http://download-west.oracle.com/docs/html/A96167_01/toc.htm )

然后,应该(g)查一下上面的操作是否正确:
# /sbin/sysctl -a | grep sem
# /sbin/sysctl -a | grep shm
# /sbin/sysctl -a | grep file-max
# /sbin/sysctl -a | grep ip_local_port_range

为Oracle用户讑֮Shell的限?br />一般来_(d)Z性能上的考虑,q需要需要进行如下的讑֮Q以便改qOracle用户的有?nofile(可打开的文件描q符的最大数)和nproc(单个用户可用的最大进E数?

# vi /etc/security/limits.conf
# d如下的行

*               soft    nproc   2047
*               hard    nproc   16384
*               soft    nofile  1024
*               hard    nofile  65536

d如下的行?etc/pam.d/login 文gQ?
session    required     /lib/security/pam_limits.so

~辑 /etc/profile 文g,d如下部分Q?
if [ $USER = "oracle" ]; then 
        if [ $SHELL = "/bin/ksh" ]; then 
                ulimit -p 16384 
                ulimit -n 65536 
        else 
                ulimit -u 16384 -n 65536 
        fi 
fi
之后Q执?font color="#0000ff">$ ulimit
验证一?

1.2 (g)查ƈ安装相关补丁
在这个版本的RHEL上安装Oracle,必须要有几个软g? 认以下 rpm包都已经安装:

make-3.79
binutils-2.11
openmotif-2.2.2-16
setarch-1.3-1
compat-db-4.0.14.5
compat-gcc-7.3-2.96.122
compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122

# rpm -qa | grep compat
# 在机器上输出如下:

compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122
compat-glibc-7.x-2.2.4.32.5
compat-db-4.0.14-5
compat-gcc-7.3-2.96.122

# rpm -qa | grep openmotif
openmotif-devel-2.2.2-16
openmotif-2.2.2-16

# rpm -qa | grep setarch
setarch-1.3-1


上面昄的内Ҏ(gu)在笔者已l安装了具体的RPM包之后的l果.一般情况下,你的pȝ上的输出l果和这个不?如果个别包没有安?把系l安装光盘mount?扑ֈ具体的Y件包(大多数在W三张光盘上),然后利用如下的命令来安装相应的包:
# rpm -ivh *.rpm

要额外注意的?q些软g包之间是有依赖性的,先后的顺序要扑֥.否则?x)报告不能安装的错? 此外Q最好验证一?gcc和glibc的版?要求是gcc-3.2.3-2 或者更?:
#gcc -v
#rpm -q glibc

1.3 创徏用户和相关的l?/strong>
# /usr/sbin/groupadd oinstall
# /usr/sbin/groupadd dba
# /usr/sbin/useradd -g oinstall -G dba oracle
 

如果只是试目的的话Q不创徏oinstalll也没什? 不过q是规范一Ҏ(gu)较好.如果oracle 用户和dbal等已经存在Q作适当的调整即?

1.4 (g)查ƈ调整环境变量
d为oracle用户

# su - oracle
$ cd
$ vi .bash_profile

#d如下内容,你的具体值应该不?x)和q个完全相同.
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/dbse
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export LC_CTYPE=en_US.UTF-8

然后执行
$ source .bash_profile

使环境变量生? /oracle {目录应该徏立好q做合适的授权.

2. 安装Orale10g
mount安装?׃10g无法以root安装Q以前面建的oracle用户d.执行:

$ ./runInstaller

按照提示安装卛_Q最后还需要以rootq行两个脚本?/font>

3. 配置TNS参数
?/oracle/product/dbse/network/admin/ 目录下有 listener.ora ?tnsnames.ora 两个文gQ设|如下:(x)

#listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /oracle/product/dbse)
      (SID_NAME = orcl)
     )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
        (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
        )
        (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
        )
    )
  )

#tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
        (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

其中SERVICE_NAME与SID_NAME一定要?bash_profile中的ORACLE_SID怸_(d)否则无法启动

4. 启动Oracle
以oracle用户d

4.1 启动TNS监听?/strong>
$ lsnrctl start
出现如下昄Q表C监听服务成功开?br />LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 22-FEB-2006 10:24:03

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Starting /oracle/product/dbse/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /oracle/product/dbse/network/admin/listener.ora
Log messages written to /oracle/product/dbse/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.100)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                22-FEB-2006 10:24:03
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/dbse/network/admin/listener.ora
Listener Log File         /oracle/product/dbse/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.100)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


4.2启动数据?/strong>
9i 之后已经没有 svrmgrl 了,所有的理工作都通过 sqlplus 来完成:(x)
$ sqlplus /nolog
SQL> connect system/change_on_install as sysdba
SQL> startup

出现如下昄Q表COracle已经成功启动
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size              88082024 bytes
Database Buffers          188743680 bytes
Redo Buffers                7168000 bytes
Database mounted.
Database opened.

4.3 自动启动与关?/strong>

~辑 /etc/oratab Q把所有的 instance 的重启动标志讄?'Y'Q如:
orcl:/oracle/product/dbse:Y

做一个启动脚?/etc/init.d/dbora Q如下所C?

#!/bin/sh
# description: Oracle auto start-stop script.
# chkconfig: - 20 80
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.

ORA_HOME=/oracle/product/dbse
ORA_OWNER=oracle
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')

# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values

su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
;;
'stop')

# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
;;
'restart')
$0 stop
$0 start
;;
esac

赋予执行权限
chmod 750 /etc/init.d/dbora

作成以下链接:
ln -s /etc/init.d/dbora /etc/rc0.d/K10dbora
ln -s /etc/init.d/dbora /etc/rc3.d/S99dbora


执行以下命o(h):
chkconfig --level 345 dbora on

q样O(jin)K了。下ơ开x的时候,Oracle也会(x)随之启动/停止?/font>

参考信?/font>

http://www.dbanotes.net



Alex 2006-05-09 13:12 发表评论
]]>
վ֩ģ壺 AVһۿ| ޹ۺϾƷĵһ| ޾ƷĻ| wwwѸƵ| Ƶ߲| ĻƵ| ˺ձjizz| ھƷ鶹վ91鶹| 츾밮v߹ۿ| Ѱvվ߹ۿg| ששר2023 | 弦վ߲ѹۿ| ձ߹ۿƵ| Ƶ| ձһ| 67194츾ѹۿ| ëƬ4455ww| ˸徫Ʒ| ɫAëƬѿ| ޱר| 40ձ| Ƶ| ޹aƵ| պƷƵѹۿ | 츾þþƷ| VAۺVAVA| 2019Ļ| ۺϾþþþþĻ| ¼Ƶѿ| ɫ͵͵˵| ޾Ʒպ?V | AëƬڵ| պŷ| ˺ݺۺϾþ88| ĻƵ߹ۿ| avһۿ| Ļ뱬AV| Ļ˳Ƶ| һ˿wwwѸĻ| ޾ƷĻ鶹| ޹Ʒþþž|