﻿<?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>IT博客网-我的ITblog我作主　　关注→　『伊波拉』→　测试　SzDlinXie- ITblog　　  　　   -随笔分类-数据库信息资料</title><link>http://www.cnitblog.com/szdlinxie/category/4493.html</link><description>·√·  本ITblog站点记录相关的软件技术文档、网络技术杂志、测试技术杂谈等技术文档的管理站点.联系方式：MSN：dowling@sunlike.cn   QQ:94595885</description><language>zh-cn</language><lastBuildDate>Tue, 18 Sep 2007 15:43:12 GMT</lastBuildDate><pubDate>Tue, 18 Sep 2007 15:43:12 GMT</pubDate><ttl>60</ttl><item><title>MySQL5.1手册(官方英文CHM)_中文MYSQL.CN</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/09/16/33503.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Sun, 16 Sep 2007 12:39:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/09/16/33503.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/33503.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/09/16/33503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/33503.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/33503.html</trackback:ping><description><![CDATA[<a class=l onmousedown="return clk(0,'','','res','3','')" href="http://doc.mysql.cn/mysql5/2006/0416/5525.html" target=_blank><u><font color=#cc0033>MySQL5</font><font color=#551a8b>.</font><font color=#cc0033>1</font><font color=#551a8b>手册(官方英文CHM)_中文MYSQL.CN</font></u></a><a href="http://doc.mysql.cn/mysql5/2006/0416/5525.html"><br><br>http://doc.mysql.cn/mysql5/2006/0416/5525.html</a>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/33503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-09-16 20:39 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/09/16/33503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DB2常用命令集</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32165.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 21 Aug 2007 13:33:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32165.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32165.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32165.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32165.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32165.html</trackback:ping><description><![CDATA[<p>DB2常用命令集</p>
<p>*************************************************<br>　<br>关闭db2</p>
<p>db2stop 或</p>
<p>db2stop force。</p>
<p>在脚本中一般两个都写上，避免使用db2stop force命令，如：</p>
<p>db2stop</p>
<p>db2stop force</p>
<p>启动db2</p>
<p>db2start</p>
<p>创建数据库</p>
<p>db2 create db &lt;db name&gt;</p>
<p>或db2 create db using codeset GBK territory CN</p>
<p>删除数据库</p>
<p>执行此操作要小心。</p>
<p>db2 drop db &lt;db name&gt;</p>
<p>如果不能删除，断开所有数据库连接或者重启db2。</p>
<p>断开数据库连接</p>
<p>db2 force application all</p>
<p>连接数据库</p>
<p>db2 connect to &lt;db name&gt; user &lt;username&gt; using &lt;password&gt;</p>
<p>断开数据库连接</p>
<p>断开当前数据库连接：db2 connect reset</p>
<p>或者：db2 disconnect current</p>
<p>断开所有数据库的连接：db2 disconnect all</p>
<p>备份数据库</p>
<p>db2 backup db &lt;db name&gt; </p>
<p>备注：执行以上命令之前需要断开数据库连接</p>
<p>恢复数据库</p>
<p>db2 restore db &lt;source db name&gt;</p>
<p>导出数据文件</p>
<p>db2move &lt;db name&gt; export [-sn &lt;模式名称，一般为db2admin&gt;] [-tn&nbsp; &lt;表名，多个之间用逗号分隔&gt;]</p>
<p>导入数据文件</p>
<p>db2move &lt;db name&gt; import</p>
<p>列出数据库中所有db</p>
<p>db2 list db directory</p>
<p>进入db2命令环境</p>
<p>在&#8220;运行&#8221;中执行：db2cmd </p>
<p>获取db2数据库管理配置环境信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>db2 get dbm cfg</p>
<p>获取db2某个数据库数据库管理配置环境信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>db2 get db cfg for &lt;db name&gt;</p>
<p>或者：连接至某个数据库以后执行db2 get db cfg。</p>
<p>设置联合数据库为可用（默认联合数据库不可用）</p>
<p>db2 update dbm cfg using federated yes</p>
<p>更改db2日志空间的大小</p>
<p>备注：以下命令为了防止db2数据库过份使用硬盘空间而设，仅用于开发者自己机器上的db2，如果是服务器，则参数需要修改。</p>
<p>db2 UPDATE DB CFG FOR &lt;db name&gt; USING logretain OFF logprimary 3 logsecond 2 logfilsiz 25600;</p>
<p>如果页大小是4KB，则以上命令创建3个100M的日志文件，占用300MB硬盘空间。25600*4KB=102400KB。</p>
<p>创建临时表空间</p>
<p>DB2 CREATE USER TEMPORARY TABLESPACE STMASPACE PAGESIZE 32 K MANAGED BY DATABASE USING (FILE 'D:\DB2_TAB\STMASPACE.F1' 10000) EXTENTSIZE 256</p>
<p>获取数据库管理器的快照数据</p>
<p>db2 &#8211;v get snapshot for dbm</p>
<p>显示进行程号</p>
<p>db2 list applications show detail</p>
<p>调查错误</p>
<p>sqlcode:产品特定错误码；</p>
<p>sqlstate:DB2系列产品的公共错误码，符合ISO/ANSI 92SQL标准。</p>
<p>调查sqlcode : db2 ? sql1403n</p>
<p>调查sqlstate: db2 ? 08004</p>
<p>创建表空间</p>
<p>rem 创建缓冲池空间 8K</p>
<p>db2 connect to gather</p>
<p>db2 CREATE BUFFERPOOL STMABMP IMMEDIATE&nbsp; SIZE 25000 PAGESIZE 8K</p>
<p>&nbsp;创建表空间：STMA</p>
<p>&nbsp;必须确认路径正确</p>
<p>D:\DB2Container\Stma</p>
<p>db2 drop tablespace stma</p>
<p>db2 CREATE&nbsp; REGULAR TABLESPACE STMA PAGESIZE 8 K&nbsp; MANAGED BY SYSTEM&nbsp; USING ('D:\DB2Container\Stma' ) EXTENTSIZE 8 OVERHEAD 10.5 PREFETCHSIZE 8 TRANSFERRATE 0.14 BUFFERPOOL&nbsp; STMABMP&nbsp; DROPPED TABLE RECOVERY OFF</p>
<p>db2 connect reset</p>
<p>将暂挂的数据恢复到前滚状态</p>
<p>db2 ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND COMPLETE NORETRIEVE</p>
<p>备份表空间</p>
<p>BACKUP DATABASE YNDC TABLESPACE ( USERSPACE1 ) TO "D:\temp" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING</p>
<p>创建db2工具数据库</p>
<p>db2 create tools catalog systools create new database toolsdb</p>
<p>如何进行增量/差量备份</p>
<p>增量：上一次完整备份至本次备份之间增加的数据部分；</p>
<p>差量(delta)：上次备份以来（可能是完整备份、增量备份或者差量备份）至本次备份之间增加的数据部分；</p>
<p>更新所有表的统计信息</p>
<p>db2 -v connect to DB_NAME</p>
<p>db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"</p>
<p>db2 -v reorgchkupdate statistics on table all</p>
<p>db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"</p>
<p>db2 -v terminate</p>
<p>对一张表运行统计信息</p>
<p>db2 -v runstatson table TAB_NAMEand indexes all</p>
<p>查看是否对数据库执行了RUNSTATS</p>
<p>db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"</p>
<p>更改缓冲池的大小</p>
<p>缓冲池中，当syscat.bufferpools的npages是-1时，由数据库的配置参数bufferpage控制缓冲池的大小。</p>
<p>将npages的值更改为-1的命令：</p>
<p>db2 -v connect to DB_NAME</p>
<p>db2 -v select * from syscat.bufferpools</p>
<p>db2 -v alter bufferpoolIBMDEFAULTBP size -1</p>
<p>db2 -v connect reset</p>
<p>db2 -v terminate</p>
<p>更改数据库配置参数BufferPages的命令如下：</p>
<p>db2 -v update db cfgfor dbnameusing BUFFPAGE bigger_value</p>
<p>db2 -v terminate</p>
<p>查看数据库监视内容列表</p>
<p>db2 -v get monitor switches</p>
<p>打开某个数据库监视内容</p>
<p>db2 -v update monitor switches using bufferpoolon</p>
<p>获取数据库快照</p>
<p>db2 -v get snapshot for all databases &gt; snap.out</p>
<p>db2 -v get snapshot for dbm&gt;&gt; snap.out</p>
<p>db2 -v get snapshot for all bufferpools&gt;&gt; snap.out</p>
<p>db2 -v terminate</p>
<p>重置数据库快照</p>
<p>db2 -v reset monitor all</p>
<p>计算缓冲池命中率</p>
<p>理想情况下缓冲池命中率在95%以上，计算公式如下：</p>
<p>(1 -((buffer pool data physical reads + buffer pool index physical reads) /(buffer pool data logical reads + pool index logical reads))) *100%</p>
<p>&nbsp;创建db2实例</p>
<p>db2icrt &lt;实例名称&gt;</p>
<p>删除db2实例</p>
<p>db2idrop &lt;实例名称&gt;</p>
<p>设置当前db2实例</p>
<p>set db2intance=db2</p>
<p>&nbsp;显示db2拥有的实例</p>
<p>db2ilist</p>
<p>恢复离线增量备份数据库的命令</p>
<p>DB2 RESTORE DATABASE YNDC INCREMENTAL AUTOMATIC FROM D:\backup\autobak\db2 TAKEN AT 20060314232015</p>
<p>&nbsp;创建样本数据库</p>
<p>在unix平台，使用：sqllib/bin/db2sampl &lt;path&gt;</p>
<p>在windows,os/2平台，使用：db2sampl e,e是可选参数，指定将创建数据库的驱动器；</p>
<p>&nbsp;列出数据库中所有的表</p>
<p>db2 list tables</p>
<p>&nbsp;列出某个表的数据结构</p>
<p>db2 describe table v_ro_role</p>
<p>给表增加列</p>
<p>ALTER TABLE STAFF&nbsp; ADD COLUMN PNHONE VARCHAR(20)</p>
<p>数据迁移方法1</p>
<p>export脚本示例<br>db2 connect to testdb user test password test<br>db2 "export to aa1.ixf of ixf select * from table1"<br>db2 "export to aa2.ixf of ixf select * from table2"<br>db2 connect reset<br>import脚本示例<br>db2 connect to testdb user test password test<br>db2 "load from aa1.ixf of ixf&nbsp; replace into table1&nbsp; COPY NO&nbsp; without prompting "<br>db2 "load from aa2.ixf of ixf&nbsp; replace into table2&nbsp; COPY NO&nbsp; without prompting "<br>db2 connect reset<br></p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 21:33 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBM DB2 日常维护汇总</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32144.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 21 Aug 2007 07:14:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32144.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32144.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32144.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32144.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;1.DB2产品的级别有那些? 　　企业版的NTERPRISEEDITION 　　工作组版WORKGROUPEDITION 　　企业扩展版ENTERPRISEEXTENDEDEDITION 　　个人版的PERSONALEDITION 　　卫星版的SATELLITEEDITION 　　微型版的EVERYPLACE 　　 　　2.可以连接到DB2数据库的产品有哪些? 　　DB2客户端 　...&nbsp;&nbsp;<a href='http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32144.html'>阅读全文</a><img src ="http://www.cnitblog.com/szdlinxie/aggbug/32144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 15:14 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DB2 UDB V8.1 管理</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32143.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 21 Aug 2007 07:12:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32143.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32143.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32143.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32143.html</trackback:ping><description><![CDATA[<p align=left><a name=1><strong><span></span></strong></a></p>
<p align=left><span><span>工作学习之余对<span>DB2</span>使用知识的一点零散记录，包括<span>DB2</span>的基础知识、数据库管理、性能调优以及开发等方面，内容非常零散，而且有时不免理解有误，可能并未回头改掉，望见谅，仅供参考。</span></span></p>
<p align=left><a name=2><strong><span>DB2 </span></strong></a><span><strong><span>基本概念</span></strong></span></p>
<p align=left><span><span>在<span>DB2</span>中由上至下的几个概念：</span></span></p>
<ul type=disc>
    <li><span><span>实例<span>(Instance), </span></span></span></li>
    <li><span><span>数据库<span>(Database)</span>，</span></span></li>
    <li><span><span>表空间<span>(TableSpace)</span>，</span></span></li>
    <li><span><span>容器<span>(Container)</span></span></span></li>
</ul>
<p align=left><span><span>在一个操作系统中，<span>DB2</span>数据服务可以同时运行多个实例<span>(</span>有别于<span>Oracle</span>在一个系统内只能起一个实例<span>).</span></span></span></p>
<p align=left><span><span>数据库定义在实例中，一个实例可以包含多个数据库。在同一个实例中的不同数据库是完全独立的，分别拥有自己独立的系统编目表。<span><br><br></span>表空间有<span>2</span>种管理方式：</span></span></p>
<ul type=disc>
    <li><span><span>DMS(Database management Space)</span></span><span><span>方式</span></span></li>
    <li><span><span>SMS(System manegement Space)</span></span><span><span>方式</span></span></li>
</ul>
<p align=left><span><span>DMS</span></span><span><span>与<span>SMS</span>方式在表空间建立时指定，建好后不能转换。对于<span>DMS</span>方式，一个表空间对应了一个或多个容器<span>(Container)</span>，容器指定了数据的物理存储位置。对于<span>SMS</span>方式，只能够指定一个目录，不能够增加。</span></span></p>
<p align=left><span><span>表空间具有以下类型：</span></span></p>
<ul type=disc>
    <li><span><span>系统编目表空间<span>(SysCatSpace)</span></span></span></li>
    <li><span><span>系统临时表空间<span>(SysTempSpace)</span></span></span></li>
    <li><span><span>用户表空间<span>(UserSpace)</span></span></span></li>
    <li><span><span>用户临时表空间<span>(UserTempSpace)</span></span></span></li>
</ul>
<p align=left><span><span>一个数据库中必须存在两个系统基本的表空间，分别是系统编目表空间与系统临时表空间。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现，对于临时表空间，其占用磁盘大小是根据使用情况动态伸缩的，即仅在需要时才分配磁盘空间，并在使用后进行回收。此外，若用户需要创建表，则需要创建用户表空间，若需要使用临时表，则需要创建用户临时表空间。<span><br><br><br></span>容器分为三种类型：</span></span></p>
<ul type=disc>
    <li><span><span>Files </span></span><span><span>文件</span></span></li>
    <li><span><span>Devices </span></span><span><span>设备</span></span></li>
    <li><span><span>Directory </span></span><span><span>目录</span></span></li>
</ul>
<p align=left><span><span>文件与设备，用于<span>DMS</span>方式的表空间；</span></span></p>
<p align=left><span><span>目录，用于<span>SMS</span>方式的表空间，此种方式不需要人工管理数据存储文件，<span>DB2</span>可根据情况在目录中自动增加存储文件，只要磁盘空间允许。</span></span></p>
<p align=left><span><span>实质上，表空间是数据存储的逻辑位置定义，容器则是数据存储的物理位置定义。</span></span></p>
<p align=left><a name=3><strong><span>数据库的性能</span></strong></a></p>
<p align=left><span><span>影响一个数据库的性能主要有以下因素：</span></span></p>
<ul type=disc>
    <li><span><span>磁盘<span>(Disk)</span></span></span></li>
    <li><span><span>内存<span>(Memory)</span></span></span></li>
    <li><span><span>处理器<span>(CPU)</span></span></span></li>
    <li><span><span>网络<span>(Network)</span></span></span></li>
