Вопросы и ответы по лицензированию Microsoft SQL Server




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

32 Comments

  1. panvartan

    Если SQL Server только на одной виртуальной машине (4 виртуальных ядра) vsphere, покупать придется на все виртуальные процессоры хоста (32 виртуальных ядра) или только на 4 задействованных субд?

    Reply
  2. accounting_cons

    (1)Только на 4 ядра, относящихся к этой виртуальной машине.

    Reply
  3. accounting_cons
  4. vitkhv

    При все нарастающей конкуренции со стороны Postgres, решение об изменении политики лицензирования с процессора на ядро, сделавшее Enterprise версию MSSQL просто неподъемной, по моему мнению совсем не дальновидно.

    Кстати PG и на Oracle давит, не плохо так. По крайней мере не малое число спецов переквалифицируются с MSSQL и Oracle на PG.

    Reply
  5. a_pol

    Отличная статья, спасибо!

    Если у меня уже есть CAL-ы для пользователей и SQL сервер то нужно ли мне снова покупать CAL-ы если я покупаю еще один SQL сервер?

    Reply
  6. accounting_cons

    (5)

    Если у меня уже есть CAL-ы для пользователей и SQL сервер то нужно ли мне снова покупать CAL-ы если я покупаю еще один SQL сервер?

    нет, не нужно, если CAL-ы той же версии, что и сервер (или более поздней версии).

    Reply
  7. sergathome
    минимально возможное число лицензий на каждый физический процессор сервера составляет 4 лицензии на ядро

    это на каком языке написано ? ж))

    Reply
  8. accounting_cons

    (7) Перевод с английского. Можно было, конечно, написать по-простому — «ядерных лицензий».

    Reply
  9. sergathome

    (8) неа. нужно было написать «на процессор» 🙂

    Reply
  10. accounting_cons

    (9) Лицензируются ядра. В каждом процессоре должно быть лицензировано не менее 4-х ядер.

    Reply
  11. sergathome

    (10) ну да, а вы что написали ? == » 4 лицензии на ядро». Взрыв мозга.

    PS надо как-то избегать подобных оборотов всё-таки

    Reply
  12. accounting_cons

    (11)Лицензия на ядро — название такое у лицензии. Их четыре штуки. Получается «Четыре лицензии на ядро».

    Reply
  13. accounting_cons

    (12) A minimum of four core licenses is required for each physical processor on the server.

    Reply
  14. script

    Когда это читаешь и понимаешь, что нет никаких технических ограничений которые действительно приводили бы к такой сложности в лицензировании, и понимаешь что это чисто маркетинг, читать уже ничего не хочешь.

    Reply
  15. YPermitin

    (0) Спасибо за полезную информацию!

    А есть ли какая-либо информация по поводу переезда в Azure и как при этом можно «конвертировать» лицензии?

    Reply
  16. accounting_cons

    (15) Вы не сможете конвертировать лицензии, они останутся у вас. А за Azure будете платить арендную плату.

    Reply
  17. Cezaris

    А доступна ли установить лицензию Runtime или Full-Use на виртуальной машине (в облаке)?

    Reply
  18. Cezaris

    А доступна ли установка лицензий Runtime или Full-Use на виртуальной машине (в облаке)?

    Reply
  19. accounting_cons

    (18)Да, установка на виртуальной машине возможна. Но если это не ваше облако, то правильнее будет арендовать софт, а не покупать его.

    Reply
  20. Cezaris

    (19)Да, мы собираемся арендовать azure в Microsoft. В аренду у них нет данной лицензии, можно либо Standard либо Enterprise.

    Вообще у нас сложная ситуация с выбором версией лицензии SQL… Базу используем исключительно для 1С 8 версии, кол-во одновременных подключений до 30 (доступ только через RDP), кол-во выделенных виртуальных ядер 8. Оплата арендованного облака будет осуществляться за весь год 1 платежом. Вот и рассматриваем вариант каждый год оплачивать лицензию Standard по ядрам либо Standard по пользователям либо разово приобрести Runtime и не платить за её в последующем. Быть может есть возможность помочь советом?

    Reply
  21. user1263054

    Могу ли я установить на MS SQL Server 1C Runtime базу данных 1С версии 7.7 по этой лицензии?

    Reply
  22. accounting_cons

    (21)Нет, это все про 1С версии 8. У вас должна быть лицензия на сервер 1С:Предприятие 8.

    Reply
  23. ari

    Подскажите. Есть сервер 32 ядра. Хотим приобрести лицензию SQL Enterprise на 16 ядер.

    1. После установки на сервере SQL по факту будет использовать 16 ядер?

    Reply
  24. accounting_cons

    (23)»Для лицензирования физического сервера – когда SQL Server запускается в физической операционной среде — все физические ядра должны быть лицензированы.»

    Вы таким образом нарушите лицензионное соглашение.

    Насчет защиты в техническом плане ничего не могу сказать. Насколько я знаю, ее нет. Это вам не 1С 😉

    Reply
  25. user992447

    А если SQL Server версии Full-use только на одной виртуальной машине с 8 виртуальными ядрами vsphere, покупать придется на все 8 виртуальных ядер или будет достаточно минимальной лицензии на 4 ядра, задействованных СУБД? Все 8 ядер на данном сервере задействовать под нужды СУБД пока не планируется.

    Reply
  26. accounting_cons

    «Чтобы лицензировать отдельные виртуальные машины с использованием модели «По числу ядер», клиенты должны приобрести лицензию на ядро для каждого из виртуальных ядер (или виртуального процессора, виртуального ЦП, виртуального потока), выделенного данной виртуальной машине, при этом на одну виртуальную машину должно приобретаться не менее четырех лицензий на ядро. » — из инфописьма 1С. То есть нужно лицензировать все 8 ядер

    Reply
  27. user992447

    (26) поясните, пожалуйста, в случае приобретения и установки лицензии на 4 ядра (на 8-ядерный виртуальный сервер), СУБД технически не будет работать?

    Reply
  28. accounting_cons

    (27)Скорее всего, будет, но юридически вы будете нарушать условия лицензии.

    Reply
  29. user992447

    (28) Хорошо. Дополнительно хотелось бы уточнить вот что:

    Если на самом физическом сервере 16 ядер, но под виртуальный сервер, на котором планируется развернуть СУБД MS SQL выделено только 8 ядер и больше не планируется, то лицензировать нужно только эти 8 ядер виртуального сервера? Или все 16 ядер физического сервера?

    Reply
  30. accounting_cons

    (29)Достаточно 8-ми.

    Reply
  31. accounting_cons

    1 Ноября 2019 года начнется продажа лицензий SQL Server 2019.

    Принципы лицензирования останутся такими же, как SQL Server 2017. Примеры лицензий SQL Server 2019 без подписки Software Assurance:

    228-11476 — SQLSvrStd 2019 SNGL OLV NL Each AP — лицензия SQL Server 2019 Standard на сервер

    359-06863 — SQLCAL 2019 SNGL OLV NL Each AP DvcCAL — клиентская лицензия на устройство

    359-06864 — SQLCAL 2019 SNGL OLV NL Each AP UsrCAL — клиентская лицензия на человека

    7NQ-01562 — SQLSvrStdCore 2019 SNGL OLV 2Lic NL Each AP CoreLic — двухядерная лицензия SQL Server 2019 Standard

    7JQ-01605 — SQLSvrEntCore 2019 SNGL OLV 2Lic NL Each AP CoreLic — двухядерная лицензия SQL Server 2019 Enterprise

    Reply
  32. user1295890

    Добрый день !

    Требуются ли какие либо лицензии (девелоперские) для MSSQL Server 2016 Developer Edition?

    На сервере бутут на 100% цинтетичецкие данные для тестирования.

    Спасибо!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *