Янв 132015
 

Никто не любит рекламу в Интернете, в том числе и я. На ПК проблема элементарно решается путём установки правильного браузера (например, Firefox) и расширения Adblock или подобного, но на различных embedded-устройствах это не всегда возможно. Хотя у Firefox для Android и есть возможность поставить Adblock, его производительность не всегда комфортна.
Хорошим решением будет прописать в файл /etc/hosts на домашнем маршрутизаторе адрес 0.0.0.0 для различных рекламных и баннерных сетей и т.д. Тогда любое устройство, подключённое к домашней сети при попытке разрешить DNS-имя хоста с рекламой, будет получать адрес 0.0.0.0 и соединение не произойдёт. Вот эти замечательные товарищи создали гигантский список нежелательных хостов (на момент написания статьи более 13000 имён!). Мы его и возьмём, а заодно напишем скрипт для еженедельного обновления (чаще не имеет смысла). Continue reading »

Ноя 082012
 

На Хабрахабре есть отличная статья по теме, но у меня немного другая ситуация. В моём случае Zabbix работает под CentOS 6.2, а модем, архаичный Siemens TC35iT с последовательным портом, на другом хосте под управлением Solaris 10, обслуживая ещё одну систему мониторинга. Задача - настроить отправку длинных (более 160 символов) SMS-сообщений с linux-машины через этот модем, не переставляя его. Continue reading »

Апр 272012
 

У меня есть скрипт для резервного копирования сайта, который работает по расписанию и создаёт бэкап в виде нескольких tar-архивов в каталоге, скажем, /home/cube/backups. Задача - так же по расписанию заливать эти файлы на Яндекс.Диск.

Почему именно Яндекс.диск?

Continue reading »

Июн 172011
 

Иногда бывает, что нужно оценить размер некоторых таблиц в дампе, сделанном утилитой exp, но без импорта его в базу. Можно, конечно, сделать импорт с параметром show=y, но это не всегда удобно, т.к. imp в этом режиме показывает размеры таблиц в строках (а мы хотим в мегабайтах, к примеру), и требует подключения к базе данных, даже для имитации. Выход - написать свой скрипт для оценки размеров таблиц (прошу прощения за неряшливый код): Continue reading »

Апр 152011
 

Узнать общий размер табличного пространства можно, сложив размеры всех составляющих его файлов данных. Эта информация есть в представлении DBA_DATA_FILES.
Объём доступного свободного места в каждом tablespace можно получить из DBA_FREE_SPACE.
Теперь объединим запросы из этих представлений в один и добавим округление, подсчёт процентов свободного места, etc.: Continue reading »

Мар 222011
 

Если нам нужно создать пустую схему в новой базе данных, которая бы полностью наследовала права доступа, системные привилегии и роли другой схемы в существующей базе, то экспортом это делать неудобно и долго, гораздо проще создать нового пользователя и дать ему необходимые права. Список прав получим с помощью специального запроса (см. ниже). Полный набор прав доступа хранится в трёх представлениях словаря данных: dba_tab_privs, dba_sys_privs, и dba_role_privs, в которых нас прежде всего интересует столбец GRANTEE, где и содержится имя пользователя, которому даётся привилегия. Поэтому нам понадобятся 3 запроса, результаты которых мы для удобства объединим в одно множество с помощью оператора объединения множеств - UNION.

Итак, запрос: Continue reading »

Фев 282011
 

При создании дампа схемы с помощью утилиты exp иногда бывает нужно экспортировать не некоторые таблицы по списку, а все таблицы, кроме некоторого списка. При большом количестве таблиц в экспортируемой схеме удобно будет автоматизировать создание файла параметров (parfile) для exp.

Для этого создадим файл build_parfile.sh с таким содержимым: Continue reading »

Фев 242011
 

Вот пример триггера, в котором устанавливается ограничение на количество сессий, открытых одновременно и удовлетворяющих определённому условию (в дополнение к этому посту): Continue reading »

Фев 142011
 

Чтобы узнать, какие транзакции наиболее активно потребляют место в Undo tablespaces с привязкой к сессиям, поможет такой запрос (для версий 10g и выше):

SELECT DISTINCT s.sid, s.serial#, s.schemaname, s.osuser, s.program, t.start_time,  
       t.used_ublk, r.name rollback_segment_name, 
       st.sql_text, st_prev.sql_text prev_sql_text, s.event
FROM v$session s, v$transaction t, v$rollname r, v$sql st, v$sql st_prev
WHERE 
	t.addr = s.taddr AND
	t.USED_UBLK > 0 AND 
	t.xidusn = r.usn AND
	st.SQL_ID(+) = s.SQL_ID AND
	st_prev.SQL_ID(+) = s.SQL_ID
ORDER BY t.USED_UBLK DESC;

Continue reading »