'DB/MS Sql Server'에 해당되는 글 14

  1. 2014.03.20 SQL Server Multi USER 변경
  2. 2012.09.11 Sql Server Disk Align
  3. 2012.06.16 클러스터 설치관련
  4. 2012.06.15 Sql Collation 변경
  5. 2011.01.20 MS Sql Server 설치 오류
  6. 2011.01.18 DB 파일 이관시 오류
  7. 2010.11.09 Sql Server와 CPU
  8. 2010.11.05 Numa의 이해
  9. 2008.11.25 SQL Server 2005 Restore
  10. 2008.11.25 MS SQL DB Backup 방법

SQL Server Multi USER 변경

2014.03.20 09:56 | Posted by 로멘틱가이

Express 설치 후 여러개의 프로그램 사용 시

Database가 Single User모드이며 세션이 연결되어 있으므로 쿼리 실행에 실패하였다는 메시지가 나오는 경우가 있습니다.

(저는 WSUS 설치 시 해당 메시지를 보았습니다.)

 

그 때 해당 DB를 Multi User 모드로 변경하는 방법입니다.

 

1. User와 Session ID 확인 

SELECT     D.name, spid, login_time, nt_username, loginame

FROM        SYSPROCESSES P

INNER JOIN SYSDATABASES D

ON             o.dbid=d.dbid

WHERE       D.NAME = 'SUSDB'

 

go

 

2. User의 spid를 확인 후 Session을 Kill한다.

 

3. SUSDB를 Multi User 모드로 변경 

 ALTER DATABASE SUSDB SET MULTI_USER

Sql Server Disk Align

2012.09.11 14:35 | Posted by 로멘틱가이

Disk align 경우 Windows 2003까지 Disk Vendor사의 권고에 따라 Diskpart에서 할당하는 것을 권고 하였습니다.

(관련 Site : http://msdn.microsoft.com/en-us/library/dd758814(v=sql.100).aspx)

 

일반적으로 Disk vendor사에서 권고하는 값이 없는 경우 Default 1024값을 권장합니다.

Windows 2008부터 Align Default값이 1024이기 때문에 해당 가이드에 넣지 않았습니다.

 

Windows 2003 경우에는 Align설정을 반드시 해주셔야합니다.

(성능에 영향을 미칩니다.)

 

추가로 설정 방법 확인 방법입니다.

1. Align 할당

    disk 선택 아래 명령어 수행

    create partition primary [size=n] [offset=n] [ID={byte|GUID}] [align=n][noerr]

    - Partition 생성 align=1024 할당하여 해당 align 할당)

 

2. 확인 방법

시작 -> 실행 -> msinfo32

Components -> Storage -> disks -> Partition Starting Offset

해당 값이 현재 할당된 내용입니다.

