달력

122018  이전 다음

  •  
  •  
  •  
  •  
  •  
  •  
  • 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
  • 31
  •  
  •  
  •  
  •  
  •  


[오류메세지]
연결된 서버 "SMC_WMS_TEST"의 OLE DB 공급자 "SQLNCLI10"이(가) 분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다.

[해결방법]
EXEC
sp_serveroption @server=N'LGWMS', @optname=N'remote proc transaction promotion', @optvalue=N'FALSE'
Posted by 알이씨


exec sp_replmonitorhelpmergesession @publisher = N'OMC-SRV1', @publisher_db = N'DB800', @publication = N'DB_Pub'
Posted by 알이씨


병합복제 동기화 시간 주기 변경

사용자 삽입 이미지

사용자 삽입 이미지


사용자 삽입 이미지



사용자 삽입 이미지
Posted by 알이씨


-- 일정 개수 이전의 데이터를 확인하는 SQL
SELECT * FROM DUMMY_TABLE10
WHERE D_VAL1 < ALL (SELECT TOP 100 D_VAL1 FROM DUMMY_TABLE10 ORDER BY D_VAL1 DESC)
ORDER BY D_VAL1 DESC;

위 질의를 응용하면 다음과 같다.

-- 일정 시간 이전의 데이터를 모두 삭제, 최근의 데이터 일정개수는 남겨두고 과거의 데이터를 삭제한다.
-- D_VAL1이 날짜 형식이 됨
DELETE FROM DUMMY_TABLE10
WHERE D_VAL1 < ALL (SELECT TOP 100 D_VAL1 FROM DUMMY_TABLE10 ORDER BY D_VAL1 DESC);
Posted by 알이씨


키를 변경하기 위해 중복된 데이터를 삭제 하는 SQL

원래는 LRD, DATE는 유일해야 하나 버그로 인하여 중복된 데이터가 들어간 경우 사용

SELECT LRD, DATE FROM AUTO_RPT
GROUP BY LRD, DATE
HAVING COUNT(*) > 1

-- 결과 확인 후 아이디 기록

