【问题标题】:Why we require to create stored procedure for backup?为什么我们需要创建存储过程进行备份?
【发布时间】:2011-08-01 06:25:32
【问题描述】:

是否可以使用 Sql Server 2005/2008 使用存储过程备份数据库? 它的存储过程是什么......我的项目需要在我的项目中创建这样的过程的场景是什么? 前端语言为 C#.Net,后端为 sql server。 任何人都可以指导我...提前谢谢..

【问题讨论】:

    标签: c# sql-server


    【解决方案1】:

    您可以创建自己的存储过程:

    CREATE PROCEDURE sp_MyBackup
    AS BEGIN
      BACKUP DATABASE myDatabase to disk='c:\BACKUP\myDatabase.bak'
    END
    

    然后你可以从你的 T-SQL 代码中执行这个过程:

    exec sp_MyBackup
    

    编辑: 要在 c# 中执行您的存储过程,您需要执行以下操作:

    SqlConnection c= new SqlConection ( connectionstring );
    c.Open();
    SqlCommand cmd = new SqlCommand ("sp_MyBackup", c);
    cmd.CommadType = CommandType.StoredProcedure;
    cmd.ExecuteNonQuery();
    c.Close();
    

    再次编辑:我认为,前端应用程序可以使用 SP 创建备份以实现下一个场景:在大规模更新操作(数据导入、大规模清理等)之前,用户可以从应用程序开始备份。在这种情况下用户不需要相应的sql-server和数据库权限,他必须没有任何数据库工具和sql知识,但可以备份。

    【讨论】:

    • 使用 sp_ 前缀创建用户存储过程是不好的做法。以 sp_ 开头的名称是为系统存储过程保留的,可能无法按预期工作。
    • @Alex_L - 我的项目需要在我的项目中创建这样的程序的场景是什么?
    • 我已在“再次编辑”中回答。简而言之:当用户需要从用户界面进行备份时,应用程序需要它。
    • 简单的场景是:应用程序支持从CD或互联网导入数据。在导入用户想要保存数据库状态之前,因为如果导入失败,数据库必须恢复到之前的状态(导入之前)。当用户单击“导入”(或类似的)时,首先执行带有备份的存储过程,然后开始导入。
    • 我仍然认为这是一个非常糟糕的主意,除非相关用户是 DBA 或者可能是数据库的唯一用户。
    【解决方案2】:

    您可以使用“MDF 和 LDF”文件或特定数据库的“.bak”文件来收回数据库,这将涵盖所有表、存储过程和函数。

    前端:C# 后端:Sql Server

    Ado.Net 充当前端和后端之间的桥梁。

    在数据库管理系统 (DBMS) 中,存储过程是一组具有指定名称的结构化查询语言 (SQL) 语句,这些语句以编译后的形式存储在数据库中,以便多个程序共享。存储过程的使用有助于控制对数据的访问(最终用户可以输入或更改数据但不编写过程)、保持数据完整性(以一致的方式输入信息)和提高生产力(存储在程序只需要编写一次)。

    这将由 C# 使用 SqlCommand 对象调用

    http://www.exforsys.com/tutorials/vb.net-2005/access-and-manipulate-sql-server-data-using-stored-procedures.html

    【讨论】:

      【解决方案3】:

      如果您想在数据库服务器上启动每小时/每晚/每周/某个其他时间的备份。

      然后您可以编写一个脚本(例如 powershell)来执行启动备份的存储过程。

      这与您的实际应用无关。您的应用程序不应该关心或关心备份。这是一项维护/管理任务,应在数据库服务器上处理。

      Have a google to find out how to do it.

      【讨论】:

        【解决方案4】:

        除非您正在创建一个供 DBA 和支持人员使用的实用程序,否则我想不出几个这样做的理由。在多用户环境中,允许非专家用户启动备份几乎肯定不是一个好主意。

        如果您只想允许用户创建恢复点或保存数据库版本,那么我建议您创建一个transaction log mark。假设您在完全恢复模式下运行,日志标记将比允许用户自己进行备份更快、更容易支持。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-05
          • 2016-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-09
          • 2012-08-09
          • 1970-01-01
          相关资源
          最近更新 更多