FAQ по Oracle SQL*Net/ Net8Автор: Frank Naude Темы· Что такое SQL*Net/ Net8? · В чем разница между SQL*Net V1, V2 и NET8? · Как настраивать SQL*Net? · У меня проблемы с SQL*Net. Как мне создать трассировочный файл? · Как установить dedicated server connection? · Могу ли я перейти на SQL*Net V2, если некоторые клиенты еще используют V1? · Как определять умершие соединения? · Чем отличаются способы прерываний inband и out of band? · Что такое bequeath-сессии? · Что можно сделать для ускорения SQL*Net? · Можно ли установить соединение с системой, не думая о неисправности компьютеров? · Можно ли ограничить доступ к системе через SQL*Net? · Где можно получить дополнительную информацию о SQL*Net/ Net8? Вопросы, связанные с Oracle Listener: · Что происходит с соединившимися пользователями при опускании listener-а? Вопросы, связанные с Oracle Names: · Как установить Oracle Names Server? · Как указать listener-у зарегистрировать себя в Names Server? · Как зарегистрировать новую точку входа в Oracle Names Server? · Как проверить, зарегистрировал ли себя listener в Names Server? Вопросы, связанные с Connection Manager: · Что такое Connection Manager? · Как задавать конфигурацию Connection Manager-а? · Как осуществлять перенаправление данных через Connection Manager?
<< Содержание FAQ
NET8 (SQL*NET до Oracle8) - это сетевой продукт Oracle, обеспечивающий прозрачное соединение между клиентом и базой данных или между двумя базами данных. SQL*Net/ Net8 работает поверх многих сетевых протоколов и на многих операционных системах. TNS или Transparent Network Substrate - это сетевая архитектура Oracle. TNS предоставляет одинаковый интерфейс сетевым приложениям для прозрачного доступа к связанным сетевым протоколам. Архитектура TNS состоит из трех программных компонент: приложение, основанное на TNS; Oracle Protocol Adapters (OPA) и сетевое программное обеспечение, например, TCP/IP.
вверх
| SQL*Net V1 | SQL*Net V2 | Net8 | Порт по
умолчанию | 1525/tcp | 1521/tcp | 1521/tcp | Команда запуска | tcpctl start | lsnrctl start | lsnrctl start | Команда остановки | tcpctl stop | lsnrctl stop | lsnrctl stop | Строка соединения | protocol:host:sid eg. T:SRV1:DB1 | в TNSNAMES.ORA | в TNSNAMES.ORA | Конфигурационные файлы | /etc/oratab | tnsnames.ora, sqlnet.ora & listener.ora | tnsnames.ora, sqlnet.ora & listener.ora | Переменные окружения | LOCAL= | TWO_TASK= | TWO_TASK= |
вверх
Большинство людей (и я в том числе) предпочитают редактировать конфигурационные файлы SQL*Net вручную. Тем не менее, единственный "официально поддерживаемый" способ конфигурации заключается в запуске программы Oracle Net8 Assistant или Oracle Net8 Easy Config (ранее называемой Oracle Network Manager). Конфигурационная программа работает на PC. Вам необходимо создать необходимый файл на PC, а затем скопировать его на сервер, где установлен Oracle. Пример конфигурационных файлов:
$ORACLE_HOME/network/admin/sqlnet.ora ------------------------------------- automatic_ipc = ON # Set to OFF for PC's trace_level_client = OFF # Set to 16 if tracing is required sqlnet.expire_time = 0 # Idle time in minutes sqlnet.authentication_services = (ALL) names.directory_lookup = (TNSNAMES,ONAMES) names.default_domain = world name.default_zone = world $ORACLE_HOME/network/admin/tnsnames.ora --------------------------------------- dbname1, aliasname1, aliasname2 = (description = (address_list = (address = (protocol = tcp) (host = yourHost.domain) (port = 1521) ) ) (connect_data = (sid = yourSID) ) ) $ORACLE_HOME/network/admin/listener.ora --------------------------------------- LISTENER = # Listener name is LISTENER (address_list = (address= (protocol=ipc) (key=yourSID) ) (address= (protocol = tcp) (host = yourHost.domain) (port = 1521) ) ) STARTUP_WAIT_TIME_LISTENER = 0 CONNECT_TIMEOUT_LISTENER = 10 TRACE_LEVEL_LISTENER = ON TRACE_FILE_LISTENER = $ORACLE_HOME/network/trace/listener.trc SID_LIST_LISTENER = (SID_LIST= (SID_DESC= (SID_NAME=yourSID) (ORACLE_HOME=YOUR_ORACLE_HOME) ) ) ВНИМАНИЕ: Неправильная точка входа в файле TNSNAMES.ORA заблокирует все правильные, расположенные ниже. Если Вы хотите найти неправильную точку входа, то просто копируйте точки входа наверх.
вверх
У меня проблемы с SQL*Net. Как мне создать трассировочный файл?Создайте/отредактируйте Ваш SQLNET.ORA файл. Данный файл расположен в одном из следующих мест (SQL*Net V2 ищет его в том же порядке): - Каталог, указанный в параметре TNS_ADMIN ($TNS_ADMIN для Unix).
- /etc (только для Unix).
- /var/opt/oracle (только для Unix).
- $ORACLE_HOME/network/admin или net8/admin.
Файл SQLNET.ORA должен содержать следующие строки для создания трассировочного файла:
trace_level_client=16 trace_unique_client=yes Иногда полезно трассировать только пакеты TNSPING. Добавьте следующие параметры в файл SQLNET.ORA:
TNSPING.TRACE_LEVEL = 16 TNSPING.TRACE_DIRECTORY = /tmp/tnsping/ Также полезно установить следующие параметры:
trace_file_client = cli.trc trace_directory_client = <path_to_trace_dir> log_file_client = sqlnet.log log_directory_client = <path_to_log_dir>
вверх
Как установить dedicated server connection?Если ваша база данных настроена для использования MTS (Multi-threaded server), то все запросы клиентов обрабатываются общими процессами через dispatcher. Если Вы желаете, чтобы некоторые клиенты использовали dedicated Server процесс, то Вам необходимо установить соответствующий параметр в строке соединения, т.е.:
SQLPLUS SCOTT/TIGER@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (PORT=1521) (NODE=yourServerName))) (CONNECT_DATA=(SID=yourSid) (SERVER=DEDICATED))) Вы также можете отредактировать файл TNSNAMES.ORA и добавить строку (SERVER=DEDICATED) в список CONNECT_DATA или просто установить set USE_DEDICATED_SERVER=ON в файле SQLNET.ORA.
вверх
Могу ли я перейти на SQL*Net V2, если некоторые клиенты еще используют V1?SQL*Net V1 не может взаимодействовать с SQL*Net V2, и наоборот. Единственный способ преодолеть эту проблему - запустить одновременно SQL*Net V1 и V2 на одном сервере базы данных. После этого вы можете начать установку SQL*Net V2 на ваших клиентах. SQL*Net V1 и V2 могут свободно сосуществовать на одном сервере и на одном клиенте. В файле TNSNAMES.ORA можно указать строку для соединения по протоколу V1. Пример: ORA1_NET1 = T:machine_name/port:database_name
Заметим, что SQL*Net V1 не существуют для баз данных, начиная с версии 7.3.
вверх
Умершие соединения могут быть определены и убиты самим SQL*Net, если установлен параметр SQLNET.EXPIRE_TIME=n в файле SQLNET.ORA (расположен, обычно, в каталоге $ORACLE_HOME/network/admin). Этот параметр указывает SQL*Net отправлять пробный пакет каждые n минут. Если клиент не отвечает, соединение убивается. ВНИМАНИЕ: Этот параметр полезен только для сервера базы данных, установка его на рабочем месте не даст никакого эффекта.
вверх
Информация о прерывании, такая как Control-C, может передаваться как часть обычного потока данных (inband) или как отдельное асинхронное сообщение (outband). Обычно, outband намного быстрее, так как в этом случае можно прервать поток данных. Out Of Bound Breaks (OOB) установлен по-умолчанию. OOB может быть выключено в файле SQLNET.ORA: DISABLE_OOB=on
вверх
Bequeath-сессии - это сессии, для которых listener порождает Dedicated Server процесс, а затем передает (bequeaths) соединение серверному процессу.
вверх
- При обработке SQL-предложения SQL*Net регулярно опрашивает клиента для обработки команды CONTROL-C. Это приводит к ряду системных вызовов poll и fstat. Следующий SQLNET.ORA параметр может быть использован для уменьшения нагрузки запросов на вашу систему:
BREAK_POLL_SKIP=n # Число пакетов между проерками прерываний (по-умолчанию = 4) - Предварительный запуск серверных процессов. Вы можете указать listener-у запустить несколько пустых серверных процессов. В этом случае при обработке запроса на соединение не надо будет запускать серверный процесс; просто будет использоваться один из свободных. Данное поведение задается в файле LISTENER.ORA в секции SID_LIST_LISTENER следующем образом:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = yourSID) (PRESPAWN_MAX = 50) (PRESPAWN_LIST = (PRESPAWN_DESC = (PROTOCOL = TCP) (POOL_SIZE = 5) (TIMEOUT = 2)))) ) PRESPAWN_MAX: если уже установлено 50 соединений к базе данных, то listener не будет предварительно запускать процессы. POOL_SIZE: listener будет поддерживать 5 свободных процессов. TIMEOUT: после отсоединения клиента listener будет держать свободным соединение две минуты, ожидая новое соединение, перед тем как убить процесс. - Несколько listener-ов с равномерной загрузкой. with load balancing. На одном сервере Вы можете запустить несколько listener-ов и задать их параметры в одном файле TNSNAMES.ORA. При установки соединения с клиентом SQL*Net случайно выбирает один из них. Пример описания несколько listener-ов в файле LISTENER.ORA:
# Define listener A... STARTUP_WAIT_TIME_LISTENER_A = 0 CONNECT_TIMEOUT_LISTENER_A = 10 LISTENER_A= (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = yourHost.domain) (PORT = 1521))) SID_LIST_LISTENER_A = (SID_LIST = (SID_DESC = (SID_NAME = yourSID) (PRESPAWN_MAX = 50))) # Define the second listener... STARTUP_WAIT_TIME_LISTENER_B = 0 CONNECT_TIMEOUT_LISTENER_B = 10 LISTENER_B= (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = yourHost.domain) (PORT = 1522))) SID_LIST_LISTENER_B = (SID_LIST = (SID_DESC = (SID_NAME = yourSID) (PRESPAWN_MAX = 50))) Файл TNSNAMES.ORA для этой базы данных должен выглядеть как-нибудь так:
oradb1.world = (description_list= (description= (address_list= (address= (protocol=tcp) (host=yourHost.domain) (port=1521))) (connect_data = (sid = yourSID))) (description = (address_list = (address= (protocol=tcp) (host=yourHost.domain) (port=1522))) (connect_data = (sid = yourSID))))
вверх
Вы можете указать насколько адресов для одной точки входа в файле TNSNAMES.ORA. Это будет означать, что вы сможете соединиться с базой данных, даже если несколько компьютеров выйдет из строя. Взгляните на следующий пример:
oradb1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = TCP_COMM) (PROTOCOL = TCP) (HOST = Machine01)) (ADDRESS = (COMMUNITY = TCP_COMM) (PROTOCOL = TCP) (HOST = Machine02))) (CONNECT_DATA=( (SID=oradb1)))) Предположим, что компьютер Machine01 выключен, тогда новый запрос на соединение по имени oradb1 будет автоматически отправляться на Machine02. Но есть одно ограничение, SID на обоих машинах должен быть одним и тем же. Данный способ может обеспечит гарантированное соединение с серверов приложений и с Oracle Parallel Server.
вверх
Да, создайте файл protocol.ora и укажите в нем:
tcp.validnode_checking = yes tcp.invited_nodes = (www.oraclub.ru,139.185.5.111) tcp.excluded_nodes = (133.17.15.21)
вверх
· Oracle Network Products - Getting Started for Windows Platforms · Download SQL*Net V2 Light for DOS · Oracle and Firewalls · Understanding SQL*Net
вверх
Соединившиеся пользователи смогут работать. Пользователи, пытающиеся установить соединение после остановки listener-а, не смогут установить соединение до запуска listener-а.
вверх
Как установить Oracle Names Server?- Создайте domain-базу данных: Запустите скрипт $ORACLE_HOME/network/admin/namesins.sql.
- Для Windows9x/ NT запустите Oracle Net8 Assistant и проведите настройку.
- На сервере необходимо запустить names server: namesctl start.
вверх
Как указать listener-у зарегистрировать себя в Names Server-е?Отредактируйте файл LISTENER.ORA и добавьте в нем строку USE_PLUGANDPLAY_listener_name=ON для каждого listener-а, определенного на Вашем компьютере. Затем, задайте параметр GLOBAL_DBNAME для каждого listener-а. Пример файла LISTENER.ORA:
USE_PLUG_AND_PLAY_LISTENER = ON LISTENER = (ADDRESS_LIST = (ADDRESS= (PROTOCOL=IPC) (KEY= wblp-nt-011b_orcl.companyX.com) ) (ADDRESS= (PROTOCOL=IPC) (KEY= orcl) ) (ADDRESS = (COMMUNITY = TCPIP.companyX.com) (PROTOCOL = TCP) (Host = wblp-nt-011b.companyX.com) (Port = 1526) ) ) STARTUP_WAIT_TIME_LISTENER = 0 CONNECT_TIMEOUT_LISTENER = 10 TRACE_LEVEL_LISTENER = OFF SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = wblp-nt-011b_orcl.companyX.com) (SID_NAME = orcl) (ORACLE_HOME = /) (PRESPAWN_MAX = 10) ) )
вверх
Точки входа Oracle Names Server обычно вводятся с помощью Oracle Network Manager (V7) или Oracle Net8 Assistant. Кроме того, Вы можете сделать это вручную, используя команду NAMESCTL. Пример:
NAMESCTL> register mydb.world -t oracle_database -d (description=(address=(protocol=tcp) (host=123.45.67.8)(port=1526))(connect_data=(sid=MYDB))) ВНИМАНИЕ: Команду необходимо написать в одну строку. Кроме того, проверьте, что базу данных Вы зарегистрировали во всех Names Server-ах, работающих в вашей сети. Для проверки, правильно ли добавилась новая точка входа, наберите команду:
NAMESCTL> query mydb.world *
вверх
Запустите LSNRCTL и наберите команду SERVICES или STATUS. Если listener успешно зарегистрировал себя, то Вы увидите слово "Registered" за именем сервиса. Пример:
Services Summary... oraweb(Registered) has 1 service handler(s)
вверх
Что такое Connection Manager?Oracle Connection Manager (CMan) - это Net8 процесс, служащий для перенаправления сетевого потока на другой адрес и (если необходимо) для изменения его характеристик. Обычно, Connection manager используется для следующего: - Концентрация соединений.
- Управление доступом.
- Поддержка многих протоколов.
- Устанавливать соединение Java applet-у с базой данных, в случае если applet был скачен с другого сервера.
вверх
Файл CMAN.ORA задает конфигурацию Connection Manager. Пример файла CMAN.ORA:
CMAN = (ADDRESS=(PROTOCOL=tcp)(HOST=141.145.83.4)(PORT=1610)) CMAN_ADMIN = (ADDRESS=(PROTOCOL=tcp)(HOST=141.145.83.4)(PORT=1650)) CMAN_RULES = (RULE_LIST = (RULE = (SRC=141.145.*.*) # Wildcard is "x" (DST=141.145.*.*) (SRV=ed23) (ACT=ACC) )) CMAN_PROFILE = (PARAMETER_LIST= (MAXIMUM_RELAYS=8) # Default is normally too small (LOG_LEVEL=1) (TRACING=NO) (SHOW_TNS_INFO=YES) (RELAY_STATISTICS=NO) )
вверх
Создайте точку входа в TNSNAMES.ORA с двумя адресами. Первый адрес определяет адрес, который слушает CM (описанный в CMAN.ORA). Второй - это адрес, на который необходимо осуществить перенаправление данных. Необходимо также добавить строку SOURCE_ROUTE=YES.
ED23_cman = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS=(PROTOCOL=TCP)(HOST=141.145.83.4)(PORT=1610)) (ADDRESS=(PROTOCOL=TCP)(HOST=zaedu2.za.oracle.com)(PORT=1923)) ) (CONNECT_DATA = (SERVICE_NAME = ed23) ) (SOURCE_ROUTE = YES) )
|