Oracle 常見錯誤及解決辦法


Ø  簡介

本文主要記錄 Oracle 常見錯誤及解決辦法,包括以下內容:

1.   ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效

2.   ORA-01034: ORACLE not available

3.   ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(啟動數據庫報錯)

4.   ORA-12154: TNS: 無法解析指定的連接標識符

5.   ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

6.   ORA-12541: TNS:no listener

7.   ORA-12560: TNS: 協議適配器錯誤

8.   ORA-27125: unable to create shared memory segment(啟動數據庫報錯)

9.   ORA-28040: 沒有匹配的驗證協議11g dblink 連接 12c 時)

 

1.   ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效

n  錯誤原因

由於其他 Session 已經對目標表做了操作,並且已經有排他鎖在表上了,所以新的 Session 無法再對表進行DDL操作。

 

n  解決辦法

system 用戶登錄:

1)   查詢被鎖的會話ID

select session_id from v$locked_object;

 

2)   查詢 sid, serial# 字段

SELECT sid, serial#, username, osuser FROM v$session where sid = 9;

 

3)   將鎖定的會話關閉

ALTER SYSTEM KILL SESSION '9,99';

 

2.   ORA-01034: ORACLE not available

1)   檢查當前數據庫實例是否啟動

 

3.   ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(啟動數據庫報錯)

n  錯誤描述

SQL> startup 

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated

ORA-01262: Stat failed on a file destination directory

Linux-x86_64 Error: 2: No such file or directory

 

n  解決辦法(沒有效果)

不知道是什么原因,導致 $ORACLE_BASE/fast_recovery_area 少了這個目錄,而導致了這個錯誤。

# 查看 Oracle 初始化文件

vi /opt/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/init.ora

里面有這樣一句:db_recovery_file_dest='<ORACLE_BASE>/fast_recovery_area'

# 如果沒有 fast_recovery_area 目錄創建即可

$ mkdir $ORACLE_BASE/fast_recovery_area

 

4.   ORA-12154: TNS: 無法解析指定的連接標識符

該錯誤發生於 C# 采用 System.Data.dll 程序集中的 System.Data.OleDb.OleDbConnection 類連接方式時。由於該方式需要依賴 Oracle 客戶端,而客戶端中沒配置“Net 服務名配置”。配置網絡服務名可以采用以下兩種方式:

1)   直接編輯 tnsnames.ora 文件,路徑為:D:\Oracle\product\10.2.0\client_1\NETWORK\ADMIN,新增一個網絡服務名,加入如下配置:

CL01 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = CL01)

    )

    )

   

    或者(配置遠程)

  ORCL2 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 47.96.186.196)(PORT = 11521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

    )

    OraOLEDB.Oracle 對應的連接字符串:

    <add name="dbconnectstring" connectionString="Provider=OraOLEDB.Oracle;

         Data Source=orcl2;User ID=aml;Password=aml;DistribTX=0;Max Pool Size=512;"/>

 

2)   或者使用 Net Configuration Assistant(網絡配置助手)

注意:以管理員身份運行

 


3)   兩中配置結果如下:

clip_image002

 

5.   ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

1)   檢查當前數據庫實例是否啟動

 

6.   ORA-12541: TNS:no listener

1)   檢查監聽是否啟動

lsnrctl status

 

7.   ORA-12560: TNS: 協議適配器錯誤

1)   錯誤描述

clip_image004

2)   解決辦法

首先確保"OracleOraDb11g_home1TNSListener""OracleServiceORCL"服務是開啟的。

1.   該問題很可能是因為 Oracle 環境變量配置有誤,確保為以下順序即可:

clip_image006注意:環境變量設置好后,需要重新打開一個“命令窗口”,重新運行命令。

 

2.   如果還是不行,再檢查注冊表,ORACLE_SID 的值是否正確。運行 regedit,依次展開:HKEY_LOCAL_MACHONE\SOFTWARE\ORACLE\KEY_OraDb11g_home1,確保數據庫實例名是存在的,比如:orcl

clip_image008

因為我之前使用"Database Configuration Assistant"將一個數據庫實例刪除后,就出現這個問題了。而這里指定的實例名,已經被刪除了,所以找不到了!恩,問題就是這樣。

友情提示:這里指定的數據庫實例名,就是采用 sqlplus "/as sysdba" 命令登錄的默認實例。

 

8.   ORA-27125: unable to create shared memory segment(啟動數據庫報錯)

n  錯誤描述

SQL> startup

ORA-27125: unable to create shared memory segment

Linux-x86_64 Error: 28: No space left on device

 

n  錯誤分析

這個問題在 linux 64位中比較常見,當數據庫的 SGA 值大於共享內存就會報這個錯。

共享內存由 /etc/sysctl.conf 文件中的 shmall 參數中指定,shmall 的單位為頁。在之前安裝數據庫服務時,將 shmall 設置為缺省值2097152,其實是不對的,應該根據 shmmax 的值進行計算得出,比如以 16G 的內存為例:

#由計算得出:16*1024*1024*1024-1 = 17179869183

kernel.shmmax = 17179869183

#再計算得出:17179869183 / 4096(PAGE_SIZE) = 4194304

kernel.shmall = 4194304

 

可以根據以下公式效驗 shmall 的值是否正確,就是反過來換算為內存大小:

shmall=4194304,內存大小應為:(4194304*4096(PAGE_SIZE))/(1024*1024*1024)=16G

 

l  查看分頁大小

getconf PAGE_SIZE

4096

 

n  解決辦法

# vi /etc/sysctl.conf

kernel.shmall = 4194304         #將之前的2097152改為4194304

# sysctl -p                    #保存后使配置生效

# cat /proc/sys/kernel/shmall   #查看 shmall 的值

4194304

SQL> startup                   #再次啟動

clip_image010

 

9.   ORA-28040: 沒有匹配的驗證協議11g dblink 連接 12c 時)

1)   錯誤描述

ORA-28040:沒有匹配的驗證協議

ORA-02063:緊接着 line (起自 DBLINK01)

2)   解決辦法

修改 sqlnet.ora 配置文件,路徑:D:\oracle12c\product\12.2.0\dbhome_1\network\admin\sqlnet.ora,加入以下配置:

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 10

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM