Показаны сообщения с ярлыком windows. Показать все сообщения
Показаны сообщения с ярлыком windows. Показать все сообщения

2010-07-30

Автоматический backup базы MSSQL

Дано: некая база данных на сервере MSSQL 2005 Express.
Нужно: производить резервное копирование БД одним кликом или даже вообще без клика, автоматически.
Насколько я знаю, в полной версии (не Express) есть готовые инструменты для этого, и очень неплохие. Но она платная. Поэтому будем обходиться тем, что есть. И у нас получится.

Итак, резервное копирование, как и многое другое, может выполняться путем запроса T-SQL. Как узнать, как выглядит такой запрос? Можно, конечно погуглить, и вгрызаться в документацию, но есть способ проще. Кто не знал - сейчас покажу.
Запускаем SQL Server Management Studio Express. Выбираем свою базу и...



Все, теперь у нас есть sql-файл с готовым сценарием, делающим backup. Назовем его, к примеру, mssql_backup.sql, и положим на диск D.
Теперь осталось его запустить извне. Для этого есть консольная утилита sqlcmd, которая входит в состав сервера (респект парням из MS!). Пользоваться так:

sqlcmd -S .\SQLEXPRESS -i "d:\mssql_backup.sql"
где -S .\SQLEXPRESS - указание на имя сервера, по умолчанию оно такое.
Создаем bat-файл с этой командой, запускаем, наблюдаем процесс. Красота!

Осталось пара моментов.
1) Как сделать, чтобы это происходило по расписанию? Cron тут нету, есть планировщик заданий, но в моем XP он не пожелал сохранять задание в расписании, ругался на отсутствие прав... Погуглив, я узнал, что это баг и чинить его, видимо, уже не будут.
Поэтому, не заморачиваясь, кинул скрипт в автозапуск. Комп включается ежедневно, так что бэкап каждое утро меня вполне устраивает.
2) Как сделать, чтобы файл резервной копии не перезаписывался каждый раз? Хотелось бы, чтобы имя файла говорило мне, от какого числа эта копия.
Что ж, невозможного нет: правим сохраненный ранее сценарий:

DECLARE @filedate VARCHAR(20)
SET @filedate=REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),20),':','.'),' ','_')

DECLARE @file_path VARCHAR(256)
SET @file_path='D:\MSSQL_DataBases\main_'+@filedate+'.bak'

BACKUP DATABASE [main] TO  DISK = @file_path WITH NOFORMAT, INIT,  NAME = N'main-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Теперь файлы будут выглядеть как main_2010-07-30_09.14.19.bak, что нам и требовалось. Можно дописать в bat-файл команду для их копирования куда-нибудь еще, например в сеть. Для надежности.
Ясное дело, что ни о каких наворотах или вопросах безопасности тут речи нет. Я просто показал пример, как это можно сделать.

2009-05-18

Python и аутентификация в Windows-домене

Собственно, задача: компьютер в Windows-домене, на нем есть некий сервер, при обращении к которому он должен определить, зарегистрирован ли представившийся пользователь в домене. Для этого нужно иметь определенный инструментарий, и у нас он есть. Я использую ActivePython 2.6 от ActiveState, там всё комплекте.
[ файл win32test.py ]
-----------------------------------------------------------

# -*- coding: utf-8 -*-

import win32security
import win32net
import win32netcon

def authentication(user, password, domain):
"""
Аутентифицировать пользователя в домене
user - Имя пользователя в домене
password - Пароль пользователя
domain - Имя домена
"""
try:
htoken = win32security.LogonUser(
user, domain, password, win32security.LOGON32_LOGON_NETWORK,
win32security.LOGON32_PROVIDER_DEFAULT
)
if htoken:
return u"Пользователь %s успешно зарегистрирован в домене %s " % (user,domain)
except win32security.error, err:
return u"Номер ошибки: %i\nОшибку вернул %s\nОшибка: %s" % (err[0], err[1], err[2].decode('cp1251'))
except:
return u"Пользователю %s не удалось зарегистироваться в домене %s " % (user,domain)

print authentication("Kawaikunee","secretpassword","DOMEN")

def existuser(user, server, verbose=0):
"""
Проверить существование пользователя в домене.
user - Имя пользователя в домене
server - Имя Domain Controller NetBIOS. Можно указать DNS
verbose - Флаг, печатать ли информационное сообщение
"""