DELETE FROM AUTO_RPT
WHERE LRD = '0' AND DATE IN
(SELECT DATE FROM AUTO_RPT
GROUP BY LRD, DATE
HAVING COUNT(*) > 1

-- 기존의 키 삭제
ALTER TABLE dbo.AUTO_RPT
DROP CONSTRAINT PK_AUTO_RPT
GO

-- 새로운 키 생성
ALTER TABLE dbo.AUTO_RPT ADD CONSTRAINT
 PK_AUTO_RPT PRIMARY KEY CLUSTERED
 (
 LRD,
 DATE
 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

Posted by 알이씨


현재 버퍼 풀을 모두 비웁기
DBCC DROPCLEANBUFFERS;

procedure cache 를 비우기
DBCC FREEPROCCACHE;

Posted by 알이씨


AdventureWorks 데이터베이스를 디스크 c:\dbBackup\08_01_15.bak로 백업
BACKUP DATABASE AdventureWorks TO disk = 'c:\dbBackup\08_01_15.bak'

AdventureWorks 데이터베이스를 디스크 c:\dbBackup\08_01_15.bak에서 복원
RESTORE DATABASE AdventureWorks FROM disk = 'c:\dbBackup\08_01_15.bak'

Posted by 알이씨


MSSQL 2005에서 복구 모델에 대한 내용이다.

중요하게 알아둬야할 내용이므로 숙지하자!!! -0-;

MSDN 참조
===========================================================================================
복구 모델의 종류

사용할 수 있는 복구 모델은 3가지로 단순, 전체 및 대량 로그 복구 모델이 입니다.

  • 단순 복구 모델

    이 모델은 대부분의 트랜잭션을 최소로 기록하므로 시스템 충돌 또는 데이터 백업의 복원 이후 데이터베이스 일관성을 확보하는 데 필요한 정보만 기록합니다. 최소 기록 작업에 대한 자세한 내용은 최소 로그 작업을 참조하십시오.

    오래된 트랜잭션이 커밋되어 더 이상 로그가 필요하지 않는 경우 로그가 잘립니다. 이러한 로그 잘림으로 인해 트랜잭션 로그의 백업과 복원이 필요하지 않습니다. 그러나 이러한 간소화 때문에 재해가 발생하는 경우 데이터를 손실할 위험도 있습니다. 로그 백업을 사용하지 않으면 데이터베이스는 가장 최근의 데이터 백업 시간까지만 복구될 수 있으므로 SQL Server Enterprise Edition을 사용하는 경우 이러한 점을 고려해야 합니다.

    또한 개별 데이터 페이지를 복원하는 기능은 지원되지 않습니다. 자세한 내용은 단순 복구 개요를 참조하십시오.

    중요:
    단순 복구 모델은 최근의 변경 내용을 손실해서는 안 되는 프로덕션 시스템의 경우에는 적합하지 않습니다. 이러한 경우에는 전체 복구 모델을 사용하는 것이 좋습니다.
  • 전체 복구 모델

    이 모델은 모든 트랜잭션을 완전히 기록하며 모든 트랜잭션 로그 레코드를 백업할 때까지 유지합니다. Enterprise Edition of SQL Server에서 전체 복구 모델을 사용하면 실패 후 비상 로그가 백업되었다고 가정하여 실패 지점까지 데이터베이스를 복구할 수 있습니다. 자세한 내용은 전체 복구 개요를 참조하십시오.

  • 대량 로그 복구 모델

    이 모델은 대부분의 대량 작업(예: 인덱스 생성 및 대량 로드)은 최소로 로깅하지만 다른 트랜잭션은 완전히 로깅합니다. 최소 기록 작업에 대한 자세한 내용은 최소 로그 작업을 참조하십시오.

    대량 로그 복구는 대량 작업의 성능을 향상시키며 전체 복구 모델의 보완하기 위해 사용됩니다. 대량 로그 복구 모델에서는 일부 제한 사항은 있지만 모든 복구 형식을 지원합니다. 자세한 내용은 대량 로그 복구 개요를 참조하십시오.

복구 모델이 인덱스 작업의 로깅에 어떤 영향을 주는지에 대한 자세한 내용은 인덱스 작업에 대한 복구 모델 선택을 참조하십시오.

데이터베이스의 복구 모델을 변경하는 방법은 단순 복구 모델에서 전환을 참조하십시오.

다른 복구 모델에서 지원하는 복원 작업에 대한 자세한 내용은 복구 모델 및 지원되는 복원 작업을 참조하십시오.

Posted by 알이씨


USE master;
--Ensure the database is using the simple recovery model:
ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE;
GO
-- Create a logical backup device for the full AdventureWorks backup.
EXEC sp_addumpdevice 'tape', 'DumpTape', '\\.\TAPE0';
GO
-- Back up the full AdventureWorks database:
BACKUP DATABASE BackupDB TO DumpTape
  WITH FORMAT, NOUNLOAD;
GO

--Restore the last of full backup (from backup set 1):
RESTORE DATABASE BackupDB FROM DumpTape
   WITH RECOVERY, NOUNLOAD, KEEP_REPLICATION
GO

--Restore the full backup (from backup set 1):, FILE = 2(Backup Pos)
use master;
RESTORE DATABASE [BackupDB] FROM  TAPE = N'\\.\TAPE0' WITH  FILE = 2,  NOUNLOAD,  STATS = 10

OR

use master;
RESTORE DATABASE [BackupDB] FROM  DumpTape WITH  FILE = 2,  NOUNLOAD,  STATS = 10;

-- List backup set
RESTORE HEADERONLY FROM  [DumpTape] WITH  NOUNLOAD
======================================================================
테스트 후 결과
- 백업 및 복구를 완료하고 난 후엔 테이프를 뱉어버린다.(항상 테이프가 삽입되어 있는지 확인 후 작업)
   . NOUNLOAD 옵션을 주면 뱉지 않는다. 이 옵션을 주도록 하자!!
- 백업할 때 WITH FORMAT 옵션을 주면 기존 데이터를 모두 삭제후 백업한다.
- 복구 시에 use master; 를 하지 않으면 다른 세션에서 사용중이라고 복구를 하지 않는다.(테스트 필요)
  . 다른 세션이 중일 때는 여전히 복구를 못함, 서버를 리붓 시키거나 세션을 종료시키는 작업 필요
- 특정 날짜에 대하여 복구를 할 때는 RESTORE HEADEONLY를 통해 백업 파일 위치를 알아내서 복구한다.
  . Position 필드에 백업 파일 포지션이 나옴
  . FILE = position 으로 넣어주면 됨
Posted by 알이씨


MSSQL 2005에 있는 병합복제에 대해서 정리를 하였다.

스크린샷 찍느라 죽는줄 알았다.

자세히 해놔야 다음에 또 안까먹지...

특이한 사항은 미러링과 마찬가지로 서비스 계정을 맞춰줘야하는 것이다.

안그럼 로그인 안된다고 때쓴다. 물론 안맞추고 어째어째 하는 방법을 보긴했는데

복잡하기만 하고 그냥 이방법이 제일 깔끔하다.(사실 이 방법밖에 못하겠다.)

아래 과정은 같은 네트워크 상의 두개 서버를 병합복제 하는 예이다.
================================================================================

1. 서비스 구동 계정 변경

아래 그림처럼 필자는 Administrator로 변경하였다. 각자 맞게 변경하면 될것 같고.
이 계정 그대로 병합 복제 설정까지 다 한다.
사용자 삽입 이미지


자 변경된 이후에 다음과 같이 바뀌었다. 서비스가 어디 있는지는 알테고..
사용자 삽입 이미지


2. 구독자 끌어오기를 위해 게시자 네트워크 공유 설정

같은 네트워크에 있는 경우 게시가 네트워크 공유를 설정하면 구독자가 새 데이터에 대해 끌어오기를 하여
게시자 측의 부하를 줄여줄 수 있다. 네트워크 공유를 해야하는 폴더는 DB의 스냅샷 폴더이다.
다음 위치에 있는 폴더를 네트워크 공유를 한다.(물론 다른 환경에서는 이 경로가 달라지겠지만 폴더 이름은
그대로이다.)
사용자 삽입 이미지
 

3. 배포자 설정

서버 A를 배포자로 만든다. SQL Management로 접속한 후 아래 그림 처럼 선택!!
접속할 때는 윈도우 로그인으로 Administrator로 DB에 접속하였다.
사용자 삽입 이미지
 
여기서는 그냥 다음~~
사용자 삽입 이미지
 
자 네트워크 공유를 해놓았다면 아래 그림처럼 변경하고.
서버 A의 이름이 OMC-SRV1이라서 다음 그림처럼 된다.
사용자 삽입 이미지
 
배포 데이터베이스 이름을 넣는 곳엔 적당히 넣음된다. 아래 데이터베이스 파일폴더도 각자의 환경에 맞게~~
사용자 삽입 이미지
 
이 예에서는 배포 서버가 게시 서버도 되므로 아래 그림처럼 체크하고 간다~
만약 게시자가 다르다면 추가 버튼을 눌러서 설정해야하는데 여기서는 안한다.
사용자 삽입 이미지
 
배포 마지막 단계다. 쉽다. 그냥 다음 누르면 된다. -_-;
사용자 삽입 이미지
 
이제 마음속으로 잘되라~ 잘되라~~ 를 3번 외운다. 주문을 외워야 배포 구성이 잘된다.(훗~~ -ㅅ-)
사용자 삽입 이미지
 


4. 게시자 설정

배포자도 구성이 다 되었고 이제 게시자를 설정해보자!!
아래 그림처럼 로컬 게시에 마우스 오른버튼~ 새 게시~
사용자 삽입 이미지
 
DUMMY_DB는 미리 만들어놓은 DB이다. 여러개 만들어두었으면 여러개 나올테니 적당한 넘 골라잡고~
사용자 삽입 이미지
 
병합복제니까 병합 게시로 선택~~
여기서 잠깐~~ 다른 복제 하려면 여기서 다른거 고르면 된다.. 아래 그림처럼 복제 방법은 여러가지이다.
사용자 삽입 이미지
 
구독자가 어떤 DB인가를 설정하는 것인데. 필자의 두 서버는 둘다 SQL 2005이므로 아래와 같이 설정했다.
사용자 삽입 이미지
 
게시할 테이블을 선택하고~~
사용자 삽입 이미지
 
이 부분 중요하다. 게시 마법사가 위에서 선택한 테이블에 Unique 타입의 필드를 하나 자동으로 추가한다.
나중에 게시 마법사가 끝나고 나서 보면 알겠지만 마지막 필드에 못보던 넘이 추가가 되어있다.
이넘은 데이터가 변경되었나 되지 않았나~ 양방향 복제 이므로 충돌검사 등으로 이용된다.
DB API를 개발할 때, 특히 InsertUpdate를 할 때 새로 추가된 필드를 고려해야한다.
사용자 삽입 이미지
 
이 부분은 그냥 다음~ 필터링 할 일이 있을라나?
사용자 삽입 이미지

스냅숏? 스냅샷? 을 구성한다. 이부분도 그냥 디폴트로 다음~
사용자 삽입 이미지

스냅숏 에이전트 보완 설정이다. 여러가지 방법이 있겠지만  쉽게 가보자. 보안 설정 버튼 누르고
사용자 삽입 이미지

SQL Server 에이전트 서비스 계정으로 실행
다음 Windows 계정으로 실행 해서 바꿀 수도 있지만... 그 이후는 각자 알아서~~
사용자 삽입 이미지

자 요로코롬 바뀌었다. 필자는 서비스 구동 계정을 Administrator로 해놨으니 아마 이넘으로 되겠지~
사용자 삽입 이미지

드디어 게시 만든다.
사용자 삽입 이미지

게시 이름을 그냥 알아서 적당히~
사용자 삽입 이미지

배포와 마찬가지로 마음속으로 3번 외운다. 잘되라 잘되라~~
사용자 삽입 이미지

오호 생겼다. 게시!!!
사용자 삽입 이미지


5. 구독자 설정

구독자는 다른 서버에서 설정해야한다.
로컬 구독에서 새 구독을~

사용자 삽입 이미지

자 게시자 찾자.
사용자 삽입 이미지

게시자가 있는 넘으로 연결하자.
필자는 두 서버를 똑같이 해놨기 때문에 Windows 인증으로 무리 없이 들어간다.
사용자 삽입 이미지

오 게시자 나온다!!!
사용자 삽입 이미지

자 끌어오기 구독 선택~~
이넘을 하려면 위에서 말했던 것 처럼 네트워크 공유 해줘야한다.
사용자 삽입 이미지

구독 데이터베이스 설정하시고~
처음에는 없어서 DB를 만들어야한다.
아래 그림의 구독 데이터베이스에서 선택하여 만들 수 있다.
사용자 삽입 이미지

보안 설정이다. 이번에도 쉽게 간다!!
사용자 삽입 이미지

게시자에서 했던것 처럼 그냥 SQL Server 에이전트 서비스 계정으로 실행~
사용자 삽입 이미지

그럼 아래 그림처럼 설정이 완료되고~
사용자 삽입 이미지

에이전트는 항상 실행되게 놔두자~
사용자 삽입 이미지

병합복제는 초기화 꼭 해줘야한다. 즉시!!
사용자 삽입 이미지

요건 클라이언트로 해놓고. 충돌 해결 우선 순위에 대한 내용은 이 예제를 살짝 벗어나니 패스~
사용자 삽입 이미지

드디어 구독자 설정 끝이다. 만들자~
사용자 삽입 이미지

수리수리 마수리~ 잘되어라~~
사용자 삽입 이미지

오호 생겼다. 구독~
상태를 보기 위해 동기화 상태 보기를 해보자.

사용자 삽입 이미지


검색 중이시란다. 빨랑 빨랑 해라!!
사용자 삽입 이미지

오 드디어 폴링 상태로 들어갔다.
아래 그림처럼 60초마다 한번씩 게시 서버에서 변경된 내용이 있나 없나 확인해주신다.
그리고 그때마다 내 서버에 변경된 내용도 알려주신다.
참 고마운넘이군!!!
사용자 삽입 이미지

데이터 변경 하고 요리저리 테스트 하는건 각자가 알아서 하면 될거 같고.
정리해야지 했는데 겨우 했네.
다른 복제들도 이와 비슷하게 진행된다. 오히려 더 쉬울지도....
미러링에 비하면야 무지 쉽다. 복제!!!
================================================================================
최초 작성일 : 2007년 12월 20일 목요일
Posted by 알이씨