Как я могу запланировать ежедневное резервное копирование с SQL Server Express? [дубликат]

Вы должны положиться на подготовленные заявления.

Создавайте имена столбцов только с использованием белого списка в качестве динамического SQL. Отфильтруйте пустые строки ''. Вставьте анонимные подготовленные параметры оператора ? и сгенерируйте строку спецификатора типа. Затем передайте значения в качестве связанных параметров.

Это должно сработать (пока не смог проверить).

<?php
declare (strict_types=1);

$km_user_id = 2;

// this array comes from the form
$form_array =
[
  'km_user_first_name'      => 'Antonio',
  'km_user_last_name'       => 'Acri',
  'km_user_address'         => 'via pola',
  'km_user_city'            => 'roma',
  'km_user_city_prov'       => '',
  'km_user_postcode'        => '',
  'km_user_email'           => '',
  'km_user_website'         => 'url',
  'km_user_telephone'       => '123456',
  'km_user_mobile'          => '',
  'km_user_fiscalcode'      => '',
  'km_user_document'        => '',
  'km_user_document_number' => '',
  'km_user_document_exp'    => '',
  'km_user_birth_place'     => '',
  'km_user_birth_date'      => '',
];

$white_list =
[
  'DEBUGkm_user_first_name'      => true, // DEBUG TEST filter
  'km_user_last_name'       => true,
  'km_user_address'         => true,
  'km_user_city'            => true,
  'km_user_city_prov'       => true,
  'km_user_postcode'        => true,
  'km_user_email'           => true,
  'km_user_website'         => true,
  'km_user_telephone'       => true,
  'km_user_mobile'          => true,
  'km_user_fiscalcode'      => true,
  'km_user_document'        => true,
  'km_user_document_number' => true,
  'km_user_document_exp'    => true,
  'km_user_birth_place'     => true,
  'km_user_birth_date'      => true,
];


// filter by whitelist and remove  ''  but NOT  '0'
$non_empty = array_intersect_key(array_filter($form_array, function($v){return $v !== '';}), $white_list);

if(!empty($non_empty))
{
  $cols   = '`' . implode('` = ?, `', array_keys($non_empty)) . ' = ?';
  $query  = "UPDATE `users` SET $cols WHERE `user_id` = ?";
  $values = array_values($non_empty);
  array_push($values, $km_user_id);

  $stmt = mysqli_prepare($db_user_conn, $query);
  mysqli_stmt_bind_param($stmt, str_repeat('s', count($non_empty)).'i', ...$values);
  mysqli_stmt_execute($stmt);
  // TODO: error handling
}

km_user_first_name не следует обновлять, поскольку его нет в белом списке. Удалите префикс DEBUG при тестировании.

62
задан Jon Seigel 6 March 2010 в 04:55
поделиться

3 ответа

Вы не можете использовать агента SQL Server в SQL Server Express. Путем я сделал это, прежде чем должен будет создать Сценарий SQL и затем выполнить его как запланированную задачу каждый день, у Вас могло быть несколько запланированных задач для помещений с расписанием резервного копирования / в хранение. Команда, которую я использую в запланированной задаче:

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE"-i "c:\path\to\sqlbackupScript.sql"

53
ответ дан Sam Cogan 24 November 2019 в 16:46
поделиться

Мы использовали комбинацию:

  1. Резервное копирование Cobian для планирования/обслуживания

  2. ExpressMaint для резервного копирования

Оба из них свободны. Процесс должен написать сценарий ExpressMaint для взятия резервного копирования в качестве Cobian "перед Резервным" событием. Я обычно позволяю этой перезаписи предыдущий файл резервной копии. Cobian затем вынимает zip/7zip из этого и архивирует их к резервной папке. В Cobian можно указать количество полных копий, чтобы сохранить, сделать несколько резервных циклов и т.д.

пример синтаксиса команды ExpressMaint:

expressmaint -S HOST\SQLEXPRESS -D ALL_USER -T DB -R logpath -RU WEEKS -RV 1 -B backuppath -BU HOURS -BV 3 
3
ответ дан mika 24 November 2019 в 16:46
поделиться

У сотрудников MSSQLTips есть несколько очень полезных статей, одна из которых наиболее актуальна для этого - « Автоматизация резервного копирования SQL Server 2005 Express и удаление старых файлов резервных копий »

Базовый подход - настроить две задачи с помощью Планировщика задач Windows. Одна задача запускает сценарий TSQL, который создает отдельные файлы резервных копий для всех баз данных MSSQL (кроме TEMPDB) с именем базы данных и меткой даты / времени в имени файла в указанном каталоге. Вторая задача запускает сценарий VBScript, который проходит через этот каталог и удаляет все файлы с расширением .BAK, возраст которых превышает 3 дня.

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

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

4
ответ дан 24 November 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: