اوراکل 23c – ابزار ConnStr

یکی دیگر از قابلیتهای جدید دیتابیس اوراکل در نسخه 23c، ابزار ConnStr است این ابزار خروجی لاگ listener را خوانده و بر اساس آن، برای هر کدام از سرویسها، connection string را به فرمتهای Easy Connect، JDBC و Python نمایش می دهد. علاوه بر آن، این ابزار می تواند برای هر کدام از سرویسها، net service nameای را در فایل tnsnames.ora ایجاد کند.

در حالت پیش فرض اگر سرویس listener پایین باشد، اجرای دستور ConnStr به خطا خواهد خورد:

 [oracle@OEL8 ~]$ lsnrctl  stop
LSNRCTL for Linux: Version 23.0.0.0.0 - Developer-Release on 05-SEP-2023 13:30:35
Copyright (c) 1991, 2023, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= OEL8)(PORT=1521)))
The command completed successfully
[oracle@OEL8 ~]$ connstr
Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree
No listener endpoints found

بعد از استارت listener، اگر سرویسی رجیستر نشده باشد، ConnStr پیغام The listener supports no services را نمایش می دهد:

[oracle@OEL8 ~]$ lsnrctl  start
The listener supports no services
The command completed successfully
[oracle@OEL8 ~]$ connstr
Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree
The listener supports no services

همانطور که می دانید، بعد از انتظار چند ثانیه ای، LREG همه سرویسها را به صورت خودکار روی پورت 1521 رجیستر خواهد کرد:

 [oracle@OEL8 ~]$ lsnrctl  status
LSNRCTL for Linux: Version 23.0.0.0.0 - Developer-Release on 05-SEP-2023 13:36:47
Copyright (c) 1991, 2023, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=target)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 23.0.0.0.0 - Developer-Release
Start Date                05-SEP-2023 13:31:07
Uptime                    0 days 0 hr. 5 min. 40 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           FREE
Listener Parameter File   /opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/OEL8/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=OEL8)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Services Summary...
Service "FREE" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
Service "tehranpdb" has 1 instance(s).
  Instance "FREE", status READY, has 1 handler(s) for this service...
The command completed successfully

در این شرایط اگر دستور ConnStr را اجرا کنیم، لیست سرویسها به همراه connection string آنها نمایش داده می شوند:

[oracle@OEL8 admin]$ connstr
Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree

Service Name:      tehranpdb
Connection String: OEL8:1521/tehranpdb

Service Name:      FREE
Connection String: OEL8:1521/FREE

Connection strings can be used to connect to the specified service name.
For SQL*Plus you can use:
  SQL> connect username@OEL8:1521/tehranpdb

For Python you can use:
  connection = cx_Oracle.connect(user="username", password="password",
    dsn="OEL8:1521/tehranpdb")

For JDBC Thin you can use:
  OracleDataSource ods = new OracleDataSource();
  ods.setURL("jdbc:oracle:thin:@OEL8:1521/tehranpdb");
  ods.setUser("username");
  ods.setPassword("password");
  Connection conn = ods.getConnection();
Write connect strings to tnsnames.ora (Y/N)? (Default: N): 

در خط آخر سوالی پرسیده می شود که در صورت انتخاب Y، تمامی net service nameها به tnsnames.ora اضافه خواهند شد:

[oracle@OEL8 ~]$ vi /opt/oracle/product/23c/dbhomeFree/network/admin/tnsnames.ora
# ***** tnsnames.ora connection strings auto-generated by connstr on Tue Sep  5 11:46:03 2023 *****
# This file is not needed if using Easy Connect strings.
# To use this file, place in your client TNS_ADMIN directory (typically ORACLE_HOME/network/admin/ or instantclient_XX_X/network/admin).
# Or, set your TNS_ADMIN environment variable to the directory this file is located in.

tehranpdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = tcp)(HOST = OEL8)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = tehranpdb))
  )

FREE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = tcp)(HOST = OEL8)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = FREE))
  )

از طریق سوییچ o می توانیم خروجی را خارج از فایل tnsnames.ora ذخیره کنیم:

[oracle@OEL8 ~]$ connstr -o /home/oracle/tnsnames.test
Write connect strings to /home/oracle/tnsnames.test (Y/N)? (Default: N): Y
[oracle@OEL8 ~]$ ls -lh /home/oracle/tnsnames.test
-rw-r--r-- 1 oracle oinstall 1.2K Sep  5 14:21 /home/oracle/tnsnames.test

در ابتدای متن تاکید شد دستور ConnStr به صورت پیش فرض با listener کار می کند و برای اجرای این دستور باید سرویس listener بالا باشد عبارت “به صورت پیش فرض ” به این دلیل قید شد که اجرای این دستور به اجرای سرویس listener محدود نیست و ConnStr از طریق لاگ listener هم قابل اجرا است حتی زمانی که listener پایین باشد:

[oracle@OEL8 ~]$ lsnrctl status>listener_status.log
[oracle@OEL8 ~]$ lsnrctl stop
[oracle@OEL8 ~]$ connstr --i listener_status.log
Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree

Service Name:      tehranpdb
Connection String: OEL8:1521/tehranpdb

Service Name:      FREE
Connection String: OEL8:1521/FREE

Connection strings can be used to connect to the specified service name.
For SQL*Plus you can use:
  SQL> connect username@OEL8:1521/tehranpdb

For Python you can use:
  connection = cx_Oracle.connect(user="username", password="password",
    dsn="OEL8:1521/tehranpdb")

For JDBC Thin you can use:
  OracleDataSource ods = new OracleDataSource();
  ods.setURL("jdbc:oracle:thin:@OEL8:1521/tehranpdb");
  ods.setUser("username");
  ods.setPassword("password");
  Connection conn = ods.getConnection();
File tnsnames.ora exists. Append (Y), Overwrite (O), or Do Nothing (N)? (Default: N):

برای هر کدام از سرویسها هم می توانیم به صورت جداگانه connection string را نمایش دهیم:

[oracle@OEL8 ~]$ connstr tehranpdb
OEL8:1521/tehranpdb

در صورت استفاده از سوییچ j،ء connection string مربوط به JDBC نمایش داده خواهد شد:

[oracle@OEL8 ~]$ connstr -j tehranpdb
jdbc:oracle:thin:@OEL8:1521/tehranpdb

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *