【问题标题】:Error when trying to backup data from SQL Server尝试从 SQL Server 备份数据时出错
【发布时间】:2017-11-21 13:15:52
【问题描述】:

当我尝试在我的数据库中进行备份时,我遇到了一个令人不安的连续错误。我已经对这个主题进行了研究,但我无法修复它。 请有知识的人提出解决问题的最佳方法。这是下面的错误消息: 我尝试更改 .dll 文件,没有机会!!!

【问题讨论】:

  • 您要从哪个客户端进行备份?我猜它不是管理工作室?试试这个链接:stackoverflow.com/questions/17681432/…
  • @plaidDK 您的链接描述了不同的东西。
  • 如果我可以详细解释一下,:“系统是在 MS 访问中构建的,后来升级到 SQL 2008。从 2008 年到 2014 年,数据库备份仍在工作,直到它崩溃。我们使用 2016恢复它,它一直工作到最近。就在几天前,我们无法像往常一样进行备份。它刚刚开始给我们错误“
  • 这是一个工具错误;服务器很可能很好。如果命令行不吓到您,您可以随时使用sqlcmd 执行BACKUP DATABASE。否则,请尝试修复 SQL Server 工具的安装,或尝试从另一台机器发出命令。 (如果您登录到 SQL Server 本身进行备份,请停止这样做。除非服务器是本地测试服务器,当然。)
  • BACKUP DATABASE testdb1 TO DISK = 'c:\testdb1.bak' WITH FORMAT, MEDIANAME = 'MyBackups', NAME = 'Full backup of my database' GO

标签: sql sql-server sql-server-2014 sql-server-2016


【解决方案1】:

你可以像这样编写一个自动脚本:

DECLARE @path VARCHAR(500)
DECLARE @name VARCHAR(500)
DECLARE @filename VARCHAR(256)
DECLARE @time DATETIME
DECLARE @year VARCHAR(4)
DECLARE @month VARCHAR(2)
DECLARE @day VARCHAR(2)
DECLARE @hour VARCHAR(2)
DECLARE @minute VARCHAR(2)
DECLARE @second VARCHAR(2)

-- 2. Setting the backup path

SET @path = 'D:\Backup\'  

 -- 3. Getting the time values

SELECT @time = GETDATE()
SELECT @year   = (SELECT CONVERT(VARCHAR(4), DATEPART(yy, @time)))
SELECT @month  = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mm,@time),'00')))
SELECT @day    = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(dd,@time),'00')))
SELECT @hour   = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(hh,@time),'00')))
SELECT @minute = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mi,@time),'00')))
SELECT @second = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(ss,@time),'00')))

-- 4. Defining cursor operations

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- system databases are excluded

--5. Initializing cursor operations

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN

-- 6. Defining the filename format

       SET @fileName = @path + @name + '_' + @year + @month + @day + @hour + @minute + @second + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  


       FETCH NEXT FROM db_cursor INTO @name   
END   
CLOSE db_cursor   
DEALLOCATE db_cursor

然后将其放入 SQL 作业步骤中并每天安排它,如下所示:

在 SQL Job Agent 下创建新作业并添加新步骤

添加时间表

使用时间表创建的作业

结果

【讨论】:

  • 非常感谢,我已将您的想法视为第二种方法。首先将是我们成功备份了数据库,这意味着应用程序是主要问题,需要修改。另一方面,我将使用您的脚本将每日备份作业创建到特定时间。
  • @McElie 希望你能解决 - 如果它可以使你受益,请记住投票或将答案标记为正确,以便其他人可以使用相同的解决方案。谢谢。
  • @McElie 嗯 - 它在这里工作正常。确定你把所有东西都复制粘贴了吗?
  • 现在一切都好,我错过了一个括号。再次非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 2021-12-15
  • 1970-01-01
  • 2017-10-21
  • 2021-10-02
相关资源
最近更新 更多