Рассылка закрыта
При закрытии подписчики были переданы в рассылку "СУБД Oracle "с нуля"" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Открыто о СУБД Oracle на русском : Изменение SID и имени базы данных
Информационный Канал Subscribe.Ru |
Выпуск 29
Изменение 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:
- Остановите экземпляр
- Скопируйте все управляющие файлы, журналы повторного выполнения и файлы данных.
- Пройдите по файлам .profile, .cshrc, .login, oratab,
tnsnames.ora и задайте переменной среды ORACLE_SID новое значение.
Например, пройдите по всем каталогам и выполните grep ORACLE_SID *
- Перейдите в каталог dbs
% cd $ORACLE_HOME/dbs
- init<sid>.ora (или используйте для задания файла параметров инициализации файл pfile.)
- управляющий файл (файлы). Это не обязательно, если вы не переименовываете управляющие файлы и используете параметр control_files. Параметр control_files устанавливается в файле init<SID>.ora или в файле, на который ссылается в нем параметр ifile. Проверьте, что параметр control_files не указывает на старые имена управляющиъ файлов, если вы их переименовали.
- crdb<sid>.sql и crdb2<sid>.sql, Это не обязательно, пеоскольку эти файлы используются только при создании базы данных.
- Перейдите в каталог rdbms/admin
% cd $ORACLE_HOME/rdbms/admin
- startup<sid>.sql. Это не обязательно. На некоторых платформах этот файл может находиться в каталоге $ORACLE_HOME/rdbms/install. Проверьте, что содержимое этого файла не ссылается на старые файлы init<SID>.ora, которые вы переименовали. Этот файл упрощает процесс запуска с сервера базы данных в исключительном режиме (startup exclusive).
- Переименование файлов данных и файлов журнала повторного ввполнения описано в документе службы поддерожки <Note:9560.1>.
- Измените соответственно значение переменной среды ORACLE_SID.
- Проверьте в каталоге $ORACLE_HOME/dbs, включен ли файл паролей. Если да,
в каталоге будет файл orapw<OLD_SID> и надо создать новый файл паролей
для нового значения SID (переименование старого файла не поможет).
Если файл orapw<OLD_SID> не существует, переходим на шаг 9. Для
создания нового файла паролей выполните следующую команду от имени владельца
ПО oracle:
orapwd file=orapw<NEWSID> password=?? entries=<количество пользователей, которые смогут получить право запускать экземпляр>
- Запустите базу данных и проверьте, что она работает. После этого остановите базу данных и создайте завершающую резервную копию всех управляющих файлов, файлов журнала повторного выполнения и файлов данных.
- При запуске экземпляра в управляющем файле установится текущее значение ORACLE_SID.
- Подключитесь как internal:
% svrmgrl SVRMGR> connect internal
- Введите
SVRMGR> alter system switch logfile;
- Введите
SVRMGR> alter database backup controlfile to trace resetlogs;
- Отсновите базу данных и завершите сеанс
SVRMGR> shutdown SVRMGR> exit
- Перейдите в каталог, в котором находятся трассировочные файлы. Они обычно записываются в каталог $ORACLE_HOME/rdbms/log. Если установлен параметр инициализации user_dump_dest, перейдите в каталог, указанный в качестве его значения. Трассировочные файлы имеют вид ora_NNNN.trc, где NNNN - число.
- Скопируйте оператор CREATE CONTROLFILE из трассировочного файла и поместите его в новый файл, например, ccf.sql.
- Отредактируйте созданный файл ccf.sql
БЫЛО:
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
- Сохраните файл ccf.sql и завершите сеанс редактирования
- Переименуйте старые управляющие файлы в качестве резервной копии, и чтобы их не было при создании новых.
- Отредактируйте файл init<SID>.ora, задав db_name="новое_имя_базы".
- Подключитесь как internal:
% svrmgrl SVRMGR> connect internal
- Выполните сценарий ccf.sql:
SVRMGR> @ccf
Если в этот момент вы получаете сообщение об ошибке, утверждающее, что для файла необходимо восстановление носителя (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
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 -<флаги, соответствующие версии ОС UNIX> | 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
Если вы работате не на сервере, sid просто не имеет значения, - вам нужна запись tns в файле tnsnames.ora.
На NT посмотрите список служб Oracle в Панели управления.
Оригинал обсуждения этого вопроса можно найти здесь.
Изменение SID на платформе Windows, кстати, описано вот здесь.Copyright © 2003 Oracle Corporation
В следующем выпуске
Перевод очередной статьи Джонатана Льюиса пока придется подождать. Статья большая... Пожалуй, продолжим тему клонирования БД "по мотивам" ответов Тома Кайта. Следите за новостями на сайте проекта Open Oracle.
С наилучшими пожеланиями,
В.К.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||