728x90

F/E간 DB 복제 상태를 확인 하는 파워쉘 명령어이다.

정책배포라던지 Deploy 변경 시, 복제가 정상적으로 끝난 후 확인 하면 되겠다.

1. 기본 명령어

Get-CsManagementStoreReplicationStatus

 

2. Fales만 확인하는 명령어

Get-CsManagementStoreReplicationStatus | Where-Object {$_.UpToDate -eq $False}

 

전 F/E가 많기때문에 2번 방법을 선호 한다.

 

끝.

728x90
728x90

버디리스트를 파워쉘로 백업을 꼭 받아두자.

고객사 PM작업 이후 버디리스트가 유실 되는 현상이 발생 되었다.

그러나 백업의 유효성은 검증 되지 못하는 점이 아쉽다.

왜냐면 유실 사용자의 버디를 복원 해보니 아무것도 존재 하지 않는다는 사실!!!

헐!!!!

일단 가장 간당하게 백업 및 복원 할 수 있는 방법이고 Lync에서 제공 되기에 신뢰성은 높다고 본다.

 

1. 전체백업과 복원

a.전체 백업

Export-CsUserData -PoolFqdn "pool.domain.com" -FileName "C:\Logs\ExportedUserData.zip"

b.전체 백업 복원

Import-CsUserData -PoolFqdn "pool.domain.com" -FileName "C:\Logs\ExportedUserData.zip"

c.업데이트를 통한 전체 복원

 Update-CsUserData -PoolFqdn "pool.domain.com" -FileName "C:\Logs\ExportedUserData.zip"

 

2. 사용자 백업과 복원

a. 사용자 백업

Export-CsUserData -poolfqdn "pool.domain.com" -UserFilter "sipaddress" -FileName "D:\test001.zip"

b. 업데이트를 통한 복원

 Update-CsUserData -poolfqdn "pool.domain.com" -UserFilter "sipaddress" -FileName "D:\test001.zip"

 

3. 버디리스트 복원에서 특정 사용자만 XML Convert 방법

이것은 버디리스트 후 특정 사용자가 그룹 및 버디가 정상적으로 있는지 XML로 변환 후 정상적으로 있는지 확인을 위한 것이다.

 Convert-CsUserData -InputFile " d:\ExportedUserData.zip" -OutputFile "D:\Logs\Lync2010data.xml" -TargetVersion Lync2010 -UserFilter "sipaddress"

 

유효성이 검증 되지 않아 별도 2차 백업 및 복원 방법은 전체 F/E의 백업을 매일/재부팅작업전DB와 작업 후 DB를 백업 받은 후 검증하여 유실 사용자가 있는지 파악하여 WCF를 통하여 복원하였다.

시간이 되면 그때 공유 하도록 하겠습니다.

 

끝.

728x90
728x90

1. Lync 안드로이드,아이폰,아이패드 로그인 이력을 뽑아달라는 고객의 요청에 의해 Back-End / LCSCDR DB

에서 아래와 같이 뽑아주었다.

USE LCSCDR

 declare @SipAddress nvarchar(200),
  @StartDate datetime,
  @EndDate datetime,
  @CurrPage int

select @SipAddress = 'test001@mani4u.com', @CurrPage = 1, @StartDate = cast('2015-01-01' as datetime), @EndDate = cast('2015-05-30' as datetime)
select @SipAddress, @CurrPage, @StartDate, @EndDate

; WITH ConnectionLog AS
(
 SELECT  ROW_NUMBER() OVER(ORDER BY reg.RegisterTime desc) AS rownum
    , DATEADD(minute, DATEDIFF(minute, sysutcdatetime(), sysdatetime()), reg.SessionIdTime) AS SessionIdTimeS 
    , reg.SessionIdSeq
    , usr.UserUri AS SipAddress 
    , DATEADD(minute, DATEDIFF(minute, sysutcdatetime(), sysdatetime()), reg.RegisterTime) AS LoginTime 
    , DATEADD(minute, DATEDIFF(minute, sysutcdatetime(), sysdatetime()), reg.DeRegisterTime) AS LogoutTime 
    , reg.IpAddress 
    ,CASE WHEN reg.[DeRegisterTypeId] = 1 THEN N'정상종료' 
      WHEN reg.[DeRegisterTypeId] = 2 THEN N'접속만료' 
      WHEN reg.[DeRegisterTypeId] = 3 THEN N'비정상종료' 
      WHEN reg.[DeRegisterTypeId] = 4 THEN N'사용자속성변경' 
      WHEN reg.[DeRegisterTypeId] = 5 THEN N'POOL변경' 
      WHEN reg.[DeRegisterTypeId] = 6 THEN N'Client버전문제' 
      ELSE N'알수없음' END AS LogoutReason 
    ,CASE WHEN reg.[RegistrarId] = 1 THEN N'Lync 2013 Client' 
      WHEN reg.[RegistrarId] = 1003 THEN N'Lync 2013 Client' 
      WHEN reg.[RegistrarId] = 1002 THEN N'MSPL' 
      WHEN reg.[RegistrarId] = 2002 THEN N'MSPL'  
      WHEN reg.[RegistrarId] = 2003 THEN N'MSPL'  
      ELSE N'ETC' END AS ClientVer 
    , REPLACE(ser.ServerFQDN,'.adatum.com','') AS ServerFQDN 
    , REPLACE(poo.PoolFQDN,'.adatum.com','') AS PoolFQDN 
    , reg.EdgeServerId 
    , CASE WHEN reg.IsInternal = 1 THEN N'내부' ELSE N'외부' END AS IsInternal 
    , reg.IsUserServiceAvailable 
    , reg.IsPrimaryRegistrar 
    , reg.IsPrimaryRegistarCentral 
    , reg.ResponseCode 
    , reg.DiagnosticId 
    , reg.DeviceId 
    , reg.EndpointId 
    , reg.EndpointEra 
    , (SELECT top 1 [Version]  FROM [LcsCDR].[dbo].[ClientVersions] where reg.ClientVersionId=[VersionId])  as VersionName
 FROM  Registration reg 
   INNER JOIN Users usr  
    ON reg.UserId = usr.UserId 
    INNER JOIN Pools poo  
    ON reg.PoolId = poo.PoolId  
    INNER JOIN Servers ser  
    ON reg.RegistrarId = ser.ServerId  
   INNER JOIN (
     SELECT [VersionId]  FROM [LcsCDR].[dbo].[ClientVersions]
     where 1=1
     and (charindex('Android', Version) > 0
      or charindex('iPhone', Version) > 0
      or charindex('iPad', Version) > 0)
   ) VER
   ON VER.[VersionId] = reg.ClientVersionId
 WHERE  (1 = 1)  
 --AND   (usr.UserUri = @SipAddress)  
    AND   dateadd(minute, datediff(minute, sysutcdatetime(), sysdatetime()), reg.[RegisterTime])  
    BETWEEN DATEADD(day,0,CONVERT(VARCHAR(10), @StartDate,23))  
 AND DATEADD(day,1,CONVERT(VARCHAR(10), @EndDate,23)) 
)
SELECT * FROM ConnectionLog
 --WHERE rownum BETWEEN (@CurrPage-1) * 50 + 1 AND @CurrPage * 50

 

2. 전체 로그인 이력 뽑는 쿼리

 

declare @SipAddress nvarchar(200),
  @StartDate datetime,
  @EndDate datetime,
  @CurrPage int

select @SipAddress = 'test@mani4u.com', @CurrPage = 1, @StartDate = cast('2015-01-01' as datetime), @EndDate = cast('2015-05-30' as datetime)
select @SipAddress, @CurrPage, @StartDate, @EndDate

; WITH ConnectionLog AS
(
 SELECT  ROW_NUMBER() OVER(ORDER BY reg.RegisterTime desc) AS rownum
    , DATEADD(minute, DATEDIFF(minute, sysutcdatetime(), sysdatetime()), reg.SessionIdTime) AS SessionIdTimeS 
    , reg.SessionIdSeq
    , usr.UserUri AS SipAddress 
    , DATEADD(minute, DATEDIFF(minute, sysutcdatetime(), sysdatetime()), reg.RegisterTime) AS LoginTime 
    , DATEADD(minute, DATEDIFF(minute, sysutcdatetime(), sysdatetime()), reg.DeRegisterTime) AS LogoutTime 
    , reg.IpAddress 
    ,CASE WHEN reg.[DeRegisterTypeId] = 1 THEN N'정상종료' 
      WHEN reg.[DeRegisterTypeId] = 2 THEN N'접속만료' 
      WHEN reg.[DeRegisterTypeId] = 3 THEN N'비정상종료' 
      WHEN reg.[DeRegisterTypeId] = 4 THEN N'사용자속성변경' 
      WHEN reg.[DeRegisterTypeId] = 5 THEN N'POOL변경' 
      WHEN reg.[DeRegisterTypeId] = 6 THEN N'Client버전문제' 
      ELSE N'알수없음' END AS LogoutReason 
    ,CASE WHEN reg.[RegistrarId] = 1 THEN N'Lync 2013 Client' 
      WHEN reg.[RegistrarId] = 1003 THEN N'Lync 2013 Client' 
      WHEN reg.[RegistrarId] = 1002 THEN N'MSPL' 
      WHEN reg.[RegistrarId] = 2002 THEN N'MSPL'  
      WHEN reg.[RegistrarId] = 2003 THEN N'MSPL'  
      ELSE N'ETC' END AS ClientVer 
    , REPLACE(ser.ServerFQDN,'.adatum.com','') AS ServerFQDN 
    , REPLACE(poo.PoolFQDN,'.adatum.com','') AS PoolFQDN 
    , reg.EdgeServerId 
    , CASE WHEN reg.IsInternal = 1 THEN N'내부' ELSE N'외부' END AS IsInternal 
    , reg.IsUserServiceAvailable 
    , reg.IsPrimaryRegistrar 
    , reg.IsPrimaryRegistarCentral 
    , reg.ResponseCode 
    , reg.DiagnosticId 
    , reg.DeviceId 
    , reg.EndpointId 
    , reg.EndpointEra 
 FROM  Registration reg 
   INNER JOIN Users usr  
    ON reg.UserId = usr.UserId 
    INNER JOIN Pools poo  
    ON reg.PoolId = poo.PoolId  
    INNER JOIN Servers ser  
    ON reg.RegistrarId = ser.ServerId  
 WHERE  (1 = 1)  
 AND   (usr.UserUri = @SipAddress)  
    AND   dateadd(minute, datediff(minute, sysutcdatetime(), sysdatetime()), reg.[RegisterTime])  
    BETWEEN DATEADD(day,0,CONVERT(VARCHAR(10), @StartDate,23))  
 AND DATEADD(day,1,CONVERT(VARCHAR(10), @EndDate,23)) 
)
SELECT * FROM ConnectionLog
 WHERE rownum BETWEEN (@CurrPage-1) * 50 + 1 AND @CurrPage * 50  

 

728x90

+ Recent posts