34,593
社区成员
发帖
与我相关
我的任务
分享
alter Procedure [dbo].[P_SHRINK_DB]
as
EXECUTE AS USER='sa'
declare @dbname varchar(50)
Select @dbname=db_name()
if @dbname=''
return
declare @sql varchar(500)
declare @logName varchar(20)
set @sql=''
set @sql='BACKUP LOG '+@dbname+' WITH NO_LOG'
exec(@sql)
set @sql=''
select top 1 @logName=[name] from sysFiles where charIndex('.ldf',fileName)>0
set @sql='DBCC SHRINKFILE(N'''+@logName+''',0,TRUNCATEONLY)'
exec(@sql)
GRANT IMPERSONATE ON USER:: dbo TO USER_NAME_A
GO
create procedure test
as
begin
EXECUTE AS USER='dbo'
BACKUP LOG '+@dbname+' WITH NO_LOG 和 DBCC SHRINKFILE(N'''+@logName+''',0,TRUNCATEONLY)
......
end
GO
GRANT EXECUTE ON TEST TO USER_NAME_A
GO
create procedure test
as
begin
EXECUTE AS USER='SA'
BACKUP LOG '+@dbname+' WITH NO_LOG 和 DBCC SHRINKFILE(N'''+@logName+''',0,TRUNCATEONLY)
......
end
GRANT EXEC ON TEST TO 普通用户名
GRANT IMPERSONATE ON USER:: dbo TO USER_NAME_A
GRANT IMPERSONATE ON USER:: dbo TO USER_NAME_A
GO
create procedure test
as
begin
EXECUTE AS USER='dbo'
BACKUP DATABASE [mytest] TO DISK = N'D:\11.bak' WITH NOFORMAT, NOINIT, NAME = N'mytest-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
end
GO
GRANT EXECUTE ON TEST TO USER_NAME_A
GO
exec test
/*
已处理百分之 10。
已处理百分之 20。
已处理百分之 30。
已处理百分之 40。
已处理百分之 50。
已处理百分之 60。
已处理百分之 70。
已处理百分之 80。
已处理百分之 90。
已为数据库 'mytest',文件 'mytest' (位于文件 1 上)处理了 50720 页。
已为数据库 'mytest',文件 'sec_data' (位于文件 1 上)处理了 8 页。
已处理百分之 100。
已为数据库 'mytest',文件 'mytest_log' (位于文件 1 上)处理了 4 页。
BACKUP DATABASE 成功处理了 50732 页,花费 8.191 秒(48.387 MB/秒)。
*/