一次資料庫無法啟動問題的處理-ORA-00845

to_be_Dba發表於2012-11-07

問題描述:
虛擬機器上的兩個例項都連線不上。現象如下。
我嘗試將listener.ora、tnsnames.ora備份後,用netca重建兩個檔案以及sqlnet.ora,但沒有任何效果。

現象為:
[oracle@localhost ~]$ set oracle_sid=testdb
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 2 04:39:40 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn /as sysdba
Connected to an idle instance.

SQL> startup nomount
ORA-00845: MEMORY_TARGET not supported on this system

SQL> exit      
Disconnected

[oracle@localhost ~]$ pwd
/u01/oracle
[oracle@localhost ~]$ cd network/admin
[oracle@localhost admin]$ ll
total 88
-rw-r--r-- 1 oracle oinstall  293 Oct 27 11:35 listener12102711AM3507.bak
-rw-r--r-- 1 oracle oinstall  293 Oct 27 05:59 listener1210275AM5907.bak
-rw-r--r-- 1 oracle oinstall  293 Oct 27 09:00 listener1210279AM0036.bak
-rw-r--r-- 1 oracle oinstall  420 Nov  2 03:53 listener1211023AM5358.bak
-rw-r--r-- 1 oracle oinstall  293 Nov  2 04:24 listener1211024AM2452.bak
-rw-r--r-- 1 oracle oinstall  293 Nov  2 04:27 listener.ora
-rw-r--r-- 1 oracle oinstall  489 Oct 27 09:51 listener.ora-tianleibak
drwxr-xr-x 2 oracle oinstall 4096 Oct 26 18:45 samples
-rw-r--r-- 1 oracle oinstall  187 May  9  2007 shrept.lst
-rw-r--r-- 1 oracle oinstall  212 Oct 27 11:35 sqlnet12102711AM3507.bak
-rw-r--r-- 1 oracle oinstall  212 Oct 27 09:52 sqlnet1210279AM5215.bak
-rw-r--r-- 1 oracle oinstall  213 Nov  2 03:53 sqlnet1211023AM5358.bak
-rw-r--r-- 1 oracle oinstall  213 Nov  2 04:24 sqlnet1211024AM2452.bak
-rw-r--r-- 1 oracle oinstall  212 Oct 28 16:33 sqlnet.orabak-tl
-rw-r--r-- 1 oracle oinstall  213 Nov  2 04:27 sqlnet.orabak-tl-2
-rw-r--r-- 1 oracle oinstall  316 Oct 27 11:35 tnsnames12102711AM3507.bak
-rw-r--r-- 1 oracle oinstall  312 Oct 27 05:59 tnsnames1210275AM5907.bak
-rw-r--r-- 1 oracle oinstall  312 Oct 27 09:00 tnsnames1210279AM0036.bak
-rw-r--r-- 1 oracle oinstall  580 Nov  2 03:53 tnsnames1211023AM5358.bak
-rw-r--r-- 1 oracle oinstall  580 Nov  2 04:24 tnsnames1211024AM2452.bak
-rw-r--r-- 1 oracle oinstall  490 Nov  2 04:27 tnsnames.ora
-rw-r----- 1 oracle oinstall  312 Oct 27 09:51 tnsnames.ora-tianleibak


[oracle@localhost admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-NOV-2012 04:41:44

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
[oracle@localhost admin]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-NOV-2012 04:42:00

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Starting /u01/oracle/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /u01/oracle/network/admin/listener.ora
Log messages written to /u01/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                02-NOV-2012 04:42:01
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/oracle/network/admin/listener.ora
Listener Log File         /u01/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
The listener supports no services
The command completed successfully


由於報出的問題是連線方面的,因此一直在幾個檔案上查詢原因。但可以確定,並未手工進行檔案的修改。
又進行了一遍分析,覺得這個操作比較可疑:
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

[oracle@localhost alert]$ oerr ora 00845
00845, 00000, "MEMORY_TARGET not supported on this system"
// *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was

not sized correctly on Linux.
// *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to

be at least the SGA_MAX_SIZE on each Oracle instance running on the system.


[oracle@localhost admin]$ df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                         17824     14033      2872  84% /
/dev/sda1                   99        12        82  13% /boot
tmpfs                      484       232       252  48% /dev/shm
/dev/hdc                  2875      2875         0 100% /media/RHEL_5.3 i386 DVD

[oracle@localhost dbs]$ strings spfiletestdb.ora |grep memory
*.memory_target=403701760

/dev/shm中的可用空間時252M,而引數檔案中配置的大小是近400M,看來問題出在這裡。

因此想到將memory_target引數暫時改小一點,但又不知道如何生效。
網上查詢了一下,一篇很有幫助的部落格:http://ibmcn.blog.51cto.com/510174/766996
按其方法嘗試:

[root@localhost ~]# umount /dev/shm
[root@localhost ~]# mount /dev/shm
[root@localhost ~]# df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                         17824     14036      2868  84% /
/dev/sda1                   99        12        82  13% /boot
tmpfs                     1024         0      1024   0% /dev/shm
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ set oracle_sid=testdb
[oracle@localhost ~]$ sqlplus /nolog
conn /as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 2 07:02:03 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL>
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.

Total System Global Area  405929984 bytes
Fixed Size                  1336848 bytes
Variable Size             310381040 bytes
Database Buffers           88080384 bytes
Redo Buffers                6131712 bytes
SQL> alter database mount
  2  ;

Database altered.

SQL> alter database open;

Database altered.

終於成功了

=========================================
那麼剛才想到的修改引數的方法怎麼做呢?

我們用該虛擬機器上的另一個資料庫來實驗。(故障現象是一樣的,db_name=succ)
[root@localhost dbs]# pwd
/u01/oracle/dbs
[root@localhost dbs]# strings spfilesucc.ora >pfilesucc.ora 
[root@localhost dbs]# cat pfilesucc.ora |grep mem

//結果為空
[root@localhost dbs]# su - oracle
[oracle@localhost ~]$ set oracle_sid=succ
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 2 08:04:03 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  405929984 bytes
Fixed Size                  1336848 bytes
Variable Size             310381040 bytes
Database Buffers           88080384 bytes
Redo Buffers                6131712 bytes
Database mounted.
Database opened.

很遺憾,另一個資料庫中沒有引數memory_target。

而我想到的方法:通過spfile生成pfile,再對其修改然後用其啟動資料庫的方法 無法驗證。感覺上可能會有問題,不過也算是一種思路,記錄下來吧!

 

另外查了一下/dev/shm,這是一個類似虛擬磁碟的掛載點,成為tmpfs,可以使用RAM,也可以使用交換分割槽來儲存,系統重啟後將釋放,處理速度很快。

=======================================
然後說說我對這三個檔案的認識,供拍磚。
listener.ora
監聽檔案,告訴oracle需要在哪臺伺服器的哪個埠上用什麼協議監聽,通過netca/listener configuration配置

tnsnames.ora
網路服務名配置檔案,將完整的連線名稱轉化為一個別名,從而方便使用者呼叫,通過netca/Local Net Service Name Configuration配置

sqlnet.ora
11g中可以不存在此物理檔案。儲存了密碼驗證方式、資料錢包等資訊,主要是安全性方面的配置,通過netca/Naming Method Configuration新增

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

相關文章