середа, 28 червня 2017 р.

petya.a и как я восстанавливался

Windows Defender на работе выдает сообщение, что найден вирус, жму удалить - пишет, что невозможно. Забиваю, сижу, пишу код и тут PL/SQL Developer говорит, что мой файл с запросами был изменен. Нажимаю показать изменения и вижу слева SQL, а справа "привет с Алиэкспресса" (иероглифы). К нам заходят програмеры с соседнего отдела и говорят про вирус, советуют выключать комп. Жму кнопку выключения, компьютер тухнет. Через час, в новостях уже во всю пишут про вирус petya.a.
Вечером захожу в ближайший магазин, покупаю флешку и иду домой делать ее загрузочной. Прогуглив, нахожу утилиту YUMI с помощью которой записываю на флешку 2 образа: Boot-Repair-Disk и Avira Rescue System
Винда 10-ка, загружать нельзя, так как сразу начинается шифрование файлов под видом чекдиска, а потом и предложение заплатить 300 долл. Я загрузил Авиру и прогнал полную проверку - нашло каких-то 10 объектов (кряки тоже вошли в список) и удалило. Далее я перезагрузился и запустил Boot-Repair, нажал на кнопку, как было описано в инструкции.
Снова перезагрузился и попробовал запустить десятку - появилась ошибка:
A disk read error occurred Press Ctrl+Alt+Del to restart 
Полез искать в интернет - найденные варианты не подошли; еще пару раз повторил вышеописанное - та же ошибка. Пробую методом научного тыка: в live-usb от авиры есть программка GParted, в ней можно посмотреть на разделы винчестера. У меня 2 винта: SSD, на котором установлена 10-ка и HDD, на котором раньше была 8-ка. Я замечаю, что флаг boot для 10 установлен на раздел, который в 8-ке такого флага не имеет. В Windows 8 флаг boot установлен для секции system reserved. Решаю, что для Windows 10 тоже надо поставить boot на system reserved. Перезагружаюсь. Начинается загрузка винды :)
Пару замечаний:
- Я также воспользовался рекомендацией по поводу файла perfc (ищите в интернете).
- После загрузки Windows некоторые программы не запускались, либо слетела лицензия.

BSOD 0x0000007B и Windows7

Запараноился я значит по поводу petya.a и решил последовать инструкции, а конкретнее этой части:
To enable or disable SMBv1 on the SMB server, configure the following registry key:
Registry subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\ParametersRegistry entry: SMB1
REG_DWORD: 0 = Disabled
REG_DWORD: 1 = Enabled
Default: 1 = Enabled
 
To disable SMBv1 on the SMB client, run the following commands:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled
 
А после этого накатил обновление майкософта. Перезагрузился и только начал смотреть как 4 цвета логотипа сливаются в единый флаг, всю эту идиллию, на секунду прервал синий экран. Увидев синий цвет снова я понял, что вечер перестает быть томным и попробовал разные методы загрузки: от безопасного до последней удачной. В итоге загрузившись с параметром "не перезагружаться в случае ошибки", я увидел полный текст BSOD: 
0x0000007B (0xFFFFF880009A97E8, 0xFFFFFFFFC0000034, 0x0000000000000000, 0x0000000000000000)
Попробовал вернутся к точке восстановления, которая была автоматически создана при установке пакета обновлений безопасности от Майкрософт - та же ошибка.
Привет, Гугл. Следующие пару часов я просидел на куче форумов и блогов, перепробовал кучу разных способов: 
- В режиме восстановления подкорректировать ключи реестра: установить значение в 0 для ключа Start ветки HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci и ему подобных.
- Провести chkdsk /f/r 
- Выполнить BOOTREC с ключами FIXBOOT и FIXMBR
- sfc /scannow /OFFBOOTDIR=E:\ /OFFWINDIR=E:\windows (диск Е: - это, в моем случае, диск С: в режиме восстановления)
- и т.д. и в разных комбинациях.
В общем спать уже хочется, а конца истории не видно. И тут я попадаю на ЖЖ какого-то парня, у которого такая же ошибка, только винда 2008 и диск в рейде. Он тоже описывает, что гугл уже не тот и ничего ему не помогало до тех пор, пока он не скопировал файлы с папки system32/config/regback в папку system32/config (прежде чем все затирать надо сделать резервную копию). 
С помощью командной строки и команд copy, и xcopy я заменил файлы в папке system32/config. Ребут, скрещиваю пальцы и наблюдаю лого windows. На часах было 3 ночи :(
Еще несколько слов:
- В папке regback  хранится резервная копия реестра, которую система создает каждые десять дней, если планировщик заданий не отключен.
- В процессе восстановления работоспособности ОС вспоминаешь забытое и узнаешь новое (не воспринимайте как призыв к действию "поломай виндовз и проведи весело вечер").
- В следующий раз я буду делать точку восстановления перед внесением изменений в реестр (не повторяйте моих ошибок).

 

понеділок, 19 червня 2017 р.

ENABLE NOVALIDATE проверяет имеющиеся данные

Понадобился мне констрейнт для проверки дублирующих записей в таблице, в которой уже присутствовали дубли. Добавил NOVALIDATE при создании и получил ошибку:
ORA-02299: cannot validate - duplicate keys found

Как выяснилось, при создании уникального ограничения создается уникальный индекс (не всегда, если оракл находит подходящий индекс - он будет использован). Выходом из ситуации стало добавление ключевого слова DEFERRABLE:
alter table TBL_1
  add constraint UK_TBL_1#NO_DOUBLE unique (col1, col2, col3, col4, col5)
  deferrable
  novalidate

DEFERRABLE делает так, что создается НЕуникальный индекс и констрейнт благополучно создается.

Также, можно было создать неуникальный индекс с самого начала и уже потом создать NOVALIDATE констрейнт.

CDATA в XML

Для того, что бы в XML появился тег
<![CDATA[test]]>

надо использовать метод XMLCdata:
select XMLCdata('test')
from dual;