</ul>
<p align=left><span><span>其中以磁盘最为显著，<span>90%</span>的性能瓶颈可能来自于磁盘的<span>IO</span>竞争；</span></span></p>
<p align=left><span><span>其次是内存，一方面是指物理内存的总量要满足需求，另一方面是指与内存相关的配置参数应正确配置；</span></span></p>
<p align=left><span><span>当然处理器的性能也很重要，多路<span>CPU</span>会对哪些依赖计算能力的复杂<span>SQL</span>查询起到显著的效果；</span></span></p>
<p align=left><span><span>网络不属于主要因素，属于客观的环境因素，是指过慢的网速会对数据的传输造成影响。以下列出一些对于提高数据库性能有效的方法：</span></span></p>
<ul type=disc>
    <li><span><span>对于运行数据库服务的服务器可以尽可能的配置多块物理磁盘，每块的容量不必太大，这样可以有效的分担数据存储与读取操作过程的磁盘<span>IO</span>竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。</span></span></li>
    <li><span><span>如果条件允许，尽量使数据存储服务与操作系统分别运行在物理分开的磁盘上。</span></span></li>
    <li><span><span>采用<span>DMS(Database Management Space)</span>管理方式的表空间。</span></span></li>
    <li><span><span>在物理不同的磁盘上创建多个表空间。然后可以将数据和索引分别存放在不同的表空间，这样可以显著的提高性能。还可以把一个使用频繁的大表纵向拆成多个小表，分别存放在不同的表空间中，然后用一个视图进行联合。</span></span></li>
    <li><span><span>DB2</span></span><span><span>服务器可以管理裸设备，即除系统以及<span>DB2</span>服务运行磁盘以外，为<span>DB2</span>数据存放单独准备磁盘，可以是多块，分区后不需要格式化，创建裸设备后直接交给<span>DB2</span>进行管理，用于存储数据。</span></span></li>
    <li><span><span>系统的临时表空间对数据库性能影响很大，当由管理的物理内存不能满足数据库操作的需要时，<span>DB2</span>便会把临时数据写到磁盘上，这时便用到了系统临时表空间，并且这种情况会经常发生。</span></span></li>
    <li><span><span>尽量在磁盘靠近最内层磁道的位置安放数据，因为此处磁盘的访问速度较快。</span></span></li>
</ul>
<p align=left><a name=4><strong><span>与性能相关的主要参数</span></strong></a></p>
<p align=left><span><span>DB2</span></span><span><span>的参数配置分为两个级别，一个是实例级别，另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。以下是三个比较重要的内存配置参数：</span></span></p>
<p align=left><span><span>bufferpage<br>locklist<br>sortheap</span></span></p>
<ul type=disc>
    <li><span><span>bufferpage: </span></span><span><span>由同一个数据库中的所有对象共享。</span></span></li>
    <li><span><span>sortheap: </span></span><span><span>用于排序的内存交换区，非共享，不宜设置太大，否则，很容易引起内存耗尽，因为每一个事务都会申请独立的内存用于排序。</span></span></li>
    <li><span><span>locklist: </span></span><span><span>共享内存，用于记录数据服务运行中建立的锁。建议设置<span>20Mb</span>左右，需要时根据实际情况进行调整。<span>DB2</span>默认使用行级锁，如果设置太小，当锁的记录太多时，则会导致内存不足，此时<span>DB2</span>会把多个行锁升级为一个表锁，这样就会大大降低应用程序的并发性能。如果设置太大，则多分配的内存很少会被用到，导致浪费。</span></span></li>
</ul>
<p align=left><span><span>其他的一些配置参数：</span></span></p>
<p align=left><span><span>numdb: </span></span><span><span>同时可以启动的实例数目</span></span></p>
<p align=left><a name=5><strong><span>DB2</span></strong></a><span><strong><span>的常用命令</span></strong></span></p>
<p align=left><span><span>db2ilist </span></span><span><span>列出当前系统中定义的<span>DB2</span>实例<span><br>daslist </span>列出系统中的<span>DAS<br>db2 list database directory </span>列出当前实例中定义的数据库<span><br>db2 list tablespaces </span>列出当前数据库中定义的表空间<span><br>db2 list tabses [for all] </span>列出当前数据库中的表<span><br>db2 list active db </span>列出活动的数据库</span></span></p>
<p align=left><span><span>db2 get dbm config<br>get db cfg for databasename<br>db2 update db cfg for databasename using bufferpage <st1:chmetcnv w:st="on" UnitName="m" SourceValue="600" HasSpace="False" Negative="False" NumberType="1" TCSC="0">600M</st1:chmetcnv><br>db2 alter bufferpool IABMDEFAULTBP size =1<br>db2 list applications show detail</span></span></p>
<p align=left><span><span>以上命令可以在后面加<span> " show detail" </span>参数，显示详细信息。<span><br><br>DB2</span>数据存储的页大小只能在表空间级别统一指定<span>(</span>区别于<span>Oracle</span>，可以定义在表级别<span>), </span>并且建好后不能修改。<span><br><br></span>可以手工建立一个页大小为<span>4K</span>的<span>DMS</span>用户临时表空间，然后把系统默认的<span>SMS</span>系统临时表空间删除。为满足应用需求，一般还应再建立一个页大小在<span>8K</span>以上的用户临时表空间。<span><br><br>DB2 UDB V8.1 </span>对<span>RedHat Linux 9 </span>的支持不好，默认情况下无法启动<span>GUI</span>安装程序<span>(</span>可以通过设置环境<span>LD_ASSUME_KERNEL=<st1:chsdate w:st="on" Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False">2.2.5</st1:chsdate></span>解决<span>)</span>，并且不会安装<span>Sample</span>数据库，控制中心也无法正常启动。</span></span></p>
<p align=left><a name=6><strong><span>DB2 SQL </span></strong></a><span><strong><span>相关</span></strong></span></p>
<p align=left><span><span>当使用<span>COUNT()</span>函数时，如果表中的记录数<span> &gt; 2 147 483 647</span>行，则函数可能返回错误的结果，这时可以使用返回类型为<span>DECIMAL(31, 0)</span>的<span>COUNT_BIG()</span>函数。<span><br><br>DISTINCT </span>关键字可以用在<span>COUNT()</span>函数中，如：</span></span></p>
<p align=left><span><span>SELECT COUNT(DISTINCT id) FROM TABLE</span></span></p>
<p align=left><span><span>这代表将不对<span>id</span>列的重复值进行计数。<span><br><br>ORDER BY</span>子句后面如果写了多个列名，需要分别指定升序或是降序。<span><br><br></span>可以在<span>load</span>大量数据时，暂时关闭表的日志选项。使用：</span></span></p>
<p align=left><span><span>ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY</span></span></p>
<p align=left><span><span>DB2</span></span><span><span>的几个特殊寄存器：</span></span></p>
<p align=left><span><span>CURRENT DATE<br>CURRENT TIME<br>CURRENT TIMESTAMP<br>USER(</span></span><span><span>用户<span>ID)</span></span></span></p>
<p align=left><span><span>有关日期的操作：</span></span></p>
<p align=left><span><span>CURRENT TIMESTAMP + 2 DAYS(or HOURS, SECONDS, MONTHS, YEARS, etc.)</span></span></p>
<p align=left><span><span>case </span></span><span><span>语句的使用：</span></span></p>
<p align=left><span><span>case when </span></span><span><span>条件一<span> then </span>动作一<span> else </span>动作二<span> end; </span></span></span></p>
<p align=left><span><span>以上可以欠套使用。</span></span></p>
<p align=left><span><span>在视图的创建语句中无法使用<span>order by </span>子句与<span> fetch n rows </span>子句。但对于<span>order by</span>可以用如下方法替代实现，不过会影响效率。</span></span></p>
<p align=left><span><span>create view v_name1(c1, c2, c3) as<br>select * from (<br>select column1, column2, column3<br>from t1<br>order by column1 ) as t1;</span></span></p>
<p align=left><span>表空间类型分为<span>SMS</span>和<span>DMS</span>，分别是<span>system management space, database management space. SMS</span>使用方便，简单，无需手工创建和维护数据存储文件。<span>DMS</span>需要手动指定<span>container</span>和存储数据的文件名，并保证有足够磁盘空间可用。<span><br></span>对于一个数据库，至少存在一个<span>page size</span>为<span>4K</span>的系统临时表空间，可以额外建立具有更大<span>page size</span>的用户临时表空间，系统会自动进行使用。<span><br><br></span>无法用<span>alter</span>语句更改一个字段的数据类型，对某些字段可以更改数据长度，这一点上相对于<span>Oracle</span>，<span>DB2</span>的限制要多一些。<span><br></span>可以使用<span>: select </span>表达式<span> from sysibm.sysdummy; </span>替代的，以下语句是等价的：<span>values </span>表达式；<span><br><br><br></span>表和视图的创建、更新、删除操作，都写日志，因此可以<span>commit</span>或<span>rollback</span>。<span><br><br></span>在<span>update</span>语句中，如果没有对定义了默认值的某个字段显式赋值，则更新时，此字段不会重新执行默认值中定义的表达式。为了让其重新执行默认值定义的表达式，可以采用以下方式：</span></p>
<p align=left><span>create table t1 (c1 varchar(32), lastupdatetime with default current timpstamp);<br>update t1 set c1 = 'new string', lastupdatetime = default;</span></p>
<p align=left><span>对于<span>DB2</span>数据库可以在创建时指定<span>codepage</span>参数，创建后不可修改。当应用程序访问数据库时，<span>DB2</span>会比较两者的<span>codepage</span>是否一致，不一致则进行代码页的自动转换。为了减少转换所带来的开销，应尽量保证应用程序所采用的代码页与数据库一致。<span><br><br></span>可以对<span>DB2 CLP</span>工具的<span>codepage</span>进行设置，使用：</span></p>
<p align=left><span>$ db2set DB2CODEPAGE= 1386</span></p>
<p align=left><span>本例中设置的是中文<span>GBK</span>字符集在<span>Windows</span>平台对应的值。注意，这个数字值是由<span>DB2</span>自己定义的。有关各种字符集在相应平台所对应的代码页值可在<span>IBM</span>网站查找。<span><br><br></span>在<span>DB2 CLP</span>中，对远程数据库编目的操作，首先把远程主机映射为本地节点，节点名自己指定，本例采用<span>TCPIP</span>连接。<span>service_name</span>一般定义在远程主机的<span>/etc/services</span>文件中。</span></p>
<p align=left><span>$ db2 CATALOG TCPIP NODE local_node_name REMOTE hostname|ip SERVER service_name </span></p>
<p align=left><span>然后把已知的远程主机的数据库映射到本地别名，注意本地别名在主机级别不能重复。节点名指定上面刚编目的节点。</span></p>
<p align=left><span>$ db2 CATALOG DATABASE db_name AS local_alias AT local_node_name USER username USING password </span></p>
<p align=left><span>现在就可以用刚才编目中定义的别名连接远程主机数据库</span></p>
<p align=left><span>$ db2 CONNECT TO local_alias USER username USING password</span></p>
<p align=left><span>获取数据库详细配置信息</span></p>
<p align=left><span>$ db2 GET CONFIGURATION SHOW DETAIL </span></p>
<p align=left><span>对于<span>DB2</span>返回的错误号，可以用以下方法查阅说明<span>(</span>以<span>sql 10008</span>为例<span>)</span>：</span></p>
<p align=left><span>$ db2 ? sql10008</span></p>
<p align=left><span>数据库的备份与恢复：<span><br><br></span>使用备份与恢复工具可以完成在不同的服务器见完整的转移数据库的工作，命令行方式如下：<span><br><br></span>备份</span></p>
<p align=left><span>$ db2 BACKUP DATABASE db_name USER user_name USING password to backup_dir_name<br>$ db2 BACKUP DATABASE dlhdb USER dlh USING admindlh TO d:\backups</span></p>
<p align=left><span>恢复</span></p>
<p align=left><span>$ db2 RESTORE DATABASE source_db_name USER user_name USING password FROM backup_dir_name TAKEN AT backup_file_create_time TO driver_letter INTO new_db_name<br>$ db2 RESTORE DATABASE dlhdb USER dlh USING admindlh FROM d:\backups TAKEN AT 20031209141056 TO d: INTO newdb</span></p>
<p align=left><span>有关实例的操作：</span></p>
<p align=left><span>设置默认实例环境变量</span></p>
<p align=left><span>$ db2 SET DB2INSTANCE=inst_name</span></p>
<p align=left><span>启动当前实例</span></p>
<p align=left><span>$ db2start</span></p>
<p align=left><span>停止当前实例</span></p>
<p align=left><span>$ db2stop [force]</span></p>
<p align=left><span>连接到某个实例</span></p>
<p align=left><span>$ db2 ATTACH TO ANSTANCE inst_name</span></p>
<p align=left><span>获取实例的配置参数</span></p>
<p align=left><span>$ db2 GET DBM CFG SHOW DETAIL</span></p>
<p align=left><span>导出数据库完整的定义到脚本文件，包括表，视图，函数，数据库参数等</span></p>
<p align=left><span>$ db2look -d sample</span><span>（数据库）<span> -a -e -l -x -m -f -o</span>（参数）<span>samplesql.out</span>（输出文件）</span></p>
<p align=left><span>load </span><span>一个表的数据时，有可能导致表空间处于<span>backup pending</span>（<span>0x0020</span>）状态。比如把整形数据<span>load</span>到<span>double</span>型的字段中。<span><br></span>处于<span>backup pending</span>状态的表空间不能被访问。<span><br></span>可以通过对此表空间运行一次<span>backup</span>操作，恢复到正常状态（<span>0x0</span>）。<span><br><br></span>对于自增字段，可以通过两种方式指定：</span></p>
<p align=left><span>generated by default as identity<br>generated always as identity</span></p>
<p align=left><span>区别是，第一种方式在插入数据时允许手工指定自增字段的值，只要不重复即可，并且数据库会自动设置下一个值；<span><br></span>第二种方式则不允许指定，只能由数据库自动分配并插入。<span><br><br><br>DB2 sql</span>语句中转义符的使用：</span></p>
<p align=left><span>select * from t1 where a like '%abc\%def' escape '\';</span></p>
<p align=left><span>创建数据库时，出现<span>SQL<st1:chmetcnv w:st="on" UnitName="C" SourceValue="1043" HasSpace="False" Negative="False" NumberType="1" TCSC="0">1043C</st1:chmetcnv></span>错误，可能的问题：<span><br></span>指定容器所在的磁盘空间不足，<span><br></span>当容器为<span>file</span>类型时，后面的<span>long-num</span>参数不对，比如<span>25600</span>代表<span>256Mb</span>，但如果指定<span>256</span>则会导致以上错误。<span><br><br><br></span>平台<span> RH Linux 8<br>DB2 UDB v8.1<br></span>在<span>WAS 5</span>中建立到<span>db2</span>的数据源，但连接失败，返回以下错误：</span></p>
<p align=left><span>[Servlet Error]-[SQLConnect]: java.lang.UnsatisfiedLinkError: SQLConnect</span></p>
<p align=left><span>原因是没有为运行<span>was</span>服务的用户设置以下环境变量：</span></p>
<p align=left><span>D_LIBRARY_PATH<br>LIBPATH<br>DB2INSTANCE<br>...</span></p>
<p align=left><span>以上环境变量定义在<span> $INSTHOME/sqllib/db2profile</span>文件中，可以采用的解决方案：</span></p>
<p align=left><span>$ sh stopServer.sh servername<br><br>$ . $INSTHOME/sqllib/db2profile<br>$ sh startServer.sh servername</span></p>
<p align=left><span>也可以把<span>db2profile</span>放到<span>was</span>启动脚本中首先执行。<span><br><br></span>如果只设置了<span>LD_LIBRARY_PATH</span>，<span>LIBPATH</span>两个环境变量，<span>DB2</span>会返回以下错误：</span></p>
<p align=left><span>CLI0600E Invalid connection handle or connection is closed.<br>SQLSTATE S1000</span></p>
<p align=left><span>对应于<span>Oracle</span>的<span>Job</span>包功能，<span>DB2</span>通过一个<span>GUI</span>工具－任务中心（<span>task center</span>）实现。使用任务中心前需要进行必要的工具设置，需要创建一些数据库对象，可以创建在已有的一个数据库中，也可以单独创建一个数据库。通过以下命令实现：</span></p>
<p align=left><span>create catalog tools schema_name create new database db_name</span></p>
<p align=left><span>此命令为编目工具创建一个名为<span>db_name </span>的数据库，并指定了一个模式名。<span><br></span>注意：无法用<span>using </span>子句指定一个<span>codeset</span>，系统会默认使用<span>ISO8859-1</span>字符集。<span><br><br><br>Quest Center for DB2</span>带有数据库性能诊断功能，动态监视<span>db</span>内存，磁盘<span>io, </span>表空间，负载等等。<span><br><br>DB2</span>客户端的类型：</span></p>
<ul type=disc>
    <li><span>DB2</span><span>运行时客户端<span> DB2 Runtime Client</span></span></li>
    <li><span>DB2</span><span>管理客户端<span> DB2 Administrator Client</span>（包含运行时客户端的所有内容）</span></li>
    <li><span>DB2</span><span>应用程序开发客户端<span> DB2 Application Development Client</span>（包含管理客户端的所有内容）</span></li>
    <li><span>DB2</span><span>瘦客户端<span> DB2 Thin Client</span></span></li>
    <li><span>DB2 Relational Connect </span><span>联邦数据库，用于连接异种数据库。</span></li>
</ul>
<p align=left><span>强制断开已有连接，停止实例并删除。</span></p>
<p align=left><span>$ db2idrop -f instance_name </span></p>
<p align=left><span>用于在<span>UNIX</span>下迁移实例。</span></p>
<p align=left><span>$ db2imigr instance_name </span></p>
<p align=left><span>更新实例，用于实例获得一些新的产品选项或修订包的访问权。</span></p>
<p align=left><span>$ db2iupdt instance_name </span></p>
<p align=left><span>获取当前所处的实例。</span></p>
<p align=left><span>$ db2 get instance </span></p>
<p align=left><span>当更新实例级别或数据库级别的参数后，有些可以立即生效，有些需要重新启动实例才可生效。<span>immediate </span>显式指明更改立即生效，<span>deferred </span>显式指明更改在重起实例后生效。<span><br><br></span>当需要配置许多台客户机与<span>DB2</span>服务器的连接时，可以用配置助手将服务器的概要文件导出，然后在每个客户机使用配置助手导入概要文件。若客户端只安装了运行时客户端，则可以使用以下命令导入概要文件。</span></p>
<p align=left><span>$ db2cfimp access_profile_name</span></p>
<p align=left><span>疑问：是否应该由已配置好的一台客户机导出概要文件？</span></p>
<p align=left><span>列出所有的数据库连接</span></p>
<p align=left><span>$ db2 list applications </span></p>
<p align=left><span>终止指定的连接句柄，事务被中断并回滚。同时操作多个句柄可以用逗号分开，或者指定关键字<span> all</span>。此命令只终止指定的连接，不会阻止新的应用连接到数据库。</span></p>
<p align=left><span>$ db2 force application (2) </span></p>
<p align=left><span>创建数据库时可以指定排序方式：</span></p>
<p align=left><span>collate using identity</span></p>
<p align=left><span>系统模式集是和每个数据库一起创建的，并且它们被放置到<span> SYSCATSPACE </span>表空间中。</span></p>
<ul type=disc>
    <li><span>SYSIBM</span><span>：基本系统目录，建议不要进行直接访问</span></li>
    <li><span>SYSCAT</span><span>：<span>PUBLIC </span>被授予该模式的<span> SELECT </span>权限，对只读视图编目，这是获取目录信息的推荐方式</span></li>
    <li><span>SYSSTAT</span><span>：可更新的目录视图 － 影响优化器</span></li>
    <li><span>SYSFUN</span><span>：用户定义的函数</span></li>
</ul>
<p align=left><span>如果表中的现有行不满足约束，则不能定义该约束。可以关闭约束检查以加快大量数据的添加，但是该表处于检查暂挂（<span>CHECK PENDING</span>）状态。<span><br><br></span>在创建表时，可以使用选项来指定一个或多个表空间，表和索引将被放置到其中：</span></p>
<p align=left><span>CREATE TABLE TEST (<br>column 1 definition, column 2 definition, ...<br>) IN &lt;tablespace name&gt; INDEX IN &lt;index space name&gt;</span></p>
<p align=left><span>这条命令为您提供了一个选项：指定创建表和索引的位置。如果没有指定单独的索引表空间，那么将在表所在的同一表空间中创建索引。创建表之后，就没有机会在不同的表空间中创建索引了。创建索引要提前作规划！</span></p>
<p align=left><span>CREATE &lt;UNIQUE&gt; INDEX &lt;index name&gt; ON &lt;table name&gt;<br>(<br>column 1 &lt;ASC | DESC&gt; ,<br>column 2 &lt;ASC | DESC&gt; ...<br>)</span></p>
<p align=left><span>UNIQUE </span><span>属性告诉<span> DB2</span>，索引必须强制所有插入值的唯一性。<span><br></span>如果结果集是以升序和降序两种方式排序的，<span>ALLOW REVERSE SCANS </span>会告诉<span> DB2 </span>在索引中包括附加的指针，以允许在记录中有效地进行正向和反向链接。<span><br><br>DB2 </span>能够向正在创建的索引中添加另外的列。<span>CREATE INDEX </span>命令允许用户指定那些不属于实际索引但因为性能原因而保存在索引记录中的列。</span></p>
<p align=left><span>CREATE UNIQUE INDEX ON EMPLOYEE (EMPNO) INCLUDE (LASTNAME,FIRSTNAME)</span></p>
<p align=left><span>对于索引中包含的列而言，索引必须是<span> UNIQUE </span>的。当创建索引时，另外的列被添加到索引值中。索引不使用这些值进行排序或确定唯一性，但可以在满足<span> SQL </span>查询时使用它们。例如，下列<span> SELECT </span>语句将不需要读取实际数据行：</span></p>
<p align=left><span>SELECT LASTNAME, FIRSTNAME FROM EMPLOYEE WHERE EMPNO &lt; '000300'</span></p>
<p align=left><span>要在表上创建群集索引，将<span> CLUSTER </span>关键字附加到<span> CREATE INDEX </span>命令的末尾，例如：</span></p>
<p align=left><span>CREATE INDEX <st1:place w:st="on"><st1:city w:st="on">DEPTS-IX</st1:city> <st1:state w:st="on">ON</st1:state></st1:place> EMPLOYEE(WORKDEPT) CLUSTER</span></p>
<p align=left><span>使用下列通用规则来决定为表定义的索引的经典数量。索引数量取决于数据库的主要用途：<span><br></span>对于在线事务处理（<span>OLTP</span>）环境，创建一到两个索引。<span><br></span>对于混合查询和<span> OLTP </span>环境，创建两到五个索引。<span><br></span>对于只读查询环境，创建五个以上索引。<span><br><br></span>在<span>Windows</span>平台上的<span>DB2</span>的命令行模式下，或者在类<span>Unix</span>平台下，使用命令<span>db2cc</span>启动控制中心。<span><br><br>db2move</span>提供了在数据库之间批量移动数据的能力，可以指定某个表，也可以指定整个数据库的表。</span></p>
<p align=left><span>$ db2move dbname action</span></p>
<p align=left><span>action </span><span>可以指定为：<span>export, import</span>或者<span>load<br></span>使用<span> -l </span>参数指定<span>lob</span>对象存储的文件夹<span><br><br></span>执行增量备份要求设置数据库配置参数<span>&#8220;trackmod&#8221;</span>的值为<span>&#8220;YES&#8221;<br></span>执行在线备份要求设置数据库配置参数<span>&#8220;logretain&#8221;</span>的值为<span>&#8220;YES&#8221;</span>，在线备份语法：</span></p>
<p align=left><span>$ db2 backup db dbname online to path</span></p>
<p align=left><span>当删除了<span>das</span>用户的<span>home</span>目录，未先<span>drop</span>掉<span>das</span>服务，则再执行<span>dasdrop</span>则不成功，提示：<span><br>db2admin </span>命令无法找到，原因是<span>db2admin</span>命令保存在<span>das</span>的<span>home</span>目录中。<span><br></span>可以删除干净<span>das</span>用户的<span>home</span>目录后，重起服务器解决此问题。</span></p>
<p align=left><span>$ dasupdt dasName </span><span>升级<span>das<br>$ db2iupdt instName </span>升级实例<span><br>$ db2licd end </span>停止许可证守护进程</span></p>
<p align=left><span>在<span>Linux</span>系统安装<span>DB2 V8.1</span>后，<span>db2fmcd</span>进程会自动启动，即使不启动实例和<span>DAS</span>，<span><br><br></span>在中文<span>Linux</span>环境下安装了<span>DB2</span>数据库服务，并使用<span>GBK</span>代码页（<span>codepage</span>）创建了一个数据库，完成后可以正常连接操作，若更改操作系统代码页为英语，则使用<span>&#8220;db2 connect&#8221;</span>时会报错，连接时无法转换代码页。</span></p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 15:12 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>db2个人版快速入门</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32127.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Mon, 20 Aug 2007 16:47:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32127.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32127.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32127.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32127.html</trackback:ping><description><![CDATA[<a href="http://www.cnitblog.com/Files/szdlinxie/db2AA.pdf">/Files/szdlinxie/db2AA.pdf</a>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 00:47 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>db2安装配置补遗</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32125.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Mon, 20 Aug 2007 16:44:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32125.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32125.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32125.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32125.html</trackback:ping><description><![CDATA[<a href="http://www.cnitblog.com/Files/szdlinxie/db2C.pdf">/Files/szdlinxie/db2C.pdf</a>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 00:44 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>db2服务器快速入门</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32123.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Mon, 20 Aug 2007 16:39:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32123.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32123.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32123.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32123.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnitblog.com/Files/szdlinxie/db2.rar">/Files/szdlinxie/db2.rar</a></p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 00:39 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/08/21/32123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle有关资料</title><link>http://www.cnitblog.com/szdlinxie/archive/2007/05/18/27202.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Fri, 18 May 2007 07:51:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2007/05/18/27202.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/27202.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2007/05/18/27202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/27202.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/27202.html</trackback:ping><description><![CDATA[<p>2007.5.14</p>
<p>1、oracle有关资料查询：<br><a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html">http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html</a></p>
<p>2、 Linux下的Oracle 10g安装及配置 <br>&nbsp;<br>一.资源需要：<br>至少1024 MB物理内存<br>1024－2048 需1.5倍的交互空间<br>2048－8192 需1倍的交互空间<br>8192－ 需0.75倍的交互空间<br>至少400 MB /tmp 临时目录空间<br>oracle软件需要1.5 GB 到 3.5 GB 磁盘空间<br>默认数据库需要1.2 GB</p>
<p>二.查看系统资源相关语句：<br>cat /etc/issue<br>uname -r<br>grep MemTotal /proc/meminfo<br>grep SwapTotal /proc/meminfo<br>grep "model name" /proc/cpuinfo<br>free<br>df -k /tmp<br>df -k<br>安装前的检查和准备工作： <br>p4198954_21_linux.zip 在运行 runInstaller 之前打. <br>rpm -ivh compat-oracle-rhel4-1.0-5.i386.rpm (p4198954_21_linux.zip)<br>(不打PATCH也可以）<br>安装 libaio-0.3.102-1.i386.rpm <br>libaio-devel0.3.102-1.i386.rpm<br>在Red Hat Enterprise Linux 介质的第三张CD,以 root 用户身份运行以下命令：<br>rpm -ivh /mnt/cdrom/RedHat/RPMS/ libaio-0.3.102-1.i386.rpm</p>
<p>三.创建数据库安装的准备工作: <br>1.创建用户和组(user/group)； <br>groupadd dba <br>groupadd oinstall <br>useradd oracle -g oinstall -G dba <br>passwd oracle <br>如果nobody用户不存在（id nobody命令查看)，则创建：<br>useradd nobody<br>2.建立oracle安装文件夹(sample)； <br>mkdir -p /opt/oracle/product/10g<br>mkdir /opt/oracle/database<br>chown -R oracle.oinstall /opt/oracle<br>chmod 755 -R /opt/oracle<br>2， 配置环境变量； <br>要使用 Oracle 产品，应该或必须设置几个环境变量。如果您在同一服务器上安装了多个 Oracle 产品或数据库，则 ORACLE_HOME、ORACLE_SID 和 PATH 变量可能会更改。ORACLE_BASE 变量不应更改，并可以在需要时在您的登录配置文件中设置它。Oracle 提供了一个称作 oraenv 的实用程序来设置其他变量。<br>对于数据库服务器，建议设置以下环境变量： <br>使用第一步创建的用户名Oracle登陆: <br>su oracle <br>vi ~/.bash_profile <br>修改以下是配置文件的内容<br>export ORACLE_BASE=/opt/oracle/<br>export ORACLE_HOME=/opt/oracle/product/10g<br>export ORACLE_SID=ge01(可随意定义)<br>export PATH=$ORACLE_HOME/bin:$PATH<br>ESC(退出vi的编辑环境)<br>:wq(退出vi应用程序并保存修改)</p>
<p>安装好后再取消屏蔽这些环境变量设置<br>#export TNS_ADMIN=$ORACLE_HOME/network/admin<br>#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK<br>#export LANG=AMERICAN_AMERICA.ZHS16GBK<br>配置好后用 source .bash_profile 命令使配置生效 </p>
<p>四.设置系统参数；<br>Oracle 数据库 10g 需要以下所示的内核参数设置。<br>其中给出的是最小值，因此如果您的系统使用的值较大，则不要更改它。<br>切换到root用户:<br>su root <br>a) 修改/etc/sysctl.conf(vi /etc/sysctl.conf), 添加： </p>
<p>kernel.shmmax = 2147483648<br>kernel.shmmni = 4096 <br>kernel.shmall = 2097152 <br>kernel.sem = 250 32000 100 128 <br>fs.file-max = 65536 <br>net.ipv4.ip_local_port_range = 1024 65000 <br>net.core.rmem_default=262144<br>net.core.rmem_max=262144<br>net.core.wmem_default=262144<br>net.core.wmem_max=262144</p>
<p>修改后运行"/sbin/sysctl -p"命令使得内核改变立即生效； </p>
<p>B) 设置oracle对文件的要求： <br>编辑文件：vi /etc/security/limits.conf 加入以下语句： <br>oracle soft nproc 2047<br>oracle hard nproc 16384<br>oracle soft nofile 1024<br>oracle hard nofile 65536<br>编辑文件：vi /etc/pam.d/login 加入以下语句(可能应该加在最后一条规则之前）:<br>session required /lib/security/pam_limits.so</p>
<p>安装Oralce10G</p>
<p>解压缩Oracle10G的安装文件 ：<br>1． Oracle <br>(1) 简化过程（以oracle登录，释放安装文件,使用更少的磁盘空间，速度更快） <br>在/tmp下解压缩10201_database_linux32.zip:<br>unzip 10201_database_linux32<br>开始安装oracle <br>（一）开始安装： <br>1.以oracle用户登录系统，进行Oracle的安装：<br>cd /tmp/database (或者你解压缩安装程序包的目录）<br>./runInstaller<br>过一会儿就会出现Oracle的安装界面<br>注意：<br>1、选择advance install<br>2、数据库home设置为/opt/oracle/product/10g<br>3、数据库全局名称设置为ge01<br>4、数据库字符集选Simplified Chinese ZHS16GBK</p>
<p>2.其他用默认设置！<br>注意：安装过程中会提示以root用户登陆执行一些脚本 ，执行后再按&#8220;ok&#8221;按钮继续安装。</p>
<p>3、登陆并启动数据库的操作。 <br>[oracle@oracle oracle]$ lsnrctl start <br>[oracle@oracle oracle]$ sqlplus /nolog <br>SQL*Plus: Release 9.2.0.0 - Production on Sat Mar 12 22:58:53 2005 <br>Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. <br>SQL&gt; connect / as sysdba <br>Connected. <br>SQL&gt; shutdown immediate 关闭数据库 （OR "dbshut" command)<br>Database closed. <br>Database dismounted. <br>ORACLE instance shut down. <br>SQL&gt; startup; 启动数据库 <br>ORACLE instance started. <br>Total System Global Area 236000356 bytes <br>Fixed Size 451684 bytes <br>Variable Size 201326592 bytes <br>Database Buffers 33554432 bytes <br>Redo Buffers 667648 bytes <br>Database mounted. <br>Database opened. </p>
<p>4, dbstart脚本修改<br>数据库创建完成后，修改vi /etc/oratab，把orcl:/opt/oracle/oracle/product/10g:N那一行最后的N改成Y，<br>然后执行dbstart启动数据库数据库可能无法启动，报告Can&#8217;t find init file &#8230;的错误，需要复制一个初始化文件: <br>cp /opt/oracle/admin/ge01/pfile/init.ora.* /opt/oracle/product/10.2.0/dbs/initge01.ora <br>重新执行dbstart就可以了。<br>修改vi /opt/oracle/product/10g/bin/dbstart中ORACLE_HOME_LISTNER=/opt/oracle/oracle/product/10g/<br>vi /etc/rc.local 加入下面一行 起动ORACLE ON system boot<br>/opt/oracel/product/10g/bin/dbstart</p>
<p>5. 编写启动脚本（OPTION）<br>为了方便管理，可以写一个启动脚本ora10g： <br>以root身份进入，编写以下脚本： <br>#!/bin/bash <br># <br># chkconfig: 2345 91 19 <br># description: starts the oracle listener and instance <br>status() {<br>pid=`ps -ef | grep ora_pmon | grep -v grep | awk '{print $8}'`<br>if [ "X$pid" = "X" ]<br>then<br>echo "oracle10g is not running."<br>exit 1<br>else<br>echo "oracle10g is running."<br>exit 0<br>fi<br>}<br>case "$1" in <br>start) <br>#startup the listener and instance <br>echo -n "oracle begin to startup: " <br>su - oracle -c "lsnrctl start" <br>su - oracle -c dbstart <br>echo "oracle10g started" <br>;; <br>stop) <br># stop listener, apache and database <br>echo -n "oracle begin to shutdown:" <br>su - oracle -c "lsnrctl stop" <br>su - oracle -c dbshut <br>echo "oracle10g shutdowned" <br>;; <br>reload|restart) <br>$0 stop <br>$0 start <br>;; <br>'status')<br>status<br>;;<br>*) <br>echo "Usage: ora10g [start|stop|reload|restart]" <br>exit 1 <br>esac <br>exit 0 <br>存为ora10g后，然后<br>chmod a+x ora10g<br>ln -s /opt/oracle/product/10.2.0/bin/ora10g /etc/rc.d/init.d/<br>即可在以后以root身份运行/etc/rc.d/init.d/ora10g start |stop 来管oracle的启动和停止了。<br>如果要将这个脚本加入到系统中使其可开机运行，那么要运行以下命令：<br>chkconfig --level 345 ora10g on</p>
<p>或者可在/etc/rc.d/rc.local中加入如下： <br>su - oracle -c "lsnrctl start" <br>su - oracle -c "dbstart" </p>
<p>6, 关于数据库删除重新安装的问题: <br>把ORACLE安装目录删除及/etc/ora*.*删除就行了 <br>#rm &#8211;f /etc/ora*.*</p>
<p>7.修改Oracle10g数据库字符集<br>SQL&gt; connect sys/oracle as sysdba<br>SQL&gt; startup mount<br>SQL&gt; alter session set sql_trace=true;<br>Session altered.<br>SQL&gt; alter system enable restricted session;<br>System altered.<br>SQL&gt; alter system set job_queue_processes=0;<br>System altered.<br>SQL&gt; alter system set aq_tm_processes=0;<br>System altered.<br>SQL&gt; alter database open;<br>Database altered.<br>SQL&gt; set linesize 120;<br>SQL&gt; alter database character set zhs16gbk;<br>alter database character set zhs16gbk<br>*<br>ERROR at line 1:<br>ORA-12712: new character set must be a superset of old character set<br>SQL&gt; ALTER DATABASE character set INTERNAL_USE zhs16gbk; # 使用INTERNAL_USE可以跳过超集的检查,ALTER DATABASE character set INTERNAL_USE <br>Database altered.<br>SQL&gt; shutdown immediate;<br>Database closed.<br>Database dismounted.<br>ORACLE instance shut down.<br>SQL&gt; STARTUP<br>SQL&gt; select name,value$ from props$ where name like '%NLS%';<br>NLS_CHARACTERSET<br>ZHS16GBK</p>
<p>8. oracle database备份<br>(1)vi bachupDb.sh<br>#!/bin/sh<br>#oracle用户下<br>#crontab -e 增加 "35 4 * * * /home/oracle/dbbackup/backupDb.sh",保存后自动安装<br>#或echo "35 4 * * * /home/oracle/dbbackup/backupDb.sh" &gt; backupDb.cron<br>#crontab backupDb.cron<br>#############<br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#35;&#64;&#116;&#105;&#112;">#@tip</a> 修改为本机数据库home目录<br>export ORACLE_HOME=/opt/oracle/product/10g<br>export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin<br># 注意字符集必须和数据库的字符集一致，以避免字符集转化失败 <br>export NLS_LANG=AMERICAN_AMERICA.zhs16gbk<br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#35;&#64;&#116;&#105;&#112;">#@tip</a> 125修改为要备份的oracle的ip地址的最后一段<br>dmpfile="`echo ~/`dbbackup/gedb_`date +%w`.dmp"<br>logfile="`echo ~/`dbbackup/gedb_`date +%w`.log"</p>
<p>if [ -w $dmpfile ]<br>then<br>echo "rm -f $dmpfile"<br>rm -f "$dmpfile"<br>fi</p>
<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#35;&#64;&#116;&#105;&#112;">#@tip</a> ip地址修改为要备份的oracle的主机地址<br>exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#85;&#83;&#69;&#82;&#73;&#68;&#61;&#103;&#101;&#100;&#98;&#47;&#103;&#101;&#100;&#98;&#64;&#49;&#48;&#46;&#50;&#52;&#56;&#46;&#49;&#46;&#53;&#47;&#103;&#101;&#48;&#49;">USERID=gedb/gedb@10.248.1.5/ge01</a> file=$dmpfile log=$logfile owner=gedb grants=y<br>(2)copy bachupDb.sh 到slave oracle srever 相应目录,<br>chown oracle.oinstall bachupDb.sh<br>chmod 744 bachupDb.sh <br>vi bachupDb.sh 以符合安装情况<br>(3)以oracle user role<br>crontab -e<br>35 4 * * * /home/oracle/dbbackup/backupDb.sh </p>
<p>9. restore oracle backup<br>su - oracle<br>imp USERID=gedb/gedb file=gedb_6.dmp log=implogfile commit=y grants=y full=y&nbsp;&nbsp;&nbsp; <br>&nbsp;<br>&nbsp;<br>*****脚本修改的相关资料查询：<a href="http://unix-cd.com/unixcd12/article_5428.html">http://unix-cd.com/unixcd12/article_5428.html</a><br>&nbsp;<br>SQLPLUS命令的使用大全，解压密码为<a href="http://www.csai.cn/">www.csai.cn</a>。</p>
<p><br>Uedit32与SQLPlus结合使用技巧<br><a href="http://www.itwen.com/08db/04oracle/oracle20060219/34003.html">http://www.itwen.com/08db/04oracle/oracle20060219/34003.html</a></p>
<p>Uedit32与SQLPlus结合使用技巧 用过Uedit32的人都知道,这个工具虽然小,却功能俱全.只要我们在工作中巧妙的使用用它,可以使我们的工作效率事半功倍.那么,在下面的文章中,我将说说Uedit32与Oracle SQLPlus用法. <br>首先下载并安装Uedit32,确保SQlPlus能正常运行, 接下来的事情就是两者的系统配置了,具体按照以下的几个步骤进行: <br>步骤一：在Oracle安装目录下的Ora81找到dbs这个文件夹，如果没有这个文件 夹，创建名为dbs的文件夹，然后在这个文件夹下新建一个文本文件， 取名为：login.sql.<br>步骤二：在Uedit32的安装目录下新建一个文本文件，取名为：PlSQL.txt<br>步骤三：打开Uedit32，在Uedit32主菜单的Advanced下，选择 Configuration...进入到一个页面UltraEdit Configuration．在这个　 　　 页面中选择Syntax Highlighting,在Full path name for中，将你第二 步创建的Plsql.txt连接到此，即，单击Browse，直接在Uedit32目录下 找到Plsql.txt这个文件，确定后，一切就ok了。<br>步骤四：在Uedit32主菜单的View下的View AS(Highlightiing File Type)下会 显示一个SQL，这样就说明你的Configuration已经Succeed.如果在这个 菜单下没有SQL，就说明Configuration错误，重复上边的步骤，直到出 现SQL为止。<br>*****如果配置成功后,每次在SQLPlus下进行SQL语句编辑的时候,要对已经编辑或执行的SQL语句修改,就可以直接输入ED即可进入到Uedit32的编辑状态,这样,大大方便了使用速度. 另附：login.sql文件脚本： define _editor='uedit32.exe'<br>set editfile a.sql<br>set line 1000 说明：PlSQL.txt脚本主要用来控制 SQL语句在uedit32中字体显示颜色，变量名，函数名等将以不同的颜色进行显示，方便修改和辨认。由于篇幅有限，如果需要，可以mail给我。 海 洋 2002-05-31（完）计算机基础教程网</p>
<p>==================================================================================================================<br>2007.05.15</p>
<p>1、UltraEdit 11 的注册码</p>
<p>用户名1：UltraEdit<br>注册码1：A2X1Q-A0K6X-X700D-H407N</p>
<p>grant all on *.* to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#108;&#111;&#99;&#97;&#108;&#104;&#111;&#115;&#116;">root@localhost</a> identified by password</p>
<p>source 脚本</p>
<p>mysqldump --opt databases tables &gt; 脚本名&nbsp; -d<br>(-d&nbsp; 参数是叫导出数据库里所有表的结构，不包括数据)</p>
<p><br>3、按照NVMP手册安装 ，但是 在 最后执行SETUP.BAT时候不成，不知道原因？</p>
<p><br>=====================================================================================================================</p>
<p>2007.05.16</p>
<p>1、LOGIN界面可以出现，但是输入用户名以及密码后，没有系统的主界面。不知道原因。</p>
<p>2、数据库建立错误。。。。。BUILD FAILED</p>
<p>3、Oracle基础学习一:安装Oracle9i Database及Client 认识相关工具 <br><a href="http://www.cnblogs.com/freeliver54/archive/2007/04/13/705135.html">http://www.cnblogs.com/freeliver54/archive/2007/04/13/705135.html</a></p>
<p>1.安装Oracle9i或其他版本的Database 和 Client等<br>2.利用[数据库配置助手]创建数据库表空间<br>3.利用[企业管理器]管理数据库表空间<br>4.配置 [管理服务器]<br>5.SQL Plus 与 SQLPlus Worksheet<br>6.Oracle Administration Assistant for Windows NT 等 其他工具<br>===============================</p>
<p>1.安装Oracle9i或其他版本的Database 和 Client等<br>------------------------<br>(1).安装界面及欢迎<br>&nbsp;&nbsp;&nbsp; 此安装界面 可以查看 已安装产品 以及 卸载产品<br>&nbsp;&nbsp;&nbsp; 直接点击 下一步 则进行安装<br>(2).文件定位<br>&nbsp;&nbsp;&nbsp; 安装文件的来源路径 以及 产品的目标路径<br>&nbsp;&nbsp;&nbsp; 默认即可<br>(3).选择要安装的产品选项 <br>&nbsp;&nbsp;&nbsp; 该选项决定了下一步的安装类型<br>&nbsp;&nbsp;&nbsp; 此处选择默认的第一项 Oracle 9i Database...&nbsp;&nbsp;&nbsp; <br>(4).安装类型<br>&nbsp;&nbsp;&nbsp; 选择默认的 企业版本 下一步<br>(5).数据库配置<br>&nbsp;&nbsp;&nbsp; 可以选择默认的通用<br>&nbsp;&nbsp;&nbsp; 也可以选择最后的只安装软件<br>&nbsp;&nbsp;&nbsp; 当然也可以选择自定义 以及 数据仓库等其他<br>&nbsp;&nbsp;&nbsp; 此处同样选择默认<br>(6).数据库标识<br>&nbsp;&nbsp;&nbsp; 给数据库起个 全局数据库名 如aDB等<br>(7).接下来的<br>&nbsp;&nbsp;&nbsp; 数据库文件位置 及 字符集等 <br>&nbsp;&nbsp;&nbsp; 一路默认即可<br>(8).安装过程中 <br>&nbsp;&nbsp;&nbsp; 会提示需要你指示出下一张CD的位置<br>(9).如果顺利 就会安装成功<br>&nbsp;&nbsp;&nbsp; 如果期间 有个别组件 安装不成功<br>&nbsp;&nbsp;&nbsp; 如果不是太必需 可以选择取消<br>&nbsp;&nbsp;&nbsp; 当然是取消该组件的安装 而不是取消整个产品的安装<br>(10).安装完Database<br>&nbsp;&nbsp;&nbsp; 接下来 可以继续安装 Client<br>&nbsp;&nbsp;&nbsp; 也可以只在其他位置的客户端需要时 <br>&nbsp;&nbsp;&nbsp; 进行下面的安装客户端的相关步骤<br>&nbsp;&nbsp;&nbsp; 也就是承接上述的第3步<br>&nbsp;&nbsp;&nbsp; 选择Oracle 9i Client<br>(11).安装类型<br>&nbsp;&nbsp;&nbsp; 选择默认的 Administrator 下一步<br>(12).在安装过程中 同样会提示需要你指示出其他CD的位置<br>(13).安装完成后 会自动出现 网络配置助手 的欢迎画面<br>&nbsp;&nbsp;&nbsp;&nbsp; 以帮助你 进行 本地网络服务名配置<br>&nbsp;&nbsp;&nbsp;&nbsp; 该助手的打开位置在<br>&nbsp;&nbsp;&nbsp;&nbsp; [打开位置]<br>&nbsp;&nbsp;&nbsp;&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp;&nbsp;&nbsp;&nbsp; -&gt;Configuration and Migration Tools<br>&nbsp;&nbsp;&nbsp;&nbsp; -&gt;Net Configuration Assistant<br>(14).按默认即可<br>&nbsp;&nbsp;&nbsp; 在 服务名 处的填写<br>&nbsp;&nbsp;&nbsp; 就是输入全局数据库名 如上面的aDB<br>&nbsp;&nbsp;&nbsp; 当然如果上面Database安装时 <br>&nbsp;&nbsp;&nbsp; 只安装了软件 没有创建数据库<br>&nbsp;&nbsp;&nbsp; 则可以后续再做配置<br>(15).选择协议 默认TCP 下一步<br>&nbsp;&nbsp;&nbsp;&nbsp; 填写主机名 输入Oracle9i的刚才安装的主机IP<br>&nbsp;&nbsp;&nbsp;&nbsp; 端口处 默认1521 <br>&nbsp;&nbsp;&nbsp;&nbsp; 下一步 进行 是否进行测试画面<br>(16).也不用配置另一个网络服务名<br>&nbsp;&nbsp;&nbsp; 这样 顺利的话 就配置网络服务名完成 </p>
<p>经过上述的安装 接下来也就可以使用Oracle了&nbsp;&nbsp;&nbsp; </p>
<p>其默认有如下几个帐户<br>ID: system&nbsp; PWD:manager&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 权限:SYSDBA<br>ID: sys&nbsp;&nbsp;&nbsp;&nbsp; PWD:change_on_install&nbsp;&nbsp; 权限:SYSDBA</p>
<p><br>2.利用[数据库配置助手]创建数据库表空间<br>--------------------------------------<br>[打开位置]<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Configuration and Migration Tools<br>&nbsp; -&gt;Database Configuration Assistant</p>
<p>&nbsp; 通过该使用该助手<br>&nbsp; 可以创建 配置 和 删除 数据库 等 以及管理模板</p>
<p>(1).何种操作处 <br>&nbsp;&nbsp;&nbsp; 选择 默认的 创建数据库 下一步<br>(2).数据库模板 处<br>&nbsp;&nbsp;&nbsp; 选择New Database 或其他需要的模板<br>(3).数据库名 全局的数据库名称<br>(4).下面的根据助手的指引<br>&nbsp;&nbsp;&nbsp; 默认即可<br>&nbsp;&nbsp;&nbsp; 当然也可以根据自己的情况 进行修改<br>(5).创建数据库是一个时间稍长的过程<br>&nbsp;&nbsp; 最后如果成功 就会弹出相关数据库信息画面<br>&nbsp;&nbsp; 如全局数据库名称 系统标识符(SID)<br>&nbsp;&nbsp; 和两个默认的数据库帐户(sys和system) </p>
<p>3.利用[企业管理器]管理数据库表空间<br>----------------------------------<br>[打开位置]<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Enterprise Manager Console<br>&nbsp; 可以选择<br>&nbsp; -&gt;独立启动(S)<br>&nbsp; 或<br>&nbsp; -&gt;登录[管理服务器]<br>&nbsp;&nbsp;&nbsp; 登录到Oracle Management Server(L)<br>&nbsp; 如果还没有进行下面4.配置 [管理服务器]的部分<br>&nbsp; 可以选择独立启动 <br>&nbsp; <br>4.配置 [管理服务器]<br>-------------------<br>[打开位置]<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Configuration and Migration Tools<br>&nbsp; -&gt;Enterprise Manager Configuration Assistant<br>&nbsp; 根据向导进行相关配置</p>
<p>5.SQL Plus 与 SQLPlus Worksheet<br>--------------------------------<br>a.SQL Plus<br>[打开位置]<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Application Development<br>&nbsp; -&gt;SQL Plus</p>
<p>b.SQLPlus Worksheet<br>[打开位置]<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Integrated Management Tools<br>&nbsp; -&gt;SQLPlus Worksheet<br>&nbsp; 或<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Application Development<br>&nbsp; -&gt;SQLPlus Worksheet</p>
<p>6.Oracle Administration Assistant for Windows NT 等 其他工具<br>------------------------------------------<br>[打开位置]<br>&nbsp; 开始-&gt;所有程序-&gt;Oracle - OraHome90<br>&nbsp; -&gt;Configuration and Migration Tools<br>&nbsp; -&gt;Administration Assistant for Windows NT</p>
<p>Oracle Administration Assistant for Windows NT <br>是一种数据库管理工具，<br>它可以帮助您在 Windows NT 上轻松地<br>创建数据库管理员、操作员、用户和角色。<br>此外，它还可帮助您管理 Oracle 数据库服务、<br>Oracle 数据库启动和关闭配置、<br>编辑注册表参数设置以及查看 Oracle 进程信息。</p>
<p><br><a href="http://128.8.153.120:8080/jira">http://128.8.153.120:8080/jira</a></p>
<p><a href="http://www.atlassian.com/software/jira/">http://www.atlassian.com/software/jira/</a></p>
<p><br>监控的时候，如果有正常的I/O设备，那切换的时候不会慢也不会死</p>
<p>如果没有正常的I/O设备的话，在切换时候就会发生慢或死</p>
<p><a href="http://blog.csdn.net/zcatlinux/archive/2006/05/10/721157.aspx">http://blog.csdn.net/zcatlinux/archive/2006/05/10/721157.aspx</a> 让ORACLE自动启动的方法</p>
<p><a href="http://blog.csdn.net/">http://blog.csdn.net</a></p>
<p>FlashFXP 注册码</p>
<p>把下面的代码复制到密钥框中即可:(就是就击注册那框中)</p>
<p>FLASHFXPwQAOlhkgwQAAAAC6W5MNJwTnsl73nIraAU149tnCQS<br>0hmZU3GGBQG1FtoSp5x0mUgA7bFW0qr0fKk2KCA+v2CCrFbF+q<br>bmLvEjV+4JCAX+H/TBpG7pdEJ8IEW09ST8t60Poou/CTNhxGoz<br>1Ww0kiyHynU4fOmVK9gQZ5eeMxKzssnhKdor2ibc3OTo+WvErl<br>omRpMfd15+/2EA/SbxzdwKmX6ybVAYnLe4g3cheOEdD3YnxF5i<br>4NeTRw</p>
<p><br>下载地址：<a href="http://www.tvmi.cn/Soft/163.html">http://www.tvmi.cn/Soft/163.html</a></p>
<p>====================================================================================================================<br>2007.05.17</p>
<p>linux下安装oracle 10g SLES9安装Oracle 10g <br>十一月 29th 2006 Posted to 未分类 <br>系统环境：<br>SuSE Linux Enterprise Server 9 （升级到sp3)<br>kernel-2.6.5-7.244-default</p>
<p>Oracle最低硬件需求<br>物理内存：最低512MB （运行 grep MemTotal /proc/meminfo检查）<br>交换分区：最低1GB （运行 grep SwapTotal /proc/meminfo检查）<br>硬盘空间：软件需空间2.5G，数据库需空间1.2G.（运行df -h检查硬盘剩余空间）</p>
<p>检查所依赖的软件包<br>所需要的软件包的版本(或更高版本）<br>kernel-2.6.5-7.5<br>gcc-3.3.3-43<br>gcc-c++-3.3.3-43<br>glibc-2.3.3-98<br>libaio-0.3.98-18<br>libaio-devel-0.3.98-18<br>make-3.80<br>openmotif-libs-2.2.2-519.1<br>查看内核版本执行命令 uname -r<br>要查看系统是否安装上述软件包。以root身份运行<br>rpm -q gcc gcc-c++ glibc libaio libaio-devel make openmotif-libs命令。<br>注：如果SLES9系统中了认证服务(NIS,LDAP,kerbose)。则要把它们删除。</p>
<p>安装orarun<br>orarun是为一个专门简化oracle安装的软件包。Orarun自动添加了安装oracle所需要的用户和组，设置了环境变量和内核参数。可以通过Yast安装orarun。<br>安装好orarun后，还需要修改shell。<br>编辑/etc/passwd，把orarun对应行的/bin/false更改为/bin/bash<br>修改/etc/profile.d/oracle.sh文件：<br>把第29行ORACLE_HOME=$ORACLE_BASE/product/9ir2<br>修改为ORACLE_HOME=$ORACLE_BASE/product/10gR2</p>
<p>设置内核参数<br>完成上述操作后，以root身份执行命令/usr/sbin/rcoracle start来设置内核参数</p>
<p>安装oracle<br>从oracle网站上下载10201_database_linux32.zip。解压。<br>以oracle身份登录系统，进入到解压后的目录。运行./runInstaller安装。按照默认值安装既可</p>
<p>修改dbstart脚本<br>安装好oracle后。要修改dbstart脚本。<br>把第78行ORACLE_HOME_LISTEN=/ade/vikrkuma-new/oracle<br>更改为ORACLE_HOME_LISTEN=$ORACLE_BASE/product/10gR2</p>
<p>Comments(0) <br>在RHEL AS 3上安装Oracle 10g <br>十一月 29th 2006 Posted to 未分类 <br>系统环境<br>Red Hat Enterprise Linux AS release 3 (Taroon Update 4)<br>Kernel 2.4.21-27.EL</p>
<p>Oracle最低硬件需求<br>物理内存：最低512MB （运行 grep MemTotal /proc/meminfo检查）<br>交换分区：最低1GB （运行 grep SwapTotal /proc/meminfo检查）<br>硬盘空间：软件需空间2.5G，数据库需空间1.2G.（运行df -h检查硬盘剩余空间）</p>
<p>检查所依赖的软件包<br>所需要的软件包的版本(或更高版本）<br>gcc-3.2.3-2<br>make-3.79 <br>binutils-2.11<br>openmotif-2.2.2-16<br>setarch-1.3-1<br>compat-gcc-7.3-2.96.122<br>compat-gcc-c++-7.3.-2.96.122<br>compat-libstdc++-7.3-2.96.122<br>compat-libstdc++-devel-7.3-2.96.122<br>compat-db-4.0.14.5<br>要查看系统是否安装上述软件包。以root身份运行<br>rpm -q gcc make binutils openmotif setarch compat-gcc 类似命令检查。</p>
<p>创建Oracle用户和组<br>以root身份执行下列命令：<br>/usr/sbin/groupadd oinstall<br>/usr/sbin/groupadd dba<br>/usr/sbin/useradd -m -g oinstall -G dba oracle <br>id oracle<br>然后设置oracle账户的密码：<br>/usr/bin/passwd oracle</p>
<p>创建目录<br>创建针对Oracle 10g软件和数据库的目录。以root身份执行下列命令<br>mkdir -p /u01/app/oracle<br>mkdir -p /u02/oradata<br>chown -R oracle:oinstall /u01/app/oracle /u02/oradata<br>chown -R 775 /u01/app/oracle /u02/oradata<br>修改内核参数<br>以root身份编辑/etc/sysctl.conf文件。添加以下内容：<br>kernel.shmall = 2097152<br>kernel.shmmax = 2147483648<br>kernel.shmmni = 4096<br>kernel.sem = 250 3200 100 128<br>fs.file-max = 65536<br>net.ipv4.ip_local_range = 1024 65000<br>保存，退出。<br>然后运行/sbin/sysctl -p激活更改。<br>为oracle用户设置shell限制 <br>以root身份编辑/etc/security/limits.conf文件。添加以下内容：<br>oracle soft nproc 2047<br>oracle hard nproc 16384<br>oracle soft nofile 1024<br>oracle hard nofile 65536<br>然后再编辑/etc/pam.d/login文件。添加以下内容：<br>session required /lib/security/pam_limits.so</p>
<p>oracle用户的环境变量设置<br>以oracle用户身份登录系统。<br>编辑.bash_profile文件。添加以下内容：（具体值请根据自己的情况设置）<br>export ORACLE_BASE=/u01/app/oracle<br>export ORACLE_HOME=$ORACLE_BASE/product/10g<br>export ORACLE_SID=DEMO<br>export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib<br>export LC_CTYPE=en_US.UTF-8<br>并且把PATH=$PATH:$HOME/bin一行修改为PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin<br>保存，退出。<br>然后运行命令source .bash_profile 使环境变量生效。</p>
<p>安装oracle<br>从oracle网站上下载10201_database_linux32.zip。解压。<br>进入到解压后的目录。运行./runInstaller安装。按照默认值安装既可。</p>
<p>Comments(0)&nbsp; <br>.</p>
<p><a href="http://www.linuxeden.com/doc/26838.html">http://www.linuxeden.com/doc/26838.html</a>&nbsp; 用linux完成oracle自动物理备份</p>
<p><a href="http://www.linuxeden.com/">http://www.linuxeden.com/</a>&nbsp; LINUX基本论坛</p>
<p><a href="http://book.csdn.net/bookfiles/292/10029212533.shtml">http://book.csdn.net/bookfiles/292/10029212533.shtml</a> ORACLE10G书籍站点</p>
<p><br><a href="http://www.soft6.com/know/detail.asp?id=BAAEJB">http://www.soft6.com/know/detail.asp?id=BAAEJB</a></p>
<p>SQL&gt; show user --显示当前连接用户 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; show error　　　　　　　　　　　　　　　 --显示错误 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set heading off --禁止输出列标题，默认值为ON </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set feedback off --禁止显示最后一行的计数反馈信息，默认值为"对6个或更多的记录，回送ON" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set timing on --默认为OFF，设置查询耗时，可用来估计SQL语句的执行时间，测试性能 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set sqlprompt "SQL&gt; " --设置默认提示符，默认值就是"SQL&gt; " </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set linesize 1000 --设置屏幕显示行宽，默认100 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set autocommit ON --设置是否自动提交，默认为OFF </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set pause on --默认为OFF，设置暂停，会使屏幕显示停止，等待按下ENTER键，再显示下一页 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set arraysize 1 --默认为15 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; set long 1000 --默认为80 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long值默认为80，设置1000是为了显示更多的内容，因为很多数据字典视图中用到了long数据类型，如： </p>
<p>SQL&gt; desc user_views<br>列名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可空值否&nbsp;&nbsp; 类型<br>------------------------------- -------- ----<br>VIEW_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT NULL VARCHAR2(30)<br>TEXT_LENGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER<br>TEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG </p>
<p>SQL&gt; define a = '''20000101 12:01:01'''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --定义局部变量，如果想用一个类似在各种显示中所包括的回车那样的常量，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --可以用define命令来设置<br>SQL&gt; select &amp;a from dual;<br>原值&nbsp;&nbsp;&nbsp; 1: select &amp;a from dual<br>新值&nbsp;&nbsp;&nbsp; 1: select '20000101 12:01:01' from dual </p>
<p>'2000010112:01:01<br>-----------------<br>20000101 12:01:01</p>
<p><br>问题提出： <br>1、用户需要对数据库用户下的每一张表都执行一个相同的SQL操作，这时，一遍、一遍的键入SQL语句是很麻烦的 </p>
<p>实现方法： <br>SQL&gt; set heading off --禁止输出列标题<br>SQL&gt; set feedback off --禁止显示最后一行的计数反馈信息 </p>
<p>列出当前用户下所有同义词的定义，可用来测试同义词的真实存在性<br>select 'desc '||tname from tab where tabtype='SYNONYM'; </p>
<p>查询当前用户下所有表的记录数<br>select 'select '''||tname||''',count(*) from '||tname||';' from tab where tabtype='TABLE'; </p>
<p>把所有符合条件的表的select权限授予为public<br>select 'grant select on '||table_name||' to public;' from user_tables where 《条件》; </p>
<p>删除用户下各种对象<br>select 'drop '||tabtype||' '||tname from tab; </p>
<p>删除符合条件用户<br>select 'drop user '||username||' cascade;' from all_users where user_id&gt;25; </p>
<p>快速编译所有视图 <br>----当在把数据库倒入到新的服务器上后(数据库重建)，需要将视图重新编译一遍，<br>----因为该表空间视图到其它表空间的表的连接会出现问题，可以利用PL/SQL的语言特性，快速编译。 </p>
<p>SQL&gt; SPOOL ON.SQL<br>SQL&gt; SELECT'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB;<br>SQL&gt; SPOOL OFF<br>然后执行ON.SQL即可。<br>SQL&gt; @ON.SQL<br>当然，授权和创建同义词也可以快速进行，如：<br>SQL&gt; SELECT 'GRANT SELECT ON '||TNAME||' TO 用户名;' FROM TAB;<br>SQL&gt; SELECT 'CREATE SYNONYM '||TNAME||' FOR 用户名.'||TNAME||';' FROM TAB; </p>
<p>SQL*PLUS常用命令列表 </p>
<p>[ 天堂之水&nbsp; 2002年9月18日，阅读人数36人 ]</p>
<p>软件环境： <br>1、Windows 98 第二版<br>2、Oracle数据库版本为：Personal Oracle7 Release 7.3.4.0.0<br>3、Oracle安装路径为：C:\ORAWIN95 </p>
<p>命令列表： <br>假设当前执行命令为：select * from tab; </p>
<p>(a)ppend　　　　 添加文本到缓冲区当前行尾　　　　a&nbsp; order by tname　结果：select * from tab order by tname;<br>　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　（注：a后面跟2个空格）<br>(c)hange/old/new 在当前行用新的文本替换旧的文本　c/*/tname　　　　　结果：select tname from tab;<br>(c)hange/text　　从当前行删除文本　　　　　　　　c/tab　　　　　　　结果：select tname from ;<br>del　　　　　　　删除当前行<br>del n　　　　　　删除第n行<br>(i)nput 文本　　 在当前行之后添加一行<br>(l)ist　　　　　 显示缓冲区中所有行<br>(l)ist n　　　　 显示缓冲区中第 n 行<br>(l)ist m n　　　 显示缓冲区中 m 到 n 行<br>run　　　　　　　执行当前缓冲区的命令<br>/　　　　　　　　执行当前缓冲区的命令<br>r　　　　　　　　执行当前缓冲区的命令<br>@文件名　　　　　运行调入内存的sql文件，如： </p>
<p>SQL&gt; edit s&lt;回车&gt;<br>如果当前目录下不存在s.sql文件，则系统自动生成s.sql文件，<br>在其中输入&#8220;select * from tab;&#8221;，存盘退出。 </p>
<p>SQL&gt; @s&lt;回车&gt;<br>系统会自动查询当前用户下的所有表、视图、同义词。 </p>
<p>@@文件名　　　　 在.sql文件中调用令一个.sql文件时使用 </p>
<p>save 文件名　　　将缓冲区的命令以文件方式存盘，缺省文件扩展名为.sql<br>get 文件名　　　 调入存盘的sql文件<br>start 文件名　　 运行调入内存的sql文件 </p>
<p>spool 文件名　　 把这之后的各种操作及执行结果&#8220;假脱机&#8221;即存盘到磁盘文件上，默认文件扩展名为.lst<br>spool　　　　　　显示当前的&#8220;假脱机&#8221;状态<br>spool off　　　　停止输出 </p>
<p>例：<br>SQL&gt; spool a<br>SQL&gt; spool<br>正假脱机到 A.LST<br>SQL&gt; spool off<br>SQL&gt; spool<br>当前无假脱机 </p>
<p>exit　　　　　　 退出SQL*PLUS<br>desc 表名　　　　显示表的结构<br>show user　　　　显示当前连接用户<br>show error　　　 显示错误<br>show all　　　　 显示所有68个系统变量值<br>edit　　　　　　 打开默认编辑器，Windows系统中默认是notepad.exe，把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑<br>edit 文件名　　　把当前目录中指定的.sql文件调入编辑器进行编辑 </p>
<p>clear screen　　 清空当前屏幕显示</p>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/27202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-05-18 15:51 <a href="http://www.cnitblog.com/szdlinxie/archive/2007/05/18/27202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计三大范式应用实例剖析</title><link>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20858.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 08:01:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20858.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20858.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20858.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20858.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>数据库设计三大范式应用实例剖析<br /><div class="daxiao14" align="left"><strong>引言<br /><br /></strong>　　数据库的设计范式是数据库设计所需要满足的规范，满足这些规范的数据库是简洁的、结构明晰的，同时，不会发生插入（insert）、删除（delete）和更新（update）操作异常。反之则是乱七八糟，不仅给数据库的编程人员制造麻烦，而且面目可憎，可能存储了大量不需要的冗余信息。<br /><br />　　设计范式是不是很难懂呢？非也，大学教材上给我们一堆数学公式我们当然看不懂，也记不住。所以我们很多人就根本不按照范式来设计数据库。<br /><br />　　实质上，设计范式用很形象、很简洁的话语就能说清楚，道明白。本文将对范式进行通俗地说明，并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程。<br /><br />　　<b>范式说明</b><br /><br />　　第一范式（1NF）：数据库表中的字段都是单一属性的，不可再分。这个单一属性由基本类型构成，包括整型、实数、字符型、逻辑型、日期型等。<br /><br />　　例如，如下的数据库表是符合第一范式的：<br /><br /><table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1"><tbody><tr><td>字段1</td><td>字段2</td><td>字段3</td><td>字段4</td></tr><tr><td> </td><td>　</td><td>　</td><td>　</td></tr></tbody></table><br />　　而这样的数据库表是不符合第一范式的：<br /><br /><table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1"><tbody><tr><td>字段1</td><td>字段2</td><td colspan="2"><div align="center">字段3 </div></td><td>字段4</td></tr><tr><td> </td><td>　</td><td>字段3.1</td><td>字段3.2</td><td> </td></tr></tbody></table><br />　　很显然，在当前的任何关系数据库管理系统（DBMS）中，傻瓜也不可能做出不符合第一范式的数据库，因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此，你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。<br /><br />　　第二范式（2NF）：数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖（部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况），也即所有非关键字段都完全依赖于任意一组候选关键字。<br /><br />　　假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分)，关键字为组合关键字(学号, 课程名称)，因为存在如下决定关系：<br /><br />　　(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)<br /><br />　　这个数据库表不满足第二范式，因为存在如下决定关系：<br /><br />　　(课程名称) → (学分)<br /><br />　　(学号) → (姓名, 年龄)<br /><br />　　即存在组合关键字中的字段决定非关键字的情况。<br /><br />　　由于不符合2NF，这个选课关系表会存在如下问题：<br /><br />　　(1) 数据冗余：<br /><br />　　同一门课程由n个学生选修，"学分"就重复n-1次；同一个学生选修了m门课程，姓名和年龄就重复了m-1次。<br /><br />　　(2) 更新异常：<br /><br />　　若调整了某门课程的学分，数据表中所有行的"学分"值都要更新，否则会出现同一门课程学分不同的情况。<br /><br />　　(3) 插入异常：<br /><br />　　假设要开设一门新的课程，暂时还没有人选修。这样，由于还没有"学号"关键字，课程名称和学分也无法记录入数据库。<br /><br />　　(4) 删除异常：<br /><br />　　假设一批学生已经完成课程的选修，这些选修记录就应该从数据库表中删除。但是，与此同时，课程名称和学分信息也被删除了。很显然，这也会导致插入异常。<br /><br />　　把选课关系表SelectCourse改为如下三个表：<br /><br />　　学生：Student(学号, 姓名, 年龄)；<br /><br />　　课程：Course(课程名称, 学分)；<br /><br />　　选课关系：SelectCourse(学号, 课程名称, 成绩)。<br /><br />　　这样的数据库表是符合第二范式的，消除了数据冗余、更新异常、插入异常和删除异常。<br /><br />　　另外，所有单关键字的数据库表都符合第二范式，因为不可能存在组合关键字。<br /><br />　　第三范式（3NF）：在第二范式的基础上，数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖，指的是如果存在"A → B → C"的决定关系，则C传递函数依赖于A。因此，满足第三范式的数据库表应该不存在如下依赖关系：<br /><br />　　关键字段 → 非关键字段x → 非关键字段y<br /><br />　　假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话)，关键字为单一关键字"学号"，因为存在如下决定关系：<br /><br />　　(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)<br /><br />　　这个数据库是符合2NF的，但是不符合3NF，因为存在如下决定关系：<br /><br />　　(学号) → (所在学院) → (学院地点, 学院电话)<br /><br />　　即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。<br /><br />　　它也会存在数据冗余、更新异常、插入异常和删除异常的情况，读者可自行分析得知。<br /><br />　　把学生关系表分为如下两个表：<br /><br />　　学生：(学号, 姓名, 年龄, 所在学院)；<br /><br />　　学院：(学院, 地点, 电话)。<br /><br />　　这样的数据库表是符合第三范式的，消除了数据冗余、更新异常、插入异常和删除异常。<br /><br />　　鲍依斯-科得范式（BCNF）：在第三范式的基础上，数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。<br /><br />　　假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量)，且有一个管理员只在一个仓库工作；一个仓库可以存储多种物品。这个数据库表中存在如下决定关系：<br /><br />　　(仓库ID, 存储物品ID) →(管理员ID, 数量)<br /><br />　　(管理员ID, 存储物品ID) → (仓库ID, 数量)<br /><br />　　所以，(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字，表中的唯一非关键字段为数量，它是符合第三范式的。但是，由于存在如下决定关系：<br /><br />　　(仓库ID) → (管理员ID)<br /><br />　　(管理员ID) → (仓库ID)<br /><br />　　即存在关键字段决定关键字段的情况，所以其不符合BCNF范式。它会出现如下异常情况：<br /><br />　　(1) 删除异常：<br /><br />　　当仓库被清空后，所有"存储物品ID"和"数量"信息被删除的同时，"仓库ID"和"管理员ID"信息也被删除了。<br /><br />　　(2) 插入异常：<br /><br />　　当仓库没有存储任何物品时，无法给仓库分配管理员。<br /><br />　　(3) 更新异常：<br /><br />　　如果仓库换了管理员，则表中所有行的管理员ID都要修改。<br /><br />　　把仓库管理关系表分解为二个关系表：<br /><br />　　仓库管理：StorehouseManage(仓库ID, 管理员ID)；<br /><br />　　仓库：Storehouse(仓库ID, 存储物品ID, 数量)。<br /><br />　　这样的数据库表是符合BCNF范式的，消除了删除异常、插入异常和更新异常。<br /><br /><strong>范式应用<br /><br /></strong>　　我们来逐步搞定一个论坛的数据库，有如下信息：<br /><br />　　（1） 用户：用户名，email，主页，电话，联系地址<br /><br />　　（2） 帖子：发帖标题，发帖内容，回复标题，回复内容<br /><br />　　第一次我们将数据库设计为仅仅存在表：<br />　　 
<table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1"><tbody><tr><td>用户名</td><td>email</td><td>主页</td><td>电话</td><td>联系地址</td><td>发帖标题</td><td>发帖内容</td><td>回复标题</td><td>回复内容</td></tr></tbody></table><br />　　这个数据库表符合第一范式，但是没有任何一组候选关键字能决定数据库表的整行，唯一的关键字段用户名也不能完全决定整个元组。我们需要增加"发帖ID"、"回复ID"字段，即将表修改为：<br /><br /><table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1"><tbody><tr><td>用户名</td><td>email</td><td>主页</td><td>电话</td><td>联系地址</td><td>发帖ID</td><td>发帖标题</td><td>发帖内容</td><td>回复ID</td><td>回复标题</td><td>回复内容</td></tr></tbody></table><br />　　这样数据表中的关键字(用户名，发帖ID，回复ID)能决定整行：<br /><br />　　(用户名,发帖ID,回复ID) → (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)<br /><br />　　但是，这样的设计不符合第二范式，因为存在如下决定关系：<br /><br />　　(用户名) → (email,主页,电话,联系地址)<br /><br />　　(发帖ID) → (发帖标题,发帖内容)<br /><br />　　(回复ID) → (回复标题,回复内容)<br /><br />　　即非关键字段部分函数依赖于候选关键字段，很明显，这个设计会导致大量的数据冗余和操作异常。<br /><br />　　我们将数据库表分解为（带下划线的为关键字）：<br /><br />　　（1） 用户信息：用户名，email，主页，电话，联系地址<br /><br />　　（2） 帖子信息：发帖ID，标题，内容<br /><br />　　（3） 回复信息：回复ID，标题，内容<br /><br />　　（4） 发贴：用户名，发帖ID<br /><br />　　（5） 回复：发帖ID，回复ID<br /><br />　　这样的设计是满足第1、2、3范式和BCNF范式要求的，但是这样的设计是不是最好的呢？<br /><br />　　不一定。<br /><br />　　观察可知，第4项"发帖"中的"用户名"和"发帖ID"之间是1：N的关系，因此我们可以把"发帖"合并到第2项的"帖子信息"中；第5项"回复"中的"发帖ID"和"回复ID"之间也是1：N的关系，因此我们可以把"回复"合并到第3项的"回复信息"中。这样可以一定量地减少数据冗余，新的设计为： <br />　　（1） 用户信息：用户名，email，主页，电话，联系地址<br /><br />　　（2） 帖子信息：用户名，发帖ID，标题，内容<br /><br />　　（3） 回复信息：发帖ID，回复ID，标题，内容<br /><br />　　数据库表1显然满足所有范式的要求；<br /><br />　　数据库表2中存在非关键字段"标题"、"内容"对关键字段"发帖ID"的部分函数依赖，即不满足第二范式的要求，但是这一设计并不会导致数据冗余和操作异常；<br /><br />　　数据库表3中也存在非关键字段"标题"、"内容"对关键字段"回复ID"的部分函数依赖，也不满足第二范式的要求，但是与数据库表2相似，这一设计也不会导致数据冗余和操作异常。<br /><br />　　由此可以看出，并不一定要强行满足范式的要求，对于1：N关系，当1的一边合并到N的那边后，N的那边就不再满足第二范式了，但是这种设计反而比较好！<br /><br />　　对于M：N的关系，不能将M一边或N一边合并到另一边去，这样会导致不符合范式要求，同时导致操作异常和数据冗余。 <br />对于1：1的关系，我们可以将左边的1或者右边的1合并到另一边去，设计导致不符合范式要求，但是并不会导致操作异常和数据冗余。<br /><br />　　结论<br /><br />　　满足范式要求的数据库设计是结构清晰的，同时可避免数据冗余和操作异常。这并意味着不符合范式要求的设计一定是错误的，在数据库表中存在1：1或1：N关系这种较特殊的情况下，合并导致的不符合范式要求反而是合理的。<br /><br />　　在我们设计数据库的时候，一定要时刻考虑范式的要求。 </div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 16:01 <a href="http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL与Oracle、DB2的性能比较</title><link>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20857.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 07:43:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20857.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20857.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20857.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20857.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<strong>SQL与Oracle、DB2的性能比较<br /></strong>
						<font size="2">
								<strong>开放性 </strong>　　SQL Server<br />　　只能在Windows 上运行，没有丝毫的开放性，操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用，NT server只适合中小型企业。而且Windows平台的可靠性，安全性和伸缩性是非常有限的。它不象Unix那样久经考验，尤其是在处理大数据量的关键业务时。<br />　　Oracle<br />　　能在所有主流平台上运行（包括 Windows）。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。<br />　　DB2<br />　　能在所有主流平台上运行（包括Windows）。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%。 </font>
						<p>
								<strong>
										<font size="2">　　可伸缩性,并行性 　　SQL Server<br />　　并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。Oracle<br />平行服务器通过使一组结点共享同一簇中的工作来扩展Window NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果WindowsNT不能满足需要, 用户可以把数据库移到UNIX中。<br />　　DB2 <br />　　DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分，包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。 </font>
								</strong>
						</p>
						<p>
								<font size="2">
										<strong>　　安全性 <br />　　SQL server <br />　　没有获得任何安全证书。 <br />　　Oracle Server<br />　　获得最高认证级别的ISO标准认证。<br />　　DB2<br />　　获得最高认证级别的ISO标准认证。 </strong>
								</font>
						</p>
						<p>
								<font size="2">
										<strong>　　性能 <br />　　SQL Server <br />　　多用户时性能不佳 <br />　　Oracle<br />　　性能最高， 保持WindowsNT下的TPC-D和TPC-C的世界记录。<br />　　DB2<br />　　适用于数据仓库和在线事物处理，性能较高。 </strong>
								</font>
						</p>
						<p>
								<font size="2">
										<strong>　　客户端支持及应用模式<br />　　SQL Server <br />　　C/S结构，只支持Windows客户，可以用ADO,DAO,OLEDB,ODBC连接。<br />　　Oracle<br />　　多层次网络计算，支持多种工业标准，可以用ODBC,JDBC,OCI等网络客户连接。<br />　　DB2<br />　　跨平台，多层结构，支持ODBC,JDBC等客户。</strong>
								</font>
						</p>
						<p>
								<font size="2">
										<strong>　　操作简便 <br />　　SQL Server <br />　　操作简单,但只有图形界面。<br />　　Oracle<br />　　较复杂, 同时提供GUI和命令行，在Windows NT和Unix下操作相同。<br />　　DB2<br />　　操作简单,同时提供GUI和命令行，在Windows NT和Unix下操作相同。 </strong>
								</font>
						</p>
						<p>
								<font size="2">
										<strong>　　使用风险 </strong>
								</font>
						</p>
						<p>
								<font size="2">
										<strong>　　SQL Server <br />　　完全重写的代码，经历了长期的测试，不断延迟，许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。 <br />　　Oracle<br />　　长时间的开发经验，完全向下兼容。得到广泛的应用。完全没有风险。<br />　　DB2<br />　　在巨型企业得到广泛的应用，向下兼容性好。风险小。 </strong>
								</font>
						</p>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 15:43 <a href="http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DB2/Sybase/Oracle的比较</title><link>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20855.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 07:23:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20855.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20855.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20855.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20855.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>DB2/Sybase/Oracle的比较<br /><div class="daxiao14" align="left">DB2与Oracle比较 <br />特性 DB2 Oracle <br />开放性/可移植性 IBMDB2UDB在各层面，从网络协议的支持到应用开发程序的编程接口，数据库存储程序及触发器，服务器之间的分布式运作，都是基于最新的国际标准，以确保其开放性及移植性。 ORACLE的许多功能都是使用其私有的，非开放性的技术。例如：ORACLEPL/SQL语言是ORACLE私有的。其存储程序语句也不符合ANSISQL及ISOSQL的标准，客户机/服务器的编程接口，ORACLE的SQL*NET也不是根据标准定义的。 <br />处理性能 IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。IBM有信心能在各种标准的测试环境下超越ORACLE。DB2在高端应用具有过硬的技术，有众多超过1Tera-bytes数据量的用户实例。 由于ORACLE限制用户在未经许可的情况下不能公布他们所作的性能测试，故一般用户不易取得ORACLE的比较资料。Oracle超过1Tera-bytes数据量的客户实例很少。 <br />并行能力 DB2的并行版支持位图索引和对象关系，因此，DB2有更好的扩展性和性能； Oracle触发器无法支持并行：在一些特殊的引用完整性(referentialintegrity)的限制下，并行也无法运用：如果表格中有大对象，由于前述的限制(表不能分割)，并行也无法运用。总之，Oracle在并行系统中没有实现位图索引和对象关系， <br />分布式数据库 DB2分布式数据库的处理(如两阶段提交)及连接功能是建立在DB2的核心中，不需要使用其它的产品附件。性能好，易使用，减少开支。 ORACLE的分布式功能需要另外购买DistributedOption以及SQL*NET等产品才能实现分布式数据库的连接。 <br />异构平台支持 在异构的环境中，IBM数据库方案简单、更加无缝而且比Oracle的成本低； Oracle的异构网关性能差，当访问异构数据库时，Oracle缺乏全局的优化，导致了过多的数据及网络传输。 <br />复制能力 DB2提供业界最佳效率的和最开放的复制方案；DB2提供自动冲突检测和解决方法。 Oracle只提供自动冲突检测和解决方法的例子程序，用户须对例子程序做定制后来解决复制冲突 <br />对电子商务支持 IBM的Java技术为业界所公认，DB2公认为电子商务基石。DB2提供的JDBC接口，还可用Java语言写储存过程和用户自定义函数 Oracle的Java技术仅局限于数据库和ERP应用。 <br />对商业智能支持 DB2OLAPServer远比Express更易使用和实现。DB2OLAPServer提供读/写能力-这对一些关键性的多维分析扩展应用如：预测和预算，是非常有用的(Express只支持读)。IBM的商业智能解决方案中，拥有数据挖掘(IntelligentMiner)工具。 OracleExpress只支持读的能力，不利于支持预测和预算。Oracle缺乏数据挖掘方面的工具。 <br />软件质量与可靠性 DB2的软件开发实验室早在1994年便已通过ISO9000国际质量管理标准的验证与认可。故DB2的软件质量是所有数据库厂家中可靠性最高，故障率最低的数据库。 ORACLE版本6及版本7在推出后皆需经过无数次修订版升级才能达到一定程度的可用度，这给用户带来极大的不便，并且严重影响到投产系统的可用性及可靠性。 <br /><br /><br />DB2与Sybase比较 <br /><br />特性 DB2 Sybase <br />开放性/可移植性 IBMDB2的编程接口遵照ANSI、X/OPEN标准的CLI(CallLevelInterface)及ANSISQL的嵌入式SQL等开放标准。IBMDB2的存储程序和触发器机制则使用最新的SQL国际标准并支持标准的开放语言如C/C++。在DB2CommonServerV2.1.2(1996)以及DB2UDB(1997)中更加入了用Java语言开发存储程序和触发器的功能。 1.编程接口：SYBASE使用的编程接口不是开放的，因为他使用的是自己的OpenClient/OpenServer接口，而不是基于某一标准的接口。2.存储程序(StoredProcedure)：由于SYBASE的CLIENT/SERVER技术是80年代开发的，没有使用SQL92等相关的标准，因此编制存储程序和触发器所用的Transact-SQL也是它们自己专用的。 <br />处理性能 IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。DB2在高端应用具有过硬的技术，有众多超过1Tera-bytes数据量的用户实例。 SYBASE的优化器(OPTIMIZER)不能有效的支持复杂的查询(ComplexQueries)。应用程序中稍微复杂一些的SQL语句，SYBASE的优化器就无法妥善优化处理。SYBASE刚刚进入海量多处理器MPP的领域，缺乏这方面的经验及先例，Sybase大于一个TB数据量的客户实例很少。 <br />并行能力 DB2的并行版支持位图索引和对象关系，因此，DB2有更好的扩展性和性能； SYBASE数据库核心结构较陈旧，尤其在多处理器(SMP)的服务器上无法做到软硬件相配合的延伸与扩展(scale)，无法发挥多处理器的优势。其单进程多线索的结构就无法象DB2的多进程多线索的结构更能有效地在SMP等机器上运行。 <br />高可用性 DB2可以用数据库及表空间两种粒度(granularity)对数据作备份与恢复(BACKUP及RESTORE)，并且备份可以在联机方式(ONLINE)下进行，不影响多用户的同时使用。这使得DB2能真正地满足一天24小时、一星期七天的全天候使用。 SYBASE在BACKUP数据库及RESTORE数据库时，需要将系统转为单一用户模式以保证数据库中数据的完整性及一致性，并且在BACKUP之后，要运行DBCC检查数据的一致性，这使得SYBASE数据库在可用性方面受到限制。 <br />数据完整与可管理性 IBMDB2中数据库可自动的维持两表间的一致性，无需再由DBA编程。 SYBASE在其数据库技术中引入RI(ReferentialIntegrity数据引用完整性)较晚，而且功能有限。例如，当表A中的列A是另一个表B中列B的ForeignKey时，若要删掉表A中的一个记录，在SYBASE中是不允许的，只有通过触发器(Trigger)及存储过程(StoredProcedure)，才能删掉表A中的一个记录，同时删掉表B中的相关记录，或把其值设置为NULL。 <br />异构平台支持 在异构的环境中，IBM数据库方案简单、更加无缝而且成本低； Oracle的异构网关性能差，当访问异构数据库时，Oracle缺乏全局的优化，导致了过多的数据及网络传输。 <br />复制能力 DB2提供业界最佳效率的和最开放的复制方案；DB2支持对数据做预处理后再复制到远端，更有效率且网络流量少。 Sybase是立即复制交易，数据和网络流量大，据用户反映，Sybase的复制难以实施。SybaseAdaptiveServerAnywhere和AdaptiveServerEnterprise之间的数据复制不是无缝连接，且要求整合工作。 <br />对电子商务支持 IBM的Java技术为业界所公认，DB2公认为电子商务基石。DB2提供的JDBC接口，还可用Java语言写储存过程和用户自定义函数 Oracle的Java技术仅局限于数据库和ERP应用。 <br />对商业智能支持 DB2WarehouseManager内置了数据仓库管理功能。IBM的商业智能解决方案中，拥有数据挖掘(IntelligentMiner)工具。 Sybase数据集市(datamart)没有提供仓库(Warehouse)管理与自动化的功能。 <br />软件质量与可靠性 DB2的软件开发实验室早在1994年便已通过ISO9000国际质量管理标准的验证与认可。故DB2的软件质量是所有数据库厂家中可靠性最高，故障率最低的数据库。数据在IBM系统内被腐化(corrupted)不但是前所未闻，也是IBM传统用户所不可能忍受的。 SYBASE中的数据需要小心的维护，因为数据在数据库中有可能被“腐化(corrupted)”而无法继续使用。在没有事先修补的情形下，若这些数据被备份了，则它们无法再被使用。为此SYBASE不得不为客户提供一个检查程序(DBCC)。 <br /><br /><br />DB2与Informix比较 <br /><br />特性 DB2 Informix <br />开放性/可移植性 IBMDB2UDB在各层面，从网络协议的支持到应用开发程序的编程接口，数据库存储程序及触发器，服务器之间的分布式运作，都是基于最新的国际标准，以确保其开放性及移植性。 INFORMIX私有4GL编写的程序只能局限在INFORMIX上运行。 <br />处理性能 IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。DB2在高端应用具有过硬的技术，有众多超过1Tera-bytes数据量的用户实例。 由于INFORMIX是以小型数据库起家，所以其产品设计到目前为止仍有许多小型数据库的限制。许多用户都曾遇到INFORMIX在数据存储、日志管理、备份、恢复等方面的问题。Informix的扩展并行选项在支持多用户并发访问时存在困难。INFORMIX由于缺乏对大量数据的管理经验，所以其优化器技术也不能针对大量数据做优化。 <br />并行能力 DB2EEE能利用HACMP自动接替故障节点正常工作，Informix做不到。DB2EEE已经有多年的历史，颁布了最高的TPC-D和TPC-H基准测试值。DB2EEE支持动态位图索引完成Star-jion，从而既提高了性能又不增加数据库系统管理员的维护量。 在并行机SP上，当SP的高性能开关(switch)不能通讯时，InformixXPS数据库将处于瘫痪状态.当并行机的节点出现故障时，InformixXPS数据库将处于瘫痪状态，停机时间为4到24小时；InformixXPS没有备份和恢复。InformixXPS没有对查询的监控机制，有可能某一个用户的一个查询耗尽系统的所有资源而不让其他用户使用。 <br />分布式数据库 DB2则是通过核心直接支持XA接口，并且提供许多其它厂商所没有的XA先进功能，例如工商银行山东分行的DB2应用就大量地使用了DB2XA接口，实现了与CICS结合的大型联机事物处理系统(OLTP)来支持全省通存通兑等应用。 INFORMIX对异构分布式数据库的支持是通过X/OPEN、XA实现的。虽然INFORMIX声称它能够支持X/OPEN、XA接口，但只是在某几个版本通过附加选件完成。并且在这方面，INFORMIX很少有使用先例，也没有这方面的技术支持。 <br />异构平台支持 在异构的环境中，IBM数据库方案简单、更加无缝而且成本低； INFORMIX在数据库与数据库之间的连接方面很弱。例如INFORMIX没有连接其他数据库如bbORACLE、SYBASE等数据库的产品. <br />复制能力 DB2提供业界最佳效率的和最开放的复制方案；DB2提供自动冲突检测和解决方法。 Informix只支持Informix数据库间的复制，若要同其它数据库相互复制，则必须购买第三方支持软件。 <br /><br />成功案例 <br />DB2在国内、国际的用户群 <br />DB2的用户不胜枚举。它在全球有一百万以上的License和超过四千万的用户，它在全世界有一万一千个企业级用户。全世界70％公司的数据储存在IBM的数据库里。 </div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 15:23 <a href="http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手动建立Oracle9i数据库</title><link>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20854.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 07:22:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20854.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20854.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/archive/2006/12/20/20854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20854.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20854.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>手动建立Oracle9i数据库<br /><p>本文内容将涵盖下列主题：</p><ul><li>n          建立数据库的前置工作 
</li><li>n          起始参数档的重要参数 
</li><li>n          手动建立 Oracle9i 数据库的步骤 
</li><li>n          如何移除 Oracle9i 数据库</li></ul><p> </p><p>不管原因为何，当您准备自行建立 Oracle9i 数据库时，都必须事先做好妥善准备。因为手动建立 Oracle9i 数据库并不是件容易的事，可能的话应该尽量使用 Oracle9i 提供的「数据库建置辅助精灵」来建立新数据库。但是要想成为一个合格的 Oracle DBA，您也必须熟稔手动建立数据库的方式，才能面对建置 Oracle9i 数据库所可能碰到的任何问题。</p><p> </p><p>首先我们先看看建立 Oracle9i 数据库之前应注意那些事情。</p><p> </p><p><strong>建立</strong><strong> Oracle9i </strong><strong>数据库的前置处理工作</strong><strong></strong></p><p>在开始建立新的 Oracle9i 数据库之前，建议您先做好下列准备工作：</p><ul><li>n          评估资料表与索引的存放位置，并预估其所需空间(如果可能的话)。 
</li><li>n          规划操作系统下数据库实体档案的部署方式—良好的档案配置将大幅改善资料存取效能。不管是安装 Oracle 服务器软件或是建置新数据库时，都必须特别注意这点。例如说，您可以将重置日志文件 (Redo Log files) 置于其它磁盘或是 RAID 1磁盘阵列上；而将数据文件置于 RAID 5磁盘阵列上。 
</li><li>n          选定「全域数据库名称」(global database name) —它是在网际网络上识别 Oracle9i 数据库的方式，由<strong>数据库名称</strong><strong></strong>与<strong>网域名称</strong><strong></strong>组成，分别设定在起始参数档的<strong>DB_NAME</strong>与<strong>DB_DOMAIN</strong>参数内。 
</li><li>n          熟悉起始参数档内较重要的参数，甚至「服务器参数档」(server parameter file)的使用时机与其功用。 
</li><li>n          选定适当的数据库字符集。所有字符资料都是依照特定字符集存入数据库，因此您必须在建立数据库时指定适当字符集(注<a href="http://www.51testing.com/dede/add_news_view.php?typeid=0#_ftn1" name="_ftnref1"></a>[1])。 
</li><li>n          选定「标准资料区块」大小—设定在起始参数档的<strong>DB_BLOCK_SIZE</strong>参数。除了 SYSTEM 资料表空间，其它资料表空间也可以遵循「标准资料区块」的设定。此外，在 Oracle9i 数据库中，您可以设定额外四种「非标准资料区块」。需要注意的是，「标准资料区块」大小在数据库建立完成后即无法更改。 
</li><li>n          针对未来数据库的运作情况，订立一份良好的数据库备份计划，以便数据库毁损时能在最短时间内予以修复。 
</li><li>n          熟悉 Oracle9i 数据库的激活/关闭方式，与其搭配的各种选项(如 STARTUP 指令的 nomount、mount、open 选项)。 
</li><li>n          确认物理内存是否足以激活 Oracle9i Instance。 
</li><li>n          确认 Oracle9i 服务器机的磁盘空间足够，以建置新数据库。</li></ul><p> </p><p>除了本文提及的注意事项，您也可以查阅各种操作系统专属的 Oracle9i 安装指南，以获取更详尽的信息。</p><p> </p><p><strong>选择数据库建置方式</strong><strong></strong></p><p>Oracle9i 数据库建置过程包含下列三项主要工作：</p><ul><li>n          建置新的数据库实体档案，包含资料文件、重置日志文件。 
</li><li>n          建立控制档，并予以初始化。 
</li><li>n          建置 Oracle9i 存取数据库系统时必要的数据字典(data dictionary)。</li></ul><p> </p><p>实际上，您可能经由下列三种方式之一来建置新的 Oracle9i 数据库时：</p><ul><li>n          使用 Oracle「数据库建置组态精灵」(Database Configuration Assistant，DBCA)。</li></ul><p>Oracle Universal Installer 在安装过程中会适时激活 DBCA 协助您建立数据库，视您选择的安装种类而定。DBCA 将以图形接口方式引导您逐步完成 Oracle9i 数据库的建置工作。若是安装过程未激活 DBCA，您也可以事后单独激活 DBCA 建立新数据库，甚至建立第二个 Oracle9i 数据库。</p><ul><li>n          执行指令文件(script)手动建立 Oracle9i 数据库</li></ul><p>如果您手边恰好保存着上次建立 Oracle9i 数据库所用的指令文件，那么您可以直接编修该指令文件，并予以执行。否则，建议您使用 Oracle9i 提供的范例指令文件进行编修。Oracle9i 不仅提供了数据库建置范例指令文件，也提供了起始参数范例文件。您可视实际需要进行必要调整。</p><ul><li>n          移转(migrate)或升级(upgrade)既有数据库。</li></ul><p>如果您的应用系统正在存取既有 Oracle 数据库，除非您需要一个全新的数据库或是测试用环境，否则应该不需要建立新数据库。在此情况下，您所面临的将是数据库移转或升级议题。有关这方面的详尽信息，请参阅《Oracle9<em>i </em>Database Migration》手册。</p><p> </p><p><strong>再谈起始参数档</strong><strong></strong></p><p>还记得上一期曾经提过的起始参数档吗？因为手动建立 Oracle9i 数据库之前必须先激活 Oracle9i Instance，因此您必须先建立一个起始参数档。建立新的起始参数档时，最快速的方式就是编辑 Oracle9i 提供的范例档案，然后另存新档。我较习惯的方式是直接编辑既有起始参数档之复本，然后视实际需要进行调整。因为起始参数档可供设定的参数非常多，如果某些参数未经过明确设定，Oracle9i 会自动代入默认值。</p><p>第一次以手动方式建立 Oracle 数据库时，建议您尽可能不要修改各起始参数值。等到您熟悉每个参数的意义与使用时机之后，再利用文字编辑器调整或新增其它参数。除此之外，Oracle9i 允许您建立服务器参数文件(以二进制格式存放)。该档案内的参数可在 Oracle9i Instance 激活后执行 ALTER SYSTEM 指令予以修改。</p><p> </p><p>以下是建置新数据库之前必须新增或编辑的起始参数，包括：</p><ul><li>n          全域数据库名称 
</li><li>n          控制文件名称与路径 
</li><li>n          资料区块大小 
</li><li>n          影响 SGA 容量的起始参数 
</li><li>n          设定处理程序最大数目 
</li><li>n          设定空间回复(Undo)管理方法</li></ul><p><strong></strong><strong></strong> </p><p><strong>设定全域数据库名称</strong><strong></strong></p><p>Oracle9i 的<strong>全域数据库名称</strong>由「数据库名称」与「网域名称」所组成，其中「数据库名称」设定于 DB_NAME 起始参数，而「网域名称」则是设定于 DB_DOMAIN 参数。这两个参数合并之后就可以在网际网络上唯一识别每一个 Oracle9i 数据库。举例来说，假设我们欲建立的 Oracle9i 数据库之<strong>全域数据库名称</strong>为 mydb.uuu.com.tw，那么可在起始参数档内设定下列两参数：</p><p>DB_NAME = mydb</p><p>DB_DOMAIN = uuu.com.tw</p><p> </p><p></p><table cellspacing="0" cellpadding="0"><tbody><tr><td></td></tr></tbody></table>Tips： 
<p>您可以执行 ALTER DATABASE RENAME GLOBAL_NAME 指令更改 Oracle9i 数据库的全域数据库名称；在您更改 DB_NAME 与 DB_DOMAIN 这两个起始参数后必须将 Oracle9i 数据库重新激活才会生效。此外，控制档也必须重新建立。</p><p><strong></strong><strong></strong> </p><p><strong>关于</strong><strong> DB_NAME </strong><strong>起始参数</strong><strong></strong></p><p><strong>DB_NAME</strong>必须是文字字符串，且不能超过 8 个字符。在建立数据库的过程中，<strong>DB_NAME</strong>设定值会记录在资料文件、控制文件、以及重置日志文件之中。如果您激活 Oracle9i Instance 的时候，起始参数档内设定的<strong>DB_NAME</strong>不同于控制文件内所纪录的，那么数据库将无法激活。</p><p><strong></strong><strong></strong> </p><p><strong>关于</strong><strong> DB_DOMAIN </strong><strong>起始参数</strong><strong></strong></p><p><strong>DB_DOMAIN</strong>通常是数据库主机所在位置的网域名称。如果您欲建立的数据库将加入分布式数据库运算环境，请特别注意此参数的设定。</p><p><strong></strong><strong></strong> </p><p><strong>设定控制档</strong><strong></strong></p><p>如前所述，控制文件是 Oracle9i 数据库内相当重要的档案。因此您必须在新的起始参数档内加入<strong>CONTROL_FILE</strong>参数以设定控制文件之文件名与路径。当您执行 CREATE DATABASE 时，列在<strong>CONTROL_FILE</strong>之中的控制档将随之建立。如果起始参数档忽略了此项参数，则 Oracle9i 会在执行 CREATE DATABASE 指令时自动建立控制文件并命名之，然后放在系统预设路径下。</p><p>那么，如果<strong>CONTROL_NAME</strong>内设定的控制文件已经存在于操作系统下该怎么办呢？此时 Oracle9i 会自动覆盖既有的控制档。如果您想建立全新的控制档，请确定<strong>CONTROL_NAME</strong>设定的控制文件名不会与操作系统下任何文件名重复。</p><p>依照过去经验，Oracle 强烈建议您为每个数据库至少规划两个控制档，并分散在两个实体磁盘上。如此可避免任一控制文件毁损时造成系统停摆。</p><p>注[1]：有关 Oracle 9i 数据库的字符集种类与名称，请参阅《Oracle9i Globalization Support Guide Release 1》</p><p> </p><p><strong>设定资料区块大小</strong><strong></strong></p><p>Oracle9i 数据库内存放资料的最小单位为「资料区块」(data block)。数据库内「标准资料区块」大小是设定在起始参数档之<strong>DB_BLOCK_SIZ</strong>E 参数。Oracle9i 数据库内最重要的 SYSTEM 资料表空间就是以<strong>DB_LOCK_SIZE</strong>设定值为基础所建立。此外<strong>DB_BLOCK _SIZE</strong>也是建立新资料表空间时预设的资料区块大小。除了标准资料区块大小之外，Oracle9i 支持额外 4 种「非标准资料区块」大小。</p><p> </p><p><strong>关于</strong><strong> DB_BLOCK_SIZE </strong><strong>起始参数</strong><strong></strong></p><p>从 Oracle9i 开始，<strong>DB_BLOCK_SIZE</strong>所设定的仅是标准资料区块大小；绝大多数的数据库环境只需要设定该参数即可。一般来说，<strong>DB_BLOCK_SIZE</strong>可设定为 4K 或 8K。如果此参数未经设定，则 Oracle9i 会自动依照数据库所在操作系统平台自行决定适当的资料区块大小。</p><p>需要注意的是，标准资料区块大小在数据库建立之后就无法改变—除非重建数据库。如果数据库的「资料区块」大小不同于「操作系统区块」大小，那么建议您将<strong>DB_BLOCK_SIZE</strong>设为「操作系统区块」大小之整数倍。假定操作系统区块大小为 4K，则不妨设定<strong>DB_BLOCK_SIZE </strong>= 8192。在某些情况下，这样的组态方式将会显著地提升资料存取效能。</p><p> </p><p><strong>何谓「非标准资料区块」？</strong><strong></strong></p><p>由「非标准资料区块」构成的资料表空间可经由 CREATE TABLESPACE 指令搭配<strong>BLOCKSIZE</strong>子句建立之；其区块大小设定值可为 2K、4K、8K、16K、32。需注意的是此类型资料区块将受到操作系统环境限制，不是所有操作系统都可以设定上述所有区块大小。</p><p>欲使用「非标准资料区块」时，您还必须适当组态 SGA 内数据库缓冲区的子缓冲区，方式是藉由<strong>DB_<em>n</em>K_CACHE_SIZE</strong>参数所设定(此参数容后说明)。</p><p>此项机制是 Oracle9i 提出的新功能，在转移数据库时特别好用。举例来说，您的 OLTP 数据库也许将资料区块大小设定为 4K，但是资料仓储系统使用的数据库却将资料区块大小设定为 8K。藉由「非标准资料区块」的机制，您就可以平顺地将 OLTP 数据库的资料转移到资料仓储系统的数据库。</p><p> </p><p><strong>影响</strong><strong> SGA </strong><strong>容量的起始参数</strong><strong></strong></p><p>此类型起始参数将控制内存内「系统全域区」(System Global Area，SGA) 的大小，除了<strong>SGA_MAX_SIZE</strong>之外，其它参数几乎都可以经由 ALTER SYSTEM 指令动态地更改。借着此项特性，您可以在 Oracle9i Instance 运作时动态地增加或缩小 SGA 容量。</p><p> </p><p><strong>设定「数据库缓冲区」大小</strong><strong></strong></p><p>一般情况下，Oracle9i 数据库缓冲区(database buffer cache)大小是由起始参数档<strong>DB_CACHE_SIZ</strong>E 参数所决定。此时数据库缓冲区是以「标准资料区块」作为资料存取单位。如果您想在 Oracle9i 数据库使用多重资料区块大小，则必须设定一组<strong>DB_BLOCK_SIZE</strong>与<strong>DB_nK_CACHE_SIZE</strong>参数。如果上述两项参数在起始参数档未明确设定，则 Oracle9i 会自动设定适当的<strong>DB_CACHE_SIZE</strong>值，且将<strong>DB_<em>n</em>K_CACHE_SIZE</strong>设定为 0。</p><p> </p><p><strong>关于</strong><strong> DB_CACHE_SIZE </strong><strong>起始参数</strong><strong></strong></p><p>在 Oracle8i 以前，数据库缓冲区大小是由<strong>DB_BLOCK_BUFFERS</strong>与<strong>DB_BLOCK_SIZE</strong>所决定；从 Oracle9i 开始将由<strong>DB_CACHE_SIZE</strong>取代之。需要注意的是，<strong>DB_CACHE_SIZE</strong>是以<strong>DB_BLOCK_SIZE</strong>所设定的标准资料区块大小为基准。为了向前兼容，在 Oracle9i 中仍旧可以设定<strong>DB_BLOCK_BUFFERS