728x90
2010/03/15 19:43

DBCC SHRINKFILE 트랜잭션 로그파일 축소


SQL Server 2005에서 DBCC SHRINKFILE 문을 사용하여 트랜잭션 로그 파일을 축소하는 방법

SQL Server 2005에서는 축소 작업(DBCC SHRINKFILE)이 지정한 트랜잭션 로그 파일을 요청된 크기로 즉시 축소하려고 합니다. 전체 복구 모델에서 트랜잭션 로그 파일을 수동으로 축소하려면 먼저 트랜잭션 로그 파일을 백업한 다음 DBCC SHRINKFILE 문을 사용하여 트랜잭션 로그 파일을 축소하십시오.

일반적으로 SQL Server 2005에서 트랜잭션 로그 파일을 축소하는 것은 SQL Server 2000에서 트랜잭션 로그 파일을 축소하는 것보다 빠릅니다. 이는 SQL Server 2005 로그 관리자가 실제 디스크 저장 장치 순서에 따라 비활성 가상 로그 파일을 만들거나 다시 사용하기 때문입니다. 따라서 트랜잭션 로그 파일의 비활성 부분은 대개 파일의 끝에 있습니다.

예를 들어, 트랜잭션 로그 파일에 100개의 가상 로그 파일이 있을 수 있고 2개의 가상 로그 파일만 사용되는 경우 SQL Server 2000은 첫 번째로 사용된 가상 로그 파일을 트랜잭션 로그 파일의 시작 부분에 저장하고 두 번째로 사용된 가상 로그 파일을 트랜잭션 로그 파일의 중간 부분에 저장합니다. 트랜잭션 로그 파일을 두 개의 가상 로그 파일로만 축소하기 위해 SQL Server는 더미 로그 항목을 사용하여 두 번째 가상 로그 파일의 나머지 부분을 채웁니다. SQL Server는 논리 로그의 시작 부분을 로그 관리자가 지정하는 사용 가능한 다음 가상 로그 파일로 이동합니다. 로그 관리자는 마지막 활성 가상 로그 파일 바로 앞에 있는 트랜잭션 로그 파일의 중간 부분에 가상 로그 파일을 만들 수 있습니다. 이 경우 트랜잭션 로그 파일을 두 개의 가상 로그 파일로 축소하기 위해 여러 개의 로그 백업 작업과 로그 축소 작업을 사용해야 합니다. 최악의 경우 트랜잭션 로그 파일을 두 개의 가상 로그 파일로 축소하기 위해 각각 50개씩의 로그 백업 작업과 로그 축소 작업을 사용해야 할 수도 있습니다.

그러나 SQL Server 2005에서는 하나의 DBCC SHRINKFILE 문을 사용하여 트랜잭션 로그 파일을 즉시 두 개의 가상 로그 파일로 축소할 수 있습니다. 이는 SQL Server 2005 로그 관리자가 실제 디스크 저장 장치 순서에 따라 두 개의 가상 로그 파일을 만들기 때문입니다. 이 두 개의 가상 로그 파일은 모두 트랜잭션 로그 파일의 시작 부분에 저장됩니다.

