使用sql语句备份和恢复SQLserver数据库

2017-7-8 19:30:45 来源: Sina 发布人:

使用sql语句备份和恢复SQLserver数据库

 (2010-06-29 21:01:19)

转载

标签: 

sql语句

 

备份

 

恢复

 

sqlserver

 

数据库

 
分类: 电脑知识

使用sql语句备份和恢复SQLserver数据库,以及需要注意的事项

 

 

备份:backup database dbname to disk=';d:\dbn.aa';
恢复:restore database dbname from disk=';d:\dbn.aa';

恢复必须在单用户模式下操作才能够成功,我们需要断开其他用户的连接,并且切换到其他数据库,才能够成功

我们可以通过写存储过程来断开其他用户的连接

我以前曾经这样实验过
1 找到所有与这个数据库的连接,全部KILL (用VB调用一个存储过程来实现)
2 在用VB调用另外一个写好的存储过程来进行恢复,注意两个存储过程都不要建立在目标数据库中。

这里我把杀掉连接的存储过程提供给你,恢复数据库的存储过程很简单你自己来吧。



CREATE PROCEDURE dbo.killrubbishprocess AS
DECLARE @spidnum int
DECLARE rubbish_CURSOR CURSOR FOR
select spid
from master.dbo.sysprocesses
where spid > 10 and spid <= 32767 and status='sleeping' and loginame='sa'
order by spid

OPEN rubbish_CURSOR

FETCH NEXT FROM rubbish_CURSOR
INTO @spidnum
select s_kill = "kill " + cast(@spidnum as char(5))
WHILE @@FETCH_STATUS=0
BEGIN
EXEC (s_kill)
FETCH NEXT FROM rubbish_CURSOR
INTO @spidnum

END


CLOSE rubbish_CURSOR
DEALLOCATE rubbish_CURSOR
GO  

然后调用恢复语句既可以实现,但是必须保证,杀死其他用户连接时,必须在恢复的时间段里面不能再有其他用户连接到数据库

 

sql语句备份和还原数据库

 

 

这里仅仅用到了一种方式而已,把数据库文件备份到磁盘然后在恢复.

eg:
   1:
   4: BACKUP DATABASE mydb
   5: TO DISK ='C:\DBBACK\mydb.BAK'
   6: --这里指定需要备份数据库的路径和文件名,注意:路径的文件夹是必须已经创建的.文件名可以使用日期来标示
   7:
   8:
11: USE master
12: RESTORE DATABASE mydb
13: FROM DISK='C:\DBBACK\mydb.BAK'
14: WITH REPLACE

注意:很多时候不能直接还原,因为数据不是独占打开.可能用到下面的过程

   1: --Kill掉访问某个数据库的连接
   2: CREATE PROC KillSpid(@DBName varchar)
   3: AS
   4: BEGIN
   5:     DECLARE @SQL varchar
   6:     DECLARE @SPID int
   7:     SET @SQL='DECLARE CurrentID CURSOR FOR
   8:     SELECT spid FROM sysprocesses WHERE dbid=db_id('''+@DBName+''') '
   9:     FETCH NEXT FROM CurrentID INTO @SPID
10:     WHILE @@FETCH_STATUS <>-1
11:     BEGIN
12:         exec('KILL '+@SPID)
13:         FETCH NEXT FROM CurrentID INTO @SPID
14:     END
15:     CLOSE CurrentID
16:     DEALLOCATE CurrentID
17: END

当kill掉用户后最好使用单用户操作数据库

SP_DBOPTION @DBName,'single user','true'


这里仅仅用到了一种方式而已,把数据库文件备份到磁盘然后在恢复.

eg:
   1:
   4: BACKUP DATABASE mydb
   5: TO DISK ='C:\DBBACK\mydb.BAK'
   6: --这里指定需要备份数据库的路径和文件名,注意:路径的文件夹是必须已经创建的.文件名可以使用日期来标示
   7:
   8:
11: USE master
12: RESTORE DATABASE mydb
13: FROM DISK='C:\DBBACK\mydb.BAK'
14: WITH REPLACE

注意:很多时候不能直接还原,因为数据不是独占打开.可能用到下面的过程

   1: --Kill掉访问某个数据库的连接
   2: CREATE PROC KillSpid(@DBName varchar)
   3: AS
   4: BEGIN
   5:     DECLARE @SQL varchar
   6:     DECLARE @SPID int
   7:     SET @SQL='DECLARE CurrentID CURSOR FOR
   8:     SELECT spid FROM sysprocesses WHERE dbid=db_id('''+@DBName+''') '
   9:     FETCH NEXT FROM CurrentID INTO @SPID
10:     WHILE @@FETCH_STATUS <>-1
11:     BEGIN
12:         exec('KILL '+@SPID)
13:         FETCH NEXT FROM CurrentID INTO @SPID
14:     END
15:     CLOSE CurrentID
16:     DEALLOCATE CurrentID
17: END

当kill掉用户后最好使用单用户操作数据库

SP_DBOPTION @DBName,'single user','true'

这里仅仅用到了一种方式而已,把数据库文件备份到磁盘然后在恢复.

eg:
   1:
   4: BACKUP DATABASE mydb
   5: TO DISK ='C:\DBBACK\mydb.BAK'
   6: --这里指定需要备份数据库的路径和文件名,注意:路径的文件夹是必须已经创建的.文件名可以使用日期来标示
   7:
   8:
