Скопируйте данные SQL Server от одного сервера до другого в расписании

tl; dr
Duration.between(       // Represent a span-of-time as a count of nanoseconds, to be calculated as hours-minutes-seconds.
    then ,              // Earlier in your code, capture the previous current moment: `Instant then = Instant.now() ;`
    Instant.now()       // Capture the current moment. 
)                       // Returns a `Duration` object, our elapsed time.
.toNanos()              // Get the total number of nanoseconds in the entire span-of-time. Returns a `long`. 

Захват текущего момента

Ваш код захватывает текущий момент, снимок, заморожен. Результирующий объект не обновлен . Вот что означает фраза «определенный момент времени» в классе JavaDoc.

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

Избегайте устаревших классов даты и времени

Класс Calendar ужасен и был вытеснен несколько лет назад классами java.time с принятием JSR 310. В частности, [ 115] заменяет GregorianCalendar обычную реализацию Calendar.

Instant

Современный подход к отслеживанию текущего момента использует класс Instant. Instant представляет момент в UTC.

Instant start = Instant.now() ;
…  // Do some stuff.
Instant stop = Instant.now() ;

Разрешение

В Java 9 и более поздних версиях текущий момент фиксируется с разрешением в микросекунды (6 десятичных знаков дробной секунды). В Java 8, Instant более старая реализация Clock ограничена захватом текущего момента в миллисекундах (3 десятичных знака). Во всех версиях Java класс Instant способен представлять момент в наносекундах (9 десятичных цифр). Но обычные компьютерные часы не могут точно так точно отслеживать время.

Duration

Рассчитать прошедшее время как объект Duration .

Duration duration = Duration.between( start , stop ) ;  // Represents a span of time in terms of hours-minutes-seconds.
long nanoseconds = duration.toNanos() ;                 // Converts this duration to the total length in nanoseconds expressed as a long.

System.nanoTime

Для микробенчмаркинга вы можете использовать System.nanoTime() . Этот метод фиксирует текущий момент в виде числа наносекунд с некоторой произвольной начальной точки. Осторожно: возвращаемое значение не не представляет текущий момент в соответствии с любыми часами или календарем. Но это полезно для отслеживания прошедшего времени при разрешении, возможно, более тонком, чем Instant.

long start = System.nanoTime() ;  // Some arbitrarily defined count of nanoseconds. *NOT* the current time/date by any clock/calendar. 
…  // Do some stuff.
long stop = System.nanoTime() ;
long nanoseconds = ( stop - start ) ;

JEP 230: Microbenchmark Suite

Для серьезных сравнительных тестов ознакомьтесь с недавно встроенной платформой сравнительного анализа, добавленной в Java 12 и более поздние версии на основе JMH . См. JEP 230: Microbenchmark Suite . [Тысячу сто сорок одна]

5
задан SqlRyan 18 August 2010 в 20:26
поделиться

4 ответа

Я записал бы консольное приложение.NET для этого. Выполнение резервного копирования так же легко как открытие соединения SQL и выполнение "РЕЗЕРВНОЙ БАЗЫ ДАННЫХ [] К ДИСКУ = N''. Затем используйте созданный в библиотеках FTP.NET для продвижения его до другого сервера. Можно даже добавить sharpziplib для архивирования его сначала. Затем бросьте это в запланированную задачу.

С другой стороны настройте службу Windows, которая наблюдает папку, в которую ftp передает с FileSystemWatcher и затем восстанавливает резервное копирование при выполнении.

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

Это - основная цель SSIS/DTS. Я делаю точно это с SSIS довольно часто. Если Вы не использовали SSIS к тому времени, sqlis.com является великолепным местом для запуска (если Вы не будете на SQL2000 затем, Вы будете использовать DTS, в этом случае запуститься с sqldts.com). Существует много замечательных книг по предмету также.

Но это определенно стоит Вашего времени для изучения изучения SSIS. Читая Ваш вопрос, SSIS является IMO оптимальный маршрут безусловно. Вы не должны будете писать строку кода, она имеет все инструменты, встроенные, чтобы сделать задание. Можно также запланировать его для выполнения через определенный интервал также.

4
ответ дан 14 December 2019 в 04:48
поделиться

Можно получить более быстрое 'резервное копирование' путем отсоединения каждого DB и копирования файла MDF/LDF - это действительно означает, что DB в режиме офлайн в течение короткого промежутка времени все же. Кроме этого я пошел бы с комментарием Chris.

0
ответ дан 14 December 2019 в 04:48
поделиться

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

Инструмент копирования базы данных SQL Server
«Копирует базу данных SQL-сервера с одного сервера на другой, создавая резервную копию, копируя файл резервной копии на целевой сервер и восстанавливая базу данных».

HTH кто-то ищет по этой теме .

2
ответ дан 14 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

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