SQL Server 2005에서 여유 공간이 거의 없는 트랜잭션 로그 파일을 축소하려는 경우 추가 로그 백업 작업을 수행해야 할 수 있습니다. 추가 로그 백업 작업을 수행하면 트랜잭션 로그 파일이 더 작은 크기로 잘립니다. 이 로그 백업 작업은 SQL Server 2000에서 트랜잭션 로그 파일의 축소를 위해 수행하는 세 단계 이외에 추가로 수행하는 작업입니다. 자세한 내용은 "소개" 절에서 언급한 Microsoft 기술 자료 문서를 참조하십시오. SQL Server 2005에서 여유 공간이 거의 없는 트랜잭션 로그 파일을 축소하려면 다음과 같이 하십시오.
  1. 트랜잭션 로그 파일을 백업하여 대부분의 활성 가상 로그 파일을 비활성화합니다. 이렇게 하면 나중에 비활성 가상 로그 파일을 제거할 수 있습니다. 이렇게 하려면 다음 Transact-SQL 문과 유사한 Transact-SQL 문을 실행하십시오.
    BACKUP LOG <DatabaseName> TO DISK = '<BackupFile>'
    참고 이 문에서 <DatabaseName>은 백업할 데이터베이스 이름의 자리 표시자이고, <BackupFile>은 백업 파일의 전체 경로에 대한 자리 표시자입니다.

    예를 들어, 다음 Transact-SQL 문을 실행하십시오.
    BACKUP LOG TestDB TO DISK='C:\TestDB1.bak'
  2. 트랜잭션 로그 파일을 축소합니다. 이렇게 하려면 다음 Transact-SQL 문과 유사한 Transact-SQL 문을 실행하십시오.
    DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS
    참고 이 문에서 <FileName>은 트랜잭션 로그 파일 이름의 자리 표시자이고, <TargetSize>는 트랜잭션 로그 파일의 대상 크기에 대한 자리 표시자입니다. 대상 크기는 합리적이어야 합니다. 예를 들어, 두 개의 가상 로그 파일보다 작은 크기로 트랜잭션 로그 파일을 축소할 수는 없습니다.
  3. DBCC SHRINKFILE 문이 트랜잭션 로그 파일을 대상 크기로 축소하지 않을 경우 1단계에서 언급한 BACKUP LOG 문을 실행하여 가상 로그 파일을 추가로 비활성화합니다.
  4. 2단계에서 언급한 DBCC SHRINKFILE 문을 실행합니다. 이 작업을 수행하고 나면 트랜잭션 로그 파일이 대상 크기와 비슷해집니다.
요약하면 SQL Server 2005에서는 다음 가상 로그 파일을 선택하는 로그 관리자의 알고리즘이 변경되었습니다. 따라서 SQL Server 2005에서 트랜잭션 로그 파일을 축소하는 방법이 SQL Server 2000에서 트랜잭션 로그 파일을 축소하는 방법과 다를 수 있습니다.
  • 로그 파일에 여유 공간이 많으면 SQL Server 2005에서 트랜잭션 로그 파일을 축소하는 것이 SQL Server 2000에서 트랜잭션 로그 파일을 축소하는 것보다 빠릅니다.
  • 로그 파일에 여유 공간이 없으면 SQL Server 2005에서 트랜잭션 로그 파일을 축소하는 것과 SQL Server 2000에서 트랜잭션 로그 파일을 축소하는 것이 같습니다.
  • 로그 파일에 여유 공간이 거의 없으면 SQL Server 2000에서 수행해야 하는 것보다 더 많은 추가 로그 백업 작업을 SQL Server 2005에서 수행해야 합니다.

SQL Server 2000에서 DBCC SHRINKFILE을 사용하여 트랜잭션 로그를 축소하는 방법

DBCC SHRINKFILE을 실행할 때 SQL Server는 먼저 가상 로그 파일을 제거하여 로그 파일을 축소합니다. 대상 파일 크기로 축소되지 않았으면 SQL Server는 가상 로그가 채워질 때까지 마지막 가상 로그 파일에 더미(Dummy) 로그 항목을 넣고 로그의 윗 부분을 파일의 시작 위치로 옮깁니다. 그런 다음 트랜잭션 로그를 축소하는 작업을 완료하기 위해 아래와 같은 작업이 필요합니다.

  • 로그의 활성 부분을 비우기 위해 BACKUP LOG 문을 실행합니다.
  • 로그 파일이 대상 크기로 줄어들 때까지 원하는 대상 크기를 사용하여 DBCC SHRINKFILE을 다시 실행합니다.
아래 예제에서는 pubs 데이터베이스를 사용할 때 이 방법을 사용하여 pubs_log 파일을 2MB로 축소하는 단계를 보여줍니다.
  1. DBCC SHRINKFILE(pubs_log, 2)을 실행합니다.
  2. 대상 크기로 축소되지 않고 아래와 같은 메시지가 반환됩니다.
    모든 논리 로그 파일이 사용 중이므로 로그 파일 2(Pubs_log)을(를) 축소할 수 없습니다.
    DbId  FileId  CurrentSize  MinimumSize UsedPages     EstimatedPages 
    ----- ------- ------------ ----------- ------------- ------------------ 
    6     2       3048         128         3048          128  <- 여기 있는 모든 값은 변할 수 있습니다.
     
    (1개 행 적용됨)
     
    DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.
    
  3. BACKUP LOG pubs WITH TRUNCATE_ONLY를 실행합니다.
  4. DBCC SHRINKFILE(pubs_log,2)을 실행합니다.
  5. 이제 트랜잭션 로그가 대상 크기로 줄어듭니다.

자세한 내용은 SQL Server 2000 Books Online에서 "Shrinking the Transaction Log" 항목과 "DBCC SHRINKFILE" 항목을 참조하십시오.


SQL Server 7.0 트랜잭션 로그를 줄이는 방법

  • Microsoft SQL Server 7.0에서 SHRINKFILE 및 SHRINKDATABASE 명령은 줄이려는 목표 크기를 설정합니다. 각 로그 파일은 이들 명령에 의해 표시되지만, 실제로 파일을 줄이기 위해 로그 백업이나 로그 자르기를 시도하지는 않습니다. 따라서 SHRINKFILE 또는 SHRINKDATABASE 명령을 사용한 후에는 로그 자르기 명령을 통해 파일을 줄이기 전에 로그를 자르는 명령을 실행해야 합니다.
  • 아래의 기준에서 허용하는 크기보다 작은 크기로 로그를 줄일 수 없습니다.

    • 원래 크기보다 로그를 작게 줄이려면 개별 파일을 DBCC SHRINKFILE을 사용하여 줄여야 합니다. DBCC SHRINKDATABASE를 사용하면 로그를 원래 크기나 명시적으로 정의한 크기보다 작게 줄일 수 없습니다. CREATE DATABASE에 모든 명시적 ALTER DATABASE 명령이 더해지므로 원래 크기는 로그의 크기로 정의됩니다. 로그의 자동 증가는 원래 크기에 포함되지 않습니다.

    • 실제 로그 파일은 해당 로그 파일 내에서 현재 사용되고 있는 공간의 양보다 작을 수 없습니다. DBCC SQLPERF (LOGSPACE) 명령을 사용하면 사용된 공간의 양을 모니터 할 수 있습니다.

    • Model 데이터베이스 로그의 현재 크기는 해당 서버에 있는 모든 데이터베이스 로그의 최소 크기입니다. 기본적으로 Model 데이터베이스의 로그는 1MB보다 작습니다.

    • 로그를 가상 로그 파일(VLF) 경계까지만 줄일 수 있으므로 공간을 사용하고 있지 않은 경우에도 로그 파일을 VLF보다 작은 크기로 줄이는 것은 불가능합니다. 마찬가지로 VLF의 일부를 사용 중인 경우 해당 VLF에서 사용 중인 공간은 줄일 수 없습니다. 자세한 내용은 SQL Server Books Online의 "Virtual Log Files" 및 "Transaction Log Physical Architecture" 항목을 참조하십시오

  • 트랜잭션 로그는 "랩어라운드" 로그입니다. 이는 특정 시간에 로그 시작 부분 및/또는 끝 부분에 "여유" 또는 "재사용 가능" 공간이 있는 VLF가 있을 수 있음을 의미합니다. 로그를 줄이려면 해당 로그의 여러 곳에 여유 공간이 있어야 하는 것이 아니라 해당 로그의 끝 부분에 "여유" 공간이 있어야 합니다. 또한, 전체 VLF를 줄일 수만 있습니다. 트랜잭션 로그를 줄이려면 로그 파일의 끝에 있는 VLF가 비활성화되어 잘려야 합니다. 자세한 내용은 SQL Server Books Online의 "Truncating the Transaction Log" 항목을 참조하십시오.
다음 몇 가지 사항에 유의하십시오.
  • 시스템에 영향을 미치는 변경 작업을 수행하기 전이나 후에 항상 시스템 데이터베이스 및 사용자 데이터베이스 백업을 수행하십시오. DBCC SHRINKFILE 및 DBCC SHRINKDATABASE는 로깅되는 작업이 아니며, 이들을 실행하면 향후 트랜잭션 로그 백업도 무효화됩니다. DBCC SHRINKFILE 명령이나 DBCC SHRINKDATABASE 명령 중 하나를 실행한 후에는 반드시 전체 데이터베이스 백업을 수행해야 합니다.

  • 축소가 진행될 시간에 예약된 백업이 없는지 확인하십시오.

  • 오래되거나, 장기간 실행하거나 또는 복제되지 않은 트랜잭션이 없는지 확인하십시오. 이렇게 확인하려면 다음과 유사한 코드를 사용하십시오.
    DBCC OPENTRAN (database_name)
  • DBCC SHRINKFILE 명령이나 DBCC SHRINKDATABASE 명령을 실행하여 축소 지점을 표시하십시오. DBCC SHRINKFILE 및 DBCC SHRINKDATABASE 사용 권한은 sysadmin 고정 서버 역할이나 db_owner 고정 데이터베이스 역할의 멤버에 기본적으로 제공되며, 권한 전가는 불가능합니다. 이들 명령의 차이점에 대한 자세한 내용은 SQL Books Online의 다음 항목을 참조하십시오. 매개 변수가 다름에 유의하십시오.

    DBCC SHRINKFILE     (file_name, target_size)
    DBCC SHRINKDATABASE (database_name, target_percent)
  • 더미(dummy) 트랜잭션을 몇 개 만들어 로그를 겹치게 만든 후 BACKUP 명령을 실행하여 로그를 자르십시오. BACKUP 문은 실제로 표시된 목표 크기로 로그를 줄이고자 시도합니다.

    다음은 줄일 수 있도록 단일 논리 로그 파일에 대해 로그를 겹치고 로그가 잘리게 하는 더미 트랜잭션을 만드는 방법의 샘플입니다. 필요하면 사용자 환경에 맞게 샘플을 수정하십시오.
    SET NOCOUNT ON
    DECLARE @LogicalFileName sysname,
            @MaxMinutes INT,
            @NewSize INT
     
    -- *** MAKE SURE TO CHANGE THE NEXT 3 LINES WITH YOUR CRITERIA. ***
    USE     Your_Database_Name              -- This is the name of the database 
    for which the log will be shrunk.
    SELECT  @LogicalFileName = 'Your_log',  -- Use sp_helpfile to identify the logical file name that you want to shrink.
            @MaxMinutes = 10,               -- Limit on time allowed to wrap log.
            @NewSize = 100                  -- in MB
     
    -- Setup / initialize
    DECLARE @OriginalSize int
    SELECT @OriginalSize = size -- in 8K pages
      FROM sysfiles
      WHERE name = @LogicalFileName
    SELECT 'Original Size of ' + db_name() + ' LOG is ' + 
            CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + 
            CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
      FROM sysfiles
      WHERE name = @LogicalFileName
    CREATE TABLE DummyTrans
      (DummyColumn char (8000) not null)
     
     
    -- Wrap log and truncate it.
    DECLARE @Counter   INT,
            @StartTime DATETIME,
            @TruncLog  VARCHAR(255)
    SELECT  @StartTime = GETDATE(),
            @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
    -- Try an initial shrink.
    DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    EXEC (@TruncLog)
    -- Wrap the log if necessary.
    WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
          AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  -- the log has not shrunk    
          AND (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.
      BEGIN -- Outer loop.
        SELECT @Counter = 0
        WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
          BEGIN -- update
            INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.
            DELETE DummyTrans
            SELECT @Counter = @Counter + 1
          END   -- update
        EXEC (@TruncLog)  -- 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 DummyTrans
    PRINT '*** Perform a full database backup ***'
    SET NOCOUNT OFF
    로그가 원래 크기에서 줄여졌는지 확인하십시오.필요한 경우 앞의 단계를 반복하십시오. 로그가 줄여지지 않을 경우 본 문서의 시작 부분에 나와 있는 요약 정보를 점검하여 로그를 줄이는 데 문제가 있는지 확인하십시오.
로그를 줄였으면 다음을 수행하십시오.
  1. 마스터 데이터베이스를 전체 데이터베이스 백업합니다.
  2. 사용자 데이터베이스를 전체 데이터베이스 백업합니다. SHRINK 명령이 로깅되지 않고, 전체 데이터베이스 백업을 완료하지 않으면 향후 트랜잭션 로그 백업이 무효화되기 때문에 이러한 작업이 필요합니다.

로그가 커지는 이유를 확인하려면 열린 트랜잭션, 장기간 실행되는 트랜잭션, 복제되지 않은 트랜잭션 또는 많은 양의 데이터를 사용하는 트랜잭션을 점검하면 됩니다.


데이터베이스 파일명 찾기

sp_helpfile
GO

위의 쿼리를 실행하면 트랜잭션 로그명을 알수 있습니다.


원문:
http://support.microsoft.com/kb/907511/ko
http://support.microsoft.com/kb/272318/
http://support.microsoft.com/kb/256650/KO/

728x90

'프로그래밍 > MS_SQL' 카테고리의 다른 글

MSSQL 테이블 소유자 변경  (0) 2012.09.05
트랜젝션 고립화 수준  (0) 2012.06.25
MSSQL identity 값 초기화  (0) 2012.04.04
Foreign key 설정  (0) 2012.03.14
인터넷서점 모델링  (0) 2012.03.08
728x90

“신기미(愼機微)하여 국궁진력(鞠躬盡力)하라.“

마음속에 잡념들을 제거하고 스스로를 단속하면서 몸을 굽혀 온힘을 다하라.

 

“위군난(爲君難)이니 견인불발(堅忍不拔)하라.”

군주가 되는 일은 지극히 어려우니 굳게 함고 견디어 흔들리지 말라.

 

“대공지정(大公至正)하여 협화만방(協和萬邦)하라.”

공평하고 지극히 바른 가운데 온 세상을 평화롭게 하라.

 

728x90

'에세이' 카테고리의 다른 글

미지속에서 사랑을 찾다.  (0) 2011.08.25
티스토리 초대장 필요하신 분 받아가세요.(마감되었습니다.)  (20) 2011.08.24
이별을 준비합니다.  (0) 2011.08.15
사랑은 놔주는 거야.  (0) 2011.08.08
Always with me  (0) 2011.08.01
728x90

http://msdn.microsoft.com/en-us/library/aa384106(VS.85).aspx
Status : http://msdn.microsoft.com/en-us/library/aa383887(VS.85).aspx

Public WithEvents WinHttp As WinHttpRequest
Dim DownSize as Long

Private Sub WinHttp_OnResponseStart(ByVal Status As Long, ByVal ContentType As String)
'Start
DownSize = CLng(WinHttp.GetResponseHeader("Content-Length"))
If Not Dir(App.Path & "\" & App.EXEName & "-Old.exe") = vbNullString Then
  Kill App.Path & "\" & App.EXEName & "-Old.exe"
End If
Name App.Path & "\" & App.EXEName & ".exe" As App.Path & "\" & App.EXEName & "-Old.exe"
Open App.Path & "\" & App.EXEName & ".exe" For Binary As #1
End Sub

Private Sub WinHttp_OnResponseDataAvailable(Data() As Byte)
If DownSize > 0& Then
  Put #1, , Data()
End If
DoEvents
End Sub

Private Sub WinHttp_OnError(ByVal ErrorNumber As Long, ByVal ErrorDescription As String)
'Err
End Sub

Private Sub WinHttp_OnResponseFinished()
'End
Close #1
End Sub

파일 다운로드 예를 이벤트에 첨가 해두었습니다.
WinHttp COM 객체는 대용량 파일 다운로드에는 적합하지 못합니다.
제공되는 관련 API 를 이용하세요.

'적절한 곳에 넣어줍니다.
'Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
Set WinHttp = New WinHttpRequest

WinHttp.Open "GET", "http://주소", True
WinHttp.Send "PARAM=1000"
WinHttp.WaitForResponse //완료까지 기다림
msgbox WinHttp.ResponseText
msgbox WinHttp.ResponseBody

728x90

'프로그래밍 > asp' 카테고리의 다른 글

SMTP, POP3로 메일 서버 구축하기  (0) 2011.09.16
windows 2003 ftp 설정  (0) 2011.09.05
ASP에서 UTF-8로 저장하기  (0) 2011.08.03
ASP에서 CSV 파일 생성하기  (0) 2011.08.03
ON Error Resume Next  (0) 2011.06.24
728x90

쾌청한 하늘빛이 마치 가을이 성큼 다가선 것 같았다.
마음을 담아도 좋을 법한 파란 하늘이,
그리고 분홍빛 구름이 형용하기 힘든 자태롤 뽑내고 있었다.

728x90

'하늘을 사랑한 사람 여행기' 카테고리의 다른 글

담쪽으로 얼굴을 내민 손님 같다.  (0) 2011.08.25
사랑의 꽃  (0) 2011.08.25
가을 느끼기 1  (0) 2011.08.10
가리워진 나의 길  (0) 2011.08.03
아침 8시경 구름이 햇살에 비춰지고 있다.  (0) 2011.08.01
728x90

무더위도 서서히 삭으라 들고 있습니다.
밖으로는 매미 우는 소리가 하늘을 찌르네요.
한 때가 지나치면 이별을 준비해야 합니다.
사랑할 때 보내는 것이 덜 아프겠죠.
사랑하니까 보내는 겁니다.
마음을 비우고
머리도 비우고
빈 잔처럼 텅 빈 마음을 하늘에 비추고 싶습니다.
이제 내 마음을 아는 사람은 이 세상에 단 한 사람 밖에 없습니다.
어디로 가려하고 무엇이 필요한지.
어떤 것을 주어야하는지 조차도
그 한사람이 내게 주었던 붉은 피를 적신 사랑,
그 사랑을 가지려 하는 사람들이 많이 있습니다.
눈물과 사랑과 희생으로 물들인 그 사랑을 말입니다.
이별조차도 두렵지 않을 그 사랑을 가지려 합니다.
이젠 모두 놓아 주기로 했습니다.
머리 속으로 지우고,
가슴으로 지우고,
눈물과 웃음으로 지우고 나면 남는 건 빈 백지일 뿐입니다.
그 백지를 가지고 구름이 지나친 저 달빛 속을 지나
온통 흰 색으로 물든 그곳으로 가려 합니다.
바람이 불어도
물결이 출렁거려도
온통 하얀 빛이 넘실거리는 그 세상 말입니다.
말하지 않아도
모든 사랑과 감정이 섞여진 그곳,
이제 이별을 준비합니다.
728x90
728x90


728x90
728x90


영원할 줄 알았던 사랑이 떠났습니다.
이미 이별을 준비했던 거였지만,
흔적으로 남겨두기로 했습니다.

이미 놔줘야 할 시기를 가늠해 보곤 했지만,
이렇게 떠나보내니
마음의 무거운 짐을 떨쳐낸 기분입니다.

10년이 지나고
또 20년이 지나고
변하는 건 좀더 이해할 수 있는 마음 인 듯합니다.
몸은 늙지만, 마음까지 늙어지지는 않습니다.

맑은 호수처럼 깊은 그곳에서 숨쉬는 고결한 사랑의 의미를 간직하면 그만입니다.
눈시울을 적시며
아파하던 그 기억,
함께하며 기뻐하는 그 기억,
아련히 파도를 따라 바다 저 깊은 곳으로 떠내려 가겠죠.

이별하는 순간에
고요한 듯 맑게 빛나던 가슴 속의 움직임이
사랑을 불러오는 빛이 되어 주겠죠.

사랑을 놔주듯,
사람을 놔주듯,
이제 제 자신을 놔 주어야 할 때 입니다.
자유로운 그 마음을 새로운 사랑에게
맑게 빛나는 그 마음을 새로운 사람에게 주고 싶습니다.

사랑합니다.
사랑해.
오늘, 다시 사랑하고 싶습니다.
728x90

'에세이' 카테고리의 다른 글

강희제, 옹정제, 건륭제가 남긴 삼제(三題)  (0) 2011.08.22
이별을 준비합니다.  (0) 2011.08.15
Always with me  (0) 2011.08.01
초대장 가져가세요.(완료)  (4) 2011.07.30
어느 약속이 더 중요한가?  (0) 2011.07.29
728x90

1. http://www.taeyo.pe.kr/Lecture/20_TIps/Danny02.asp 참고
 
1. 모든 ASP 코드 페이지 첫줄에 다음과 같은 코드를 추가합니다
<% @LANGUAGE='VBSCRIPT' CODEPAGE='65001' %>
 
2. Meta 테그를 다음과 같이 추가 합니다.
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
 
3. 에디트플러스나 울트라 에디터에서 수정후 저장할 때 반드시 Encoding 방식을 UTF-8 로 저장합니다
 
4.DB Insert/Update 시 숫자 타입을 제외한 모든 대상에 N을 추가 합니다
Insert [into] table_name [(column_list)] Value N[data_value]
 
5.DB like 검색시 N 추가
 
6. 파일 첨부 DEXT Upload사용(영문으로 설치)
 SET uploadform = Server.CreateObject("DEXT.FileUpload")
 uploadform.DefaultPath = Server.MapPath(ESP_BBS_DATA)
 uploadform.CodePage = 65001
 wFileSize = 0
 rAttachment = uploadform("txtAttachFile")
 
 If Len(rAttachment) > 0 Then
  wFileName =  uploadform("txtAttachFile").FileName
  wFileSize =  uploadform("txtAttachFile").FileLen
 
  response.write uploadform.DefaultPath
  rAttachment = uploadform.SaveAs(uploadform.DefaultPath & "" & wFileName , False)
  rAttachment = UploadForm.LastSavedFileName
 End If
 
7. 파일 다운로드
 
<% @LANGUAGE='VBSCRIPT!' CODEPAGE='65001' %>
<%
 'Response.Charset = "UTF-8"
 filepath = Request.QueryString("txtFilepath") '// form으로 파라메터 전달해야 함.
 filename = Request.QueryString("txtFilename")'// form으로 파라메터 전달해야 함.
 
 If filepath = "" Then
  filepath=server.MapPath( Request.QueryString("txtFilename"))
  filename = Mid(filepath, InStrRev(filepath, "")+1)
 Else
  filepath=server.MapPath(filepath)
  filename =  Request.QueryString("txtFilename")
  If filename = "" Then
   filename = Request.QueryString("txtattachment")
  End If
 End If

 filepath = filepath &"" & filename
Call FileDown
%>
 
<%
Sub FileDown
' 참고http://www.taeyo.pe.kr/Lecture/20_TIps/Danny03.asp
 
 Response.Buffer = False
 Response.ContentType = "application/x-msdownload"
 'ContentType 를 선언합니다.
 'server.HTMLEncode
 'server.URLPathEncode
 Response.AddHeader "Content-Disposition","attachment; filename=" & server.URLPathEncode(filename) '//server.URLPathEncode 사용해야만 파일명 재대로 출력
 '헤더값이 첨부파일을 선언합니다.
 Set objStream = Server.CreateObject("ADODB.Stream")
 'Stream 을 이용합니다.
 objStream.Open
 '무엇이든 Set 으로 정의했으면 열어야 겠지요^^
 objStream.Type = 1
 objStream.LoadFromFile filepath
 '절대경로 입니다.
 download = objStream.Read
 Response.BinaryWrite download
 '이게 보통 Response.Redirect 로 파일로 연결시켜주는 부분을 대신하여 사용된 것입니다.
 Set objstream = nothing
 '초기화시키구요.
End Sub
%>
 
<%
Sub DEXTDown   ' DEXT.FileDownload 는 일본어 OS에 영문으로 설치시 한글파일 찾지 못함.(DextUpload 2.0까지는 그랬음)
 'On Error Resume Next
 Response.Buffer = False
 Response.AddHeader "Content-Disposition","inline;filename=" &  server.URLPathEncode(filename)
 set objFS = Server.CreateObject("Scripting.FileSystemObject")

 set objF = objFS.GetFile(filepath)
 
 Response.AddHeader "Content-Length", objF.Size
 set objF = nothing
 set objFS = nothing
 Response.ContentType = "application/x-msdownload"
 Response.CacheControl = "public"
 Set objDownload = Server.CreateObject("DEXT.FileDownload")
 objDownload.Download filepath
 Set uploadform = Nothing
End Sub
%>
 
8. CDO Mail발송
Dim iMsg
Dim iConf
Dim Flds
Dim strHTML
Const cdoSendUsingPort = 2 '1:로컬, 2:외부 smtp
set iMsg = CreateObject("CDO.Message")
set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
Flds.item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25  '포트번호
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") =  "" 'ID
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") =  "" '암호

Flds.Update
Set iMsg.Configuration = iConf
iMsg.To = "xxxx@xxx.ccx" 'ToDo: Enter a valid email address.
iMsg.From = "xxxx@xxx.ccx"  'ToDo: Enter a valid email address.
iMsg.Subject = "This is a test CDOSYS message (Sent via Port 25)"
 
'iMsg..TextBody = strHTMLMsg '// 텍스트
iMsg.HTMLBody = strHTML  '// HTML 제목 깨짐 발생..

iMsg.BodyPart.Charset="UTF-8" '/// 한글을 위해선 꼭 넣어 주어야 합니다.
iMsg.HTMLBodyPart.Charset="UTF-8" '/// 한글을 위해선 꼭 넣어 주어야 합니다.
iMsg.Send
End With
Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing
 
 
9. ASP에서 배달 확인/ 읽음 확인 구현 방법 http://tong.nate.com/windeo/5767827

http://support.microsoft.com/default.aspx?scid=kb;ko;286430

<%
Set oMsg = CreateObject("CDO.Message")
oMsg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
‘ 생성되는 메시지가 SMTP pickup 디렉터리가 아닌 SMTP 서비스로 전송되게 합니다.
oMsg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "이름"
oMsg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxx"
oMsg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "seo-msg-01"
‘ 생성되는 메시지의 서버, 사서함 및 암호
oMsg.Configuration.Fields.Update

oMsg.From = "smpark@microsoft.com"
oMsg.To = "smpark@microsoft.com"

oMsg.Subject = "읽음 확인 및 배달 확인"
oMsg.DSNOptions = 14
‘ 이 메시지의 배달 상태 확인(delivery status notification:DSN)값으로 14는 배달 성공, 실패 및 지연시
‘ 확인메시지 생성
oMsg.Fields("urn:schemas:mailheader:return-receipt-to") = smpark@microsoft.com <mailto:smpark@microsoft.com>
‘ 받는 사람이 이 메시지를 열었을 때 읽음 확인 메시지가 여기에서 지정된 사람에게 보내집니다.
oMsg.Fields("urn:schemas:mailheader:disposition-notification-to") = smpark@microsoft.com <mailto:smpark@microsoft.com>
‘ MDN(Message Disposition Notification)은 이 메시지의 확인 메시지가 리턴 될 수신자를 지정합니다.
‘ MDN에 대하여는 Request for Comments (RFC) 2298에 자세히 설명됩니다.
oMsg.TextBody = " SMTP 서버를 통한 읽음 확인 및 배달 확인 메시지"
oMsg.Fields.Update
oMsg.Send

Set oMsg = Nothing
%>
 

728x90

'프로그래밍 > asp' 카테고리의 다른 글

windows 2003 ftp 설정  (0) 2011.09.05
winhttp 사용법  (0) 2011.08.22
ASP에서 CSV 파일 생성하기  (0) 2011.08.03
ON Error Resume Next  (0) 2011.06.24
ASP 오류 'ASP 0115'  (0) 2011.06.15

+ Recent posts