---------------------------------------------------------------------------------
-- 분단위 트랜잭션 백업 로그
---------------------------------------------------------------------------------
-- 작성자 : 차주언
-- 수정자 : 추숙
-- 마지막 수정 내용
-- 1. 트랜잭션 파일 시간을 조정 가능하도록 변경
---------------------------------------------------------------------------------
USE master
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ap_TranMiLogBackup')
BEGIN
DROP PROCEDURE ap_TranMiLogBackup
END
GO
CREATE PROC [dbo].[ap_TranMiLogBackup]
@DBNAME varchar(20),
@physical_path varchar(100) = 'c:\Backup\TBackup\',
@FullBackupHour TINYINT = 6 , -- full backup 시간
@DelLogHour INT = 48 -- (시간) 삭제할 이전의 DEVICE 생성일 비교
AS
SET NOCOUNT ON
-- 변수 선언
DECLARE
@query varchar(1000),
@cur_hour tinyint,
@cur_min tinyint,
@del_hour tinyint,
@del_min tinyint,
@cur_device varchar(50),
@del_device varchar(50),
@description varchar(48),
@physical_name varchar(64)DECLARE @aCnt INT,
@aID INT,
@aDeviceName VARCHAR(1000)DECLARE @aTemp TABLE (
mID INT IDENTITY(1,1),
mDate DATETIME,
mDeviceName VARCHAR(1000)
)
SELECT @aCnt = 0, @aID = 0, @aDeviceName = ''SET @cur_hour = datepart(hour,getdate())
SET @cur_min = datepart(mi,getdate())
-- Full Backup 시간은 제외함.
IF ( @cur_hour = @FullBackupHour )
Return
-- 삭제할 로그 정보
INSERT INTO @aTemp( mDate, mDeviceName )
SELECT
mDate,
name
FROM (
SELECT
convert( datetime, mYY + '-' + mMM + '-'+ mDD + ' ' + mHH + ':' + mMT + ':00' ) mDate,
name
FROM (
select
SUBSTRING(RIGHT(name, 13), 1, 4) mYY, -- 년
SUBSTRING(RIGHT(name, 13), 5, 2) mMM, -- 월
SUBSTRING(RIGHT(name, 13), 7, 2) mDD, -- 월SUBSTRING(RIGHT(name, 4),1,2) mHH, -- 시
SUBSTRING(RIGHT(name, 4),3,2) mMT, -- 분
name
from master.dbo.sysdevices
where name like '%tlog%'
and ISNUMERIC(right(name, 4)) = 1 ) T1 ) T3
WHERE mDate <= DATEADD(HH, -@DelLogHour, GETDATE())SELECT @aCnt = @@ROWCOUNT, @aID = 1
--현재 Device Setup
SET @description = 'Log Minute Backup , ' + @DBNAME + ' ' + CONVERT(CHAR(16),GETDATE(),20)
SET @cur_device = @DBNAME + '_tlog_' + CONVERT(char(8),getdate(),112) + '_'
IF @cur_hour < 10
SET @cur_device = @cur_device + '0' + convert(char(1),@cur_hour)
ELSE
SET @cur_device = @cur_device + convert(char(2),@cur_hour)IF @cur_min < 10
SET @cur_device = @cur_device + '0' + convert(char(1),@cur_min)
ELSE
SET @cur_device = @cur_device + convert(char(2),@cur_min)SET @physical_name = @physical_path + @cur_device + '.tbak'
--이전의 device를 삭제한다.
IF ( @aCnt >= 1 )
BEGIN
WHILE ( @aCnt >= @aID )
BEGIN
SELECT
@aDeviceName = mDeviceName
FROM @aTemp
WHERE mID = @aIDEXEC sp_dropdevice @aDeviceName,'delfile'
SET @aID = @aID + 1
END
END--dump device를 설정한다.
IF ( select count(*) from master.dbo.sysdevices where name = rtrim(@cur_device) ) = 0
EXEC sp_addumpdevice 'disk' , @cur_device , @physical_name--transaction log 를 백업받는다.
SET @query = 'BACKUP LOG ' + @DBNAME + ' TO ' + @cur_device
EXECUTE(@query)
GO-- TEST QUERY
EXEC [ap_TranMiLogBackup] 'AdventureWorks', 'E:\DB_TEST\Backup\', DEFAULT, DEFAULT -- 48시간 이전
GOEXEC [ap_TranMiLogBackup] 'AdventureWorks', 'E:\DB_TEST\Backup\', DEFAULT, 6 -- 6시간 이전 트랜잭션 파일 삭제
GO
'SQL Server 2005' 카테고리의 다른 글
004_01.sp_sqlperf SQL SERVER 문서화되지 않은 상태 모니터링 (0) | 2008.10.13 |
---|---|
admin.sp_checkDBsize DB SIZE check (0) | 2008.10.13 |
admin.002.ap_TranLogBackup (0) | 2008.10.07 |
백업 (0) | 2008.10.06 |
SQL Sample Database 등록하기 (0) | 2008.10.01 |