首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle ORA-01129 錯誤排查:用戶名拼寫錯誤導致的誤導性錯誤訊息

     編輯:Oracle 資料庫相關知識

建立索引時遇到 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

二、排查步驟

1. 確認表空間存在

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

✅ 表空間正常上線。

2. 檢查 SQL 語句細節

發現 Schema 名稱不一致:

  • 索引擁有者寫為 SERIVCE (漏掉第 2 個 'C')
  • 表擁有者寫為 SERVICE (正確)

3. 驗證用戶是否存在

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。

四、MOS Bug 確認

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.

六、教訓總結

  1. 遇到 ORA-01129 先別急著查表空間,**優先核對 SQL 中所有 Schema/Object 名稱拼寫**。
  2. Oracle 錯誤碼有時具有誤導性,結合上下文 (DDL 對象、用戶存在性) 綜合判斷。
  3. 善用 DBA_USERS、DBA_TABLESPACES、DBA_OBJECTS 快速驗證對象存在性。
  4. 開發規範:建議使用 CREATE INDEX schema.index_name ON schema.table_name(...) 統一前綴,或在 IDE 設定代碼片段減少手誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved