2004/01/29

AD Database 저장위치를 다른 폴더 또는 디스크로 변경

Active Directory Database 저장위치를 다른 폴더 또는 디스크로 변경하는 방법입니다.

일반적으로 트래픽이 빈번하지 않은 AD환경의 경우 기본 위치인 C드라이에 DB를 위치해도 문제될 사항은 없습니다.

그러나, 대형 사이트의 경우 필수로 분리된 디스크 컨트롤러에 위치하는 것이 성능상 좋습니다. 예로, 코리아닷컴 이나, 하나포스등과 같은 대형사이트처럼 AD 계정을 통해서 인증 및 각 서버 및 클라이언트의 정보 조회 및 수정이 빈번할경우 I/O가 분리된 디스크에 위치해서 트랜잭션 성능에 문제가 없게 해야 합니다.

신규 AD 구축시, 다른 디스크에 지정했을경우나, 기본 폴더에 위치한 것을 다른 폴더 및 디스크에 이동할경우 ntdsutil 을 이용해서 변경할수 있습니다.

1. DC 부팅시 AD복원모드로 부팅을 한후, cmd에서 다음 과정을 수행합니다.


2. AD DB파일 이동..

C:\>ntdsutil
ntdsutil: files
file maintenance: move db to D:\ADDB
(*D:\ADDB로 이동할경우)
[Current] 데이터베이스를 여는 중입니다.
C:\>REM - **********************************************
C:\>REM - Script to move DS DB file
C:\>REM - **********************************************
C:\>D:
D:\>cd \
D:\>mkdir "ADDB"
D:\>cd "ADDB"

D:\ADDB>move "C:\WINDOWS\NTDS\ntds.dit" "D:\ADDB\ntds.dit"
1개 파일을 이동했습니다.

D:\ADDB>C:\WINDOWS\system32\ntdsutil.exe files "set path DB \"D:\ADDB\ntds.dit\"
" quit quit
C:\WINDOWS\system32\ntdsutil.exe: files
file maintenance: set path DB "D:\ADDB\ntds.dit"
C:\WINDOWS\NTDS에서 D:\ADDB로 NTFS 보안을 복사하는 중...
file maintenance: quit
C:\WINDOWS\system32\ntdsutil.exe: quit

D:\ADDB>C:\WINDOWS\system32\ntdsutil.exe files "set path backup \"D:\ADDB\DSADAT
A.BAK\"" quit quit
C:\WINDOWS\system32\ntdsutil.exe: files
file maintenance: set path backup "D:\ADDB\DSADATA.BAK"
이전 NTDS 데이터베이스 위치 C:\WINDOWS\NTDS\dsadata.bak이(가) 없습니다. 기본 NTF
S 보안이 NTDS 폴더에 적용됩니다.
NTDS 폴더의 기본 NTFS 보안은 다시 부팅할 때 설정됩니다.
file maintenance: quit
C:\WINDOWS\system32\ntdsutil.exe: quit

D:\ADDB>C:\WINDOWS\system32\ntdsutil.exe files "set path working dir \"D:\ADDB\"
" quit quit
C:\WINDOWS\system32\ntdsutil.exe: files
file maintenance: set path working dir "D:\ADDB"
C:\WINDOWS\NTDS에서 D:\ADDB로 NTFS 보안을 복사하는 중...
file maintenance: quit
C:\WINDOWS\system32\ntdsutil.exe: quit

D:\ADDB>C:\WINDOWS\system32\ntdsutil.exe files info quit quit
C:\WINDOWS\system32\ntdsutil.exe: files
file maintenance: info

드라이브 정보:

C:\ NTFS (고정 드라이브 ) 사용 가능(4.3 Gb) 전체(5.8 Gb)
D:\ NTFS (고정 드라이브 ) 사용 가능(3.9 Gb) 전체(3.9 Gb)
E:\ NTFS (고정 드라이브 ) 사용 가능(1012.3 Mb) 전체(1019.7 Mb)

DS 경로 정보:

데이터베이스 : D:\ADDB\ntds.dit - 12.1 Mb
백업 디렉터리: D:\ADDB\DSADATA.BAK
작업 디렉터리: D:\ADDB
로그 디렉터리 : C:\WINDOWS\NTDS - 30.0 Mb 합계
res2.log - 10.0 Mb
res1.log - 10.0 Mb
edb.log - 10.0 Mb
file maintenance: quit
C:\WINDOWS\system32\ntdsutil.exe: quit

D:\ADDB>REM - **********************************************
D:\ADDB>REM - Please make a backup immediately else restore
D:\ADDB>REM - will not retain the new file location.
D:\ADDB>REM - **********************************************
[Current] 데이터베이스를 여는 중입니다.
데이터베이스가 이동된 경우,
즉시 백업을 만들어야
복원되는 경우 새 파일 위치가 유지됩니다.



3. AD LOG파일 이동..

file maintenance: move logs to e:\ADLOG

[Current] 데이터베이스를 여는 중입니다.

C:\>REM - **********************************************
C:\>REM - Script to move DS log files
C:\>REM - **********************************************
C:\>e:
E:\>cd \
E:\>mkdir "ADLOG"
E:\>cd "ADLOG"

