Oracle sid что это
Перейти к содержимому

Oracle sid что это

  • автор:

Подключение к СУБД. Получение SID базы данных

В предыдущей главе мы рассмотрели уязвимости службы Листенера. Некоторые из них позволяют получить удаленный доступ к серверу и выполнять произвольные команды в СУБД, другие дают нам дополнительную информацию, полезную для проведения атаки. Как бы то ни было, главной целью является подключение к СУБД, и если в службе Листенера нет перечисленных в главе 2 уязвимостей, позволяющих получить контроль над СУБД или над сервером, то нам ничего не остается, кроме как попытаться подключиться к самой СУБД. Для подключения к СУБД Oracle необходимо знание пяти параметров:

  • ? IP-адрес сервера;
  • ? порт службы TNS Listener;
  • ? системный идентификатор (System Identifier [SID]) или имя сервиса (Service Name);
  • ? имя пользователя;
  • ? пароль.

Каждый экземпляр базы данных идентифицируется с помощью SID (System IDentifier — системный идентификатор). Экземпляр — это понятие, логически включающее все те компоненты, которые необходимы для доступа к информации в БД. SID состоит из алфавитно-цифровых символов, хранится в переменной среды ORACLE_SID и используется утилитами и сетевыми компонентами для доступа к СУБД.

Имя сервиса — это сравнительно новое понятие, введенное начиная с СУБД Oracle 8i. SERVICE_NAMES определяют одно или ряд имен для подключения к одному экземпляру базы данных, то есть можно указать несколько имен сервиса, ссылающихся на один экземпляр, с различными настройками.

Знание того и другого значения поможет нам подключиться к СУБД.

SID и SERVICE_NAME

Получение IP-адреса и порта не вызывают каких-либо затруднений. Что касается SID базы данных или SERVICE_NAME, то в старых версиях их можно получить при помощи утилиты lsnrctl. Для этого достаточно воспользоваться командой services;

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))

Service «PLSExtProc» has 1 instance(s).

Instance «PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service.

Service «orcl» has 1 instance(s).

Instance «orcl», status READY, has 1 handler(s) for this service.

The command completed successfully LSNRCTL>

В выводе команды мы можем видеть имя сервиса (Service «orcl») и экземпляр базы данных, он же — SID (Instance «orcl»). В нашем случае они совпадают, но это бывает не всегда.

Для того чтобы подключиться к СУБД, зная имя сервиса, а также имя пользователя и пароль можно воспользоваться утилитой sqlplus, пример запуска которой приведен ниже.

С: >sqlplus system/ Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script /orcl

SQL*Plus: Release 10.1.0.5.0 — Production on Tue Aug 26 17:18:23 2008

Copyright (с) 1982, 2005, Oracle. All rights reserved.

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 — Production

With the Partitioning, OLAP and Data Mining options

В случае если SID и SERVICE NAME не совпадают и мы знаем только SID, то для того, чтобы подключиться к СУБД, следует в первую очередь прописать данные, необходимые для подключения (connection descriptor) в конфигурационном файле tnsnames.ora.

  • (DESCRIPTION =
  • (ADDRESS_LIST =
  • (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.40.33)(PORT = 1521))) (CONNECT_DATA =
  • (SID = ORCL)
  • (SERVER = DEDICATED) )

В результате чего у нас будет создан алиас (orcl_192.168.40.33) для подключения к СУБД, который мы сможем использовать для подключения при помощи утилиты sqlplus (при условии что нам известно имя пользователя и пароль):

С: >sqlplus system/sh2kerr@orcl_192.168.40.33

SQL*Plus: Release 10.1.0.5.0 — Production on Tue Aug 26 17:18:23 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 — Production

With the Partitioning, OLAP and Data Mining options

Таким образом, нашей первостепенной целью является получение SID или SERVICE NAME базы данных.

Получение SID базы данных

Как уже было сказано выше, получить SID можно при помощи утилиты Isnrctl, точнее, можно было в старых версиях СУБД. В случае если мы имеем дело с версией СУБД Oracle 10g R1 и выше, то в ней по умолчанию включена опция LOCALOSAUTHENTICATION, и командой services или status получить SID не удастся (рис. 3-1), тем самым доступ к СУБД будет осложнен.

