블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

최근에 올라온 글


SQL Server 가 100 대 넘어가면 유지관리계획으로 관리하기 힘들다.
아래와 같은 스크립트가 도움이 될 것이다. 해당 스크립트는 변수만 셋팅하면 나머지 과정은 자동으로 처리한다.
시간이 지난 파일은 자동으로 지워준다.

오늘 올라온 질문중 백업 파일이 계속 커진다는 질문이 있었다.
이런 사람은 더 열심히 공부해야 한다.
개념을 이해하기 위해 http://www.sqlbackuprestore.com/introduction.htm 사이트를 참고해 열심히 공부한다.



 



 



USE MASTER
GO

IF OBJECT_ID('AP_DB_BACKUP') IS NULL
 EXEC ('CREATE PROC DBO.AP_DB_BACKUP AS SELECT 1 ')
GO

ALTER PROC [DBO].AP_DB_BACKUP
  @DBNAME VARCHAR(20) = 'MASTER' -- BACKUP TARGET DATABASE
, @PATH VARCHAR(100) = 'C:\BACKUP\' -- OS BACKUP PATH
, @BACKUP_TYPE VARCHAR(1) = 'F' -- F FULLBACKUP L LOGBACKUP D DIFFERENTIAL
, @BEFORE_TARGET_TIME_HH INT = 2 -- DELETE FILE BEFORE TIME HH
, @ENABLP_XP_CMDSHELL_FORCE INT = 1
, @CREATE_TARGET_FOLDER_FORCE INT = 1
AS
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

-- SCRIPT BY MINSOUK KIM
-- MSSQL MVP, 2006~2009
-- VERSION 1.20111018
-- CAFE, WWW.SQLTAG.ORG, CAFE.NAVER.COM/SQLMVP
-- BLOG, SQLSQL.TISTORY.COM
-- TEL, 01099670955
-- MAIL, MINSOUK@HOTMAIL.COM

IF @BACKUP_TYPE = 'L'
WAITFOR DELAY '00:00:10.000'
IF @BACKUP_TYPE = 'D'
WAITFOR DELAY '00:00:05.000'

DECLARE @CAL_BEFORE_TARGET_TIME DATETIME
   , @DEL_TARGET_DEV_NAME VARCHAR(500)
   , @CUR_TARGET_DEV_NAME VARCHAR(500)
   , @DATE VARCHAR(500)
   , @TIME VARCHAR(500)
   , @PHYSICAL_NAME VARCHAR(500)
   , @TODAY VARCHAR(8)
   , @INSTANCE_NAME VARCHAR(100)
   , @XP_CMDSHELL_STATUS INT
   , @XP_CMDSHELL_CHANGE_STATUS INT
   , @CMD_STRING VARCHAR(8000)
  
