Thursday, April 18, 2013

Одна из опасных ошибок использования внешнего JOIN-а


Если вы не уверены в правильности использования JOIN-ов, не поленитесь решить ее с использованием подзапросами


-- Сколько денег принес каждый товар в мае 1998-го,
-- Способ Join-ами с использованием скобок для избежания ошибок
-- Используем как LEFT так и INNER JOIN
SELECT ProductName, ROUND (SUM (OD.UnitPrice * OD.Quantity * (1-OD.Discount)),2) AS Total
FROM   Products P LEFT JOIN
             (
             [Order Details] OD
             INNER JOIN Orders O
             On OD.OrderID=O.OrderID
             AND YEAR (OrderDate) = 1998
             AND MONTH (OrderDate) = 5
             )
             ON P.ProductID=OD.ProductID
Group by ProductName
Order by Total DESC

----Проверяем результаты использую подзапросы

SELECT ProductName,
             (
             SELECT IsNull  (ROUND (SUM (UnitPrice * Quantity * (1-Discount)),2) ,0)
                    FROM   [Order Details]
                    WHERE  OrderId in
                                  (
                                  SELECT OrderID
                                  FROM Orders
                                  WHERE YEAR (OrderDate) = 1998
                                  AND Month (OrderDate) = 5
                                  )                                
             AND ProductID=Products.ProductID
             ) AS Total
FROM   Products    
Order by Total desc




-- 1. Как зовут продавцов, которые оформили заказов в Берлин больше, чем в Париж
-- 2. Как зовут продавцов, которые оформили заказов в Берлин не меньше, чем в Париж
-- Джойнами
SELECT FirstName + ' ' + LastName, Count (DISTINCT O1.OrderID), Count (Distinct O2.OrderID)
FROM Employees E LEFT JOIN Orders O1
ON     E.EmployeeID=O1.EmployeeID
AND O1.ShipCity='Berlin'
LEFT JOIN Orders O2
ON     E.EmployeeID=O2.EmployeeID
AND O2.ShipCity='Paris'
GROUP BY FirstName + ' ' + LastName
HAVING Count (DISTINCT O1.OrderID) > Count (Distinct O2.OrderID) -- или >= для второй задачи
-- HAVING Count (DISTINCT O1.OrderID) >= Count (Distinct O2.OrderID)

-- Подзапросами
SELECT FirstName + ' ' + LastName
FROM Employees
WHERE
(SELECT Count(ShipCity)
             FROM Orders
             WHERE EmployeeID=Employees.EmployeeID
             AND ShipCity='Berlin'
             )
             > -- или >= для второй задачи
             (SELECT Count(ShipCity)
             FROM Orders
             WHERE EmployeeID=Employees.EmployeeID
             AND ShipCity='Paris'
             )
            

Wednesday, April 17, 2013

Опасности при использовании JOIN

Если попробовать решить одну и ту же задачу двумя способами - подзапросами и джойнами, то можно обнаружить ошибку. См. скрин ниже.
При запросе подзапросами мы получаем на две записи больше, чем при запросе джойнами  с нулевыми значениями  - записи желтым.
Все дело в том, что не все покупатели из Customers нашлись в Orders.
Казалось бы решение в том, чтобы заменить INNER JOIN на LEFT JOIN, RIGHT JOIN или FULL JOIN в зависимости от задачи, но это не спасает ...




Ошибки
1) Думайте, когда использовать INNER JOIN, LEFT JOIN, FULL JOIN, т.е. возможны ли ситуации, когда не все покупатели имеются в таблице Orders.
2) Если решили использовать LEFT  JOIN, то не использовать COUNT(*) , т.к. в этом случае будут считаться все записи объединения, не имеющие смысла. Используйте COUNT по какому-то явному столбцу, например, COUNT (ORDERID)

3) Самая опасная ошибка в том, что можно допустить ошибки при объединении. Надо внимательно относиться к тому, где применять какой JOIN.

CROSS JOIN or INNER JOIN?

INNER JOIN позволяет не выводить весь список возможных соединений таблиц, а выводить  сразу по условию - только те, которые соответствуют условию в ON
SELECT *
FROM   ORDERS O INNER JOIN [ORDER DETAILS] OD
ON O.ORDERID=OD.ORDERID

Например



Алгоритм для использования подзапросов SUBQUERRY

Чтобы решить ту или иную задачу c использованием подзапросов SUBQUERY,  необходимо подумать, отталкиваясь от меньшего к большему, задавая себе вопросы и отвечая на них.

Последовательность вопросов и действий:

Вопрос 1:
Что я должен получить по условию задачи? В какой таблице мы можем это видеть?

Полезно построить диаграмму БД, прежде, чем присутпить к построению запросов.

В зависимости от ответа, сразу пишем запрос к той таблице, из которой можно получить результат. Например, если то, что нам нужно находится в TABLE1 и это NAME1, то пишем

SELECT NAME1
FROM TABLE1

Вопрос 2:
Из какой таблицы я могу получить недостающие данные?
Поняв ее имя, сразу открываем скобки в основном запросе и помещаем в них подзапрос к недостающим данным. Если эти данные LACK_DATA в таблице TABLE2, то внутренний подзапрос будет выглядеть так (синим):

SELECT NAME1,
               (
               SELECT LACK_DATA 
               FROM  TABLE2
               )
FROM TABLE1

Вопрос 3:
Как недостающие данные и данные из основого запроса связаны между собой? Пусть они связаны по столбцу ORDER_ID. Тогда добавляем условие WHERE во внутренний запрос (синим):
SELECT NAME1,
               (
               SELECT LACK_DATA
               FROM  TABLE2
               WHERE TABLE2.ORDER_ID=TABLE1.ORDER_ID
               )
FROM TABLE1


Рассмотрим пример: Сколько штук каждого товара мы продали по БД на диаграмме ниже?





Вопрос 1: Что ищем и где это есть? Ищем имена товаров ProductName и они есть в таблице Products. Пишем:

SELECT ProductName
FROM Products

Вопрос 2: Что нам не хватает и в какой таблице мы можем найти эти недостающие данные?
Нам нужно кол-во QUANTITY каждого продукта. И это есть в таблице [Order Details]
Открываем скобки и пишем подзапрос (синим)
SELECT ProductName,
            (SELECT COUNT(Quantity)
             FROM [Order Details]
             ) 

FROM Products

Вопрос 3: Каким образом связаны таблицы Products и [Order Details]? Ответ: По полю ProductID. Добавляем во внутренний запрос условие (синим)

SELECT ProductName,
            (SELECT COUNT(Quantity)
             FROM [Order Details]
             WHERE [Order Details].ProductID=Products.ProductID 
              )
FROM Products

Готово! На выходе мы имеем список и кол-во проданных товаров. 

Далее можно отсортировать по кол-ву. Удобнее внутреннему запросу дать имя, для его использования в ORDER BY

SELECT ProductName,
            (SELECT COUNT(Quantity)
             FROM [Order Details]
             WHERE [Order Details].ProductID=Products.ProductID
            ) AS QTY
FROM Products
ORDER BY QTY DESC

Если нужно вывести только имя самого продаваемого товара, то в SELECT можно добавить TOP и подзапрос переместить в Order BY.
Т.о. запрос будет выглядить следующим образом:


SELECT TOP 1 ProductName
FROM
Products
ORDER BY
            (SELECT
COUNT(Quantity)
             FROM
[Order Details]
            WHERE
[Order Details].ProductID=Products.ProductID 
           
)       
DESC






Алгоритм для использования объединения таблиц CROSS JOIN

Далее для демонстрации CROSS JOIN рассмотрим задачи на основе базы Northwind, загрузить ее образец можно с http://msdn.microsoft.com/ru-ru/library/ms143221(v=sql.105).aspx

Диаграмма БД:

Задача 1.
Сколько городов обслужил каждый продавец?

1) Осмыслить структуры базы и объединить все таблицы, упомянутые в задаче

SELECT *
FROM Employees E CROSS JOIN Orders O

Получим малополезный массив кол-во строк первой таблицы * кол-во строк второй таблицы

2) Профильтровать так, чтобы остались только осмысленные записи, т.е. те, которые имеют смысл в реальности.

SELECT *
FROM Employees E CROSS JOIN Orders O
WHERE E.EmployeeID=O.EmployeeID

3) Спрашиваем себя, что мы получили в результате. В данном примере это список всех заказов ORDERS.
Это нам нужно для того, чтобы позже

4) Всегда GROUP BY
А чего я хочу получить по задаче? Я хочу список продавцов, значит в GROUP BY пишем продавцов

SELECT E.FirstName+' '+E.LastName, count(DISTINCT ShipCity)
FROM Employees E CROSS JOIN Orders O
WHERE E.EmployeeID=O.EmployeeID
GROUP BY E.FirstName+' '+E.LastName
ORDER BY count(DISTINCT ShipCity) DESC


Задача 2.
Как зовут покуптелей, делавших в 1996-м заказы у нескольких продавцов?

SELECT C.ContactName, COUNT (DISTINCT EMPLOYEEID)
FROM CUSTOMERS C CROSS JOIN Orders O
WHERE C.CustomerID=O.CustomerID
AND YEAR (ORDERDATE)=1996
GROUP BY C.ContactName
HAVING COUNT (DISTINCT EMPLOYEEID) > 1

COUNT (DISTINCT EMPLOYEEID) из SELECT можно убрать


 Задачи с тремя и более таблицами и JOIN-ами можно решать по такому же алгоритму:









Saturday, March 23, 2013

Oracle again?

Today I've completed two Oracle courses on 11g and passed the 1Z0-050 exam... to upgrade my Oracle 10g DBA OCP to 11g. I wonder if I will have a chance to work with Oracle. It would be nice to be honest.

Monday, September 19, 2011

Google Adsense


Сто лет сюда не заходил...Тут появилась какая-то херня Monetize... Это Google Adsense. Добавил только что :) и вон че вылезло :)))




let's see when I'll earn first bagz! :)

Tuesday, October 19, 2010

How to extend swap size in RHEL

[root@rhel_srv ~]# dd if=/dev/zero of=/swapfile bs=1024k count=16384
[root@rhel_srv ~]# mkswap /swapfile
Setting up swapspace version 1, size = 17179865 kB
[root@rhel_srv ~]# swapon /swapfile
[root@rhel_srv ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/mapper/vg.01-lv_swap partition 33554424 144 -1
/swapfile file 16777208 0 -2
Add to /etc/fstab
[root@rhel_srv ~]# vi /etc/fstab
/swapfile swap swap deafaults 0 0

Wednesday, July 14, 2010

How to install perl modules (using CPAN)

Today I've updated SpamAssassin. And it required some perl-modules.
REQUIRED module missing: HTML::Parser
optional module missing: Mail::SPF
optional module missing: IP::Country
optional module missing: Razor2
optional module missing: Net::Ident
optional module missing: IO::Socket::INET6
optional module missing: IO::Socket::SSL
optional module missing: Mail::DKIM
optional module missing: DBI
optional module missing: LWP::UserAgent
I've found quick way to install them using CPAN:
http://www.livejournal.com/doc/server/lj.install.perl_setup.modules.html

...

# perl -MCPAN -e shell

Once the Perl interpreter has loaded (and been configured), you can install modules with: install MODULENAME.

The first thing you should do is upgrade your CPAN:

cpan> install Bundle::CPAN

Once it is completed, type:

cpan> reload cpan

Now, enter the following command to retrieve all of the required modules:

cpan> install HTML::Parser

Thursday, July 08, 2010

FreeBSD upgrade 5.5 -> 6.4

How I upgraded FreeBSD from 5.5 to 6.4 (8, July, 2010) чисто шпаркалка на будущее

1) Created all possible backups (configs, scripts, image of HDD, etc)
2) Download sources
cd /usr/src and edit cvs-supfile
cat cvs-supfile

*default host=cvsup.burnet.ru
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_6_4
*default delete use-rel-suffix
*default compress
src-all
ports-all
doc-all

cvsup -g -L 2 /usr/local/etc/supfile | tee cvsup.log && echo ‘cvsup finished’ | mail –s ‘cvsup ’ my@domain

After that let's continue:

cd /usr/src ; make buildworld
make buildkernel KERNCONF=stb-office && echo ‘buildkernel completed’ | mail my@domain
make installkernel KERNCONF=stb-office && echo ‘installkernel completed’ | mail my@domain
- Switch off /usr/local/etc/rc.d scripts
shutdown -r now
adjkerntz -i
mergemaster -p
cd /usr/src && make installworld && echo ‘world has been installed’ | mail my@domain
mergemaster -p
shutdown -r now
- Remove /usr/obj
- Switch on /usr/local/etc/rc.d
reboot
cd /usr/src; make clean
find /usr/ports -type d -name 'work' | xargs rm –rvf
make delete-old (сделал пока только на man’ы)
make delete-old-libs (не стал делать)

Обновляем порты
# portsnap fetch
# portsnap extract
# portsnap update
#cd /usr/ports
#make index

Встреченные ошибки

Ошибки при make installworld
1) Proxy user (избегается при правильном mergemaster -p)
ERROR: Required proxy user is missing, see /usr/src/UPDATING.
*** Error code 1

Stop in /usr/src.
*** Error code 1
Решается через adduser proxy
Но если mergemaster –p делал внимательно, то и ошибки не будет
2) Permission denied
Noexec option in /tmp
umount /tmp
vi /etc/fstab
mount –a
3) Make buildworld error
error:make:don't know how to make buildkernel.stop
Решается повторным cvsup-ом с проверкой cvs-supfile. При первоначальном у меня оказался отключенным *default=compress, после включения и повторной загрузки мир собрался.

=============
The next step is upgrading to 7.3 with the freebsd-update tool.

Saturday, July 03, 2010

ms project links

Нашел видеоурок хороший для быстрого знакомства с ms project за 30 мин.
http://www.microsoftproject.ru/lessons/lesson_1/lesson_1.html
для того, чтобы получить доступ к нему нужно зарегистрироваться на http://www.microsoftproject.ru

Wednesday, March 17, 2010

Update a config on multiple servers

I've updated the /etc/updatedb.conf on multiple servers by two small scripts:
First script (slocate.sh) located on a management server calls second ~/slocate/updatedb.sh located on a common drive of the target servers which replaces updated /etc/updatedb.conf file.
1) slocate.sh listing
#!/bin/ksh
for machine in $(cat epdtw_srvs.lst)
do
if ping -c 3 $machine >/dev/null 2>&1
then
echo "==== $machine ================="
ssh root@$machine ~/slocate/updatedb.sh
else
echo "==== $machine not available ==="
fi
done
2) ~/slocate/updatedb.sh listing
#!/bin/bash
# Set new /etc/updatedb.conf by Change #...
cp /etc/updatedb.conf /etc/updatedb.conf.bak
cp ~/slocate/updatedb.conf.new /etc/updatedb.conf

Saturday, March 06, 2010

в Сингапур на денек по пути в (из) Бангалор

Через пару недель собираюсь на курсы LSF (Basic and Advanced Configuration and Administration, 5 days) в Бангалор. Как оказалось Шанкар (админ PI) - ему кстати еще только 24 года - закончил свой контракт и уезжает 10 марта как раз в Бангалор, где в пригороде как раз находится его офис и квартира (Wipro office in Electronic City). Мы договорились встретиться там и прошмыгнуться по городу, когда я там появлюсь - он выслал мне свой номер телефона и будет ждать звонка в субботу. А т.к. моя дочка ждет, что я привезу ей хорошую зеркалку (типа CANON EOS 50D) и т.к. я лечу через Сингапур, где на обратном пути буду с 7 утра до 9 вечера, то попросил порекомендовать Шанкара торговый центр с электро- фото-техникой и путь к нему в Сингапуре, если он знает. В Индии-то мы вместе прошмыгнемся, поэтому нет нужды спрашивать :)
Он посоветовал в аэропорту Сингапура пройти к Information Desk и спросить о Free City Tour, при помощи которого можно совершить бесплатную двухчасовую экскурсию по городу. Таким образом, я смогу с утра часов с 7 или 8 скоротать пару часов прокатившись по Сингапуру и получив первые впечатления в рамках этого Free City Tour'а. Затем по возвращении из него в аэропорт можно сесть на поезд метро и доехать до Small(Little) India -> Big shopping centre "Mustafa", где найти секцию электроники и фототоваров. Цены как он предполагает там ниже московских и индийских. Также если есть желание оттуда же можно на такси проехать до Sim Lim Square, где находится 6-этажный торговый комплекс электроники. Но там нет гарантии, что не нарвешься на китайскую подделку, в отличие от Мустафы.
Я решил посмотреть цены на фотоаппарат в DutyFree Сеула когда буду на пути в Бангалор и на обратном пути опеределиться где лучше приобрести фотик - в Сингапуре или в DutyFree Сеула.
Также по прибытии в аэропорту в Бангалоре Шанкар порекомендовал сразу обратиться в Information Desk и узнать про Prepared Taxi (или Pre-Payed я не понял :)). Но главная суть в том, что можно нарваться на таксистов, которые кидают, особенно иностранцев.

Saturday, January 02, 2010

WM ID

I have registered in WM by ID 615861948620

Wednesday, December 30, 2009

A cron script does not work - check mail in /var/spool/mail

I was really surprized when my cron script didn't work from cron. Though it successfully worked through at and has all neccessary environments.
Today I found a suggestion to add to /etc/crontab your own email address and investigate the output. I changed MAIL in the /etc/crontab, restarted crond by "service crond restart", but no messages in my mailbox. Then I returned MAIL=cron in the /etc/crontab and just checked root's mailbox in /var/spool/mail/cron. And I had found the reason - "sh: kinit: command not found"! Though I thought that all paths are presented in $PATH of cron-script :) After adding to PATH variable the /usr/kerberos/bin the script began to work via cron successfully.
Therefore don't forget to check mails in such cases!!!
Other experience said me that variable should be exported actually by export -
#!/bin/bash
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/kerberos/bin/
export FIRST_V=mean1
export SECOND_V=mean2
....

Saturday, November 21, 2009

Draft to CM Presentation

As a TCI team player I am responsible for IT Subsurface Infrastructure and Change implementing within it. I'd like to give short presentation on how changes are pefromed in IT Subsurface Infrastructure. I am not strong in ITSM and ITIL processes, we don't have software configuration management decision. I'll just describe our experience of implementing the changes in our infrastructure.
Agenda of my talk is the following.
1) Introduction
2) Subsurface IT Services and Configuration Overview
3) Steps to implement Changes
4) Our experiens

Wednesday, November 11, 2009

to extract SEGY-files from LTO3 tapes

Sometimes I am asked to copy SEGY-data from 400Gb tape cartridge of LTO3 with IBM Ultrium LTO3 tape reader.
# dd if=/dev/st0 of=/tmp/file.sgy bs=512k

Friday, October 30, 2009

Cisco ICND 1, 2 прослушаны

Сегодня закончили слушать ICND2, первый прослушали месяц назад - 28 Сент - 2 Окт.
Впечатления в целом хорошие, но ощущение каши по-моему еще больше в голове :)

GNS3

Долго не мог запустить проект в GNS3, получая ошибку "Can't start Dynamips on port 7200". Дело было не файрволле. Оказалось все просто: 1) GNS3 не терпит пробелов и русских символов в именах системных каталогов. 2) GNS3 В не зависимости от того куда установлен dynamips - ищет его в C:\Program Files\GNS3\Dynamips\