Попытка выполнить команду status в версии Oracle 10д

Рис. 3-1. Попытка выполнить команду status в версии Oracle 10д

Аналогичная ситуация произойдет в случае установки пароля на Листенер версии 10g R2 и выше, там команды services или status также не выдают SID (точнее, эти команды запрещены вообще). Но даже в случае защиты службы Листе- нера в новых версиях существует множество способов получения имени базы данных.

Вопрос альтернативных подходов к определению SID базы данных является весьма актуальным и может стать первым шагом на пути к получению административного доступа ко всей СУБД. В связи с этим, автором были проведены исследования в этой области в результате чего были изучены существующие методы и найдено несколько новых, которые будут представлены в этой главе. Рассмотрим, какие способы получения SID существуют на данный момент и насколько вероятно использование этих способов на практике. Все существующие способы можно разбить на три группы:

  • ? подбор SID;
  • ? утечки информации из сторонних приложений;
  • ? комбинированные методы с использованием Data Mining.

Экземпляр базы данных Oracle (Oracle DataBase Instance)

Когда вы инсталлируете базу данных Oracle. Вы сначала устанавливаете программное обеспечение СУБД (Систему Управления Базой Данных, DataBase Software). Помимо СУБД, необходима также сама база данных. Одна система управления базой данных, может работать сразу с несколькими базами данных на одном сервере. Каждая такая база данных в терминологии Oracle называется экземпляром базы данных (DataBase Instance). Каждый запущенный экземпляр активно использует ресурсы процессора, оперативной и дисковой памяти.

Далее, мы постепенно разберем что у нас хранится на дисках (основные файлы), какие процессы за что отвечают и собственно, что хранится в оперативной памяти.

Oracle Database = Oracle DataBase Software + Oracle DataBase Instance (s)

Oracle Instance

Для того, чтобы узнать текущее состояние экземпляра базы данных, можно выполнить следующую процедуру:

    убедиться, что подключаетесь к базе с правильным параметром ORACLE_SID.
    Поменять SID можно, командой export

$ export ORACLE_SID=ora112 
$ echo $ORACLE_SID ora112 

aguppi

SID (System IDentifier – системный идентификатор) является уникальным именем, которое однозначно идентифицирует экземпляр/базу данных. Хранится в переменной среды ORACLE_SID и используется утилитами и сетевыми компонентами для доступа к базе данных.

SERVICE_NAME (имя сервиса) – это сравнительно новое понятие, введенное начиная с СУБД Oracle 8i. SERVICE_NAME определяет одно или ряд имен для подключения к одному экземпляру базы данных. Возможные значения SERVICE_NAME указываются в сетевых установках Oracle и регистрируются в качестве службы БД процессом listener.

Итог: Если база данных зарегистрирована листенером, как службу с определенным SERVICE_NAME, тогда в tnsnames.ora можно использовать значение параметра SERVICE_NAME, иначе нужно будет использовать значение SID.

Изменение SID и имени базы данных

Этот выпуск посвящен некоторым аспектам проблемы переименования и клонирования базы данных. Начнем с простого — как узнать и изменить идентификатор службы (SID) и имя базы данных (DB_NAME). Последний раз Том Кайт вернулся к этому вопросу 20 августа 2002 года.

Что такое SID, как его узнать и как изменить

Тривиальный вопрос для тебя: что такое SID и для чего он используется? Повлияет ли его изменение на другие экземпляры базы данных? И, наконец, как мне узнать значение SID моей базы данных? Я не смог найти ответ на сайте technet.oracle.com .

Ответ Тома Кайта

SID — это идентификатор сайта. Его значение хешируется вместе со значеним параметра ORACLE_HOME в ОС Unix для получения уникального ключа для подключения к области SGA. Если значения Oracle_sid или Oracle_home установлены неправильно, будет получено сообщение » oracle not available «, поскольку мы не можем подключиться к сегменту разделяемой памяти, который идентфицируется этим «волшебным» лючом. В NT мы не используем разделяемую память, но SID все равно важен. Можно создать несколько баз данных в одном начальном каталоге oracle, так что, надо же их как-то идентифицировать.

