??xml version="1.0" encoding="utf-8" standalone="yes"?>激情欧美一区二区三区,三级网站视频在在线播放,飘雪影院手机免费高清版在线观看http://www.aygfsteel.com/jnzgrass/category/18501.htmlzh-cnTue, 05 Jun 2007 04:08:49 GMTTue, 05 Jun 2007 04:08:49 GMT60Oracle数据导入导出imp/exp命ohttp://www.aygfsteel.com/jnzgrass/articles/121834.html东舟东舟Mon, 04 Jun 2007 06:45:00 GMThttp://www.aygfsteel.com/jnzgrass/articles/121834.htmlhttp://www.aygfsteel.com/jnzgrass/comments/121834.htmlhttp://www.aygfsteel.com/jnzgrass/articles/121834.html#Feedback0http://www.aygfsteel.com/jnzgrass/comments/commentRss/121834.htmlhttp://www.aygfsteel.com/jnzgrass/services/trackbacks/121834.html 
执行环境Q可以在SQLPLUS.EXE或者DOSQ命令行Q中执行Q?br /> DOS中可以执行时׃ 在oracle 8i 中?安装目录ora81BIN被设|ؓ全局路径Q?br /> 该目录下有EXP.EXE与IMP.EXE文g被用来执行导入导出?br /> oracle用java~写QSQLPLUS.EXE、EXP.EXE、IMP.EXEq两个文件有可能是被包装后的cL件?br /> SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类Q完成导入导出功能?br /> 
下面介绍的是导入导出的实例?br />数据导出Q?br /> 1 数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp?br />   exp system/manager@TEST file=d:daochu.dmp full=y
 2 数据库中system用户与sys用户的表导出
   exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
 3 数据库中的表inner_notify、notify_staff_relat导出
    exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)

 4 数据库中的表table1中的字段filed1?00"打头的数据导?br />   exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
 
  上面是常用的导出Q对于压~,既用winzip把dmp文g可以很好的压~?br />  也可以在上面命o后面 加上 compress=y 来实现?br />
数据的导?br /> 1 D:daochu.dmp 中的数据导入 TEST数据库中?br />   imp system/manager@TEST  file=d:daochu.dmp
   imp aichannel/aichannel@HUST full=y  file=d:datanewsmgnt.dmp ignore=y
   上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br />   在后面加?ignore=y 可以了?br /> 2 d:daochu.dmp中的表table1 导入
 imp system/manager@TEST  file=d:daochu.dmp  tables=(table1)
 
 基本上上面的导入导出够用了。不情况要先是表d删除Q然后导入?br /> 
注意Q?br /> 操作者要有够的权限Q权限不够它会提C?br /> 数据库时可以q上的。可以用tnsping TEST 来获得数据库TEST能否q上?br />
附录一Q?br /> l用户增加导入数据权限的操作
 W一,启动sql*puls
 W二Q以system/manager登陆
 W三Qcreate user 用户?IDENTIFIED BY 密码 Q如果已l创用户Q这步可以省略)
 W四QGRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字
 W五, q行-cmd-q入dmp文g所在的目录,
      imp userid=system/manager full=y file=*.dmp
      或?imp userid=system/manager full=y file=filename.dmp

 执行CZ:
 F:WorkOracle_Databackup>imp userid=test/test full=y file=inner_notify.dmp

屏幕昄
Import: Release 8.1.7.0.0 - Production on 星期?2?16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation.  All rights reserved.

q接? Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

l由常规路径导出由EXPORT:V08.01.07创徏的文?br />已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导?br />导出服务器用UTF8 NCHAR 字符?(可能的ncharset转换)
. 正在AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表                ?"INNER_NOTIFY"          4行被导入
准备启用U束条g...
成功l止导入Q但出现警告?br />
 
附录二:
 Oracle 不允许直接改变表的拥有? 利用Export/Import可以辑ֈq一目的.
  先徏立import9.par,
  然后Q用时命o如下Qimp parfile=/filepath/import9.par
  ?import9.par 内容如下Q?br />        FROMUSER=TGPMS      
        TOUSER=TGPMS2     Q注Q把表的拥有者由FROMUSER改ؓTOUSERQFROMUSER和TOUSER的用户可以不同)         
        ROWS=Y
        INDEXES=Y
        GRANTS=Y
        CONSTRAINTS=Y
        BUFFER=409600
        file==/backup/ctgpc_20030623.dmp
        log==/backup/import_20030623.log

补充Q?br />1.在导入导出命令中加上feedback=1000可以让过E显CZ个不断增多的?..”,以改变以往的闪烁的光标

东舟 2007-06-04 14:45 发表评论
]]>
数据库主键设计之思?/title><link>http://www.aygfsteel.com/jnzgrass/articles/96521.html</link><dc:creator>东舟</dc:creator><author>东舟</author><pubDate>Mon, 29 Jan 2007 07:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/jnzgrass/articles/96521.html</guid><wfw:comment>http://www.aygfsteel.com/jnzgrass/comments/96521.html</wfw:comment><comments>http://www.aygfsteel.com/jnzgrass/articles/96521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jnzgrass/comments/commentRss/96521.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jnzgrass/services/trackbacks/96521.html</trackback:ping><description><![CDATA[<p>主键的无意义性: <br /> 我强调主键不应该h实际的意义,q可能对于一些朋友来说不太认同,比如订单表吧Q会有“订单编号”字D,而这个字D呢在业务实际中本n是应该h唯一性,h唯一标识记录的功能,但我是不推荐采用订单~号字段作ؓ主键的,因ؓh实际意义的字D,h“意义更改”的可能性,比如订单~号在刚开始的时候我们一切顺利,后来客户说“订单可以作废,q新生成订单,而且订单可保持原订单号一致”,q样原来的主键就面危险了。因此,h唯一性的实际字段也代表可以作Z键。因此,我推荐是新设一个字D专门用Z键,此主键本w在业务逻辑上不体现Q不h实际意义。而这U主键在一定程序增加了复杂度,所以要视实际系l的规模大小而定Q对于小目Q以后扩展不会很大的话,也查允许用实际唯一的字D作主键的?  <br />  <br /> 主键的选择 <br /> 我们现在在思考一下,应该采用什么来作表的主键比较合理,x一下,主键的设计没有一个定论,各h有各人的ҎQ哪怕同一个,在不同的目中,也会采用不同的主键设计原则?<br /><br /> W一Q编号作主键   <br /> 此方法就是采用实际业务中的唯一字段的“编号”作Z键设计,q在型的项目中是推荐这样做的,因ؓq可以ə目比较单化Q但在用中却可能带来一些麻烦,比如要进行“编号修改”时Q可能要涉及到很多相兌的其他表Q就象黎叔说的“后果很严重?q有是上面提到的“业务要求允许编号重复时”,我们再那么先知,都无法知道业务将会修Ҏ什?   <br />   <br /> W二Q自动编号主?  <br /> q种Ҏ也是很多朋友在用的Q就是新Z个ID字段Q自动增长,非常方便也满主键的原则Q优ҎQ数据库自动~号Q速度快,而且是增量增长,聚集型主键按序存放Q对于检索非常有?数字型的Q占用空间小Q易排序Q在E序中传递也方便;如果通过非系l增加记录(比如手动录入Q或是用其他工具直接在表里插入新记录Q或老系l数据导入)Ӟ非常方便Q不用担心主键重复问题?  <br /><br /> ~点Q其实缺点也是来自其优点,是因ؓ自动增长Q在手动要插入指定ID的记录时会显得麻烦,其是当pȝ与其他系l集成时Q需要数据导入时Q很难保证原pȝ的ID不发生主键冲H(前提是老系l也是数字型的);如果其他pȝ主键不是数字型那麻烦更大了Q会D修改主键数据cd了,q也会导致其他相兌的修改,后果同样很严?q其他pȝ也是数字型的Q在导入ӞZ区分新老数据,可能惛_老数据主键前l一加一个“o?old)来表C是老数据,那么自动增长的数字型又面临一个挑战?  <br />   <br /> W三QMax加一   <br /> ׃自动~号存在那些问题Q所以有些朋友就采用自己生成Q同h数字型的Q只是把自动增长L了,采用在InsertӞdMax值后加一Q这U方法可以避免自动编L问题Q但也存在一个效率问题,如果记录非常大的话,那么Max()也会影响效率?更严重的是ƈ发性问题,如果同时有两到相同的Max后,加一后插入的IDg重复Q这已经是有l验教训的了?  <br /> W四Q自制加一   <br /> 考虑Max加一的效率后Q有人采用自制加一Q也是Z个特别的表,字段为:表名Q当前序列倹{这样在往表中插入值时Q先从此表中扑ֈ相应表的最大值后加一Q进行插入,有h可能发现Q也可能会存在ƈ发处理,q个q发处理Q我们可以采用lockU程的方式来避免Q在生成此值的Ӟ先LockQ取到g后,再unLock出来Q这样不会有两h同时生成了。这比Max加一的速度要快多了。但同样存在一个问题:在与其他pȝ集成Ӟq了系l中的生成方法后Q很ȝ保证自制表中的最大g导入后的保持一_而且数字型都存在上面讲到的“o”老数据的导入问题。因此在“自制加一”中可以把主键设为字W型的。字W型的自制加一我倒是蛮推荐的Q应该字W型主键可以应付很多我们意想不到的情c?<br /><br /> W五QGUID主键   <br /> 目前一个比较好的主键是采用GUIDQ当然我是推荐主键还是字W型的,但值由GUID生成QGUID是可以自动生成,也可以程序生成,而且键g可能重复Q可以解决系l集成问题,几个pȝ的GUID值导ChQ也不会发生重复Q就有“o”老数据也可以区分Q而且效率很高Q在.NET里可以直接用System.Guid.NewGuid()q行生成Q在SQL里也可以使用   NewID()生成?<br /><br /> 优点是:   <br /> ?  IDENTITY   列相比,uniqueidentifier   列可以通过   NewID()   函数提前得知新增加的?  IDQؓ应用E序的后l处理提供了很大方便?  <br /><br /> 便于数据库移植,其它数据库中q不一定具?  IDENTITY   列,?  Guid   列可以作为字W型列{换到其它数据库中Q同时将应用E序中生的   GUID   值存入数据库Q它不会对原有数据带来媄响?  <br /><br /> 便于数据库初始化Q如果应用程序要加蝲一些初始数据,   IDENTITY   列的处理方式比较麻烦,?  uniqueidentifier   列则无需M处理Q直接用   T-SQL   加蝲卛_?  <br /><br /> 便于Ҏ些对象或帔Rq行怹标识Q如cȝ   ClassIDQ对象的实例标识QUDDI   中的联系人、服务接口、tModel标识定义{?  <br />   <br /> ~点是:   <br /> GUID   D长,不容易记忆和输入Q而且q个值是随机、无序的?<br /> GUID   的值有   16   个字节,与其它那些诸?  4   字节的整数相比要相对大一些。这意味着如果在数据库中?  uniqueidentifier   键,可能会带来两斚w的消极媄响:存储I间增大Q烦引时间较慢?  <br /><br /> 我也不是推荐GUID最好,其实在不同的情况Q我们都可以采用上面的某一U方式,思考了一些利与弊Q也方便大家在进行设计时参考。这些也只是我的一Ҏ考而已Q而且可能我知识面限制Q会有一些误论在里面Q希望大家有什么想法欢q讨论?br /></p> <a >http://groups.csdn.net/DOTNET/topic/2ba4e27a-3e2d-4ddd-bdba-d02ca9c700fd.aspx</a><img src ="http://www.aygfsteel.com/jnzgrass/aggbug/96521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jnzgrass/" target="_blank">东舟</a> 2007-01-29 15:50 <a href="http://www.aygfsteel.com/jnzgrass/articles/96521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中分的?/title><link>http://www.aygfsteel.com/jnzgrass/articles/95944.html</link><dc:creator>东舟</dc:creator><author>东舟</author><pubDate>Thu, 25 Jan 2007 07:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/jnzgrass/articles/95944.html</guid><wfw:comment>http://www.aygfsteel.com/jnzgrass/comments/95944.html</wfw:comment><comments>http://www.aygfsteel.com/jnzgrass/articles/95944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jnzgrass/comments/commentRss/95944.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jnzgrass/services/trackbacks/95944.html</trackback:ping><description><![CDATA[<font size="2">在大型的企业应用或企业的数据库应用中,要处理的数据量通常可以辑ֈ几十到几百GBQ有的甚臛_以到TBU?虽然存储介质和数据处理技术的发展也很快,但是仍然不能满用户的需求,Z使用L大量的数据在d操作和查询中速度更快QOracle提供了对表和索引q行分区的技术,以改善大型应用系l的性能?br /><br />使用分区的优点:<br /><br />    1、增强可用性:如果表的某个分区出现故障Q表在其他分区的数据仍然可用Q?br /><br />    2、维护方便:如果表的某个分区出现故障Q需要修复数据,只修复该分区卛_Q?br /><br />    3、均衡I/OQ可以把不同的分区映到盘以^衡I/OQ改善整个系l性能Q?br /><br />    4、改善查询性能Q对分区对象的查询可以仅搜烦自己兛_的分区,提高索速度?br /><br />    Oracle数据库提供对表或索引的分区方法有三种Q?br /><br />        1、范围分?br /><br />        2、Hash分区Q散列分区)<br /><br />        3、复合分?br /><br />    下面以实例的方式分别对q三U分区方法来说明分区表的使用。ؓ了测试方便,我们先徏三个表空间?br /><br />create tablespace dinya_space01<br />datafile '/test/demo/oracle/demodata/dinya01.dnf' size 50M<br /><br />create tablespace dinya_space01<br />datafile '/test/demo/oracle/demodata/dinya02.dnf' size 50M<br /><br />create tablespace dinya_space01<br />datafile '/test/demo/oracle/demodata/dinya03.dnf' size 50M<br /><br /> <br />1         分区表的创徏Q?.1     范围分区<br />    范围分区是Ҏ据表中的某个值的范围q行分区Q根据某个值的范围Q决定将该数据存储在哪个分区上。如Ҏ序号分区Q根据业务记录的创徏日期q行分区{?br /><br />    需求描qͼ有一个物料交易表Q表名:material_transactions。该表将来可能有千万U的数据记录数。要求在表的时候用分。这时候我们可以用序号分Z个区Q每个区中预计存储三千万的数据,也可以用日期分区,如每五年的数据存储在一个分Z?br /><br />Ҏ交易记录的序号分区徏表:<br /><br />SQL> create table dinya_test<br />  2  (<br />  3      transaction_id number primary key,<br />  4      item_id number(8) not null,<br />  5      item_description varchar2(300),<br />  6      transaction_date date  not null<br />  7  )<br />  8  partition by range (transaction_id)<br />  9  (<br /> 10      partition part_01 values less than(30000000) tablespace dinya_space01,<br /> 11      partition part_02 values less than(60000000) tablespace dinya_space02,<br /> 12      partition part_03 values less than(maxvalue) tablespace dinya_space03<br /> 13  );<br /><br />Table created.<br /><br />SQL><br /><br />成功Q根据交易的序号Q交易ID在三千万以下的记录将存储在第一个表I间dinya_space01中,分区名ؓ:par_01Q在三千万到六千万之间的记录存储在第二个表空_dinya_space02中,分区名ؓQpar_02Q而交易ID在六千万以上的记录存储在W三个表I间dinya_space03中,分区名ؓpar_03.<br /><br />Ҏ交易日期分区Q?br /><br />SQL> create table dinya_test<br />  2  (<br />  3      transaction_id number primary key,<br />  4      item_id number(8) not null,<br />  5      item_description varchar2(300),<br />  6      transaction_date date not null   <br />  7  )<br />  8  partition by range (transaction_date)<br />  9  (<br /> 10  partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dinya_space01,<br /> 11  partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dinya_space02,<br /> 12  partition part_03 values less than(maxvalue) tablespace dinya_space03<br /> 13  );<br /><br />Table created.<br /><br />SQL><br /><br />q样我们分别徏了以交易序号和交易日期来分区的分。每ơ插入数据的时候,pȝ根据指定的字段的值来自动记录存储到制定的分区(表空_中?br /><br />    当然Q我们还可以Ҏ需求,使用两个字段的范围分布来分区Q如partition by range ( transaction_id ,transaction_date),分区条g中的g做相应的改变Q请读者自行测试?br /><br /> <br />1.2     Hash分区Q散列分区)<br />    散列分区为通过指定分区~号来均匀分布数据的一U分区类型,因ؓ通过在I/O讑֤上进行散列分区,使得q些分区大小一致。如物料交易表的数据根据交易ID散列地存攑֜指定的三个表I间中:<br /><br />SQL> create table dinya_test<br />  2  (<br />  3      transaction_id number primary key,<br />  4      item_id number(8) not null,<br />  5      item_description varchar2(300),<br />  6      transaction_date date<br />  7  )<br />  8  partition by hash(transaction_id)<br />  9  (<br /> 10      partition part_01 tablespace dinya_space01,<br /> 11      partition part_02 tablespace dinya_space02,<br /> 12      partition part_03 tablespace dinya_space03<br /> 13  );<br /><br />Table created.<br /><br />SQL><br /><br />    成功Q此时插入数据,pȝ按transaction_id记录散列地插入三个分区中,q里也就是三个不同的表空间中?br /><br /> <br />1.3        复合分区<br />    有时候我们需要根据范围分区后Q每个分区内的数据再散列地分布在几个表空间中Q这h们就要用复合分区。复合分区是先用范围分区,然后在每个分区内再用散列分区的一U分区方法,如将物料交易的记录按旉分区Q然后每个分Z的数据分三个子分区,数据散列地存储在三个指定的表空间中Q?br /><br />SQL> create table dinya_test<br />  2  (<br />  3      transaction_id number primary key,<br />  4      item_id number(8) not null,<br />  5      item_description varchar2(300),<br />  6      transaction_date date<br />  7  )<br />  8  partition by range(transaction_date)subpartition by hash(transaction_id)<br />  9      subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)<br /> 10  (<br /> 11      partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')),<br /> 12      partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')),<br /> 13      partition part_03 values less than(maxvalue)<br /> 14  );<br /><br />Table created.<br /><br />SQL><br /><br />    该例中,先是Ҏ交易日期q行范围分区Q然后根据交易的ID记录散列地存储在三个表I间中?br /><br /> <br />2         分区表操?br />以上了解了三U分的徏表方法,下面用实际的数据qҎ日期的范围分区来试分区表的数据记录的操作?br />2.1     插入记录Q?br />SQL> insert into dinya_test values(1,12,'BOOKS',sysdate);<br />1 row created.<br />SQL> insert into dinya_test values(2,12, 'BOOKS',sysdate+30);<br />1 row created.<br />SQL> insert into dinya_test values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));<br />1 row created.<br />SQL> insert into dinya_test values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));<br />1 row created.<br />SQL> insert into dinya_test values(5,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));<br />1 row created.<br />SQL> insert into dinya_test values(6,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));<br />1 row created.<br />SQL> commit;<br />Commit complete.<br />SQL><br /><br />    按上面的l果Q?006q前的数据将存储在第一个分区part_01上,?006q到2010q的交易数据存储在W二个分区part_02上,2010q以后的记录存储在第三个分区part_03上?br />2.2     查询分区表记录:<br />SQL> select * from dinya_test partition(part_01);<br /><br />TRANSACTION_ID    ITEM_ID       ITEM_DESCRIPTION            TRANSACTION_DATE<br />-------------------------------------------------------------------------------- <br />             1     12            BOOKS                      2005-1-14 14:19:<br />             2     12            BOOKS                      2005-2-13 14:19:<br />SQL><br /><br />SQL> select * from dinya_test partition(part_02);<br /><br />TRANSACTION_ID     ITEM_ID      ITEM_DESCRIPTION            TRANSACTION_DATE<br />-------------------------------------------------------------------------------- <br />             3      12            BOOKS                       2006-5-30<br />             4      12            BOOKS                       2007-6-23<br />SQL><br /><br />SQL> select * from dinya_test partition(part_03);<br /><br />TRANSACTION_ID     ITEM_ID         ITEM_DESCRIPTION      TRANSACTION_DATE<br />-------------------------------------------------------------------------------- <br />             5      12               BOOKS                 2011-2-26<br />             6      12               BOOKS                 2011-4-30<br />SQL><br /><br />    从查询的l果可以看出Q插入的数据已经Ҏ交易旉范围存储在不同的分区中。这里是指定了分区的查询Q当然也可以不指定分区,直接执行select * from dinya_test查询全部记录。在也检索的数据量很大的时候,指定分区会大大提高检索速度?br /><br /> <br />2.3     更新分区表的记录Q?br />SQL> update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=1;<br /><br />1 row updated.<br /><br />SQL> commit;<br /><br />Commit complete.<br /><br />SQL><br /><br /> <br /><br />    q里第一个分Z的交易ID=1的记录中的item_description字段更新为“DESK”,可以看到已经成功更新了一条记录。但是当更新的时候指定了分区Q而根据查询的记录不在该分ZӞ不会更新数据,L下面的例子:<br /><br /> <br /><br />SQL> update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=6;<br /><br />0 rows updated.<br /><br />SQL> commit;<br /><br />Commit complete.<br /><br />SQL><br /><br />指定了在W一个分Z更新记录Q但是条件中限制交易ID?Q而查询全表,交易ID?的记录在W三个分ZQ这栯条语句将不会更新记录?br /><br /> <br />2.4     删除分区表记录:<br />SQL> delete from dinya_test partition(part_02) t where t.transaction_id=4;<br /><br /> <br /><br />1 row deleted.<br /><br /> <br /><br />SQL> commit;<br /><br /> <br /><br />Commit complete.<br /><br /> <br /><br />SQL><br /><br /> <br /><br />上面例子删除了第二个分区part_02中的交易记录ID?的一条记录,和更新数据相同,如果指定了分区,而条件中的数据又不在该分ZӞ不会删除Q何数据?br /><br /> <br />3         分区表烦引的使用Q?br />分区表和一般表一样可以徏立烦引,分区表可以创建局部烦引和全局索引。当分区中出现许多事务ƈ且要保证所有分Z的数据记录的唯一性时采用全局索引?br />3.1     局部烦引分区的建立Q?br />SQL> create index dinya_idx_t on dinya_test(item_id)<br />  2  local<br />  3  (<br />  4     partition idx_1 tablespace dinya_space01,<br />  5     partition idx_2 tablespace dinya_space02,<br />  6     partition idx_3 tablespace dinya_space03<br />  7  );<br /><br />Index created.<br /><br />SQL> <br /><br />看查询的执行计划Q从下面的执行计划可以看出,pȝ已经使用了烦引:<br /><br />SQL> select * from dinya_test partition(part_01) t where t.item_id=12;<br /><br /> <br /><br />Execution Plan<br /><br />----------------------------------------------------------<br /><br />   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=187)<br /><br />   1    0   TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'DINYA_TEST' (Cost=<br /><br />          2 Card=1 Bytes=187)<br /><br />   2    1     INDEX (RANGE SCAN) OF 'DINYA_IDX_T' (NON-UNIQUE) (Cost=1<br /><br />           Card=1)<br /><br />Statistics<br /><br />----------------------------------------------------------<br /><br />          0  recursive calls<br /><br />          0  db block gets<br /><br />          4  consistent gets<br /><br />          0  physical reads<br /><br />          0  redo size<br /><br />        334  bytes sent via SQL*Net to client<br /><br />        309  bytes received via SQL*Net from client<br /><br />          2  SQL*Net roundtrips to/from client<br /><br />          1  sorts (memory)<br /><br />          0  sorts (disk)<br /><br />          2  rows processed<br /><br /> <br /><br />SQL><br /><br /> <br />3.2     全局索引分区的徏立?br />全局索引建立时global 子句允许指定索引的范围|q个范围gؓ索引字段的范围|<br /><br />SQL> create index dinya_idx_t on dinya_test(item_id)<br />  2  global partition by range(item_id)<br />  3  (<br />  4     partition idx_1 values less than (1000) tablespace dinya_space01,<br />  5     partition idx_2 values less than (10000) tablespace dinya_space02,<br />  6     partition idx_3 values less than (maxvalue) tablespace dinya_space03<br />  7  );<br /><br />Index created.<br /><br />SQL> <br /><br />    本例中对表的item_id字段建立索引分区Q当然也可以不指定烦引分区名直接Ҏ个表建立索引Q如Q?br /><br />SQL> create index dinya_idx_t on dinya_test(item_id);<br /><br />Index created.<br /><br />SQL> <br /><br />    同样的,对全局索引Ҏ执行计划可以看出索引已经可以使用Q?br /><br />SQL> select * from dinya_test t where t.item_id=12;<br /><br /> <br /><br />Execution Plan<br /><br />----------------------------------------------------------<br /><br />   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=3 Bytes=561)<br /><br />   1    0   TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'DINYA_TEST' (Cost<br /><br />          =2 Card=3 Bytes=561)<br /><br /> <br /><br />   2    1     INDEX (RANGE SCAN) OF 'DINYA_IDX_T' (NON-UNIQUE) (Cost=1<br /><br />           Card=3)<br /><br />Statistics<br /><br />----------------------------------------------------------<br /><br />          5  recursive calls<br /><br />          0  db block gets<br /><br />         10  consistent gets<br /><br />          0  physical reads<br /><br />          0  redo size<br /><br />        420  bytes sent via SQL*Net to client<br /><br />        309  bytes received via SQL*Net from client<br /><br />          2  SQL*Net roundtrips to/from client<br /><br />          3  sorts (memory)<br /><br />          0  sorts (disk)<br /><br />          5  rows processed<br /><br /> <br /><br />SQL><br /><br />    <br />4         分区表的l护Q?br />    了解了分的徏立、烦引的建立、表和烦引的使用后,在应用的q要l常对分行维护和理。日常维护和理的内容包括:增加一个分区,合ƈ一个分区及删除分区{等。下面以范围分区Z说明增加、合q、删除分区的一般操作:<br />4.1     增加一个分?<br />SQL> alter table dinya_test <br />  2  add partition part_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace dinya_spa<br />ce03;<br /><br />Table altered.<br /><br />SQL><br /><br /> <br /><br />    增加一个分区的时候,增加的分区的条g必须大于现有分区的最大|否则pȝ提CORA-14074 partition bound must collate higher than that of the last partition 错误?br /><br />    <br />4.2     合ƈ一个分区:<br />SQL> alter table dinya_test merge partitions part_01,part_02 into partition part_02;<br /><br />Table altered.<br /><br />SQL> <br /><br />    在本例中原有的表的part_01分区和part_02分区q行了合qӞ合ƈ后的分区为part_02,如果在合q的时候把合ƈ后的分区定ؓpart_01的时候,pȝ提CORA-14275 cannot reuse lower-bound partition as resulting partition 错误?br /><br /> <br />4.3     删除分区Q?br />SQL> alter table dinya_test drop partition part_01;<br /><br />Table altered.<br /><br />SQL><br /><br /> <br /><br />    删除分区表的一个分区后Q查询该表的数据时显C,该分Z的数据已全部丢失Q所以执行删除分区动作时要慎重,保先备份数据后再执行,或将分区合ƈ?br /><br /> <br />5         ȝQ?br />    需要说明的是,本文在D例说名分事务操作的时候,都指定了分区Q因为指定了分区Q系l在执行的时候则只操作该分区的记录,提高了数据处理的速度。不要指定分区直接操作数据也是可以的。在分区表上建烦引及多烦引的使用和非分区表一栗此外,因ؓ在维护分区的时候可能对分区的烦引会产生一定的影响Q可能需要在l护之后重徏索引Q相兛_容请参考分索引部分的文档?/font><img src ="http://www.aygfsteel.com/jnzgrass/aggbug/95944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jnzgrass/" target="_blank">东舟</a> 2007-01-25 15:24 <a href="http://www.aygfsteel.com/jnzgrass/articles/95944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看ORACLEpȝ参数http://www.aygfsteel.com/jnzgrass/articles/88568.html东舟东舟Mon, 18 Dec 2006 08:11:00 GMThttp://www.aygfsteel.com/jnzgrass/articles/88568.htmlhttp://www.aygfsteel.com/jnzgrass/comments/88568.htmlhttp://www.aygfsteel.com/jnzgrass/articles/88568.html#Feedback0http://www.aygfsteel.com/jnzgrass/comments/commentRss/88568.htmlhttp://www.aygfsteel.com/jnzgrass/services/trackbacks/88568.html

东舟 2006-12-18 16:11 发表评论
]]>
վ֩ģ壺 | | ²| | ɽ| ƽ| | Ĭ| | Ѱ| | ɽ| ǿ| | лͨ| | ˫| ɳƺ| | | | | | | | | | ҳ| ³ľ| ̩| | | | | | | | | | | żҸ|