SELECT @INSTANCE_NAME = REPLACE(@@SERVERNAME , '\','_')
SELECT @XP_CMDSHELL_STATUS = CAST(VALUE_IN_USE AS INT) FROM SYS.CONFIGURATIONS WHERE NAME ='XP_CMDSHELL'

IF @XP_CMDSHELL_STATUS = 0 AND @ENABLP_XP_CMDSHELL_FORCE = 0 BEGIN
 SELECT 'CHANGE @ENABLP_XP_CMDSHELL_FORCE PARAMETER TO 1'
 RETURN 0
END

IF @ENABLP_XP_CMDSHELL_FORCE = 1 AND @XP_CMDSHELL_STATUS = 0 BEGIN
 EXEC SP_CONFIGURE 'XP_CMDSHELL', 1
 RECONFIGURE WITH OVERRIDE
 SET @XP_CMDSHELL_CHANGE_STATUS = 1
END

IF @CREATE_TARGET_FOLDER_FORCE = 1 BEGIN
 SET @CMD_STRING ='MKDIR '+UPPER(@PATH+@INSTANCE_NAME)
 EXEC MASTER.DBO.XP_CMDSHELL @CMD_STRING, NO_OUTPUT
END


SELECT @DATE = CONVERT(VARCHAR(100), GETDATE(), 112)
  , @TIME = REPLACE(CONVERT(VARCHAR(100), GETDATE(), 108),':','')

SELECT @CAL_BEFORE_TARGET_TIME = DATEADD(HH,-1*ABS(@BEFORE_TARGET_TIME_HH),GETDATE())

DECLARE @LOG_BACKUP_DELETE_TARGET_ISDATE_TRUE TABLE
(IDX INT IDENTITY(1,1)
,NAME VARCHAR(500)
)

INSERT INTO @LOG_BACKUP_DELETE_TARGET_ISDATE_TRUE (NAME)
SELECT NAME
  FROM (SELECT TOP 100000000000 NAME -- (TOP N NO_MERGE, NO_PUSH_PRED HINT, DO NOT DELETE TOP STATEMENT!)
    FROM MASTER.DBO.SYSDEVICES
   WHERE NAME LIKE 'SQL'+@BACKUP_TYPE+'B_' +REPLACE(@@SERVERNAME,'\','_') +'_'+@DBNAME+'%'
     AND ISDATE(LEFT(RIGHT(NAME, 15),8)) = 1 ) A 
 WHERE CAST(REPLACE(STUFF(STUFF(RIGHT(NAME, 15),12,0,':'),15,0,':'),'_',' ') AS DATETIME) < @CAL_BEFORE_TARGET_TIME
 ORDER BY 1

DECLARE @MAX_IDX INT
SELECT TOP 1 @MAX_IDX = IDX
  FROM @LOG_BACKUP_DELETE_TARGET_ISDATE_TRUE
 ORDER BY IDX DESC

WHILE (@MAX_IDX > 0) BEGIN
 SELECT @DEL_TARGET_DEV_NAME = NAME
   FROM @LOG_BACKUP_DELETE_TARGET_ISDATE_TRUE
  WHERE IDX = @MAX_IDX
 IF @@ROWCOUNT = 0 BREAK;
 BEGIN TRY
  EXEC SP_DROPDEVICE @DEL_TARGET_DEV_NAME,'DELFILE' 
 END TRY BEGIN CATCH
  SELECT 'ERROR !'
 END CATCH
 SET @MAX_IDX = @MAX_IDX - 1
END

SELECT @CUR_TARGET_DEV_NAME = UPPER(
  'SQL'+@BACKUP_TYPE+'B_'
  + REPLACE(@@SERVERNAME,'\','_') + '_'
  + @DBNAME + '_'
  + @DATE+'_'
  + @TIME
  )
 
  , @PHYSICAL_NAME = UPPER(
    RTRIM(@PATH+@INSTANCE_NAME)
  + '\'
  + REPLACE(@@SERVERNAME,'\','_') + '_'
  + 'SQL'+@BACKUP_TYPE + 'B_'
  + LEFT(@DBNAME+ '_' + REPLICATE (@BACKUP_TYPE, 20),20) + '_'
  + @DATE + '_'
  + @TIME
  + '.'
  + @BACKUP_TYPE
  + 'BAK'
  )
 
SELECT @CUR_TARGET_DEV_NAME DEV_NAME
  , @PHYSICAL_NAME PATH_NAME

EXEC SP_ADDUMPDEVICE 'DISK' , @CUR_TARGET_DEV_NAME , @PHYSICAL_NAME

IF @BACKUP_TYPE = 'F'
 BACKUP DATABASE @DBNAME TO @CUR_TARGET_DEV_NAME WITH INIT
  , NAME = @CUR_TARGET_DEV_NAME
  , NOSKIP
  , NOFORMAT
  , PASSWORD = 'P@SSW0RD'
IF @BACKUP_TYPE = 'L'
 BACKUP LOG @DBNAME TO @CUR_TARGET_DEV_NAME
IF @BACKUP_TYPE = 'D'
 BACKUP DATABASE @DBNAME TO @CUR_TARGET_DEV_NAME WITH INIT
  , NAME = @CUR_TARGET_DEV_NAME
  , NOSKIP
  , NOFORMAT
  , DIFFERENTIAL
 
IF @XP_CMDSHELL_CHANGE_STATUS = 1 BEGIN
 EXEC SP_CONFIGURE 'XP_CMDSHELL', 0
 RECONFIGURE WITH OVERRIDE
END
 


go
exec ap_db_backup 'DB1','c:\backup2\','F',1









declare @BMK varchar(max)

set @BMK = 'BACKUP SERVICE MASTER KEY TO FILE = ''E:\BACKUP_SQLTAG\' + replace(@@servername,'\','_') + '.service_master.key'' ENCRYPTION BY PASSWORD = ''P@SSW0RD'''

exec (@BMK)

Posted by 보미아빠
, |


if object_id('tblx') is not null
drop table tblx
go

create table tblx
(
c1 int identity(1,1)
,c2 int
)
go

insert tblx values (1)
go 30

create clustered index cl_tblx_desc on tblx (c1 desc )
go

create nonclustered index nc_tblx_asc on tblx (c1 asc )
go

delete top (10) t from tblx t with (index(cl_tblx_desc));
go

select top 20 * from tblx order by c1 desc
go

delete top (10) t from tblx t with (index(nc_tblx_asc));
go

select top 20 * from tblx order by c1 asc
go

 

 

 

 

잘라서 지우기

drop table tblx
go

select top 100 a.* into tblx
from sys.sysobjects a
, sys.sysobjects b
, sys.sysobjects c
, sys.sysobjects d
go


while (1=1) begin
 delete a
   from (select top 1000 *
     from tblx 
    where xtype = 's') a
 if @@rowcount = 0 break
 waitfor delay '00:00:00.100'
end
go

select count(*) from tblx
go

 

아래와 같이도 된다.

delete top (1000)
from tblx
where xtype = 's'

Posted by 보미아빠
, |

http://blogs.msdn.com/b/sql_pfe_blog/archive/2009/12/23/how-and-why-to-enable-instant-file-initialization.aspx

에러로그 강제 출력 및 확인 여기서 MDF 관련 로그가 나오면 설정이 되지 않은 것이다.
sql 을 최소 권한으로 시작할때 해당 옵션을 추가하지 않는 경우가 많다.

DBCC TRACEON(3004,3605,-1)
GO
CREATE DATABASE TestFileZero
GO
EXEC sp_readerrorlog
GO
DROP DATABASE TestFileZero
GO
DBCC TRACEOFF(3004,3605,-1)

설정을 위해서 할 일들
lusrmgr.msc (사용자 및 그룹 사용자 보기)
SQL 사용자 그룹 등록

secpol.msc (로컬 보안 정책)

추가 시킬 group 등록

sql restart
완료

자세한 사항은 원본 블로그를 확인 하세요~


Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함