Sunday, October 18, 2009

Перешагнуть через себя или добиться своего?

Я заметил, что мое отношение к людям часто меняется от хорошего к не очень, от не очень к хорошему с течением времени в зависимости от моих наблюдений и опыта общения с ними. Есть интересная категория людей, представители которой по непонятным причинам могут быть либо достаточно приветливыми либо просто не замечать тебя :) Для меня это и курьезно до улыбки и обидно одновременно. И вот непонятно как вести себя, когда в очередной раз такой человек на твой кивок приветственный головы отводит глаза и проходит мимо. А если ты еще и решил протянуть руку в приветствии, то ... пытается показать снисходительность .... Так вот и вопрос - если так и ходить с жеманным выражением лица - мол он меня не приветствует, чего же я буду ... а если ты все же приветствуешь, то ощущаешь себя оплеванным ...
Перешагнуть через себя подав первым руку и почувствовав снисхождение и постепенно добиться своего, заставив такого человека расположиться к тебе и зауважать?
Хз ... вопрос имхо непростой. По идее меня ни то ни это не напрягает и я ничего не теряю, но ... я чувствую себя не в своей тарелке и в том и в этом случае.

Афоризмы

Прочитал только что "Как съесть слона" - в инете полно вариантов этой метафоры для планирования и достижения целей. Все просто на первый взгляд - дели большую задачу на мелкие (как слона на тушки), и постепенно решай (поедай) мелкие и ... в конце концов цель будет достигнута (слон съеден). Будь-то, н-р, выучить 500 новых слов в неделю, сбросить 20 кг, выполнить реорганизацию торгового зала и т.д и т.п. Просто! Но самое главное, имхо, это выполнять действие, а именно периодически поедать тушки слона, не ленясь и не отвлекаясь на других слонов.... Т.е. нужно сначала быть голодным и любителем именно этой "кухни". Т.е. не все так просто - без труда. не вынуть и рыбки из пруда, как говорится.
"Если не знаешь куда бежать, стоит ли бежать". Да, уж .... казалось бы так и есть с одной стороны, но ведь бег трусцой по утрам часто тоже без определенного направления, но ведь бегут же с пользой для здоровья и самочувствия. Имхо, можно двояко посмотреть этот на афоризм.

Wednesday, August 26, 2009

Cisco для чайников

Азы конфигурирования маршрутизаторов Cisco для чайников и ленивых
http://faq-cisco.ru/quiz/faq-cisco_quiz.php?id=ccna

Насчет книжек на русском - отдельная песня. Там МНООООГО фактических ошибок.

Sunday, August 09, 2009

Renaming files

I've decided to put here different examples of tasks to resolve them by scripting.

1) Rename the pool of files with same beginning of files by cutting the same beginning part.
For example, we have
Pimsleur - English For Russian Speakers - Unit 01.mp3
Pimsleur - English For Russian Speakers - Unit 02.mp3
.....................................................
Pimsleur - English For Russian Speakers - Unit 30.mp3

We should get
Unit 01.mp3
Unit 02.mp3
.....................................................
Unit 30.mp3

Saturday, August 08, 2009

LSF issues: RAM and swap

It were interesting workdays last week due to a lot of users began submit jobs to LSF. It was my first week after annual vacation :) And it was my first little experience of troubleshoting LSF issues.
One user submited calculation of big model in DYNAMO and sent to down two nodes of LSF with message "Out of memory". It were IBM x3550 with 32GB RAM and 8 GB of swap. Support suggested us to increase the swap memory and to try after that. I increased swap memory to 32 Gb by adding into swap files from filesystem () and we tested with user. He submited his job which consumed all available RAM and more than 20 Gb of swap.
But it successfully finished!
Other user could not finish his model after 4 or 5 hours of processing. And I did not suspect that problem was in unavailablee free space on his disk partition.
So I have got two things - at first check possible lack of RAM and swap and lack of disk space.

Tuesday, August 04, 2009

Мегафон в Meizu

Купил Мейзу и никак не удавалось настроить жопарез. Нашел ссылку http://img229.imageshack.us/img229/3950/prtscn20090707183550.png , где прокси прописан и порт 8080. Хотя в контакт-центре по 0500 ответили, что нужно без прокси настроить и с именем/паролем gdata/gdata. Сделал прокси как на скрине, но имя/пароль и gdata/gdata заработало ... :) Т.о.
APN - internet
Имя - gdata
Пароль - gdata
Прокси-сервер 10.0.0.0
Порт 8080

Sunday, June 07, 2009

Tuesday, May 19, 2009

to PV, VG, LV

1) To add space to an existing LVM system it needs to add free space from an existing VG by command lvextend.
2) If it doesn't VG free space, then it needs to add spare space from PV by vgextend.
3) If all of available PV's are taken, it needs to create new PV from unassigned partintion or hard drive by pvcreate.
==
1) To create PV from new hard drive.
# pvcreate /dev/hdc
2) To create PV from /dev/hdc2 partition
It needs to change partintion type by fdisk or parted to LVM (in fdisk - 8e, in parted - lvm)
3) then create PV # pvcreate /dev/hdc2

Friday, May 15, 2009

По Kido и др.

Список апдейтов для закрытия дыр от Кидо:
MS08-067 (ссылка);
MS08-068 (ссылка);
MS09-001 (ссылка);

Что делать, если встретил в логах "Лечение невозможно: файл такой-то не вылечен: неизлечим"
От Каспера - http://support.kaspersky.ru/faq/?qid=208635441

Thursday, May 14, 2009

Черный экран и желтый восклицательный знак

Полечил сегодня проблему черного экрана с желтым восклицательным знаком при входе в терминальную сессию Windows 2003 при помощи ссылки - Windows 2003 Black Login Screen.
Cмысл в том, что для временного решения при появлении черного экрана с желтым восклицательным знаком нужно нажать Ctrl+Alt-Del (я нажал Ctrl+Alt+End). И после можно симпортировать ветку реестра "HKEY_USERS\.DEFAULT\Control Panel\Colors" с исправного сервака. Мне помогло и нажатие и импорт ветки реестра.
Типа проблема появляется, когда на системном диске нехватает места и после очистки диска, она не исчезает.

Saturday, May 09, 2009

Добавить второй IP на сет.карту FreeBSD

# ifconfig 'if name' inet 'second ip-address' netmask 255.255.255.255 alias

Monday, April 27, 2009

Настройки Windows с помощью реестра

http://www.panvasoft.com/rus/blog/153/

Мультизагрузочная флешка (ссылка)

http://greenflash.su/

To restrict users from running programs (XP,2000/2003 )

HOW TO: Restrict Users from Running Specific Windows Programs in Windows 2000
http://support.microsoft.com/kb/323525

Friday, April 24, 2009

ШПАРГАЛКА ПО SED

HANDY ONE-LINERS FOR SED (Unix stream editor) 23 марта, 2001
ШПАРГАЛКА ПО SED
собранные Эриком Пементом (Eric Pement) версия 5.1
Последняя версия доступна на:
www.student.northpark.edu/pemente/sed/sed1line.txt

РАЗРЫВЫ ФЙЛА:

# заменяем ПРОБЕЛ на двойной пробел
sed G

# ставим двойной пробел с уже имеющимися в файле пустыми строками. Выходной файл
# должен содержать не более одной пустой строки между строками текста
sed '/^$/d;G'

# Тройной пробел в файле
sed 'G;G'

# отменить двойные пробелы (предполагается, что пронумерованные строки всегда пустые)
sed 'n;d'

ЧИСЛА:

# ставим номер каждой строки файла (левое выравнивание). Использование табуляции (смотри
# особенности применения 't' в конце этого файла) в отличие от пробела сохранит отступ(ы).
sed = filename | sed 'N;s/n/t/'

# ставим номер каждой строки файла (число слева, выравненное по правому краю)
sed = filename | sed 'N; s/^/ /; s/ *(.{6,})n/1 /'

# ставим номер каждой строки файла,но только если строка не пустая
sed '/./=' filename | sed '/./N; s/n/ /'

# считаем количество строк (аналог "wc -l")
sed -n '$='

ПРЕОБРАЗОВАНИЯ И ЗАМЕНА ТЕКСТА:

# В СРЕДЕ UNIX: переводит DOS стандарт перевода строки (CR/LF) в формат Unix
sed 's/.$//' # полагем , что все строки оканчиваются CR/LF
sed 's/^M$//' # в bash/tcsh, нажимем Ctrl-V затем Ctrl-M
sed 's/x0D$//' # для gsed 3.02.80, но выше попроще

# В СРЕДЕ UNIX: преобразовываем символы новой строки Unix (LF) в DOS формат
sed "s/$/`echo -e \r`/" # командная строка в ksh
sed 's/$'"/`echo \r`/" # командная строка в bash
sed "s/$/`echo \r`/" # командная строка в zsh
sed 's/$/r/' # для gsed 3.02.80

# В СРЕДЕ ДОС: преобразуем символы перевода строк Unix (LF) в DOS формат
sed "s/$//" # способ 1
sed -n p # способ 2

# В СРЕДЕ ДОС: преобразуем символы перевода строки ДОС (CR/LF) формат Unix
# этого нельзя сделать DOS версией sed. Используем "tr"
tr -d r outfile # GNU tr версии 1.22 или выше

# удаляем отступы (пробелы,табуляции) с начала каждой строки
# выравниваем текст полностью по левому краю
sed 's/^[ t]*//' # смотри проблемы с 't' в конце файла

# удалить замыкающие пробелы, табуляции с конца каждой строки
sed 's/[ t]*$//' # смотри проблемы с 't' в конце файла

