четверг, 30 июня 2011 г.

Как сдублировать базу в Oracle 10g

Итак, вы решили дублировать базу данных Oracle. Например, вы получили от разработчика приложения патч, и хотите его протестировать на копии вашей продакшен базы.

Задачу мы сформулируем так: нам надо получить практически точную копию нашей базы на другом хосте. В этот раз мы не будем переименовывать файлы и директории. Мы будем пользоваться каталогом RMAN.

Для этого нам потребуется:

1. Возьмите любой свежий бэкап, о котором знает ваш каталог или прямо сейчас сделайте новый. Все зависит от того, насколько актуальная копия базы вам нужна. Мне было достаточно ночной копии - поэтому я и взял свой ночной бэкап. Имейте в виду, что нам потребуются и архивные редо логи до той даты и времени, до которой вы хотите восстановить потом базу. Но это чуть позже. Этот бэкап можно скопировать на новый хост, а можно предоставить доступ по нему через NFS. Мне было проще скопировать его с хоста продакшена на хост тестового сервера в ту же самую директорию.

2. Обязательно проверьте, что у вас достаточно места на диске тестового компьютера, куда мы будем дублировать базу, чтобы эта печальная новость не застигла вас по середине процесса.

3. Создайте или скопируйте init.ora на ваш тестовый хост. Я просто взял оригинальный, скопировал его, переименовал и чуть-чуть подправил, чтобы он лучше вписывался в реалии моего тестового сервера - память, пути и прочее. Пути очень важны - поэтому вы должны воссоздать пустые директории adump, bdump, cdump, udump - короче все админские директории, которые указаны в вашем init.ora файле. Не будет лишним создать директорию для данных и места, где у вас лежат архивлоги - и положить сразу логи туда. Чтобы не было путаницы я называю SID и dbname одинаково и с большими буквами. Пусть у нас будет в init.ora dbname=TESTDB. И в файле /etc/oratab я прописываю - 
TESTDB:/u01/app/oracle/product/10.2.0/db_1:N.

4. Теперь мы можем попытаться “поднять” наш инстанс на тестовом хосте до состояния nomount - потому что у нас пока вообще ничего нет кроме init.ora.

sqlplus /nolog
conn / as sysdba;
strartup nomount

5. Если у вас все прекрасно поднялось, то выходим из плюса и занимаемся настройкой связи до нашего главного сервере и каталога RMAN (надеюсь он у вас есть). Для этого редактируем $ORACLE_HOME/network/admin/tnsnames.ora до состояния пока вы не будете успешно соединяться с этими двумя серверами.

6. Мы почти у цели, и осталась совсем немного. Нам нужен скрипт дупликации базы. В нашем случае, когда мы не хотим переименовывать файлы, а хотим точно такую же структуру как на target db - нам надо обязательно указывать nofilenamecheck. Иначе RMAN будет ругаться, что имена файлов target и auxiliary db совпадают. Вторая вещь - по умолчанию RMAN будет стараться сдуплицировать вашу базу максимально близко к нынешнему моменту во времени. То есть к сейчас. Для этого вам надо иметь все архив логи, о которых знает RMAN. Если вы хотите облегчиться себе жизнь, как я - и вам достаточно например, базы из ночного бэкапа, то вы можете установить set until time на время, которое вас устраивает. Не забываем об ошибке, связанной с set until time, которую я указал в прошлом сообщении.

сам скрипт duplicate.rcv будет таков

run {
set until time “to_date(‘Jun 30 2011 23:30:00’,’Mon DD YYYY HH24:MI:SS’)”;
allocate auxiliary channel C1 device type disk;
duplicate target database to TESTDB nofilenamecheck;
}

7. Еще раз подумайте, все ли вы сделайте и особенно проверьте расположение файлов бэкапа и архив логов и права на них. Я однажды нечаянно скопировал архивлоги под другим пользователем и оракл мне долго говорил, что не может восстановить базу. Запускаем RMAN на тестовой машине

rman target sys/sys@PROD catalog rman/rman@rman auxiliary /

в случае успеха на экране будет написано, что мы удачно подсоединились ко всем трем базам - PROD (наш продакшен), rman - наш каталог, auxiliary - это наш тестовый сервер.
Запускаем скрипт @duplicate.rcv