E:\ADLOG>move "C:\WINDOWS\NTDS\res2.log" "e:\ADLOG\res2.log"
1개 파일을 이동했습니다.

E:\ADLOG>move "C:\WINDOWS\NTDS\res1.log" "e:\ADLOG\res1.log"
1개 파일을 이동했습니다.

E:\ADLOG>move "C:\WINDOWS\NTDS\edb.log" "e:\ADLOG\edb.log"
1개 파일을 이동했습니다.

E:\ADLOG>C:\WINDOWS\system32\ntdsutil.exe files "set path logs \"e:\ADLOG\"" qui
t quit
C:\WINDOWS\system32\ntdsutil.exe: files
file maintenance: set path logs "e:\ADLOG"
C:\WINDOWS\NTDS에서 e:\ADLOG로 NTFS 보안을 복사하는 중...
file maintenance: quit
C:\WINDOWS\system32\ntdsutil.exe: quit

E:\ADLOG>C:\WINDOWS\system32\ntdsutil.exe files info quit quit
C:\WINDOWS\system32\ntdsutil.exe: files
file maintenance: info

드라이브 정보:

C:\ NTFS (고정 드라이브 ) 사용 가능(4.6 Gb) 전체(5.8 Gb)
D:\ NTFS (고정 드라이브 ) 사용 가능(3.9 Gb) 전체(3.9 Gb)
E:\ NTFS (고정 드라이브 ) 사용 가능(982.2 Mb) 전체(1019.7 Mb)

DS 경로 정보:

데이터베이스 : D:\ADDB\ntds.dit - 12.1 Mb
백업 디렉터리: D:\ADDB\DSADATA.BAK
작업 디렉터리: D:\ADDB
로그 디렉터리 : e:\ADLOG - 30.0 Mb 합계
res2.log - 10.0 Mb
res1.log - 10.0 Mb
edb.log - 10.0 Mb
file maintenance: quit
C:\WINDOWS\system32\ntdsutil.exe: quit

E:\ADLOG>REM - **********************************************
E:\ADLOG>REM - Please make a backup immediately else restore
E:\ADLOG>REM - will not retain the new file location.
E:\ADLOG>REM - **********************************************
[Current] 데이터베이스를 여는 중입니다.
로그가 이동된 경우,
즉시 백업을 만들어야
복원되는 경우 새 파일 위치가 유지됩니다.



4. AD DB를 변경한후 무결성을 검사합니다..

file maintenance: integrity

[Current] 데이터베이스를 여는 중입니다.
명령 실행 중: C:\WINDOWS\system32\esentutl.exe /g"D:\ADDB\ntds.dit" /o

Initiating INTEGRITY mode...
Database: D:\ADDB\ntds.dit
Temp. Database: TEMPINTEG1584.EDB

Checking database integrity.

Scanning Status (% complete)

0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................


Integrity check successful.

Operation completed successfully in 9.719 seconds.


0x0(0) 처리 끝내기 코드를 만들었습니다.

무결성이 성공적이면 의미적 데이터베이스 분석을
실행하여 의미적 데이터베이스의 일관성도 확인하는
것이 좋습니다.


file maintenance: quit
ntdsutil: quit

2004/01/19

Command Line에서 호스트에 ip 설정 및 확인

일반적으로 해당 호스트의 네트웍 NIC에 ip를 설정할려면, GUI상태에서 합니다.
GUI 아닌, Command Line 상에서도 ip설정이 가능합니다.

다음과 같은 순서로 설정이 가능합니다. 아래 내용을 batch file로 만들어서
실행해도 좋습니다.

C:\>netsh
# ----------------------------------
# 인터페이스 IP 구성
# ----------------------------------
pushd interface ip

# "로컬 영역 연결"에 대한 인터페이스 IP 구성

set address name="로컬 영역 연결" source=static addr=10.0.0.180 mask=255.0.0.0
set address name="로컬 영역 연결" gateway=10.0.0.1 gwmetric=0
set dns name="로컬 영역 연결" source=static addr=168.126.63.1 register=PRIMARY
add dns name="로컬 영역 연결" addr=164.124.101.2 index=2
set wins name="로컬 영역 연결" source=static addr=none


실제로 맞게 설정되어 있는지 확인할려면, 잘아시는 ipconfig로 확인하시면 됩니다.

C:\>ipconfig/all

Windows IP Configuration

Host Name . . . . . . . . . . . . : w2k3-root
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter 로컬 영역 연결:

Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : AMD PCNET Family PCI Ethernet Adapter
Physical Address. . . . . . . . . : 00-0C-29-18-8C-3D
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 10.0.0.180
Subnet Mask . . . . . . . . . . . : 255.0.0.0
Default Gateway . . . . . . . . . : 10.0.0.1
DNS Servers . . . . . . . . . . . : 168.126.63.1
164.124.101.2


그럼, 위에 내용을 일일히 타이핑을 해야 하느냐?. 그럴 필요까지는 없습니다..
타이핑 실력을 키우시고 싶으시면 말리진 않겠습니다....-_-;

