Oracle 數據庫對標識符(表名、列名、索引名等)長度有嚴格限制:
SQL Server 允許更長的對象名(最長 128 字符),遷移時直接執行 DDL 會觸發 ORA-00972: identifier is too long。
在 UTF-8 字符集下:
因此 10 個中文字符 = 30 字節,已達上限;11 個中文字符即超標。
原名 → 縮寫名(如 customer_order_detail_history → cust_ord_dtl_hist)sp_rename 重命名表、列、存儲過程、視圖等Oracle 12.2 引入 MAX_STRING_SIZE = EXTENDED,將限制擴展到 128 字節:
-- 需以 SYSDBA 權限執行
ALTER SYSTEM SET MAX_STRING_SIZE = EXTENDED SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
@?/rdbms/admin/utl32k.sql
SHUTDOWN IMMEDIATE;
STARTUP;
注意:此設置不可逆,且可能影響某些工具兼容性,生產環境謹慎使用。
雙引號允許區分大小寫、包含特殊字符,但不改變 30 字節限制。且後續所有引用都必須加雙引號,維護成本極高。
Oracle 的 30 字節限制是硬性約束,根治之道是在遷移前按規範重命名。若已在 Oracle 12.2+ 且評估風險可控,可開啟 EXTENDED 模式作為過渡,但長期仍應遵循短命名規範。