﻿<?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-JAVA FOR FUN-文章分类-databases</title><link>http://www.blogjava.net/mlw2000/category/13481.html</link><description>Be happy here...</description><language>zh-cn</language><lastBuildDate>Wed, 24 Oct 2007 09:48:23 GMT</lastBuildDate><pubDate>Wed, 24 Oct 2007 09:48:23 GMT</pubDate><ttl>60</ttl><item><title>oracle自动备份[转]</title><link>http://www.blogjava.net/mlw2000/articles/155112.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Mon, 22 Oct 2007 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/155112.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/155112.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/155112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/155112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/155112.html</trackback:ping><description><![CDATA[&nbsp;1、在服务器上建立c:\backup文件夹(文件夹路径客户自己选择)<br />
&nbsp;2、打开dbbkup.bat--&gt;修改红字部分--&gt;保存<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exp system/manager@test file=d:\orabackup\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.dmp owner=datauser<br />
(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A、批处理中可以用%date%调用当前日期，但%date:~0,4%则可以生成当前时间（转换成字符串以后）从第0位起取4个字符的子字符串，第一位从0计。其中0、4位置的数字还可以是负值，应该是代表了从字符串末尾、向前取字符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B、批处理中可以用%time%调用当前时间<br />
)<br />
3、将dbbkup.bat放置于c:\backup文件夹之下<br />
4、控制面板--&gt;任务计划--&gt;添加任务计划--&gt;选择程序以进行计划--&gt;浏览--&gt;选中dbbkup.bat--&gt;每日执行--&gt;选择时间--&gt;输入用户名密码--&gt;完成<br />
5、执行时间过了之后，c:\backup文件夹下面会出现yyyymmddhhmiss(年月日小时分秒).dmp命名的DUMP档案
<img src ="http://www.blogjava.net/mlw2000/aggbug/155112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2007-10-22 22:10 <a href="http://www.blogjava.net/mlw2000/articles/155112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置powerbuilder (PB) 中的扩展属性（转）</title><link>http://www.blogjava.net/mlw2000/articles/124191.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Wed, 13 Jun 2007 15:39:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/124191.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/124191.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/124191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/124191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/124191.html</trackback:ping><description><![CDATA[<p>&nbsp;在powerdesign 9(&nbsp;PD9)&nbsp;中建立物理数据模型时,可以设置powerbuilder (PB) 中的扩展属性。</p>
<p>一、在PD9中先选择扩展属性的类型。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 如果是新建一个Physical data model 的话，可以在[new physical data model]对话框中选择[extended model definitions] 标签，选择中[powerbuilder]项。也可以选择菜单来完成同样的操作[model] [extended model difinitions] </p>
<p>&nbsp;&nbsp;&nbsp; 这样在PD9中的表，列的[extended attributes]的属性中就有了powerbuilder的扩展属性了。</p>
<p>二、设置PD9中的pb扩展属性</p>
<p>&nbsp;&nbsp;&nbsp; 默认情况下extended attributes 中的 powerbuilder 的扩展属性 value 是引用 其它的PD9中的标准属性的</p>
<p>如PB中的Comment 项的value 为 %Comment% 表示使用PD9中的 Comment 属性值来做为PB的扩展属性中的内容.</p>
<p>但如果您是反向数据库（包括PB扩展属性）而来的model则此处为PB中已有的内容，而不会将此内容反向至PD9的标准属性中去。所以会出现反向数据库后（包括PB扩展属性）不能直接看到PB中的扩展属性内容的现象。</p>
<p>三、生成/反向PB扩展属性</p>
<p>当设置完PD9中model中的内容后就可以执行[tool] [powerbuilder] [gererate extended attributes] 来生成PB中的扩展属性，这里需要先通过ODBC连接你的数据库。</p>
<p>如果执行[tool] [powerbuilder] [reverse extended attributes] 则可以将数据库中PB的扩展属性取回。但取回的内容只存放于 extended attributes 中，并不反映在视图中。</p>
<p>另外，如果新建好的数据库最好用PB的database 画板连接一下，以便PB生成扩展属性的几个表！</p>
<p>以上只是本人在使用过程中的经验，若有不实，或有更好的方法可以大家讨论，本人Email: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#122;&#113;&#102;&#107;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;&#46;&#99;&#110;"><u><font color=#0000ff>mzqfk@yahoo.com.cn</font></u></a><br><br>ps:应该是5个pb的表，同时要注意第一次连接数据库时的用户权限</p>
<img src ="http://www.blogjava.net/mlw2000/aggbug/124191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2007-06-13 23:39 <a href="http://www.blogjava.net/mlw2000/articles/124191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的性能(转贴)</title><link>http://www.blogjava.net/mlw2000/articles/105711.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Fri, 23 Mar 2007 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/105711.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/105711.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/105711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/105711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/105711.html</trackback:ping><description><![CDATA[
		<p>Hibernate的性能(转贴)</p>
		<p>xiecc：<br />我们的项目从去年12月份启动，采用了Struts+Hibernate的架构，一开始使用Hibernate的时候速度极快，对象操作异常方便，大家都说爽歪歪。 <br />可惜好景不长，随着我们对象关系的不断复杂，数据量的不断增加，Hibernate的性能急剧下降。具体表现为：我们在设计对象时采用了很多的one-to-many和many-to-one的关系，在取某个对象的几个简单的属性时，它会把所有关联的子对象都取出来，经常出在取一个简单属性的时候，调试窗口的ＳＱＬ语句一屏一屏地往下闪。到最后我的一个test跑完需要１２分钟。 <br />在忍无可忍之下，我们开始性能优化方案，以下我们优化所做的一些事情： <br />1、将所以one-to-many的关系里将lazy设成true <br />2、修改hibernate.properties，增加了以下两句： <br />hibernate.jdbc.fetch_size=50 <br />hibernate.jdbc.batch_size=100 <br />3、调整WebLogic的pool <br />4、利用Hibernate提供的CGLIB Proxy机制，使many-to-one关系的子对象也可以lazy initialization <br />（但是我发现调试窗口里仍会有取子对象的SQL语句，但速度确实快了）。 <br />5、利用Hibernate提供的Cache机制，对关键对象使用Cache <br />结果优化以后，我的test可以从原来的12分钟变成50秒钟跑完。 <br />原以为万事大吉了，但当我们面对客户的时候，才发现我们系统的性能还远远不够。 <br />我们现在系统试运行约两个月，经常在数据保存或者查询时等上一分钟甚至两分钟。 <br />由于客户原来的系统用asp+SQL Server写的，速度很快。二者一对比，我们就被客户骂得惨不忍睹。 <br />优化真是一件很烦人的事，在不改动系统框架的情况下，不知还有哪些提高系统性能的方法？</p>
		<p>freecode：<br />同感，虽然我不用，不懂hibernate. <br />前段时间，我们做了个项目，对一些取数的过程，采用了javascript脚本，再通过bsf编译，运行时，时间巨长，人家说以前用foxpro做的，快多了，弄得我们很没面子。</p>
		<p>dhj1：<br />我也用 Struts+Hibernate 做大型项目,在并发很高时,每天4500人次访问量的情况下,性能也相当不错. </p>
		<p>做的时间有几点考虑: </p>
		<p>1.大东东.如果很多很多的one-to-many和many-to-one的关系. 必定会影响性能,我刚学习Hibernate 时就有这种直觉,所以我们没有用one-to-many和many-to-one的关系.而是象SQL一样的去操作表的关系标识符. </p>
		<p>2.如果超大的系统,最终必须生成HTML的文件.就是有数据库中有数据更新时,自动生成一个HTML文件.大多数用户是在只读状态.在只读状态下就只去显示HTML文件,节省很多资源. </p>
		<p>3.更用CHACHE表技术,把访问量高的记录自动提到CACHE表中.</p>
		<p>xiecc：<br />谢谢dhj1给我提的建议。 <br />在hibernate网站上看到的好多资源几乎都说hibernate的性能不错，而且很多人开发的系统性能也不错，包括dhj1的，看来hibernate无罪，是我们设计得太滥了。 <br />不过还是有点疑问。 <br />1、dhj1提到的第一点很有道理。我们确实在有些关键的地方用了标识符来关联。但是我们这个系统的关联实现太多了，如果所以有东西都用标识符作关联的话，那我们的实体层设计就退化成为面向关系的ER图设计，那我们要Hibernate何用？我用感觉用Hibernate时最大的便利不是在写代码的时候用对象的操作代替SQL语句,而是在建模的时候可以用面向对象的思维把很复杂的逻辑用UML图表示出来,然后直接转化成实体。所以我们在性能影响太大的地方采用了面向对象和关系相结合的方式，但在更多的地方仍然只能采用对象关联的方式。 <br />２、生成静态ＨＴＭＬ，对特定的系统确实有用，但我们系统中的数据几乎都是动态的，所以实现起来有困难。而且我也不太清楚这样做的难度有多高，具体怎么实现，请dhj1指点迷津。 <br />３、Cache我们已经采用了。但proxy的用法我至今仍然有点迷糊。 <br />在Hibernate的文档里似乎只要在定义文件里加这么一句就可以了： <br />　&lt;class name="eg.Order" proxy="eg.Order"&gt; <br />但实际使用时我们发现这样做之后，Hibernate取数据时的SQL语句似乎一句都没有少。 <br />我们现在的想法是自已来实现Proxy类，它的接口与实体完全一样，在Proxy里SQL语句来实现取数据操作。不知是否可行？</p>
		<p>sanwa：<br />我在设计系统时,对每个对象图都会采用两套映射模型, <br />一套用于映射实际的UML,当然包括引用,这套对象图主要用于根据关联对象的属性来查询对象时使用,很少用于更新数据,除非是聚集类. <br />另一套映射,把对象引用映射为Long型的属性,传递到业务层或表示层,需要相关的对象引用时,再用这个引用来load对象.而且,对于需要load的对象可以使用代理或直接多映射一个简单类来处理. <br />另外,对于大数据量的查询或表的关联层次较深(超过三层),建议采用jdbc直接处理.</p>
		<p>方世玉：<br />我们现在也正在用hibernate进行项目开发 <br />我认为不是所有相关的表都要做one Many，many one映射的 <br />比如说一个用户和他的定购业务，我们做了双向关联。 <br />但是这个用户的话单就不能和用户做任何关联了。话单表每天都有数十万条，就是做manyone关联也非常吓人，宁可到时候用hql来查询</p>
		<p>xiecc：<br />呵呵,请教sanwa，这两套映射模型如何在一个应用中同时使用？</p>
		<p>
				<br />dhj1：<br />我用hibernate,是可以减少开发工作量. 特别在开发中或维护过程中对表结构的改动,用HIBERNATE是很方便的. </p>
		<p>做了DAO后,对表的父子关系等的处理,通过ID标识,也只是两三句程序语句.操作也很方便,而且更灵活. </p>
		<p>生成静态ＨＴＭＬ,以后我做过这样的系统,并在XXX省信息港网站上大量使用,性能当然不错,同时1400人在线(真正的在线,不是那种用网页搞个几分钟刷新一次延时的那种在线),性能也不错,开发当然会有一些难度. </p>
		<p>我说的CACHE不是说用HIBERNATE的CACHE.而是自已开发的,把访问量高的信息自动放到一个表中去,这个表保证只有100访问量最高的条记录.多于100条记录的就出去了.</p>
		<p>sanwa：<br />举个例子,比如用户的权限,在我们的系统中涉及用户（User）、权限(Acl)、组件(Component)、组件类(componentDomain)等几个对象的关联。 <br />第一套映射图，反映他们的实际关系，即对应UML模型。User和Acl的关联映射为idbag，不要直接映射为set,因为在我设计的关联表中存在代理主键，代理主键在第二套映射图中实际为用户权限的id. <br />第二套映射图，只映射用户（UserSO）和用户拥有的权限(UserAclSO)，是one to many的关系。 <br />后缀SO表示相关类的简单对象映射类。 </p>
		<p>这样，当客户端需要获取某个用户的所有权限时，直接用第二套映射图。返回的集合中就只包括Acl的id。如果要获取用户对某个组件域的权限，则用第一套映射图，用强大的HQL查询，再转换为第二套映射图返回到客户端。 <br />当更新用户的权限时，也用第二套映射图，直接操作UserSO和UserAclSO，传回更新。 </p>
		<p>使用类似的设计策略时，对many to many的关联表，都采用代理主键，而不是联合主键，这样，两套映射图都较容易存取数据。只是，多数情况下用第二套映射图。 </p>
		<p>当然,我的程序架构是Swing + Session Bean + DAO + Hibernate + DB,Swing和Session Bean的通信可以用HTTP或RMI,在我的架构中,lazy loading发挥不了多大的作用，才采取这种策略。如果在lazy loading可以发挥作用的地方，对大多数对象图，是没有必要采取这种策略的。 </p>
		<p>另外，在我的架构中，swing层有一个组件是可以根据一个ID来加载这个类的属性，直接用jdbc实现的，独立于Hibernate</p>
		<p>xiaoyu：<br />我也说上一句吧。 </p>
		<p>虽然HB是好，方便，但有关数据库设计的一些性能原则还是要考虑的。 </p>
		<p>毕竟它只是Mapping而已。 <br />所以也要设置索引等东西。</p>
		<p>jxb8901：<br />上面的proxy和cache没有任何关系，只是用于lazy loading，请看hibernate中文文档第5章： </p>
		<p>java代码:  </p>
		<p>proxy (可选): 指定一个接口，在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。 </p>
		<p>coolwyc：<br />为了在性能上得到平行,对many-to-one不直接使用关连,例如:user&amp;ACL,取user时,不取ACL,要取ACL就先取user,再取ACL,毕竟应用取user的频率比取ACL高,没必要在取user是硬要把ACL一起取出来. </p>
		<p>还有其他many-to-one都和这个很类似,如果many很少的话就没问题,例如:人&amp;宠物,通常一个人只有少于等于一个宠物,这种情况取人的时候把人跟宠物一起取出对系统影响不大</p>
		<p>willmac：<br />hibernate本身的性能非常好，关键在设计本身 <br />和你的数据库本身，以及你的访问量和数据库的性质 <br />针对不同的环境一定要有不同的设计的，一套设计肯定不能适用于全部的环境 <br />我举个典型例子来说吧 <br />你的hibernate设计可以采用单session的方式，也可以采用多session的方式，应用环境不同，结果也大大的不同。当用户人群少，数据库记录两低的时候，多session的设计是非常有优势的，这就是为什么那么多人 <br />反对使用threadlocal管理session的主要理由把，的却 <br />把两种设计都放在这里，你会发现多session的性效要比 <br />threadlocal的强太多了，并且编程也异常的容易，这种例子，我不再举了，你在这个论坛上都可以下的到。可是 <br />当人群变多，数据库记录海量增长的时候，我们发现问题来了，我们做的应用无限制的吃去内存，应用的响应开始变慢，这是为什么呢？不知道大家是否理解究竟什么是session，其实从根本上说就是一张hashmap,这样大家就好理解了，当不同的用户，同时访问应用的时候，不同的人建立不同的连表，然后释放，而当并发人群急速增长的时候，于是问题就来了。那怎么办，threadlocal没有其他的办法，你要解决一个同步的问题，我们只有一个session,你不能够同时往里读取数据，然后又写入数据的，并发用户这么多，你只可以让他们一个一个得来！！！ <br />哇，这样效率不是太低了，的确，我一开始就说了，小型系统，使用threadlocal绝对是低效的做法的，可是当规模上来了之后，我们再来看，内存不再无限制的开销，cpu德负荷也降下来了，唯一一点发生变化的是，用户的客户端可能多等了0.001秒钟，一个在服务段队列的时间，这就是设计。 <br />讲了一个设计的例子，我们来看多对一，一对多，会让我们应用的效率降低么？ <br />请注意hibernate只是帮助我们完成了mapping 的工作 <br />原来的一对多也好或者多对一也好，本来就存在的，之所以让你觉得效率低，是因为在得到父亲后，还要去把每一个儿子给读出来，可是注意，你只是多执行了一条sql而已，为什么会慢的呢，我想问题还是在设计之上 </p>
		<p>
				<br /> </p>
<img src ="http://www.blogjava.net/mlw2000/aggbug/105711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2007-03-23 09:31 <a href="http://www.blogjava.net/mlw2000/articles/105711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据导入导出imp/exp命令[转]</title><link>http://www.blogjava.net/mlw2000/articles/100577.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Sun, 25 Feb 2007 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/100577.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/100577.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/100577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/100577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/100577.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">
						<strong>--如何在oracle中导入dmp数据库文件？</strong>
						<br />  </font>
		</p>
		<p>
				<font size="2">   Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件，imp命 令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库，一个用来测试，一个用来正式使用。<br /> <br />   执行环境：可以在SQLPLUS.EXE或者DOS（命令行）中执行， DOS中可以执行时由于 在oracle 8i 中  安装目录\ora81\BIN被设置为全局路径， 该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。<br /> oracle用java编写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。<br /> SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。<br /> <br />下面介绍的是导入导出的实例。</font>
		</p>
		<ul>
				<li>
						<font size="2">
								<strong>数据导出：</strong>
						</font>
				</li>
		</ul>
		<p>
				<font size="2"> 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<br />   exp </font>
				<a href="mailto:system/manager@TEST">
						<font size="2">system/manager@TEST</font>
				</a>
				<font size="2"> file=d:\daochu.dmp full=y<br /> 2 将数据库中system用户与sys用户的表导出<br />   exp </font>
				<a href="mailto:system/manager@TEST">
						<font size="2">system/manager@TEST</font>
				</a>
				<font size="2"> file=d:\daochu.dmp owner=(system,sys)<br /> 3 将数据库中的表inner_notify、notify_staff_relat导出<br />    exp </font>
				<a href="mailto:aichannel/aichannel@TESTDB2">
						<font size="2">aichannel/aichannel@TESTDB2</font>
				</a>
				<font size="2"> file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) <br /><br /> 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />   exp </font>
				<a href="mailto:system/manager@TEST">
						<font size="2">system/manager@TEST</font>
				</a>
				<font size="2"> file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"<br />  <br />  上面是常用的导出，对于压缩，既用winzip把dmp文件可以很好的压缩。<br />  也可以在上面命令后面 加上 compress=y 来实现。</font>
		</p>
		<ul>
				<li>
						<font size="2">
								<strong>数据的导入</strong>
						</font>
				</li>
		</ul>
		<p>
				<font size="2"> 1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<br />   imp </font>
				<a href="mailto:system/manager@TEST">
						<font size="2">system/manager@TEST</font>
				</a>
				<font size="2">  file=d:\daochu.dmp<br />   imp </font>
				<a href="mailto:aichannel/aichannel@HUST">
						<font size="2">aichannel/aichannel@HUST</font>
				</a>
				<font size="2"> full=y  file=file= d:\data\newsmgnt.dmp ignore=y <br />   上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<br />   在后面加上 ignore=y 就可以了。<br /> 2 将d:\daochu.dmp中的表table1 导入<br /> imp </font>
				<a href="mailto:system/manager@TEST">
						<font size="2">system/manager@TEST</font>
				</a>
				<font size="2">  file=d:\daochu.dmp  tables=(table1) <br /> <br /> 基本上上面的导入导出够用了。不少情况要先是将表彻底删除，然后导入。<br /> <br /><strong>注意：</strong><br /> 操作者要有足够的权限，权限不够它会提示。<br /> 数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。</font>
		</p>
		<p>
				<font size="2">
						<strong>附录一：</strong>
						<br /> 给用户增加导入数据权限的操作<br /> 第一,启动sql*puls<br /> 第二，以system/manager登陆<br /> 第三，create user 用户名 IDENTIFIED BY 密码 （如果已经创建过用户，这步可以省略）<br /> 第四，GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,<br />   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,<br />      DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字 <br /> 第五, 运行-cmd-进入dmp文件所在的目录, <br />      imp userid=system/manager full=y file=*.dmp<br />      或者 imp userid=system/manager full=y file=filename.dmp</font>
		</p>
		<p>
				<font size="2"> 执行示例:<br /> F:\Work\Oracle_Data\backup&gt;imp userid=test/test full=y file=inner_notify.dmp</font>
		</p>
		<p>
				<font size="2">屏幕显示<br />Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006<br />(c) Copyright 2000 Oracle Corporation.  All rights reserved.</font>
		</p>
		<p>
				<font size="2">连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production<br />With the Partitioning option<br />JServer Release 8.1.7.0.0 - Production</font>
		</p>
		<p>
				<font size="2">经由常规路径导出由EXPORT:V08.01.07创建的文件<br />已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<br />导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)<br />. 正在将AICHANNEL的对象导入到 AICHANNEL<br />. . 正在导入表                  "INNER_NOTIFY"          4行被导入<br />准备启用约束条件...<br />成功终止导入，但出现警告。</font>
		</p>
		<p>
				<br />
				<font size="2">
						<strong>附录二：</strong>
						<br /> Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.<br />  先建立import9.par,<br />  然后，使用时命令如下：imp parfile=/filepath/import9.par<br />  例 import9.par 内容如下：<br />        FROMUSER=TGPMS        <br />        TOUSER=TGPMS2     （注：把表的拥有者由FROMUSER改为TOUSER，FROMUSER和TOUSER的用户可以不同）           <br />        ROWS=Y<br />        INDEXES=Y<br />        GRANTS=Y<br />        CONSTRAINTS=Y<br />        BUFFER=409600<br />        file==/backup/ctgpc_20030623.dmp<br />        log==/backup/import_20030623.log</font>
		</p>
		<p>
				<font size="2">
				</font> </p>
		<p>
				<font size="2">
						<strong>
								<font color="#0000ff">一. 导出工具 exp<br /><br /></font>
						</strong>1. 它是操作系统下一个可执行的文件<strong> 存放目录/ORACLE_HOME/bin</strong><br /><br />   exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移<br />   <br />   它有三种模式：<br />       a.  用户模式： 导出用户所有对象以及对象中的数据；<br />       b.  表模式： 导出用户所有表或者指定的表；<br />       c.  整个数据库： 导出数据库中所有对象。<br /><br /><strong>2. 导出工具exp交互式命令行方式的使用的例子</strong><br /><br />$<font color="#0000ff">exp test/test123@appdb</font><br />Enter array fetch buffer size: 4096 &gt; 回车<br />Export file: expdat.dmp &gt; <font color="#008000">m.dmp  生成导出的文件名</font><br />(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U &gt; 3<br />Export table data (yes/no): yes &gt; 回车<br />Compress extents (yes/no): yes &gt; 回车<br />Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set<br />About to export specified tables via Conventional Path ...<br />Table(T) or Partition(T:P) to be exported: (RETURN to quit) &gt; cmamenu  要导出的表名<br />. . exporting table                        CMAMENU       4336 rows exported<br />Table(T) or Partition(T:P) to be exported: (RETURN to quit) &gt;要导出的表名n<br />Table(T) or Partition(T:P) to be exported: (RETURN to quit) &gt; 回车<br />Export terminated successfully without warnings. <br /><br /><strong>3. 导出工具exp非交互式命令行方式的例子</strong><br /><br />$<font color="#0000ff">exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y</font><br /><br />说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp<br /><br />$<font color="#0000ff">exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\&lt;1600\" file=/directory/scott2.dmp</font><br /><br />说明:在exp里面加上导出emp的查询条件job='salesman' and sal&lt;1600<br />    <br />    (但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)<br /><br />$<font color="#0000ff">exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log</font><br /><br />参数文件username.par内容<br />userid=username/userpassword<br />buffer=8192000<br />compress=n<br />grants=y<br /><br />说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改<br /><br />     filesize指定生成的二进制备份文件的最大字节数<br />     <br />     (可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)<br /><br /><strong><font color="#0000ff">二.导入工具 imp</font></strong><br /><br />1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin<br /><br />imp导入工具将EXP形成的二进制系统文件导入到数据库中.<br /><br />   它有三种模式：<br />       a.  用户模式： 导出用户所有对象以及对象中的数据；<br />       b.  表模式： 导出用户所有表或者指定的表；<br />       c.  整个数据库： 导出数据库中所有对象。<br />       <br />   只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入<br />   <br />   imp步骤：<br />   (1) create table  (2) insert data  (3) create index (4) create triggers,constraints<br /><br /><strong>2.导入工具imp交互式命令行方式的例子</strong><br />$<font color="#0000ff"> imp</font><br />Import: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001<br />(c) Copyright 1999 Oracle Corporation.  All rights reserved.<br />用户名:  <font color="#0000ff">test</font><br />口令:<font color="#0000ff">****</font><br />连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit Production<br />With the Partitioning option<br />JServer Release 8.1.6.0.0 - Production<br />导入文件: expdat.dmp&gt; <font color="#0000ff">/tmp/m.dmp</font><br />输入插入缓冲区大小（最小为 8192 ) 30720&gt;<br />经由常规路径导出由EXPORT:V08.01.06创建的文件<br />警告: 此对象由 TEST 导出, 而不是当前用户<br />已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<br />只列出导入文件的内容(yes/no)：no&gt;<br />由于对象已存在, 忽略创建错误(yes/no)：no&gt; <font color="#0000ff">yes</font><br />导入权限(yes/no)：yes&gt;<br />导入表数据(yes/no)：yes&gt;<br />导入整个导出文件(yes/no)：no&gt; <font color="#0000ff">yes</font><br />. 正在将TEST的对象导入到 SCOTT<br />. . 正在导入表                       "CMAMENU"       4336行被导入<br />成功终止导入，但出现警告。 <br /><br /><br /><strong>3.导入工具imp非交互式命令行方式的例子</strong><br /><br />$ imp system/manager fromuser=jones tables=(accts) <br />$ imp system/manager fromuser=scott tables=(emp,dept) <br />$ imp system/manager fromuser=scott touser=joe tables=emp <br />$ imp scott/tiger file = expdat.dmp full=y <br />$ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log<br />$ imp system/manager parfile=params.dat <br />params.dat 内容 <br />file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp) <br /><br /><strong>4.导入工具imp可能出现的问题</strong><br /><br />(1) 数据库对象已经存在<br />一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;  <br />数据库对象已经存在, 按缺省的imp参数, 则会导入失败<br />如果用了参数ignore=y, 会把exp文件内的数据内容导入<br />如果表有唯一关键字的约束条件, 不合条件将不被导入<br />如果表没有唯一关键字的约束条件, 将引起记录重复<br /><br />(2) 数据库对象有主外键约束<br />      不符合主外键约束时, 数据会导入失败 <br />      解决办法: 先导入主表, 再导入依存表<br />disable目标导入对象的主外键约束, 导入数据后, 再enable它们<br />(3)  权限不够<br />如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限<br /><br />(4)  导入大表( 大于80M ) 时, 存储分配失败<br />      默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.<br />      导入时, 如果不存在连续一个大数据块, 则会导入失败.<br />      导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.<br /><br />(5) imp和exp使用的字符集不同<br />      如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.<br />      导入完成后再改回来.<br /><br />(6) imp和exp版本不能往上兼容<br />imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件<br />根据情况我们可以用<br />$ imp username/password@connect_string<br />说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora<br />   定义的本地或者远端数据库的名称<br />注意事项:<br />UNIX: /etc/hosts           要定义本地或者远端数据库服务器的主机名<br />win98:    windows\hosts             和IP地址的对应关系  <br /><br />win2000:  winnt\system32\drivers\etc\hosts<br /></font>
		</p>
<img src ="http://www.blogjava.net/mlw2000/aggbug/100577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2007-02-25 15:04 <a href="http://www.blogjava.net/mlw2000/articles/100577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 数据库的建立用户[转]</title><link>http://www.blogjava.net/mlw2000/articles/96916.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Wed, 31 Jan 2007 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/96916.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/96916.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/96916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/96916.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/96916.html</trackback:ping><description><![CDATA[1.数据库安装时的参数设定<br /><br />下面数据库所用的版本为ORACLE 9I (9.2.0)，安装数据库时，数据库系统会创建一个数据库实例，其中:安装目录选为:\oracle，数据库名与数据库SID号都输入:ora9i ，其中的字符集必须选为:ZHS16GBK(否则以后进行跨平台操作时对中文的操作将比较困难)。 <br /><br />2.数据库用户的创建、权限的分配<br /><br />数据库安装完成后，有两个系统级的用户:<br /><br />1、system 默认密码为:manager<br /><br />2、sys 默认密码为:change_on_install<br /><br />在安装的数据库目录中找到\oracle\product\9.2\bin 中的sqlplus程序，运行:./sqlplus system/manager@ora9i<br /><br />用system用户创建自己的用户、权限;sql语句如下:<br /><br />1、创建用户:<br /><br />create user username identified by pwd default tablespace users Temporary TABLESPACE Temp;<br /><br />2、用户授权<br /><br />grant connect,resource,dba to username;<br /><br />3、提交<br /><br />commit;<br /><br />3.用数据库脚本创建数据库<br /><br />如上面所述利用sqlplus以username 用户登陆，输入:@创建数据库的脚本名称.sql回车，即可创建数据库中的表、视图、存储过程等。 注:以上的创建用户过程可以使用户的表中没有了系统自动产生的n多临时表。<br /><img src ="http://www.blogjava.net/mlw2000/aggbug/96916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2007-01-31 12:52 <a href="http://www.blogjava.net/mlw2000/articles/96916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装Oracle9i，提示缺少OCS4J.properties的问题解决</title><link>http://www.blogjava.net/mlw2000/articles/88692.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Tue, 19 Dec 2006 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/88692.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/88692.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/88692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/88692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/88692.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#0000ff">在安装过程中提示 找不到 \oracle\ora92\<a name="baidusnap0"></a><b style="COLOR: black; BACKGROUND-COLOR: #ffff66">ocs4j</b>\admin\<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OCS4J</b>.properties</font>
		</p>
		<p>
				<font color="#0000ff">原因：oracle9i/disk1/stage/components/oracle.<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">ocs4j</b>/2.1.0.0.0a/1/datafiles/expanded/<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">ocs4j</b>_conf_nt中缺少<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OCS4J</b>.properties.tmp文件</font>
		</p>
		<p>
				<font color="#0000ff">解决方法：把oracle9i/disk1/stage/components/oracle.<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">ocs4j</b>/2.1.0.0.0a/1/datafiles/expanded/<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">ocs4j</b>_conf_nt/<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">OCS4J</b>.properties.tmp文件去掉.tmp后拷到\oracle\ora92\<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">ocs4j</b>\admin\下</font>
		</p>
<img src ="http://www.blogjava.net/mlw2000/aggbug/88692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2006-12-19 09:53 <a href="http://www.blogjava.net/mlw2000/articles/88692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Oracle简单示例讲解 </title><link>http://www.blogjava.net/mlw2000/articles/87543.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Wed, 13 Dec 2006 09:57:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/87543.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/87543.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/87543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/87543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/87543.html</trackback:ping><description><![CDATA[
		<div class="postbody">
				<p>预定义角色：</p>
				<p>
						<strong>1.CONNECT角色:<!--ubbcodetab-->    <!--/ubbcodetab-->授于最终用户的典型最基本的权利<br /></strong>ALTER SESSION --修改会话<br />CREATE CLUSTER --建立聚簇<br />CREATE DATABASE LINK --建立数据库链接<br />CREATE SEQUENCE --建立序列<br />CREATE SESSION --建立会话<br />CREATE SYNONYM --建立同义词<br />CREATE VIEW --建立视图<br /><br /><b>2.RESOURCE角色:<!--ubbcodetab-->    <!--/ubbcodetab-->是授予开发人员的</b><br />CREATE CLUSTER --建立聚簇<br />CREATE PROCEDURE --建立过程<br />CREATE SEQUENCE --建立序列<br />CREATE TABLE --建表<br />CREATE TRIGGER --建立触发器<br />CREATE TYPE --建立类型<br /><br /><b>3.DBA角色：拥有系统所有系统级权限</b><br /><br /><br /><b>4.IMP_FULL_DATABASE角色、EXP_FULL_DATABASE角色：</b><br />BACKUP ANY TABLE --备份任何表<br />EXECUTE ANY PROCEDURE --执行任何操作<br />SELECT ANY TABLE --查询任何表<br /><br /><b>5.DELETE_CATALOG_ROLE角色：</b><br />授予用户这个角色，用户就可以从表sys.aud$中删除记录，<br />sys.aud$表中记录着审计后的记录，使用这个角色可以简化审计踪迹管理。<br /><br /><br /><b>6.SELECT_CATALOG_ROLE角色、EXECUTE_CATALOG_ROLE角色：</b><br />SELECT_CATALOG_ROLE角色具有从数据字典查询的权利，<br />EXECUTE_CATALOG_ROLE角色具有从数据字典中执行部分过程和函数的权利。<br /></p>
				<p>
						<strong>
								<font color="#a00606">SQL*PLUS基础<br /></font>
						</strong>在上一贴中，我们掌握了些基本的oracle操作，如创建、授权用户，创建数据库等。在OEM(Oracle Enterprise Manager)可视化的窗口环境中，虽然我们也可以很方便地做这些事，但是事实上，用SQL语言书写在开发上更有效率！！oracle提供的SQL*Plus就是个不错的工具，如果大家喜欢窗口的开发环境，用SQLPlus Worksheet也行！下面说点基本的西西！<br /><br />SQL(Structure Query Language)语言是结构化查询语言，是数据库的核心语言，是面向集合的描述性非过程化语言。<br />SQL语言共分为四大类：数据查询语言DQL,数据操纵语言DML，数据定义语言DDL,数据库控制语言DCL。<br /><br />1.数据查询语言DQL的基本结构是由select子句，from子句，where子句组成的查询块：<br />select &lt;字段名表&gt; from &lt;表或视图名&gt; where &lt;查询条件&gt;<br /><br />2.数据操纵语言DML完成在数据库中确定、修改、添加、删除某一数据值的任务(以下是部分常用DML语句):<br />insert<!--ubbcodetab-->    <!--/ubbcodetab-->增加数据行到表<br />delete<!--ubbcodetab-->    <!--/ubbcodetab-->从表中删除数据行<br />Update<!--ubbcodetab-->    <!--/ubbcodetab-->更改表中数据<br /><br />3.数据定义语言DDL完成定义数据库的结构，包括数据库本身、数据表、目录、视图等数据库元素(以下是部分常用DDL语句)<br />create table<!--ubbcodetab-->    <!--/ubbcodetab-->创建表<br />create index<!--ubbcodetab-->    <!--/ubbcodetab-->创建索引<br />create view<!--ubbcodetab-->    <!--/ubbcodetab-->创建视图<br />alter table<!--ubbcodetab-->    <!--/ubbcodetab-->增加表列，重定义表列，更改存储分配<br />drop table<!--ubbcodetab-->    <!--/ubbcodetab-->删除表<br />drop index<!--ubbcodetab-->    <!--/ubbcodetab-->删除索引<br /><br />4.数据库控制语言DCL用来授予或回收访问数据库的某种特权，并控制数据库操纵事务发生的时间及效果，对数据库实行监视等。如：<br />grant<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->将权限或角色授予用户或其它角色<br />revoke<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->回收用户权限<br />roll<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->回滚，是当某个对话更改了数据库中的数据后，由于某种原因用户不想提交此更改时，oracle所采取的保护操作。这是一个把信息恢复到用户使update、insert、delete前最后提交的状态。<br />commit<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->提交。在完成数据库的插入，删除和修改操作时，只有当事务提交到数据库才算完成，有提交前只有操作数据库的本人才能看到，别人只有在最后提交完成才可以看到。<br /><br />接下来，我们在SQL*Plus中实战一下，为我们下面将要做的打好基础。<br />用system登陆到SQL*Plus后，我们做如下操作(这次没有截图，有详细的说明)<br />SQL&gt;create user maxuan identified by max; #创建口令为max的用户maxuan<br />SQL&gt;grant connect,resource to maxuan; #为用户maxuan授权<br />SQL&gt;conn maxuan/max; #以用户maxuan进行连接<br />SQL&gt;create table test(a number); #建立一个名为test的表，只有字段名为A的一列，数据类型为数字<br />SQL&gt;insert into test values(1); #插入一条记录<br />SQL&gt;select * from test; #查询记录，此时A列的第一行为1<br />SQL&gt;update test set a=2; #更改记录，此时A列的第一行已改为2<br />SQL&gt;commit; #提交<br />SQL&gt;delete from test; #删除test表中所有的记录，此时test表中没有记录<br />SQL&gt;roll; #回滚到提交前，此时再查询test表，A列第一行值又回复到2<br /><br /><b><font color="#a00606">oracle的数据类型</font></b><br />在数据库中创建数据表的时候，我们需要定义表中所有字段的类型，数据类型大致分为：character,numberic,date,lob和raw等，这些是最基本的数据类型。当然在oracle中也允许自定义数据类型！<br /><br />在oracle中提供的character数据类型:<br /><b>char(&lt;size&gt;:</b>固定长度字符串，最大长度为2000字节，如果不指定长充，缺省为1个字节长。<br /><b>varchar2(&lt;size&gt;:</b>可变长度的字符串，最大长度为4000字节，具体定义时指明最大长度，这种类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。如果数据长度没有达到最大值，oracle会根据数据大小自动调节字段长度。是最长用的数据类型。<br /><b>nchar(&lt;size&gt;:</b>根据字符集而定的固定长度字符串，最大长度2000字节。<br /><b>nvarchar2(&lt;size&gt;:</b>根据字符集而定的可变长度字符串，最大长度4000字节。<br /><b>long:</b>可变长字符列，最大长度限制为2GB，用于不需要作字符串搜索的长串数据。此类型是一个遗留下来的而且将来不会被支持的数据类型，逐渐被BLOB，CLOB，NCLOB等大的数据类型所取代。<br /><br />numberic数据类型用来存储负的和正的整数，分数和浮点型数据，在oracle中提供的numberic数据类型：<br /><b>number(&lt;m&gt;,&lt;n&gt;:</b>可变长的数值列，允许0、正值及负值，m是所有的有效数字的位数，n是小数点以后的位数。<br /><br />在oracle中提供的date数据类型:<br /><b>date:</b>缺省格式是dd-mon-yy(日-月-年)<br /><br />在oracle中提供的lob数据类型:<br /><b>blob、clob、nclob：</b>三种大型对象(lob)，用来保存较大的图形文件或带格式的文本文件，如word文档，以及音频、视频等非文本文件，最大长充是4GB。晕些数据存储在数据库内部保存。<br /><b>bfile:</b>在数据库外部保存的大型二进制对象文件，最大长度是4GB，这种外部的LOB类型，通过数据库记录变化情况，但是数据的具体保存是在数据库外部进行的。<br /><br />在oracle中提供的raw数据类型:<br /><b>raw(&lt;size&gt;:</b>可变长二进制数据，具体定义字段时必须指明最大长度，这种格式用来保存较小的图形文件或带格式的文本文件，它也是一种较老的数据类型，将被lob数据类型所取代。<br /><b>long raw:</b>可变长二进制数据，最大长度是2GB，可以用来保存较大的图形或带格式的文本文件，以及音频、视频等非文本文件，这也是一种较老的数据类型，将被lob数据类型所取代。<br /><br />其它的数据类型：<br /><b>rowid:</b>这是oracle数据表中的一个伪例，它是数据表中每行数据内在的唯一标识<br /><b>integer:</b>整数类型<br /><br /><br /><b><font color="#a00606">创建购物网站后台数据库</font></b><br /><br />现在我们回到用J2EE体系开发购物网站的主题，开始实战建购物网站的后台数据库。<br />为了实现购物网站的<b>基本</b>的功能，我们需要建立四个表：商品列表(products)、商品类型表(item)、订单列表(orders)和管理员列表(admin)。表结构如下所示：<br /><br /><b><font color="#a00606">item表结构（商品类型表)</font></b><br />字段名称<!--ubbcodetab-->    <!--/ubbcodetab-->数据类型<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->允许空<!--ubbcodetab-->    <!--/ubbcodetab-->主键/外键<!--ubbcodetab-->    <!--/ubbcodetab-->备注<!--ubbcodetab-->    <!--/ubbcodetab--><br />type_id<!--ubbcodetab-->    <!--/ubbcodetab-->INTEGER(自动编号)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab-->主键<!--ubbcodetab-->    <!--/ubbcodetab-->商品类别ID标记<br />type<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(30)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->商品类别名称<br /><br /><b><font color="#a00606">product表结构(商品列表)</font></b><br />字段名称<!--ubbcodetab-->    <!--/ubbcodetab-->数据类型<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->允许空<!--ubbcodetab-->    <!--/ubbcodetab-->主键/外键<!--ubbcodetab-->    <!--/ubbcodetab-->备注<br />product_id<!--ubbcodetab-->    <!--/ubbcodetab-->INTEGER(自动编号)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab-->主键<!--ubbcodetab-->    <!--/ubbcodetab-->商品ID标记<br />title<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(30)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->商品名称<br />type_id<!--ubbcodetab-->    <!--/ubbcodetab-->INTEGER<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab-->外键<!--ubbcodetab-->    <!--/ubbcodetab-->商品类别标记<br />info<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(80)<!--ubbcodetab-->    <!--/ubbcodetab-->是<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->商品简介<br />price<!--ubbcodetab-->    <!--/ubbcodetab-->number(16,2)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->商品价格<br /><br /><b><font color="#a00606">orders表结构(订单列表)</font></b><br />字段名称<!--ubbcodetab-->    <!--/ubbcodetab-->数据类型<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->允许空<!--ubbcodetab-->    <!--/ubbcodetab-->主键/外键<!--ubbcodetab-->    <!--/ubbcodetab-->备注<br />order_id<!--ubbcodetab-->    <!--/ubbcodetab-->INTEGER(自动编号)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab-->主键<!--ubbcodetab-->    <!--/ubbcodetab-->订单ID标记<br />name<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(20)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->顾客姓名<br />address<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(100)<!--ubbcodetab-->    <!--/ubbcodetab-->是<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->发货地址<br />tel<!--ubbcodetab-->    <!--/ubbcodetab-->number(16)<!--ubbcodetab-->    <!--/ubbcodetab-->是<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->联系电话<br />email<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(30)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->联系email<br />btime<!--ubbcodetab-->    <!--/ubbcodetab-->date<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->是<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->订购日期<br />product_id<!--ubbcodetab-->    <!--/ubbcodetab-->INTEGER<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab-->外键<!--ubbcodetab-->    <!--/ubbcodetab-->商品标记<br />uword<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(100)<!--ubbcodetab-->    <!--/ubbcodetab-->是<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->顾客留言<br /><br /><b><font color="#a00606">admin表结构(管理员列表)</font></b><br />字段名称<!--ubbcodetab-->    <!--/ubbcodetab-->数据类型<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->允许空<!--ubbcodetab-->    <!--/ubbcodetab-->主键/外键<!--ubbcodetab-->    <!--/ubbcodetab-->备注<br />admin_id<!--ubbcodetab-->    <!--/ubbcodetab-->INTEGER(自动编号)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab-->主键<!--ubbcodetab-->    <!--/ubbcodetab-->管理员ID标记<br />adminname<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(20)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->管理员名称<br />password<!--ubbcodetab-->    <!--/ubbcodetab-->varchar2(20)<!--ubbcodetab-->    <!--/ubbcodetab-->否<!--ubbcodetab-->    <!--/ubbcodetab--><!--ubbcodetab-->    <!--/ubbcodetab-->管理员密码<br /><br />设计完表结构后，我们就要开始创建了。<br />创建表我想已经不是什么难事了，那么我们要注意的是product、item、orders这三个表之间的关联，还有自动编号。</p>
				<p>下面是完整的SQL语句，在后面我会给出详细的说明，你可以在SQL*Plus里对照着输入，也可以将它存为SQL脚本文件，在SQL*Plus或SQLPlus Worksheet里执行。当然也可以把代码直接拷贝到SQL*Plus里执行！<br /><font color="#ff0000"><br />rem ///BY MAXUAN 开始///<br /><br />create table item(<br />type_id integer not null,<br />type varchar2(30),<br />constraint item_pk primary key(type_id)<br />);<br /><br />create table product(<br />product_id integer not null,<br />title varchar2(30) not null, <br />type_id integer not null,<br />info varchar2(80),<br />price number(16,2) not null,<br />constraint product_pk primary key (product_id),<br />constraint product_fk foreign key(type_id) references item(type_id)<br />);<br /><br />create table orders(<br />order_id integer not null,<br />name varchar2(20) not null,<br />address varchar2(100),<br />tel number(16),<br />email varchar2(30) not null,<br />btime date,<br />product_id integer not null,<br />uword varchar2(100),<br />constraint orders_pk primary key(order_id),<br />constraint orders_fk foreign key(product_id) references product(product_id)<br />);<br /><br />create table admin(<br />admin_id integer not null,<br />adminname varchar2(20) not null,<br />password varchar2(20) not null,<br />constraint admin_pk primary key(admin_id)<br />);<br /><br />create sequence type_id increment by 1 start with 1;<br />create sequence product_id increment by 1 start with 1;<br />create sequence order_id increment by 1 start with 1;<br />create sequence admin_id increment by 1 start with 1;<br /><br />rem ///BY MAXUAN 结束///<br /></font><br /><b>说明一：建立表之间的关联</b><br />　　product、item、orders三个表通过公共域，通常称为键域(Key Field)进行关联，存在两种类型的键：主键(Primary key)和外部键(Foreign key)。主键使表中的数据行保持唯一，在表product中，product_id为主键，表orders中也包含有product_id,此时的product_id就是外部键。一个表的外部键从其它表中获取信息。看看上面的SQL语句，应该会了吧！建立主外键的SQL语句详解如下：<br />constraint 主键名 primary key (字段名)<br />constraint 外部键名 foreign key(字段名) references 对应表(对应字段)<br />当不指名主键名或外部键名时，系统将使用默认名称！<br />如果你要删除一个主键或外部键时，用如下写法：<br />ALTER TABLE 表名 DROP CONSTRAINT 主键名或外部键名<br />如果是主/唯一关键字被外部键引用，先要删除外部键，然后才能删除主键！！<br /><br /><b>说明二：关于自动编号</b><br />　　在access中有自动编号的数据类型，MSSQL和MYSQL也都有自动增长的数据类型，插入记录时不用操作此字段，会自动获得数据值，而oracle没有自动增长的数据类型，我们需要建立一个自动增长的序列号，插入记录时要把序列号的下一个值赋于此字段，可以预见的是，有此功能，我们可以把数据从ACCESS、MSSQL或MYSQL迁移到oracle了！<br />create sequence type_id increment by 1 start with 1;<br />这句中，type_id为序列号的名称，每次增长为1，起始序号为1。<br />如果要删除序列，用drop sequence 序列名就可以了！！</p>
		</div>
<img src ="http://www.blogjava.net/mlw2000/aggbug/87543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2006-12-13 17:57 <a href="http://www.blogjava.net/mlw2000/articles/87543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE9i中文版的安装与配置</title><link>http://www.blogjava.net/mlw2000/articles/60290.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Thu, 27 Jul 2006 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/mlw2000/articles/60290.html</guid><wfw:comment>http://www.blogjava.net/mlw2000/comments/60290.html</wfw:comment><comments>http://www.blogjava.net/mlw2000/articles/60290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlw2000/comments/commentRss/60290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlw2000/services/trackbacks/60290.html</trackback:ping><description><![CDATA[
		<p>ORACLE9i中文版的安装与配置</p>
		<p>一、安装</p>
		<p>点击setup.exe开始安装后，一路点击“下一步”，直到“下一步”为灰色，上面标题栏显示为“Oracle Universal Installer:数据库标识”，这时请需输入“全局数据库名”（SID）继续点击“下一步”，直到“安装”，点击“安装”后开始安装。</p>
		<p>安装过程中如果出现“错误：没有找到文件D:\oracle\ora92\ocs4j\admin\OCS4J.properties”时，点击“取消”，弹出“取消”对话框后选中“只停止安装该组件”，点击“确定”，安装会继续。 </p>
		<p>安装到“Oracle Universal Installer:配置工具”的“Aqent Configuration Assistant”时，如果报错“ORA-12571:TNS:包写入程序失败”，直接点击“确定”。这步完成时会有个“错误”提示，“确定”就是，然后继续“下一步”，到“Oracle Universal Installer:配置工具”，点击“退出”。</p>
		<p>ORACLE9i的初步安装完成后，接下来由于“ORA-12571:TNS:包写入程序失败”错误，数据库并没有建立，那么我们将“D:\oracle\ora92\network\admin\sqlnet.ora”打开，把其中的“NTS”改为“NONE”。</p>
		<p>点击“开始/程序/Oracle - OraHome92/Configuration and Migration Tools/Database Configuration Assistant”开始添加数据库：</p>
		<p>“步骤1：操作”中选中“创建数据库”，“下一步”；</p>
		<p>“步骤2：数据库模板”中选中“New Database”，“下一步”；</p>
		<p>“步骤3：数据库标识”填写“全局数据库名”（我的SID为kkdb），“完成”；</p>
		<p>此时会弹出“概要”对话框，“确定”开始创建数据库。数据库建立后，ORACLE9i的安装就算是完成了。</p>
		<p>
				<br />二、设置用户</p>
		<p>1.点击“开始/程序/ Oracle - OraHome92/ Application Development/ SQL Plus”；</p>
		<p>2.在“用户名称[U]：”和“口令[P]：”输入system的用户名和密码，默认为system和manager；</p>
		<p>3. 创建表空间"TEST",大小100M:</p>
		<p>CREATE TABLESPACE "TEST" </p>
		<p>LOGGING </p>
		<p>DATAFILE 'D:\ORACLE\ORADATA\TEST\HAIG.ora' SIZE 100M;</p>
		<p>4.创建用户"TEST",默认表空间"TEST"；</p>
		<p>CREATE USER "TEST" PROFILE "DEFAULT" IDENTIFIED BY "TEST" </p>
		<p>DEFAULT </p>
		<p>TABLESPACE "TEST" ACCOUNT UNLOCK;</p>
		<p>5.授予其三个权限:UNLIMITED TABLESPACE,CONNECT,RESOURCE；</p>
		<p>GRANT UNLIMITED TABLESPACE, CONNECT, RESOURCE TO "TEST";</p>
		<p>6.使用“TEST”用户登录；</p>
		<p>CONNECT TEST/TEST;</p>
		<p>正常显示“已连接”，OK。</p>
		<p>
				<br />三、创建示例数据库</p>
		<p>1.建表；</p>
		<p>CREATE TABLE count </p>
		<p>(num1 NUMBER(5,2),</p>
		<p>num2 NUMBER(5,2),</p>
		<p>result NUMBER(6,2));</p>
		<p>2.插入数据；</p>
		<p>INSERT INTO count(num1,num2,result) VALUES(1,1,2);</p>
		<p>INSERT INTO count(num1,num2,result) VALUES(1,1,1);</p>
		<p>INSERT INTO count(num1,num2,result) VALUES(2,8,10);</p>
		<p>INSERT INTO count(num1,num2,result) VALUES(68,90,158);</p>
		<p>3.提交数据；</p>
		<p>COMMIT;</p>
		<p>新表建立，数据也插入成功。<br /></p>
<img src ="http://www.blogjava.net/mlw2000/aggbug/60290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlw2000/" target="_blank">mlw2000</a> 2006-07-27 10:02 <a href="http://www.blogjava.net/mlw2000/articles/60290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>