Изменить его сложнее, чем кажется. Я знаю, что вы работаете в ОС Unix, поэтому следующая последовательность шагов для изменения SID (или имени базы данных) в Unix — для вас. В NT последовательность шагов — немного другая.

Как найти sid — с помощью оператора select instance from v$thread .

НАЗНАЧЕНИЕ

Здесь описано, как найти и изменить имя базы данных ( db_name ) или ORACLE_SID для экземпляра, не пересоздавая базу данных.

ДЛЯ КОГО ЭТА ЗАМЕТКА

Для АБД, которым надо найти или изменить db_name или ORACLE_SID .

Чтобы найти текущие значения DB_NAME и ORACLE_SID:

Выполните запросы к представлениям v$database и v$thread .

V$DATABASE дает DB_NAME V$THREAD дает ORACLE_SID

Если ORACLE_SID = DB_SID и db_name = DBNAME :

Чтобы найти текущее значение ORACLE_SID :

SVRMGR> select instance from v$thread; INSTANCE ---------------- DB_SID

Чтобы найти текущее значение DB_NAME :

SVRMGR> select name from v$database; NAME --------- DBNAME

Изменение базы данных для работы с новым ORACLE_SID :

  1. Остановите экземпляр
  2. Скопируйте все управляющие файлы, журналы повторного выполнения и файлы данных.
  3. Пройдите по файлам .profile , .cshrc , .login , oratab , tnsnames.ora и задайте переменной среды ORACLE_SID новое значение. Например, пройдите по всем каталогам и выполните grep ORACLE_SID *
  4. Перейдите в каталог dbs

% cd $ORACLE_HOME/dbs
  • init.ora (или используйте для задания файла параметров инициализации файл pfile .)
  • управляющий файл (файлы). Это не обязательно, если вы не переименовываете управляющие файлы и используете параметр control_files . Параметр control_files устанавливается в файле init.ora или в файле, на который ссылается в нем параметр ifile . Проверьте, что параметр control_files не указывает на старые имена управляющиъ файлов, если вы их переименовали.
  • crdb.sql и crdb2.sql , Это не обязательно, пеоскольку эти файлы используются только при создании базы данных.
% cd $ORACLE_HOME/rdbms/admin
  • startup.sql . Это не обязательно. На некоторых платформах этот файл может находиться в каталоге $ORACLE_HOME/rdbms/install . Проверьте, что содержимое этого файла не ссылается на старые файлы init.ora , которые вы переименовали. Этот файл упрощает процесс запуска с сервера базы данных в исключительном режиме ( startup exclusive ).

orapwd file=orapw password=?? entries=

% svrmgrl SVRMGR> connect internal
SVRMGR> alter system switch logfile;
SVRMGR> alter database backup controlfile to trace resetlogs;
SVRMGR> shutdown SVRMGR> exit
CREATE CONTROLFILE REUSE DATABASE "старое_имя_базы" NORESETLOGS .
CREATE CONTROLFILE set DATABASE "новое_имя_базы" RESETLOGS .
# Recovery is required if any of the datafiles are restored backups, # or if the last shutdown was not normal or immediate. RECOVER DATABASE USING BACKUP CONTROLFILE
# Recovery is required if any of the datafiles are restored backups, # or if the last shutdown was not normal or immediate. # RECOVER DATABASE USING BACKUP CONTROLFILE
% svrmgrl SVRMGR> connect internal
SVRMGR> @ccf

Он выполнит команду startup nomount и пересоздаст управляющий файл. Если в этот момент вы получаете сообщение об ошибке, утверждающее, что для файла необходимо восстановление носителя (media recovery), значит, база данных была остановлена аварийно на шаге 4. Можно попытаться восстановить базу данных, используя данные повторного выполнения в текущем файле журнала, с помощью команды:

SVRMGRL> recover database using backup controlfile;

Будет выдан запрос архивного файла журнала повторного выполнения. После применения текущего файла журнала базу данных, возможно, удастся открыть. Но, это НЕ ГАРАНТИРОВАНО . Если после применения текущего файла журнала повторного выполнения база данных не открывается, весьма вероятно, придется повторить все с начала, предварительно нормально остановив старую базу данных. Чтобы применить необходимые данные повторного выполнения, надо проверить активные журналы повторного выполнения и применить один, порядковый номер которого указан в сообщении. Обычно, это журнальный файл со status=CURRENT . Чтобы найти список активных журнальных файлов:

SVRMGR> select group#, seq#, status from v$log; GROUP# SEQUENCE# STATUS ---------- --------- ---------------- 1 123 CURRENT  2 124 INACTIVE 3 125 INACTIVE 4 126 INACTIVE 5 127 INACTIVE 6 128 INACTIVE 7 129 INACTIVE 7 rows selected. SVRMGR> select member from v$logfile where GROUP# = 1; Member ------------------------------------ /u02/oradata/V815/redoV81501.log

Последней командой в файле ccf.sql должна быть:

alter database open resetlogs;

alter database rename global_name to .

Cколько АБД Oracle надо, чтобы поменять лампочку. Комментарий от 13 сентября 2001 года

Удивительно, сколько механической работы требуется в Oracle для простых вещей.

Смысл реляционной модели — нормализация; если проще — устранение избыточных данных. А что мы имеем — SID в десятке мест?

Ответ Тома Кайта

Чтобы было просто — не меняйте SID .

База данных поддерживает реляционную модель, а обеспечивающее работу с ней программное обеспечение, согласен, этой модели не соответствует.

НА САМОМ ДЕЛЕ, мы сталкиваемся с попыткой ИЗМЕНИТЬ ПЕРВИЧНЫЙ КЛЮЧ.

Это, на самом деле, ПРЕКРАСНАЯ демонстрация особенностей реляционной модели. Первичным ключом для базы данных является SID. Вы пытаетесь изменить первичный ключ (чего в реляционных базах данных делать КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ) и реализовать действие on update cascade .

Так что, даже при наличии ОДНОГО внешнего ключа, пробюлема будет аналогичной. Если вы когда-нибудь изменяли значение первичного ключа, вам приходилось делать то же самое (находить все внешние ключи и изменять их соответственно).

Почему вы считаете изменение SID «простой вещью» (мне этот процесс кажется весьма мутным — мне ни разу не приходилось самому это делать за 15 лет).

Комментарий от 1 марта 2001 года

Прекрасное описание процедуры изменения sid. Я постоянно это делала на прежней работе при создании тестовых экземпляров. Одна проблема, связанная с sid, меня всегда беспокоила — как узнать этот самый sid. Если вы не знаете sid, как вы подключитесь к экземпляру и спросите значение sid?

Ответ Тома Кайта

ps - | grep pmon
$ ps -aux | grep pmon ora734 3662 0.0 0.518720 6896 ? S Jan 21 0:00 ora_pmon_ora734 tkyte 7446 0.0 0.1 944 784 pts/8 S 13:30:09 0:00 grep pmon ora716 12929 0.0 0.417472 5552 ? S Jan 22 0:00 ora_pmon_ora716 oracle9i 13112 0.0 13.6249688205872 ? S Jan 18 0:00 ora_pmon_ora9iUTF ora806 13901 0.0 1.03324014080 ? S Feb 26 0:00 ora_pmon_ora806 oracle9i 17941 0.0 24.6413528372528 ? S Feb 18 0:00 ora_pmon_ora9i ora817 25122 0.0 16.2279824245824 ? S Feb 01 0:00 ora_pmon_ora817dev ora815 25424 0.0 2.99008043712 ? S Jan 28 0:00 ora_pmon_ora815

получаем 7 значений sid, работающих сечас на моей тестовой машине — ora_pmon_$ORACLE_SID

Если вы работате не на сервере, sid просто не имеет значения, — вам нужна запись tns в файле tnsnames.ora .

На NT посмотрите список служб Oracle в Панели управления.

Оригинал обсуждения этого вопроса можно найти здесь.

Изменение SID на платформе Windows, кстати, описано вот здесь.

Copyright © 2003 Oracle Corporation

В следующем выпуске

Перевод очередной статьи Джонатана Льюиса пока придется подождать. Статья большая. Пожалуй, продолжим тему клонирования БД «по мотивам» ответов Тома Кайта. Следите за новостями на сайте проекта Open Oracle.

С наилучшими пожеланиями,

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *