作者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
推 fantasyj:無論如何,不管是table or index,實務上都是create比較快. 08/31 09:49
→ fantasyj:這是跟db特性與oracle自己本身的cbo有所影響 08/31 09:54
推 fantasyj:sorry,以上自己說法錯誤,確實在這種情況下rebuild快orz 08/31 13:36
推 iamnotfat:rebuild nologging 也可增加速度~ 09/03 18:57