Донецкий техникум промышленной автоматики

Масова запис в базу 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)

печатка Електронна пошта