ORA-12514 TNS: ผู้ฟังไม่รู้จักบริการที่ร้องขอในตัวอธิบายการเชื่อมต่อในขณะนี้


226

เรามีแอปพลิเคชันที่ทำงานในพื้นที่ซึ่งเราพบข้อผิดพลาดดังต่อไปนี้:

ORA-12514: TNS: ผู้ฟังไม่รู้จักบริการที่ร้องขอใน descriptor ของการเชื่อมต่อในขณะนี้

ฉันได้ทดสอบการเชื่อมต่อโดยใช้การTNSPingแก้ไขที่ถูกต้องและฉันพยายามSQLPlusลองเชื่อมต่อซึ่งล้มเหลวด้วยข้อผิดพลาดเดียวกันกับข้างต้น ฉันใช้ไวยากรณ์นี้เพื่อSQLPlus:

sqlplus username/password@addressname[or host name]

เราได้ตรวจสอบแล้วว่า:

  • TNS Listener บนเซิร์ฟเวอร์กำลังทำงาน
  • Oracle เองบนเซิร์ฟเวอร์กำลังทำงาน

เราไม่รู้การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับสภาพแวดล้อมนี้ มีอะไรอีกบ้างที่เราสามารถทดสอบได้?


2
คำสั่ง TNSPing (พร้อม params) ที่คุณใช้คืออะไร
Grzegorz W

เมื่อคุณพูดว่า "กำลังทำงานอยู่ภายในเครื่อง" หมายความว่าแอปพลิเคชันเชื่อมต่อกับฐานข้อมูลบนโฮสต์เดียวกันหรือไม่ นอกจากนี้เนื้อหาของไฟล์ sqlnet.ora ของคุณคืออะไร? มีการรายงานเวอร์ชันใดสำหรับ sqlplus และ tnsping และคุณแน่ใจหรือว่าพวกเขาอยู่ใน ORACLE_HOME เดียวกัน
David Aldridge

1
ลองรีสตาร์ทฐานข้อมูล เนื่องจากพวกเขาควรแจ้งผู้ฟังเกี่ยวกับการมีอยู่ของพวกเขาเมื่อเริ่มต้นสิ่งนี้อาจแก้ไขปัญหาของคุณได้
Jens Schauder

1
ALTER SYSTEM REGISTER มีความรุนแรงน้อยกว่าการรีสตาร์ทฐานข้อมูล
DCookie

คำตอบ:


209

ผมมีปัญหานี้และแก้ไขปัญหาคือการทำให้แน่ใจว่าในเป็นชื่อบริการที่ถูกต้องในฐานข้อมูลของคุณ เพื่อค้นหาชื่อบริการที่ถูกต้องคุณสามารถใช้แบบสอบถามต่อไปนี้ใน oracle:tnsnames.oraSERVICE_NAME

select value from v$parameter where name='service_names'

เมื่อฉันอัปเดตtnsnames.oraเป็น:

TEST =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = *<servicenamefromDB>*)
    )
)

จากนั้นฉันก็วิ่ง:

sqlplus user@TEST

ที่ประสบความสำเร็จ! ผู้ฟังกำลังบอกคุณว่า service_name ใดก็ตามที่คุณใช้ไม่ได้เป็นบริการที่ถูกต้องตาม DB

(* ฉันใช้ sqlplus จากไคลเอ็นต์เวิร์กสเตชัน Win7 ไปยังฐานข้อมูลระยะไกลและตำหนิ DBAs))


2
ใน win7,% ORACLE_HOME% \ NETWORK \ ADMIN \ tnsnames.ora
Brad Rippe

198
ฉันควรสอบถาม DB อย่างไรหากฉันไม่สามารถเชื่อมต่อได้
isabelle martz

2
คุณสามารถ ssh ไปยังเซิร์ฟเวอร์ DB โดยตรงและเรียกใช้ sqlplus ได้จากที่นั่น
Brad Rippe