# удаляем отступы, пробелы, табуляции и с конца , и с начала строки
sed 's/^[ t]*//;s/[ t]*$//'

# вставляем 5 пробелов в начале каждой строки (отступ для строки)
sed 's/^/ /'

# выравниваем весь текст справа по ширине колонки 79 символов
sed -e :a -e 's/^.{1,78}$/ &/;ta' # 78 плюс 1 пробел

# центрируем весь текст посредине при ширине колонки 79 символов.В первом способе
# пробелы в начале строки нужны, а пробелы в конце строки дополняются до конца строки.
# Второй способ, пробелы в начале строки отбрасываются в центр строки, и нет
# завершающих пробелов до конца строки.
sed -e :a -e 's/^.{1,77}$/ & /;ta' # Способ 1
sed -e :a -e 's/^.{1,77}$/ &/;ta' -e 's/( *)1/1/' # Способ 2

# подстановка (найти и заменить) "foo" на "bar" в каждой строке
sed 's/foo/bar/' # заменяет только первое вхождение в строке
sed 's/foo/bar/4' # заменяет только 4 вхождение в строке
sed 's/foo/bar/g' # заменяет ВСЕ вхождения в строке
sed 's/(.*)foo(.*foo)/1bar2/' # заменяет друг за другом
sed 's/(.*)foo/1bar/' # заменяет только завершающее слово

# ЗАМЕНЯЕТ "foo" на "bar" ТОЛЬКО для строк ,содержащих "baz"
sed '/baz/s/foo/bar/g'

# подставляет "foo" на "bar" КРОМЕ строк, содержащих "baz"
sed '/baz/!s/foo/bar/g'

# меняет "scarlet" или "ruby" или "puce" на "red"
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # большинство sedов
gsed 's/scarlet|ruby|puce/red/g' # только GNU sed

# обратный порядок строк (эмулирует "tac")
# баг/фича в HHsed v1.5 - пустые строки удаляются
sed '1!G;h;$!d' # способ 1
sed -n '1!G;h;$p' # способ 2

# обратный порядок символов в строке (походит на "rev")
sed '/n/!G;s/(.)(.*n)/&21/;//D;s/.//'

# соединяет строки друг с дружкой (как "paste")
sed '$!N;s/n/ /'

# если строка оканчивается обратным слэшем, добавляем последующую строку к ней
sed -e :a -e '/\$/N; s/\n//; ta'

# если строка начинается с знака равно , добавляем ее к предыдущей строке
# и заменяем "=" на один пробел
sed -e :a -e '$!N;s/n=/ /;ta' -e 'P;D'

# добавляем запятые к числовым строкам, меняя "1234567" на "1,234,567"
gsed ':a;s/B[0-9]{3}>/,&/;ta' # GNU sed
sed -e :a -e 's/(.*[0-9])([0-9]{3})/1,2/;ta' # остальные sed

# добавляем запятые к числам с десятичной точкой и знаком минуса (GNU sed)
gsed ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/12,3/g;ta'

# добавляем пустую строку каждые пять 5 строк (после строк 5, 10, 15, 20, итд.)
gsed '0~5G' # только GNU sed
sed 'n;n;n;n;G;' # другие sedы

ВЫБОРОЧНАЯ ПЕЧАТЬ ОПРЕДЕЛЕННЫХ СТРОК:

# печать первых 10 строк файла ( поведение "head")
sed 10q

# печать первой строки файла (поведение "head -1")
sed q

# печать последних 10 строк файла ( "tail")
sed -e :a -e '$q;N;11,$D;ba'

# печать последних 2 строк файла ( "tail -2")
sed '$!N;$!D'

# печать последней строки файла ( "tail -1")
sed '$!d' # способ 1
sed -n '$p' # способ 2

# печать только строк ,которые совпадают с regexp ( "grep")
sed -n '/regexp/p' # способ 1
sed '/regexp/!d' # способ 2

# печать только строк , НЕ совпадающих с regexp (как "grep -v")
sed -n '/regexp/!p' # способ 1, соответствует вышеприведенному
sed '/regexp/d' # спопоб 2, простейший синтаксис

# печать строки непосредственно перед regexp, но не строки
# содержащей regexp
sed -n '/regexp/{g;1!p;};h'

# печать строки непосредственно после regexp, но не строки
# содержащей regexp
sed -n '/regexp/{n;p;}'

# печать 1 строки контекста перед и после regexp,с номером строки,
# показывающей , сколько regexp встретилось (как в "grep -A1 -B1")
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

# grep для AAA и BBB и CCC (в любом порядке)
sed '/AAA/!d; /BBB/!d; /CCC/!d'

# grep для AAA и BBB и CCC (в таком же порядке)
sed '/AAA.*BBB.*CCC/!d'

# grep для AAA или BBB или CCC (как в "egrep")
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d # большинство sedов
gsed '/AAA|BBB|CCC/!d' # только для GNU sed

# печать параграфа если тот содержит AAA (пустые строки,разделенные параграфами)
# HHsed v1.5 должен содержать 'G;' после 'x;' в следующих 3 скриптах
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

# печать параграфа если тот содержит AAA и BBB и CCC (в любом порядке)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

# печать параграфа если тот содержит AAA или BBB или CCC
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA|BBB|CCC/b;d' # только для GNU sed

# печать строк длинее 65 символов
sed -n '/^.{65}/p'

# печать строк короче 65 символов
sed -n '/^.{65}/!p' # способ 1, соответствует вышеприведенному
sed '/^.{65}/d' # способ 2, простой синтаксис

# печать секции файла от регулярного выражения до конца файла
sed -n '/regexp/,$p'

# печать секции файла , основанная на номерах строк (включающей строки 8-12 )
sed -n '8,12p' # способ 1
sed '8,12!d' # способ 2

# печать строки 52
sed -n '52p' # способ 1
sed '52!d' # способ 2
sed '52q;d' # способ 3, эффективно для больших файлов

# начиная со строки 3, печать каждой 7-ой строки
gsed -n '3~7p' # для GNU sed
sed -n '3,${p;n;n;n;n;n;n;}' # для других

# печать части файла между двумя регулярными выражениями
sed -n '/Iowa/,/Montana/p' # чувствительно к регистру

ИЗБРАННОЕ УДАЛЕНИЕ ОПРЕДЕЛЕННЫХ СТРОК:

# печать всего файла , КРОМЕ части между двумя регулярными выражениями
sed '/Iowa/,/Montana/d'

# удаление двойных,последовательных строк файла (типа "uniq").
# первая строка из дубирующихся строк сохраняется, остальные убираются
sed '$!N; /^(.*)n1$/!P; D'

# удалить дублирующиеся непоследовательные строки файла. Острожнее с
# переполнением размера буфера, занятой памяти, лучше используйте GNU sed!
sed -n 'G; s/n/&&/; /^([ -~]*n).*n1/d; s/n//; h; P'

# удаление первых 10 строк файла
sed '1,10d'

# удалить последнюю строку файла
sed '$d'

# удалить последние 2 строки файла
sed 'N;$!P;$!D;$d'

# удалить последние 10 строк файла
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # способ 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # способ 2

# удалить каждую 8 строку
gsed '0~8d' # только GNU sed
sed 'n;n;n;n;n;n;n;d;' # другие sedы

# удалить все пустые строки файла (также как и "grep '.' ")
sed '/^$/d' # способ 1
sed '/./!d' # способ 2

# удалить все ПОСЛЕДОВАТЕЛЬНЫЕ строки файла , кроме первых; также
# удаляет все пустые строки с начала и до конца файла (походит на "cat -s")
sed '/./,/^$/!d' # способ 1, разрешает 0 пустых в начале, 1 от EOF
sed '/^$/N;/n$/D' # способ 2, разрешает 1 пустых в начале, 0 от EOF

# удалить все ПОСЛЕДОВАТЕЛЬНЫЕ пустые строки из файла кроме первых двух:
sed '/^$/N;/n$/N;//D'

# удалить все пустые строки с начала файла:
sed '/./,$!d'

# удалить все завершающие файл пустые строки
sed -e :a -e '/^n*$/{$d;N;ba' -e '}' # рaботает на всех sed
sed -e :a -e '/^n*$/N;/n$/ba' # также, кроме gsed 3.02*

# удалить последнюю строку каждого параграфа
sed -n '/^$/{p;h;};/./{x;/./p;}'

СПЕЦИАЛЬНЫЕ ПРИМЕНЕНИЯ:

# удалим спецсимволы (overstrikes) (символ, бэкспейс) из man pages. Команда 'echo'
# может понадобится для ключа -e если у вас ось Unix System V или bash shell.
sed "s/.`echo \b`//g" # двойные кавычки для среды Unix
sed 's/.^H//g' # в bash/tcsh, жмите Ctrl-V затем Ctrl-H
sed 's/.x08//g' # hex (16-ричное) выражение для sed v1.5

# получаем заголовок сообщения формата Usenet/e-mail
sed '/^$/q' # удаляем все после первой пустой строки

# получить тело сообщения формата Usenet/e-mail
sed '1,/^$/d' # удаляем все до первой пустой строки

# получить заголовок темы письма , но без слова "Subject: "
sed '/^Subject: */!d; s///;q'

# получить начальный заголовок письма отправителя
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

# разобрать свойства адреса, выкинуть нафиг e-mail адрес
# с 1-строчного адресного заголовка (смотрите выше)
sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'

# добавить начальный уголок и пробел в каждую строку (квотинг сообщения)
sed 's/^/> /'

# удалить начальный уголок и пробел из каждой строки (антиквотинг сообщения)
sed 's/^> //'

