Массовая запись в базу MS SQL скриптом на Powershell
При тестировании отказоустойчивой конфигурации Microsoft SQL Server 2012 (подробнее: Пошаговое развертывание AlwaysOn - MS SQL 2012) мне нужно было сгенерировать массовую запись данных в базу.
Т.к. я совсем не знаю T-SQL, решил написать небольшой скрипт на Powershell для решения этой задачи.
Нам понадобится:
- Непосредственно база данных
- Таблица в ней для службных нужд
База данных у нас уже должна быть. Можно создать вообще пустую. Теперь создадим таблицу. Схема таблицы такая. Я ее делал вручную через Designer в SQL Server Management Studio.
- GUID - ключевое поле для данных
- TIMESTAMP - метка времени записи
Скрипт вот такой. Принимаются два обязательных параметра: общее время работы скрипта и количество запросов INSERT в секунду.
param( [Parameter(Mandatory=$true)][int] $Duration, [Parameter(Mandatory=$true)][int] $StringsPerSecond ); $conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=ae1-tst-listene.domain.local; Initial Catalog=DAD_TST; Integrated Security=SSPI"); $conn.open(); $cmd = $conn.createcommand(); $start_time = Get-Date; $end_time = $start_time.AddMinutes($Duration); $current_time = Get-Date; $counter = 0; while ($end_time -gt $iteration_end_time) { $iteration_start_time = Get-Date; $guid = [guid]::NewGuid(); if ($iteration_start_time.DateTime -gt $current_time.DateTime) { $counter = 0; echo $current_time.DateTime; } if ($counter -lt $StringsPerSecond -and $iteration_end_time.DateTime -eq $iteration_start_time.DateTime) { if ($conn.State -eq "Closed") { echo "Re-Opening Connection !!!"; try { $conn.open(); } catch { echo "Re-connection error !!!"; } } $current_time_string = Get-Date -Format "yyyyMMddHHmmss"; $current_time = Get-Date; $cmd.commandtext = "INSERT [dad_tst] (GUID, TIMESTAMP) VALUES ('$($guid)', $current_time_string)"; try { $result = $cmd.executenonquery(); } catch { echo "Error sending a query !!!"; } $counter++; } $iteration_end_time = Get-Date; } $conn.close();
Лучше всего запускать скрипт с компьютера, который находится поближе к серверу, т.к. сетевые задержки достаточно сильно снижают производительность.
На выходе получается вот такая таблица:
powershell (ru), скрипт, ms sql server (ru)
- Просмотров: 5578