Oracle常見錯誤問題收集和解決方案

1、rman下備份數據庫時,cannot reclaim XXX bytes disk space from XXX limit

問題描述:問題是在db_recovery_file_dest_size 備份時沒有足夠的空間造成的
解決方案:爲db_recovery_file_dest_size 添加或清理空間:
SQL> show parameter db_recovery_file_dest
SQL> alter system set db_recovery_file_dest_size=10G scope=both;
SQL> alter system set log_archive_dest_1='LOCATION=F:\oradata\orcl\frarea' scope=both ;
或
查看歸檔日誌
RMAN> list archivelog all;
使用目標數據庫控制文件替代恢復目錄
可以先把歸檔日誌備份到其他的空間,然後用rman刪除歸檔日誌;
RMAN> delete archivelog all;
-------------------------------------------------------------------------------------------------------------------------------------------------------------
2、rman下備份數據庫時,ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
問題描述:問題是數據庫日誌模式爲NOARCHIVELOG 備份時修改爲ARCHIVELOG模式。
解決方案:修改數據庫爲歸檔模式:
詳細請參考:http://blog.csdn.net/hbtianmimi/article/details/9094971
-------------------------------------------------------------------------------------------------------------------------------------------------------------
3、Oracle報ORA-01078和LRM-00109錯解決方法
 問題描述:
ORA-01078: failure in processing system parameters      
LRM-00109: could not open parameter file '/oracle/product/11.1.0/dbs/initorcl.ora' 
解決方法:將$ORACLE_BASE/admin/數據庫名稱/pfile目錄下的init.ora.012009233838形式的文件copy 到$ORACLE_HOME/dbs目錄下initoracle.ora即可。(注:initoracle.ora中的oracle爲你的實例名 ORACLE_SID)     
比如:cp /oracle/admin/xok/pfile/init.ora.75200916276 /oracle/product/11.1.0/dbs/initorcl.ora

-------------------------------------------------------------------------------------------------------------------------------------------------------------
4、ORA-00845 MEMORY_TARGET not supported on this system (oracle11g for asianux3 )

問題描述:這個問題是由於設置SGA的大小超過了操作系統/dev/shm的大小:
解決方案:一種是修改初始化參數,使得初始化參數中SGA的設置小於/dev/shm的大小,另一種方法就是調整/dev/shm的大小。
[root@db2  ~]# df  -h  /dev/shm    //查看/dev/shm大小
tmpfs                 1.0G  500M  500M 50%  /dev/shm
[root@db2 ~]#vi /etc/fstab      //更換/dev/shm默認大小爲2G
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
#tmpfs                   /dev/shm               tmpfs   defaults        0 0
tmpfs                   /dev/shm     tmpfs   defaults,size=2048M  0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-hda3         swap                    swap    defaults        0 0
//注:本行defaults,size=10240M 中間無空格
[root@db2 ~]#
[root@db2 ~]# umount /dev/shm
[root@db2  ~]# mount /dev/shm
[root@db2  ~]# df  -h
/dev/hda2             8.2G  4.1G  3.8G  53% /
/dev/hda1              92M   12M   75M  14% /boot
tmpfs                 2.0G  240M  1.8G  12% /dev/shm
/dev/sda              7.9G  7.5G   39M 100% /array
修改/etc/fstab,重新mount /dev/shm,然後就可以啓動數據庫了。
詳細請參考:http://ibmcn.blog.51cto.com/510174/766996

-------------------------------------------------------------------------------------------------------------------------------------------------------------
5、ORA-01102: cannot mount database in EXCLUSIVE mode

問題描述:出現ORA-1102錯誤可能有以下幾種可能:
一、在HA系統中,已經有其他節點啓動了實例,將雙機共享的資源(如磁盤陣列上的裸設備)佔用了;
二、說明Oracle被異常關閉時,有資源沒有被釋放,一般有以下幾種可能,
1、 Oracle的共享內存段或信號量沒有被釋放;
2、 Oracle的後臺進程(如SMON、PMON、DBWn等)沒有被關閉;
3、 用於鎖內存的文件lk<sid>和sgadef<sid>.dbf文件沒有被刪除。
 
第一點,可以通過在備節點上查數據庫狀態來判斷是否已啓動實例。
第二點,如果系統是因爲斷電引起數據庫宕機的,並且系統在接電被重啓後,我們可以排除第二種可能的1、2點。接下來考慮第3點。
查$ORACLE_HOME/dbs目錄:
[oracle@localhost dbs]$ ls sgadef*  
ls: cannot access sgadef*: No such file or directory  
[oracle@localhost dbs]$ ls lk*  
lkORCL  
[oracle@localhost dbs]$   
lk<sid>文件沒有被刪除。將它刪除掉
[oracle@localhost dbs]$ rm lkORCL  
再啓動數據庫,成功。

如果是Oracle進程沒有關閉,用以下命令查出存在的oracle進程:
[root@localhost dbs]# ps -ef|grep oracle  
root      2310  2358  0 16:00 pts/0    00:00:00 su - oracle  
oracle    2311  2310  0 16:00 pts/0    00:00:00 -bash  
root      2427  2403  0 10:47 pts/1    00:00:00 su - oracle  
……   

然後用kill -9命令殺掉進程
$kill -9 <PID>
 
總結:
當發生1102錯誤時,可以按照以下流程檢查、排錯:
1.如果是HA系統,檢查其他節點是否已經啓動實例;

2.檢查Oracle進程是否存在,如果存在則殺掉進程; 
3.檢查信號量是否存在,如果存在,則清除信號量;

4.檢查共享內存段是否存在,如果存在,則清除共享內存段; 
5.檢查鎖內存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,則刪除。
詳細請參考:http://blog.csdn.net/jscpb/article/details/6790653

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章