复制一个列子: --创建测试数据库 CREATE DATABASE db ON PRIMARY( NAME='db_data', FILENAME= 'c:\db_data.mdf'), FILEGROUP db_fg1( NAME = 'db_fg1_data', FILENAME = 'c:\db_fg1_data.ndf'), FILEGROUP db_fg2( NAME = 'db_fg2_data', FILENAME = 'c:\db_fg2_data.ndf') LOG ON( NAME='db_log', FILENAME ='c:\db.ldf') GO--备份数据库 BACKUP DATABASE db TO DISK='c:\db.bak' WITH FORMAT GO--在文件组 db_fg1 上创建表 ta CREATE TABLE db.dbo.ta(id int) ON db_fg1 --在文件组 db_fg2 上创建表 tb CREATE TABLE db.dbo.tb(id int) ON db_fg2 GO--备份事务日志 BACKUP LOG db TO DISK ='c:\db_log.bak' WITH FORMAT GO--如果因为某些要求只还原ta表,则使用RESTORE DATABASE语句配合WITH PARTIAL和NORECOVERY选项以另一个名称还原数据库和文件组db_fg1,另外,还将主文件和文件组primary、事务日志和已还原的文件组中的所有文件移到新位置。日志即得到恢复 RESTORE DATABASE db_a FILEGROUP='db_fg1' FROM DISK='c:\db.bak' WITH NORECOVERY,PARTIAL, MOVE 'db_data' TO 'c:\db_data_a.mdf', MOVE 'db_log' TO 'c:\db_log_a.ldf', MOVE 'db_fg1_data' TO 'c:\db_fg1_data_a.ndf'--恢复日志 RESTORE LOG db_a FROM DISK='c:\db_log.bak' WITH RECOVERY --显示恢复结果 SELECT COUNT(*) FROM db_a.dbo.ta /*--结果 ----------- 0(所影响的行数为 1 行) --*/ GO--因为只恢复了文件组db_fg1,位于文件组db_fg2上的表tb无法被访问 SELECT COUNT(*) FROM db_a.dbo.tb /*--将收到错误信息 警告: 查询处理器无法生成计划,因为表 'db_a.dbo.tb' 已标记为 OFFLINE。 --*/ GO--删除测试 DROP DATABASE db,db_a
--将数据库“MyDb”备份到“C:\AAA.BAK' BACKUP DATABASE MyDB to DISK = 'C:\AAA.BAK'--恢复数据库”MyDb“ RESTORE DATABASE MyDB FROM DISK = 'C:\AAA.BAK' --对于提示不能还原的,先把访问此数据库的进程杀掉 --用代码先删除连接此数据库的进程declare @d varchar(8000) set @d='' select @d=@d+' kill '+cast(spid as varchar)+char(13) from master..sysprocesses where dbid=db_id('库名') exec(@d)
使用这个 "use master Restore database telephone from disk='"&bak_file&"\"&databasename&"'" 报错如下: 错误类型: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server]已将数据库上下文改为 'master'。
在查询分析器中 sa权限下 这个语句可以执行 use master Restore database telephone from disk='e:\1' 成功恢复! 但在ASP中连接数据库也是使用SA权限!用楼上的语句不能执行! 报楼上的错! 急!急!急!
--用代码先删除连接此数据库的进程declare @d varchar(8000) set @d='' select @d=@d+' kill '+cast(spid as varchar)+char(13) from master..sysprocesses where dbid=db_id('库名') exec(@d)==============在还原前,用KILL杀掉所有这个库正在使用的进程, 这样就可以顺利还原了
--创建测试数据库
CREATE DATABASE db
ON PRIMARY(
NAME='db_data',
FILENAME= 'c:\db_data.mdf'),
FILEGROUP db_fg1(
NAME = 'db_fg1_data',
FILENAME = 'c:\db_fg1_data.ndf'),
FILEGROUP db_fg2(
NAME = 'db_fg2_data',
FILENAME = 'c:\db_fg2_data.ndf')
LOG ON(
NAME='db_log',
FILENAME ='c:\db.ldf')
GO--备份数据库
BACKUP DATABASE db TO DISK='c:\db.bak' WITH FORMAT
GO--在文件组 db_fg1 上创建表 ta
CREATE TABLE db.dbo.ta(id int) ON db_fg1
--在文件组 db_fg2 上创建表 tb
CREATE TABLE db.dbo.tb(id int) ON db_fg2
GO--备份事务日志
BACKUP LOG db TO DISK ='c:\db_log.bak' WITH FORMAT
GO--如果因为某些要求只还原ta表,则使用RESTORE DATABASE语句配合WITH PARTIAL和NORECOVERY选项以另一个名称还原数据库和文件组db_fg1,另外,还将主文件和文件组primary、事务日志和已还原的文件组中的所有文件移到新位置。日志即得到恢复
RESTORE DATABASE db_a
FILEGROUP='db_fg1'
FROM DISK='c:\db.bak'
WITH NORECOVERY,PARTIAL,
MOVE 'db_data' TO 'c:\db_data_a.mdf',
MOVE 'db_log' TO 'c:\db_log_a.ldf',
MOVE 'db_fg1_data' TO 'c:\db_fg1_data_a.ndf'--恢复日志
RESTORE LOG db_a FROM DISK='c:\db_log.bak' WITH RECOVERY
--显示恢复结果
SELECT COUNT(*) FROM db_a.dbo.ta
/*--结果
-----------
0(所影响的行数为 1 行)
--*/
GO--因为只恢复了文件组db_fg1,位于文件组db_fg2上的表tb无法被访问
SELECT COUNT(*) FROM db_a.dbo.tb
/*--将收到错误信息
警告: 查询处理器无法生成计划,因为表 'db_a.dbo.tb' 已标记为 OFFLINE。
--*/
GO--删除测试
DROP DATABASE db,db_a
要怎么解决这个问题!??
BACKUP DATABASE MyDB to DISK = 'C:\AAA.BAK'--恢复数据库”MyDb“
RESTORE DATABASE MyDB FROM DISK = 'C:\AAA.BAK'
--对于提示不能还原的,先把访问此数据库的进程杀掉
--用代码先删除连接此数据库的进程declare @d varchar(8000)
set @d=''
select @d=@d+' kill '+cast(spid as varchar)+char(13)
from master..sysprocesses where dbid=db_id('库名')
exec(@d)
错误类型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]已将数据库上下文改为 'master'。
成功恢复!
但在ASP中连接数据库也是使用SA权限!用楼上的语句不能执行! 报楼上的错!
急!急!急!
set @d=''
select @d=@d+' kill '+cast(spid as varchar)+char(13)
from master..sysprocesses where dbid=db_id('库名')
exec(@d)==============在还原前,用KILL杀掉所有这个库正在使用的进程,
这样就可以顺利还原了