# удалить теги HTML (включая многострочные теги)
sed -e :a -e 's/<[^>]*>//g;/
# распаковать многотомные заююкоженые бинарники,удалить дополнительный заголовок
# и инфу, которые остаются от ююкоженой части. Файлы переданные в
# sed долны идти в правильном порядке. Версия 1 может вводиться в командной строке
# ; версия 2 может запихиваются в запускаемые скрипты Unix shell
# (Изменение от скрипта Рауля Деси (Rahul Dhesi)
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode # Версия 1
sed '/^end/,/^begin/d' "$@" | uudecode # Версия 2

# заZIPовать каждый .TXT файл отдельно,удаляя исходный и
# называя каждый .ZIP файл именем запакованного .TXT файла
# (под DOS: команда "dir /b" возвращает чисто имена файлов списком).
echo @echo off >zipup.bat
dir /b *.txt | sed "s/^(.*).TXT/pkzip -mo 1 1.TXT/" >>zipup.bat

ТИПОВОЕ ПОЛЬЗОВАНИЕ: Sed получает одну или больше команд по порядку

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

cat filename | sed '10q' # Используются каналы-контейнера
sed '10q' filename # такой же эффект но без кота ;) ("cat")
sed '10q' filename > newfile # перенаправим вывод на диск

Для дополнительных примеров , включая применение команд для ввода
команд с файла на диске , а не только в командной строке, прочитайте "sed &
awk, 2я редакция," от Даля Дугерти( Dale Dougherty) и Арнольда Руббенса
( Arnold Robbins) (O'Reilly,1997; www.ora.com), "Обработка текста в UNIX ,"
Даля Дугерти( Dale Dougherty) и Тима Орэйли (Tim O'Reilly) (Hayden Books, 1987)
или учебники от Майка Арста (Mike Arst) в файле U-SEDIT2.ZIP (нуно поискать).
Чтоб впитать силу sed, нужно понять что такое "Регулярные выражения." Для этого,
прочитайте "Регулярные выражения" от Джефри Фриддла (Jeffrey Friedl)
(O'Reilly, 1997).Читайте ("man") маны , может помочь в Unix ("man
sed", "man regexp", или подсекцию , посвященную регулярным выражениям в "man
ed"), но маны достаточно сложны. Они написаны не для обучения
sed или использованию regexp для чайников, но как как справочник
для использующих программы на практике.

ИСПОЛЬЗОВАНЕ КАВЫЧЕК: Представленные примеры используют одинарные кавычки ('...')
в отличие от двойных ("...") для ограничения редактируемых команд еще
во времена использования ed на Unix. Одинарные кавычки предохраняют
оболочку Unix от интерпретации знака бакса ($) и обратнокавычек
(`...`),которые использует шелл , если они окружены двойными кавычками.
Пользователям "csh" и аналогам также нужно экранировать
знак восклицания (!) бэкслэшем (например, !) для правильной работы
вышепредставленных примеров,даже внутри одинарных кавычек.
Версии sed для DOS всегда требуют двойные кавычки ("...") а не одинарные
для ограничения редактируемых комманд.

ИСПОЛЬЗОВАНИЕ 't' В СКРИПТАХ SED: Для чистоты документации мы использовали
выражение 't' для вывода символа табуляции (0x09) в скриптах.
Однако, меногие версии sed не распознают 't' , и для этого,когда вы пишете
эти скрипты в командной строке ,жмите вместо этого кнопочку
TAB. 't' поддеривается регулярными выражениями в awk, perl, и HHsed, sedmod,
и GNU sed v3.02.80.

ВЕРСИИ SED: Версии sed различны, поэтому возможны некотрые различия синтаксиса.
В особых случаях, может не быть поддержки меток (:name) или ветвящихся конструкций
(b,t) в пределах редактируемых команд, кроме окончания этих команд.
Мы использовали синтаксис который будет использоваться для большинства
версий sed , тогда как популярные версии сед под лицензией
GNU разрешают более последовательный синтаксис. Когда читатель видит
длиннющую команду как эта:

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

то хорошо бы знать, что версии GNU sed позволяют переписать это:

sed '/AAA/b;/BBB/b;/CCC/b;d' # или иначе
sed '/AAA|BBB|CCC/b;d'

В дополнение, запомните что многие версии sed понимают команды
как "/one/ s/RE1/RE2/", и НЕ разрешают "/one/! s/RE1/RE2/", в которых
содержится пробел перед 's'. Остерегайтесь пробелов при вводе команд.

ОПТИМИЗАЦИЯ СКОРОСТИ: Если скорость выполнения хочется увеличить (для
больших входных файлов или слабоватого "железа", замена будет
работатать быстрее с выражением поиска находящимся перед
инструкцией вида "s/.../.../" Например:

sed 's/foo/bar/g' filename # стандартная команда замены
sed '/foo/ s/foo/bar/g' filename # это работает быстрее
sed '/foo/ s//bar/g' filename # укороченый синтаксис sed

В строке выборки или удаления, которая используется вами для вывода строк
выбранной части файла, команда выхода (q) в скрипте намного уменьшает время
обработки для больших файлов. Вот пример:

sed -n '45,50p' filename # печать строки 45-50 позиции файла
sed -n '51q;45,50p' filename # по-другому, но работает шустрее

Если у вас есть еще скрипты для распространения или если вы нашли ошибки
в этой листовке, плиз пошлите мыло автору листовки. Напишите какую версию
sed вы юзаете, ось, под которою скомпилен тот самый сед, и описание
проблемы. Данные скрипты в этом файле были написаны и распространяются
господами:

Al Aab # модератор "sedеров"
Edgar Allen # разное
Yiorgos Adamopoulos
Dale Dougherty # автор "sed & awk"
Carlos Duarte # автор "do it with sed"
Eric Pement # автор этого перевода
Ken Pizzini # автор GNU sed v3.02
S.G. Ravenhall # скрипт для de-html
Greg Ubben # приложения и помощь
-------------------------------------------
Korepanov Roman # перевод на русский язык

DLINK drivers for WinXP SP3

http://support.dlink.ca/faq/view.asp?prod_id=3002

Wednesday, April 22, 2009

regexp протестить

man 7 glob

man bash – раздел qwoting

bash by example

grep ^# /etc/y*conf – найти все, что с решетки

grep ^#.*\.$ /etc/y*conf – найти все, что начинается с решетки, содержит .* - все что угодно ( . – любой символ, звездочка – сколько угодно раз от нуля и больше), заканчивается точкой (\. – заквотированная бэкслэшем точка, $ - символ конца строки)

Не срабатывает конец строки – надо разобраться

Thursday, April 16, 2009

[mntent]: warning: no final newline at the end of /etc/fstab

Dont' forget to put empty line at the end of etc/fstab. Just put it at the end of /etc/fstab.

Wednesday, March 25, 2009

Очистить схему

Если нет пароля system, а только на схему, то чтобы обновить схему, ее сложно пересоздать. В этом случае можно попробовать удалить все объекты схемы при помощи скриптика.

set head off
set pages 0
set long 9999999
spool drop_glueadm_obj.sql
select 'drop '||object_type||' '||object_name|| DECODE(OBJECT_TYPE,'TABLE',' CASCADE CONSTRAINTS;',';') from user_objects;
/

Sunday, March 22, 2009

Friday, March 20, 2009

RDP Client tips

How to connect to Terminal Windows if limit of simultaneuos connections is reached?
mstsc.exe -console

Mount your bootable ISO to an image drive

For this example I will use drive D: as the image drive, and drive E: as the flash drive.
Then
xcopy D:\*.* E: /s/e/f

Wednesday, January 14, 2009

2 change sgid on directory and access level

1) To setup sgid on directories within current directory
find . -type d -exec chmod 4660 "{}" ";"
2) To give write permissions for oner and group on files within current directory
find . -type f -exec chmod 660 "{}" ";"

Thursday, September 18, 2008

Warning!!! BIG SIZE of file!!!

#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
CDIR=/path1/path2/
OUTF=warning.out
CRIT=400
RCPT=my@email.com
rm -rf ${CDIR}${OUTF}
for files in `ls -l ${CDIR} | awk '{print $9}'`
do
size=`ls -l ${files} | awk '{print $5}'`
tfile=`ls -l ${files} | awk '{print $9}'`
if [ ${size} -ge ${CRIT} ];
then cat >> ${CDIR}${OUTF} << ECHO
Warning! Size of ${CDIR}${tfile} is ${size}
ECHO
fi
done
cat ${CDIR}${OUTF} | mail -s 'Warning!!! BIG SIZE of file!!!' ${RCPT}

Tuesday, August 12, 2008

Script to identify long ago accessed files

He asked me how can he identify long ago accessed files. I've written the following script.

bash-2.05b$ more laaf.sh
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
FNAME=$1
DAYS=$2
if test $# -lt 2
then
echo 'Usage: laaf.sh <+|-N>, where N - number of days'; exit
fi
find $FNAME -type f -atime $DAYS -exec ls -lt --full-time '{}' \; | awk '{print $6,$5,$9;}'
==
Usage: ./laaf.sh <+|-N> [> file.out]
where - is the path to the target directory
<+|-N> - accessed before|after N days

In the output of this script will be modified date, size and file name with full path by row

Monday, August 11, 2008

script for sorting files by modification date

If you want to see files sorted by modification date in the subdirectories, you can paste below into the file for example mytest.sh, do it executable and run it with desireable directory as the argument
For example,
bash-2.05b$ ./mytest.sh /usr/local/etc
---
# cat > mytest.sh << EOF
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
FNAME=$1
find $FNAME -type f -exec ls -lt --full-time '{}' \; | awk '{print $6,$5,$9;}'
EOF
--
As a result you'll recieve date, size and pathname of all files from directory

Friday, June 13, 2008

Re: OCP Credential Validation

После того как 28-го мая я сдал 1z0-043 я написал свой Prometric Testing ID на ocpexam_ww@oracle.com с темой "OCP Credential Validation", затем подтверждал свои курсы на oracle.prometric.com и выслал копию письма о заполнении этой самой "Hands-On Course Requirement Form" на ocpreq_ww@oracle.com
И вот только сегодня 13 июня пришло письмо, что вроде как мой статус OCP подвержден от results@prometric.com.

Your OCP Hands-On Course Requirement has been verified. If you have met
all your exam requirements, you can expect to receive your OCP Success Kit
within 30 days from this message.

и от ocpreq_ww@oracle.com
==============
От кого: Oracle Certification Program
Кому: Мне
Дата: 13 Июн 2008 10:34:55
Тема: Re: OCP Credential Validation

Hi МоеИмя,

Thanks for the course confirmation. Your Hands-on form was verified and if you have completed all the required exams then you should wait for 6-8 weeks from your date of verification of your Hands-On Course Requirement Form to receive your Oracle 10g DBA OCP success kit.
..................
правда как-то странно звучит "if you have completed all the required exams then you should wait" они сразу-то не смогли определить все ли требуемые экзамены сданы :)

Monday, June 09, 2008

По установке Oracle 9i на Linux (Centos 4.6)

Решил протестить и задокументить на случай необходимости быстрой установки Oracle 9i на Linux.
Тест провел с установкой Oracle 9i на Centos 4.6.
В соотв-ии с Note:303859.1 (Requirements for Installing Oracle 9iR2 on RHEL 4)
ставим дополнительно те, которых не хватает в системе из списка:
Minimum Software Requirement:
=============================
* Required OS Components
- compat-db-4.1.25-9
- compat-gcc-32-3.2.3-47.3
- compat-gcc-32-c++-3.2.3-47.3
- compat-oracle-rhel4-1.0-3
- compat-libcwait-2.0-1
- compat-libgcc-296-2.96-132.7.2
- compat-libstdc++-296-2.96-132.7.2
- compat-libstdc++-33-3.2.3-47.3
- gnome-libs-1.4.1.2.90-44
- gnome-libs-devel-1.4.1.2.90-44
- libaio-devel-0.3.102-1
- libaio-0.3.102-1
- make-3.80-5
- openmotif21-2.1.30-11
- xorg-x11-deprecated-libs-devel-6.8.1-23.EL
- xorg-x11-deprecated-libs-6.8.1-23.EL
Учитывая зависимости, которые потребовались для этих пакетов, у меня получился след. полный список для доп.установки диска. Можно то, что ниже просто вставить в простой sh-скриптик и запустить.
---
cd /media/cdrom/CentOS/RPMS
rpm -Uvh compat-db-4.1.25-9.i386.rpm \
compat-libgcc-296-2.96-132.7.2.i386.rpm \
compat-libstdc++-296-2.96-132.7.2.i386.rpm \
compat-libstdc++-33-3.2.3-47.3.i386.rpm \
compat-gcc-32-3.2.3-47.3.i386.rpm \
compat-gcc-32-c++-3.2.3-47.3.i386.rpm \
gnome-libs-1.4.1.2.90-44.1.i386.rpm \
glib-devel-1.2.10-15.i386.rpm \
ORBit-devel-0.5.17-14.i386.rpm \
alsa-lib-devel-1.0.6-5.RHEL4.i386.rpm \
audiofile-devel-0.2.6-1.el4.1.i386.rpm \
esound-devel-0.2.35-2.i386.rpm \
freetype-devel-2.1.9-6.el4.i386.rpm \
fontconfig-devel-2.2.3-13.el4.i386.rpm \
xorg-x11-devel-6.8.2-1.EL.33.i386.rpm \
gtk+-devel-1.2.10-36.i386.rpm \
libjpeg-devel-6b-33.i386.rpm \
libtiff-devel-3.6.1-12.i386.rpm \
libungif-devel-4.1.3-1.el4.2.i386.rpm \
imlib-devel-1.9.13-23.i386.rpm \
gnome-libs-devel-1.4.1.2.90-44.1.i386.rpm \
libaio-0.3.105-2.i386.rpm \
libaio-devel-0.3.105-2.i386.rpm \
make-3.80-6.EL4.i386.rpm \
openmotif21-2.1.30-11.RHEL4.6.i386.rpm \
xorg-x11-deprecated-libs-6.8.2-1.EL.33.i386.rpm \
xorg-x11-deprecated-libs-devel-6.8.2-1.EL.33.i386.rpm
---

Конфигурирование Linux для установки Oracle (делаю как при установке Oracle 10)

1) Заведение групп oinstall, dba и пользователя oracle (copy-paste)
# /usr/sbin/groupadd -g 502 oinstall
# /usr/sbin/groupadd -g 503 dba
# /usr/sbin/useradd -m -u 501 -g dba -G oinstall oracle