(참고 사이트 : http://technet.microsoft.com/ko-kr/library/cc766465(v=ws.10).aspx)

클러스터 설치관련

2012.06.16 04:23 | Posted by 로멘틱가이

Sql Server 2008 R2 Cluseter 설치 시나리오

1. Active Node에 클러스터 설치

2. Passive Node에서 Node 추가 시도(절대 Active Node에서 하면 안됨)

 

오류 메시지

1. “The IP Address 'x.x.x.x' is already in use. To continue, specify a different IP address” SQL Server 2008 cluster setup error

http://blogs.msdn.com/b/jorgepc/archive/2010/11/22/the-ip-address-x-x-x-x-is-already-in-use-to-continue-specify-a-different-ip-address-sql-server-2008-cluster-setup-error.aspx

 

2. 02 노드로 이동 작업이 완료되지 않았습니다. 0x80071398

2번 노드에 노드 추가가 되지 않은 경우 발생

 

Service Pack Update

Instance 별로 Upgrade해야함

 

Sql Collation 변경

2012.06.15 21:04 | Posted by 로멘틱가이

 

SCCM 2012 설치 시 Sql Server의 Collation을 맞춰야합니다.

 

Setup.exe /QUIET /ACTION=REBUILDDATABASE  /SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS

/INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Kwon\Administrator

/Action : DB 변경내용

/SQLCOLLATION : 변경할 Collation

/INSTANCENAME : 해당 Instance 명

/SQLSYSADMINACCOUNTS : 계정명

 

More info: http://technet.microsoft.com/en-us/library/ms179254(v=SQL.100).aspx

 

Cluster의 경우 리소스가 해당 명령어를 수행하는 Node에 있어야 하며 해당 Sql Service Resource는 Down되어야 합니다.

 

해당 내용을 참고하시기 바랍니다.

MS Sql Server 설치 오류

2011.01.20 14:07 | Posted by 로멘틱가이

MS Sql Server2008 설치 시 다음과 같은 오류가 발생하였습니다.
[그림 1] Sql 설치 오류

해당 링크 실패를 누르면 다음 경로의 kb 문서를 검색해 보라고 합니다.
http://support.microsoft.com/kb/300956

성능 카운터를 수동으로 다시 잡아줘야한다고 나오나 실제 성능 카운터를 들어가보면 특별한 오류 없이 잘돌아가는 것을 확인할 수 있습니다.

해당 내용이 이상하여 검색 도중 오류에 대한 내용을 찾을 수 있습니다.
HP Smart Start CD 8.0대 설치 시 언어가 en_US로 되어 있는 것을 설치 도중 확인할 수 있습니다.
해당 CD로 설치 시 OS도 유니코드가 지원되지 않는 언어가 아래 그림과 같이 영어로 되어 있습니다.
[그림 2] 언어 설정

유니코드를 지원하지  않는 프로그램에 사용하는 언어를 변경해줍니다.
[그림 3] 언어 변경

해당 언어 변경 시 리부팅이 필요합니다.
리부팅 후 설치를 진행해보면 아래와 같이 정상적으로 체크가 되는 것을 알 수 있습니다.
[그림 3] 성공화면

해당 내용에 대해 참고해 주시기 바랍니다.

DB 파일 이관시 오류

2011.01.18 10:28 | Posted by 로멘틱가이
A 서버에서 B 서버로 MS Sql Server의 데이터베이스 파일을 옮기는 경우 발생한 이슈 입니다.

다른 서버로부터 복사된 데이터 파일을 연결할 때 아래와 같은 오류 메시지와 함께 실패

Msg 5123, Level 16, State 20, Line 1

물리적 파일 'test.mdf'() 열거나 만드는 CREATE FILE에서 운영 체제 오류 5(failed to retrieve text for this error. Reason: 1815)() 발생했습니다.


위와 같은 메시지 발생은 권한 관련 문제일 가능성이 높습니다.

해당 파일이 A 서버에 존재하지만 B 서버에 없는 경우 오류 5 메시지가 발생합니다.
그러므로 옮기기 전 해당 파일에 Administrators 그룹의 권한이 포함되어 있는지 확인이 필요하며
옮긴 후 위와 같은 메시지가 발생하는 경우 해당 파일의 권한을 수정해주는 것이 필요합니다.
(Administrator를 다시 추가 or Administrators 그룹 권한 추가 필요)

Sql Server와 CPU

2010.11.09 00:48 | Posted by 로멘틱가이

CPU는 프로세스에서 처리를 요청하는 연산을 수행해주는 파트입니다.
컴퓨터는 프로세스가 처리를 요청하는 경우  CPU의 Schedule에 해당 요청을 올리며 Memory에 필요한 데이터를 적제합니다.
해당 Processing에 대해 처리할 순서가 된경우 Memory에서 해당 데이터를 Cache에 올려 처리 후 다시 Memory에 결과값을 적재하여 요청한 결과를 반환하는 것이 폰 노이만 구조에서의 처리 방식입니다.

기본적으로 CPU는 다음과 같은 4단계를 통해 연산을 수행합니다.
1) Fetch : 사용가능한 CPU에서 처리할 수 있도록 데이터를 Main Memory에서 가져옵니다.
2) Decode : 데이터를 CPU가 처리할 수 있는 언어로 변환(이진코드)
3) Execute : 개개의 Core에서 각 명령을 수행한다.
4) Store : 결과 값을 Main Memory에 저장한다.

