我正在docker容器中使用sqlserver,并且想进行在线备份,但不确定如何执行。
当前,当我的脚本执行并且其中一个数据库正在使用中时,我收到一条消息,提示“无法使用互斥锁数据库”。 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