作者kobedisel (NO)
看板Database
标题Re: [SQL ] 请ORACLE高手解答,谢谢
时间Mon Aug 30 22:08:36 2010
建议如果有权限足够的话,查dba_ 开头的data dictionary比较好,
all_ 开头的只能看到目前登入user所能看到的。
而table与index 可查询的view是分开的,在pdm_table tablespace查table
可用dba_tables owner = [table owner],查询index 使用dba_indexes 查indexs,
而index 与table 这两种是不同种object type,因此你在all_tables 查不到index,
在all_indexes查不到table。
另外
alter index PDM_PIVSECTXN_FK2 rebuild;
有错误是因为未指定schema name,大部分我们再使用sys 管理其他owner的object的时候
都会在开头加上schema name,除非已有建立public synonyms 或private synonyms
才不须指定 schema name。
建立新的object,如未加上schema name就会建在登入user的default tablespace底下
object owner也会属於登入的owner。
另外如果server是多cpu可依照cpu数量,使用rebuild parallel 指令去rebuild index
rebuild 并不一定会比重新create 来的慢。
以上是小弟的建议,如与有小弟持不同意见者,请多多包涵。
※ 引述《fooker ()》之铭言:
: 感谢各位
: 小弟资料库有两个tablespace:
: 一个"PDM_TABLE"存放table
: 一个"PDM_INDEX"存放index
: 查询 tablespace 所有table
: select table_name from all_tables where tablespace_name='PDM_INDEX'; 结果:no
: rows selected
: select table_name from all_tables where tablespace_name='PDM_TABLE'; 结果:有一
: 大串table
: 查询 tablespace 所有index
: select index_name from all_indexes where tablespace_name='PDM_INDEX'; 结果:有
: 一大串INDEX
: select index_name from all_indexes where tablespace_name='PDM_TABLE'; 结果:no
: rows selected
: tablespace PDM_INDEX里有一大串INDEX,里面明明有列出小弟欲重建的
: "PDM_PIVSECTXN_FK2"
: 重建
: alter index PDM_PIVSECTXN_FK2 rebuild;
: 却显示:
: ERROR at line 1:
: ORA-01418: specified index does not exist
: 而想新建立index
: create index PDM_PIVSECTXN_FK2 on PDM_PIVSECTXN (pivid);
: 显示
: ERROR at line 1:
: ORA-00942: table or view does not exist
: 但table "PDM_PIVSECTXN"明明存在tablespace "PDM_TABLE"
: 不晓得哪里有问题,似乎是原本的table index都不让人动?
: 可以新create 同名table PDM_PIVSECTXN 会存在在'PDM_INDEX'里
: 然後也可以新create index PDM_PIVSECTXN_FK2在 新PDM_PIVSECTXN 里
: 但解决不了软体错误问题...orz
: 资料库好像超难的....
: ※ 引述《fantasyj (如梦似幻)》之铭言:
: : 语法:
: : create unique index <index name> on <table name> (columns name)
: : tablespace <tablespace name>;
: : create index <index name> on <table name> (columns name)
: : tablespace <tablespace name>;
: : 例如:
: : create unique index AOM.AOM_EO_DELAYS_U1 on AOM.AOM_EO_DELAYS (EO_DELAY_ID)
: : tablespace AOMX
: : pctfree 10
: : initrans 2
: : maxtrans 255
: : storage
: : (
: : initial 40K
: : next 40K
: : minextents 1
: : maxextents 505
: : pctincrease 0
: : );
: : ps:上面举例的额外的设定参数,没加也没关系,会自动依该db的预设值...
: : 若是复合型index,只要在columns name内用一起输入即可
: : create index AOM.AOM_EO_DELAYS_U1 on AOM.AOM_EO_DELAYS (EO_DELAY_ID, MST_ID)
: : tablespace AOMX;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.172.177
1F:推 fantasyj:无论如何,不管是table or index,实务上都是create比较快. 08/31 09:49
2F:→ fantasyj:这是跟db特性与oracle自己本身的cbo有所影响 08/31 09:54
3F:推 fantasyj:sorry,以上自己说法错误,确实在这种情况下rebuild快orz 08/31 13:36
4F:推 iamnotfat:rebuild nologging 也可增加速度~ 09/03 18:57