วิธีใช้ sqlplus เพื่อเชื่อมต่อกับฐานข้อมูล Oracle ที่อยู่บนโฮสต์อื่นโดยไม่ต้องแก้ไข tnsnames.ora ของฉันเอง


80

ฉันต้องการเชื่อมต่อกับฐานข้อมูล oracle ที่อยู่บนโฮสต์อื่นโดยใช้ sqlplus หน้านี้แนะนำให้เพิ่มรายการในชื่อ tns ของฉันเพื่อเชื่อมกับฐานข้อมูลนั้น

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

แล้วใช้มันใน sqlplus

sqlplus user/pass@local_SID

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

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)

1
สั้นลงแม้ - sqlplus userid / password @ database

@GlennLong - แต่ในเวอร์ชั่นของคุณdatabaseยังคงเป็นนามแฝงของ TNS ซึ่งจะต้องมีอยู่ในtnsnames.oraนั้นดังนั้นเหมือนกับที่หลุยส์พยายามหลีกเลี่ยงเหรอ?
Alex Poole

คำตอบ:


85
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

อาจจะและสิ่งนี้อาจขึ้นอยู่กับสภาพแวดล้อมของบรรทัดคำสั่งที่คุณใช้คุณจำเป็นต้องอ้างอิงสตริงสิ่งที่ต้องการ

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

หรือ

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'

35

คุณสามารถใช้การเชื่อมต่อที่ง่ายสำหรับสิ่งนี้:

sqlplus usr/pass@hostname.network/remote_service_name

ในการเปิดใช้งานการเชื่อมต่อบนเครื่องของคุณง่ายคุณจะต้องเพิ่มลงNAMES.DIRECTORY_PATH ใน sqlnet.ora เช่น:

NAMES.DIRECTORY_PATH=(EZCONNECT)

...@hostname.network:port/...หากฟังของคุณอยู่ในการใช้งานพอร์ตที่ไม่ได้เริ่มต้น

จริง ๆ แล้วดูเหมือนว่าคุณต้องระบุชื่อบริการไม่ใช่ SID พวกเขาอาจจะเหมือนกัน แต่ถ้าไม่คุณจะต้องได้รับจากเซิร์ฟเวอร์


1
หากชื่อบริการเหมือนกับชื่อโฮสต์คุณไม่จำเป็นต้องระบุชื่อบริการเมื่อทำการเชื่อมต่อ (ไม่มีใครทำแบบนี้จริง แต่มันก็ดีที่จะรู้)
durette

ลิ้งค์ .......
ฮาร์วีย์

1
@Harvey - อัปเดตขอบคุณ
Alex Poole

17

สร้างสำเนาของไฟล์ tnsnames.ora ในไดเร็กทอรีที่คุณสามารถเขียนแก้ไขไฟล์ตามนั้นจากนั้นตั้งค่าตัวแปรสภาวะแวดล้อม TNS_ADMIN เป็นตำแหน่งของไดเร็กทอรีนั้น

เช่น:

cp $ORACLE_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp

2
นี่เป็นการตอบสนองที่ดีกว่ามาก
Andrew Sledge

วิธีนี้ใช้ได้กับระบบที่ไม่มีการติดตั้งโครงสร้างพื้นฐาน oracle นอกเหนือจากไคลเอนต์ sqlplus เพียงคัดลอก tnsnames.ora จากเซิร์ฟเวอร์ db และทำตามกระบวนการของ Phil
theRiley

3

บนระบบ Unix / Linux คุณสามารถใช้ไฟล์การกำหนดค่าระดับผู้ใช้เพื่อแทนที่รายการระดับระบบ

ระดับผู้ใช้ระดับระบบ 
ไฟล์กำหนดค่าไฟล์กำหนดค่า
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

$TNS_ADMINแฟ้มการกำหนดค่าระดับระบบสามารถพบได้ในไดเรกทอรี ถ้าตัวแปรไม่ได้ตั้งค่าแล้วพวกเขาก็จะค้นหาในไดเรกทอรีTNS_ADMIN$ORACLE_HOME/network/admin

ไฟล์การกำหนดค่าระดับผู้ใช้จะไม่แทนที่ไฟล์การกำหนดค่าระดับระบบโดยรวม (เนื่องจากTNS_ADMINไดเรกทอรีจะแทนที่ทั้ง$ORACLE_HOME/network/adminไดเรกทอรี) แต่จะเพิ่มหรือเปลี่ยนรายการของไฟล์การกำหนดค่าระดับระบบ หากรายการมีอยู่ในไฟล์คอนฟิกูเรชันระดับผู้ใช้รายการนี้จะถูกใช้หากไม่มีอยู่ในไฟล์คอนฟิกูเรชันระดับผู้ใช้ดังนั้นรายการของไฟล์คอนฟิกูเรชันระดับระบบจะถูกใช้

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