728x90

MS-SQL 서비스를 운영하다보면, 특정 쿼리의 Lock 문제로 리소스 낭비 뿐만 아니라 최악에는 서비스까지 영향을 미치는 문제가 발생하는 경우가 있다. 이런 문제가 발생하게 되면 보통 별도의 알람 시스템을 통해 알람을 전달 받고 해당  Lock을 발생하는 SPID를 확인해서 빠르게 Kill 해주는게 좋다.

쿼리창에서 아래 그림의 명령어를 입력해서 현재의 Lock 상태를 확인 합니다.
해당 정보를 이용해서 Lock의 종류를 분류하고 장애를 처리 할 수 있습니다.

 

  • S : 공유 잠금 Lock.
  • U : 업데이트 잠금 Lock.
  • X : 독점 잠금 Lock.
  • IS : 의도 공유 잠금 Lock.
  • IU : 의도 업데이트 잠금 Lock.
  • IX : 독점 의도 잠금 Lock.
  • BU : 대량 업데이트 잠금 Lock.
DBCC Inputbuffer (SPID 번호) 명령을 실행하여 Lock을 발생시킨 원인 쿼리를 확인 합니다.
Lock을 발생시킨 쿼리문이 확인 되었다면, Kill 명령을 통해 해당 작업을 중지 하면 됩니다.

  • Kill(SPID 번호)

 

동일한 문제가 발생할 가능성이 높기 때문에, 아래 명령어를 통해 SPID 확인 및 해당 SPID의 소유자를 먼저 확인 합니다.

  • EXEC SP_WHO
  • EXEC SP_WHO spid

다음으로 어떤 쿼리가 실행 되었는지를 확인 합니다. (아래 명령어 참고)

  • DBCC INPUTBUFFER(spid)

 

위와 같이 수동으로 작업하는 방법 이외에, 스케줄러를 통해 자동 처리하는 방법이 있지만, 혹시 모를 장애를 대비해서 관리자가 직접 해당 쿼리문등을 확인하고 작업하는 걸 추천 드립니다.

728x90
728x90

사용자 만료일자를 추출하는 쿼리입니다.

실제 운영에서 유용하게 사용 할 수 있을 듯 합니다.

 

function Get-XADUserPasswordExpirationDate() {

    Param ([Parameter(Mandatory=$true,  Position=0,  ValueFromPipeline=$true, HelpMessage="Identity of the Account")]

    [Object] $accountIdentity)

    PROCESS {

        $accountObj = Get-ADUser $accountIdentity -properties PasswordExpired, PasswordNeverExpires, PasswordLastSet

        if ($accountObj.PasswordExpired) {

            echo ("Password of account: " + $accountObj.Name + " already expired!")

        } else {

            if ($accountObj.PasswordNeverExpires) {

                echo ("Password of account: " + $accountObj.Name + " is set to never expires!")

            } else {

                $passwordSetDate = $accountObj.PasswordLastSet

                if ($passwordSetDate -eq $null) {

                    echo ("Password of account: " + $accountObj.Name + " has never been set!")

                }  else {

                    $maxPasswordAgeTimeSpan = $null

                    $dfl = (get-addomain).DomainMode

                    if ($dfl -ge 3) {

                        ## Greater than Windows2008 domain functional level

                        $accountFGPP = Get-ADUserResultantPasswordPolicy $accountObj

                        if ($accountFGPP -ne $null) {

                            $maxPasswordAgeTimeSpan = $accountFGPP.MaxPasswordAge

                        } else {

                            $maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

                        }

                    } else {

                        $maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

                    }

                    if ($maxPasswordAgeTimeSpan -eq $null -or $maxPasswordAgeTimeSpan.TotalMilliseconds -eq 0) {

                        echo ("MaxPasswordAge is not set for the domain or is set to zero!")

                    } else {

                        echo ("Password of account: " + $accountObj.Name + " expires on: " + ($passwordSetDate + $maxPasswordAgeTimeSpan))

                    }

                }

            }

        }

    }

}
 

 

사용방법

 

Import-module activedirectory
 
get-aduser -filter {Enabled -eq $True} -properties * | Get-XADUserPasswordExpirationDate 

 

 

출처 : http://blog.sogooday.com/239

728x90
728x90

간혹 배치파일은 만들다 보면 계정의 비밀번호를 넣는 경우가 있다.

하지만 보안적인 문제가 발생 되기에 암호화를 해서 넣을 수가 있다.

Search하니 역시나 원하는 답이 있었다. ㅋㅋㅋ

 

1. 파워쉘을 실행한다.

"password" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString

The output is luckily not the unencrypted password we entered, it is a string containing the encrypted version of the password.

 

결과

01000000d08c9ddf0115d1118c7a00c04fc297eb01000000b9fe0ca15a2ffb4a9e172d76a87afae40000000002000000000003660000c000000010000000875
eab73cc326c4acb70b609f170da6d0000000004800000a0000000100000001efe13d29355bea97995960f306c0009180000005a906fee5e408ccf685bbc56dd
1c3e3c91472d168c17d38a140000008bf9a9f060d1c46d1d96441d2080218ff0ada1a6

 

 