1
นี่อาจไม่ใช่กรณีที่มีการติดตั้งไคลเอนต์ / เซิร์ฟเวอร์หลายเครื่องหรือเคยเป็นบนเครื่องเดียวกัน (tnsping แสดงตำแหน่งของไดเรกทอรีที่ใช้) - ในกรณีของฉัน listener.ora ในไดเรกทอรีนั้นมีข้อมูลที่เกี่ยวข้องกับอินสแตนซ์ฐานข้อมูลเก่าที่ฉันถอนการติดตั้ง - วิธีที่รวดเร็วและสกปรกคือการคัดลอกเนื้อหาทั้งหมดของ listener.ora จาก การติดตั้ง Oracle Express ปัจจุบันของฉันไปยังไดเรกทอรีอื่นที่ผู้ฟังดูเหมือนจะตรวจสอบ (ฉันคิดว่าฉันเปลี่ยนมันผ่านรีจิสตรีหรือบางสิ่งบางอย่างและมีความสำคัญเหนือกว่า ORACLE_HOME (?))
hello_earth

8
ORA-00942: ไม่มีตารางหรือมุมมอง
Tommy Holman

44

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ยังไม่ได้ตอบ ฉันใช้เวลาหนึ่งวันในการค้นคว้าวิจัย แต่ฉันพบวิธีแก้ปัญหาที่ง่ายที่สุดอย่างน้อยในกรณีของฉัน (Oracle 11.2 บน Windows 2008 R2) และต้องการแบ่งปัน

ข้อผิดพลาดหากดูโดยตรงแสดงว่าผู้ฟังไม่รู้จักชื่อบริการ แต่มันจะเก็บชื่อบริการที่ไหน? ใน%ORACLE_HOME%\NETWORK\ADMIN\listener.ora

"SID_LIST" คือรายการของ SID และชื่อบริการที่จับคู่ในรูปแบบที่คุณสามารถคัดลอกหรือค้นหา

ฉันเพิ่มปัญหาชื่อบริการจากนั้นในแผงควบคุม "บริการ" ของ Windows ฉันได้ "เริ่ม" ใหม่ในบริการฟังของ Oracle ตอนนี้ทุกอย่างดี


ตัวอย่างเช่นไฟล์ listener.ora ของคุณอาจมีลักษณะดังนี้:

# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

... และเพื่อให้รู้จักชื่อบริการของorclคุณอาจเปลี่ยนเป็น:

# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
    (SID_DESC = 
        (GLOBAL_DBNAME = orcl)
        (ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
        (SID_NAME = orcl)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

3
จำเป็นต้องปรับปรุงคำตอบนี้ด้วยไวยากรณ์ของวิธีการจัดlistener.oraเก็บชื่อ ฉันไม่มีแม้แต่listener.oraไฟล์ ฉันยังอยู่ในเวิร์กสเตชันลูกค้าที่ใช้ SQL Developer และพยายามสร้างฐานข้อมูลลิงค์เมื่อฉันพบข้อผิดพลาด ฉันไม่มีบริการ Oracle Listener เพื่อรีสตาร์ท
vapcguy

vapcguy, คุณต้องอยู่บนเซิร์ฟเวอร์ฐานข้อมูล ดูเหมือนคุณเป็นลูกค้า
Joseph Argenio

หลังจากทำตามคำแนะนำของ Sepideh ที่เกี่ยวข้องกับ Net Manager ฉันสังเกตว่าไฟล์ Listeners.ora ของฉันได้รับการปรับปรุงเพื่อให้มีรายการ SID_LIST ใหม่ ฉันได้แก้ไขคำตอบนี้เพื่อรวมตัวอย่างไวยากรณ์ก่อนและหลังเพื่อประโยชน์ของผู้อ่านที่ไม่สามารถใช้ Net Manager ด้วยเหตุผลใดก็ตาม
เควิน

12

ฉันมีปัญหานี้ที่เซิร์ฟเวอร์ Windows 2008 R2และOracle 11g

ไปที่ Net Manager> ผู้ฟัง> เลือกบริการฐานข้อมูลในรูปแบบ combox> "ชื่อฐานข้อมูลทั่วโลก" จะต้องเหมือนกับ "SID" และ "Oracle Home Directory" ต้องถูกต้อง

หากคุณไม่มีรายการใด ๆ สำหรับบริการฐานข้อมูลให้สร้างขึ้นมาหนึ่งรายการและตั้งค่าฐานข้อมูลส่วนกลางที่ถูกต้องsidและ oracle home


12

ในสถานการณ์ของฉันเกิดข้อผิดพลาดเนื่องจากผู้ฟังไม่ได้ลงทะเบียนบริการของ db ฉันแก้ไขสิ่งนี้ด้วยการลงทะเบียนบริการ ตัวอย่าง:

ตัวอธิบายของฉันในtnsnames.ora:

LOCALDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LOCALDB)
    )
  )

ดังนั้นฉันจะดำเนินการลงทะเบียนบริการlistener.oraด้วยตนเอง:

SID_LIST_LISTENER =
    (SID_DESC =
      (GLOBAL_DBNAME = LOCALDB)
      (ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1)
      (SID_NAME = LOCALDB)
    )

สุดท้ายให้รีสตาร์ท listener โดยคำสั่ง:

> lsnrctl stop
> lsnrctl start

ทำ!


8

การเริ่มต้น OracleServiceXXX จาก services.msc ทำงานให้ฉันใน Windows


ใน windows หากคุณใช้ Oracle Release 12.x ให้ตรวจสอบว่าบริการ OracleServiceORCL ทำงานอยู่ หากบริการนี้ไม่เริ่มขึ้นคุณจะได้รับรหัสข้อผิดพลาดเดียวกัน
สตรีท

5

นี่ควรเป็นความเห็นต่อคำตอบของBrad Rippeแต่อนิจจาตัวแทนไม่เพียงพอ คำตอบนั้นทำให้ฉัน 90% ของวิธีการที่นั่น ในกรณีของฉันการติดตั้งและกำหนดค่าฐานข้อมูลจะใส่รายการในไฟล์ tnsnames.ora สำหรับฐานข้อมูลที่ฉันใช้ ก่อนอื่นฉันสามารถเชื่อมต่อกับฐานข้อมูลโดยการตั้งค่าตัวแปรสภาพแวดล้อม (Windows):

set ORACLE_SID=mydatabase
set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1

จากนั้นเชื่อมต่อโดยใช้

sqlplus / as sysdba

ถัดไปเรียกใช้คำสั่งจากคำตอบของ Brad Rippe:

select value from v$parameter where name='service_names';

แสดงให้เห็นว่าชื่อไม่ตรงกันทั้งหมด รายการตามที่สร้างขึ้นโดยใช้ Database Configuration Assistant ของ Oracle ที่เดิม:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase.mydomain.com)
    )
  ) 

ชื่อบริการจากแบบสอบถามเป็นเพียงมากกว่าmydatabase mydatabase.mydomain.comฉันแก้ไขไฟล์ tnsnames.ora เป็นชื่อฐานโดยไม่มีส่วนโดเมนดังนั้นพวกเขาจึงมีลักษณะดังนี้:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase)
    )
  ) 

ฉันเริ่มบริการฟัง TNS (ฉันมักจะใช้lsnrctl stopและlsnrctl startจากหน้าต่างคำสั่งผู้ดูแลระบบ [หรือ Windows Powershell] แทนแผงควบคุมบริการ แต่ทำงานได้ทั้งคู่) หลังจากนั้นฉันสามารถเชื่อมต่อได้


4

ผมมีปัญหาเหมือนกัน. สำหรับฉันแค่เขียน

sqlplus myusername/mypassword@localhost

ทำเคล็ดลับในการทำเช่นนั้นทำให้เชื่อมต่อกับชื่อบริการเริ่มต้นฉันเดา


1
เรามีปัญหาที่คล้ายกันกับสตริงการเชื่อมต่อของเราทำให้เกิดข้อผิดพลาดนี้ เราได้รับการเชื่อมต่อการใช้ไดรเวอร์บางของออราเคิล JDBC jdbc:oracle:thin:@//localhost:1521/orclกับสตริงการเชื่อมต่อ: สตริงการเชื่อมต่อที่แก้ไขเพื่อกำจัดข้อผิดพลาดนี้คือ: jdbc:oracle:thin:@localhost:1521.
และ

มันขึ้นอยู่กับว่ามันจะใช้งานได้หรือไม่ - ฉันคิดว่าวิธีการเชื่อมต่อนี้ตัดสินสิ่งที่คนอื่นพูดว่าคือการข้ามผู้ฟังทั้งหมดโดยใช้ชื่อโฮสต์คอมพิวเตอร์แทน SID - วิธีการเชื่อมต่อนี้ทำให้เกิดปัญหาในไคลเอนต์บุคคลที่สาม มันจะทำงานเฉพาะเมื่อมีการระบุ EZCONNECT ใน sqlnet.ora: NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
hello_earth

3

สิ่งที่ทำงานให้ฉันได้ง่ายจริงๆฉันแค่ต้องเริ่มบริการด้วยตนเองใน "บริการ Windows" (services.msc ใน cmd trompt) ชื่อบริการของฉันคือ: OracleServiceXXXXX


ในกรณีของฉันแม้ว่าประเภทการเริ่มต้นถูกตั้งค่าเป็นอัตโนมัติ แต่จะไม่เริ่มต้นเมื่อเครื่องบูต หลังจากเริ่มให้บริการด้วยตนเอง "OracleServiceXE" จะทำงานกับ Oracle Database 11g Express เพื่อเชื่อมต่อกับเว็บเพจ DB และ APEX (Oracle Application Express)
Ivan Chau

2

ตรวจสอบเพื่อดูฐานข้อมูลขึ้น เข้าสู่เซิร์ฟเวอร์ตั้งค่าตัวแปรสภาพแวดล้อม ORACLE_SID เป็นฐานข้อมูล SID ของคุณแล้วรัน SQL * Plus เป็นการเชื่อมต่อภายในเครื่อง


นี่เป็นปัญหาของฉันอย่างแน่นอน ฐานข้อมูลของเราโฮสต์บน VM ซึ่งหยุดทำงานในขณะที่ฉันพยายามใช้โปรแกรมอื่นที่ใช้ DP หลังจากเห็นหัวข้อนี้ฉันก็รู้ว่ามันอาจจะแย่ลง
Sh4d0wsPlyr

2

ข้อผิดพลาดนี้สามารถเกิดขึ้นได้เมื่อแอปพลิเคชันทำการเชื่อมต่อใหม่สำหรับทุกการโต้ตอบของฐานข้อมูล หนึ่งในเครื่องมือฟรีที่ใช้ตรวจสอบและยืนยันว่าเป็นนักพัฒนา Oracle Sql (แม้ว่านี่จะไม่ใช่เครื่องมือเดียวที่คุณสามารถใช้เพื่อตรวจสอบเซสชัน DB)

คุณสามารถดาวน์โหลดเครื่องมือจาก oracle site Sql Developer

นี่คือภาพหน้าจอของวิธีการตรวจสอบเซสชันของคุณ (หากคุณเห็นหลายเซสชันซ้อนกันสำหรับผู้ใช้แอปพลิเคชันของคุณในระหว่างที่คุณเห็นข้อผิดพลาด ORA-12514 แสดงว่าเป็นปัญหาที่ดีว่าคุณอาจมีปัญหาการเชื่อมต่อ)

ป้อนคำอธิบายรูปภาพที่นี่


2

ฉันแก้ไขปัญหานี้ในสภาพแวดล้อม linux ของฉันอัปเดต IP ของเครื่องของฉันในไฟล์ / etc / hosts

คุณสามารถตรวจสอบ IP เครือข่ายของคุณ (inet end.) ด้วย:

$ifconfig

ดูว่า IP ของคุณตรงกับไฟล์ / etc / hosts หรือไม่:

$cat /etc/hosts

แก้ไขไฟล์ / etc / hosts ของคุณหาก nedded:

$sudo gedit /etc/hosts

บาย.


2
นี่เป็นรุ่นเก่า แต่ไม่มีความหมายที่จะเพิ่ม IP ของคุณใน / etc / hosts OP หายไป SERVICE_NAME สิ่งอื่น ๆ ค่อนข้างไม่เกี่ยวข้องกัน
Ostap

ฉันไม่ได้เพิ่ม IP ของฉันไปยัง / etc / host ฉันเพิ่งแก้ไขมัน อย่างที่คุณเห็นในหัวข้อนี้มีคำตอบและความหลากหลายที่ถูกต้อง (พร้อม upvote) เพื่อแก้ไขคำถามนี้ หากคำตอบนั้นไม่ช่วยคุณทำไมต้องลงคะแนนโหวต? คำตอบนี้อาจยังช่วยใครซักคนตามที่ช่วยฉัน
Sergio MC Figueiredo

2

สำหรับผู้ที่อาจใช้ Oracle ใน VM (เช่นฉัน) ฉันเห็นปัญหานี้เพราะ VM ของฉันมีหน่วยความจำไม่เพียงพอซึ่งดูเหมือนจะป้องกันไม่ให้ OracleDB เริ่มต้น / ทำงานอย่างถูกต้อง การเพิ่มหน่วยความจำ VM ของฉันและเริ่มต้นใหม่แก้ไขปัญหาได้


2

มีคำตอบมากมายที่นี่ แต่นี่เป็นตัวอย่างการทำงานของโค้ดที่คุณสามารถคัดลอกและวางและทดสอบได้ทันที:

สำหรับฉันข้อผิดพลาด 12514 ได้รับการแก้ไขหลังจากระบุ SERVICE_NAME ที่ถูกต้อง คุณพบว่าบนเซิร์ฟเวอร์ในไฟล์tnsnames.oraที่มาพร้อมกับ 3 ชื่อบริการที่กำหนดไว้ล่วงหน้า (หนึ่งในนั้นคือ "XE")

  1. ฉันติดตั้งฐานข้อมูล Oracle Express OracleXE112 ซึ่งมาพร้อมกับตารางสาธิตบางส่วนที่ติดตั้งไว้แล้ว
  2. เมื่อคุณเริ่มตัวติดตั้งระบบจะถามรหัสผ่านของคุณ ฉันป้อน "xxx" เป็นรหัสผ่าน (ไม่ได้ใช้ในการผลิต)
  3. เซิร์ฟเวอร์ของฉันทำงานบนเครื่อง 192.168.1.158
  4. บนเซิร์ฟเวอร์คุณต้องอนุญาตการเข้าถึงอย่างชัดเจนสำหรับกระบวนการ TNSLSNR.exe ในไฟร์วอลล์ Windows กระบวนการนี้ฟังบนพอร์ต 1521
  5. ตัวเลือก A:สำหรับ C # (.NET2 หรือ. NET4) คุณสามารถดาวน์โหลดODAC11ซึ่งคุณจะต้องเพิ่ม Oracle.DataAccess.dll ในโครงการของคุณ นอกจากนี้ DLL นี้ขึ้นอยู่กับ: OraOps11w.dll, oci.dll, oraociei11.dll (130MB!), msvcr80.dll กำลังเหล่านี้จะต้องอยู่ในไดเรกทอรีเดียวกันกับใน EXE หรือคุณต้องระบุเส้นทาง DLL HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPathใน: บนเครื่อง 64 บิตเขียนเพิ่มเติมHKLM\SOFTWARE\Wow6432Node\Oracle\...
  6. ตัวเลือก B:ถ้าคุณดาวน์โหลดODAC12คุณต้องใช้ Oracle.DataAccess.dll, OraOps12w.dll, oci.dll, oraociei12.dll (160MB!), oraons.dll, msvcr100.dll เส้นทางรีจิสทรีคือHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
  7. ตัวเลือก C:ถ้าคุณไม่ต้องการ DLL ขนาดใหญ่ที่มีขนาดเกิน 100 MB คุณควรดาวน์โหลด ODP.NET_Managed12.xxxxxxxx.zip ซึ่งคุณพบว่าOracle.ManagedDataAccess.dllมีเพียง 4 MB และเป็น DLL ที่มีการจัดการที่บริสุทธิ์ซึ่งทำงานในกระบวนการ 32 บิตและ 64 บิต เช่นกันและขึ้นอยู่กับ DLL อื่น ๆ และไม่ต้องการรายการรีจิสทรีใด ๆ
  8. รหัส C # ต่อไปนี้ใช้ได้กับฉันโดยไม่มีการกำหนดค่าใด ๆ บนฝั่งเซิร์ฟเวอร์ (เพียงแค่การติดตั้งเริ่มต้น):
ใช้ Oracle.DataAccess.Client;
หรือ
ใช้ Oracle.ManagedDataAccess.Client;

....

string oradb = "แหล่งข้อมูล = (DESCRIPTION ="
    + "(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.158) (PORT = 1521))"
    + "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))";
    + "รหัสผู้ใช้ = ระบบ; รหัสผ่าน = xxx;";

การใช้ (OracleConnection conn = new OracleConnection (oradb)) 
{
    conn.Open ();
    using (OracleCommand cmd = new OracleCommand ())
    {
        cmd.Connection = conn;
        cmd.CommandText = "เลือก TABLESPACE_NAME จาก DBA_DATA_FILES";

        การใช้ (OracleDataReader dr = cmd.ExecuteReader ())
        {
            ในขณะที่ (ดร. อ่าน ())
            {
                listBox.Items.Add (DR [ "tablespace_name"]);
            }
        }
    }
}

หากSERVICE_NAME=XEผิดคุณจะได้รับข้อผิดพลาด 12514 SERVICE_NAMEเป็นตัวเลือก คุณยังสามารถทิ้งมันไว้


ขอบคุณมากจากโซลูชันของคุณฉันพบเคล็ดลับในกรณีของฉันมันเป็นโปรแกรมป้องกันไวรัสที่บล็อกโปรแกรมดังนั้นจึงไม่สามารถรับการเชื่อมต่อกับฐานข้อมูล Oracle
robot_alien

2

ฉันต้องเผชิญกับปัญหาเดียวกันและใช้เวลา 3 วันในการขุดมันออกมา

สิ่งนี้เกิดขึ้นเนื่องจากรายการบริการ TNS ของคุณไม่ถูกต้อง

ก่อนอื่นให้ตรวจสอบว่าคุณสามารถเชื่อมต่อกับฐานข้อมูลสแตนด์บายจากฐานข้อมูลหลักโดยใช้ sql> sqlplus sys@orastand as sysdba( orastandเป็นฐานข้อมูลสแตนด์บายได้หรือไม่)

หากคุณไม่สามารถเชื่อมต่อได้แสดงว่าเป็นปัญหาของบริการ แก้ไขรายการชื่อบริการในไฟล์ TNS ที่ส่วนท้ายหลัก

ตรวจสอบฐานข้อมูลสแตนด์บายด้วยวิธีเดียวกัน ทำการเปลี่ยนแปลงที่นี่ด้วยหากจำเป็น

ตรวจสอบให้แน่ใจว่าlog_archive_dest_2พารามิเตอร์มีชื่อบริการที่ถูกต้อง


1

ฉันได้รับข้อผิดพลาดเดียวกันเนื่องจากระบุ SID ระยะไกลผิด:

 > sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID 

ฉันสอบถามฐานข้อมูลระบบ:

เลือก * จาก global_name;

และพบ SID ระยะไกลของฉัน ("XE")

จากนั้นฉันก็สามารถเชื่อมต่อได้โดยไม่มีปัญหาใด ๆ


0

ในกรณีของฉันฐานข้อมูลมีพื้นที่ดิสก์ไม่เพียงพอ ซึ่งทำให้มันไม่ตอบสนอง เมื่อฉันลบล้างปัญหาทุกอย่างที่ทำงานอีกครั้ง


ฉันจะทราบได้อย่างไร
CodeSlave

0

สำหรับฉันนี้เกิดจากการใช้ ipadress แบบไดนามิกโดยใช้การติดตั้ง ฉันติดตั้ง Oracle ใหม่โดยใช้ ipadress แบบคงที่แล้วทุกอย่างก็ใช้ได้




0

tnslsnr ไม่ทำงาน แต่ฐานข้อมูลไม่ทำงาน

สำหรับ Oracle สามเณรจะไม่ชัดเจนว่าฐานข้อมูลอาจไม่ทำงานขณะที่ยอมรับการเชื่อมต่อ

ฉันต้องเริ่มต้นฐานข้อมูลด้วยตนเองเช่นนั้น

su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba

และจากนั้นในคอนโซล sql

startup

ในกรณีของฉันฉันไม่สามารถเริ่มต้นได้ แต่ได้รับข้อความแสดงข้อผิดพลาดอื่นและพบสาเหตุของปัญหา - ฉันต้องเปลี่ยนชื่อโฮสต์จากนั้นการเริ่มต้นอัตโนมัติของฐานข้อมูลก็ทำงานได้อีกครั้ง


0

ฉันได้ดำเนินการตามวิธีแก้ปัญหาด้านล่างเพื่อแก้ไขปัญหานี้

  1. ฉันได้ตั้งค่า ORACLE_HOME โดยใช้พรอมต์คำสั่ง (คลิกขวา cmd.exe และเรียกใช้ในฐานะผู้ดูแลระบบ)

  2. ใช้คำสั่งด้านล่าง

    set oracle_home="path to the oracle home"

  3. ไปที่โปรแกรมทั้งหมด -> Oracle -ora home1 -> เครื่องมือการโอนย้ายการกำหนดค่า -> Net Manager -> Listener

  4. เลือกบริการฐานข้อมูลจากเมนูแบบเลื่อนลง ทั้งชื่อฐานข้อมูลส่วนกลางและ SID นั้นถูกตั้งค่าเป็นแบบเดียวกัน (ORCL ในกรณีของฉัน) ตั้งค่า Oracle Home Directory

ตัวอย่างหน้าต่าง Oracle Net Manager จากเอกสารของ Oracle: ตัวอย่าง Oracle Net Manager

  1. คลิกที่ไฟล์และบันทึกการกำหนดค่าเครือข่าย

0

ปัญหาคือว่าสตริงการเชื่อมต่อของฉันมีชื่อฐานข้อมูลแทน SID การเปลี่ยนชื่อฐานข้อมูลด้วยการเชื่อมต่อฐานข้อมูล oracle SID แก้ปัญหานี้ได้

เพื่อทราบ oracle SID ของคุณคุณสามารถเรียกดูtnsnames.oraไฟล์

XE เป็น SID จริงดังนั้นนี่คือลักษณะของสตริงการเชื่อมต่อ tomcat ของฉันในตอนนี้:

    <Resource
       name="jdbc/my_db_conn"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@//127.0.0.1:1521/XE"
       username="test_user"
       password="test" />

เวอร์ชันเซิร์ฟเวอร์ของฉันคือ "Oracle 11.2 Express" แต่โซลูชันควรทำงานกับเวอร์ชันอื่นด้วย


0

ในกรณีของฉันวงเล็บเหลี่ยมล้อมรอบ SERVICE_NAME หายไปในไฟล์tnsnames.ora

<DBNAME> =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL=TCP)(HOST = nupark-cnvr-ora )(PORT=1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = <DBNAME> ***CLOSING ROUND BRACKET WAS MISSING HERE***
    )
  )

LISTENER_<DBNAME> =

  (ADDRESS = (PROTOCOL = TCP)(HOST = nupark-cnvr-ora)(PORT = 1521))

0

สำหรับผู้ที่กำลังใช้ spring-boot และ jdbc สำหรับการเชื่อมต่อ คุณต้องระวังในขณะที่เขียน jdbcUrl ใน application.properties

ด้วย SID ในการเชื่อมต่อฐานข้อมูล - source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID

ด้วยชื่อบริการในการเชื่อมต่อฐานข้อมูล globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE

สิ่งนี้ได้ผลกับฉัน :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.