Войти

Показать полную графическую версию : Удаление-Копирование-Восстановление MS SQL DB


AZABAZA
22-04-2015, 12:41
День добрый, всем

У меня вопросик в области POWERSHELL.

Есть файл сервер, и сервак.
Задача:
1. Удалить *.bak файлы из директорий D:\backup.
2. Копировать *.bak файлы из файл сервера (Примечание *.bak файлы лежат в разбросанном виде. То есть нужно копировать из разных папок в одну локальную папку).
3. Запустить восстановление несколько MS SQL DB (t-sql скрипт уже есть).
sqlcmd -d master -Q "ALTER DATABASE .......... FILE = 1, NOUNLOAD, REPLACE, STATS = 10;"
4. Подключение юзеров (t-sql скрипт уже есть).
sqlcmd -d master -Q "IF EXISTS (SELECT * FROM sys.database_principals WHERE name .............N'db_owner';"
5. Логировать каждое действие в отдельный текстовый файл.
6. Отправить письмо с логами адресату.

есть немного кода: # Объявляем переменные
$des_dir = Get-Item "D:\Backup\"
$src_dir = Get-Item "\\server1\backup\"
# Удалить старые bak файлы
Get-ChildItem $des_dir -Recurse -include *.bak | Remove-Item


есть скрипт (powershell) для отправки письма, но без прикрепления лог файлов :dont-know

Кто чем поможет, выражаю заранее благодарность!
Спасибо огромное!

Kazun
22-04-2015, 13:15
# Объявляем переменные
$log = "C:\log\log.txt"
$des_dir = Get-Item "D:\Backup\"
$src_dir = Get-Item "\\server1\backup\"

Start-Transcript -Path $log

# Удалить старые bak файлы
Get-ChildItem $des_dir -Recurse -include *.bak | Remove-Item
#Скопировать
Get-ChildItem $src_dir -Recurse -include *.bak | Copy-Item -Destination $des_dir
#Запустить восстановление несколько MS SQL DB (t-sql скрипт уже есть).
sqlcmd -d master -Q "ALTER DATABASE .......... FILE = 1, NOUNLOAD, REPLACE, STATS = 10;"
#Подключение юзеров (t-sql скрипт уже есть).
sqlcmd -d APSDB -Q "IF EXISTS (SELECT * FROM sys.database_principals WHERE name .............N'db_owner';"

Stop-Transcript

send-mailmessage -from "user01@example.com" -to "user02@example.com" -subject "SQL LOG" -body "Forgot to send the attachment. Sending now." -Attachments $log -priority -smtpServer smtp.fabrikam.com

AZABAZA
22-04-2015, 13:22
Kazun,
Спасибо,
я не дополнил что копировать нужно только определенные бэкапы остальные не надо копировать
Пример:back1.bak - копируем
back2.bak - не копируем
back3.bak - копируем

2. Когда еще раз копирует он говорит что already exist

Kazun
22-04-2015, 13:39
Указать через запятую, какие файлы копировать:

Get-ChildItem "$src_dir\back1.bak","$src_dir\back3.bak" | Copy-Item -Destination $des_dir


2. Когда еще раз копирует он говорит что already exist - Насколько помню, только для папок выдается подобное сообщение.

AZABAZA
22-04-2015, 13:50
Kazun,

выдает ошибку:

Start-Transcript : This host does not support transcription.
At line:6 char:17
+ Start-Transcript <<<< -Path $log
+ CategoryInfo : NotImplemented: (:) [Start-Transcript], PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands.StartTranscriptCommand

Stop-Transcript : This host does not support transcription.
At line:17 char:16
+ Stop-Transcript <<<<
+ CategoryInfo : NotImplemented: (:) [Stop-Transcript], PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands.StopTranscriptCommand

Kazun
22-04-2015, 13:52
Скрипт запускать только в консоли PowerShell и ни в каких других хостах(ISE,PSSQL).

AZABAZA
22-04-2015, 13:55
Kazun,

Спасибо огромное! пойду допиливать дальше :yahoo:

AZABAZA
29-04-2015, 13:44
Kazun,

Что то он у меня не соблюдает порядок выполнения скриптов =( :dont-know

AZABAZA
04-05-2015, 13:25
Kazun,

Добрый день,
Вопрос: Как можно использовать операторы IF/THEN/ELSE/ELSE IF?

Пример:
1.Выполняется проверка почты ЕСЛИ есть письмо с темой, ТОГДА запустить скрипт ЕСЛИ нету ВЫХОД!

Примечание: Все в одном листке (скрипте)!

Заранее благодарен!

Foreigner
04-05-2015, 14:46
AZABAZA, В PowerShell нет "then"

help about_if




© OSzone.net 2001-2012