Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 13건
  SMK 관련 오류 해결 방법 (Veritas / Legato) 
작성일시 : 2008.07.18 23:34 | 분류 : SQL Server/Cluster | 태그 : 15466, 16, 2, cluster fail over, Legato, Microsoft sql server 2005, SMK, Veritas

A 노드에서 백업 받은 SMK가 B 노드에서 복원이 않되는 것은 자연 스러운 현상입니다.
B 노드에서 SMK를 읽기 위해서는 DAPI를 사용하는데, 이는 SQL Server의 자격 증명으로부터 파생된 키를 이용하게 됩니다.

즉 이로 인해 동일 서비스 계정이 아닐 경우에는 SMK의 복원 자체가 불가능합니다.

만약 강제로 복원을 시도하는 경우에는 SMK가 재 생성되는 것과 마찮가지로써, 크리덴셜을 이용하는 링크드 서버 및 기타 인증서를 이용한 암호화 구성에 문제가 발생할 수 있습니다.

[현상]
Veritas/Legato 클러스터에 Fail over 직후에 Linked Server 등이 연결이 안된다.
메세지 15466, 수준 16, 상태 2

[원인]
SMK 정보 변경

연결된 서버 암호, 인증서 또는 데이터베이스 마스터 키를 처음으로 암호화할 필요가 있을 때 자동으로 생성됨
SMK는 로컬 시스템 키 또는 Windows 데이터 보호 API(DAPI)를 사용하여 암호화된다. 이 API는 SQL Server 서비스 계정의 Windows 자격 증명으로부터 파생된 키를 사용한다.

서비스 마스터 키의 암호는 해당 키가 만들어진 서비스 계정이나 해당 서비스 계정의 Windows 자격 증명에 대한 액세스 권한이 있는 보안 주체에 의해서만 해독될 수 있다. 따라서 SQL Server 서비스를 실행 중인 Windows 계정을 변경하면 서비스 마스터 키의 암호 해독도 새 계정으로 활성화해야 한다.

[해결 방안]
1. 서비스를 Fail back 한다.
2. SMK를 백업 한다.
3. 두 노드 모두 SQL 서버의 시작 계정을 도메인 계정으로 변경 한다. (해당 작업은 동일 머신 상에서 진행 되어야 합니다.)
4. 연결 오류 발견 시 기존에 백업했던 SMK를 복원 한다.

[기타]
- 백업 및 복원
BACKUP SERVICE MASTER KEY TO FILE = 'c:\service_master_key' ENCRYPTION BY PASSWORD = 'password'
RESTORE SERVICE MASTER KEY FROM FILE = 'c:\service_master_key' DECRYPTION BY PASSWORD = 'password' -- [FORCE]

- 재생성
ALTER SERVICE MASTER KEY REGENERATE

- 계정 변경
ALTER SERVICE MASTER KEY WITH OLD_ACCOUNT = 'old_service_account', OLD_PASSWORD = 'old_service_account_password'

http://blogs.msdn.com/lcris/archive/2005/07/08/437048.aspx
http://blogs.msdn.com/lcris/archive/2006/04/10/572678.aspx
http://blogs.msdn.com/lcris/archive/2005/09/30/475822.aspx
SMK에 대한 간단한 설명 : http://nexondbteam.tistory.com/35
SMK 생성 강제 적용 : http://support.microsoft.com/kb/914261

신고
  Microsoft SQL Server 로그 관련 장애 해결 방법 
작성일시 : 2008.05.13 15:01 | 분류 : SQL Server/Administration | 태그 : log, Microsoft sql server 2005, opentran, problem, shrink, sqlperf, Transaction log

오랫만에 원론적인 애기를 한번 할까 합니다.
뭐 단편화된 나만의  스킬일 수 도 있고... 모두가 다들 겪는 일이지만, 종종 로그를 삭제 하기 위해 로그 백업을 받았음에도 로그가 삭제 되지 않는 경우가 있습니다.

자 왜? 그렇게 된 것일까요?
그리고 어떻게 해야 할 까요?
로그에 대한 내용은 http://maystyle.tistory.com/257 를 참조 하시기 바랍니다.

먼저 로그가 왜 안 잘리는지 확인 합니다.

dbcc opentran(DB 명)
이 명령어를 통해 활성 트랜젝션의 여부 및 크기를 확인 할 수 있습니다.
즉 활성 트랜젝션이 크면 당연히 해당 로그는 활성이기 때문에 잘리지 않는 것입니다.

그리고 해당 로그의 사용현황을 보기 의해서 dbcc sqlperf(logspace) 를 사용하시면 로그 사용 여부 및 상태를 확인 할 수 있습니다.

그리고 다른 이유가 존재 한다... 즉 이미 Dirty Page 가 된 로그가 잘리지 않고 있다면 다음 쿼리를 사용합니다.
select name, recovery_model_desc, log_reuse_wait_desc from sys.databases
여기서 log_reuse_wait_desc 를 확인 하면 어떤 이유 때문에 사용 되지 않고 있는지 알 수 있습니다.

만약 게시 및 배포와 관련된 문제 (게시는 및 배포는 되어 있으나 구독자가 적용하지 안아 로그가 활성으로 표시되는 문제)는 게시 및 배포 삭제 후 EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1 go 를 수행하여 활성으로 표시해 주시면 됩니다.

[참고]
sp_repldone
http://msdn2.microsoft.com/ko-kr/library/ms173775.aspx
데이터베이스 미러링 모니터(상태 페이지)
http://msdn2.microsoft.com/ko-kr/library/ms365413.aspx
데이터베이스 미러링 모니터(경고 페이지)
http://msdn2.microsoft.com/ko-kr/library/ms365355.aspx

신고
  sql server ophaned user 문제 해결 
작성일시 : 2008.01.22 11:26 | 분류 : SQL Server/Administration | 태그 : Microsoft sql server 2005, ophaned user, sp_change_user_login


Master DB에 저장된 로그인 정보와 각 데이터베이스에 저장된 로그인 정보의 SID가 불일치 할 경우 OrphanUsers 문제가 발생 합니다.
이경우 보통 다음의 프로시저를 사용합니다.

sp_change_user_login
1. 현재 사용자와 로그인 관의 매핑에 대한 보고서 표시
EXEC sp_change_users_login 'Report';
2. 데이터베이스 사용자를 새 SQL Server 로그인에 매핑
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
3. 사용자를 로그인에 자동으로 매핑하고 필요한 경우 새 로그인 만들기
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO

sp_validatielogins
Windows 로그인을 사용하는 경우 사용합니다. MSDN 도움말을 참고하세요.

sp_changedbowner
orphaned dbo user 문제를 해결 하는 경우 사용합니다. MSDN 도움말을 참고 하세요.

관련 링크
Q168001 PRB: User Logon and/or Permission Errors After Restoring Dump
Q274188 PRB: "Troubleshooting Orphaned Users" Topic in Books Online is Incomplete
Q246133 INF: Transfer Logins and Passwords Between SQL 7.0 or SQL 2000 Servers
Q240872 How to Resolve Permission Issues When a Database Is Moved Between SQL Servers

- OrphanUser를 보여주는 저장 프로시저
출처 : http://vyaskn.tripod.com/troubleshooting_orphan_users.htm

