--设置数据库为单用户
alter database auditsystem set single_user with rollback immediate;
--卸载数据库
sp_detach_db 'auditsystem '
--附加数据库
sp_attach_db 'auditsystem ','d:\database\auditsystem.mdf','d:\database\auditsystem_log.ldf';
--备份数据库到硬盘
backup database AuditSystem to disk=‘d:\database\AuditSystem .Bak' ;
--还原硬盘的数据库备份
restore database AuditSystem from disk=d:\database\AuditSystem.Bak'
with move 'AuditSystem' to d:\database\AuditSystem.mdf',
move 'AuditSystem_Log' to d:\database\AuditSystem_Log.ldf'
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)
1、正常的备份、SQL数据库恢复方式
正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:Sp_detach_db 数据库名
连接数据库的命令:
Sp_attach_db或者sp_attach_single_file_db
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′
使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:
假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。
卸下数据库:sp_detach_db 'test'
连接数据库:
sp_attach_db 'test',
'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf',
'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf'
sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'
2、只有mdf文件的恢复技术
由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息
设备激活错误。
物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。
已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。
但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息
服务器: 消息 1813,级别 16,状态 2,行 1
未能打开新数据库 'test'。CREATE DATABASE 将终止。
设备激活错误。物理文件名 'd:\test_log.LDF' 可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。
D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。
E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.设置test为紧急修复模式:
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
G.下面执行真正的恢复操作,重建数据库日志文件:
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1 未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:(此文章由飞客数据恢复中心搜集http://www.cellma.com.cn)
警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
H.验证数据库一致性: dbcc checkdb('test')
一般执行结果如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
I.设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成:
sp_configure 'allow updates',0
go
reconfigure with override
go
备注:使用restore database 恢复数据库分四步走
//1:设置要恢复的数据库为单用户模式,
//2:删除要恢复的数据库
//3:检查目的地的数据库文件(将要恢复生成的数据文件和日志文件)是否存在,存在就删除
//4:恢复数据库
alter database auditsystem set single_user with rollback immediate;
--卸载数据库
sp_detach_db 'auditsystem '
--附加数据库
sp_attach_db 'auditsystem ','d:\database\auditsystem.mdf','d:\database\auditsystem_log.ldf';
--备份数据库到硬盘
backup database AuditSystem to disk=‘d:\database\AuditSystem .Bak' ;
--还原硬盘的数据库备份
restore database AuditSystem from disk=d:\database\AuditSystem.Bak'
with move 'AuditSystem' to d:\database\AuditSystem.mdf',
move 'AuditSystem_Log' to d:\database\AuditSystem_Log.ldf'
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)
1、正常的备份、SQL数据库恢复方式
正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:Sp_detach_db 数据库名
连接数据库的命令:
Sp_attach_db或者sp_attach_single_file_db
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′
使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:
假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。
卸下数据库:sp_detach_db 'test'
连接数据库:
sp_attach_db 'test',
'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf',
'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf'
sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'
2、只有mdf文件的恢复技术
由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息
设备激活错误。
物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。
已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。
但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息
服务器: 消息 1813,级别 16,状态 2,行 1
未能打开新数据库 'test'。CREATE DATABASE 将终止。
设备激活错误。物理文件名 'd:\test_log.LDF' 可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。
D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。
E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.设置test为紧急修复模式:
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
G.下面执行真正的恢复操作,重建数据库日志文件:
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1 未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:(此文章由飞客数据恢复中心搜集http://www.cellma.com.cn)
警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
H.验证数据库一致性: dbcc checkdb('test')
一般执行结果如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
I.设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成:
sp_configure 'allow updates',0
go
reconfigure with override
go
备注:使用restore database 恢复数据库分四步走
//1:设置要恢复的数据库为单用户模式,
//2:删除要恢复的数据库
//3:检查目的地的数据库文件(将要恢复生成的数据文件和日志文件)是否存在,存在就删除
//4:恢复数据库
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1344http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 703创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 683SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 420--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 539在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 585大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1732昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1626在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9688① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 754--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 837view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 7511、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1044本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 896数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1158对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6633--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2338PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 1032APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1393--======================== ... -
Not Exists练习
2012-07-23 14:40 894IF OBJECT_ID(N'a') IS NOT NU ...
相关推荐
MySQL 自动定时备份数据库的方法 MySQL 是一个流行的开源关系数据库管理系统,随着数据量的增加,数据库的备份变得越来越重要。备份数据库可以保护数据的安全和完整性,避免数据丢失或损坏。MySQL 自动定时备份...
作为数据库管理员,或者是软件公司的项目经理经常面临着这个问题,一个数据库一个数据库的备份太累,通过上面的一个存储过程,能够批量备份系统中的所有数据库
本篇文章将深入探讨如何在Windows平台上使用批处理命令高效地备份数据库,并结合WinRAR进行最大压缩,以及如何恢复这些备份。我们将涵盖以下几个关键知识点: 1. **MySQL与MariaDB备份**:MySQL和MariaDB提供了多种...
标题中的“自动备份数据库程序”指的是一个专门为解决SQL Server 2008和2012 Express版本缺乏自动备份功能而设计的应用程序。在SQL Server的Express版本中,虽然提供了强大的数据库管理工具,但默认情况下并不包含...
tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份操作tp5数据库备份...
【小葵备份数据库利用工具详解】 小葵备份数据库利用工具是一款由小葵开发的专业数据库备份软件,主要针对具有db_owner权限的用户设计。在数据库管理领域,数据安全和备份是至关重要的环节,这款工具旨在帮助管理员...
标题中的“自动备份数据库java源码”指的是使用Java编程语言编写的一种程序,它的主要功能是自动化执行数据库的备份任务。数据库备份是数据保护的重要环节,它可以在数据丢失或系统故障时恢复数据,确保业务连续性。...
SQL Server 自动备份数据库 SQL Server 自动备份数据库是指通过设置代理来自动备份数据库文件的过程。下面是相关的知识点: SQL Server 代理 SQL Server 代理是 SQL Server 的一部分,负责执行预定义的作业,例如...
描述部分提到:“备份数据库,如果不会备份数据库的朋友可以参照……是用C#编程代码编写的备份数据库不再单一使用SQL进入的备份数据库了!”这段话强调了以下几点: 1. **目的**:通过C#程序实现数据库备份。 2. **...
本文将根据给定的信息“如何备份还原oracle数据库”,详细介绍备份与恢复Oracle数据库的方法与步骤。 ### 一、Oracle数据库备份的重要性 在日常维护工作中,由于硬件故障、人为操作失误或系统崩溃等原因,可能会...
标题中的“备份数据库服务器数据库(源代码C#的)”是指使用C#编程语言实现的数据库备份功能。在IT行业中,数据库备份是确保数据安全的重要环节,它允许在数据丢失或系统故障时恢复数据。C#是一种广泛使用的编程语言...
7. **VB2010-03-06-备份数据库**:这个文件名可能表示这是一个在2010年3月6日创建的VB项目,专注于数据库备份功能。它可能是源代码文件、项目文件或者是关于这个话题的文档。 在实际应用中,一个完整的数据库备份...
备份数据库-备份网站-打开网站脚本代码以及注意事项 备份数据库-备份网站-打开网站脚本代码以及注意事项 备份数据库-备份网站-打开网站脚本代码以及注意事项 备份数据库-备份网站-打开网站脚本代码以及注意事项
标题中的“ssms备份数据库-龙谷情.docx”指的是使用SQL Server Management Studio (SSMS)工具对数据库进行备份操作的文档。描述中提到的方法是通过SSMS将数据库备份为.bak格式,并随后载入该备份文件进行数据恢复。...
《ThinkPHP3.2.2备份数据库插件详解》 在Web开发中,数据库的备份与恢复是一项至关重要的任务,特别是在使用PHP框架进行项目开发时。ThinkPHP作为国内广泛使用的PHP框架之一,提供了丰富的功能来简化开发过程。本文...
本文将深入探讨“服务器上自动备份数据库”的概念、实现方法以及相关知识点。 1. 自动备份的重要性: 数据备份是为了防止数据丢失,无论是由于硬件故障、软件错误、恶意攻击还是自然灾害。自动备份通过设定定期...
window每天定时备份数据库到硬盘指定目录下,#-uluotao 指定用户名luotao #-p 指定明码 #--databases houtai 指定备份houtai这个数据库,可以指定多个备份的数据库 # > d:/back3.sql 指定备份文件的路径
1. **Thinkphp内置备份功能**:Thinkphp框架提供了一些内置的方法来帮助开发者备份数据库。这些方法通常位于`Think\Db`类中,可以通过编写控制器或服务层的代码调用。例如,你可以创建一个脚本,遍历所有表并执行SQL...
在SQL Server 2005中,数据库的备份是数据管理的重要环节,它确保了数据的安全性和可恢复性。本文将深入探讨如何在SQL ...因此,对数据库管理员来说,掌握在SQL Server 2005中实现维护计划和备份数据库的方法至关重要。
TestLink 数据库备份迁移 ...本文详细介绍了 TestLink 数据库备份迁移的步骤和方法,包括修改数据库密码、备份数据库、恢复数据库、自动备份脚本和官方指导。这些步骤可以确保 TestLink 数据库的安全和可靠性。