Проверка id и gid
# id oracle uid=501(oracle) gid=502(oinstall) groups=502(oinstall),503(dba)

Установка пароля passwd oracle через:
# passwd oracle

2) Создание директорий по OFA (copy-paste)
# mkdir /oracle
# chown -R oracle:oinstall /oracle
# chmod -R 775 /oracle

3) Конфигурирование параметров ядра (через copy-paste) и shell-лимиты
(делаю как при установке Oracle 10)
Создать и запустить скриптик с таким содержимым
#/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
cp /etc/sysctl.conf /etc/sysctl.conf.ori
cat >> /etc/sysctl.conf << MYEOF
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
MYEOF
/sbin/sysctl -p
cp /etc/security/limits.conf /etc/security/limits.conf.ori
cat >> /etc/security/limits.conf <oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
MYEOF
cp /etc/pam.d/login /etc/pam.d/login.ori
cat >> /etc/pam.d/login <session required /lib/security/pam_limits.so
MYEOF
cp /etc/profile /etc/profile.ori
cat >> /etc/profile <if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
MYEOF
cp /etc/csh.login /etc/csh.login.ori
cat >> /etc/csh.login << MYEOF
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
MYEOF
cp /etc/profile /etc/profile.ori
cat >> /etc/profile << MYEOF
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
MYEOF

cp /etc/csh.login /etc/csh.login.ori
cat >> /etc/csh.login << MYEOF
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
MYEOF
---
В .bash_profile юзера oracle я добавил

export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2.0
export ORACLE_SID=test9i
export LD_ASSUME_KERNEL=2.4.19
export ORACLE_TERM=xterm
export PATH=$PATH:$ORACLE_HOME/bin

По окончании установки при помощи runInstall в граф.окне получил
Ошибки
/oracle/jre/1.1.8/bin/../lib/i686/native_threads/libzip.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference (libzip.so)
Unable to initialize threads: cannot find class java/lang/Thread
Could not create Java VM

Решение проблем (как и вообще установка с необходимыми патчами) хорошо описано в пошаговой инструкции от Terek’а
http://conrad2001.narod.ru/terek/oracle9204linux.htm
После накатки патчей и перелинковки пробелмы исчезают.

Также могут быть полезными ссылки
http://www.puschitz.com/InstallingOracle9i.shtml
http://download-east.oracle.com/docs/html/B13670_06/toc.htm
http://blogs.ittoolbox.com/database/david/archives/installing-oracle-9-on-rhel4-19572

Saturday, June 07, 2008

Бэкапирование баз MS SQL

Вчера закончил документировать реестр всех баз MS SQL, в котором для каждого сервера указал все БД и время выполнения заданий по их бэкапированию и месторасположением бэкап-файлов на локальном диске. Прежний админ MS SQL уволился, а нового админа еще не приняли на работу и я по мере своих сил и навыков смотрю за сиквел-базами.
После того как закончил данный реестр и более менее воткнулся в систему, решил задокументировать для себя существующий механизм бэкапирования базы MS SQL на локальный диск.

Итак, раз в неделю в вскр-е или в субботу производится полный бэкап баз и ежедневно дифференциальные. Перед тем как сделать полный бэкап базы, файл предыдущего бэкапа архивируется Rar-ом. Для чего необходимо разрешить MS SQL выполнять команды ОС, см.комменты.

Step-by-Step в SQL Server Management Studio на примере базы My_DB

1) Создание нового задания.
Сервер-> SQL Server Agent -> Jobs - New Job
Заполняем Name, Description, обращаем внимание на галочку в Enable (пока отключим ее, сняв галку, позже после создания задания и расписания включим)
Продолжение см. в комментах.

Сборщик конфигурации Unix/Linux в HTML

Сегодня "вендоры" попросили выслать конфигурацию боевого сервера Linux, который необходимо "пролечить" и "прикрутить" к HP SW XP1024, выслав ссылку на утилитку cfg2html. Скачал ее, установил, собрал инфу просто запуском /usr/bin/cfg2html-linux из директории, в которую будут сложены html-файл и др.
Несомненно, удобная утиля, ее урл - http://come.to/cfg2html

Friday, May 23, 2008

По переносу базы MS SQL 2005 на другой диск

Обратились ароматизаторы с проблемкой, в рамках которой нужно было перенести одну из баз MS SQL Server 2005 на другой диск. Нашел ссылку http://technet.microsoft.com/ru-ru/library/ms187858.aspx , но открыв MS SQL Management Studio и прикинув как это сделать через GUI, попробовал и .... прикольно, не думал, что так просто переместить базу в сиквеле :)

Wednesday, May 21, 2008

Дефрагментация таблиц, индексов (with LOB and partitions) с перемещением в другой TS