[그림 1] CPU 처리 과정

현대의 컴퓨터 아키에는 3가지 중요한 요소가 있다.
CPU, Memory, Disk 이다.
이 3가지 요소는 왼쪽으로 갈수록 단위 용량당 가격이 비싸며 처리속도가 빠르다.
이러한 개념때문에 아키의 가장 중요한 요소는 3가지 자원을 어떻게 효율적으로 사용하게 만드냐이다.
해당 내용은 컴퓨터 구조 책에 많은 내용을 가지고 있으므로 해당 내용 참고하기 바란다.

Processor Speed
Processor Speed는 일반적인 CPU 스피드를 말한다.
예를 들어 Core2 Duo 3.5Ghz CPU의 경우 3.5Ghz의 속도를 낼 수 있으며 Dual Core Cpu임을 나타낸다.
하지만, 여기서 단순한 3.5Ghz의 숫자를 맹신하면 안된다. 2.4Ghz의 경우에도 CPU의 기타 다른 요소들이 어떻게 구성되어 있는지에 따라 3.5Ghz보다 빠를 수 있기 때문이다.
가장 정확한 비교는 Benchmark 결과를 비교하기 바란다.(단적인 예로 tpmc가 있다.)
Hyper-Threading
하나의 Processor가 2개의 thread를 처리할 수 있음을 나타낸다.
이것은 Intel Architecture이며 실제적으로 1.3배의 속도의 이익을 얻을 수 있다.
하지만 실제 하드웨어 Processor는 한개이며 한개인 Processor를 2개의 thread로 처리하기 때문에 항상 이득을 주는 것은 아니다.

MS Sql Server의 경우 OLTP Type의 처리는 해당 기능을 enable하며 DSS Tye의 처리는 해당 기능을 Disable하는 것을 추천한다.

License
Sql Server의 License 정책은 소켓 단위다.
즉 물리적 CPU 갯수 Base이다.(Core나 Thread 단위가 아니다.)

Cache
현대의 CPU는 처리속도가 빠르므로 CPU와 Main Memory 사이에 Cache라는 개념을 두어 전체적인 속도처리를 높히고 있다.

CPU - Cache(L1, L2, L3) - Main Memory

위와 같이 구조되어 있으며 Cache는 CPU에 포함되어져 있다.
일반적으로 컴퓨터를 살때 L2 Cache와 같은 개념이 포함되어 있는 것을 확인할 수 있다.

같은 CPU Spec인 경우 Cache가 처리 성능을 좌우하게 된다.
그러므로 Cache는 크면 클 수록 좋다.

Sql Server에서는 실행 계획을 어떻게 구성하는지가 중요하다.
Cache에서 해당 내용을 불러오는 경우 Main Memory에서 데이터를 가지고 오지 않아도 되기 때문에 더더욱 빠른 성능을 낼 수 있기 때문이다.

Multi-Core Processor
Socket - 물리적으로 CPU를 설치할 수 있는 것을 의미한다.
Core - 실제적으로 명령을 수행하는 Execution Unit을 의미한다.
Thread - 실제적으로 Execution Unit이 아닌 해당 Unit을 나누어 사용하는 개념을 의미한다.

하나의 Thread가 처리를 진하는 중에, 레지스터와 파이프 라인등에서는 반드시 사용하지 않는 시간이 생긴다. 기존에는 이러한 미사용 시간은 무용하게 방치 되었으나, 이러한 리소스를 모아서 하나의 프로세서로 보이게 하여 별개의 Thread 처리를 진시키는 것이 Hyper-Threading이다

System Architecture
해당 Architecture는 SMP와 NUMA로 나뉘며 아래 각각에 대한 설명을 두었다.

Numa의 이해

2010.11.05 23:49 | Posted by 로멘틱가이
오늘은 Numa(Non-Uniform Memory Access) 아키텍처에 대해 알아보도록 하겠습니다.

하드웨어가 발전하면서 하나의 메인보드에 여러개의 CPU, 버스, 메모리 컨트롤러를 구성할 수 있게 되었습니다.
Numa는 간단하게 CPU와 메모리가 한 Set를 이루는 것을 의미합니다.
[그림1] Numa 관계도

그림 1을 보면 Processor와 Memory 가 하나의 그룹을 이루며 각 그룹은 Numa Node라고 불립니다.
하나의 Node는 CPU와 Memory가 Pair로 구성되어 있으며 Bus를 통해 각각의 Node는 연결되어 있습니다.
그럼 1번 Node를 기준으로 하여 각 용어를 설명하도록 하겠습니다.
로컬 메모리 - 1번 Node의 메모리를 의미합니다.
외부 메모리 - 2, 3, 4번 Node의 메모리를 의미합니다.
[그림2] Numa 상세 내역

여기서 하나의 의문점이 생깁니다.
1번 Processor가 처리해야할 일이 3번 Node의 Memory에 있는 경우 어떻게 해당 Memory의 값을 가져올 것인가?~
그것의 답은 Bus로 연결되어 있는 구조에서 찾을 수 있습니다.
1번 Node의 Processor가 3번 Node의 Memory에 해당 데이터를 요청하며 해당 Memory는 해당 값을 Bus를 통해 Processor에 전달하게 됩니다.
(그림 2를 보면 Numa의 세부 구조에 대해 확인 할 수 있습니다.)

이런 Numa 구조의 장점은?
네트워크를 공부하신 분은 쉽게 알 수 있을거 같습니다.
네트어크의 Bus 구조와 동일합니다.
바로 뛰어난 확장성!
Bus에 Node를 추가하면 되기 때문에 확장성이 뛰어납니다.

그럼 단점은?
바로 위에서 설명한 외부 메모리의 개념에 있습니다.
즉 외부 메모리의 데이터가 필요한 경우 해당 데이터를 가져오는데 시간이 걸리는 단점이 발생합니다.
(HP DL380 G6의 경우 Bus 속도가 1333MHZ이므로 일반적으로 병목이 심하지 않은 경우 외부메모리로 인한 이슈는 없습니다.)

MS Sql Server의 경우 다음 Query로 사용가능한 Numa Node의 갯수를 확인할 수 있습니다.
SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

해당 값이 0인 경우 Numa가 구성되어 있지 않으므로 세팅 요청을 해야합니다.
(서버의 경우 Cpu 1개당 Memory Numa가 구성되어 있으므로 0인 경우가 발생하면 안됩니다.)

위와 같이 Numa는 요 근래 서버에 핵심 기술 중에 하나입니다.
이와 반대 개념의로 SMP가 있으며 해당 내용에 대해서는 다음에 알아보도록 하겠습니다.

SQL Server 2005 Restore

2008.11.25 17:04 | Posted by 로멘틱가이

MS Sql Server 2005에서 Restore방법은 간단하다.

아래와 같이 Database에서 마우스를 오른쪽 클릭한 후 Restore Database를 클릭하면 된다.

사용자 삽입 이미지

해당 Restore를 클릭하면 아래와 같은 화면이 나온다.

1) From database
Source for restore에서 From database를 클릭 하면 백업을 받은 DB들이 콤보박스에 보여진다.
해당 DB를 선택하면 백업 받은 리스트가 아래 창에 검색되어지며 Restore 대상을 클릭한 후 OK버튼을 누르면 해당 백업이 리스토어 된다.

2) From device
해당 From device를 클릭한 후 해당 백업 파일을 선택한 후 확인을 누르면
백업 받은 리스트가 아래창에 검색되어진다.
기존과 같이 restore 대상을 클릭한 후 OK 버튼을 누르면 해당 백업이 리스토어 된다.
사용자 삽입 이미지
From device 에서 버튼을 누르면 다음과 같은 팝업창이 뜨게된다.
Backup location에 restore할 backup파일을 선택해준다.
사용자 삽입 이미지

여기서 option tab을 눌러보면 다음과 같은 창이 뜬다.
사용자 삽입 이미지
다양한 옵션이 존재하며 기존 데이터베이스 파일의 위치와 다른곳에 파일을 저장할 수 있다.
사용자 삽입 이미지
위와같이 선택을 한 후에 restore를 하면 해당 백업이 리스토어 되어진다.