출처

<http://blog.coretech.dk/rja/store-encrypted-password-in-a-powershell-script/>

 

728x90
728x90

Lync Service를 서비스관리자에서 한땀한땀 올리려면 대기시간과 귀차니즘의 극에 달한다.

하지만 파워쉘 명령 두번이면 재시작 끝이다.

 

 1. Open the Lync Server Management Shell.

2. Run the following Lync Server PowerShell commands in the given order:

Stop-CsWindowService

 

Start-CsWindowsService

 

참 쉽죠이~

 

끝.

728x90
728x90

사용자 AD 값을 보고 싶을 경우 아래와 같이 단일 사용자로 추출이 가능하다.

 

CSVDE -d "CN=EXID,OU=Test,DC=mani4u,DC=com" -f c:\exid.txt

 

끝.

728x90
728x90

 

안녕하세요.

DBAnalyze는 관리자가 Lync Server 2013 데이터베이스에 대한 분석 보고서를 수집할 수 있도록 돕는 명령줄 도구입니다. DBAnalyze에는 다음과 같은 모드(진단, 사용자 데이터, 전화 회의, MCU, 디스크 조각화)가 있습니다.

 

실행 샘플)

DBAnalyze.exe /user:test@mani4u.com /report:user/sqlserver:PrimryRegistrarHost\rtcloal >c:\test_dbanalyze.txt

 

 

  • 진단 모드   테이블(레코드 , 조각화, 데이터 크기, 인덱스 크기), 데이터 로그 파일 크기, 마지막으로 백업한 시간, Microsoft Office Communications Server 실행 중인 서버의 대화 상대 분포, 사용 권한의 평균 , 대화 상대, 컨테이너, 구독, 게시, 사용자당 끝점, 잘못 이동된 사용자, 라우팅되지 않는 사용자, 사용자별로 주최한 전화 회의의 평균 , 예약된 전화 회의, 활성 전화 회의, 데이터베이스 버전에 대한 정보를 포함하는 보고서를 생성합니다.

참고:

진단 모드로 실행하면 서버 성능에 영향을 줄 수 있습니다.

  • 사용자 데이터 모드  특정 사용자 또는 해당 사용자가 자신의 대화 상대 사용 권한 목록에 있는 사용자의 대화 상대, 컨테이너, 구독, 게시, 사용 권한, 대화 상대 그룹 데이터를 보고합니다. 또한 모드에서는 사용자가 주최하거나 초대된 전화 회의에 대한 요약 데이터를 보고합니다.
  • 전화 회의 모드   전화 회의가 예약된 모든 시간 세부 정보, 초대 대상자 목록, 전화 회의에 허용된 미디어 유형 목록, 활성 MCU(Multipoint Control Unit), 활성 참가자 목록, 참가자의 신호 상태를 비롯한 특정 전화 회의에 대한 자세한 데이터를 보고합니다.
  • 모임 ID 디코딩   /pstnid 스위치로 지정되었지만 자세한 정보를 위해 백 엔드에 연결되지 않은 PSTN(공중 전화망) 모임 ID를 디코딩합니다.
  • 전화 회의 확인   /pstnid 스위치로 지정된 PSTN 모임 ID를 디코딩하고 해당 ID가 나타내는 전화 회의에 대한 정보를 표시합니다.
  • MCU 모드  풀의 MCU 대한 ID, 미디어 유형, URL, 하트비트 상태, 전화 회의 부하, 참가자 부하를 보고합니다.
  • 디스크 조각화 모드  모든 디스크의 조각화 상태를 표시합니다.

이 도구는 다양한 문제를 진단하거나 관리자의 용량 계획을 돕는 데 사용됩니다. 예를 들어 서버 A에 있는 대부분의 사용자가 자신의 대화 상대로 서버 B에 있는 사용자를 선택하는 경우, 관리자는 서버 간 트래픽을 줄이기 위해 서버 A의 사용자를 서버 B로 이동할 수 있습니다.

출력

 

이 도구는 Lync Server 2013 데이터베이스에 대해 미리 정의된 보고서를 출력합니다. 경로: %ProgramFiles%\Microsoft Lync Server 2013\Reskit

용도

 

Dbanalyze.exe를 설치하려면 로컬 폴더로 복사한 다음 도구를 실행합니다. 도구를 사용하려면 명령줄에서 다음 명령을 실행합니다. dbanalyze.exe [/v] [/report:value] [/sqlserver:value] [/user:user@domain.com] [/conf:value][/pstnid:Value] [/maxcontacts:value] 아래에 명령줄 옵션에 대한 설명이 나와 있습니다.

 

 

예제

 

다음은 유효한 Dbanalyze.exe 명령의 예입니다.

복사

dbanalyze.exe /report:diag
dbanalyze.exe /report:user /user:usera@domainb.com
dbanalyze.exe /report:conf /user:bob@example.com /conf:1W9J71SKSX2X
dbanalyze.exe /report:resolve /pstnid:12345
dbanalyze.exe /report:mcus
dbanalyze.exe /report:disk

요약

 

DBAnalyzer를 사용하면 관리자가 Lync Server 2013 데이터베이스를 빠르고 쉽게 분석할 수 있습니다.

 

 

 

 

 

728x90
728x90

LYNC2013 설치하기 위한 포스트 공유

1. DNS 구성

 

 

 2. 인프라 구성 포스트

 

3. IM AND PRESENCE 작동 프로세스

 4. AV AND WEB CONFERENCING 프로세스 포스트

 5. APPLICATION SHARING 프로세스 포스트

 5. ENTERPRISE VOICE 프로세스 포스트

6.  CMS(Central Management Store) 프로세스 포스트

 

결론 - 이해 불가...ㅡ.ㅡ 난 돌떵인가벼.

끝.

 

728x90
728x90

Skype For Business가 LYNC2013 차기작으로 출시 됨으로 인해,

기존 LYNC2013을 사용 중인 고객사가 난리가 났다.

왜!!! LYNC UI가 Skype For Business UI로 변동 되는 현상과 Preview CU 후 로그인이 안되는 현상이 발생 되었다.

시간이 지나 알게 된 사실이지만 정식 CU에서는 정상 로그인이 되어 그나마 다행이다.(KB2889923,KB2889853)

 

Update skype UI로 변경 될 경우 아래와 같이 RegistryLync 2013 으로 변경할 수 있습니다.
0: Lync 2013 1: Skype UI
-HKEY_CURRENT_USER\Software\Microsoft\Office\Lync\EnableSkypeUI

 

 

MSG 나빠~~~ 말도 없이 이러기야~

끝. 

728x90
728x90

안녕하세요.

주현애비 입니다.

오늘은 Lync SErver 전체 사용자 버디리스트 및 그룹을 조회 하는 쿼리를 알아보도록 하겠습니다.

각 사용자는 ResourceID라는 것이 있습니다. 대부분의 이 ResourceID와 연결 고리 관계를 가지고 있다라고 볼수 있습니다.

1. ResourceID를 알기 위해서는 Resource Table에 본인의 'Sip Address'를 조건에 넣어 주시면 알수 있습니다.(F/E RCT DB)

===================================================

select * from Resource
 where UserAtHost = 'testh001@mani4u.com'

ResourceId  UserAtHost
3680            testh001@mani4u.com

===================================================

제 ResourceID는 "3680"이네요.

 

2.  사용자의 버디리스트를 확인 방법

Contact Table : 모든 사용자의 버디리스트가 있는 테이블입니다.

OwnerID는 본인의 ResourceID와 동일 합니다.

BuddyID는 사용자가 추가한 ResourceID입니다.

자 그럼 제가 추가한 사용자를 쿼리 해볼까요. 1번에서 봤듯이 제 ResourceID는 "3680"이었습니다.

select * from Contact

where OwnerId= '3680'

OwnerId BuddyId
3680       35
3680       36
3680       41
3680       42
3680       44
3680       45

제 버디리스트에는 6명이 존재하는 것을 알수 있네요.

거꾸로 생각해보면 상대방ID를 누가 추가 했는지도 알수 있겠네요.ㅋ

 

3. 버디 그룹 확인 방법

ContactGroup Table : 모든 사용자의 그룹이 있는 테이블입니다.

ContactGroup도 마찬가지로 OwnerId가 존재합니다. 즉 본인의 ReourceID와 동일하다는 것이고요.

각 OwnerID는 GroupNumber 필드의 값들은 1부터 그룹갯수만큼의 Sequence Number가 들어 있습니다.

기본적으로 GroupNumber 필드는 모든 사용자가 1과 2 값은 들어가 있습니다.

1값은 틸드(~)그룹으로 추가 되는 모든 사용자가 포함 되는 그룹입니다.

2값은 "다른 연락처(Pinned Contacts)"그룹입니다.

자 그럼 제 그룹이 몇개나 존재하는지 조회를 해보겠습니다.

select OwnerId , GroupNumber, cast(DisplayName as xml) as 그룹 from ContactGroup
where OwnerId =3680

OwnerId GroupNumber 그룹
3680       2                   Pinned Contacts
3680       1                    ~
3680       3                   그룹1
3680       4                   그룹2
3680       5                   그룹3

 

총 5개의 그룹이 존재 합니다.

요점 정리를 하자면 전체 버디 및 그룹을 잘 백업 하면 복원도 가능 합니다.

또한, 전체 사용자 백업을 위한 검증도 할 수 있겠죠.^^

끝.

 

 

 

 

 

728x90
728x90

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

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

1. 기본 명령어

Get-CsManagementStoreReplicationStatus

 

2. Fales만 확인하는 명령어

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

 

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

 

끝.

728x90

+ Recent posts