CREATE PROC dbo.ShowOrphanUsers
AS
BEGIN
    CREATE TABLE #Results
    (
        [Database Name] sysname COLLATE Latin1_General_CI_AS,
        [Orphaned User] sysname COLLATE Latin1_General_CI_AS
    )

    SET NOCOUNT ON   

    DECLARE @DBName sysname, @Qry nvarchar(4000)

    SET @Qry = ''
    SET @DBName = ''

    WHILE @DBName IS NOT NULL
    BEGIN
        SET @DBName =
                (
                    SELECT MIN(name)
                    FROM master..sysdatabases
                    WHERE     name NOT IN
                        (
                         'master', 'model', 'tempdb', 'msdb',
                         'distribution', 'pubs', 'northwind'
                        )
                        AND DATABASEPROPERTY(name, 'IsOffline') = 0
                        AND DATABASEPROPERTY(name, 'IsSuspect') = 0
                        AND name > @DBName
                )
        IF @DBName IS NULL BREAK

        SET @Qry = '    SELECT ''' + @DBName + ''' AS [Database Name],
                CAST(name AS sysname) COLLATE Latin1_General_CI_AS  AS [Orphaned User]
                FROM ' + QUOTENAME(@DBName) + '..sysusers su
                WHERE su.islogin = 1
                AND su.name <> ''guest''
                AND NOT EXISTS
                (
                    SELECT 1
                    FROM master..sysxlogins sl
                    WHERE su.sid = sl.sid
                )'

        INSERT INTO #Results EXEC (@Qry)
    END

    SELECT *
    FROM #Results
    ORDER BY [Database Name], [Orphaned User]
END

신고
  정기적인 백업 작업 자동화 하기 
작성일시 : 2008.01.21 19:15 | 분류 : SQL Server/Administration | 태그 : backup 자동화, Microsoft sql server 2005

참고 :
Inside Microsoft SQL Server 2000,
전문가로 가는 지름길 SQL Server 2000/2005,
포켓 컨설턴트 SQL 2005
http://sqlworld.pe.kr
MOC 및 MSDN 자료들....
제 글의 메인은 Inside Microsoft SQL Server 2000를 기반으로 작성되고 있습니다.
거의 copy 하는 수준으로...^^;; Windows internals에 비해 참 읽기 편합니다.

목차------------------------------------------------------------------------
DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB 공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까? (http://maystyle.tistory.com/223)
4. 트랜잭션 로그의 기록과 복구 (http://maystyle.tistory.com/225)
5. 데이터 파일이 커질 때는 무슨일이 일어날까? (http://maystyle.tistory.com/231)
6. 데이터 파일은 어떻게 생겼을까? (http://maystyle.tistory.com/233)
7. 실제 Data 및 Log 파일 뜯어 보기 (예정 중)
DB 공부하기 4번째 : Backup 과 Restore
1. 무엇을 Backup 받아야 하나 (시스템 데이터베이스 소개)? (http://maystyle.tistory.com/236)
2. 백업의 종류 복구 모델 너 뭐니? (http://maystyle.tistory.com/238)
3. 백업과 복구 쉽게 않되겠니? (http://maystyle.tistory.com/239)
4. 백업 전략 과 그에 따른 복원 하기 (http://maystyle.tistory.com/240)
5. 정기적인 백업 작업 자동화 하기

SQL Server 2005는 관리>유지 관리 계획을 통해 '4. 백업 전략 과 그에 따른 복원 하기 (http://maystyle.tistory.com/240)' 에서 애기했던 종류의 정기 작업을 아주 쉽게 만들어 줄 수 있다.
물론 전체 작업을 만드는 것은 피하고 대강의 자동화 작업을 만드는 것에 대한 설명을 하도록 하겠다.
아래의 작업은 1주일 단위로 일요일 전체 백업을 받고 2주가 지난 백업 본은 삭제하는 작업이다.

자동화 작업을 만들기 위해서 관리 에서 유지 관리 계획 > 새 유지 관리 계획 을 클릭한다.

DB 전체 백업 및 일정 기간이 지난 백업 파일을 삭제하기 위한 작업을 추가한다.

예로써 모든 DB에 대한 전체 백업을 받도록 하겠다.

물론 구분을 위해서 각 데이터베이스에 대한 하위 디렉터리를 만들도록 하는 것도 좋다.

또한 유지 관리 정리 작업을 통하여 2주가 지난 전체 백업 본에 대하여 삭제 작업을 수행 하도록한다.

해당 작업의 순서에 맞춰 연결한다.

일정을 지정하기 위해서 일정의 ... 버튼을 클릭한다.

일정을 지정해준다.

같은 방식으로 트랜잭션 로그를 백업받는 작업을 만들 수 있다. 먼저 전체 백업과 마찮가지로 백업 작업을 추가한 후 해당 백업 유형을 트랜잭션 로그로 지정해준다.

트랜잭션로그의 경우 커지는걸 막기위해서는 로그 백업 후 명시적으로 축소작업을 지정해 줘야 한다.

로그 백업 및 축소 작업 순서는 아래 그림과 같다. 아래 그림과 같이 로그를 백업 받은 후 데이터베이스를 축소하고 마지막으로 오래된 트랜잭선 로그 파일을 지우면 된다.

신고
  백업 전략 과 그에 따른 복원 하기 
작성일시 : 2008.01.21 18:42 | 분류 : SQL Server/Administration | 태그 : Microsoft sql server 2005, MS, 백업 및 복원 전략

참고 :
Inside Microsoft SQL Server 2000,
전문가로 가는 지름길 SQL Server 2000/2005,
포켓 컨설턴트 SQL 2005
http://sqlworld.pe.kr
MOC 및 MSDN 자료들....
제 글의 메인은 Inside Microsoft SQL Server 2000를 기반으로 작성되고 있습니다.
거의 copy 하는 수준으로...^^;; Windows internals에 비해 참 읽기 편합니다.

목차------------------------------------------------------------------------
DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB 공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까? (http://maystyle.tistory.com/223)
4. 트랜잭션 로그의 기록과 복구 (http://maystyle.tistory.com/225)
5. 데이터 파일이 커질 때는 무슨일이 일어날까? (http://maystyle.tistory.com/231)
6. 데이터 파일은 어떻게 생겼을까? (http://maystyle.tistory.com/233)
7. 실제 Data 및 Log 파일 뜯어 보기 (예정 중)
DB 공부하기 4번째 : Backup 과 Restore
1. 무엇을 Backup 받아야 하나 (시스템 데이터베이스 소개)? (http://maystyle.tistory.com/236)
2. 백업의 종류 복구 모델 너 뭐니? (http://maystyle.tistory.com/238)
3. 백업과 복구 쉽게 않되겠니? (http://maystyle.tistory.com/239)
4. 백업 전략 과 그에 따른 복원 하기

예를 들어 설명하는 것이 쉽기 때문에 예를 들어 설명하도록 하겠다.
우리 회사 매주 일요일 DB에 대한 전체 백업을 한다. 매주 화요일과 목요일은 차등 백업을 받는다. 트랜잭션 로그의 경우 매일 받고 있다.

자 금요일 오후 7시 정도에 장애가 발생했다.
당신은 DBA다. 어떻게 복구 하겠는가?

1. 로그가 저장되는 Disk가 문제가 없다면 No_truncate 옵션을 이용하여 로그를 백업을 받는다.
2. 일요일에 받은 전체 백업 본을 With Norecovery 를 선택하여 복원 한다.
3. 목요일에 받은 차등 백업 복은 With Norecovery 를 선택하여 복원 한다.
4. 목요일 ~ 금요일에 받은 트랜잭션 로그 백업 본을 With Norecovery 를 선택하여 복원 한다.
5. 금요일 오후 7시에 백업 받은 트랜잭션 로그를 복원한다.

신고
  백업과 복구 쉽게 않되겠니? 
작성일시 : 2008.01.21 17:02 | 분류 : SQL Server/Administration | 태그 : backup, Microsoft sql server 2005, restore

참고 :
Inside Microsoft SQL Server 2000,
전문가로 가는 지름길 SQL Server 2000/2005,
포켓 컨설턴트 SQL 2005
http://sqlworld.pe.kr
MOC 및 MSDN 자료들....
제 글의 메인은 Inside Microsoft SQL Server 2000를 기반으로 작성되고 있습니다...
거의 copy 하는 수준으로...^^;; Windows internals에 비해 참 읽기 편합니다.

목차------------------------------------------------------------------------
DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB 공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까? (http://maystyle.tistory.com/223)
4. 트랜잭션 로그의 기록과 복구 (http://maystyle.tistory.com/225)
5. 데이터 파일이 커질 때는 무슨일이 일어날까? (http://maystyle.tistory.com/231)
6. 데이터 파일은 어떻게 생겼을까? (http://maystyle.tistory.com/233)
7. 실제 Data 및 Log 파일 뜯어 보기 (예정 중)
DB 공부하기 4번째 : Backup 과 Restore
1. 무엇을 Backup 받아야 하나 (시스템 데이터베이스 소개)? (http://maystyle.tistory.com/236)
2. 백업의 종류 복구 모델 너 뭐니? (http://maystyle.tistory.com/238)
3. 백업과 복구 쉽게 않되겠니?

Microsoft SQL Server Management Studio 를 통한 백업 및 복구
본 내용 이후 백업과 복원을 Microsoft SQL Server Management Studio를 이용하는 부분은 생략 토록 하겠다.

백업 받고자 하는 DB에서 마우스 오른쪽 버튼을 누른 후 작업 > 백업을 선택한다.

백업 유형에 '전체'를 선택한 후 확인을 클릭한다.

만약 차등 백업 및 트랜잭션 로그 백업을 할 경우 백업 유형에서 선택해 줄 수 있다.

옵션에서 기존 백업에 추가할 지 백업 완료시 확인 하는등의 안정성 설정을 어떻게 할지를 확인한다.

복원 또한 동일하게 작업 > 복원 으로 선택한다.

만약 백업 복원 이후 로그를 복원해야 한다면 restore with norecovery 옵션을 사용하여 복원 한다.

해당 옵션을 사용하여 복원 하게 되면 복원 에 트랜잭션 로그 항목이 생성 된다.

복원시 특정 시간 또는 특정 표시된 트랜잭션 단위로 복원이 가능하다.

아주 쉽게 구성된 내용이 있어 추천한다.
http://www.sqlworld.pe.kr/mboard/mboard/mboard.asp?board_id=sql02&group_name=board

신고
  데이터 파일이 커질 때는 무슨일이 일어날까? 
작성일시 : 2008.01.18 10:21 | 분류 : SQL Server/Kernel | 태그 : Microsoft sql server 2005

출처 : Inside Microsoft SQL Server 2000
Windows Internals 와 비교해서 꽤 해석이 월활하게 되어 있습니다. 강추 드립니다...^______^!
SQL 2005버젼에서 변경된 내용을 동시에 이야기해 드릴 생각입니다.
DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB 공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까? (http://maystyle.tistory.com/223)
4. 트랜잭션 로그의 기록과 복구 (http://maystyle.tistory.com/225)
5. 데이터 파일이 커질 때는 무슨일이 일어날까?

데이터베이스는 테이블 및 인덱스와 같은 사용자의 개체들의 영구적 저장소로 사용될 사용자 정의 공간으로 구성되어 있다. 이 공간은 운영체제 파일에 할당된다.

데이터베이스는 논리적 페이지(8K)로 나눠어져 있고, 각 파일 내에서 페이지들은 0 부터 x까지 연속적으로 번호가 매겨져 있다. 상한 값 x에는 데이터 베이스 ID, 파일 ID, 페이지 번호를 지정함으로써 어떤 페이지든 참조 할 수 있다. 만약 데이터가 꽉차서 새로운 공간이 추가 된다면 이는 x+1 페이지가 된다. 그리고 DBCC Shrinkdatabase 및 DBCC  Shrinkfile 명령어를 통해 데이터베이스를 축소 시킬 경우 페이지들은 가장 번호가 높은  페이지 부터 순서대로 제거 되어 항상 연속적으로 저장되도록 한다.

create database 를 통해 새 데이터베이스를 만들 때 고유한 dbid 가 주어지고, 이 데이터베이스에 대한 새 행이 master..sysdatabases  테이블에 삽입 된다.

 
name : 데이터베이스 이름
dbid : 고유한 데이터베이스ID, 데이터베이스가 삭제될 때 다시 사용될 수 있다.
sid : 데이터베이스 생성자 ID
mode : 잠금 모드
status : DB가 읽기 전용인지, 오프라인 상태인지 단일 사용자 모드인지를 알려주는 비트 마스크의 일부
status2 : 역시 데이터베이스 옵션

하지만 대충 DB들을 살펴보기는 Sp_helpdb 가 편하다.

status를 굳이 볼 필요가 없는게. 다 풀어서 알려준다.

신고
  트랜잭션 로그의 기록과 복구 
작성일시 : 2008.01.15 23:33 | 분류 : SQL Server/Kernel | 태그 : Microsoft sql server 2005, 복원, 트랜잭션

출처 : Inside Microsoft SQL Server 2000
Windows Internals 와 비교해서 꽤 해석이 월활하게 되어 있습니다. 강추 드립니다...^______^!
SQL 2005버젼에서 변경된 내용을 동시에 이야기해 드릴 생각입니다.

DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (
http://maystyle.tistory.com/218)
DB
공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (
http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (
http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까? (http://maystyle.tistory.com/223)
4. 트랜잭션 로그의 기록과 복구

트랜잭션 로그는 데이터베이스의 모든 변경 사항들을 기록하고, 시스템이 고장났을 경우 또는 App가 특별히 명령을 내렸을 때 변경된 내용들이 Roll back 되거나 Roll forward 될 수 있도록 변경된 정보를 저장한다. 데이터베이스 업데이트를 수행하는 모듈들은 변경 사항들을 정확히 기술하는 로그 항목들을 기록한다. 각 로그 항목들에는 고유한 값을 갖는 로그 시퀀스 번호(LSN) 라벨이 붙는다. 시스템 복구 동안에 트랜잭션의 모든 부분들이 Roll back가 Roll forward를 위해 쉽게 검색 될 수 있도록 동일한 트랜잭션의 일부가 되는 항목들은 서로 연결되어 있다.

버퍼 관리자는 변경된 데이터베이스가 기록되기 전에 트랜잭션 로그가 기록되게 한다. 이것이 가능한 것은 SQL Server가 LSN을 통해 로그에 현재 위치를 유지하기 때문이다. 페이지가 변경될 때마다 이 변경에 대한 로그 항목에 대응하는 LSN이 데이터 페이지의 해더에 기록된다. 페이지에 있는 LSN이 로그에 기록된 마지막 페이지의 LSN보다 작을 때만 변경된 페이지가 디스크에 기록될 수 있다. 버퍼 관리자는 로그 페이지들이 특정 순서로 기록되게 한다. 이것은 시스템이 고장났을 때 언제 고장 났는지 상관없이 어느 로그 페이지들이 처리되어야 하는지를 분명하게 알 수 있게 해준다. 트랜잭션을 위한 로그 레코드들은 커밋 통보가 클라리언트 프로세스에게 전달되기 전에 디스크에 기록되지만, 변경된 실제 데이터는 물리적으로 테이터 페이지에 기록되지 않았을 것이다. 따라서 로그에 기록하는 것은 동기적으로 이루어져야 하지만 (SQL Server는 로그가 디스크에 안전하게 있다는 것을 알 수 있도록 로그 기록이 완료되기를 기다려야한다.), 데이터 페이지에 기록하는 것은 비 동기적으로 이루어질 수 있다. 즉 데이터 페이지에 기록하는 것은 운영체제에게 게시될 필요만 있고, SQL Server는 나중에이 작업이 완료 되었는지 확인 할 수 있다. 로그가 작업을 취소하기 위해 필요한 모든 정보를 갖고 있기 때문에 데이터 페이지에 기록하는 작업은 즉시 완료될 필요가 없다. 이것은 쓰기 작업이 완료되기 전에 시스템이 고장날 경우에도 마찬가지이다. 시스템이 다음 작업을 하기전에 모든 I/O 요청들이 완료되기를 기다려야 한다면 시스템은 지금 보다 훨씬 더 느려질 것이다.

로그에는 각 트랜잭션의 시작과 끝을 구분하는 정보가 들어간다. 트랜잭션이 저장점을 사용할 경우에는 저장점 정보도 들어간다. 시작 정보와 끝 정보 중간에 데이터 변경에 관한 정보가 있다. 이정보는 실제 "before" 데이터와 "after" 데이터 값 형태로 되어 있을 수도 있다. 또는, 이 값들이 유추될 수 있도록 수행된 동작을 참조할 수도 있다. 일반적인 트랜잭션의 끝에는 Commit 레코드가 표시되는데 이것은 트랜잭션이 데이터베이스에 반영되어야 하거나, 필요할 경우에는 다시 수행되어야 한다는 것을 나타낸다. 사용자의 롤백(roll back)이나 리소스에러 등의 문제 때문에 일반 런타임 중에 취소된 트랜잭션은 처음 데이터 변경을 되돌리는 변경작업을 적용함으로써 실제로 동작을 취소한다. 이변경들에 대한 레코드는 로그에 기록되고 "compensation log records"로 표시된다. 트랜잭션이 커밋했지만 데이터가 데이터 페이지에 기록되기 전에 시스템이 고장나면 트랜잭션이 복구되어야 한다. 복구 과정은 시스템 시작시에 자동으로 실행된다. 복구는 시스탬 시작 시의 기능이다. 그러나 복구는 백업된 데이터배이스를 불러들이는 마지막 단계 동안에도 실행되고, 수동으로 강제적으로 실행될 수 있다.

복구는 재실행 동작과 취소 동작 모두를 수행한다. 재 실행 동작에서 로그는 조사되고 변경된 것들은 이미 데이터베이스에 반영되었는지 검사한다. 변경된 내용이 데이터베이스에 없으면 로그에 있는 정보를 사용하여 적용 동작이 다시 수행된다. 트랜잭션이 완전하게 완료되지 않았다면 취소할 때 트랜잭션에 의해 부분적으로 변경된 것들이 제거되어야 한다.

복구 과정 동안에 마지막 검사점 이후에 일어났거나 진행중인 변경사항들만이 재실행되거나 취소된다. 복구 알고리즘에는 세 단계가 있고, 이단계들은 트랜잭션 로그에 있는 마지막 검사점 레코드를 중심으로 하여 있다.

복구 계획
1 단계 : 분석
첫번째 단계는 트랜잭션 로그에 있는 마지막 검사점 레코드에서 시작하여 앞으로 진행하는 것이다. 이 단계는 시스템 정지 시에 변경되어 있었을 수도 있는 페이지들로 구성된 DPT(dirty page table)을 알아내고 구성한다. 시스템 정지 시에 커밋되지 않은 트랜잭션들로 구성된 활성 트랜잭션 테이블이 만들어진다.
2 단계 : 재실행
이 단계는 데이터베이스를 시스템 정지 시의 상태로 되돌린다. 이 포워드 진행의 시작 지점은 DPT에 있는 모든 LSN들의 최소값이다. 복구될 필요가 없는 페이지들을 읽는 것을 피하고 로그에 기록되기 않은 변경 사항들을 덮어쓴느 것을 피하기 위해 DPT가 사용된다.
3 단계 : 취소
이 단계는 각 트랜잭션 마다 트랜잭션 로그에 있는 항목들간의 연결을 따라가면서 로그의 끝에서부터 뒤쪽 방향으로 움직인다. 시스템 정지 시에 커밋되지 않은 트랜잭션은 취소된다. 이것은 변경된 내용들이 실제로 데이터베이스에 반영되지 않도록 하기 위한 것이다.
 

신고
  로그는 어떻게 쓰여질까? 
작성일시 : 2008.01.15 17:04 | 분류 : SQL Server/Kernel | 태그 : Microsoft sql server 2005, 로그 관리자, 로그 기록자, 트랜잭션 로그

DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB
공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까?

변경된 모든 것들은 버퍼 관리자에 의해 트랜잭션 로그로 "미리 기록"된다.이것은 변경된 데이터 페이지가 기록되기 전에 트랜잭션을 위한 로그 레코드가 항상 디스크에 기록된다는 것을 의미한다. 미리 쓰기 로깅은 Hard Disk가 고장나지 않는 한 서버가 완전히 망가진 상태에서도 복구 할 수 있도록 해 준다. 트랜잭션이 디스크의 트랜잭션 로그에 들어 있지 않으면 프로세스는 결코 트랜잭션이 커밋되었다는 것을 통보 받지 못한다. 이런 이유로 트랜잭션 로그 기록은 동기적으로 이루어진다. 데이터 페이지에 기록되는 것은 통보를 기다리지 않고 비동기적으로 이루어 질 수 있다. 만약 고자장 나면 트랜잭션 로그에 있는 정보를 사용하여 트랜잭션을 취소하거나 다시 수행할 수 있다.

로그 관리자는 트랜잭션 로그 레코드를 디스크에 기록하기 전에 메모리 내에서 이것의 형식을 지정한다. 로그 관리자는 이 로그 레코드들의 형식을 지정하기 위해 로그 캐시라고 불리는 연속된 메모리 영역을 유지한다. SQL Server 에서 로그 레코드는 데이터 페이지 및 인덱스 페이지와 버퍼 풀을 공유하지 않는다. 로그 레코드는 로그 캐시에만 유지된다.

로그 관리자는 이 캐시를 2개를 가지고 하나씩 채우고 비우고 하는 형식으로 보관하고 로그 기록자 (log writer)는 캐쉬가 비워질때 flushQueue를 조사하면서 로그 캐시를 한번에 디스크로 보내는 전용 스레이드 이다.

종합하자. 일단 데이터 파일에 저장되는 경우에는 Check Point를 만나는 경우다. 로그에 기록되는 경우는 로그 캐쉬의 내용이 Flush되는 순간이다. 보통은 거의 동기적으로 이루어진다.

+ @
로그는 VLF 라는 저장단위로 구성된다. 가상 로그 파일의 최소 단위는 256KB로써, 토랜잭션 로그가 가장 작은 크기인 512KB일때 두개의 가상로그 파일로 구성되며, 처음에 로그 파일을 500MB로 만들면 50MB의 가상로그 파일 10개로 구성된다. 그리고 이런 로그 파일은 circular queue 처럼 동작하는데... 문제는 이 로그 파일이 조금씩 증가하면 작은 가상 로그 파일들이 많이 만들어지고, 이것은 성능에 않좋은 영향을 미친다는 것이다. 10MB 단위로는 늘려주자...^^v

신고
  데이터 파일은 어떻게 쓰여질까? 
작성일시 : 2008.01.15 15:12 | 분류 : SQL Server/Kernel | 태그 : 3502, Checkpoint, Microsoft sql server 2005, sp_configure

DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB
공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까?

시스템 시작 시 데이터베이스가 복구될 때 검사점 동작은 SQL이 수행해야 할 작업의 양을 최소화 시킨다. 검사점은 데이터베이스 별로 실행되며 현재 데이터베이스에서 변경된 페이지들을 디스크에 기록한다. 검사점 동작이 실행될 때 SQL Server는 검사점 레코드를 트랜젝션 로그에 기록한다.

검사점 발생 상황
- 명시적인 Checkpoint 명령어 실행
- 로그 용량이 70%이상 찼고 데이터베이스가 SIMPLE 모드 일경우
- 긴 복구 시간이 예상될 경우 (SQL 기본값은 1분)

검사점은 sp_configure 의 복구 간격 옵션을 사용하여 조정이 가능하다.물론 시작시 -T3502 플래그를 설정하여 검사점 실행시 이벤트 로그에 로그를 남길 수 도 있다.

신고
 Prev   1   2   Next 

티스토리 툴바