11: USE master
12: RESTORE DATABASE mydb
13: FROM DISK='C:\DBBACK\mydb.BAK'
14: WITH REPLACE

注意:很多时候不能直接还原,因为数据不是独占打开.可能用到下面的过程

   1: --Kill掉访问某个数据库的连接
   2: CREATE PROC KillSpid(@DBName varchar)
   3: AS
   4: BEGIN
   5:     DECLARE @SQL varchar
   6:     DECLARE @SPID int
   7:     SET @SQL='DECLARE CurrentID CURSOR FOR
   8:     SELECT spid FROM sysprocesses WHERE dbid=db_id('''+@DBName+''') '
   9:     FETCH NEXT FROM CurrentID INTO @SPID
10:     WHILE @@FETCH_STATUS <>-1
11:     BEGIN
12:         exec('KILL '+@SPID)
13:         FETCH NEXT FROM CurrentID INTO @SPID
14:     END
15:     CLOSE CurrentID
16:     DEALLOCATE CurrentID
17: END

当kill掉用户后最好使用单用户操作数据库

SP_DBOPTION @DBName,'single user','true'

总结:

备份:通过上面语法,现在想同时备份多个数据库,代码如下:

declare @path nvarchar(100),@dbName nvarchar(100)

set @dbName = 'Brc_BPM_Mng'
set @path='D:\BackupDataBase\' + @dbName + convert(nvarchar, getdate(),23) + '.bak'
backup database @dbName to disk = @path

set @dbName = 'Brc_BPM_Oc'
set @path='D:\BackupDataBase\' + @dbName + convert(nvarchar, getdate(),23) + '.bak'
backup database @dbName to disk = @path

set @dbName = 'Brc_K2Sln'
set @path='D:\BackupDataBase\' + @dbName + convert(nvarchar, getdate(),23) + '.bak'
backup database @dbName to disk = @path

还原:原理和上面的备份差不多,自己可修改部分代码来完成

 

SQL语句备份一个数据库表

2010-04-30 15:09

 

数据库中已存表[09Course]

将它的数据备份一下,存储到另一个表中:

SELECT * INTO [09CourseBackup] FROM [09Course]

执行完毕后会在数据库中新建一个表 [09CourseBackup],并将数据加入进去

 

2010-04-24 08:42

 

--完整备份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_20070908.bak'

--差异备份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Df_20070908.bak'
With Differential

--日志备份默认截断日志
Backup Log NorthwindCS
To disk='G:\Backup\NorthwindCS_Log_20070908.bak'

--日志备份不截断日志
Backup Log NorthwindCS
To disk='G:\Backup\NorthwindCS_Log_20070908.bak'
With No_Truncate

--截断日志不保留
Backup Log NorthwindCS
With No_Log

--或者
Backup Log NorthwindCS
With Truncate_Only
--截断之后日志文件不会变小
--有必要可以进行收缩

--文件备份
Exec Sp_Helpdb NorthwindCS --查看数据文件
Backup Database NorthwindCS
File='NorthwindCS' --数据文件逻辑名
To disk='G:\Backup\NorthwindCS_File_20070908.bak'

--文件组备份
Exec Sp_Helpdb NorthwindCS --查看数据文件
Backup Database NorthwindCS
FileGroup='Primary' --数据文件逻辑名
To disk='G:\Backup\NorthwindCS_FileGroup_20070908.bak'
With init

--分割备份到多个目标
--恢复时候不允许丢失任何个目标
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_1.bak'
,disk='G:\Backup\NorthwindCS_Full_2.bak'

--镜像备份
--每个目标都是相同
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Mirror_1.bak'
Mirror
To disk='G:\Backup\NorthwindCS_Mirror_2.bak'
With Format --第次做镜像备份时候格式化目标

--镜像备份到本地和远程
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Mirror_1.bak'
Mirror
To disk='\\192.168.1.200\Backup\NorthwindCS_Mirror_2.bak'
With Format

--每天生成个备份文件
Declare @Path Nvarchar(2000)
Set @Path ='G:\Backup\NorthwindCS_Full_'
+Convert(Nvarchar,Getdate,112)+'.bak'

Backup Database NorthwindCS
To http://www.xxxxx.net/Article/html/3/7/2010/mailtdisk=@Path


--从NoRecovery或者
--Standby模式恢复数据库为可用
Restore Database NorthwindCS_Bak
With Recovery

--查看目标备份中备份集
Restore HeaderOnly
From Disk ='G:\Backup\NorthwindCS_Full_20070908.bak'

--查看目标备份第个备份集信息
Restore FileListOnly
From Disk ='G:\Backup\NorthwindCS_Full_20070908_2.bak'
With File=1

--查看目标备份卷标
Restore LabelOnly
From Disk ='G:\Backup\NorthwindCS_Full_20070908_2.bak'

--备份设置密码保护备份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_20070908.bak'
With Password = '123',init

Restore Database NorthwindCS
From disk='G:\Backup\NorthwindCS_Full_20070908.bak'


阅读次数: 2242

下一篇: win10怎么关闭驱动程序数字签名验证
上一篇: Sql Server数据库备份与还原语句

尚无评论!

返回上一页面