Столкнулся с проблемой, когда после удаления данных таблицы сильно дефрагментировались. Короче база на базе одной ASM diskgroup, в которой одна дисковая группа на базе 2 Lun's. Один размером 512Gb, другой - 72Gb. Запрос "select sum(bytes) from dba_segments" возвращает не более 100Gb, т.е. у меня более 400Gb свободно, но .... запрос "select total_mb,free_mb from v$asm_diskgroup" из более чем 500Гб возвращает свободных только 60Гб. А мне нужно вывести из этой дисковой группы Lun размером 72Гб. Но для того, чтобы вывести диск из группы необходимо достаточное свободного места для ребалансинга.
После команд
alter diskgroup dg1 drop disk dg_0001;
alter diskgroup dg1 rebalance power 6;
и после очистки содержимого v$asm_operation, говорящего нам о завершении ребалансинга
запрос "select name,path,state from v$asm_disk" возвращает состояние диска Hung. Согласно Reference "HUNG - Disk drop operation cannot continue because there is insufficient space to relocate the data from the disk being dropped". Вот так вот.
Сделать shrink невозможно, т.к. segment space management для табличных пространств в manual.
Спросил совета - Г. посоветовал сделать единственно верное в данном случае. Переместить все данные из одного из таблспэйса в другой вновь созданный соответствующего размера (select sum(bytes) from dba_segments where tablespace_name='MYDB_2006') и затем удалить исходный таблспэйс.
И вот решил "записать" скриптики, которые я использовал.
==========
-- Moving LOB PACKAGE_IN_DB to tablespace MYDB_TEST
set head off
set heading off
set pagesize 1000
set linesize 1000
set long 999999999
spool move_table_lob.sql
select 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME|| ' move partition '||PARTITION_NAME|| ' LOB(PACKAGE_IN_DB)
STORE AS (TABLESPACE MYDB_2006);' from dba_tab_partitions where table_name='PACKAGES'
and tablespace_name='MYDB_TEST';
spool off;
@move_table_lob.sql
exit;
/
-- Moving partitions to tablespace MYDB_TEST
set head off
set heading off
set pagesize 1000
set linesize 1000
set long 999999999
spool move_table_part.sql
select 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME|| ' move partition '
||PARTITION_NAME|| ' tablespace MYDB_2006;' from dba_tab_partitions where
table_name='PACKAGES' and tablespace_name='MYDB_TEST';
spool off;
@move_table_part.sql
exit;
/
--Moving subpartitions to MYDB_TEST
set head off
set heading off
set pagesize 1000
set linesize 1000
set long 999999999
spool move_table_subpart.sql
select 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME|| ' move subpartition '
||SUBPARTITION_NAME|| ' tablespace MYDB_TEST;' from dba_tab_subpartitions
where table_name='MV_VOLUMES' and tablespace_name='MYDB_2006';
spool off;
@move_table_subpart.sql
exit;
/
--Moving Indexes to MYDB_TEST
set head off
set heading off
set pagesize 1000
set linesize 1000
set long 999999999
spool move_ind_part.sql
select 'ALTER INDEX '||INDEX_OWNER||'.'||INDEX_NAME|| ' rebuild partition '||PARTITION_NAME ||' TABLESPACE MYDB_TEST;'
from dba_ind_partitions where tablespace_name='MYDB_2006';
spool off;
@move_ind_part.sql
exit;
/
-- Moving LOB-partitions (LOBINDEXES,LOBSEGMENTS) to tablespace MYDB_2006
set head off
set heading off
set pagesize 1000
set linesize 1000
set long 999999999
spool move_table_lob.sql
select 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME|| ' move partition '||PARTITION_NAME|| ' LOB(' ||COLUMN_NAME||')
STORE AS (TABLESPACE MYDB_2006);' from dba_lob_partitions where tablespace_name='MYDB_TEST';
spool off;
@move_table_lob.sql
exit;
/

Monday, May 19, 2008

Тест с добавлением/мультпасингом LUN-ов из HP XP 1024

Исходные данные: сервер HP Proliant DL360 на Linux Centos 4.6 с базой Oracle 10.2.0.3 с ASM, который создан на основе LUN'а из массива HP EVA5000.
Задача: необходимо перевести базу на LUN'ы массива HP XP1024.
Итак, необходимо "увидеть" презентованные из XP1024 луны, настроить для них multipathing при помощи device-mapper'а. Затем данные луны добавить в существующую дисковую группу и в случае успешных тестов вывести старый диск EVA5000 из существующей дисковой группы.
В случае успеха провести данную операцию на боевом сервере.
От 23 мая - к сожалению тест пока завершился неуспешно. Презентованные LUNы видны, но каждый получаемый путь в /dev/mpath содержит отдельный путь к презентованному LUNу. Позже нашел в документе с www.hp.com "Installation and Reference Guide Device Mapper Multipath Enablement Kit for HP StorageWorks Disk Arrays", где для XP1024 было примечание -
*If you useXP128/1024,the system modes 140 and 293 must be switched on,otherwise
the XP does not respond to a SCSI inquiry to code page 0x83 with a unique serial number (scsi_id tool). This prevents the HPDM Multipath from detecting the redundant paths.
Таких режимов 140 и 293 в прошивке нашего XP1024 не оказалось.
Ссылка на документы
Т.о. продолжение тестов отложено до начала июня, когда Д. вернется из штатов с форума HP-шников.
p.s. Спустя 7 часов ближе к концу раб. дня Д. позвонил в Москву в HP и спросил об этих режимах. Там сообщили, что есть такие режимы и что перезвонят через "10 минут".

Sunday, May 18, 2008

Сдал на OCA - Oracle 10g Administration I

Вчера, 17 мая 2008, (спустя почти 2 года как решился перевестись на должность DBA с переездом со своей семьей во Владик) сдал свой первый экзамен по Oracle - 1z0-042 - OCA Oracle 10g Administration I. Получил OCA (Oracle Certified Associate), если сдать еще один тест - 1z0-043, то получу OCP (Oracle Certified Professional) ..... Так-то какая-никакая черта под идею стать DBA-йщиком подведена и я немного рад. Хотя понимаю, что это на самом деле мало что значит, это лишь "бумажка" да и у нас в отделе это не определяет истинную квалификацию и далеко не всегда OCP-шники воспринимаются всерьез :) Согласен с ними - тем более, что они сильные и нах им эти экзамены не сдались :) А я решил иметь бумажки на случай смены работы :) Смены работы не только в ближайшее время, а вообще на будущее - в подтверждение опыта работы с Oracle на основе времени с момента получения статусов OCA, OCP.
Так что хорошо бы в ближайшее время поднапрячься и сдать 1z0-043 и получив OCP cразу написать письмо Марие о получении статуса OCP, чтобы обновили CV. Думаю, они могут это учесть как положительный фактор и им было бы полегче придумывать должность и круг обязанностей :) Видно будет...

Saturday, May 17, 2008

По переводу ASM с EVA5000 на XP1024

