SQL Server应用与开发范例宝典
上QQ阅读APP看书,第一时间看更新

1.9 数据备份与还原

实例043 完全备份与还原

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\043

实例说明

数据库中存储了用户的有用数据,一旦数据丢失,造成的损失是不可估量的,因此做好数据库的备份就显得十分重要。本实例将介绍备份与还原SQL Server 2000数据库的方法。

技术要点

在SQL Server 2000中,备份分为静态备份和动态备份两种类型。

● 静态备份。

在备份期间,不允许对数据库进行存取、修改等活动。也就是说,备份工作与正常的数据操作不能同时进行,这正是静态备份的缺点。

● 动态备份。

在正常的数据操作的同时可以对数据库进行备份。这种备份保证了备份工作与正常的数据操作并发进行。但是,如果在备份过程中,一部分数据已经备份到了副本上,这时某个用户对数据库中的该数据又进行了修改。备份结束时,副本上的数据已经不是最新的数据了。解决这个问题有一个很好的办法,那就是将备份期间用户对数据库所做的修改记录下来,存储在日志文件中。这样,联合备份副本和日志文件就可以将数据库恢复到正确状态。

不管是静态备份还是动态备份,在备份数据库时,都不允许进行下列操作。

(1)创建和删除数据库文件。

(2)手工或自动执行收缩数据库时截断数据库文件。

如果上述某一操作正在进行,此时执行数据库备份操作,系统会自动等待该操作完成后才进行备份。如果正在备份数据库,系统中发生了上述操作,那么该操作将会失败,而备份工作会继续进行。

实现过程

1.备份

下面将在企业管理器中实现SQL Server数据库db_CSell的完全备份,具体操作步骤如下。

(1)依次展开“服务器组”→“服务器”→“数据库”,右键单击db_Csell数据库,在弹出的快捷菜单中选择“所有任务”→“备份数据库”命令,如图1.210所示。

图1.210 选择“备份数据库”命令

(2)在打开的如图1.211所示的“SQL Server备份-db_CSell”对话框中选择“常规”选项卡,在“备份”选项组中,选择“数据库-完全”单选按钮(该选项是默认的选项),单击“添加”按钮,打开“选择备份目的”对话框,单击按钮,选择备份目的,如图1.212所示。

图1.211 “SQL Server备份-db_CSell”对话框

图1.212 选择备份目的

(3)“选项”选项卡中的设置,这里使用默认的选项,读者可以根据需要进行设置。

(4)设置完成后,单击“确定”按钮,SQL Server开始执行备份操作。

2.还原

将前面备份的数据库进行还原,具体操作步骤如下。

(1)依次展开“服务器组”→“服务器”→“数据库”,右键单击db_Csell数据库,在弹出的快捷菜单中选择“所有任务”→“还原数据库”命令。

(2)在打开的如图1.213所示的“还原数据库”对话框中选择“常规”选项卡,在“还原”选项组中,单击“从设备”单选按钮,然后单击“选择设备”按钮,在弹出的“选择还原设备”对话框中,单击“添加”按钮,选择还原目的,如图1.214所示。在“还原备份集”选项组中,选择“数据库-完全”单选按钮。

图1.213 “还原数据库”对话框

图1.214 选择还原设备

(3)单击“选项”选项卡,在“恢复完成状态”选项组中,单击“使数据库可以继续运行,但无法还原其他事务日志”单选按钮,如图1.215所示。

图1.215 “选项”选项卡

(4)根据需要设置还原的其他选项,设置完成后,单击“确定”按钮,SQL Server开始执行还原操作。

举一反三

根据本实例,读者可以:

对日志备份与还原;

对数据文件或文件组备份与还原;

备份到共享文件夹。

实例044 差异备份与还原

这是一个提高数据库安全性的实例

实例位置:光盘\mingrisoft\01\044

实例说明

如果事先已做了备份,但数据又发生变化,那么可以使用差异备份只备份更改的数据。本实例介绍实现差异备份的方法。

技术要点

差异数据库备份只记录自上次数据库备份后发生更改的数据。差异数据库备份比数据库备份小而且备份速度快,因此可以经常地备份,经常备份将降低丢失数据的危险。

说明:如果自上次完整数据库备份后创建了任何文件备份,则Microsoft SQL Server 2000将在差异数据库备份开始时扫描这些文件。这可能导致差异数据库备份的性能有所降低。有关更多信息,请参见使用文件备份。

使用差异数据库备份将数据库还原到差异数据库备份完成时的那一点。若要恢复到精确的故障点,必须使用事务日志备份。

在下列情况下,可考虑使用差异数据库备份。

● 自上次数据库备份后数据库中只有相对较少的数据发生了更改。如果多次修改相同的数据,则差异数据库备份尤其有效。

● 使用简单恢复模型时,希望进行更频繁的备份,但不希望进行频繁的完整数据库备份。

● 使用完全恢复模型或大容量日志记录恢复模型时,希望需要最少的时间在还原数据库时前滚事务日志备份。

建议在执行差异数据库备份时使用如下过程。

(1)创建定期的数据库备份。

(2)在每个数据库备份之间定期创建差异数据库备份(例如,对于高度活动的系统,每隔4小时或4小时以上备份一次)。

(3)如果使用完全恢复模型或大容量日志记录恢复模型,则创建事务日志备份的频率比差异数据库备份大,如每隔30分钟。

还原差异数据库备份的顺序如下。

(1)还原最新的数据库备份。

(2)还原最后一次的差异数据库备份。

(3)如果使用完全恢复或大容量日志记录恢复,则应用自上次创建差异数据库备份后创建的所有事务日志备份。

实现过程

1.备份

下面介绍差异备份db_CSell数据库,具体操作步骤如下。

(1)按照完全备份的操作步骤打开SQL Server备份窗口。

(2)单击“常规”选项卡,如图1.216所示,在“备份”选项组中,单击“数据库-差异”单选按钮,根据需要设置备份的其他选项。

图1.216 差异备份

(3)设置完成后,单击“确定”按钮,SQL Server开始备份。

2.还原

下面介绍差异还原db_CSell数据库,具体操作步骤如下。

(1)按照完全备份的操作步骤打开SQL Server备份窗口。

(2)单击“常规”选项卡,在“还原”选项组中,单击“从设备”单选按钮,在“参数”选项组中,单击“数据库-完全”单选按钮,在“设备”项中选择要还原数据库的完全备份设备(或者完全备份文件),如图1.217所示。

图1.217 “还原数据库”对话框

(3)单击“选项”选项卡,在“恢复完成状态”选项组中,单击“使数据库不再运行,但能还原其他事务日志”单选按钮,如图1.218所示。

图1.218 “选项”选项卡

(4)根据需要设置还原的其他选项,设置完成后,单击“确定”按钮,SQL Server开始执行完全还原操作。

(5)完全备份数据的还原完成后,再次打开还原数据库窗口。

(6)单击“常规”选项卡,在“还原”选项组中,单击“从设备”单选按钮,在“参数”选项组中,单击“数据库-差异”单选按钮,在“设备”项中选择要还原数据库的差异备份设备(或者差异备份文件)。

(7)单击“选项”选项卡,在“恢复完成状态”选项组中,单击“使数据库可以继续运行,但无法还原其他事务日志”单选按钮。

(8)根据需要设置还原的其他选项,设置完成后,单击“确定”按钮,SQL Server开始执行差异还原操作。

举一反三

根据本实例,读者可以:

按时点还原;

还原master;

强制还原。

实例045 部分数据库还原

这是一个提高数据库安全性的实例

实例说明

如果应用程序不小心删除了一个表,那么要想还原数据库中包含这个表的那部分,该怎么做呢?本实例将介绍还原部分数据库的方法。

技术要点

部分还原操作由RESTORE语句的PARTIAL子句完成。在还原完整数据库备份时,还可以使用PARTIAL选项。不支持文件备份的部分数据库还原。

执行部分还原操作的步骤如下。

(1)执行使用完整数据库备份的RESTORE DATABASE语句。在还原的Transact-SQL语句中,为每个要还原的文件或文件组指定FILEGROUP子句(如果指定一个文件,也将还原其文件组内的所有文件)和PARTIAL子句。如果要还原事务日志备份或者差异备份,则应该指定NORECOVERY子句,否则指定RECOVERY子句。

(2)如果需要还原事务日志或者差异备份,则还原这些备份。

实现过程

下例在名为mywind的数据库中执行部分还原操作。mywind使用的是完全恢复模型。数据库创建在两个文件组上,即包含文件mywind_data_1的new_customers和包含文件mywind_data_2的sales。示例代码如下:

          CREATE DATABASE mywind
          GO
          ALTER DATABASE mywind ADD FILEGROUP new_customers
          ALTER DATABASE mywind ADD FILEGROUP sales
          GO
          ALTER DATABASE mywind ADD FILE
            (NAME='mywind_data_1',
            FILENAME='g:\mw.dat1')
            TO FILEGROUP new_customers
          ALTER DATABASE mywind
            ADD FILE
            (NAME='mywind_data_2',
            FILENAME='g:\mw.dat2')
            TO FILEGROUP sales
          GO

执行完整数据库备份,然后在new_customers上创建表t1,在sales上创建表t2。备份事务日志的代码如下:

          BACKUP DATABASE mywind
            TO DISK ='g:\mywind.dmp'
            WITH INIT
          GO
          USE mywind
          GO
          CREATE TABLE t1 (id int) ON new_customers
          CREATE TABLE t2 (id int) ON sales
          GO
          BACKUP LOG mywind TO DISK='g:\mywind.dmp'
          WITH NOINIT
          GO

在某些时候,有必要还原sales文件组上的表t2。RESTORE FILELISTONLY语句列出数据库文件及其所在的文件组。RESTORE HEADERONLY语句列出备份媒体的内容:

          RESTORE FILELISTONLY FROM DISK='g:\mywind.dmp'
          GO
          RESTORE HEADERONLY FROM DISK='g:\mywind.dmp'
          GO

RESTORE DATABASE语句使用WITH PARTIAL和NORECOVERY选项以另一个名称还原数据库和sales文件组。另外,还将主文件和文件组(mywind)、事务日志(mywind_log)和已还原的文件组中的所有文件(本例中sales中只有mywind_data_2文件)移到新位置,日志即得到恢复。示例代码如下:

          RESTORE DATABASE mywind_part
            FILEGROUP = 'sales'
            FROM DISK='g:\mywind.dmp'
            WITH FILE=1,NORECOVERY,PARTIAL,
            MOVE 'mywind' TO 'g:\mw2.pri',
            MOVE 'mywind_log' TO 'g:\mw2.log',
            MOVE 'mywind_data_2' TO 'g:\mw2.dat2'
          GO
          RESTORE LOG mywind_part
            FROM DISK = 'g:\mywind.dmp'
            WITH FILE = 2,RECOVERY
          GO
          Notice that t2 is accessible after the partial restore operation.
          SELECT COUNT(*) FROM mywind_part..t2

输出结果如下:

          0

注意在部分还原操作后无法访问t1。

          SELECT COUNT(*) FROM mywind_part..t1

实例046 备份和恢复系统数据库

这是提高数据安全性的实例

实例位置:光盘\mingrisoft\01\046

实例说明

系统数据库master、msdb、model和tempdb保存着SQL Server 2000的许多重要的数据信息,如果这些数据丢失了,就会给系统带来非常严重的后果,所以要经常备份系统数据库。本实例介绍备份和恢复系统数据库的过程。

技术要点

在系统数据库master、msdb、model和tempdb中,前3个比较重要,而tempdb主要保存系统的临时数据。当SQL Server 2000每次启动时,系统会重建这个数据库,而当SQL Server 2000停止运行时,tempdb中所有数据会被自动清除,所以可以不备份系统数据库tempdb。

通常情况下,发生以下情况时应立即备份系统数据库。

● 创建或者删除数据库时。不过,如果用户数据库自动增长以便容纳新数据或者删除文件和文件组,这不会影响数据库master,此时可以不备份数据库master。

● 添加登录账户或者执行一些与登录安全有关的操作时。但是,在数据库中创建用户对数据库master没有影响。

● 更改服务器的任何配置选项时。

● 创建或者删除备份设备时。

当数据库master遭到损坏时,要分析具体的情况。

如果数据库master遭到损坏,但还可以启动SQL Server服务时,则可以使用备份来恢复数据库master。

如果数据库master遭到严重损坏,而且无法启动SQL Server服务时,则必须首先利用SQL Server提供的重建master实用工具来重建master数据库,然后再用备份来恢复它。

实现过程

下面介绍重建master数据库。具体操作步骤如下。

(1)关闭SQL Server服务,依次单击“开始”→“运行”菜单项,在打开的窗口中输入rebuildm.exe命令,系统打开图1.219所示的对话框。

图1.219 重建master数据库

(2)在“服务器”下拉列表中选择数据库master所在的服务器。单击“浏览”按钮,在打开的对话框中选择包含数据库文件的源目录(SQL Server 2000安装程序中数据文件的源目录,如果使用的是SQL Server 2000安装光盘,则目录会是光盘上的相关目录)。

(3)单击“设置”按钮,在打开的对话框中设置SQL的排序规则。一般情况下,采用默认设置就可以了。

(4)单击“重建”按钮,重建数据库master。在重建之前,系统会弹出确认对话框,如图1.220所示。

图1.220 重建数据库master的确认对话框

(5)单击“是”按钮,开始重建数据库master。系统会弹出服务器配置进度提示框。这个过程需要一些时间。

(6)重建数据库master完成后,系统会弹出提示框。

(7)单击“确定”按钮,完成数据库master的重建操作。