try:
users = win32net.NetUserEnum(
server, 0,
win32netcon.FILTER_NORMAL_ACCOUNT, 0
)
"""
users[0] - список словарей пользователей домена в Unicode, в формате
[{'name', u'Username1'},{'name', u'Username2'},{'name', u'Username3'}]
users[1] - их общее количество
"""
print users[0]
except win32net.error, err:
if verbose:
return u"Номер ошибки: %i\nОшибку вернул %s\nОшибка: %s" % (err[0], err[1], err[2].decode('cp1251'))
else:
return None
for userinfo in users[0]:
if user.decode('utf8').lower() == userinfo['name'].lower():
return u"Такой пользователь существует: %s" % user
print existuser("Kawaikunee","192.168.1.1",1)

-----------------------------------------------------------

Вот такой пример кода. Программирование - это творчество, и оно сродни поэзии. Вот так бы это описал, возможно, какой-нибудь древнерусский сказитель:

Ой ты гой еси, server-батюшка,
Ты скажи-расскажи, не утаивай!
Есть ли в списках твоих добрый молодец,
Что по логину user захаживал?

Отвечал скрипту server ласково:
Посмотри-ка милок, весь мой списочек
Молодыми да острыми глазками.
Да и выбери, кто тебе надобен.

Ну а коли ты в гости надумаешь,
То password отведет стражу лютую.
Заходи скрипт-python, в светлу горницу,
Будем мы разговор разговаривать.

2009-02-16

Монтирование папки Windows удаленного компьютера

Сегодня увидел, что все еще есть люди, которые этого не знают. Впрочем, я тоже не знал, пока не докопался. Мало ли, у кого-то карма не позволяет нагуглить эту информацию, так пусть ее будет побольше!

Шаг 1. Создаем папку, куда будем монтировать удаленный каталог, пусть это будет /media/nfs:
sudo mkdir /media/nfs

Шаг 2. Устанавливаем поддержку samba-файловых систем
sudo apt-get install smbfs

Шаг 3. Пишем вот такую команду (или делаем алиас в файле ~/.bashrc):
sudo mount -t smbfs //192.168.0.2/ShereFolder /media/nfs -o username=UserName/DomenName%Password,iocharset=utf8,rw,file_mode=0777,dir_mode=0777
где меняем 192.168.0.2, ShereFolder, UserName, DomenName, Password на свои.

И всё. На рабочем столе появится ярлык нового диска. Если вы администратор на удаленной машине с Windows, то можно подключить и не расшаренные папки, а сразу диск, например //192.168.0.2/d$. Очень удобно!

2008-11-20

Настройка сети со Стримом, когда больше одного компьютера

С сентября пользуюсь Стримом. Акадо меня сильно подвело, несколько раз кидало на деньги, две недели не было интернета (может и больше, я уже не проверял), служба поддержки кормила завтраками все это время. В итоге в ужасе сбежал от них.
Ну так вот, о чем это я? А! Установили мне модем по умолчанию, кто имел дело тот знает, какой. У него две возможности коннекта: через LAN и через USB. Я расчитывал перевести модем в режим роутера и подключить свой компьютер с Ubuntu через LAN интерфейс (потому что так проще настраивать). Компьютер жены с Windows XP собирался подключить через USB, дрова для модема на диске есть. Приезжал мастер все это дело подключать, телефонную линию корректировать или кто там его знает что еще. В итоге он мне и настроил модем в режим роутера, конечно, за деньги. Как позже узнал - зря я на это согласился, настройка - дело 2 минут и ее порядок есть на диске к модему. Настроить то настроил, но вот подключение по USB не сделал, сославшись на то, что он торопится, и это просто, и рассказав на словах, как это делается. Ок, я поверил, отправил его домой.
В итоге, долгие бои с модемом и настройками ничего не дали. Так через USB подключиться к интернету и не удалось. Нет, сеть заработала, пинг проходил, модем в сети виден. Но ADSL подключение - ни в какую. "Удаленный компьютер не отвечает". А по LAN все работает хорошо. Пришлось сделать как было при Акадо: жена выходила в интернет через прокси на моем компьютере. Мой замысел, чтобы она могла подключаться к сети не включая мой комп - рухнул.
В итоге пошел я в местное представительство Стрима, сдал этот модем и купил другой, с четырьмя портами LAN и WiFi. Настроил его в режиме роутера, подключил компьютеры, настроил сеть, как указано на диске. А там указано, что надо прописывать статический IP. Ну я и прописал 192.168.1.2 и 192.168.1.3. Но тут как раз и зарыта собака.
Сеть не хотела работать нормально. Если я включал сначала свой комп, а потом ком жены - все было в порядке. Если наоборот - то возникали проблемы, соединение не работало, и иногда исправлялось перезагрузкой модема. Но так ведь быть не должно!
Ответ был найден, когда я посмотрел IP моей Nokia N810, соединенной с интернетом через WiFi. Я ведь не назначал ему IP, а он был выдан модемом. Значит что? - модем выдает их динамически. Странно, что в настройках сети, описанных на диске адрес DNS был указан именно тот, что у модема. Тогда зачем прописывать статический IP?
Все сходится. Если я включаю свой комп первым, он берет IP 192.168.1.2, и точно такой же ему выдало бы DNS. И так далее - 192.168.1.3 получил бы комп жены, но у него такой же прописан в статике.
Вот какая собака порылась. Странно, что в документации к модему это не указано, и надо сначала походить по граблям, пока не дойдет. Ну да ладно, у всех есть недостатки.
Итак, ставим в настройках - получать IP автоматически и все в полном ажуре.

/etc/network/interfaces:
iface eth0 inet dhcp
auto eth0

/etc/resolv.conf:
nameserver 192.168.1.1


Всё.

2008-09-08

Удаленный рабочий стол Windows в Ubuntu linux

Несколько раз передо мной вставала задача удаленного администрирования базы данных MSSQL. Когда основной операционной системой был Windows XP все решалось просто - на локальной машине запускался SQL Server Management Studio Express из комплекта MSSQL Server 2005. Через этот менеджер производилось подключение к серверу, будь он на той же машине или в локальной сети.
Когда я стал работать в Ubuntu linux и необходимо было решать те же задачи - я знал два пути: либо пересаживаться за компьютер с WinXP (благо стоит он рядом) и жонглировать клавиатурой и мышкой, либо устанавливать на какой-нибудь эмулятор (например QEMU, VBox или VMWare) тот же WinXP, в нем устанавливать тот самый Management Studio. А там все по старому - коннект к удаленному серверу и поехали.
Но сегодня наткнулся на решение, которое известно каждому админу. Возможно, ты, дорогой читатель, не админ, и моя новость будет тебе приятна и полезна: решение за утилитой rdesktop.
Как оказалось, пользоваться ей не так уж и сложно. Два этапа:
1) На удаленной машине с Windows заходим в "Панель управления -> Система -> Удаленные сеаны" и ставим галочку "Разрешить удаленный доступ к этому компьютеру". В списке разрешенных личностей для доступа должен присутствовать ваш логин.
2) В консоли пишем команду:
rdesktop -d ваш_домен -u логин_в_сети -p пароль_в_сети имя_компьютера
И все! Прочитав руководство по утилите нашел еще несколько хороших параметров, но я уверен, что и вы их найдете без труда.
P.S. Последняя версия (на данный момент это 1.6.0, качается с www.rdesktop.org) позволяет запустить удаленный рабочий стол таким образом, что, хотя полноэкранный режим и закрывает один из рабочих столов, переключаться на другой можно через клавиатуру, и переключение корректно: на одном рабочем столе нормальный гном, на втором - "нормальный" Windows. В 1.5.0 полноэкранный режим обладал странным свойством: как ни переключай рабочие столы, на них будет все тот-же Windows (по крайней мере при включенных эффектах Compiz).

P.S. Устранение некоторых багов rdesktop (обычно с раскладкой клавиатуры) делается путем установки пропатченной версии.

Качаем для i368: http://sys-admin.org/files1/rdesktop/rdesktop_1.6.0-alt1_i386.deb
или для x86_64: http://sys-admin.org/files1/rdesktop/rdesktop_1.6.0-alt1_amd64.deb
Далее:
sudo dpkg -r rdesktop
sudo dpkg -i rdesktop_1.6.0-alt1*
cd /usr/lib
sudo ln -s libcrypto.so.0.9.8 libcrypto.so.6

rdesktop -5 -z -y -u пользователь -p пароль -g разрешениеxэкрана IP_удаленного_компьютера
главная опция "-y" - она говорит использовать raw клавиатуру


Взято отсюда.