Если мы все сделали правильно, RMAN восстановит файлы на диске - restore, сделает нам media recovery и откроет базу open resetlogs. Если что-то осталось непонятным, вы можете еще посмотреть вот этот документ Note 388431.1 Creating a Duplicate Database on a New Host. на Oracle Support. Там же есть нота, что делать если RMAN где-то посередине не смог завершить дупликацию Manual Completion of a Failed RMAN Duplicate [ID 360962.1]

В версии 11g вы можете сдуплицировать базу данных не только из бэкапа, но и с активной базы данных. Более подробно об этом в соответствующей литературе по 11g и Note 452868.1 RMAN 'Duplicate Database' Feature in 11G

вторник, 21 июня 2011 г.

ORA-00907 неправильный текст ошибки при неправильных параметрах языка

Недавно делал базе duplicate - дублировал ее на другой совершенно новый компьютер. И немного застопорился на ошибке ORA-00907 в случае когда я использую в скрипте RMAN

set until time "to_date('Jun 20 2011 01:00:00','Mon DD YYYY HH24:MI:SS')";
ORA-907: missing right parenthesis


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

Делаем в плюсе select to_char(sysdate,'Mon') from dual; и видим, что у нас там вопросики. Так и есть у нас везде почему-то оказался русский в NLS_ параметрах, которые мы можем глянуть через запрос к v$nls_parameters. То есть RMAN нам показывает не совсем ту ошибку. Тогда мы пишем export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 и все у нас работает!

четверг, 25 марта 2010 г.

1z0-043 сдан!

Вчера успешно сдал 1z0-043 Oracle Database 10g Administration II !
Долго я тянул с ним, если бы не сгорающий ваучер, то еще бы протянул.
Ура!!!

понедельник, 22 марта 2010 г.

The Most Popular Articles and Downloads of 2009

Команда OTN составила рейтинг самых популярных технических статей 2009 года.

1. Installing Oracle Enterprise Manager 10g Grid Control Rel 5 on Oracle Database 11g and Linux, by Mike Revitt

2. High-Performance Oracle JDBC Programming, by Yuli Vasiliev

3. Oracle RMAN Backups: Pushing the "Easy" Button, by Porus Homi Havewala (Oracle ACE Director)

4. Tom Kyte: On Dynamic Sampling (from Oracle Magazine)

5. Scripting Oracle RMAN Commands (from Oracle Magazine), by Arup Nanda (Oracle ACE Director)

6. Oracle Enterprise Manager Grid Control Architecture for Very Large Sites, by Porus Homi Havewala (Oracle ACE Director)

7. Taking an Oracle ADF Application from Design to Reality, by Chris Muir (Oracle ACE Director) and Penny Cookson (Oracle ACE)

8. Tom Kyte: On Constraints, Metadata, and Truth (from Oracle Magazine)

9. High Performance and Availability with Oracle RAC and PHP, by John Lim

10. Oracle ADF Development Essentials, by John Stegeman (Oracle ACE Director)


Перепечатано с The Most Popular Articles and Downloads of 2009

пятница, 25 сентября 2009 г.

Репликация: если случилась беда :)

Как-то темной темной ночью случилась проблемка с репликацией. И накапало ошибок аж 11,000. Причину ошибок быстро восстановил, но стандартным путем убирать все ошибки - через OEM не хотелось - все таки 11 тысяч раз кликать Retry.

Поэтому сделал execute DBMS_DEFER_SYS.EXECUTE_ERROR(null,'my_host');
Перезапустить все ошибочные транзакции с пунктом назначения my_host

Можно было бы и DBMS_DEFER_SYS.DELETE_ERROR(null,null); чтобы удалить все на всех направлениях, а не перезапускать.

Вот теперь все хорошо! Теперь все ладненько!

среда, 18 июня 2008 г.

Total Recall или Вспомнить всё! (Часть 1)

Вы удивитесь, но речь пойдет не о фильме Пола Верховина с Арнольдом Шварценеггером в главной роли. Она пойдет о новой опции в версии Oracle Database 11g - Oracle Total Recall. Хотя, безусловно, какое-то отношение к триллерам и фантастике это решение имеет. Все мы помним, как хакеры в этих фильмах легко проникают в базу данных полиции и изменяют данные добропорядочного гражданина, делая его в один момент преступником - рецидивистом. Последнее время, когда все больше и больше персональных данных граждан находится в электронном доступе, вопрос отслеживания таких изменений встал очень остро. В мире были приняты ряд законов и актов требующих длительного (более 5 лет) хранения и аудита подобных данных и всех их изменений. Причем это касается не только больших корпораций аля страховые или медицинские, но и малый, и средний бизнес.

