2、为了方便以后的使用,开始对语句进行简单的封装->存储过程。进行备份。
3、还原数据库,数据库还原后的保存位置(目录)(使用系统默认保存位置。为数据库重命名(使用数据库默认名称)不包含扩展名,如果目录已存在该名称的数据库,将会被覆盖 。
数据库可能因为硬件或软件(或两者同时)的故障变得不可用,不同的故障情况需要不同的恢复 *** 作。我们必须决定最适合业务环境的恢复方法。在数据库中恢复有3种类型或方法,即应急(crash)恢复、版本(version)恢复和前滚(rool forward)恢复。 应急恢复用于防止数据库处于不一致或不可用状态。数据库执行的事务(也称工作单元)可能被意外中断,若在作为工作单位一部分的所有更改完成和提交之前发生故障,则该数据库就会处于不一致和不可用的状态。这时,需要将该数据库转化为一致和可用的状态。
为此,需要回滚未完成的事务,并完成当发生崩溃时仍在内存中的已提交事务。如在COMMIT语句之前发生了电源故障,则在下一次重新启动并再次访问该数据库时,需要回滚到执行COMMMIT语句前的状态。回滚语句的顺序与最初执行时的顺序相反。 这种恢复技术是版本恢复的一个扩展,使用完整的数据库备份和日志相结合,可以使一个数据库或者被选择的表空间恢复到某个特定时间点。如果从备份时刻起到发生故障时的所有日志文件都可以获得的话,则可以恢复到日志上涵盖到的任意时间点。前滚恢复需要在配置中被明确激活才能生效。
方法1:
在
master
中执行
exec
sp_detach_db
'fj20070116',
'true'
接下来到相应的数据库文件目录下删除log文件
exec
sp_attach_db
@dbname
=
n'fj20070116',
@filename1
=
n'f:\microsoft
sql
server\mssql\data\fj20070116_datamdf'
执行结果如下(表明删除日志成功,并重建数据库日志文件):
设备激活错误。物理文件名
'f:\microsoft
sql
server\mssql\data\fj20070116_logldf'
可能有误。
已创建名为
'f:\microsoft
sql
server\mssql\data\fj20070116_logldf'
的新日志文件。
方法2:
选中要分离的数据库,先将其分离。
删除对应的日志文件。
数据库--所有任务--附加数据库--在附加数据库的d出框中选择mdf
选择是即可完成创建新的数据库日志文件。对数据库 *** 作没有任何影响。
以上两个方法生成的log文件只有504kb。
1、使数据库变为单用户模式
ALTER DATABASE 数据库名 SET SINGLE_USER
(当变成单用户的模式只能在同一个窗口执行语句)
2、修正数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象不正确。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修正报告的不正确。但是,这些修正可能会导致一些数据丢失。
DBCC CheckDB (数据库名, REPAIR_ALLOW_DATA_LOSS)
3、使数据库变回为多用户模式
ALTER DATABASE 数据库名 SET MULTI_USER
数据库数据恢复步骤
1、通过日志恢复SQLSERVER2005数据(也可通过LogExplorer工具查找进行恢复数据)
(A)通过日志和时间点来恢复数据的前提条件:数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项,如果是简单模式:类似下面的语句 *** 作数据就不会记录到日志中:selectintotfrom[表名]采用LogExplorer工具可以在线 *** 作,通过恢复日志(指定时间点恢复)来恢复数据,必须停止数据库或者再另一个数据库恢复(前提是必须有一个完全备份和日志备份)
这时为保证数据的完整要将数据库的恢复模式改成“完整
11、这时对数据库事务日志做备份(注意,如果没做个数据库完整备份,是不能做事务日志备份的)
这时新建一个数据库zp(将以前的数据库改名),恢复数据库
这时我们看到,有两个还原的数据库备份,因为我对zp数据库备份了两次,两次的备份的数据文件都一样。这里我们选择最近时间的备份默认在数据库的设置如下:是追加到备份集里,所以会有两个备份。
同时,在”选项“里设置”不回滚“事务,
注意:通过事务日志还原数据库,必须选择"不回滚"事务
确定后:出现下面情况:
这时发现,数据库一直是”正在还原“,这时还原数据库事务日志,
12、“常规”里选择时间,(刚删除的时间)
13、“选项”里将恢复状态设置为”回滚未提交“事务
确定后,查询数据库,发现数据回来了
2、无日志的数据恢复
21新建一个同名的数据库
22再停掉sqlserver(注意不要分离数据库)
23用原数据库的数据文件覆盖掉这个新建的数据库
24再重启sqlserver
25此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
26完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了
USEMASTERSP_CONFIGURE'ALLOWUPDATES',1RECONFIGUREWITHOVERRIDE
UPDATESYSDATABASESSETSTATUS=32768WHERENAME='数据库名'
sp_dboption'数据库名','singleuser','true'
DBCCCHECKDB('数据库名')
updatesysdatabasessetstatus=28wherename='数据库名'
sp_configure'allowupdates',0reconfigurewithoverride
sp_dboption'数据库名','singleuser','false'
恢复数据库到之前的某个时间点,必须要有日志备份。
下面是一个使用日志的示例:
create database db1
go
alter database db1 set recovery full
go
backup database db1 to disk='db1bak' with init--首先要对数据库进行全备份,否则checkpoint会阶段inactive的日志(类似于simple recovery)
go
use db1
go
create table t(col int)
go
---一些数据库 *** 作
---一些数据库 *** 作
---一些数据库 *** 作
--假设你在15点15分以后删除了这个表
drop table t
--如果想恢复这个表,需要对数据库进行日志备份
use master
go
backup log db1 to disk='db1trn' with norecovery
go
---然后执行以下 *** 作
use master
go
restore database db1 from disk='db1bak' with norecovery
go
restore log db1 from disk='db1trn' with recovery,stopat='2009-03-08 15:15:00'--这时,数据库恢复到15:15的状态。
以上就是关于怎么用SQL语句备份和恢复数据库全部的内容,包括:怎么用SQL语句备份和恢复数据库、数据库恢复的数据库恢复的三种方式、sql server数据库被删除怎么恢复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)