2010-01-04 69 views
6

我在this article中發現,既然ORACLE 10g有一種方法可以使用ALTER SESSION來使特定的連接會話比較字符串不區分大小寫,而不需要任何瘋狂的SQL函數。默認情況下ORACLE 11g不區分大小寫

有誰知道,在11g中,有可能是一種方法,使數據庫總是在這種模式下所有的新連接的會話運行在默認情況下,從而消除了對運行在每次連接ALTER SESSION S上的需求?

或者,也許,你可以在連接字符串上指定一個額外的參數,可以打開相同的?

回答

6

只需將文章中提到的NLS_SORT,NLS_COMP參數設置爲使用alter system set <parameter> = <value>;子句的Oracle init文件中的值即可。

使用alter system命令的信息可以在here找到。

這裏是一個很好的link關於NLS_*參數的正確用法。請注意,NLS_SORT參數的某些設置可能會導致性能問題,即未設置爲BINARY時。甲骨文文檔狀態:

設置NLS_SORT到其他 比BINARY什麼導致一種使用 全表掃描,無論通過優化程序選擇的 路徑。二進制 是例外,因爲索引是根據 鍵的二進制順序構建的 。因此,當NLS_SORT設置爲BINARY時,優化程序可以使用 索引來滿足ORDER BY子句 。如果 NLS_SORT設置爲任何語言 排序,則優化程序必須在 執行計劃中包含 全表掃描和完整排序。

+0

雖然這個報價是從Oracle文檔, 「無論優化程序選擇的路徑如何」也沒有意義。更有用的參考資料是 http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch5lingsort.htm#sthref650 – 2010-01-04 21:56:20

+1

「正確使用NLS_ *參數的良好鏈接」我在答覆中提供的鏈接和信息與您提供的鏈接相同,只是我的答案中的鏈接來自11g文檔。 – 2010-01-05 00:33:40

+0

我正在處理這個問題,我發現爲了避免性能問題,可以爲該列創建一個CI索引:在table_name上創建索引index_name(NLSSORT(column_name,'NLS_SORT = BINARY_CI')); [參考資料](http://geekzspot.blogspot.com.es/2010/01/case-insensitive-oracle-database.html) – Marc 2013-04-10 15:27:45

3

當然可以!

獲得UR友好DBA來設置這些PARAMATERS:

ALTER SYSTEM SET NLS_COMP =語言範疇SPFILE;

ALTER SYSTEM SET NLS_SORT = BINARY_AI SCOPE SPFILE;

這是從我的短文章採取How to make Oracle Case Insensitive

+0

RC的答案是什麼?這樣做是否會完全破壞系統的性能,這似乎表明了這一點? – eidylon 2010-03-02 02:50:35

3

我使用logon trigger發出這些命令來獲取不區分大小寫的查詢嘗試:

execute immediate 'alter session set NLS_SORT=BINARY_CI'; 
execute immediate 'alter session set NLS_COMP=LINGUISTIC'; 

儘管這的確給我CI,它也給了我難以置信的糟糕的性能問題。我們有一張特別的表,如果沒有這些設置,插入需要2毫秒。使用這些設置,插入花費了3 。我通過多次創建和刪除觸發器來確認這一點。

我不知道在系統級別執行操作,而不是觸發器的會話級別,會影響與否。

+1

Eeks!這是相當可怕的表現!我不敢相信ORACLE還沒有加入更好的支持。我的意思是,如果你正在搜索發票或評論,筆記或幾乎任何常見的文本字段,你真的不在乎是否有人寫道「把貓帶到獸醫」或「把貓帶到獸醫」。 – eidylon 2011-07-11 14:17:43

+1

昨天我們與甲骨文顧問會面之後,我們發現使用這兩個設置的訣竅是您必須在很多地方放置功能索引。在我們的例子中,我們使用varchar2(32)UUID作爲主鍵。由於有兩個NSL設置,所以沒有使用正常的PK索引。我們必須添加索引,如 在Person上創建索引foo_ok(nlssort(Id,'NLS_SORT = BINARY_CI')); 我們所有的PK。 – 2011-07-12 14:54:21

+1

Egads!將「黃昏地帶」與「黃昏地帶」作爲同一件事,這是很多工作。 – eidylon 2011-07-13 03:45:04

0

我發現與11g r2中的inserts和nls相同的性能問題!幸運的是,對於我來說,性能的提升還不夠明顯,需要改變應用程序。

如果你可以不binary_ci爲INSERT這樣做,那麼我只想插入事後之前做一個ALTER會議,所以你不必刪除觸發器

相關問題