یکی دیگر از قابلیتهای جدید دیتابیس 1 در نسخه 23c، 1 CoStr است این ابزار خروجی لاگ listener را خوانده و بر اساس آن، برای هر کدام از سرویسها، coection string را به فرمتهای Easy Coect، JDBC و Python نمایش می دهد. علاوه بر آن، این ابزار می تواند برای هر کدام از سرویسها، net service nameای را در فایل tnsnames.ora ایجاد کند.
در حالت پیش فرض اگر سرویس listener پایین باشد، اجرای دستور CoStr به خطا خواهد خورد:
[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. Coecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= OEL8)(PORT=1521))) The command completed successfully
[oracle@OEL8 ~]$ costr Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree No listener endpoints found
بعد از استارت listener، اگر سرویسی رجیستر نشده باشد، CoStr پیغام The listener supports no services را نمایش می دهد:
[oracle@OEL8 ~]$ lsnrctl start The listener supports no services The command completed successfully
[oracle@OEL8 ~]$ costr 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. Coecting 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
در این شرایط اگر دستور CoStr را اجرا کنیم، لیست سرویسها به همراه coection string آنها نمایش داده می شوند:
[oracle@OEL8 admin]$ costr
Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree
Service Name: tehranpdb
Coection String: OEL8:1521/tehranpdb
Service Name: FREE
Coection String: OEL8:1521/FREE
Coection strings can be used to coect to the specified service name.
For SQL*Plus you can use:
SQL> coect username@OEL8:1521/tehranpdb
For Python you can use:
coection = cx_Oracle.coect(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");
Coection co = ods.getCoection();
Write coect 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 coection strings auto-generated by costr on Tue Sep 5 11:46:03 2023 *****
# This file is not needed if using Easy Coect 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 ~]$ costr -o /home/oracle/tnsnames.test Write coect 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
در ابتدای متن تاکید شد دستور CoStr به صورت پیش فرض با listener کار می کند و برای اجرای این دستور باید سرویس listener بالا باشد عبارت “به صورت پیش فرض ” به این دلیل قید شد که اجرای این دستور به اجرای سرویس listener محدود نیست و CoStr از طریق لاگ listener هم قابل اجرا است حتی زمانی که listener پایین باشد:
[oracle@OEL8 ~]$ lsnrctl status>listener_status.log
[oracle@OEL8 ~]$ lsnrctl stop
[oracle@OEL8 ~]$ costr --i listener_status.log
Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree
Service Name: tehranpdb
Coection String: OEL8:1521/tehranpdb
Service Name: FREE
Coection String: OEL8:1521/FREE
Coection strings can be used to coect to the specified service name.
For SQL*Plus you can use:
SQL> coect username@OEL8:1521/tehranpdb
For Python you can use:
coection = cx_Oracle.coect(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");
Coection co = ods.getCoection();
File tnsnames.ora exists. Append (Y), Overwrite (O), or Do Nothing (N)? (Default: N):
برای هر کدام از سرویسها هم می توانیم به صورت جداگانه coection string را نمایش دهیم:
[oracle@OEL8 ~]$ costr tehranpdb OEL8:1521/tehranpdb
در صورت استفاده از سوییچ j،ء coection string مربوط به JDBC نمایش داده خواهد شد:
[oracle@OEL8 ~]$ costr -j tehranpdb jdbc:oracle:thin:@OEL8:1521/tehranpdb
برچسب:
نویسنده: خنجی