求数据库备份和还原的简单脚本

[复制链接]
查看11 | 回复6 | 2006-3-20 16:25:54 | 显示全部楼层 |阅读模式
sql server 全库备份加日志
回复

使用道具 举报

千问 | 2006-3-20 16:25:54 | 显示全部楼层
CREATE PROCEDURE Sp_ShrinkLog

(@LogFvarchar(200), @NSize INT)
AS
--BY ELI L.
-- DATE 08/2002
-- DESC: attempt to shrink the log file to a specific size
--gets logical file name and attempt size
SET NOCOUNT ON
DECLARE @MaxMin INT, @LogicalFileName sysname,@origs int
DECLARE @Cnt INT,@StartTime DATETIME, @Truncl varchar(255)
SELECT @LogicalFileName = @LogF
SELECT @MaxMin = 2
SELECT @origs = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size OF ' + db_name() + ' LOG IS ' +
CONVERT(varchar(30),@origs) + ' 8K pages or ' +
CONVERT(varchar(30),(@origs*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DumpTrn(DumCol varchar (8000) NOT null)
SELECT @StartTime = GETDATE(),

@Truncl = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NSize)
EXEC (@Truncl)
WHILE @MaxMin > DATEDIFF (mi, @StartTime, GETDATE())
AND @origs =(SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@origs * 8 /1024) > @NSize


BEGIN
set @Cnt = 0
WHILE ((@Cnt < @origs / 16) AND (@Cnt < 50000))
BEGIN -- UPDATE
INSERT DumpTrn VALUES ('Fill Log') -- Because it IS a varchar field it inserts 8000 bytes.
DELETE DumpTrn
set@Cnt = @Cnt + 1
END-- UPDATE
EXEC (@Truncl) -- See IF a trunc OF the log shrinks it.
END-- OUTER loop
SELECT 'Final Size OF ' + db_name() + ' LOG IS ' +
CONVERT(varchar(30),size) + ' 8K pages OR ' +
CONVERT(varchar(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DumpTrn
PRINT '*** Perform a FULL DATABASE BACKUP ***'
/*
Sp_ShrinkLog 'AMOISRM_Log',1
*/
SET NOCOUNT OFF

GO

用法示例:Sp_ShrinkLog 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\test_P.LDF',10
回复

使用道具 举报

千问 | 2006-3-20 16:25:54 | 显示全部楼层
示例用法写错了,应该是数据库属性里面的Transaction Log File Name
Sp_ShrinkLog 'Test_Log',10
回复

使用道具 举报

千问 | 2006-3-20 16:25:54 | 显示全部楼层
好像有点复杂,这样我觉得更好点:
B. 备份数据库和日志
本例创建了一个数据库和日志的完整备份。将数据库备份到称为 MyNwind_2 的逻辑备份设备上,然后将日志备份到称为 MyNwindLog1 的逻辑备份设备上。
说明创建逻辑备份设备需要一次完成。

-- Create the backup device for the full MyNwind backup.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_2',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat'
--Create the log backup device.
USE master
EXEC sp_addumpdevice 'disk', 'MyNwindLog1',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwindLog1.dat'
-- Back up the full MyNwind database.
BACKUP DATABASE MyNwind TO MyNwind_2
-- Update activity has occurred since the full database backup.
-- Back up the log of the MyNwind database.
BACKUP LOG MyNwind
TO MyNwindLog1
回复

使用道具 举报

千问 | 2006-3-20 16:25:54 | 显示全部楼层
我想每天一次数据库的全备份,每小时一次日志备份
回复

使用道具 举报

千问 | 2006-3-20 16:25:54 | 显示全部楼层
谢谢,先考下来,回家再看,顺便帮顶一下阿
回复

使用道具 举报

千问 | 2006-3-20 16:25:54 | 显示全部楼层
哦弄错了,我给的是清除Log的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行