Онлайн резервное копирование Dockerised sqlserver - PullRequest
0 голосов
/ 13 марта 2020

Я использую sqlserver в docker контейнере и хочу делать онлайн-резервные копии и не знаю, как go об этом.

В настоящее время, когда мой скрипт выполняется и одна из баз данных используется, я получить сообщение что-то вроде "не удается получить доступ к базе данных с эксклюзивной блокировкой". Есть ли способ в sqlserver делать «горячие резервные копии».

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

Любые указатели были бы наиболее ценными.

Это мой bash скрипт:

 #!/bin/bash
    #
    backupDir="/var/opt/mssql/backup/"

    #databases=$(/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $SA_PASSWORD -Q 'set nocount on;select Name from sys.Databases' -h -1)
    databases=$(/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $SA_PASSWORD -Q 'set nocount on;select Name from sys.Databases' | grep -Ev "(----|Name|master|tempdb|model|msdb|affected\)$|\s\n|^$)")
    for db in $databases; do
        backupName=$db".bak"
       /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $SA_PASSWORD -Q "
        BEGIN
         BACKUP DATABASE [$db]
         TO DISK = N'$backupDir$backupName'
         WITH NOFORMAT, NOINIT, NAME = '$db-full',  SKIP, NOREWIND, NOUNLOAD, STATS = 10
        END
        GO
        "
    done
...