iju*_*ath 8 sql-server sql-server-express sql-server-2014
目前,我只有一个备份文件 IMTDB.bak,它与数据库本身在同一个 HDD 上。我想通过本质上将它“复制”到另一个磁盘来增加这个数据库备份的冗余,但是我收到一个错误“服务器备份失败,媒体被格式化为支持 2 个媒体系列”。我认为这意味着当我创建备份时,它只是将备份放在一个驱动器上,我不能追溯添加更多。我想将备份迁移到另一个驱动器(实际上只是复制它),但我不想删除当前备份来执行此操作。
我该怎么办?将 IMTDB.bak 复制到另一个驱动器上的文件夹是否安全?
Han*_*non 12
由于您不熟悉 T-SQL BACKUP DATABASE
命令,我想我会添加一些关于它的细节。
您可能希望通过 Windows 任务计划程序服务按照以下语句运行某些内容,因为您无权访问 SQL Server 代理(我从您的其他问题中了解到,您使用的是 SQL Server Express)。
BACKUP DATABASE [xyz]
TO DISK = 'C:\somepath\mybackupfile.bak'
MIRROR TO DISK = 'D:\somepath\myotherbackupfile.bak'
WITH FORMAT
, INIT
, SKIP
, STATS = 1;
Run Code Online (Sandbox Code Playgroud)
您可能要强烈考虑让该MIRROR TO
子句指向不在本地计算机上的某个位置,因为如果您完全丢失本地计算机,您可能无法访问任一备份文件。指定MIRROR TO
子句要求您在第一次运行该备份语句时FORMAT
在WITH
子句中指定关键字。
您可以使用 Windows 共享的名称,例如\\SomeServer\SQLBackups\MyBackupFile.bak
只要共享的安全权限允许 Windows 调度程序服务访问。
该WITH FORMAT, INIT
部分告诉 SQL Server 覆盖备份文件中可能存在的任何现有备份。WITH NOINIT
如果您希望在这些文件中保存多个备份(即来自不同时间点的备份),您可以在完成第一个镜像备份后将其更改为。 NOSKIP
告诉 SQL Server 不检查备份过期等。 STATS = 1
将以1
百分比增量显示输出。您可以将此数字更改为任何您喜欢的数字。我用1
用于非常大的数据库,因为它给出了一些进展的迹象。
要通过 Windows 任务计划程序服务运行此命令,您需要将该命令(在 SQL Server Management Studio 中测试过之后)保存到磁盘上的文件中;让我们称之为C:\somefolder\BackupMyDB.sql
。然后,您需要将以下命令添加到 Windows 调度程序:
<path to sqlcmd>sqlcmd -S localhost -E -i C:\somefolder\BackupMyDB.sql
Run Code Online (Sandbox Code Playgroud)
您会希望该任务以您的身份“运行”。
完成所有这些后,您需要非常认真地考虑尝试将备份恢复到另一台计算机上,以便了解如何执行此操作。备份只是灾难恢复计划的一部分;可以说更重要的部分是测试该计划。
恢复过程将使用如下命令:
RESTORE DATABASE [xyz]
FROM DISK = 'D:\somepath\myotherbackupfile.bak'
WITH RECOVERY
, STATS = 1;
Run Code Online (Sandbox Code Playgroud)
请注意,RESTORE DATABASE
在当前数据库所在的机器上运行可能会在没有确认或警告的情况下覆盖当前数据库,因此请确保仔细评估数据库名称([xyz]
在我的示例中)以及您使用的其他选项。(这实际上不会覆盖现有数据库,除非您将REPLACE
关键字添加到WITH
子句中 - 我只想强调要小心。)
您可以使用backup database .... MIRROR TO DISK =
将数据库备份到其他位置。
将 IMTDB.bak 复制到另一个驱动器上的文件夹是否安全?
是的,您可以在备份完成后执行此操作。
注意:确保您使用的是 T-SQL,而不是 GUI,后者公开了有限的备份选项。