用DBA Studio看一下他的索引是哪几个字段组成的不就行了。
DBA Studio是非常强大的,要充分利用。:)

解决方案 »

  1.   

    在更新程序之前将INDEX DROP掉,
    程序完成之后再CREATE INDEX ON TABLE(COLUMN1,……),有什么问题吗?
    我要做的一个程序也是如此,导数据的时候存在索引很慢,但查询的时候没有索引也慢,这是一个矛盾,我采用的解决办法,就是上面的。
      

  2.   

    是这样的,数据库中的INDEX我不知道是什么,包括INDEX Name 以及 INDEX中的各种条件。只能是自己在程序中检查。
    但是INDEX的结构过于复杂,怎样才能够做到与以前的完全一致。
    如果仅仅象楼上所说的CREATE INDEX ON TABLE(COLUMN1,……)那只是建立了一个具有默认结构的索引,并不一定和原来的一致。可以这样说,在我的程序中只知道数据库名和Table名,其他的一无所知。在这种情况下,实现上面所说的功能。各位大虾,帮忙了!
      

  3.   

    好像没有办法能够显示生成已建立索引的sql语句,也许我没找到。
    你可以到schema manager中,把你要操作的表的索引找到,察看参数,就可以反推出该索引的sql语句,然后等load完成了再重建。就是麻烦了点
      

  4.   

    用DBA Studio嘛,只要知道表名就够了。
      

  5.   

    如果你对sql比较熟的话,上面的方法应该是可以的。
    如果你知道table名,那么你可以到dba_indexes表中查询该表的索引:
    select * from dba_indexes where table_name=table名,
    把所有的索引找到以后,你再到schema manager中,用这样的方法可以找到生成索引的sql语句。
    你选新建索引,把所有的参数设置为和你要处理的索引的参数完全相同,然后点显示sql,建立该索引的sql语句就知道了,用这样的方法,但是比较麻烦一点,实在想不出别的办法了
      

  6.   

    原来如此,和我的情况是完全不同拉,我是自己建的数据库,自己写程序。
    你可以用,DBA STUDIO,它能查到所有的的索引,如果有SQL语句的,它可以显示,
    查到这个,余下的应该很简单了。
    我没试过,感觉可以,你试试!
      

  7.   

    “select * from dba_indexes where table_name=table名”,
    ---引用llm06() 先生他说错了一个地方,没有table_name 这一列,只有,index_name,owner,index_type,
    你可以用index_name  来查。
      

  8.   

    大家都让我直接使用DBA STUDIO来查询索引的结构,直接得到SQL语句。
    这样做的话,如果数据库的索引不再改变的话,是可以的。但是在你的程序
    写完之后。别人在使用过程中如果改变了索引的结构。那么就很可怕了。
    大家有没有一种办法,直接在代码中得到索引的结构,然后重新建立。在这个
    过程中应该是纯SQL语句,不应该使用工具。谁能帮忙?我的100分还没有送出去。
      

  9.   

    dba_indexes中有table_name这一列,指出 linuxtan(笨鸟先飞) 的一个错误.
     zhang_rui(zhang_rui)就我目前对索引的了解,没有办法从数据库中直接得到建索引的sql语句,有另外一个办法:
    select * from dba_ind_columns where table_name=table名;
    生成的结果包括,index_name,column_name,column_pos,还有其他的,实际对你而言就这些有用,你再根据这些值生成建索引sql语句。
    create index index_name on table名(column_name,...)如果该索引有多列的话,column的排列顺序以column_pos为依据。
    这样做只能满足基本的要求,对于索引的其他属性只能采用我前面说过的方法了。
      

  10.   

    编写一个脚本C:\CRE_IND_SQL.SQL,内容如下:SPOOL C:\CRE_IND.SQL
    SET SERVEROUTPUT ON SIZE 1000000DECLARE
      CURSOR C_IND IS SELECT * FROM USER_INDEXES;
      V_COL  VARCHAR2(4000);
      V_SQL  VARCHAR2(4000);
    BEGIN
      FOR I IN C_IND LOOP
        V_COL := NULL;
        DECLARE
          CURSOR C_IND_COL IS SELECT * FROM USER_IND_COLUMNS WHERE INDEX_NAME=I.INDEX_NAME ORDER BY COLUMN_POSITION ;
        BEGIN
          FOR J IN C_IND_COL LOOP
            V_COL := V_COL ||','||J.COLUMN_NAME||' '||J.DESCEND;
          END LOOP;
          V_COL := SUBSTR(V_COL,2);
        END;
      V_SQL := 'CREATE INDEX '||I.INDEX_NAME||' ON '||I.TABLE_OWNER||'.'||I.TABLE_NAME||'('||V_COL||') TABLESPACE '||I.TABLESPACE_NAME||';';
      DBMS_OUTPUT.PUT_LINE(V_SQL);
      END LOOP;
    END;
    /      SPOOL OFF;
      

  11.   

    在sql*plus下执行,然后可以的得到一个 c:\cre_ind.sql:SQL> @C:\CRE_IND_SQL
    CREATE INDEX CW_GRQTXMSF$_GRCDH ON ZJCS.CW_GRQTXMSF(GRCDH ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX DM_PHJC$_TYPE ON ZJCS.DM_PHJC(TYPE ASC) TABLESPACE ZJ_BJ;
    CREATE INDEX DM_PHJS$_TYPE_COLCHANGED ON ZJCS.DM_PHJS(TYPE ASC,COL_CHANGED ASC) TABLESPACE ZJ_BJ;
    CREATE INDEX DM_YHJSQX$RYDM_QXDM_KSDM_QXLX ON ZJCS.DM_KSRYQX(RYDM ASC,QXDM ASC,KSDM ASC,QXLX ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX DWJF_DY$_DWCDH ON ZJCS.DWJF_DY(DWCDH ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX DW_CD$_DWID ON ZJCS.DW_CD(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX DW_GJJ$_DWID ON ZJCS.DW_GJJ(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX DW_GJJ$_DWXYH ON ZJCS.DW_GJJ(DWXYH ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX DW_JFQK$_DWID ON ZJCS.DW_JFQK(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_BJ$_DWID ON ZJCS.GJJ_BJ(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_BJ$_JSRQ ON ZJCS.GJJ_BJ(JSRQ ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJ$_DWID ON ZJCS.GJJ_HJ(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJ$_JSRQ ON ZJCS.GJJ_HJ(JSRQ ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJBG$_DWID ON ZJCS.GJJ_HJBG(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJBG$_DWID_JSRQ_ZJBZ ON ZJCS.GJJ_HJBG(DWID ASC,JSRQ ASC,ZJBZ ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJBG$_GRID ON ZJCS.GJJ_HJBG(GRID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJQC$_DWID ON ZJCS.GJJ_HJQC(DWID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJQC$_GRID ON ZJCS.GJJ_HJQC(GRID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX GJJ_HJQC$_JSRQ ON ZJCS.GJJ_HJQC(JSRQ ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX UK_SYS_USER$_USER_SID ON ZJCS.SYS_USER(USER_SID ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX UK_YL_YB$_DWXYH_JSRQ_JJLX ON ZJCS.YL_YB(DWXYH ASC,JSRQ ASC,JJLX ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX UK_ZG_HMC$_BZHM ON ZJCS.ZG_HMC(BZHM ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX UK_ZG_JYRY$_BZHM ON ZJCS.ZG_JYRY(BZHM ASC) TABLESPACE ZJIND_BJ;
    CREATE INDEX YL_ZFYB$_BBID ON ZJCS.YL_ZFYB(BBID ASC) TABLESPACE ZJIND_BJ;PL/SQL 过程已成功完成。SQL> 这时就可以删除索引进行LOADER了,完成后执行该脚本,就能把索引重新创建了;
      

  12.   

    不过你最好再加一些条件,因为这里把主健和唯一约束的索引也包含进来了,自己想办法剔除吧,
    提示:可以把包含在USER_CONSTRAINTS中的索引名字剔除
      

  13.   

    还有一个办法
    使用sql* loader的direct path load方式,这种方式下根本就不更新索引,你用不着删除索引,只需要在load完成后rebuild索引就可以了。
    但是这种方法的问题在于:在noarchive mode模式下,不产生redo log。
    不知道满不满足你的需要
      

  14.   

    TO llm06() :
    For both the conventional path and the direct path, SQL*Loader maintains all existing indexes for a table(http://otn.oracle.com/doc/server.804/a58244/ch08.htm#912)
      

  15.   

    WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
    WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
    使用工具:用PL/SQL DEVELOPER