C:\>netsh int dump 처럼 하면, 해당 호스트의 모든 NIC의 네트웍 정보를
덤프 떠서 보여줍니다...

파일로 저장할려면, C:\>netsh int dump > ipconfig.txt 처럼 하면 되겠죠.

2004/01/08

데이터베이스 연결 문자열 예제(Asp3기준)

* 다음 예제코드는 Asp3 기준 코드입니다.

■ Microsoft Access
-->DSN 없이 Server.MapPath를 사용하는 경우

Set Conn = Server.CreateObject("ADODB.Connection")
DSNtest="DRIVER={Microsoft Access Driver (*.mdb)}; "
DSNtest=dsntest & "DBQ=" & Server.MapPath("/databases/mydatabase.mdb")
Conn.Open DSNtest


--> OLE DB

Set Cnn = Server.CreateObject("ADODB.Connection")
Cnn.open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=c:\mydatabase.mdb"



■ Microsoft SQL Server
-->OLE DB

Set cnn = Server.CreateObject("ADODB.Connection")cnn.open "PROVIDER=SQLOLEDB;DATA SOURCE=sqlservername;UID=username;PWD=password;DATABASE=mydatabase "

-->DSN이 있는 경우

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open "DSN=MyDSN;UID=user;PWD=password;DATABASE=mydatabase"


■ Oracle
--> DSN이 있는 ODBC

Set Conn = Server.CreateObject("ADODB.Connection")Conn.cursorlocation=adUseClient
Conn.open "DSN=test;UID=name;PWD=pass"


--> OLE DB

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.cursorlocation=adUseClient
DSNTest="Provider=MSDAORA.1;Password=pass;User ID=name;Data Source=data.world"
Conn.open DSNtest



2004/01/07

성능을 위한 SQL 튜닝 점검사항

1. Application에서 select ... 처럼 직접 쿼리문 대신에 SP를 이용한다.
저장프로시져의 경우 DB에서 컴파일되서 수행되기 때문에 직접쿼리보다 성능효과가 있다.

2. Select * from 테이블 보다는 Select a,b,c,e.... from 테이블 과 같이 필드명을 직접 기입한다. 불필요하게 모든 레코드를 불러올 필요는 없다.

3. 적절한 index를 구축한다.
특히 select 가 많은 OLAP 환경에서는 적절한 index는 많은 성능향샹 효과를 가져온다. 그러나 update가 많은 DB의 경우 잘못된 index구축으로 인해서 오히려 성능 저하를 가져올수 있다.

4. 일부 쿼리문의 경우 강제로 index를 타게 한다.
ex, select a from table (index indexname)
일부 쿼리문의 경우 index를 타지 않을경우 테이블스캔을 한다. 그러나, 특정 index라도 타게하면 테이블스캔을 할 부분이 적어진다. 물론 강제 index에도 없다면 당연히 테이블 전체 스캔을 하겠지만....

5. Application쪽에서 불필요하게 중복쿼리를 하는지 점검한다.
불가피하게 여러번 쿼리가 필요하더라도, SQL서버쪽에서 SP를 통해서 1번만 쿼리를 하는것이 좋다. 특히, DB서버와 Application서버가 네트웍으로 연결된 환경일경우...

6. 되도록이면, join 사용은 자제한다.
정규화와 역정규화시 쿼리비용을 점검하여 쿼리비용이 최소화 되는 방향으로 한다. 무조건 테이블 정규화가 좋은것은 아니다. DB사이즈가 커지더라도 성능위주로 하는 것이 좋다(요즘은 디스크가 저렴하기 때문...)

7. Top을 이용한다.
Application에서 실제 화면에나, 연산에 필요한 레코드외는 쿼리하지 않는 것이 좋다. 일부 레코드를 위해 테이블 전체 레코드를 가져오는 것은 DB서버쪽에 로드도 있긴하지만 Application 서버쪽 메모리를 특히 많이 소비한다.

8. Table 또는 DB의 특정값을 쿼리하는 경우 systemtable에서 제공하는 값을 이용한다.
systemtable의 경우 DB에 대한 시스템값을 저장하는 테이블로서 직접테이블에서 쿼리를 하는 것보다 systemtable에서 쿼리하는 경우가 빠를수 있다. 그러나, MS에서는 이부분에 대해서 권장하지는 않는다고 한다...

9. 쿼리문 작성후, 쿼리분석기에서 staticstics 를 점검해 본다.

10. 최신 MDAC를 이용한다.
DB서버와 Applicaton서버쪽에 안정화된 최신 MDAC으로 업그레이드 한다. 되도록이면 DB와 App서버의 MDAC버젼을 일치시키는 것이 좋다.

11. DB와 LOG저장 I/O를 분리를 하는것이 좋다


위 사항은 일반적인 점검사항이며, 모든 DB에 해당하는 것은 아니다. 특정 DB의 경우 프로필러를 이용해서 DB 및 시스템의 퍼포먼스 카운터를 점검해야 한다.



07-TechNetB_masthead_ltr.gif

가장 많이 본 글