【问题标题】:How do I backup a database with a stored procedure in SQL?如何使用 SQL 中的存储过程备份数据库?
【发布时间】:2023-01-02 03:52:59
【问题描述】:

我正在尝试创建一个备份数据库的存储过程,但是每当我执行它时,我试图备份到的文件夹仍然是空的。

这是我的存储过程:

USE [HarvestMan_SoutheskFarm_03_05_22]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      Will Sewell
-- Create date: 03-05-2022
-- Description: Procedure to back up a database
-- =============================================

ALTER PROCEDURE [dbo].[BackupDatabases] 
    @name VARCHAR(MAX) = 'HarvestMan_SoutheskFarm_03_05_22' -- DB NAME TO CREATE BACKUP
AS
BEGIN
    DECLARE @path VARCHAR(256) -- path of backup files
    DECLARE @fileName VARCHAR(256) -- filename for backup
    DECLARE @fileDate VARCHAR(20) -- used for file name

    SET @path = 'C:\Users\will.sewell\Documents\Database_Test'

    -- specify filename format
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)

    BEGIN
        SET @fileName = @path + @name + '_' + @fileDate + '.BAK'

        BACKUP DATABASE @name TO DISK = @fileName
    END
END

我试过更改它正在写入的驱动器。

我已经复制并粘贴了我要备份的数据库名称,以确保没有拼写错误。

我假设这可能是权限问题或文件夹中的可见文件。

当我执行存储过程时,我得到这个:

Processed 24472 pages for database 'HarvestMan_SoutheskFarm_03_05_22', file 'HarvestMan_dat' on file 2.

Processed 1 pages for database 'HarvestMan_SoutheskFarm_03_05_22', file 'HarvestMan_log' on file 2. BACKUP DATABASE successfully processed 24473 pages in 5.039 seconds (37.941 MB/sec).

Completion time: 2022-05-04T10:27:30.2344290+01:00

【问题讨论】:

  • 如果存在权限错误,您将从过程中得到一个错误。执行该过程时收到的消息/错误是什么?
  • 虽然,我承认,这是非常SQL Server 服务帐户不太可能有权访问用户的文档文件夹。
  • 您正在备份到名称为 Database_TestHarvestMan_SoutheskFarm_03_05_22_20220504.bak 的文件夹 C:\Users\will.sewell\Documents。您在 @path@name 之间漏掉了一个反斜杠
  • 请注意,备份文件是在服务器上创建的,而不是在 SSMS 计算机上创建的。
  • 'HarvestMan_SoutheskFarm_03_05_22'永远永远永远不要使用两位数的年份——不管它看起来多么微不足道。 Y2K 是真实存在的。如果您对这些字符串进行排序 - 您可能会直接对文件进行排序,请使用有助于按日期排序的格式,因为人们倾向于这样做。并且不要提供默认名称 - 这只是懒惰的编码和懒惰的使用。没有合理的默认值——不要鼓励这样做。

标签: sql sql-server stored-procedures database-backups


【解决方案1】:

亲爱的,你必须先创建存储过程,你的路径缺少最后一个斜杠

BIG 请注意,您必须定义实际路径

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[BackupDatabases] 
    @name VARCHAR(MAX) = 'ActualDataBaseName' -- DB NAME TO                                 CREATE BACKUP
AS
BEGIN
DECLARE @path VARCHAR(256) -- path of backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name

SET @path = 'C:ActualPath'

-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)

BEGIN
    SET @fileName = @path + @name + '_' + @fileDate + '.BAK'

    BACKUP DATABASE @name TO DISK = @fileName
END
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2010-10-27
    • 2018-11-30
    相关资源
    最近更新 更多