ALTER proc [dbo].[sp_shrinkDBAndDBLog]
@databaseName nvarchar(100)
as
begin
declare @logName nvarchar(100),
@dynamicSQL nvarchar(500)
set @dynamicSQL='ALTER DATABASE '+@databaseName+' SET RECOVERY SIMPLE WITH NO_WAIT'
exec(@dynamicSQL)
--select name from HLJEDI_SYS.sys.sysfiles where groupid=0;
set @dynamicSQL=N'select @logName= name from '+@databaseName+'.sys.database_files where type_desc=''LOG'''
exec sp_executesql @dynamicSQL,N'@logName nvarchar(100) output',@logName output
--select * from sys.sysfiles where groupid=0
set @dynamicSQL='DBCC SHRINKFILE (N'''+@logName+''',11,TRUNCATEONLY)'
exec(@dynamicSQL)
--DBCC SHRINKFILE (N'CUC_OA_LOG' , 11, TRUNCATEONLY)
set @dynamicSQL='ALTER DATABASE '+@databaseName+' SET RECOVERY FULL WITH NO_WAIT'
exec(@dynamicSQL)
--ALTER DATABASE OA SET RECOVERY FULL --(Restore to Full Schema)
end
但当我执行时:
exec sp_shrinkDBAndDBLog 'DBName'
它有错误: sys.database_files找不到数据库'master'文件'eca2_log'。该文件已被删除且不存在。
问题是什么?谢谢你,如果你告诉我并展示细节和princeple。
答案 0 :(得分:1)
在执行DBCC SHRINKFILE命令之前,您似乎可能缺少USE {database}命令,因此DBCC没有在正确的数据库上执行。