Сегодня, в субботу, в 10.40 час. позвонил Д.(человек круглосуточно болеет за дело и обдумывает его), спросил как вчера прошли работы (я вчера вечером просто срестартил одну базу по ченджу) и попросил пока не ставить restore базы ITC в тестовую, т.к. там какие-то проблемы еще с DataProtector. Я сказал, что Restore запустил вчера вечером и еще не прилетало сообщения ни об ошибке ни об успехе. Д. предположил, что ресторинг заклинило на mount request (позже в понедельник М.С. сказал, что так и было - были mount request'ы, которые ему приходилось проталкивать вручную все выходные).
Затем Д. озвучил в своем стиле то ради чего и звонил - просьбу-задачку провести тесты с настройкой Multipathing'а для дисков массива XP1024 на тестовой машине, на которой я месяцев сколько-то назад настроил его для дисков EVA5000 по подобию боевого сервера.
Т.е. нужно сделать Multipathing на оба массива как на EVA так и на XP, протестировать failover, "выдернув шнурочек" и на основе тестов разработать план перевода ASM боевого ITC c EVA5000 на XP1024.
Утилиту xpinfo, которая отображает всю информацию по презентованным хосту дискам, Д. положил в хоум рута.
Думаю, очень интересная задачка, и с понедельника начнем.

Tuesday, April 15, 2008

the X11 forwarding request was rejected!

При попытке запустить XManager'ом Х-ы на Линухе
ошибка "the X11 forwarding request was rejected!..."
Добавить в /etc/ssh/sshd_config
X11Forwarding yes
и рестартовать процесс sshd

Monday, April 14, 2008

check RMAN-processes

Сегодня с утра одна из баз (10.2.0.3, HP-UX 11.11) оказалась остановленной. При попытке стартовать базу вылетели ошибки о нехватке места. df -k показал, что место в разделе /oracle, где лежит ORACLE_HOME было забито. Очень странно, при размере разделе в 10Гб и размере ORACLE_HOME до 4Гб. Я начал судорожно искать куда делось место через "du -k" по поддиректориям. Не найдя никаких новых файлов, заметил вчерашние нулевые логи бакапов архивлогов и один лог на текущее время. Просмотрел его через tail -f - лог постоянно пополнялся ошибками.
Посмотрел процессы rman - висело 2 процесса rman со вчерашнего вечера.
Убил их ... и место освободилось, почти 4Гб.
Т.е. какой-то процесс rman занимал все доступное место в разделе - очень странно.
Но надо иметь ввиду - либо отстреливать зависшие RMAN-процессы, либо надо переписать скрипты так чтобы логи падали в другой раздел. Возможно это поможет в таких случаях.

Thursday, March 13, 2008

В alert.log сыпятся SUCCESS: diskgroup DGROUP1 was dismounted ...

См. Note:361173.1 Asm Diskgroup success Mount And Umount messages in alert.log during Rman Backup
--------
Alert.log shows the following messages during a rman backup:
SUCCESS: diskgroup LOG was mounted
SUCCESS: diskgroup LOG was dismounted
SUCCESS: diskgroup LOG was mounted
SUCCESS: diskgroup LOG was dismounted

Solution
Intended behavior. No solution required.

Wednesday, March 12, 2008

Archival Error и ORA-07445: exception encountered: core dump ....

Сегодня позвонили и пожаловались, что в одной из баз время от времени выполнение процедур заканчивается ошибкой Archival Error....
Посмотрел alert.log - ошибка Archival Error и в последних двух логах бэкапа ошибка
ORA-09817: Write to audit file failed.
SVR4 Error: 28: No space left on device
Дабы быстрее разрешить проблему я освободил место в разделе удалением устаревших архивов, освободив 1 Гб.
К этому моменту пришел Г. , задал вопрос "кто сожрал 34 гига?" и взялся за проблему. Сначала обнаружил, что освобожденное мною место в 1Гб было уже сожрано и что в cdump куча корок, которые практически и забили все дисковое пространство. Нужно смотреть alert.log.
В нем было обнаружено куча "ORA-07445: exception encountered: core dump" со ссылкой на трейсы. Г. изучил и заключил, что проблема в мат.представлениях, структура которых неправильна, о чем известил программеров.
Я сравнил время появления алертов в алерт.логе со временем вчерашнего апгрейда одной из баз, с которой взаимодействует проблемная база. Время примерно совпало.
Опыт: после всяческих апгрейдов следи за alert.log и cdump

Friday, March 07, 2008

установка Cerberus Helpdesk 4.0

Установку делал в соответствии с http://wiki.cerberusdemo.com/index.php/Installing_4.0
Скачал cerb4-servercheck.php.txt, переименовал и расположил его на сайте.
Обратился к файлу через веб и получил сообщение об отсутствии модуля MailParse и нехватку в php.ini опции upload_tmp_dir. Прописал в своем /usr/local/etc/php.ini и указал на директории upload внутри директории, заготовленной для будущего веб-сайта cerberus.
Установил MailParse по ссылке http://www.cerb4.com/forums/showthread.php?t=40 и получил
"Cerberus Helpdesk 4.0 - Server Environment Checker
Your server is Cerberus Helpdesk 4.0 compatible!"
По MailParse также есть http://wiki.cerberusdemo.com/index.php/Installing_PHP_Mailparse

Thursday, February 14, 2008

SNMP - закрытие доступа к public на Solaris 10

В отчете XSpider'а своего сервера под Solaris 10 имеется "некритичная уязвимость" c рекомендацией "Закрыть доступ к учетной записи public в snmp."

Сегодня все же решил заняться ею. Делаем проверку при помощи snmpget:
- Получить описание системы c localhost
# snmpget -v 2c -c public localhost system.sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: SunOS my_server_name 5.10 Generic_118822-25 sun4u
- Узнать когда SNMP-агент был инициирован последний раз
# snmpget -v 2c -c public localhost system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (146645223) 16 days, 23:20:52.23

Установил коммент в /etc/snmp/conf/snmpd.conf у строчки #system-group-read-community public
и рестартовал сервис snmp
# /etc/rc3.d/S76snmpdx stop
# /etc/rc3.d/S76snmpdx start

И повторяем проверку - ответы такие же .... хм....
Ну да , все правильно, ведь проверку делаю с localhost, а нужно со стороны ... Поэтому устанавливаю net-snmp на другой хост с Linux.

[root@centest RPMS]# rpm -Uvh lm_sensors-2.8.7-2.40.5.i386.rpm
warning: lm_sensors-2.8.7-2.40.5.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:lm_sensors ########################################### [100%]
[root@centest RPMS]# rpm -Uvh lm_sensors-devel-2.8.7-2.40.5.i386.rpm
warning: lm_sensors-devel-2.8.7-2.40.5.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:lm_sensors-devel ########################################### [100%]
[root@centest RPMS]# rpm -Uvh net-snmp-5.1.2-11.EL4.11.i386.rpm
warning: net-snmp-5.1.2-11.EL4.11.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:net-snmp ########################################### [100%]
[root@centest RPMS]# rpm -Uvh net-snmp-utils-5.1.2-11.EL4.11.i386.rpm
warning: net-snmp-utils-5.1.2-11.EL4.11.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821
Preparing... ########################################### [100%]
1:net-snmp-utils ########################################### [100%]

Стартовал демон snmp

[root@centest init.d]# /etc/init.d/snmpd start
Starting snmpd: [ OK ]

Проверил доступ к проблемному серверу - он есть
[root@centest init.d]# snmpget -v 2c -c public my_server_name system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (3715) 0:00:37.15

Итак, public все еще открыт .... из man snmpd.conf узнаю о файлике /etc/sma/snmp/snmpd.conf, в котором в строке rocommunity public добавляю 127.0.0.1 так, что стало
rocommunity public 127.0.0.1
Т.е. определил доступ к public только лишь с localhost
Рестартовал сервисы и проверил.

с localhost:
# snmpget -v 2c -c public localhost system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53857) 0:08:58.57

с Linux-хоста
[root@centest init.d]# snmpget -v 2c -c public my_server_name system.sysUpTime.0
Timeout: No Response from my_server_name.

Т.о., в Solaris 'read only'-доступ к community public устанавливается в файлике /etc/sma/snmp/snmpd.conf

Теперь, думаю, XSpider успокоится.

Ссылки по теме:
http://www.net-snmp.org/wiki/index.php/Tutorials










Friday, February 08, 2008

IPMI Service Processor

Сегодня впервые столкнулся с IPMI Service Processor. После отправки сервера SUN ... под Linux Centos 4.1 64bit в ребут не дождался его старта. Нужно было лезть на него консольно.
Погуглив, помогла страничка http://docs.sun.com/source/817-5249-17/appendixF.html#pgfId-1002294
После входа в консоль сначала пришлось выключить сервак по питанию, а затем включить след.образом:

login as: admin
admin@10.27.45.13's password:

Sun Microsystems
IPMI v2.0 Service Processor

Version: V2.2.0.20
localhost $ platform set power state -W -f off
Scheduled platform off

localhost $ platform set os state boot -W -f

localhost $ platform get os state
BIOS booting

localhost $ platform get os state
OS booting

localhost $ platform get os state
OS booting

--
Через некоторое время появился ping до сервака и я облегченно вздохнул .... сервак-то в другом городе и время уже 22 часа.
IPMI - такого зверя я и не знал...

Wednesday, January 30, 2008

Примеры чекеров, скриптов sh

# Чекает не висит ли процесс rman-а больше суток
#!/bin/sh
PATH=/bin
LD=`(date --date='2 days ago' '+%b%d')`
RCPNTP=me@email
HOST=`uname -n`
if
ps -ef|grep -i $LD |grep rman
#if [ $? != 0 ];
then
echo "rman 2 days ago down on "$HOST|mailx -s "rman 2 days ago down on "$HOST ${RCPNTP} < /dev/null fi

##################
Чекает доступность по пингу хоста $HOST
#!/bin/sh
HOST=имя_сервера_который_чекаем
RCPNT=me@email ping -c 2 10.25.40.5 >/dev/null 2>&1
if [ $? -ne 0 ]; then
mail -s 'Alarm!!! Server is down. Check '$HOST $RCPNT < /dev/null
fi
#################
# Бэкапит файлы *jak* из директории /usr/local/BackUp по дням недели, удаляя устаревшие бэкапы
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
BKPDIR=/usr/local/BackUp
TODAY=`date +'%a'`
TOMCAT=/usr/local/jakarta-tomcat-4.1.18
cd $TOMCAT
BKPFILES=`ls`
tar zcf $BKPDIR/$TODAY-jak.tar.gz $BKPFILES
find $BKPDIR/ -type f -name '*jak*' -mtime +2 -exec rm "{}" ";"

Wednesday, January 23, 2008

Physical Memory in HP-UX

Как определить размер физической памяти в HP-UX

1) Способ, не везде срабатывающий
# dmesg |grep Physical

2) Сработал на разных платформах
# /opt/ignite/bin/print_manifest |grep -i memory



Monday, January 21, 2008

Bonding и отключение поддержки IPv6 (sit0) в Centos 4.6

Только что на тестовом серваке Proliant DL360 G4 c двумя оптическими карточками QLA2340 (которые предварительно перепрошил до firmware ver.1.54, скачанным с здесь) с Centos 4.6 на базе двух карточек Broadcom Corporation NetXtreme BCM5704 Gigabit Ehernet (Tigon3 chip) поднял bonding как описано в How can I bond multiple network interfaces (bonding) together into a single channel in Red Hat Enterprise Linux 4?

И тупо проверил выдергиванием кабелей по очереди - все работает.
Сообщил сетевикам, они настроили team на коммутаторах, но пожаловались на то, что с их стороны виден лишний MAC-адрес.
Действительно, в выводе # ifconfig -a маячит интерфейс "sit0 Link encap:IPv6-in-IPv4", который они и попросили убрать.
Очевидно поддержка IPv6 включена по дефолту в ядро 2.6.xxx
Для отключения IPv6 добавил в /etc/modprobe.conf
alias net-pf-10 off
alias ipv6 off
и перегрузился, после чего sit0 исчез из системы.

p.s. прикол в том, что на других боевых системах с Centos sit0 также присутствует :)

Thursday, January 17, 2008

Копирование пользователей с их правами

Здесь и здесь решение задачки переноса юзеров с их грантами из боевой в тестовую БД

set head off
set pages 0
set long 9999999
spool user_script.sql
SELECT DBMS_METADATA.GET_DDL('USER', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS;
spool off;

Wednesday, January 16, 2008

dbid в шаблоне %F

При восстановлении базы RMAN-ом необходимо установить DBID командой set dbid .
Дабы не искать его в логах лучше пользоваться шаблоном %F - при создании backup_set это первая последовательность цифр в имени файла при использовании шаблона %F - например,

configure controlfile autobackup format for device type disk to '/orabackup/rman2disk/back1_ctl_%F';