当前位置: 首页 > 编程日记 > 正文

SQL Server 数据库备份

SQL Server 数据库备份

原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html

备份数据库是指对数据库或事务日志进行复制,当系统、磁盘或数据库文件损坏时,可以使用备份文件进行恢复,防止数据丢失。

SQL Server数据库备份支持4种类型,分别应用于不同的场合,下面简要介绍。

(1)完全备份

完全备份,即完整数据库备份,可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。这是大多数人常用的方式,但需要花费更多的时间和空间,所以一般推荐一周做一次完全备份。

(2)事务日志备份

事务日志备份时一个单独的文件,记录数据库的改变,备份时只需要复制上次备份以来对数据库所做的改变,可支持从数据库、差异或文件备份中快速恢复,时间少,速度快,推荐每小时甚至更频繁地备份事务日志。

(3)差异备份

在完整数据库备份之间执行差异数据备份,比完全备份小,因为只包含自完全备份以来所改变的数据库,优点是存储和恢复速度快。推荐每天做一次差异备份。

(4)文件和文件组备份

数据库一般由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能备份完,那么可以使用文件和文件组备份,每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以此种备份并不常用。

本实例运用SQLDMO.backup对象完成整个系统数据库的备份。这使得在系统或数据库发生故障(如硬盘发生故障)时可以重建系统。

备份整个数据库的语法如下:

复制代码
BACKUP DATABASE {database_name|@database_name_var}
TO<backup_device>[,...n]
[WITH[BLOCKSIZE={blocksize|@blocksize_variable}][[,]DESCRIPTION={'text'|@text_variable}][[,]DIFFERENTIAL][[,]EXPIREDATE={date|@date_var}|RETAINDAYS={days|@days_var}][[,]PASSWORD={password|@password_variable}][[,]FORMAT|NOFORMAT][[,]{INIT|NOINIT}][[,]MEDIADESCRIPTION={'text'|@text_variable}][[,]MEDIANAME={media_name|@media_name_variable}][[,]MEDIAPASSWORD={mediapassword|@mediapassword_variable}][[,]NAME={backup_set_name|@backup_set_name_var}][[,]{NOSKIP|SKIP}][[,]{NOREWIND|REWIND}][[,]{NOUNLOAD|UNLOAD}][[,]RESTART][[,]STATS[=percentage]]
]
复制代码

备份数据库参数及说明如下:

备份数据库参数及说明
参  数 说  明
DATABASE

指定一个完整的数据库备份。加入指定了一个文件盒文件组的列表,那么仅有这些被指定的文件和文件组被备份

{ database_name | @database_name_var }

指定了一个数据库,从该数据库中对事物日志、部分数据库或完整的数据库进行备份。如果作为变了量(database_name_var)提供,则可将该名称指定为字符串常量(@database_name_var=database name)或字符串

数据类型(ntexttext数据类型除外)的变量

<backup_device>

指定备份操作时要使用的逻辑或物理设备。可以是下列一种或多种形式:

{logical_backup_device_name}|{@logical_backup_device_name_var}:是由 sp_addupmdevice创建的备份设备的逻辑名称,数据库将备份到该设备中,其名称必须遵守标识符规则。如果将其作为变量(@logical_backup_device_name_var)提供,

则可将该备份设备名称指定为字符串常量(@logical_backup_device_name_var)提供,则可将该备份设备名称指定为字符串常量(@logical_backup_device_name_var=logical backup device name)或字符串数据类型(ntexttext数据类型除外)

的变量。

{DISK|TAPE}='physical_backup_device_name'|@physical_backup_device_name_var: 允许在指定的磁盘或磁带上创建备份。在执行BACKUP语句之前不必存在指定的物理设备。如果存在物理设备且BACKUP语句中没有指定INIT选项,则 备份

追加到该设备

 注意:当指定 TO DISK 或 TO TAPE 时,请输入完整路径和文件名。例如,DISK='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\backup.dat'。

本实例备份数据库的代码如下:

string SqlStr2 = "backup database " + this.DropDownList1.SelectedValue + "to disk'" + this.TextBox1.Text.Trim() + ".bak'";

程序的主要代码如下:

Frm_Main.cs:

View Code
复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Text;
 7 using System.Windows.Forms;
 8 using System.IO;
 9 using System.Linq;
10 using System.Data.SqlClient;
11 
12 namespace BackUpDataBase
13 {
14     public partial class Frm_Main : Form
15     {
16         public Frm_Main()
17         {
18             InitializeComponent();
19         }
20 
21         private void Form1_Load(object sender, EventArgs e)
22         {
23             using (SqlConnection con = new SqlConnection(//创建数据库连接对象
24 @"server=.;pwd=123;uid=sa;database=master"))
25             {
26                 DataTable dt = new DataTable();//创建数据表
27                 SqlDataAdapter da = new SqlDataAdapter(//创建数据适配器对象
28                     "select name from sysdatabases", con);
29                 da.Fill(dt);//填充数据表
30                 this.comboBox1.DataSource = dt.DefaultView;//设置数据源
31                 this.comboBox1.DisplayMember = "name";//设置显示属性
32                 this.comboBox1.ValueMember = "name";//设置实际值
33             }
34         }
35 
36         private void button1_Click(object sender, EventArgs e)
37         {
38             beifenInfo();//备份数据库
39         }
40 
41         public void beifenInfo()
42         {
43             try
44             {
45                 sd.InitialDirectory = Application.StartupPath + "\\";//默认路径为D:
46                 sd.FilterIndex = 1;//默认值为第一个
47                 sd.RestoreDirectory = true;//重新定位保存路径
48                 sd.Filter = "备份文件 (*.bak)|*.bak|所有文件 (*.*)|*.*";//设置筛选文件类型
49                 if (sd.ShowDialog() == DialogResult.OK)
50                 {
51                     if (!File.Exists(sd.FileName.ToString()))
52                     {
53                         SqlConnection con = new SqlConnection();//创建数据库连接对象
54                         con.ConnectionString = @"server=.;uid=sa;pwd=123;database='" + this.comboBox1.Text + "'";
55                         con.Open();//打开数据连接
56                         SqlCommand com = new SqlCommand();//创建命令对象
57                         this.textBox1.Text = sd.FileName.ToString();//显示文件路径信息
58                         com.CommandText = "BACKUP DATABASE " + this.comboBox1.Text +//设置要执行的SQL语句
59                             " TO DISK = '" + sd.FileName.ToString() + "'";
60                         com.Connection = con;//设置连接属性
61                         com.ExecuteNonQuery();//执行SQL语句
62                         con.Close();//关闭数据库连接
63                         MessageBox.Show("数据备份成功!");//弹出消息对话框
64                     }
65                     else
66                     {
67                         MessageBox.Show("请重新命名!");//弹出消息对话框
68                     }
69                 }
70             }
71             catch (Exception k)
72             {
73                 MessageBox.Show(k.Message);//弹出消息对话框
74             }
75         }
76     }
77 }
复制代码

Frm_Main.designer.cs:

View Code
复制代码
  1 namespace BackUpDataBase
  2 {
  3     partial class Frm_Main
  4     {
  5         /// <summary>
  6         /// 必需的设计器变量。
  7         /// </summary>
  8         private System.ComponentModel.IContainer components = null;
  9 
 10         /// <summary>
 11         /// 清理所有正在使用的资源。
 12         /// </summary>
 13         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
 14         protected override void Dispose(bool disposing)
 15         {
 16             if (disposing && (components != null))
 17             {
 18                 components.Dispose();
 19             }
 20             base.Dispose(disposing);
 21         }
 22 
 23         #region Windows 窗体设计器生成的代码
 24 
 25         /// <summary>
 26         /// 设计器支持所需的方法 - 不要
 27         /// 使用代码编辑器修改此方法的内容。
 28         /// </summary>
 29         private void InitializeComponent()
 30         {
 31             this.sd = new System.Windows.Forms.SaveFileDialog();
 32             this.button1 = new System.Windows.Forms.Button();
 33             this.label1 = new System.Windows.Forms.Label();
 34             this.comboBox1 = new System.Windows.Forms.ComboBox();
 35             this.textBox1 = new System.Windows.Forms.TextBox();
 36             this.label3 = new System.Windows.Forms.Label();
 37             this.SuspendLayout();
 38             // 
 39             // button1
 40             // 
 41             this.button1.Location = new System.Drawing.Point(218, 68);
 42             this.button1.Name = "button1";
 43             this.button1.Size = new System.Drawing.Size(75, 23);
 44             this.button1.TabIndex = 0;
 45             this.button1.Text = "备份";
 46             this.button1.UseVisualStyleBackColor = true;
 47             this.button1.Click += new System.EventHandler(this.button1_Click);
 48             // 
 49             // label1
 50             // 
 51             this.label1.AutoSize = true;
 52             this.label1.Location = new System.Drawing.Point(38, 18);
 53             this.label1.Name = "label1";
 54             this.label1.Size = new System.Drawing.Size(77, 12);
 55             this.label1.TabIndex = 1;
 56             this.label1.Text = "操作数据库:";
 57             // 
 58             // comboBox1
 59             // 
 60             this.comboBox1.FormattingEnabled = true;
 61             this.comboBox1.Location = new System.Drawing.Point(122, 15);
 62             this.comboBox1.Name = "comboBox1";
 63             this.comboBox1.Size = new System.Drawing.Size(171, 20);
 64             this.comboBox1.TabIndex = 2;
 65             // 
 66             // textBox1
 67             // 
 68             this.textBox1.Enabled = false;
 69             this.textBox1.Location = new System.Drawing.Point(121, 41);
 70             this.textBox1.Name = "textBox1";
 71             this.textBox1.Size = new System.Drawing.Size(172, 21);
 72             this.textBox1.TabIndex = 4;
 73             // 
 74             // label3
 75             // 
 76             this.label3.AutoSize = true;
 77             this.label3.Location = new System.Drawing.Point(15, 44);
 78             this.label3.Name = "label3";
 79             this.label3.Size = new System.Drawing.Size(101, 12);
 80             this.label3.TabIndex = 5;
 81             this.label3.Text = "备份路径及名称:";
 82             // 
 83             // Form1
 84             // 
 85             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
 86             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
 87             this.ClientSize = new System.Drawing.Size(310, 103);
 88             this.Controls.Add(this.label3);
 89             this.Controls.Add(this.textBox1);
 90             this.Controls.Add(this.comboBox1);
 91             this.Controls.Add(this.label1);
 92             this.Controls.Add(this.button1);
 93             this.Name = "Form1";
 94             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
 95             this.Text = "备份SQL Server数据库";
 96             this.Load += new System.EventHandler(this.Form1_Load);
 97             this.ResumeLayout(false);
 98             this.PerformLayout();
 99 
100         }
101 
102         #endregion
103 
104         private System.Windows.Forms.SaveFileDialog sd;
105         private System.Windows.Forms.Button button1;
106         private System.Windows.Forms.Label label1;
107         private System.Windows.Forms.ComboBox comboBox1;
108         private System.Windows.Forms.TextBox textBox1;
109         private System.Windows.Forms.Label label3;
110     }
111 }
复制代码

下载地址:http://dl.vmall.com/c02bvayygk

作者:Crazy大象
出处:http://www.cnblogs.com/ynbt/
关于作者:专注于.Net、WCF和移动互联网开发。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过ffy_wang@qq.com联系我,非常感谢。 。
posted on 2013-04-25 15:47 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/archive/2013/04/25/3042701.html

相关文章:

Linux下修改PATH环境变量

Linux下有很多环境变量&#xff0c;PATH就是其中的一种 PATH 可执行文件的搜索路径。ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然 而通常我们执行当前目录下的程序a.out却需要提供完整的路径名./a.out,这是因为PATH 环 境变量的值里面包含了ls命令所在的目…

vscode 终端 进入node_安装了Node.js 从VScode 使用node -v 和 npm -v等命令却无效

前言最近写TypeScript需要安装、配置Node.js环境&#xff0c;楼主是使用的安装包所以环境变量都是自动就配好了(如果是下载的zip压缩包解压后要自己配置到系统环境变量中)。打开系统终端敲入命令 node -v 和 npm -v 也都有显示对应的软件包版本号&#xff0c;但是在VScode(Vis…

display:inline-block的妙用!!列表布局!!

如下图&#xff1a;像这种列表布局我们一般用 float:left; 设置宽度和高度就OK了。 但是&#xff0c;如果高度不同或者文字字数不同呢&#xff0c;再用float:left;布局就全乱了。如下图&#xff1a; 现在&#xff0c;我们可以利用display:inline-block;完美的解决这个问题。如下…

gitlab解决一些问题

一.修改gitlab端口&#xff1a; 打开/etc/gitlab/gitlab.rb文件&#xff0c;修改以下几点&#xff1a; external_url "http://192.168.58.62:9999"unicorn[listen] localhostunicorn[port] 9999 然后 #gitlab-ctl stop #gitlab-ctl reconfugure #gitlab-ctl start …

Linux下控制环境变量

查看环境变量 查看某一环境变量&#xff1a;比如我们需要查看HOME这个环境变量&#xff0c;我们可以在shell下直接输入echo $HOME 我们可以把所有的环境变量和环境变量的值都打印出来 打印环境变量 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,…

研究性能测试工具之systemtap入门指南(四)

运行脚本[rootBL480-64 jinyz]#stap topexe.stp输出结果&#xff1a; SYSCALL COUNT find 101910 oracle 1562 modclusterd 1184 pcscd 535 clustat …

linux 编译mqtt静态库_编译MQTT C++ Client

nmake -f ms\nt.mak(这是静态库,动态库是ntdll.mak)nmake -f ms\nt.mak test(测试命令,如果成功则最后显示“passed all tests”字样)nmake -f ms\nt.mak install 成功则会在C:\openss\win64目录下生成bin、include、lib、ssl四个文件夹如果需要编译动态库&#xff0c;nm…

ubuntu 目录结构

转载于:https://www.cnblogs.com/perfy/archive/2012/07/08/2581854.html

pandas 读csv文件 TypeError: Empty 'DataFrame': no numeric data to plot

简单的代码&#xff0c;利用pandas模块读csv数据文件&#xff0c;这里有两种方式&#xff0c;一种是被新版本pandas遗弃的Series.from_csv&#xff1b;另一种就是pandas.read_csv 先说一下问题这个问题就是在读csv文件时&#xff0c;默认的数据是object类型&#xff0c;因而没有…

Linux的僵尸进程

僵尸进程的简单理解 linux中有几种进程状态&#xff0c;其中有一种特殊就是僵尸进程&#xff0c;个人理解是可以这样理解&#xff0c;就是我们 的子进程已经退出了&#xff0c;但是子进程退出了之后无家可归&#xff0c;就是一个飘移的孤魂野鬼一样&#xff0c;所以形象的取名字…

class function或class procedure是什么意思

类函数\类过程. 它们是直接操作在类上面(没有实例化的对象) 下面是Delphi Help 的描述 A class method is a method (other than a constructor) that operates on classes instead of objects. The definition of a class method must begin with the res…

pythonshell画图_Python Shell下使用matplotlib

Python Shell下使用matplotlibCreated Monday 10 December 2012matplotlib默认是延迟绘图直到脚本结束&#xff0c;因为绘图是一个高代价的操作。所以可能不想每次每个属性的改变就更新绘图&#xff0c;只有所有的属性都改变了才更新。但是&#xff0c;当在python shell上工作时…

大地坐标的概念 大地坐标系的举例和说明分类

大地坐标大地测量中以参考椭球面为基准面的坐标。地面点P的位置用大地经度L、大地纬度B和大地高H表示。当点在参考椭球面上时&#xff0c;仅用大地经度和大地纬度表示。大地经度是通过该点的大地子午面与起始大地子午面之间的夹角&#xff0c;大地纬度是通过该点的法线与赤道面…

C# 在用户控件中添加自定义事件

/// <summary> /// 用户控件 /// </summary> public partial class UCMyControl : UserControl {//定义委托//EventArgs 可以自己定义参数的类型&#xff0c;一般情况下定义为(object sender&#xff0c;EventArgs e)public delegate void SelectedValueChanged(o…

标准h5的定位_H5中的定位

这次给大家带来H5中的定位&#xff0c;H5中定位的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。一.定位流分类1.1相对定位1.2绝对定位1.3固定定位1.4静态定位二.什么是相对定位?相对定位就是相对于自己以前在标准流中的位置来移动position: relative…

数据库开发基本操作-关于sql server 2005 未开放1433端口的问题

有些sql server 2005在安装过程中&#xff0c;可能将SQL server 服务的端口配置成了动态端口&#xff0c;没有使用默认的1433端口&#xff0c;从而导致了sql server 2005 的服务启动了&#xff0c;但是却没有开启1433端口。解决办法就是取消动态端口&#xff0c;并将端口改成14…

Java8内存模型—永久代(PermGen)和元空间(Metaspace)

一、JVM 内存模型 根据 JVM 规范&#xff0c;JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈&#xff1a;每个线程有一个私有的栈&#xff0c;随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西&#xff0c;每个方法会创建一个栈…

web server大全之GoAhead移植(转载)

转自:http://linux.chinaunix.net/techdoc/develop/2009/06/19/1119124.shtml 注&#xff1a;最近在做goAhead web server和移植其到TI芯片linux上&#xff0c;这里先转一篇相关的文章来学习下&#xff0c;希望有所帮助。。。 ******************************* * web server大全…