이것을 문법 구문으로 작성하면 다음과 같다.
RESTORE DATABASE DB명
FROM DISK='BACKUP FILE 위치'
WITH NORECOVERY(RECOVERY), REPLACE

위와같이 구문을 작성하면 되며 WITH절에 나오는 옵션에 대해 간단히 알아보자.
(1) NORECOVERY, RECOVERY
     1) NORECOVERY
         여러개의 LOG를 복구하는 경우 진행중을 의미한다.

     2) RECOVERY
         여러개의 LOG를 복구하는 경우 마지막 로그에서 실행해준다.
         만일 여러개의 LOG복구하는 중 이 문구를 실행하면 다음 LOG리스토어를 할 수 없다.
         처음부터 다시 리스토어해야한다.

(2) REPLACE
     REPLACE는 기존의 데이터베이스 파일이 있는 경우에 리스토어를 하면 복구가 되지 않는다.
     이 옵션을 주면 기존 데이터베이스 파일을 지운 후 리스토어를 하게 된다.

위와 같이 간단한 리스토어에 대해 알아보았다.
GUI화면이 잘되 있어 위와같이 간단하게 리스토어 할 수 있다.

다음에는 해당 리스토어의 간단한 예를 알아보겠다.

MS SQL DB Backup 방법

2008.11.25 15:33 | Posted by 로멘틱가이

MS Sql Server 2005에서 백업을 받을 경우 다음과 같이 Management Studio에서 받을 수 있다.

사용자 삽입 이미지
해당 Object Explorer에서 해당 DB에서 마우스 오른쪽을 클릭하면 위와 같은 팝업 창이 나온다.
Backup To를 클릭하면 다음과 같은 창이 뜬다.
사용자 삽입 이미지
해당 백업 이름 및 Destination을 입력하면 백업을 받을 수 있다.
여기서 Recovery model이 Simple일 경우 Full 및 Differential 백업만 받을 수 있다.

Backup set will expire는 해당 백업의 만기일자를 정해줄 수 있으며
Destination에서 백업 파일을 여러군데로 나누는 경우 해당 백업파일을 나눈 개수대로 생성한다.
해당 파일들이 전부 존재 해야 백업에 대해 restore를 할 수 있으므로 backup file은 한개로 생성하는 것이 좋다.
사용자 삽입 이미지
Backup Option 클릭 시 위와 같은 화면이 뜨는데 주의할 것은
Overwrite media의 화면에서 Append가 설정되어 있는 경우 기존 백업에 Append 되기 때문에
백업 파일의 크기가 2배가 된다.

백업을 받을 때 Backup Media를 설정하는 경우 백업 받기가 수월하다.
Server Objects -> Backup Devices에서 Backup Media를 생성할 수 있다.
Backup Media는 대상 Media의 이름과 백업 받을 대상 폴더만 지정해주면된다.
사용자 삽입 이미지
위와 같이 Backup Media 생성 시 백업 화면의 Destination에서 Add 버튼을 누르면 Backup media를 선택하여 간단하게 받을 수 있다.
일종의 코딩에서의 Template와 같다고 생각하면 된다.

해당 Backup의 Sql Query는 다음과 같다.
1) Data Backup
BACKUP DATABASE DB명
TO DISK = 'BACKUP FILE 명'
WITH NOINIT(NOINIT - 백업 파일 새로 생성, INIT - 백업 파일 APPEND)
,       DIFFERENTIAL (FULL은 Default)

2) Log Backup
BACKUP LOG DB명
TO DISK = 'BACKUP FILE명'
WITH NOINIT(NOINIT - 백업 파일 새로 생성, INIT - 백업 파일 APPEND)

3) Backup Device Add
-- Backup Device add
EXEC sp_addumpdevice
 @devtype = 'disk',  
 @logicalname = 'AdventureWorksBack',
 @physicalname = 'C:\MyBackupDir\AdventureWorksBack.bak'

위와 같이 백업을 쉽게 할 수 있다.
이전 1 2 다음