Различные "вопрсы и ответы"  

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

1.Как я прикручивал ADAPTEC AHA2940 к Ultra60 3D creator ( Ultra SparcII PCI )
Есть в нашем хозяйстве две таких машинки . Конструктивно они расчитаны на установку 2х внутренних дисков + еще на внешнюю шину ( в отдельной коробочке ) .Те кто знают сколько стоят Сановские диски , коробочки итп ... поймут почему мне захотелось прицепить туда два обычных SCSI диска на внутреннем шлейфе .Поскольку для этого был необходим еще один контроллер SCSI ( цена которого для SUN сильно отличается от обычной )я решил прикрутить Adaptec AHA2940 для обычной персоналки . Идея родилась под влиянием обнаруженных на сайте Adaptec драйверов для Solaris 2.5/2.6 sparc под Adaptec 2940OF.
И вот что из этого получилось :
1.Установил плату в PCI слот ,подключил к нему жесткий диск.
2.Включил систему и вышел на приглашение OBP .
3.Пустил probe-scsi-all.
4.Как и ожидалось OBP никакого адаптека в упор не увидел .
5.Загрузил систему с диска подключенного к встроенному контроллеру. Установил драйвер:
#pkgadd -d 7000_fw_v200_sol.dd
6.перегрузил систему :
#reboot -- -r
7.#format - диск присутствует .


Увы этот драйвер предназначен только для Solaris 2.5/2.6 . После установки Solaris 8 от халявы пришлось отказаться . Что канешна правильна : "Не гонялся бы ты поп за дешевизной".
2.Глюк Forms builder 6i при работе через DBLINK с базами 8.0.5 -> 8i
Продукты Oracle как сервер базы данных так и инструментарий разработчика ( в частности Developer2000 ) Используются у нас уже много лет .С годами меняются версии .Приходится мигрировать с версии на версию ,естественно набивая шишки в самых неожиданных местах.Опишу одину из них .
При миграции ядра базы данных Oracle 8.0.5.2.1 в среде SUN Solaris 2.5.1 на версию Oracle 8.1.7 в среде SUN Solaris 8 возникла ситуация когда часть програмного обеспечения работала в среде 8.0.5 а часть в среде 8.1.7 .Со старой базы на новую существовали DBLINKи .И вот когда попробовали перекомпилировать формы в теле которых был PL/SQL код который делал элементарный select :
select dummy into :dummy_form from dual@DBLINK80_81
Генератор форм молча выпадал в core dump - как на Unix так и на Windows .
После разбора полетов и грязного приставания к саппорту ( где нас добросовестоно отшили заявив :"8.0.5 не поддерживается а на 8.0.6 и выше глюков нет .) выяснилось следующее :
1.Глюк работает только в одну сторону ! 8.1.7->8.0.5 все нормально .
2.Его нету при 8.0.6->8.1.7 и ессно не было при 8.0.5->8.0.5.
3.В случае DBLINKa 8.1.7.0.0->8.1.7.0.0 формы точно также не компилируются но при этом в любом случае если их собрать при пересозданных линках 8.1.7.2.х->8.1.7.2.х все работает ( влюбой конфигурации ).
4.Пункт 3 лечится установкой свежих патчей - ибо обусловлен багой непетчаного 8i - а именно невозможностью сделать :
desc dual@DBLINK
5.Вероятно компилятору форм 6i необходима нечто еще из той же оперы что и пункт 4 . Чего ему ядро 8.0.5 не дает .После чего он не успев пискнуь выпадает в осадок.И это судя по всему не лечится .Просто на время миграции компилим через базу 8.1.7 и все .
6.При инсталляции 8.0.5 global name по умолчанию имеет префикс ".world" - а 8.1.7 нет .линки потом естественно не работают - формс реагирует аналогично .
7.Пункт 6 лечится с помощью команд : alter database rename global_name to dnname.world - если хотим добавить .world в новую базу. update GLOBAL_NAME set GLOBAL_NAME = 'dbname' - если хотим убрать приставку в старой базе.
PS. линки перед этой операцией следует удалить а потом создать их по новой .

3.Клонирование базы данных припомощи НОТ BACKUP .

1.Создаем базу данных ( dbassist или create database .... )
2.Переводим базу данных в режим archive log :
STARTUP MOUNT ;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN ;
3.Переключаем перед началом копии "Online redo log"
ALTER SYSTEM SWITCH LOGFILE;
4.Начинаем процесс :
alter tablespace system begin backup;
cp /ora/oradata/sys/system.dbf /backup
alter tablespace system end backup ;
.... итд по всем файлам данных .
ALTER DATABASE BACKUP CONTROLFILE TO 'filespec'; - архивируем controlfile.
alter system switch logfile ;
alter system archive log [current|all] ; (вместо этих двух строк достаточто и просто archive log current)

5.Переносим на другую машину только что сархивированные данные и ВСЕ СОЗДАННЫЕ во время бекапа архивные логи .
6.Запускаем recover .
startup mount
recover database using backup controlfile;
auto
recover database using backup controlfile until cancel;
cancel
alter database open resetlogs ;
7.PS
При необходимости изменить местоположение файлов
alter database rename file '/path1/xxxxxx.dat' to '/path2/yyyyyy.dat';
а затем alter database open resetlogs ;


4.Восстановление базы данных в случае порчи некоторых файлов и отсутствии бекапа .

1.Первым делом следует нацарапать себе на лбу параметр Lazy_Dba=BAD_DBA !
2.НЕМЕДЛЕННО сохранить все что осталось !
3.Составить список испорченных файлов
4.Если мучения увенчаются успехом и база открылась - сделать экспорт и по возможности пересоздать базу
5.В случае порчи online redo log :
- попробовать установить параметры init.ora
_allow_resetlogs_corruption=true
_ignore_log_corruption=yes
6.В случае порчи некоторых файлов данных :
- STARTUP DATABASE MOUNT
- Испорченные файлы у далить командой
> ALTER DATABASE DATAFILE 'XXX' OFFLINE DROP ;
(если база находится в режиме NOARCHIVELOG
если же она в режиме ARCHIVELOG то хватит и просто OFFLINE)
- Открыть базу
> ALTER DATABASE OPEN
- Если в испорченных файлах не было ROLLBACK SEGMENT и TEMPORARY то приступить к спасению данных и пересозданию TABLESPACES .
- Если в испорченных файлах находились ROLLBACK и/или TEMPORARY :

- Для ROLLBACK попробовать установить в файле init.ora :
rollback_segments= убрать нерабочие
_corrupted_rollback_segments=name
_offline_rollback_segments=name
(в версии Oracle 9i появилось новое понятие "System management UNDO tablespace" , и такой параметр к нему не применим . Способ восстановления таких пространств описан в следующем документе ). Перевод

- пререстартовать базу
- При необходимости создать новые ROLLBACK & TEMPORARY
- Переназначить пользователям новый TEMPORARY
- Выполнить экспорт сохранившихся данных
- Пересоздать испорченные табличные пространства .
- Вернуть рабочую конфигурацию (init.ora,ROLLBACK,TEMPORARY)
7.В случае потери controlfile :
- Попытаться пересоздать его командой :

> startup nomount
> create controlfile
- текст команды желательно получить заранее командой :
> alter database backup controlfile to trace

8. Если бекап все таки есть ....но "НЕПОЛНЫЙ" (тоесть его нету а есть только некторые файлы).
Например есть файл tools.dbf - а архивных логов нет....
восстановить его из "бекапа"
Установить в init.ora :
_allow_resetlogs_corruption=true
( в 8i появился параметр _allow_read_only_corruption)
а потом запустить svrmgrl
>connect internal
>startup mount
>alter session set events '10228 trace name adjust_scn level 100'; - если одного раза не хватит, повторить - scn может сильно различаться ...
>alter database open|[open resetlogs|open read only] ;

9.Если с момента последней резервной копии был добавлен новый файл данных .

-Необходимо чтобы имелись все архивные журналы с момента создания файла .

>ALTER TABLESPACE <> OFFLINE IMMEDIATE;

или

>ALTER DATABASE DATAFILE ' ' OFFLINE IMMEDIATE;

>ALTER DATABASE CREATE DATAFILE '/...' AS '/...' ;
>RECOVER AUTOMATIC TABLESPACE <> ;

или

>RECOVER AUTOMATIC DATAFILE '/..';

>ALTER TABLESPACE <> ONLINE;/ALTER DATABASE DATAFILE '/...' ONLINE;


5.Как узнать соответствие между номером диска ssdX/sdX и /dev/dsk/cXtYdZ

На страничке Dmitri Volkov
http://dsvolk.msk.ru/oracle/faq/sun.php#disk_names есть описание но просто хочу добавить от себя .
Существуют небольшие тулзы dio и dmap .
dio
dmap
исходники которых можно взять в том числе и у меня.
мне понравилась идея реализованная в dio - ( не знаю насколько она верна но кажется работает ) - X - номер в ssd/sd = целой части от деления minor# устройства на 8, а номер партиции остатку от деления .


6.Копия системного раздела на свободный резервный диск.


На сайте Sys Admin Magazine www.samag.com/solaris/ был скрипт который при помощи ufsdump/ufsrestore создает загрузочную копию системного диска. Добавил туда fssnap - получилось следующее:
rootcopy
Одно замечание - fssnap не захотел работать при запущенном ntpd .Рядом стоит сервер с той-же версией OS - там ntpd не мешает ! ( железо правда разное ). Так что возможны варианты.


7.Восстановление БД открытой с опцией RESETLOGS из бекапа сделанного до этого события
( Описано в 10 главе книжки Велпури )
После запуска БД с опцией RESTLOGS следует сделать резервную копию. Но если такой копии нет , то при наличии некоторых условий пожно восстановить БД из копии сделанной ДО открытия с опцией RESETLOGS.
1.Oracle 7.3.3 и выше .
2.Наличие согласованной копии до этого запуска.
3.наличие управляющего файла после такого запуска.
4.Наличие всех журналов.
Для этого :
1.Узнать SCN на момент сразу после открытия RESTLOGS.или из alert.log или
>select RESTLOGS_CHANGE# - 1 from v$database;
2.Остановить БД ,скопировать текущий controlfile ( после RESTLOGS )
3.Извлечь резервную копию БД и controlfile ( до RESTLOGS )
4.Восстановить её до найденного SCN :
>recover database using backup controlfile until change #
в принципе это не обязательно ...Можно посто автоматом пока не отвалится сам - главное ему CANCEL не говорить .
5.Остановить БД. Скопировать тот controlfile что был сохранен на шаге 2. во все места указанные в init.ora
6.
>startup mount ;
>recover database ;

8.Установка Dip переключателей на Russian USB keyboard Type 6 ,на рабочей станции blade200

1.для 5 - ти пинового свича : 1-4 off , 5 on .
2.для 8 - ми пинового свича 1,2 off, 3 on ,4-7 off , 8 on .

9.Список событий диагностики Oracle

Коды событий


Список утилит Oracle в каталоге $ORACLE_HOME/bin

Unixutils.htm


Как сделать Truncate большой таблицы


 


 



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