0

我正在尝试从 文件.bak中恢复数据库。trn我无法通过 SQL Server Management Studio查看.bak和文件。.trn但是当我进入文件夹时,我看到了它们。我使用了 T-sql 但它说访问被拒绝。我是服务器上的系统管理员。有人可以帮我吗。脚本:

从磁盘恢复数据库 [XYZ] = N'R:\MSSQL10_50.MSSQLSERVER\MSSQL\Restore\XYZ_Full.bak' WITH FILE = 1

错误:消息 3201,级别 16,状态 2,行 3 无法打开备份设备 'R:...“操作系统错误 5(访问被拒绝。)。

4

1 回答 1

1

确保您在 SSMS 中的帐户(windows 或 sql server)具有备份/恢复、sysadmin、db_backoperator 等权限。

备份和恢复过程在 SQL Server(引擎)服务帐户下运行,因为您可能在笔记本电脑上运行 SSMS,但使用服务器上的文件。

您以谁的身份登录并不重要,它是需要访问目录和文件的服务帐户。

服务帐户是域帐户还是本地服务?我使用域帐户,以便可以处理 UNC 路径上的文件。

此外,在浏览对话框中执行了两个系统存储过程:master.dbo.xp_dirtree、master.dbo.xp_fileexist

如果他们从查询窗口返回空结果,这是 SQL Server 服务帐户的权限问题。

Profiler Trace Browse 操作(Adventure Works)。

declare @Path nvarchar(255)
declare @Name nvarchar(255)    

select @Path = N'C:\mssql\save me\backup\AdventureWorks2012'
select @Name = N'AdventureWorks2012_backup_2012_11_30_160723_2147507.bak'

create table #filetmpfin (Name nvarchar(255) NOT NULL, IsFile bit NULL) 

if(@Name is null) 
begin 
  create table #filetmp (Name nvarchar(255) NOT NULL, depth int NOT NULL, IsFile bit NULL ) 
  insert #filetmp EXECUTE master.dbo.xp_dirtree @Path, 1, 1 
  insert #filetmpfin select Name, IsFile from #filetmp f 
  drop table #filetmp 
end 

if(NOT @Name is null) 
begin 
  declare @FullName nvarchar(300) 
  if(@Path is null) 
    select @FullName = @Name 
  else
    select @FullName = @Path    + '\' + @Name 

  create table #filetmp2 ( Exist bit NOT NULL, IsDir bit NOT NULL, DirExist bit NULL ) 
  insert #filetmp2 EXECUTE master.dbo.xp_fileexist @FullName 
  insert #filetmpfin select @Name, 1-IsDir from #filetmp2 where Exist = 1 or IsDir = 1  
  drop table #filetmp2 
end

SELECT
 Name AS [Name],
 IsFile AS [IsFile]
FROM 
  #filetmpfin
ORDER BY
  [IsFile] ASC,[Name] ASC

drop table #filetmpfin
于 2013-09-03T18:30:37.610 回答