ORA-12547經典錯誤處理

wuweilong發表於2012-04-10

ORA-12547經典錯誤處理

      今天上午10:30左右,領導告知我,讓我幫一同事將ORACLE安裝下,他在安裝的過程中出現了問題,報錯,無法繼續安裝。
     
一、由於NLS_LANG設定錯誤,導致ora-12547錯誤
      我過去看了看,發現在AIX5.3系統中使用DBCA建庫到最後一步點完成後立即就出現了ORA-12547 tns lost connect  這個錯誤,當時感覺挺蹊蹺的,隨後對系統的環境做了詳細檢查,非同步IO是開啟來的,HOST檔案也是正常的,引數檔案貌似也沒有太大的問題,ulimit限制也都改成了-1; 也沒有發現有明顯的問題,安裝日誌裡面是已經告訴說是作業系統環境不滿足。當時實在是查不出來到底是什麼原因導致就把之前安裝的DBSOFT給刪除了,重新進行DBSOFT的安裝和建庫,DBSOFT的安裝中沒有報任何錯,到最好還是一樣的問題,只好再次進行再次的檢查,發現了在oracle使用者環境配置檔案裡[db:oracle]$cat~/.profile裡發現了NLS_LANG=ZHS16GBK這個引數,後面想想看這個引數並不是必須的,而且有可能會導致安裝的時候報錯,隨即將其禁用掉,引數檔案如下:$ cat .profile


PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.
export PATH
if [ -s "$MAIL" ]           # This is at Shell startup.  In normal
then echo "$MAILMSG"        # operation, the Shell checks
fi                          # periodically.
ORACLE_BASE=/oracle
ORACLE_SID=orcl
ORACLE_HOME=$ORACLE_BASE/app/10.2.0/db_1
#NLS_LANG=ZHS16GBK
PATH=$ORACLE_HOME/bin:$PATH:
export  ORACLE_BASE ORACLE_SID ORACLE_HOME  PATH
$
   將其禁用後,再次DBCA建庫,故障沒有再重現,成功建庫。
  
二、dbca建庫出現這個問題,後面在網上搜尋了下,基本上是由如下四種原因導致:
  1、非同步IO導致dbca報ORA-12547
解決辦法:
  AIX:
  a、smitty chaio  (只有AIX 5系列支援)
  b、把STATE to be configured at system restart 設定成available
  c、再次執行DBCA建立成功
  HP-UNIX 可以參考(Metalink Note:139272.1)
 
  a. 建立aio字元裝置
   # /sbin/mknod /dev/async c 101 0x0
   # chown oracle:dba /dev/async
   # chmod 660 /dev/async
 
  b.用sam調整核心引數
     -> Kernel Configuration
        -> Drivers
           -> 選擇'asyncdsk'
           -> Actions>Add Driver to Kernel. (此時pending state由out變為in狀態)
      -> Kernel Configuration
        -> Configurable Parameters
           -> max_async_ports
              設定為初始化檔案中的'processes'值+oracle後臺程式數 (根據v$bgprocess,單例項後臺程式數最多為78個)
 
  c. 用sam設定aio_max_ops
     -> Kernel Configuration
        -> Configurable Parameters
           -> aio_max_ops
           -> 可設定為預設值2048
       
  以上配置,主機需重構核心,重啟.   
  d. 設定oracle使用者必須有MLOCK許可權。
   a. 設定dba組的MLOCK的許可權
      roolt#setprivgrp dba MLOCK
 
    b. 避免重啟後失效,需要設定:
       vi /etc/privgroup 新增如下行:
       dba MLOCK
  e.檢查一下aio是否生效了
   #fuser /dev/async
   有程式列出來說明aio已經生效了。
 
 
 
  2、ulimit預設值沒有修改
解決辦法:
  Linux
  a、修改limits引數檔案,新增如下內容
  vi /etc/security/limits.conf
  oracle soft nproc 2047
  oracle hard nproc 16384
  oracle soft nofile 1024
  oracle hard nofile 65536

  AIX
  a、修改limits引數檔案,在最後如下新增如下內容:(注:-1為無限制使用)
  vi /etc/security/limits
default:     
fsize = -1   
core = 2097151
cpu = -1     
data = 262144
rss = 65536  
stack = 65536
nofiles = 2000
root: 
daemon:
bin:  
sys:  
adm:  
uucp: 
guest:
nobody:
lpd:  
oracle:  
data = -1
stack = -1


  3、Linux 下SELinux配置不正確,解決辦法
  a、用root使用者登入系統執行 setenforce 0   (不需要重啟)
  b、修改/etc/selinux/config檔案中的SELINUX="" 為 disabled ,需要重啟

 

  4、libaio(x86_64) is not installed(同AIX一樣,是開啟非同步IO,在Linux下打這個包)
解決辦法:
a、插入作業系統安裝光碟
b、root使用者登入系統掛載作業系統安裝光碟:
   #mount -t iso9660 /dev/cdrom /mnt
   #cd /mnt/Server
c、檢查並安裝libaio包,執行如下命令
   #rpm -qa| grep -i ^libaio
   #rpm -ivh libaio-*.i386.rpm
   #rpm -ivh libaio-*.x86_64.rpm
d、檢查剛才安裝的包是否成功
   #rpm -qa | grep ^libaio
e、再次執行安裝,問題解決

 

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

相關文章