RHEL6上安裝的oracle11g中,手動建庫出現的問題

jinqibingl發表於2012-10-04

RHEL6上安裝的oracle11g中,手動建庫出現的問題  

1、簡單建立了INIT.ORA後,進入SQLPLUS,第一次進入還是好的,後來在STARTUP NOMOUNT的過程中,出現了ORA-09925,最後原因居然是有個檔案許可權錯誤,$oracle_home/bin/oracle檔案許可權錯誤,由於加入了selinux安全機制,所以難度增加了,開始的時候,這個檔案的許可權是6751,需要改成6755,然後就對了。這裡要注意學習下,selinux安全機制後,檔案許可權另外加入了一組,就是第一個數字,分別為--s--s--t,還是421,但是要注意加起來哈。
2、手動建庫,主要涉及資料庫檔案、聯機重做日誌、控制檔案三種檔案相關,如果第一次失敗,記得檢視這三種檔案的位置,有沒有檔案,如果有,就刪除,再重新做。
3、啟動引數檔案中,oracle描述最少需要三個引數,分別是DB_NAME、CONTROL_FILES、MEMORY_TARGET
,如果提供的引數檔案很多的可選專案,可以用命令先去掉:cat init.ora |grep -v ^$ |grep -v ^# >initorcl.ora,這個命令可以去掉所有行中帶有#和$標記的所有行,比較好用。
4、建庫的SQL語句,在聯機文件中有,再database administration的administrator's guide中,2 Creating and Configuring an Oracle Database 的Step 9: Issue the CREATE DATABASE Statement,這裡有模板,可以照搬,基本有效,只要改下檔案位置。這個最好是建立SQL執行檔案,一個一個的命令輸入太麻煩,關鍵是容易出錯,導致前功盡棄。
5、下一步需要做建立資料庫後,如果把建立好的資料庫註冊到監聽器中,這一步一直沒有成功。
6、試驗了一個有趣的命令,就是手動的刪除資料庫,drop database,我開始還以為不能用,但是sqlplus沒有直接提示不能用,而是提示要求再mount模式下,最後試驗的結果是,就是可以用這個命令,再sqlplus中,啟動資料庫到mount的restricted狀態,可以這樣用:
sql>startup mount restrict
sql>drop database;
完成後,資料庫確實被刪除了,而且,系統中相關連的物理檔案也被刪除了。命令本身,相當簡單,不過對於生產庫來說,風險太大了。
7、這上面,還少說了一個必要的環境引數,因為我一開始就設定再oracle使用者的登入指令碼中了,所以這裡還是要提示下,唯一一個必要的環境引數就是ORACLE_SID,可以再BASH中直接輸入export ORACLE_SID=orcl,然後用env |grep ORACLE來檢查下。
8、在建立了最簡單的INIT.ORA檔案後,進入sqlplus之後,第一步是建立server parameter file,複雜了,其實就是SPFILE,^_^。create spfile from pfile,就是命令就可以了,然後再進行下一步。
9、現在應該是建立好了資料庫,然後就是建立監聽器,監聽器引數的位置,應該是在$ORACLE_HOME/network/admin下,建立好引數檔案,注意題目要求的監聽埠,預設是1521,也可以是其他埠,對於監聽器的設定,倒是很容易,只有一個lsnrctl,如果不知道位置,就用which lsnrctl,不過用這個之前,檢查oralce使用者的PATH環境引數值,這個裡面要包含有$ORACLE_HOME/bin才行,如果沒有的話,估計找不到。執行oracle$ lsnrctl後,就進入了lsnrctl程式中,很簡單了,先用help看下命令,然後照做就行,當然還是要引數設定正確才行。
10、2011-7-17的手動建立比較順利。對於INIT.ORA,預設的有個INIT.ORA檔案,裡面引數一般都正確,主要是memory_target這個引數,好像有要求,根據機器硬體要求,現在還不知道具體要求是什麼。注意修改具體檔案位置,而且要注意給的INIT檔案好像是在windows下的格式,裡面的不適合linux下的,要改成$ORACLE_BASE,一定要注意檔案位置設定的正確性,這次居然把控制檔案弄錯了,居然生成了control01.ctl>,這樣的檔案,就是書寫沒有仔細看的緣故。

11、資料庫建立後,記得執行SQL語句建立資料字典和檢視,聯機文件上具有要求,要求安裝3個SQL,$ORACLE_HOME/rdbms/admin/catalog.sql 、 $ORACLE_HOME/rdbms/admin/catproc.sql、 $ORACLE_HOME/sqlplus/admin/pupbld.sql,這個不需要記檔案位置,在聯機文件上都有。

12、對於監聽器,預設的監聽引數檔案在$ORACLE_HOME/network/admin/samples下面,只用cat輸出到上一層目錄,主要裡面只需要用listener的引數設定就行,裡面要注意就是HOST的引數,要和主機名一致,其他的不要動。然後再LSNRCTL下,用START啟動監聽,啟動後,再資料庫SQLPLUS中用動態註冊,就是:alter system register。然後再lsnrctl中用status檢視狀態。一般情況下,已經註冊了。

13、RHEL6的防火牆要注意,再點了disable firewall這個後,一定要再點下apply,這個是確定的意思,要不然沒用,防火牆還沒被關閉。當然也可以只開放1521埠,如果監聽器再其他埠的話,注意埠號。

14、下次試驗不同埠的監聽器設定。

15、在安裝資料庫完成並重啟機器後,使用sqlplus的時候,可能出錯,這個原因是你的使用者環境引數不正確。雖然在你的登入指令碼中設定了export環境引數,但是好像有時候,不管用,有可能提示net service name 錯誤,只要重新設定下ORACLE_BASE、ORACLE_HOME、ORACLE_SID就可以了。為了儘量避免出現錯誤,最好是手動設定環境引數,需要設定的引數一般有4個,分別是ORACLE_BASE、ORACLE_HOME、ORACLE_SID、PATH。

16、在剛開始手動建庫的時候,進去sqlplus後,startup nomount的時候,有可能出現ora-00845錯誤:memory_target  not supported in this system。就是系統不支援這個引數的數值。這個與系統tmpfs檔案有關,一般是tmpfs檔案系統太小導致的,用df命令檢視tmpfs大小。從現在情況看來,新的伺服器即使帶有16G記憶體,也有可能因為tmpfs的大小,導致這個錯誤,也就是說memory_target引數和kernel.shmmax及tmpfs大小都有關,kernel.shmmax設定是要避免將oracle程式切成多個片段,而tmpfs將直接導致是否支援目前memory_target引數大小。tmpfs的大小,最大是實體記憶體和SWAP空間之和,所以只要比設定的memory_target大,而比實體記憶體和SWAP空間之和小就可以了。要修改tmpfs大小,修改/etc/fstab中設定,對tmpfs改成這樣:tmpfs /dev/shm tmpfs defaults,size=1G 0 0,儲存,然後 # mount -o remount /dev/shm就可以了。

 17、修改了tmpfs大小後,關閉資料庫重啟機器,然後進入sqlplus中啟動資料庫,還是提示ora-00845錯誤。這個是因為的fstab中沒有設定對,如果只是臨時的使用,可以這樣設定tmpfs /dev/shm tmpfs defaults,size=1G 0 0,這由於有defaults這個,所以重啟之後還是使用了defaults,如果要永久改變的話,這樣設定tmpfs /dev/shm tmpfs size=1G 0 0。

18、要注意環境引數不僅僅是對sqlplus,對其他程式也是非常有用。比如lsnrctl程式,在設定了PATH引數但是沒有設定ORACLE_HOME等引數的BASH中,進入lsnrctl程式之後,執行status的時候提示錯誤:message 1053 not found;no message file for,就是找不到引數檔案,因為沒有ORACLE_HOME引數的緣故。

19、對於非預設埠的監聽,還在繼續實驗中,太難了。
20、非預設埠的監聽設定,終於做完了。這個設定,從listener.ora開始:

LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
      )
    )
  )
要注意到,這個設定和listener檔案模板是不一樣的,多了兩行,就是多出來的兩行的,才能讓lsnrctl認到這個LISTENER2。引數檔案設定好了之後,執行lsnrctl start listener2,可以看到順利啟動的提示,並且注意啟動監聽的埠號。由於PMON程式,預設是在1521埠上進行註冊的,所以這時候資料庫動態註冊是失敗的,也就是沒有註冊。進入sqlplus,啟動資料庫後,修改local_listener引數:alter system set local_listener="(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))",“”裡面的字串可以直接從監聽引數檔案中複製,執行成功後,可以不管他了。在bash中,輸入 lsnrctl status listener2,來查詢註冊情況,一般情況下是註冊成功了的。
21、雖然在/etc/fstab 中,設定了tmpfs /dev/shm tmpfs size=1G 0 0,但還是沒有成功了,這次只是不需要在修改/etc/fstab了,直接用 mount -o remount /dev/shm就可以了。在每次啟動機器後,每次都要輸入環境引數,確實太麻煩了,所以還是在/etc/profile指令碼中,直接輸入了:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_SID=orcl
PATH=/u01/app/oracle/product/11.2.0/dbhome_1/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9606200/viewspace-745651/,如需轉載,請註明出處,否則將追究法律責任。

相關文章