﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-网摘-文章分类-Oracle</title><link>http://www.blogjava.net/jvict/category/33913.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 25 Sep 2010 18:14:40 GMT</lastBuildDate><pubDate>Sat, 25 Sep 2010 18:14:40 GMT</pubDate><ttl>60</ttl><item><title>CentOS 5.5 安装 Oracle 11g2 执行sqlplus提示信息乱码解决</title><link>http://www.blogjava.net/jvict/articles/332875.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 25 Sep 2010 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/332875.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/332875.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/332875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/332875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/332875.html</trackback:ping><description><![CDATA[接着上一篇的内容<br />
<br />
遗留一个乱码的问题。初步原定定位在选择字符集的时候，我当时选的是UTF8。<br />
<br />
我把数据库删除了，重新建立，到那一步选择了系统默认，结果还是出现乱码<br />
<br />
我再来一次 直接选择了ZHS16GBK，结果还是一样。<br />
<br />
其实一直搞错了，刚开始我选择了utf-8，由于系统默认应该是GBK，所以显示的问号。<br />
<br />
现在只需要一个方法<br />
<br />
编辑并运行.bash_profile<br />
<br />
export NLS_LANG=AMERICAN_AMERICA.UTF8<br />
（如果是GBK&nbsp;&nbsp;&nbsp;&nbsp; export NLS_LANG=american_america.ZHS16GBK）<br />
<br />
注销后生效<br />
<br />
这样再重新进入sqlplus<br />
<br />
已经不会是乱码。<br />
<img src ="http://www.blogjava.net/jvict/aggbug/332875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2010-09-25 23:46 <a href="http://www.blogjava.net/jvict/articles/332875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle锁定和解锁用户的命令</title><link>http://www.blogjava.net/jvict/articles/224388.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Tue, 26 Aug 2008 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/224388.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/224388.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/224388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/224388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/224388.html</trackback:ping><description><![CDATA[<p>SQL&gt; conn /as sysdba<br />
已连接。</p>
<p>锁定用户的方法：<br />
SQL&gt; alter user test account lock;</p>
<p>用户已更改。</p>
<p>-------test用户登陆数据库，失败了。<br />
C:\&gt;sqlplus test/test</p>
<p>ERROR:<br />
ORA-28000: the account is locked</p>
<p>解锁的方法：<br />
SQL&gt; conn /as sysdba<br />
SQL&gt; alter user test account unlock;</p>
<p>用户已更改。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/224388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-26 09:59 <a href="http://www.blogjava.net/jvict/articles/224388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle设置OEM的首选身份证明,备份数据库</title><link>http://www.blogjava.net/jvict/articles/223937.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 23 Aug 2008 19:21:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223937.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223937.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223937.html</trackback:ping><description><![CDATA[1。以SYSMAN登陆OEMC &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 2。配置-》首选项-》首选身份证明，设置节点和数据库的身份证明为SYS &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 3。打开计算机管理-》新建一用户SYS，密码与ORACLE一样，让它隶属于Administrator和ORA_DBA &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 4。管理工具-》本地安全策略-》本地策略-》用户权利指派-》在作为批处理指派登陆里加上SYS
<img src ="http://www.blogjava.net/jvict/aggbug/223937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-24 03:21 <a href="http://www.blogjava.net/jvict/articles/223937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在MyEclipse中Derby的基本使用</title><link>http://www.blogjava.net/jvict/articles/223935.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 23 Aug 2008 18:56:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223935.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223935.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223935.html</trackback:ping><description><![CDATA[<p>如果你安装了MyEclipse6.0的话 ，就自带的安装了Derby数据库。如果你觉得其他数据太大的话，完全可以使用这个数据库，操作也非常简单。</p>
<p>首先你必须先启动Derby数据库：</p>
<p>可以通过Server面板启动即可，也可以在MyEclipseDatabaseExplorer中直接打开连接启动 。</p>
<p>默认的用户名为：classiccars 密码为：classiccars</p>
<p>在C:\Documents and Settings\Admin\.myeclipse\libs\derby_10.2.2.0\derbyclient.jar（这个地址可能你和我不一样，Admin这里你可以换成你自己的名字，不知道的话，自己在上级目录找一下）有数据库的jar驱动</p>
<p>完全可以通过MyEclipseDatabaseExplorer操作，SQL语句与Oracle很像。自己实验一下就能搞定了。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/223935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-24 02:56 <a href="http://www.blogjava.net/jvict/articles/223935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>热门数据库JDBC驱动试用心得</title><link>http://www.blogjava.net/jvict/articles/223934.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 23 Aug 2008 18:54:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223934.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223934.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223934.html</trackback:ping><description><![CDATA[<p><a href="http://database.ctocio.com.cn/analysis/46/7697546.shtml">原文: http://database.ctocio.com.cn/analysis/46/7697546.shtml</a><br />
<br />
　本文通过介绍试用Java DB，Oracle，My SQL，MS SQL Server，MS Access等几款当下热门的数据库平台，来向读者介绍如何简单地使用各类JDBC驱动的方法模式，并结合作者实际运用的经验对上述各类数据库平台的应用进行了深入浅出的分析。其中穿插了很多使用经验和技巧，希望给各层次的开发人员都起到一定的参考作用&#8230;&#8230; </p>
<div id="content">
<div class="guanggao"><span id="contentAdv"><br />
<script language="Javascript">
</script></span></div>
<p>　　<strong>一、引言</strong></p>
<p>　　无论是初级还是中高级技术人员，面对着各式各样的数据库平台层出不穷和众多的操作系统功能不断升级，难免会眼花缭乱。特别是当系统面临升级，无论操作平台还是数据库平台，甚至架构都可能需要更替的时候，如何才能抵住众说纷纭，把握好你的选择。幸运的是，利用Java技术可以将这些不同种别的数据库平台和操作系统无缝地连接起来，真正地做到&#8220;集百家之长而为我所用&#8221;。</p>
<p>　　本文将通过一组真实的案例来向读者介绍如何做到简单地使用JDBC驱动来实现在不同的操作系统下存取几款较为热门的数据库平台。</p>
<p>　　特别是对JavaDB这款支持嵌入式模式的纯Java数据库的开发过程进行了详细分析和展望。希望读者能做到举一反三，引入更多的数据库平台的应用。</p>
<p>　　<strong>二、评测框架</strong></p>
<p>　　<strong>1.操作系统平台和数据库平台</strong></p>
<p>　　实例涉及到的操作系统是MS Windows XP + SP2和SUN Solaris 8，数据库平台有：MS Access 2000(以下简称Access)，MS SQL Server 2000(以下简称SQL Server)，My SQL，Oracle和Java DB(J2SE 1.6.0中绑定)。</p>
<p>　　对于XP平台，可以安装以上5种数据库平台。而对于Solaris，只可以安装My SQL和Java DB两种。</p>
<p>　　<strong>2.使用平台搭建</strong></p>
<p>　　(1)安装支持对应操作系统的JDK(http://java.sun.com/javase/downloads/index.jsp)。注意：如果是Solaris操作系统还必须选择对应的CPU类型，本案例中选用的是支持SPARC的JDK版本(jdk-6-solaris-sparc.sh)。在XP系统中安装的JDK Update3版本的JDK(jdk-6u3-windows-i586-p.exe)，保证该版本中已经绑定Java DB。</p>
<p>　　(2)设置JAVA_HOME，PATH和CLASSPATH等环境变量。以便正常编译和运行Java代码。</p>
<p>　　(3)下载My SQL Connector/J驱动，并将其中的mysql-connector-java-5.1.0-bin.jar文件(其中5.1.0为驱动版本号)添加到CLASSPATH变量中。需要说明的是，该驱动文件中包含两种JDBC驱动，一种是mm.mysql，一种是mysql普通JDBC驱动。两者都可以使用。</p>
<p>　　(4)将包含Java DB和Oracle的驱动文件加入到CLASSPATH中。分别为derby.jar和classes12.jar。都可以在相应的产品安装目录中找到。</p>
<p>　　通过上述的配置之后，我们就可以开始在XP系统和Solaris系统中对各类数据库平台进行使用了。</p>
<p>　　<strong>三、试用准备</strong></p>
<p>　　<strong>1.简化JDBC函数</strong></p>
<p>　　为了方便开发人员的使用，作者提炼出以下简化后的常用JDBC函数：</p>
<p>　　<img height="285" alt="" src="http://image.it168.com/cms/2007-11-2/Image/20071128463.gif" width="565" /></p>
</div>
这些函数基本上已经满足大部分的使用，初级开发人员按照函数的调用步骤就可以实现通过JDBC驱动与各种数据库平台进行交互了。
<p>　　如果用户对数据库操作的效率比较关注，那么还有3组比较重要的，也是常用的JDBC函数，分别是：</p>
<p>　　(1)事务处理函数：setAutoCommit/commit/rollback</p>
<p>　　(2)批处理函数：addBatch/execBatch</p>
<p>　　(3)语句预处理函数：prepareStatement</p>
<p>　　对于大多数开发人员，只需要知道其用法含义即可，深层次的探索和分析可能需要另外的篇幅来说明，因此作者在此不再赘述。</p>
<p>　　实际上，上述基本函数的定义，大部分都是对JDK中JDBC函数的封装，读者也可以通过JDBC的文档进行相关的查阅。关键代码参见全文末尾附录部分。</p>
<p>　　<strong>2.数据库表定义</strong></p>
<p>　　作为试用，作者并没有定义很复杂的数据库表，以下是测试用数据表结构：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　create&nbsp;table&nbsp;user_info( <br />
            　　ui_id&nbsp;varchar(64), <br />
            　　ui_passwd&nbsp;varchar(64), <br />
            　　ui_real_name&nbsp;varchar(64),&nbsp;primary&nbsp;key(ui_id));</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　<strong>3.试用思路</strong></p>
<p>　　比较简单，就是通过上述不同类型的JDBC驱动来连接各种数据库平台，然后向已经初始化的数据表插入10000条记录，再逐条读取，并记录其各个步骤的执行耗费。</p>
<p>　　<strong>四、试用过程</strong></p>
<p>　　<strong>1.平台选择</strong></p>
<p>　　作者选择了MS Windows XP和Solaris两种平台。其中只有MySQL，JavaDB和Oracle(连接远程服务器)既可在Windows平台进行了测试，也可在Solaris平台下进行了测试。两个系统下的测试代码和框架完全相同。</p>
<p>　　<strong>2.使用JDBC驱动连接数据库</strong></p>
<p>　　<strong>(1)Access数据库</strong></p>
<p>　　通过JDBC驱动连接Access数据库最常用的是采用建立ODBC数据源(DSN)的方式进行，但是本测试中采用的是通过数据库连接字符串避开了手工建立DSN的部分。以下是关键代码：</p>
<p>　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　final&nbsp;String&nbsp;connectStr&nbsp;= <br />
            　　&#8220;jdbc:odbc:driver={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)};DBQ=./TestDB.mdb&#8221;; <br />
            　　&#8230;&#8230; <br />
            　　if(&nbsp;(conn&nbsp;=&nbsp;FoolDB.openDB(connectStr,&nbsp;null,&nbsp;null))&nbsp;==&nbsp;null)</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　用过ADO的读者可能一眼就看出来了，上述的连接字符串中的内容和ADO很相似。事实上，作者就是为了避开建立DNS而尝试套用了ADO的连接字符串，结果尝试通过了!</p>
<p>　　<strong>(2)SQL Server数据库</strong></p>
<p>　　需要说明的，对于SQL Server的测试没有采用Microsoft提供的SQL Server专用的JDBC驱动，还是通过借鉴ADO的连接字符串形式，沿用了JDK自带的JdbcOdbc驱动。</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　final&nbsp;String&nbsp;connectStr&nbsp;= <br />
            　　&#8220;jdbc:odbc:Driver={SQL&nbsp;Server};Server=.;Database=master;UID=sa;PWD=121fs&#8221;; <br />
            　　&#8230;&#8230; <br />
            　　if(&nbsp;(conn&nbsp;=&nbsp;FoolDB.openDB(connectStr,&nbsp;null,&nbsp;null))&nbsp;==&nbsp;null)</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　注意：用户名和密码已经包含到连接字符串中。</p>
SUN公司提供的SQL Server的JDBC驱动的版本应该比较陈旧，所以可能导致在操作数据库功能支持和效率方面比当前新的JDBC驱动要差一些。Microsoft提供的SQL Server JDBC驱动类名为：&#8220;com.microsoft.jdbc.sqlserver.SQLServerDriver&#8221;，连接字符串形如：&#8220;jdbc:microsoft:sqlserver://hostname:port;DataBaseName=dbname&#8221;。
<p>　　<strong>(3)MySQL数据库</strong></p>
<p>　　众所周知，MySQL数据库既可以在Windows可以在Solaris平台运行，而且执行效率也深得业界的好评。本试例中连接MySQL使用的是MySQL专用驱动(在第一部分已经详述，在MySQL官方网页有很多的支持文档)，以下是关键代码：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　final&nbsp;String&nbsp;connectStr&nbsp;=&nbsp;&#8220;jdbc:mysql://localhost/phome&#8221;; <br />
            　　final&nbsp;String&nbsp;userName&nbsp;=&nbsp;&#8220;root&#8221;;&nbsp;// <br />
            　　final&nbsp;String&nbsp;passwd&nbsp;=&nbsp;&#8220;&#8220;; <br />
            　　&#8230;&#8230; <br />
            　　if(&nbsp;(conn&nbsp;=&nbsp;FoolDB.openDB(connectStr,&nbsp;userName,&nbsp;passwd))&nbsp;==&nbsp;null)</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　在本地连接时，主机名可以使用&#8220;localhost&#8221;，但如果连接远程主机时，必须换成该远程主机的IP，而phome是MySQL数据库名称。</p>
<p>　　<strong>(4)Oracle数据库</strong></p>
<p>　　Oracle提供了thin和oci两种类型的驱动，本测试中使用thin类型JDBC驱动。</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　final&nbsp;String&nbsp;connectStr&nbsp;=&nbsp;&#8220;jdbc:oracle:thin:@WBS:1521/oracle088&#8221;; <br />
            　　final&nbsp;String&nbsp;userName&nbsp;=&nbsp;&#8220;test&#8221;; <br />
            　　final&nbsp;String&nbsp;passwd&nbsp;=&nbsp;&#8220;test&#8221;;</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　其中&#8220;WBS:1521/oracle088&#8221;为Oracle服务器的SID。</p>
<p>　　<strong>(5)Java DB</strong></p>
<p>　　值得一提的，Java DB是由Apache Software Foundation主要参与开发的一个数据库(DB)项目，SUN在JDK1.6.0中将其进行了绑定，它是一款名副其实的纯Java代码开发的数据库平台。可以支持Server/Client也可以支持嵌入式运行模式，本实例中主要采用了嵌入式模式(Embedded)进行操作：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　final&nbsp;String&nbsp;connectStr&nbsp;=&nbsp;&#8220;jdbc:derby:FoolDB&#8221;; <br />
            　　&#8230;&#8230; <br />
            　　if(&nbsp;(conn&nbsp;=&nbsp;FoolDB.openDB(connectStr,&nbsp;null,&nbsp;null))&nbsp;==&nbsp;null)</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　其中FoolDB是在初始化过程中，使用连接字符串&#8220;jdbc:derby:FoolDB;create=true&#8221;进行创建的。创建的结果是：在当前目录中创建一个名为FoolDB的目录，该目录又中包含log，seg0和tmp这3个文件夹，而数据库内容以多文件的方式存放于seg0目录中。</p>
<p>　　注意：数据库一旦创建之后，就无需再次创建了。</p>
<p>　　<strong>3.设置数据库事务方式</strong></p>
<p>　　当数据库连接成功之后，需要设定连接的事务方式(前提是该数据库平台支持事务处理)为非自动提交，因为JDBC函数默认为自动提交。</p>
<p>　　提交过于频繁，就会使数据库操作的效率较低。特别是对于Oracle这种绝对支持事务处理的数据平台而言，设置是否自动提交对系统的效率将有很大的影响。</p>
<strong>4.采用批处理方式插入记录</strong>
<p>　　同样一个考虑效率的操作，循环地执行操作语句(Insert，Update)也会增加很多不必要地开销。试例中采用了批量处理的方式，通过这种方式将要进行的操作先进行汇总，再批量提交执行。这样就可以获得较高的执行效率。</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　//Insert&nbsp;records <br />
            　　for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;RECORD_COUNT;&nbsp;++i) <br />
            　　{ <br />
            　　//Add&nbsp;each&nbsp;operation&nbsp;to&nbsp;batch <br />
            　　if(FoolDB.addBatch(execStat,&nbsp;&#8220;insert&nbsp;into&nbsp;user_info&nbsp;values('guest&#8221; <br />
            　　+&nbsp;Integer.toString(i&nbsp;+&nbsp;1) <br />
            　　+&nbsp;&#8220;',&nbsp;'666666',&nbsp;'我是中国人')&#8221;)&nbsp;==&nbsp;false) <br />
            　　&#8230;&#8230; <br />
            　　FoolDB.execBatch(execStat);&nbsp;//Execute&nbsp;batch&nbsp;operations <br />
            　　FoolDB.commit(conn); <br />
            　　FoolDB.setAutoCommit(conn,&nbsp;true);</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　这种批处理的方式，可以视同预处理，通过统合批量的操作来减少与数据库的交互频率，也减少数据库访问IO设备的频率，从而也可获得较高的效率。</p>
<p>　　<strong>5.使用行游标读取记录字段</strong></p>
<p>　　记录插入完毕之后，通过执行查询语句来获取数据集。然后再通过简化函数moveNext来逐行读取结果集的记录行：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　//Select&nbsp;from&nbsp;table <br />
            　　String&nbsp;sql&nbsp;=&nbsp;"select&nbsp;*&nbsp;from&nbsp;user_info"; <br />
            　　if(&nbsp;(queryRS&nbsp;=&nbsp;FoolDB.openQuery(queryStat,&nbsp;sql))&nbsp;==&nbsp;null) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　&#8230; <br />
            　　while(FoolDB.moveNext(queryRS)&nbsp;==&nbsp;true) <br />
            　　{ <br />
            　　//Field&nbsp;ui_id,&nbsp;text(64)&nbsp;type <br />
            　　FoolDB.getFieldByName(queryRS,&nbsp;&#8220;ui_id&#8221;); <br />
            　　//Field&nbsp;ui_passwd,&nbsp;text(64)&nbsp;type <br />
            　　FoolDB.getFieldByName(queryRS,&nbsp;&#8220;ui_passwd&#8221;); <br />
            　　//Field&nbsp;ui_real_name,&nbsp;text(64)&nbsp;type <br />
            　　FoolDB.getFieldByName(queryRS,&nbsp;&#8220;ui_real_name&#8221;); <br />
            　　}</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　实际上，moveNext的函数名也来源于ADO(在作者看来，JDBC和ADO的应用方式是相同的)。</p>
<p>　　<strong>6.关闭数据库</strong></p>
<p>　　这里主要对以嵌入式模式运行的JavaDB的关闭进行说明，其他数据库的关闭，直接采用简化后的关闭函数(closeDB)即可。</p>
<p>　　在嵌入式模式，应用程序退出时就必须关闭数据库。但是如果应用程序关闭数据库失败，当JVM退出时不会对该未被关闭的连接进行检查，这样就占用了数据库的连接资源，就会影响后续的连接执行效率。所以Apache Derby的建议是采用URL的方式显示地关闭数据库。以下是关键代码：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　FoolDB.closeDB(conn);&nbsp;//Close&nbsp;connection <br />
            　　if(framework.equals("embedded")&nbsp;==&nbsp;true)&nbsp;//If&nbsp;in&nbsp;embedded&nbsp;mode <br />
            　　{ <br />
            　　//Use&nbsp;URL&nbsp;to&nbsp;shutdown&nbsp;Derby <br />
            　　if(FoolDB.openDB("jdbc:derby:;shutdown=true",&nbsp;null,&nbsp;null)&nbsp;==&nbsp;null) <br />
            　　{ <br />
            　　//If&nbsp;shutdown&nbsp;failure&nbsp;means&nbsp;that&nbsp;Derby&nbsp;already&nbsp;shutdown <br />
            　　isShutdownOk&nbsp;=&nbsp;true; <br />
            　　} <br />
            　　if&nbsp;(isShutdownOk&nbsp;==&nbsp;false)&nbsp;//Not&nbsp;shutdown&nbsp;normally <br />
            　　{ <br />
            　　System.out.println("Derby&nbsp;shutdown&nbsp;NG."); <br />
            　　} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　注意：关闭和判断Derby数据库是否正常关闭的连接字符串中是不包含数据库名的。</p>
<strong>7.记录各步骤操作的时间戳</strong>
<p>　　以上的操作中，在各个步骤之间添加了时间戳，以此来记录各个数据库平台的执行耗费。</p>
<p>　　<strong>五、结果及分析</strong></p>
<p>　　<img height="281" alt="" src="http://image.it168.com/cms/2007-11-2/Image/200711285149.gif" width="578" /></p>
<p>　　在对试用结果进行评价之前，读者需要考虑各款数据库平台的特点，而不能简单地从执行时间的长短来进行判断，以下是笔者根据开发经验总结出的需要注意的地方：</p>
<p>　　(1)要保证JDBC驱动和数据库平台的连接是无缝的。例如Oracle和JavaDB数据库本身就是由Java开发，其JDBC驱动和数据库平台的连接可以做到完全无缝，这样可以充分体现出该款数据库平台的特性。反之，Access和SQL Server与对应的JdbcOdbc驱动之间的耦合可能就不如与ADO驱动那么吻合，那么这些数据平台的很多特性就无法通过这些JDBC驱动得以体现。之前我们也提到，Microsoft专门有提供MS SQL Server的JDBC驱动，数据库与这种&#8220;对口&#8221;的JDBC驱动的耦合肯定要超过JdbcOdbc这种通用型的驱动。</p>
<p>　　(2)数据库平台要有良好的可移植性。换句话说就是数据库跨操作系统的性能。在这些方面Oracle，MySQL和JavaDB就要比Access和SQL Server有明显优势，它们不仅可以支持Windows平台而且也支持Solaris和Linux平台。而且数据库平台的可移植很大程度也决定了应用系统的可移植性。</p>
<p>　　(3)数据库平台要支持应用的多样化(需求弹性)。数据库平台应该不仅可以对应传统的C/S，B/S模式，而且还可以扩展为三层的，甚至是多层的模式，或者支持嵌入式系统的应用。显而易见，本身使用Java开发的Oracle和JavaDB在这些方面就具有得天独厚的优势。而且JavaDB还支持嵌入式应用，这样以来数据库的应用空间就更为广阔了。</p>
<p>　　所以基于以上几点的考虑，我们就可以得出初步的意向：</p>
<p>　　(1)对于一般的中小型的C/S和B/S架构，MySQL可以说是我们当前首选。它在跨平台和执行效率方面表现得相当的出色。</p>
<p>　　(2)对于那些对系统构架弹性要求比较高的系统，可以选择Oracle平台，并结合EJB规范进行搭建系统构架无疑将是很好的选择。</p>
<p>　　(3)选用JavaDB进行嵌入式平台开发似乎是不错的主意。由于现在很多嵌入式设备中都嵌入了Java内核，JavaDB也就可以得以应用了，嵌入式设备与其他系统共享数据的接口就变得及其简单。</p>
<p>　　(4)如果只在Windows平台进行开发的中小型系统，用Access或者SQL Server平台也不妨是一种简单快捷的途径。</p>
<p>　　<strong>六、结束语</strong></p>
<p>　　通过前两部分的说明，相信大家对JDBC的使用应该有相当部分的了解和收获。即使作为初学者，通过简化后的JDBC函数和固定的试用方式，就可以实现通过JSP页面，Java Applet或者是Java Application等程序来访问各种类型的数据库平台了。即使是在本文中没有提到的其他数据库平台，例如：IBM的DB2，Solaris 10中绑定的PostgreSQL数据库。</p>
<p>　　尤其的，对于中高级技术人员而言，也可以通过这几种热门的数据库平台在不同操作系统下的使用案例得到一定的参考。</p>
<p>　　其中，特别是介绍了对嵌入式数据库的使用，相信也一定开阔了大家的视野和应用范围，毕竟嵌入式系统的应用在目前也是如火如荼。在后续的实际开发中笔者会将更多的心得体会和大家一起分享。</p>
<strong>七、附录：</strong>
<p>　　<strong>1.主要FoolDB函数参考</strong><strong></p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">　　//Get&nbsp;a&nbsp;conn&nbsp;to&nbsp;special&nbsp;database. <br />
            　　public&nbsp;static&nbsp;Connection&nbsp;openDB(final&nbsp;String&nbsp;url,&nbsp;final&nbsp;String&nbsp;user,&nbsp;final&nbsp;String&nbsp;passwd) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(DriverManager.getConnection(url,&nbsp;user,&nbsp;passwd)&nbsp;); <br />
            　　} <br />
            　　catch&nbsp;(SQLException&nbsp;CONNECT_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;a&nbsp;statement&nbsp;object&nbsp;that&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;query&nbsp;(read&nbsp;only) <br />
            　　public&nbsp;static&nbsp;Statement&nbsp;getQueryStat(final&nbsp;Connection&nbsp;conn) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, <br />
            　　ResultSet.CONCUR_READ_ONLY)&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;CREATE_QUERY_STATEMENT) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;a&nbsp;statement&nbsp;object&nbsp;that&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;update&nbsp;(can&nbsp;write) <br />
            　　public&nbsp;static&nbsp;Statement&nbsp;getExecStat(final&nbsp;Connection&nbsp;conn) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, <br />
            　　ResultSet.CONCUR_UPDATABLE)&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;CREATE_EXEC_STATEMENT) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Execute&nbsp;SQL&nbsp;statement,&nbsp;and&nbsp;get&nbsp;the&nbsp;result&nbsp;set. <br />
            　　public&nbsp;static&nbsp;ResultSet&nbsp;openQuery(final&nbsp;Statement&nbsp;stat,&nbsp;final&nbsp;String&nbsp;sql) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(stat.executeQuery(sql)&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;OPEN_QUERY) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;the&nbsp;rows&nbsp;cout&nbsp;of&nbsp;result&nbsp;set. <br />
            　　//The&nbsp;result&nbsp;set&nbsp;type&nbsp;should&nbsp;be&nbsp;ResultSet&nbsp;type&nbsp;is&nbsp;TYPE_SCROLL_SENSITIVE. <br />
            　　public&nbsp;static&nbsp;int&nbsp;getRowsCount(ResultSet&nbsp;rs) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　int&nbsp;rowsCount&nbsp;=&nbsp;0; <br />
            　　//Backup&nbsp;current&nbsp;row&nbsp;no. <br />
            　　int&nbsp;rowNo&nbsp;=&nbsp;rs.getRow(); <br />
            　　//Locate&nbsp;last&nbsp;row <br />
            　　rs.last(); <br />
            　　//Get&nbsp;the&nbsp;rows&nbsp;count <br />
            　　rowsCount&nbsp;=&nbsp;rs.getRow(); <br />
            　　//Return&nbsp;back&nbsp;original&nbsp;row <br />
            　　if(rowNo&nbsp;&lt;&nbsp;1)&nbsp;//before&nbsp;first&nbsp;row <br />
            　　{ <br />
            　　rs.beforeFirst(); <br />
            　　} <br />
            　　else&nbsp;// <br />
            　　{ <br />
            　　rs.absolute(rowNo); <br />
            　　} <br />
            　　return&nbsp;(rowsCount); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_ROWS_COUNT_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;the&nbsp;columns&nbsp;count&nbsp;of&nbsp;resut&nbsp;set. <br />
            　　public&nbsp;static&nbsp;int&nbsp;getColsCount(final&nbsp;ResultSet&nbsp;rs) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　ResultSetMetaData&nbsp;rsmd&nbsp;=&nbsp;rs.getMetaData(); <br />
            　　return&nbsp;(rsmd.getColumnCount()&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_COLS_COUNT_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;special&nbsp;column&nbsp;name. <br />
            　　//Note:&nbsp;The&nbsp;index&nbsp;of&nbsp;column&nbsp;base&nbsp;1,&nbsp;but&nbsp;not&nbsp;0. <br />
            　　public&nbsp;static&nbsp;String&nbsp;getColName(final&nbsp;ResultSet&nbsp;rs,&nbsp;final&nbsp;int&nbsp;colIndex) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　ResultSetMetaData&nbsp;rsmd&nbsp;=&nbsp;rs.getMetaData(); <br />
            　　return&nbsp;(rsmd.getColumnName(colIndex)&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_COL_NAME_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Move&nbsp;the&nbsp;cursor&nbsp;of&nbsp;result&nbsp;set&nbsp;to&nbsp;next&nbsp;row <br />
            　　public&nbsp;static&nbsp;boolean&nbsp;moveNext(ResultSet&nbsp;rs) <br />
            　　{ <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(rs.next()&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;MOVE_NEXT_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;the&nbsp;retValue&nbsp;of&nbsp;cell&nbsp;by&nbsp;special&nbsp;row&nbsp;number&nbsp;and&nbsp;column&nbsp;number <br />
            　　//The&nbsp;result&nbsp;set&nbsp;type&nbsp;should&nbsp;be&nbsp;ResultSet&nbsp;type&nbsp;is&nbsp;TYPE_SCROLL_SENSITIVE. <br />
            　　//Note:&nbsp;The&nbsp;index&nbsp;of&nbsp;row&nbsp;and&nbsp;column&nbsp;all&nbsp;base&nbsp;1,&nbsp;but&nbsp;no&nbsp;0. <br />
            　　public&nbsp;static&nbsp;Object&nbsp;getValueAt(ResultSet&nbsp;rs,&nbsp;final&nbsp;int&nbsp;rowIndex,&nbsp;final&nbsp;int&nbsp;colIndex) <br />
            　　{ <br />
            　　if(&nbsp;(rowIndex&nbsp;&lt;&nbsp;1)&nbsp;||&nbsp;(colIndex&nbsp;&lt;&nbsp;1)&nbsp;) <br />
            　　{ <br />
            　　return&nbsp;(null); <br />
            　　} <br />
            　　try <br />
            　　{ <br />
            　　//Backup&nbsp;current&nbsp;row&nbsp;no. <br />
            　　int&nbsp;rowNo&nbsp;=&nbsp;rs.getRow(); <br />
            　　Object&nbsp;retValue&nbsp;=&nbsp;null; <br />
            　　//Locate&nbsp;to&nbsp;special&nbsp;row <br />
            　　rs.absolute(rowIndex); <br />
            　　//Get&nbsp;retValue <br />
            　　retValue&nbsp;=&nbsp;rs.getObject(colIndex); <br />
            　　//Return&nbsp;back&nbsp;origianl&nbsp;row <br />
            　　rs.absolute(rowNo); <br />
            　　return&nbsp;(retValue); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_VALUE_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;the&nbsp;retValue&nbsp;of&nbsp;cell&nbsp;by&nbsp;special&nbsp;row&nbsp;number&nbsp;and&nbsp;field&nbsp;name <br />
            　　//The&nbsp;result&nbsp;set&nbsp;type&nbsp;should&nbsp;be&nbsp;ResultSet&nbsp;type&nbsp;is&nbsp;TYPE_SCROLL_SENSITIVE. <br />
            　　//Note:&nbsp;The&nbsp;index&nbsp;of&nbsp;row&nbsp;and&nbsp;column&nbsp;all&nbsp;base&nbsp;1,&nbsp;but&nbsp;no&nbsp;0. <br />
            　　public&nbsp;static&nbsp;Object&nbsp;getFieldByName(ResultSet&nbsp;rs,&nbsp;final&nbsp;int&nbsp;rowIndex,&nbsp;final&nbsp;String&nbsp;fieldName) <br />
            　　{ <br />
            　　if(&nbsp;(rowIndex&nbsp;&lt;&nbsp;1)&nbsp;||&nbsp;(fieldName.equals("")&nbsp;==&nbsp;true)&nbsp;) <br />
            　　{ <br />
            　　return&nbsp;(null); <br />
            　　} <br />
            　　try <br />
            　　{ <br />
            　　//Backup&nbsp;current&nbsp;row&nbsp;no. <br />
            　　int&nbsp;rowNo&nbsp;=&nbsp;rs.getRow(); <br />
            　　Object&nbsp;retValue&nbsp;=&nbsp;null; <br />
            　　//Locate&nbsp;to&nbsp;special&nbsp;row <br />
            　　rs.absolute(rowNo); <br />
            　　//Get&nbsp;retValue <br />
            　　retValue&nbsp;=&nbsp;rs.getObject(fieldName); <br />
            　　//Return&nbsp;back&nbsp;origianl&nbsp;row&nbsp;no. <br />
            　　rs.absolute(rowNo); <br />
            　　return&nbsp;(retValue); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_FIELD_BY_NAME_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;the&nbsp;retValue&nbsp;of&nbsp;cell&nbsp;within&nbsp;current&nbsp;row&nbsp;by&nbsp;special&nbsp;field&nbsp;name <br />
            　　//The&nbsp;result&nbsp;set&nbsp;type&nbsp;should&nbsp;be&nbsp;ResultSet&nbsp;type&nbsp;is&nbsp;TYPE_SCROLL_SENSITIVE. <br />
            　　//Note:&nbsp;The&nbsp;index&nbsp;of&nbsp;row&nbsp;and&nbsp;column&nbsp;all&nbsp;base&nbsp;1,&nbsp;but&nbsp;no&nbsp;0. <br />
            　　public&nbsp;static&nbsp;Object&nbsp;getFieldByName(final&nbsp;ResultSet&nbsp;rs,&nbsp;final&nbsp;String&nbsp;fieldName) <br />
            　　{ <br />
            　　if(&nbsp;(isBOF(rs)&nbsp;==&nbsp;true)&nbsp;||&nbsp;(isEOF(rs)&nbsp;==&nbsp;true)&nbsp;) <br />
            　　{ <br />
            　　return&nbsp;(null); <br />
            　　} <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(rs.getObject(fieldName)&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_FIELD_BY_NAME_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　} <br />
            　　//Get&nbsp;the&nbsp;retValue&nbsp;of&nbsp;cell&nbsp;within&nbsp;current&nbsp;row&nbsp;by&nbsp;special&nbsp;column&nbsp;index <br />
            　　//The&nbsp;result&nbsp;set&nbsp;type&nbsp;should&nbsp;be&nbsp;ResultSet&nbsp;type&nbsp;is&nbsp;TYPE_SCROLL_SENSITIVE. <br />
            　　//Note:&nbsp;The&nbsp;index&nbsp;of&nbsp;row&nbsp;and&nbsp;column&nbsp;all&nbsp;base&nbsp;1,&nbsp;but&nbsp;no&nbsp;0. <br />
            　　public&nbsp;static&nbsp;Object&nbsp;getFieldByIndex(final&nbsp;ResultSet&nbsp;rs,&nbsp;final&nbsp;int&nbsp;columnIndex) <br />
            　　{ <br />
            　　if(&nbsp;(columnIndex&nbsp;&lt;&nbsp;1)&nbsp;||&nbsp;(isBOF(rs)&nbsp;==&nbsp;true)&nbsp;||&nbsp;(isEOF(rs)&nbsp;==&nbsp;true)&nbsp;) <br />
            　　{ <br />
            　　return&nbsp;(null); <br />
            　　} <br />
            　　try <br />
            　　{ <br />
            　　return&nbsp;(rs.getObject(columnIndex)&nbsp;); <br />
            　　} <br />
            　　catch(SQLException&nbsp;GET_FIELD_BY_INDEX_FAILURE) <br />
            　　{ <br />
            　　&#8230; <br />
            　　} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
</strong></p>
<img src ="http://www.blogjava.net/jvict/aggbug/223934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-24 02:54 <a href="http://www.blogjava.net/jvict/articles/223934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VTK-1000：无法登陆到MANAGEMENT SERVER。</title><link>http://www.blogjava.net/jvict/articles/223932.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Sat, 23 Aug 2008 18:31:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223932.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223932.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223932.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="message1674200">在登陆到oms的时候，必须确认你已经创建了一个资料档案库，且oms已经启动，在操作系统命令提示符下输入oemctl status oms命令是显示你的oms的状态，如果没有创建，会给出错误提示。输入oemct start oms是启动oms服务。另外，用emca可以创建资料档案库，根据向导进行设置就行了。</div>
<img src ="http://www.blogjava.net/jvict/aggbug/223932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-24 02:31 <a href="http://www.blogjava.net/jvict/articles/223932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>记录一下Oracle 9i Client中SQL Plus的使用经验</title><link>http://www.blogjava.net/jvict/articles/223818.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 22 Aug 2008 17:28:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223818.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223818.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223818.html</trackback:ping><description><![CDATA[<p>Oracle 10G 删除回收站里的表: purge recyclebin<br />
我是第一次用SQLPlus，之前我只用过MS SQL，用到Oracle数据库是因为我们公司用Oracle，而我又主持了一个项目要连接到Oracle数据库，迫使我来用它的客户端工具。</p>
<p>因为是第一次用，又没有任何准备，手头没有使用手册也没有人教我，只好凭自己的经验和知识，摸索着用。配置&#8220;Net Configuration Assistant&#8221;就花了不少时间，主要原因是管服务器的人不愿告诉我一些参数，我只好凭着程序里的信息去猜，总算连通了。</p>
<p>SQL Plus连上服务器后，我很自然的输入一条查询语句，回车，却没有我期望的结果，出来一个数字 2，再回车就回到&#8220;SQL&gt;&#8221;提示符。我一开始还以为 2 是查询返回的记录或者至少是跟记录相关的什么统计数据之类呢。但是不论我查什么表都是返回2，我确定这是一个使用问题了，找了一圈环境参数的设置说明，没有结果，到Google上去查，得到说法了。原来是SQL语句没有结束，要加一个&#8220;;&#8221;做为结束符。如果不加这个分号的话，就会出现一个2表示第二行，让你继续输入sql语句。</p>
<p>接下来，我做了个Insert 操作，但是查询表没有看到新添加的记录，再去Google查，发现要用Commit命令，Commit 后面也要加&#8220;;&#8221;。</p>
<p>我因为有大量重复的插入语句，我把SQL语句存在文本文件里，用Notepad打开，语句里有中文，粘贴到SQLPlus后，中文全部变成&#8220;？&#8221;，实际执行插入，再调出来看也是&#8220;？&#8221;。至今没有找到明确解释。我用了两个替代方法，一个是用 SQLPlus Worksheet，粘贴到里面没有乱码，显示正常。另一个方法就是不用Notepad打开文本文件，比如用Ultraedit或MSE7，从这里面复制再粘贴到SQLPlus就没有问题。</p>
<p>另外接触到一些其它知识，罗列一下：</p>
<p>1. &nbsp;Help 命令，这个很有用，可以列出SQLPlus中所有命令，也可以解释具体的某个命令。</p>
<p>2. Show All&nbsp; 显示所有系统参数，可以把 All 替换成单个变量。</p>
<p>3. DESC[RIBE] tablename，列出表的字段定义。还可以看视图，函数，过程等的定义。在MS SQL Server中我们是用 sp_help 过程看表的信息。</p>
<p>4. select&nbsp; table_name&nbsp; from&nbsp;&nbsp; user_tables; 该语句查询本用户下所拥有的所有表的表名。</p>
<p>5. SQLPlus的buffer中缓存最后一条SQL语句，可以使用&#8220;/&#8221;来执行这最后一条SQLl语句，用Edit命令打开编辑程序，显示的也是这最后一条SQLl语句。<br />
<br />
6. Select &nbsp; * &nbsp; from &nbsp; V$NLS_PARAMETERS ; 查看服务器端字符集。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/223818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-23 01:28 <a href="http://www.blogjava.net/jvict/articles/223818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装oracle遇到AreasQueries 无法装载数据库 问题</title><link>http://www.blogjava.net/jvict/articles/223787.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 22 Aug 2008 14:00:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223787.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223787.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223787.html</trackback:ping><description><![CDATA[<p>1. 停止所有关于Oracle的服务<br />
2. 删除Oracle安装目录,主要分布在两个地方(如D盘跟目录下面以及C盘Program Files下面),删除时提示无法删除的错误,重新启动机器重新删除就可以了<br />
3. 删除注册表里的内容<br />
&nbsp; HKEY_LOCAL_MACHINE\SOFTWARE删除Oracle目录<br />
&nbsp; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services以Oracle开头的键值<br />
注意:安装时要保证Oracle安装目录不能带有中文字符<br />
如果已经安装了ArcSDE For Oracle,在删除Oracle键值的时候,不能删除带有ArcSDE关键字的键值,否则容易造成ArcSDE无法运行</p>
<p>注意安装oracle时，注意源程序的路径一定不要有中文，我已经遇到过两次这样的问题了！</p>
<img src ="http://www.blogjava.net/jvict/aggbug/223787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-22 22:00 <a href="http://www.blogjava.net/jvict/articles/223787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu安装oracle 10g（转）</title><link>http://www.blogjava.net/jvict/articles/223751.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 22 Aug 2008 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223751.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223751.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223751.html</trackback:ping><description><![CDATA[<p class="TOC">http://hi.baidu.com/czjr/blog/item/3509a0ddd68a89315982dd9a.html<br />
<br />
目录</p>
<div class="TOC">
<dl>
<dt>1. 安装准备
<dd>
<dl>
<dt>1.1. 设置用户
<dt>1.2. 创建目录和设置权限
<dt>1.3. 更改配置
<dt>1.4. 安装
<dt>1.5. 启动/停止Oracle </dt></dl></dd></dl></div>
<div class="section">
<h1 class="section"><a name="AEN3">1. 安装准备</a></h1>
<p>安装开始前，确认你的系统符合Oracle的最小安装要求:</p>
<ul>
    <li>500 MB 内存
    <li>1 GB 交换分区
    <li>确认你已经安装了gcc, make, binutils, lesstif2, libc6, 和 rpm </li>
</ul>
<p>*最好确认 dns 和/或 你的 /etc/hosts 文件已经正确配置了，以保证你的IP地址和hostname能正确解析.</p>
<div class="section">
<h2 class="section"><a name="AEN14">1.1. 设置用户</a></h2>
<p>我们需要为安装程序创建一个oracle 用户和两个组. 首先检查它们是否已经存在:</p>
<pre class="programlisting">$grep oinstall /etc/group<br />
$grep dba /etc/group<br />
$grep nobody /etc/group</pre>
<p>如果它们还不在系统中，那么创建它们。</p>
<pre class="programlisting">#addgroup oinstall<br />
#addgroup dba<br />
#addgroup nobody<br />
#useradd -g oinstall -G dba -p passwd -d /home/oracle -s /bin/bash oracle<br />
#usermod -g nobody nobody</pre>
</div>
<div class="section">
<h2 class="section"><a name="AEN20">1.2. 创建目录和设置权限 </a></h2>
<p>注意: oracle缺省目录是 /u01 和 /u02. 我们为了和FHS有更好的兼容性，更改为 /opt/oracle 和 /opt/oradata:</p>
<pre class="programlisting">#mkdir -p /opt/oracle<br />
#mkdir -p /opt/oradata<br />
#chown -R oracle:oinstall /opt/ora*<br />
#chmod -R 775 /opt/ora*</pre>
</div>
<div class="section">
<h2 class="section"><a name="AEN24">1.3. 更改配置 </a></h2>
<p>添加以下行到 /etc/sysctl.conf 文件中:</p>
<pre class="programlisting">kernel.shmall = 2097152<br />
kernel.shmmax = 2147483648<br />
kernel.shmmni = 4096<br />
kernel.sem = 250 32000 100 128<br />
fs.file-max = 65536<br />
net.ipv4.ip_local_port_range = 1024 65000</pre>
<p>更新系统, 运行:</p>
<pre class="programlisting">#sysctl -p</pre>
<p>添加以下行到 /etc/security/limits.conf 文件中:</p>
<pre class="programlisting">*    soft    nproc    2407<br />
*    hard    nproc    16384<br />
*    soft    nofile   1024<br />
*    hard    nofile   65536</pre>
<p>建立软连接:</p>
<pre class="programlisting">#ln -s /usr/bin/awk /bin/awk<br />
#ln -s /usr/bin/rpm /bin/rpm<br />
#ln -s /usr/bin/basename /bin/basename</pre>
<p>通过创建一个新文件/etc/redhat-release并添加以下行，欺骗安装程序让它以为我们的系统是RedHat:</p>
<pre class="programlisting">Red Hat Linux release 2.1 (drupal)</pre>
</div>
<div class="section">
<h2 class="section"><a name="AEN36">1.4. 安装</a></h2>
<p>用oracle用户登录，将安装文件拷贝到一个临时目录.</p>
<pre class="programlisting">#su oracle<br />
$cp -r /installer/files/here/ `mktemp -d`</pre>
<p>启动安装程序。注意：如果系统说显示变量错误，试一试重启gdm（gnome显示管理器），然后用oracle用户登录.</p>
<pre class="programlisting">$./runInstaller</pre>
<p>当正确运行时，你将看到一个GUI窗口界面。安装过程中，安装程序将两次提醒你用root权限停止和运行脚本。当它第一次提醒你时，让它过，它只是设置相应的权限，第二次时，它要求运行root.sh脚本，你需要先做下面的事情:</p>
<pre class="programlisting">#mkdir /etc/rc.d<br />
#ln -s /etc/rc0.d /etc/rc.d/rc0.d<br />
#ln -s /etc/rc2.d /etc/rc.d/rc2.d<br />
#ln -s /etc/rc3.d /etc/rc.d/rc3.d<br />
#ln -s /etc/rc4.d /etc/rc.d/rc4.d<br />
#ln -s /etc/rc5.d /etc/rc.d/rc5.d<br />
#ln -s /etc/rc6.d /etc/rc.d/rc6.d<br />
#ln -s /etc/init.d /etc/rc.d/init.d<br />
#/path/to/root.sh</pre>
<p>Oracle在系统中安装一个init.cssd服务. root.sh脚本将等待 600 秒 (10 分钟) 让这个服务启动，当它在等待时，你需要做一些设置。控制台消息会显示: Expecting the CRS daemons to be up within 600 seconds. 需要做三件事情，首先, 修改 /etc/inittab 文件，将 运行级从35（RedHat和Suse缺省值）改到23 (Debian缺省值) :</p>
<p>将 :</p>
<pre class="programlisting">h1:35:respawn:/etc/init.d/init.cssd run &gt;/dev/null 2&gt;&amp;1 &lt;/dev/null</pre>
<p>改成</p>
<pre class="programlisting">h1:23:respawn:/etc/init.d/init.cssd run &gt;/dev/null 2&gt;&amp;1 &lt;/dev/null</pre>
<p>然后, inittab 将运行 /etc/rc.d/init.d/init.cssd. 退出这个脚本, 修改第 83 行, 替换:</p>
<pre class="programlisting">SU="/bin/su -l"</pre>
<p>为</p>
<pre class="programlisting">SU="/bin/su"</pre>
<p>最后，重启服务:</p>
<pre class="programlisting">#init q</pre>
<p>root.sh 将继续运行直至成功，图形安装界面会显示结束.</p>
</div>
<div class="section">
<h2 class="section"><a name="AEN55">1.5. 启动/停止服务</a></h2>
<p>这里我们需要添加另外一个init脚本来使得Oracle在重启系统后自动启动，首先，删除安装程序创建的一些损坏的连接.</p>
<pre class="programlisting">#rm /etc/rc2.d/[SK]96*<br />
#rm /etc/rc3.d/[SK]96*<br />
#rm /etc/rc5.d/[SK]96*<br />
#update-rc.d init.cssd defaults 96</pre>
<p>下面这个init脚本内，我为我们的需求定制了启动/停止Oracle实例、监听器方式和企业管理器web界面.</p>
<pre class="programlisting">#!/bin/bash<br />
#<br />
# /etc/init.d/oracledb<br />
#<br />
# Run-level Startup script for the Oracle Instance, Listener, and <br />
# Web Interface<br />
<br />
<br />
export ORACLE_HOME=/your/oracle/home/goes/here<br />
export ORACLE_SID=oraclesidgoeshere<br />
export PATH=$PATH:$ORACLE_HOME/bin<br />
<br />
ORA_OWNR="oracleownergoeshere"<br />
<br />
# if the executables do not exist -- display error<br />
<br />
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]<br />
then<br />
echo "Oracle startup: cannot start"<br />
exit 1<br />
fi<br />
<br />
# depending on parameter -- startup, shutdown, restart<br />
# of the instance and listener or usage display<br />
<br />
case "$1" in<br />
start)<br />
# Oracle listener and instance startup<br />
echo -n "Starting Oracle: "<br />
su $ORA_OWNR -c "$ORACLE_HOME/bin/lsnrctl start"<br />
su $ORA_OWNR -c $ORACLE_HOME/bin/dbstart<br />
touch /var/lock/oracle<br />
<br />
su $ORA_OWNR -c $ORACLE_HOME/bin/emctl start dbconsole<br />
echo "OK"<br />
;;<br />
stop)<br />
# Oracle listener and instance shutdown<br />
echo -n "Shutdown Oracle: "<br />
su $ORA_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"<br />
su $ORA_OWNR -c $ORACLE_HOME/bin/dbshut<br />
rm -f /var/lock/oracle<br />
<br />
su $ORA_OWNR -c $ORACLE_HOME/bin/emctl stop dbconsole<br />
echo "OK"<br />
;;<br />
reload|restart)<br />
$0 stop<br />
$0 start<br />
;;<br />
*)<br />
echo "Usage: `basename $0` start|stop|restart|reload"<br />
exit 1<br />
esac<br />
exit 0</pre>
<p>将这个文件放到指定的位置并让它可执行, 将它连接到所有的运行级:</p>
<pre class="programlisting">#chmod 755 /etc/init.d/oracledb<br />
#update-rc.d oracledb defaults 99</pre>
<p>在我们运行这个配置文件前哦我们还需要做一些相关的定制工作. 下面这些文件需要为我们的安装程序更改它们的环境变量:</p>
<pre class="programlisting">/usr/local/bin/dbhome -- 更改 ORAHOME, ORASID, 和 ORATAB (/etc/oratab)<br />
$ORACLE_HOME/bin/dbhome -- 同上<br />
$ORACLE_HOME/bin/dbstart -- 更改 ORATAB<br />
$ORACLE_HOME/bin/dbshut -- 同上</pre>
<p>如果你希望在系统启动时启动你创建的所有数据库实例，那么需要修改 /etc/oratab 文件. 下面是一个例子:</p>
<pre class="programlisting">oracle:/opt/oracle/:N</pre>
<p>修改为</p>
<pre class="programlisting">oracle:/opt/oracle:Y</pre>
<p>现在你可以开始运行了。重启你的系统，先通过命令行设置ORACLE_HOME, ORACLE_SID, 和 PATH 变量variables（或者用户配置文件，如 .bashrc）; 可以试一试运行sqlplus或者通过web登录管理界面(http://urlhere.com:5500/em) 来测试</p>
</div>
</div>
<img src ="http://www.blogjava.net/jvict/aggbug/223751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-22 15:36 <a href="http://www.blogjava.net/jvict/articles/223751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决 libXp.so.6 找不到的问题</title><link>http://www.blogjava.net/jvict/articles/223709.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 22 Aug 2008 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223709.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223709.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223709.html</trackback:ping><description><![CDATA[<font size="3">一般服务器上都不装X环境的，不过有些变态的程序却要用到X环境的组件：比如java写的Tidy，oracle的安装程序。一般遇到这种情况，偷懒的人都直接rpm或apt-get到libXp.so.6来装。不过我喜欢什么都在自己的掌握中，不喜欢装到哪都不知道的感觉(Slackware甚至不支持rpm，我太欣赏了）。其实libXp.so.6只是XFree86的一个很小的库，根本没必要装整个X。自己动手，乐趣多多的解决办法：<br />
lynx http://ftp.xfree86.org/pub/XFree86/<br />
1）到 http://ftp.xfree86.org/pub/XFree86/，找到最新版本点进去，现在是4.7.0。<br />
2）如果对自己系统不熟悉，可以先下个Xinstall.sh。然后运行 sh Xinstall.sh -check<br />
他会告诉你下哪个编译好的版本适合你的系统。我的是&#8221;Linux-ix86-glibc24&#8243;。<br />
然后点binaries进去，不研究源码，只是拿来用，就下预编译的好了。接着点&#8220;Linux-ix86-glibc24&#8221;。<br />
3）这有很多tar，注意：你只要下Xbin.tgz就够了（现在是6.6M）<br />
4）tar zxf Xbin.tgz -C /usr/X11<br />
5）vi /etc/ld.so.conf，加入/usr/X11/lib<br />
6）ldconfig<br />
完毕。<br />
</font>
<img src ="http://www.blogjava.net/jvict/aggbug/223709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-22 11:52 <a href="http://www.blogjava.net/jvict/articles/223709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 Linux x86 上安装 Oracle 数据库 10g</title><link>http://www.blogjava.net/jvict/articles/223687.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 22 Aug 2008 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223687.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223687.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223687.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文: http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html学习在 RHEL 2.1、RHEL 3 或 SLES 8 上从头安装 Oracle 数据库 10g 的基础知识（仅用于评估）&nbsp;目录概述第 1 部分：安装 LinuxRHEL 2.1RHEL...&nbsp;&nbsp;<a href='http://www.blogjava.net/jvict/articles/223687.html'>阅读全文</a><img src ="http://www.blogjava.net/jvict/aggbug/223687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-22 11:05 <a href="http://www.blogjava.net/jvict/articles/223687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下oracle10g安装配置说明</title><link>http://www.blogjava.net/jvict/articles/223681.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Fri, 22 Aug 2008 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/223681.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/223681.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/223681.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/223681.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/223681.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/jvict/aggbug/223681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-08-22 10:48 <a href="http://www.blogjava.net/jvict/articles/223681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>