Зеркальное отражение по сравнению с передачей журналов в SQL-сервере 2005

Тип time_t представляет Unix time , количество секунд с четверга, 1 января 1970 года, 00:00:00 UTC, минус високосные секунды.

(Интерфейс POSIX clock_gettime() может расширить поддержку для CLOCK_TAI, что будет то же самое, за исключением , включая високосных секунд.)

Для манипуляции датами , лучше использовать стандартное время разбивки C, struct tm, как предусмотрено в localtime() или gmtime() .

localtime() использует текущий часовой пояс. (В системах Linux часовой пояс по умолчанию установлен в /etc/timezone, но каждый пользователь может переопределить его, установив переменную окружения TZ. Подробнее о том, как это сделать, см. Функцию tzset() POSIX.1]. ) gmtime() использует UTC.

«Уловка» заключается в том, что если вы вызовете mktime() для struct tm, описывающего дату и время в текущем часовом поясе, он сначала нормализует поля, а затем возвращает время Unix как time_t, соответствующее этой дате и местному времени. Например, если день месяца равен 45, он будет корректировать день, месяц и год (и соответствующие поля) для отражения фактической даты.

Итак, если вы хотите узнать дату и время через пять дней и шесть часов:

    time_t     now, then;
    struct tm *t;

    now = time(NULL);
    t = localtime(&now);

    printf("Now is %llu = %04d-%02d-%02d %02d:%02d%02d\n",
           (unsigned long long)now,
           t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
           t->tm_hour, t->tm_min, t->tm_sec);

    t->tm_hour += 6;
    t->tm_mday += 5;
    t->tm_isdst = -1; /* Don't know if DST or not; please guess. */
    then = mktime(t);

    printf("Then is %llu = %04d-%02d-%02d %02d:%02d:%02d\n",
           (unsigned long long)then,
           t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
           t->tm_hour, t->tm_min, t->tm_sec);

Если мы опускаем печать значений now и then, вышеприведенное совершенно стандартный код C и будет работать на всех современных операционных системах.

Если вы используете Linux или другую систему POSIXy (Mac, BSD), было бы лучше использовать

    time_t     now, then;
    struct tm  tbuffer, *t;

    now = time(NULL);
    t = localtime_r(&now, &tbuffer);

    printf("Now is %llu = %04d-%02d-%02d %02d:%02d%02d\n",
           (unsigned long long)now,
           t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
           t->tm_hour, t->tm_min, t->tm_sec);

    t->tm_hour += 6;
    t->tm_mday += 5;
    t->tm_isdst = -1; /* Don't know if DST or not; please guess. */
    then = mktime(t);

    printf("Then is %llu = %04d-%02d-%02d %02d:%02d:%02d\n",
           (unsigned long long)then,
           t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
           t->tm_hour, t->tm_min, t->tm_sec);

Разница в том, что localtime() возвращает указатель на статически распределенный буфер, а другой обращение к нему (даже в другом потоке) перезапишет содержимое. POSIX.1 localtime_r() принимает второй параметр, указатель на struct tm, где вместо этого сохраняется результат.

5
задан Karim 25 November 2008 в 14:04
поделиться

3 ответа

Зеркальное отображение

  • Зеркальное отображение базы данных ограничено только двумя серверами.
  • Зеркальное отображение со следящим сервером обеспечивает высокую доступность и автоматическое переключение при сбое.
  • Вы можете настроить строку DSN на иметь оба зеркальных сервера в нем, так что при их переключении вы ничего не заметите.
  • Во время зеркалирования ваша зеркальная база данных недоступна. Он находится в режиме синхронизации / восстановления.
  • Зеркальное отображение с помощью стандартной версии SQL Server 2005 не подходит для балансировки нагрузки (см. Предложение выше)

Доставка журналов

  • Вы можете зарегистрировать доставку на несколько серверов.
  • Доставка журналов актуальна только в зависимости от того, как часто выполняется задание. Если вы отправляете журналы каждые 15 минут, вторичный сервер может работать до 15 минут. Превращение его в более теплый режим ожидания.
  • Вы можете оставить базу данных в режиме только для чтения, пока она обновляется. Подходит для серверов отчетов.
  • Подходит для аварийного восстановления
5
ответ дан 14 December 2019 в 01:20
поделиться

В целях резервирования я рекомендовал бы Зеркально отразить: это сохраняет всегда актуальную копию Вашей базы данных без преград.. Если Вам не нужна автоматическая обработка отказа, Вам нужны всего два сервера/экземпляра. Обратите внимание, что режим High Performance только доступен в Enterprice (SP) выпуск!

3
ответ дан 14 December 2019 в 01:20
поделиться

Переключение на вторичную базу данных действительно занимает больше времени с передачей журналов, но это не слишком плохо. Необходимо будет вручную скопировать любые нескопированные файлы резервных копий, применить резервные копирования журнала транзакций во вторичную базу данных, восстановить вторичную базу данных и изменить ее роль на основное устройство. Если старые основные доступные базы данных, необходимо создать резервную копию его журнала транзакций перед началом. Обработка отказа с зеркальным отражением несколько более проста, и может быть сделана автоматически при использовании режима High Availability. Даже когда с помощью режима High Performance, это - все еще одна операция оператора.

1
ответ дан 14 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

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