SQL Server : 복제에서 로그 리더가 작동하는지 확인하는 쿼리 및 재부팅 절차
로그 리더가 실행 중인지 확인 ①
use distribution
select count(*) from dbo.MSrepl_commands with(nolock)
push/pull 관계없이 게시자 측에서 실행합니다. 로그 리더가 읽은 복제 대상 명령을 저장하는 테이블이므로 몇 초에서 몇 분마다 값이 변경되었을 것입니다.
여기가 예를 들면 10분 정도 변화하지 않는 경우는 로그 리더가 정지하고 있거나, 데이터 갱신이 일절 되어 있지 않을 가능성이 있다.
로그 리더가 실행 중인지 확인 ②
select top 10 last_request_end_time, * from sys.dm_exec_sessions where program_name like '%logreader%'
게시자 측의 모든 DB에서 실행. 로그 리더에 대한 세션이 두 개 있어야 합니다.
last_request_end_time이 마지막으로 로그 리더가 실행된 날짜와 시간. 한쪽은 몇 분 단위로 밖에 가동하지 않지만, 한쪽은 몇 초 단위로 점점 가동 일시가 갱신되어 갈 것.
이 쿼리를 실행했을 때, last_request_end_time이 2행 모두 10분 이상 전이면, 로그 리더가 정지하고 있을 가능성을 의심한다.
성능 카운터에서 확인
select top 1000 * from sys.dm_os_performance_counters
where object_name like '%replication%'
and counter_name like '%cmds%'
--and instance_name in ('***')
퍼블리셔측에서 확인한다. cntr_value의 값이 변화하고 있으면 복제 움직이고 있다. 정상적으로 실행 중인 경우에도 이 카우 "프로세스가 실행 중이고 서버로부터의 응답을 기다리고 있습니다."라는 메시지가 남아 있습니다. 몇 분에 한 번 정도의 카운트업 빈도의 경우가 있었다. 그 때문에, 보조적인 정보로서 확인할 정도로 좋을지도.
로그 리더 에이전트 프로그램이 실행 중인지 확인
DB 서버에 로그인하고 작업 관리자에서 "legread.exe"가 "실행 중"인지 확인합니다.
로그 리더 에이전트를 중지하면 작업 관리자에서 사라집니다.
실제로 로그 리더가 멈출 때의 거동
-- 直近 6 時間の情報を取得
DECLARE @targetTime datetime
SET @targetTime = DATEADD(mm, -6, GETDATE())
SELECT
dh.time,
da.id,
da.local_job,
da.publication,
pd.publisher_db,
da.subscriber_db,
da.name,
da.subscriber_name,
CASE dh.runstatus
WHEN 1 THEN '開始'
WHEN 2 THEN '成功'
WHEN 3 THEN '実行中'
WHEN 4 THEN 'アイドル'
WHEN 5 THEN '再試行'
WHEN 6 THEN '失敗'
END AS runstatus,
rt.entry_time,
dh.start_time,
dh.comments,
dh.duration,
dh.current_delivery_rate,
dh.current_delivery_latency,
dh.delivered_commands,
dh.average_commands,
dh.delivery_latency,
dh.total_delivered_commands,
dh.xact_seqno,
dh.error_id
FROM
distribution.dbo.MSrepl_transactions AS rt
LEFT JOIN
distribution.dbo.MSdistribution_history AS dh
ON
dh.xact_seqno = rt.xact_seqno
LEFT JOIN
distribution.dbo.MSpublisher_databases AS pd
ON
pd.id = rt.publisher_database_id
LEFT JOIN
distribution.dbo.MSdistribution_agents AS da
ON
da.id = dh.agent_id
WHERE
dh.time IS NOT NULL
AND
dh.time >= @targetTime
ORDER BY
dh.time DESC
※ SE 잡기 의 오자와씨에게 작성해 주셨습니다.
쿼리 실행 결과가 "프로세스가 실행 중이고 서버로부터의 응답을 기다리고 있습니다."라는 메시지가 남아 있습니다.
수동으로 로그 리더 에이전트를 다시 시작할 때의 포인트
중단되었다고 판단되면 로그 리더를 다시 시작해야 할 수 있습니다.
그 순서와 조심하는 포인트를 정리해 둡니다.
0. 다음 쿼리를 게시자 측 서버의 어느 DB에서도 좋기 때문에 실행. 2레코드 취할 수 있는지 확인
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
1. 에이전트 중지
2. 즉시 다시 시작하지 않고 다음 쿼리를 다시 실행합니다. 0 레코드가 되는 것을 확인.
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
→ 이때 일시적으로 1레코드만 취득할 수 있는(=곧은 정지하지 않는) 경우가 있다.
그 경우는 1-2분 기다려 다시 쿼리를 실행하면, 0 레코드가 된다(=완전 정지)
3. 에이전트 재개
재개 후, 일시적으로 로그 리더가 활발하게 가동하는 것으로 복제 에이전트 주위에서 블로킹이 일어나는 경우가 자주 있지만,
이 블로킹에 관해서는 기다리고 있으면 자연 해소되기 때문에 문제 없다.
Reference
이 문제에 관하여(SQL Server : 복제에서 로그 리더가 작동하는지 확인하는 쿼리 및 재부팅 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/maaaaaaaa/items/f6506fcd62bcc47e4f03
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
use distribution
select count(*) from dbo.MSrepl_commands with(nolock)
select top 10 last_request_end_time, * from sys.dm_exec_sessions where program_name like '%logreader%'
게시자 측의 모든 DB에서 실행. 로그 리더에 대한 세션이 두 개 있어야 합니다.
last_request_end_time이 마지막으로 로그 리더가 실행된 날짜와 시간. 한쪽은 몇 분 단위로 밖에 가동하지 않지만, 한쪽은 몇 초 단위로 점점 가동 일시가 갱신되어 갈 것.
이 쿼리를 실행했을 때, last_request_end_time이 2행 모두 10분 이상 전이면, 로그 리더가 정지하고 있을 가능성을 의심한다.
성능 카운터에서 확인
select top 1000 * from sys.dm_os_performance_counters
where object_name like '%replication%'
and counter_name like '%cmds%'
--and instance_name in ('***')
퍼블리셔측에서 확인한다. cntr_value의 값이 변화하고 있으면 복제 움직이고 있다. 정상적으로 실행 중인 경우에도 이 카우 "프로세스가 실행 중이고 서버로부터의 응답을 기다리고 있습니다."라는 메시지가 남아 있습니다. 몇 분에 한 번 정도의 카운트업 빈도의 경우가 있었다. 그 때문에, 보조적인 정보로서 확인할 정도로 좋을지도.
로그 리더 에이전트 프로그램이 실행 중인지 확인
DB 서버에 로그인하고 작업 관리자에서 "legread.exe"가 "실행 중"인지 확인합니다.
로그 리더 에이전트를 중지하면 작업 관리자에서 사라집니다.
실제로 로그 리더가 멈출 때의 거동
-- 直近 6 時間の情報を取得
DECLARE @targetTime datetime
SET @targetTime = DATEADD(mm, -6, GETDATE())
SELECT
dh.time,
da.id,
da.local_job,
da.publication,
pd.publisher_db,
da.subscriber_db,
da.name,
da.subscriber_name,
CASE dh.runstatus
WHEN 1 THEN '開始'
WHEN 2 THEN '成功'
WHEN 3 THEN '実行中'
WHEN 4 THEN 'アイドル'
WHEN 5 THEN '再試行'
WHEN 6 THEN '失敗'
END AS runstatus,
rt.entry_time,
dh.start_time,
dh.comments,
dh.duration,
dh.current_delivery_rate,
dh.current_delivery_latency,
dh.delivered_commands,
dh.average_commands,
dh.delivery_latency,
dh.total_delivered_commands,
dh.xact_seqno,
dh.error_id
FROM
distribution.dbo.MSrepl_transactions AS rt
LEFT JOIN
distribution.dbo.MSdistribution_history AS dh
ON
dh.xact_seqno = rt.xact_seqno
LEFT JOIN
distribution.dbo.MSpublisher_databases AS pd
ON
pd.id = rt.publisher_database_id
LEFT JOIN
distribution.dbo.MSdistribution_agents AS da
ON
da.id = dh.agent_id
WHERE
dh.time IS NOT NULL
AND
dh.time >= @targetTime
ORDER BY
dh.time DESC
※ SE 잡기 의 오자와씨에게 작성해 주셨습니다.
쿼리 실행 결과가 "프로세스가 실행 중이고 서버로부터의 응답을 기다리고 있습니다."라는 메시지가 남아 있습니다.
수동으로 로그 리더 에이전트를 다시 시작할 때의 포인트
중단되었다고 판단되면 로그 리더를 다시 시작해야 할 수 있습니다.
그 순서와 조심하는 포인트를 정리해 둡니다.
0. 다음 쿼리를 게시자 측 서버의 어느 DB에서도 좋기 때문에 실행. 2레코드 취할 수 있는지 확인
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
1. 에이전트 중지
2. 즉시 다시 시작하지 않고 다음 쿼리를 다시 실행합니다. 0 레코드가 되는 것을 확인.
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
→ 이때 일시적으로 1레코드만 취득할 수 있는(=곧은 정지하지 않는) 경우가 있다.
그 경우는 1-2분 기다려 다시 쿼리를 실행하면, 0 레코드가 된다(=완전 정지)
3. 에이전트 재개
재개 후, 일시적으로 로그 리더가 활발하게 가동하는 것으로 복제 에이전트 주위에서 블로킹이 일어나는 경우가 자주 있지만,
이 블로킹에 관해서는 기다리고 있으면 자연 해소되기 때문에 문제 없다.
Reference
이 문제에 관하여(SQL Server : 복제에서 로그 리더가 작동하는지 확인하는 쿼리 및 재부팅 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/maaaaaaaa/items/f6506fcd62bcc47e4f03
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
select top 1000 * from sys.dm_os_performance_counters
where object_name like '%replication%'
and counter_name like '%cmds%'
--and instance_name in ('***')
DB 서버에 로그인하고 작업 관리자에서 "legread.exe"가 "실행 중"인지 확인합니다.
로그 리더 에이전트를 중지하면 작업 관리자에서 사라집니다.
실제로 로그 리더가 멈출 때의 거동
-- 直近 6 時間の情報を取得
DECLARE @targetTime datetime
SET @targetTime = DATEADD(mm, -6, GETDATE())
SELECT
dh.time,
da.id,
da.local_job,
da.publication,
pd.publisher_db,
da.subscriber_db,
da.name,
da.subscriber_name,
CASE dh.runstatus
WHEN 1 THEN '開始'
WHEN 2 THEN '成功'
WHEN 3 THEN '実行中'
WHEN 4 THEN 'アイドル'
WHEN 5 THEN '再試行'
WHEN 6 THEN '失敗'
END AS runstatus,
rt.entry_time,
dh.start_time,
dh.comments,
dh.duration,
dh.current_delivery_rate,
dh.current_delivery_latency,
dh.delivered_commands,
dh.average_commands,
dh.delivery_latency,
dh.total_delivered_commands,
dh.xact_seqno,
dh.error_id
FROM
distribution.dbo.MSrepl_transactions AS rt
LEFT JOIN
distribution.dbo.MSdistribution_history AS dh
ON
dh.xact_seqno = rt.xact_seqno
LEFT JOIN
distribution.dbo.MSpublisher_databases AS pd
ON
pd.id = rt.publisher_database_id
LEFT JOIN
distribution.dbo.MSdistribution_agents AS da
ON
da.id = dh.agent_id
WHERE
dh.time IS NOT NULL
AND
dh.time >= @targetTime
ORDER BY
dh.time DESC
※ SE 잡기 의 오자와씨에게 작성해 주셨습니다.
쿼리 실행 결과가 "프로세스가 실행 중이고 서버로부터의 응답을 기다리고 있습니다."라는 메시지가 남아 있습니다.
수동으로 로그 리더 에이전트를 다시 시작할 때의 포인트
중단되었다고 판단되면 로그 리더를 다시 시작해야 할 수 있습니다.
그 순서와 조심하는 포인트를 정리해 둡니다.
0. 다음 쿼리를 게시자 측 서버의 어느 DB에서도 좋기 때문에 실행. 2레코드 취할 수 있는지 확인
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
1. 에이전트 중지
2. 즉시 다시 시작하지 않고 다음 쿼리를 다시 실행합니다. 0 레코드가 되는 것을 확인.
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
→ 이때 일시적으로 1레코드만 취득할 수 있는(=곧은 정지하지 않는) 경우가 있다.
그 경우는 1-2분 기다려 다시 쿼리를 실행하면, 0 레코드가 된다(=완전 정지)
3. 에이전트 재개
재개 후, 일시적으로 로그 리더가 활발하게 가동하는 것으로 복제 에이전트 주위에서 블로킹이 일어나는 경우가 자주 있지만,
이 블로킹에 관해서는 기다리고 있으면 자연 해소되기 때문에 문제 없다.
Reference
이 문제에 관하여(SQL Server : 복제에서 로그 리더가 작동하는지 확인하는 쿼리 및 재부팅 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/maaaaaaaa/items/f6506fcd62bcc47e4f03
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
-- 直近 6 時間の情報を取得
DECLARE @targetTime datetime
SET @targetTime = DATEADD(mm, -6, GETDATE())
SELECT
dh.time,
da.id,
da.local_job,
da.publication,
pd.publisher_db,
da.subscriber_db,
da.name,
da.subscriber_name,
CASE dh.runstatus
WHEN 1 THEN '開始'
WHEN 2 THEN '成功'
WHEN 3 THEN '実行中'
WHEN 4 THEN 'アイドル'
WHEN 5 THEN '再試行'
WHEN 6 THEN '失敗'
END AS runstatus,
rt.entry_time,
dh.start_time,
dh.comments,
dh.duration,
dh.current_delivery_rate,
dh.current_delivery_latency,
dh.delivered_commands,
dh.average_commands,
dh.delivery_latency,
dh.total_delivered_commands,
dh.xact_seqno,
dh.error_id
FROM
distribution.dbo.MSrepl_transactions AS rt
LEFT JOIN
distribution.dbo.MSdistribution_history AS dh
ON
dh.xact_seqno = rt.xact_seqno
LEFT JOIN
distribution.dbo.MSpublisher_databases AS pd
ON
pd.id = rt.publisher_database_id
LEFT JOIN
distribution.dbo.MSdistribution_agents AS da
ON
da.id = dh.agent_id
WHERE
dh.time IS NOT NULL
AND
dh.time >= @targetTime
ORDER BY
dh.time DESC
중단되었다고 판단되면 로그 리더를 다시 시작해야 할 수 있습니다.
그 순서와 조심하는 포인트를 정리해 둡니다.
0. 다음 쿼리를 게시자 측 서버의 어느 DB에서도 좋기 때문에 실행. 2레코드 취할 수 있는지 확인
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
1. 에이전트 중지
2. 즉시 다시 시작하지 않고 다음 쿼리를 다시 실행합니다. 0 레코드가 되는 것을 확인.
select top 10 * from sys.dm_exec_sessions where program_name like '%logreader%'
→ 이때 일시적으로 1레코드만 취득할 수 있는(=곧은 정지하지 않는) 경우가 있다.
그 경우는 1-2분 기다려 다시 쿼리를 실행하면, 0 레코드가 된다(=완전 정지)
3. 에이전트 재개
재개 후, 일시적으로 로그 리더가 활발하게 가동하는 것으로 복제 에이전트 주위에서 블로킹이 일어나는 경우가 자주 있지만,
이 블로킹에 관해서는 기다리고 있으면 자연 해소되기 때문에 문제 없다.
Reference
이 문제에 관하여(SQL Server : 복제에서 로그 리더가 작동하는지 확인하는 쿼리 및 재부팅 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maaaaaaaa/items/f6506fcd62bcc47e4f03텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)