1. 程式人生 > >informix臨時表的存放位置

informix臨時表的存放位置

根據informix的語法手冊,create temp table或者select ... into temp語句,會顯式建立臨時表,如果在語句中沒有包含存放位置子句的話,臨時表的存放位置應該放在環境變數DBSPACETEMP或者ONCONFIG 引數DBSPACETEMP所指定的Dbspace中。
但是在實踐中,發現事實並非如此,如果create temp table沒有帶with no log子句,那麼該臨時表不會放到DBSPACETEMP所指定的Dbspace,而是放到informix的系統Dbspace——rootdbs。
經過查詢資料,終於弄明白原因所在。
通常使用者建立的Dbspaces(相當於oracle中的tablespace)都是帶日誌功能的,但臨時型別Dbspace(建立時指定Temp標誌為Y)例外,是不帶日誌功能的。
建立臨時表時,如果沒有指定with no log子句,那麼informix就會根據表所在資料庫的日誌模式,來設定表的日誌模式。大多數情況下,我們使用者為了保證資料可靠性,都會開放資料庫日誌模式。於是,informix只能選擇那些帶日誌功能的Dbspaces來存放臨時表,而不幸的是,管理員總是把一些臨時型別Dbspace列在 DBSPACETEMP變數中。這就出現——雖然指定DBSPACETEMP,但informix仍然把臨時表放在rootdbs的問題。
解決方法就是在DBSPACETEMP變數中,新增一些非臨時型別的Dbspace(臨時和非臨時Dbspaces可以共存)。
另:DBSPACETEMP變數應該還要放一些臨時型別的Dbspace,用於那些非顯式生成臨時表的情況,例如:大表join,排序等等