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


Что такое SQL*Net/ Net8?

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, V2 и NET8?

 

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?

Большинство людей (и я в том числе) предпочитают редактировать конфигурационные файлы 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 минут. Если клиент не отвечает, соединение убивается. ВНИМАНИЕ: Этот параметр полезен только для сервера базы данных, установка его на рабочем месте не даст никакого эффекта.

 

вверх

 


Чем отличаются способы прерываний inband и out of band?

Информация о прерывании, такая как Control-C, может передаваться как часть обычного потока данных (inband) или как отдельное асинхронное сообщение (outband). Обычно, outband намного быстрее, так как в этом случае можно прервать поток данных. Out Of Bound Breaks (OOB) установлен по-умолчанию. OOB может быть выключено в файле SQLNET.ORA:

DISABLE_OOB=on

 

вверх

 


Что такое bequeath-сессии?

Bequeath-сессии - это сессии, для которых listener порождает Dedicated Server процесс, а затем передает (bequeaths) соединение серверному процессу.

 

вверх

 


Что можно сделать для ускорения SQL*Net?

  1. При обработке SQL-предложения SQL*Net регулярно опрашивает клиента для обработки команды CONTROL-C. Это приводит к ряду системных вызовов poll и fstat. Следующий SQLNET.ORA параметр может быть использован для уменьшения нагрузки запросов на вашу систему:
BREAK_POLL_SKIP=n # Число пакетов между проерками прерываний (по-умолчанию = 4)
  1. Предварительный запуск серверных процессов. Вы можете указать 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 будет держать свободным соединение две минуты, ожидая новое соединение, перед тем как убить процесс.

  1. Несколько 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.

 

вверх

 


Можно ли ограничить доступ к системе через SQL*Net?

Да, создайте файл protocol.ora и укажите в нем:

 
tcp.validnode_checking = yes
   tcp.invited_nodes = (www.oraclub.ru,139.185.5.111)
   tcp.excluded_nodes = (133.17.15.21)

 

вверх

 


Где можно получить дополнительную информацию о SQL*Net/ Net8?

·  Oracle Network Products - Getting Started for Windows Platforms

·  Download SQL*Net V2 Light for DOS

·  Oracle and Firewalls

·  Understanding SQL*Net

 

вверх

 


Что происходит с соединившимися пользователями при опускании listener-а?

Соединившиеся пользователи смогут работать. Пользователи, пытающиеся установить соединение после остановки 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 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 *

 

вверх

 


Как проверить, зарегистрировал ли себя listener в Names Server?

Запустите 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 был скачен с другого сервера.

 

вверх

 


Как задавать конфигурацию Connection Manager-а?

Файл 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)
)

 

вверх

 


Как осуществлять перенаправление данных через Connection Manager?

Создайте точку входа в 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)
)




 

 

 

 

Сайт создан в системе uCoz