Я сразу вспоминаю случай из собственной практики, когда изучив логику бизнес-приложения, нерадивые сотрудники одной фирмы легко перебрасывали продажи (уже после их завершения) с одного покупателя на другого, изменяя, таким образом, задолженности этих клиентов перед фирмой. Этот "переброс" ничему в принципе не противоречил и допускался системой - ну решил клиент оформить все на другое юр.лицо, но никак не отслеживался. Когда мы предложили разработчикам системы начать отслеживать подобные операции, они разумно ответили, что "на каждый роток не накинешь платок" - и что нельзя программировать исходя из предположения, что люди начнут воровать. Самым логичным в той ситуации казалось просто поставить триггер на изменения нужных полей одной таблицы. Это один из вариантов в данном случае, но он лишен возможности централизованного управления - вы должны помнить, где у вас стоят триггера, чего и куда пишут. Да и наличие большого их количества сказывается на производительности. Другой вариант решения проблем с отслеживанием изменения данных - написание соответствующей функциональности со своим интерфейсом, своими таблицами и т.п. Но это сильно удорожает разработку любой системы - это раз. Доступ к таблицам изменения данных мы контролировать не можем - администратор системы может их легко изменить - это два. Да и если у вас в организации несколько баз и десятки приложений, то все это начнет рано или поздно вас утомлять - это три. Третий вариант, решения сторонних разработчиков для анализа REDO логов позволяет нам загрузить измененные данные в какую-нибудь отдельную базу данных, но мы лишаемся возможности работать с текущими данными, делать запросы, отслеживая изменения. Короче, ни один из способов в сумме не дает нам ни безопасности хранения данных, ни легкости их извлечения при этом существенно сказываясь на производительности системы.

Новая функция FLASHBACK DATA ARCHIVE входящая в опцию Oracle Total Recall позволяет преодолеть почти все эти ограничения.

Продолжение следует...

четверг, 13 марта 2008 г.

Не гонялся бы ты поп за дешевизною! (С)

Я иногда поигрываю в онлайн-игры. Ногами не бить!

И тут недавно у Sony Online Entertainment (SOE) и у представляемой фирмой Акелла русской версии игры Everquest2 начались проблемы. Невозможно играть, то персонажи пропадают, то зониться между локациями нельзя. Короче кошмар. Официальные представители ответили что-то невнятное.

«В общем, причину обнаружили - одна из основных баз данных при большом количестве игроков онлайн стала вставать "раком", при этом критичная загрузка от обычной отличается в 7-10 раз, т.е. создается ряд запросов, которые по каким-то причинам сразу не обрабатываются и пиковые моментальные нагрузки приводят к длительным лагам. В прайм-тайм это становится очевидно заметно. Сейчас инженеры SOE, которые занимаются поддержкой баз данных, пытаются решить этот вопрос. Сроки его решения я точно сказать не могу, но, надеюсь, что это произойдет в ближайшее время. Мы приносим свои извинения за временные неудобства и стараемся как можно быстрее решить этот вопрос.»
Источник: http://forums.akella-online.ru/showthread.php?t=20211

И тут на одном из компьютерных форумов, я наткнулся на чью-то реплику, мол SOE пожалело денег и мигрировало с Оракла на какую-то дешевку и теперь пожинает плоды этого. Я конечно же не поверил. Потому что, уж слишком безумным казалось мне портировать игру с одной базы данных на другую, когда она уже во всю в продакшене. Да и в менеджменте SOE тоже казалось сидят люди не глупые. Но оказалось, что это правда. Я нашел этот документ, крайне забавный. Они решили перейти на EnterpriseDB и сэкономить порядка 80% денежек. Причем так как эта база «Oracle compatible», то мол особо переписывать ничего не придется.

Ознакомиться с этим чудесными Case Study можно тут:
http://www.ameritas.co.uk/Documents/EnterpriseDB_Sony_Casestudy.pdf

В общем, не гонялся бы ты поп за дешевизною…