[英]SQL Server 2008 Backup fails: BACKUP DATABASE is terminating abnormally
[英]Golang Error with Backing up the DBmssql: BACKUP DATABASE is terminating abnormally
我正在尝试使用 go 对 MSSQL 数据库进行完整备份。
但是,我测试了与 MSSQL 服务器的连接,它的工作原理非常棒!
通过对代码执行查询SELECT @@VERSION
它为我提供了版本,并且已使用下面代码中的凭据连接到 mssql。
通过运行查询BACKUP DATABASE name_db TO DISK = '/tmp/database.bak'
它失败并出现以下错误
备份 DBmssql 时出错:BACKUP DATABASE 异常终止
我确信我遗漏了一些东西,任何想法/想法将不胜感激。
顺便说一句,我在 Ubuntu 16.04 上安装了 mssql,我使用的是 1.9 版。
这是我的代码:
package main
import (
_ "github.com/denisenkom/go-mssqldb"
"database/sql"
"context"
"log"
"fmt" )
var server = "server_url"
var port = 1433
var user = "user"
var password = "pass"
var db *sql.DB
func main() {
var err error
// Create connection string
connString := fmt.Sprintf("server=%s;user id=%s;password=%s;
port=%d", server, user, password, port)
// Create connection pool
db, err = sql.Open("sqlserver", connString)
if err != nil {
log.Fatal("Error creating connection pool: "
+ err.Error())
}
log.Printf("Connected!\n")
defer db.Close()
Backup()
//Restore()
}
func Backup(){
ctx := context.Background()
err := db.PingContext(ctx)
if err != nil {
log.Fatal("Error pinging database :( " + err.Error())
}
var result string
err = db.QueryRowContext(ctx, "BACKUP DATABASE tempdb
TO DISK= '/tmp/Backup.bak' WITH NOFORMAT, NOINIT,
SKIP, NOREWIND, NOUNLOAD, STATS = 10;").Scan(&result)
//err = db.QueryRowContext(ctx, "select @@version").Scan(&result)
if err != nil {
log.Fatal("Error with Backing up the DB", err.Error())
}
fmt.Printf("%s\n",result)
}
我找到了非常愚蠢的解决方案。你可以在第一个回复中找到它。
显而易见,代码是干净的并且可以按预期工作。
唯一的问题来自MSSQL,它为超时查询设置了特定的值。
这就是为什么我成功执行了其他SQL查询,例如:上面Q中的示例中的SELECT @@VERSION
。
不过,我将此SQL查询的超时值设置为0:
EXEC SP_CONFIGURE'远程查询超时',0
重新配置
EXEC sp_configure
remote query timeout
为0表示超时不受限制。
问题出在 MSSQL 和 os 上,请先尝试在 SQL Server Management Studio 上进行查询,以了解问题的来源。
现在,改变这个:(
err = db.QueryRowContext(ctx, "BACKUP DATABASE tempdb TO DISK= '/tmp/Backup.bak' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10;").Scan(&result)
) 到 (
err = db.QueryRowContext(ctx, "BACKUP DATABASE tempdb TO DISK= '/tmp/Backup.bak' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10;").Err()
)
因为 db.QueryRowContext 预计最多返回一行并且备份查询不返回任何行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.