tomcat苹果版安装步骤_Mac系统安装和配置tomcat步骤详解

一:下载打开Apache Tomcat官网,选择需要的版本下载:二:存放到本地文件夹重名民为ApacheTomcat,放到/Users/计算机名/Library/目录下三:启动Tomcat打开Terminal,进入ApacheTomcat所在目录的bin目录下$:cd /Users/mymac/Library/ApacheTomcat/bin1启动Tomcat$:./startup.sh1如果出…

Oracle 11g 数据类型

Oracle 11g Datatypes VARCHAR2(size [BYTE | CHAR]) 可变长度的字符串的最大长度有大小字节或字符。最大尺寸是4000字节或字符&#xff0c;最低为1个字节或1个字符。您必须指定VARCHAR2大小。 字节表示该列将有字节长度语义。 CHAR列表示将字符语义。 NVARCHAR2(size) 可变长度…

《DSP using MATLAB》Problem 6.3

天不亮又醒了&#xff0c;拍了张景象&#xff0c;这就是黎明前的黑暗吗 转载于:https://www.cnblogs.com/ky027wh-sx/p/9569038.html

进程间通信--命名管道

几个术语 二义性&#xff1a;当我们往一个管道里面写端写数据的时候&#xff0c;比如写一个hello的时候&#xff0c;当我们写到he的时候&#xff0c;读端就已经开始读取数据了&#xff0c;所以这是不对的&#xff0c;这就是二义性临界资源&#xff1a;多个流可以访问的一个共同…

websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制

在使用websocket的过程中&#xff0c;有时候会遇到网络断开的情况&#xff0c;但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有&#xff1a;服务器会继续向客户端发送多余的链接&#xff0c;并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否…

【转载】Asp.Net 全生命周期

用三张图片详解Asp.Net 全生命周期 此文是转载阳阳多的博客内容&#xff0c;特此声明。 下面我们使用三张图片解析ASP.net的整个生命周期&#xff0c;我总感觉使用图片更加的清楚的说明这种问题&#xff0c;所以使用的这样方式 说明&#xff1a; 1 第一张图片从全局说明从客户…

Context-Based Access Control (CBAC) 基于上下文的访问控制 理论知识

CBAC即基于上下文的访问控制协议&#xff0c;通过检查防火墙的流量来发现管理TCP和UDP的会话状态信息。这些状态信息被用来在防火墙访问列表创建临时通道。通过在流量一个方向上配置ip inspect列表&#xff0c;放行其返回流量。被允许会话是指来源于受保护的内部网络会话。它不…

week6 10 后端backend server和mongoDB通信

0 之前我们maogoDB用的是在线的mlab 在线他们帮我们做好了model 也就是那个schma 其实python也有类似的包 帮我们定义这些model 但是呢 我们自己来做吧 用一个传统的意义上mongoDB 就是 insert select来操作数据库 就是在不用其他类库 定义的model 我们如何操作数据库 我们这次…

Linux网络端口

Linux下端口个数 首先简单介绍一下Linux下的端口的函数&#xff0c;当Linux各个主机之间进行通信的时候我们需要将某些数据进程传输&#xff0c;这个时候就需要将数据传入到某一个特定 的主机&#xff0c;这个时候就使用了TCP/IP协议&#xff0c;IP地址是用来标识互联网的唯一…

汉字书写解码_《汉字解码学》   第一部分

《汉字解码学》第一部份汉字与世界密码文字的关系文字是人类语言的书写符号&#xff0c;是人类用来进行传递信息以便进行交流的可见符号系统。文字是人类文明的标识和产物。我们的祖先是如何来到中国的&#xff1f;世界科学研究关于人类基因的研究的最新成果表明&#xff1a;世…

WCF中服务继承多个契约的使用

服务继承多个契约其实也就是服务类实现了多个接口&#xff0c;主要是在配置中需要添加多个endpoint&#xff0c;各个endpoint之间的address不同、contract不同 契约&#xff1a; [html] view plaincopyprint?[ServiceContract] public interface IReportService { [Ope…

Pentaho平台上加仪表盘插件步骤

Pentaho平台上加仪表盘插件步骤 下面我将最近学习的在Pentaho平台上加仪表盘插件的步骤稍微整理了一下&#xff0c;希望对有需要的朋友有些帮助。 1. 解压插件包&#xff1a;cdf-de_0.2.tar.bz2&#xff08;这个插件压缩包我即将上传&#xff09; &#xff0c;得到cdf- de_0.2 …