вторник, 11 октября 2011 г.

MS SQL SERVER Suspect

MS SQL SERVER База данных в режиме Suspect

Общие шаги по восстановлению работоспособности базы:


«Suspect» этот статус присваивается базе в случае аварийного состояния.
Часто такой причиной является неисправность Журнала транзакций (transaction log). Попытка подключить базу без логов ожидается примерно такое сообщение об ошибке: 
Server: Msg 945, Level 14, State 2, Line 1
Database ' db_zup' cannot be opened because some of the files could not be activated.
Server: Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db_zup'. CREATE DATABASE is aborted. Решить эту ситуацию можно созданием новой базы с таким же именем и такими же по именам и расположению .mdf и .ldf файлами.
Чтобы можно было не останавливать сервер целиком, укажите параметр базы autoclose = true. 
Теперь подменяем файл .mdf . Можно также использовать проверку физической целостности базы командой DBCC CHECKDB.
Если останавливали сервер, Стартуем, не обращаем внимания на статус базы
и в Query Analyzer выполняем:

Для MS SQL Server 2000: 
Use master
go --разрешаем изменения в системных базах
sp_configure 'allow updates', 1
reconfigure with override
go –-запоминаем значение
select status from sysdatabases where name = 'имя базы'
go –-изменяем статус нашей базы
update sysdatabases set status= 32768 where name = '<db_name>'
go 
Для MS SQL Server 2005

Use master
go
sp_configure 'allow updates', 1
reconfigure with override
go
alter database имя_базы set EMERGENCY
use master
go
sp_dboption 'имя_базы', 'single_user', 'true'
go
Перезапустить SQL сервер, база должна быть видна в emergency mode 


Создадим новый Журнал транзакций и выполним полное тестирование.

Для Ms SQL 2000

DBCC REBUILD_LOG('имя_базы', '<имя нового лога с указанием полного пути>')
GO
Use master
GO
sp_dboption 'имя_базы', 'single_user', 'true'
GO
USE имя_базы
GO
DBCC CHECKDB('имя_базы', REPAIR_ALLOW_DATA_LOSS)

Для Ms SQL 2005
DBCC REBUILD_LOG('имя_базы', '<имя нового лога c полным путем>')
GO
Use master
GO
ALTER DATABASE <Имя БД> SET SINGLE_USER
GO
USE имя_базы
GO
DBCC CHECKDB('имя_базы', REPAIR_ALLOW_DATA_LOSS)

/*ищет лог по старому пути. И если база уже перенесена на другую машину, то надо на время создать пустой лог в той же директории и на том же диске, что и был раньше. После восстановления его можно перенести (детач-аттач с новыми путями)*/

Если Вам не удалось перевести базу в single user mode, то для проверки целостности данных можно попробовать dbo only mode.
Если же, база в single user mode, то НЕ выполнять следующую строку
sp_dboption '<db_name>', 'dbo use only', 'true'

Далее  
Для Ms SQL 2000

GO
sp_dboption '<db_name>', 'single_user', 'false'
GO
USE master
GO -- запрещаем изменения в системных базах
sp_configure 'allow updates', 0
GO

Для Ms SQL 2005 
GO
alter database <db_name> set multi_user
GO
USE master
GO --запрещаем изменения в системных базах
Полезные  странички:
Администратору 1С SQL
Восстановление 1C SQL

суббота, 24 сентября 2011 г.

Настройка VPN Клиент Сервер на Debian

Задача: Дать доступ к корпоративной сети удаленным пользователям.
Установить на сервере в корпоративной сети сервер vpn, разрешить использование сетевых шар, удаленным пользователям. (в сети на каждую шару стоит ограничение доступа по ip)
Сервер в сети стоит за NAT'ом.

Решение:  
1. Установка vpn сервера pptpd
apt-get install pptpd
Настройка pptp сервера.
Открываем конфиг /etc/pptp.conf

option /etc/ppp/pptpd-options
debug
bcrelay eth1
localip 192.168.0.1
remoteip 192.168.0.150-200
option - подключение конфиг файла, о нем ниже.
bcrelay eth1 - передача VPN-клиентам широковещателных пакетов, смотрящий на роутер (о настройке роутера ниже.)
localip - ip адреса vpn сервера в сети.
В данном случае:
  •  192.168.0.1 - смотрит в сеть
remouteip - диапазон адресов для выдачи клиентам при подключении к vpn

четверг, 22 сентября 2011 г.

Монитор доступности серверов в сети


Есть в сети несколько серверов/компьютеров, которые должны быть доступны всегда.
Если они вдруг не доступны, нужно сразу же сообщить об этом.

Для начала разберемся, как отправлять сообщение в jabber

echo "hello from `hostname`" | /usr/bin/sendxmpp -t -u mail@jabber.company -p PaSSWorD /
-s testmessage admin@jabber.company
Где:
-t - указываем использовать SSL соединения
-u mail@jabber.company - JID пользователя
-p PassWorD - это пароль пользователя
-t testmessage - тема сообщения
admin@jabber.company - JID получателя

Взято с http://silinio.webhost.ru/sendxmpp-notify.html


Ну а теперь скрипт который мониторит доступность серверов, и в случае не доступности, шлет сообщение в jabber.
Jabber сервер установлен и настроен.
#!/bin/bash
for i in 192.168.1.1 192.168.1.105;
do
    if eval "ping -c 2 $i"; then
        file="/home/name/scripts/pingserv/pingd/file`echo $i`"
        if [ -e $file ]; then
           rm "/home/name/scripts/pingserv/pingd/file`echo $i`"
           echo "`date` SERVER `echo $i` Is Work =)" | sendxmpp -d -s "Server `echo $i` Work =)" username@jabber > /dev/null 2>&1
        fi
    echo "11" > /dev/null
    else
        file="/home/name/scripts/pingserv/pingd/file`echo $i`"
        if [ -e $file ]; then
          echo "11" > /dev/null
        else
          echo "$i" > /home/name/scripts/pingserv/pingd/ping.log
          echo "`date` SERVER `echo $i` NOT Work!!" | sendxmpp -d -s "Allarm!!! `echo $i` DOWN!!!!" username@jabber > /dev/null 2>&1
          touch "/home/name/scripts/pingserv/pingd/file`echo $i`"
        fi
    fi
done
Засунуть этот скрипт в CRON, и каждые 10 минут запускать.
*/10 * * * * /home/name/scripts/pingserv/pingip > /dev/null 2>&1
Общая идея - пинг серверов, если какой то не доступен, сообщить в jabber.
создать файл c ip сервера, чтобы при следующем пинге, если сервер все еще не доступен, не отсылать повторное сообщение.
Если сервер стал доступен, удалить этот файл и сообщить о доступности сервера.

вторник, 13 сентября 2011 г.

php Отправка почты с сайта с вложениями

Задача
Интернет магазин. покупатель выбирает товар, выбирает способ доставки и оплаты.
Если способ доставки выбран "Почтой России" - отправлять менеджерам сайта сообщение с  заполненным почтовым бланком ф.116.
Если выбран способ оплаты "Наложенный платеж" - отправлять заполненный почтовый бланк ф.112.

Решение

Для начала нужно создать эти бланки. Код бланков описывать не буду. (скачать их можно тут html файлы, в формате php для принятия post'данных).
112.php и 116.php - каждый бланк будет принимает GET данные.

Обращаться к ним следующим образом:
http://****/112.php?fio1=".$_POST['firstname']."&fio2=".$_POST['lastname']."&fio3=".$_POST['thirdname']."&adr1=".$_POST['area'].",".$_POST['city']."&adr2=".$_POST['address'].",&pst=".$_POST['postindex'])
Бланки готовы, и ждут обращения с GET 'данными.
Переходим к функции отправки почты.
Создаем файл mail.php в который передаются данные формы. (В форме пользователь заполняет свои данные, ФИО, почтовый адрес, телефон.. описывать форму не буду.)

Для начала нужно сформировать запрос обращения к бланкам:

$file = str_replace(" ", "%20", "http://****/112.php?fio1=".$_POST['firstname']."&fio2=".$_POST['lastname']."&fio3=".$_POST['thirdname']."&adr1=".$_POST['area'].",".$_POST['city']."&adr2=".$_POST['address'].",&pst=".$_POST['postindex']);  
$file2 =str_replace(" ", "%20", "http://****/116.php?fio1=".$_POST['firstname']."&fio2=".$_POST['lastname']."&fio3=".$_POST['thirdname']."&adr1=".$_POST['area'].",".$_POST['city']."&adr2=".$_POST['address'].",&pst=".$_POST['postindex']);   
Пробелы обязательно заменить на %20

Далее проверим, выбрана ли доставка почтой, и выбран ли способ оплаты - наложенным платежом. и создаем массив файлов $files.
if($_POST['pays'] == 3)
   { $files = array('112.html' => file_get_contents($file), '116.html' => file_get_contents($file2));}
elseif($_POST['pays'] == 2)
   { $files = array('116.html' => file_get_contents($file2));}
else $files = "";
112.html и 116.html  - это имена создаваемых файлов, для последующего вложения к письму.

Непосредственно сама функция отправки

четверг, 8 сентября 2011 г.

Windows не открываются некоторые сайты

Проверяем файл hosts в C:\WINDOWS\system32\drivers\etc\hosts (как было описано раньее). Там должна быть всего одна строчка начинающаяся без #, а именно: "127.0.0.1       localhost".


Заходим Пуск --> Выполнить, вводим команду "cmd", нажимаем Enter. В командной строке пишем через пробел:"route -f" и жмем Enter.
Далее прописываем:"netsh winsock reset" и снова жмем Enter.



Зараженные параметры в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes\
Очисти или удали все айпи (ip),