建立索引時遇到 ORA-01129: user's default or temporary tablespace does not exist,直覺會去查表空間是否存在。但本案例揭示:真正原因是 **SQL 語句中的 Schema 名稱拼寫錯誤**,導致 Oracle 拋出誤導性錯誤。記錄完整排查過程與 MOS Bug 參考。
-- 資料庫版本
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
-- 錯誤 SQL
SQL> CREATE INDEX SERIVCE.ind_xifenfei ON SERVICE.t_user(create_date);
ERROR at line 1:
ORA-01129: user's default or temporary tablespace does not exist
SQL> SELECT tablespace_name, contents, status
FROM dba_tablespaces
WHERE tablespace_name IN ('SERVICE','TEMP');
TABLESPACE_NAME CONTENTS STATUS
---------------- ----------- ---------
SERVICE PERMANENT ONLINE
TEMP TEMPORARY ONLINE
✅ 表空間正常上線。
發現 Schema 名稱不一致:
SERIVCE (漏掉第 2 個 'C')SERVICE (正確)SQL> SELECT COUNT(*) FROM dba_users WHERE username = 'SERIVCE';
COUNT(*)
----------
0
❌ 用戶 SERIVCE 不存在。
因 CREATE INDEX 指定的索引擁有者 SERIVCE 不存在,Oracle 內部邏輯嘗試解析該用戶的預設/暫存表空間失敗,拋出 ORA-01129。預期應拋出 ORA-01918: user 'SERIVCE' does not exist。
Bug 17058847:Creating index in non existing schema results in ORA-1129 and not ORA-1918
此為已知缺陷,修正版本請參考 MOS 文檔或升級至修復版本。
-- 修正拼寫
SQL> CREATE INDEX SERVICE.ind_xifenfei ON SERVICE.t_user(create_date);
Index created.
ORA-01129 先別急著查表空間,**優先核對 SQL 中所有 Schema/Object 名稱拼寫**。DBA_USERS、DBA_TABLESPACES、DBA_OBJECTS 快速驗證對象存在性。CREATE INDEX schema.index_name ON schema.table_name(...) 統一前綴,或在 IDE 設定代碼片段減少手誤。