database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Tutorials 190 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 190
MS SQL 서버 몇가지 팁 (FAQ)
작성자
정재익(advance)
작성일
2001-12-07 11:17
조회수
22,117

1. 다른 DBMS나 포맷으로부터 SQL Server로 데이터를 옮기는 방… : 다른 DBMS나 포맷으로부터 SQL Server로 데이터를 옮기는 방법은?(예를 들면 FoxPro, Access, AS/400, DB/2, 오라클 등)

 

여러 가지 방법이 있다.

 

1. Access의 경우에는 마이크로소프트 웹 사이트에서 무료로 받을 수 있는 Access upsizing wizards를 사용하면 된다. http://www.microsoft.com/support로 가면 softlib 항목에서 찾을 수 있다. 이것을 사용하면 Access에서 SQL 4.x 또는 6.x로 변환할 수 있다. 현재 7.x로의 변환은 지원되지 않으므로 먼저 6.5로 변환한 후에 7.0으로 업그레이드 하는 절차를 거쳐야 한다.

 

 

2. 다른 DBMS에서 플랫 파일 형태로(예를 들면 탭 또는 쉼표로 구분된 파일, 고정 포맷 파일 등) 데이터를 만들 수 있다면 BCP.EXE를 사용해서 작업하면 된다. BCP.EXE는 콘솔 프로그램으로 Books Online에 자세하게 설명되어 있는데 SQL Server에서 데이터를 뽑아내거나 로드하는 가장 빠른 방법이지만 플랫 파일만을 지원한다.

 

 

3. 다른 포맷에 대한 ODBC 드라이버를 가지고 있다면 시중에는 데이터의 전송과 마이그레이션 기능을 가진 여러 가지 툴이 나와 있으며 이들은 GUI 기반으로 되어있지만 명령 행에서 자동으로 작업을 실행하는 것도 지원한다. 어떠한 ODBC 데이터 소스 간의 작업에도 사용할 수 있으며 어느 한 쪽이 꼭 SQL Server일 필요도 없다. 다음과 같은 제품들이 있다.

 

 

Data Junction(http://www.datajunction.com)

 

 

SQL Mover(http://www.sqlmover.com)

 

 

InfoPump(http://www.platinum.com)

 

 

DBArtisan(http://www.embarcadero.com)

 

 

4. SQL Server 7.0에는 위의 제품들과 유사한 기능을 하는 DTS 라는 툴이 포함되어 있다. 이것은 어떠한 ODBC 또는 OLE-DB 데이터 소스와도 작업을 할 수 있으며 어느 한 쪽이 반드시 SQL Server 7.0일 필요도 없다. 그러나 만약 SQL Server 7.0을 대상으로 작업을 하지 않는 경우에는 라이센스 문제가 없는지 먼저 확인을 해 보아야 한다.

 

 

5. AS/400을 위한 제품으로는 예전부터 이용되어온 몇 가지 툴이 있다(실시간 리플리케이션과 전송 기능을 제공함).

 

Data Mirror(http://www.datamirror.com)

 

Symbiator(http://www.execusoftsystems.com)

 

 

2.마스터의 tempdb 데이터베이스를 삭제하는 방법은? : 마스터의 tempdb 데이터베이스를 삭제하는 방법은?

 

다음과 같이 하면 된다.

 

1. tempdb를 2MB 크기로 RAM에 올라가도록 설정한다. SQL 엔터프라이즈 매니저나 sp_configure를 사용하면 된다.

2. reconfigure with override를 실행한다.

3. SQL Server를 재기동 한다.

4. tempdb를 위한 새로운 디바이스를 추가한다. 단, temp_db라는 이름은 사용하지 말고 다른 이름을 사용하도록 한다.

5. 새로 만든 디바이스를 디폴트 디바이스가 되도록 한다. 특히 마스터를 포함해서 다른 디바이스가 "Default"로 지정되어 있지 않도록 한다. 디폴트 상태는 SQL 엔터프라이즈 매니저나 sp_diskdefault 스토어드 프로시저를 사용해서 설정할 수 있으며 두 가지 모두 Books Online에 자세하게 설명되어 있다.

6. tempdb를 RAM에 존재하지 않도록 설정한다(값을 0으로 지정하면 됨).

7. reconfigure with override를 실행한다.

8. SQL Server를 재기동 한다.

9. 디폴트로 사용하고자 하는 디바이스를 원하는 대로 지정한다.

 

 

3. xp_cmdshell을 이용해서 bcp를 실행할 때 문제가 있다. … : xp_cmdshell을 이용해서 bcp를 실행할 때 문제가 있다. bcp가 실행되지 않거나 찾아야 할 파일을 찾지 못하는 이유는 무엇인가?

 

먼저 xp_cmdshell을 실행할 수 있는 권한이 있는지 확인해야 한다(xp_cmdshell ‘dir’을 실행하여 파일 명들이 반환되는지 보면 된다).

그 다음에는 MSSQLSERVER 서비스가 별도의 NT credentials 하에서 실행 중인지를 확인한다. 어떤 유저로 로그인 하였는지는 상관 없다(SQL Server는 콘솔에 아무도 로그인 하지 않아도 잘 동작하지 않는가). 그러므로 로그온 계정이나 매핑된 드라이브는 아무 상관이 없다. bcp를 실행하는 것은 사용자가 아니라 SQL Server이기 때문에 로컬 시스템의 드라이브 밖에는 인식하지 못한다(여기서 로컬은 서버를 의미함). 만약 워크스테이션에서 쿼리를 실행할 때 쿼리가 워크스테이션의 로컬 드라이브를 참조한다고 혼동하지 말기 바란다.

 

MSSQLSERVER에 의해서 사용되는 NT credentials의 기본값은 Localsystem 계정이다. 어떤 계정 하에서 MSSQLSERVER가 수행되는지를 확인하려면 제어판->서비스 에서 MSSQLSERVER를 선택한 다음 start-up 옵션을 보면 된다.

 

Localsystem 계정은 네트워크를 사용할 수 있도록 인증되어 있지 않기 때문에 네트워크 상의 공유 자원을 사용할 수 없다.

 

따라서 xp_cmdshell에 의해서 수행되는 bcp가 네트워크 자원을 사용하도록 하려면 다음 같은 두 가지 방법 중 하나를 사용해야 한다.

 

1. MSSQLSERVER 서비스가 수행되는 계정을 네트워크 사용 권한이 있는 사용자 계정으로 변경한다.

 

2. 대상 서버의 레지스트리에서 다음의 항목을 수정하여 사용하고자 하는 공유 자원을 추가한다(추가된 공유 자원은 누가 접속해 오는지를 검사하지 않기 때문에 Localsystem 계정에서도 사용 가능하게 된다). 변경된 사항이 적용되기 위해서는 대상 서버의 server 서비스를 재기동 시켜야 한다. 이 방법은 해당 공유 자원에 대한 보안 설정을 없애기 때문에 그곳에 보관되어 있는 내용이 유출될 수 있음을 주의하여야 한다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
\Parameters\NullSessionShares

어떠한 방법을 사용하던 간에 필요한 공유 자원을 참조할 때에는 드라이브 문자 대신 UNC 명을 사용해야 한다.

 

예를 들면. xp_cmdshell ‘bcp servername..tablename out \server01\share\bcp.fil .............’

 

4. SQL Server 디바이스를 한 디스크에서 다른 디스크로 옮기거나 … : SQL Server 디바이스를 한 디스크에서 다른 디스크로 옮기거나 이름을 변경하려면 어떻게 해야 하는가?

 

두 가지 방법이 있다.

 

1. 디바이스 미러링을 사용한다. 해당 디바이스를 새로운 위치에 미러링 한 다음 미러링 관계를 끊고 이전의 디바이스를 삭제한다. 이 방법을 사용하면 SQL Server를 셧다운 할 필요가 없으며 GUI 또는 TSQL을 통해서 작업할 수 있다.

 

2. Books Online에 나와 있는 sp_movedevice를 사용한다. 변경 작업을 마친 다음에는 SQL Server를 정지시키고 물리적으로 디바이스를 이동시킨 후에 다시 SQL Server를 기동한다. 작업을 하는 동안에는 서비스 단절이 불가피하지만 운영체제의 명령이 SQL 미러링보다 빠르기 때문에 이 방법이 속도가 더 빠르다.

 

sp_movedevice은 sysdevices 테이블에서 phyname을 갱신하는 작업만 한다.

 

위의 방법은 모든 유저 데이터베이스에 대해서 적용할 수 있다. 이 방법으로 마스터 데이터베이스를 옮기려고 한다면 sysdevices의 phyname 파라미터는 단지 문서화를 위한 것임에 주의하여야 한다(다만 일관성을 유지하기 위해서 함께 변경해 주는 것이 좋다). SQL Server는 마스터 디바이스를 찾기 위해서 실제로는 다음의 레지스트리 항목을 참조한다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer
\Parameters\SQLArg0

그러므로 수정해야 할 것은 사실 이 레지스트리 키 값인 것이다.

 

5. 인텔 머신과 알파 머신 사이에서 SQL Server 데이터를 전송하는… : 인텔 머신과 알파 머신 사이에서 SQL Server 데이터를 전송하는 방법은?

 

SQL Serer 6.5 이하의 버전에서는 DUMP와 LOAD DATABASE 명령으로는 원하는 작업을 할 수가 없다(바이트 재정렬을 하지 않기 때문). 그러므로 bcp나 SQL 엔터프라이즈 매니저에서 제공하는 전송 도구를 사용하거나 아니면 직접 ODBC/DMO에 기반한 애플릿을 작성해야 한다.

SQL Server 7.0에서는 바이트 재정렬이 이루어지기 때문에 서로 다른 아키텍쳐를 가진 컴퓨터 간의 DUMP와 LOAD가 지원된다.

 

6. 서로 다른 서버 상에 존재하는 SQL Serer 데이터베이스 사이에서… : 서로 다른 서버 상에 존재하는 SQL Serer 데이터베이스 사이에서 데이터를 전송하는 방법은?

 

1. 전체 데이터베이스에 대해서 가장 빠르게 작업하는 방법은 DUMP DATABASE 또는 LOAD DATABASE 명령을 사용하는 것이다. 단, 데이터베이스의 크기가 같아야 하고 동일한 순서의 동일한 세그먼트 조각으로 이루어져 있어야 한다. 두 데이터베이스에 대해서 sp_help_revdatabase를 실행해 보면 필요한 DDL을 점검할 수 있도록 해 줄 것이다. 네트워크로 연결되어 있지 않다면 로컬 테이프에 덤프 시킨 다음 이 테이프를 보내는 방식으로 작업할 수도 있다.

 

2. 만약 테이블과 데이터만을 전송하고자 한다면 BCP.EXE를 사용하면 된다. 이것은 콘솔 프로그램으로 Books Online에 자세히 설명되어 있다. 한번에 하나의 테이블에 대해서만 작업을 하며 디스크에 플랫 파일을 만들게 된다.

 

3. 스토어드 프로시저 또는 뷰 등에 대해서 작업한다면 BCP처럼 동작하는 DEFNCOPY.EXE라는 오래된 콘솔 프로그램을 사용해 볼 수 있다. NT에서는 적어도 6.5 버전까지는 작동하긴 하지만 SQL Server를 OS/2에서 사용하지 않는다면 요즘은 잘 사용되지 않는다.

 

4. SQL 엔터프라이즈 매니저에는 GUI 형태로 사용 가능한 전송 기능이 내장되어 있으며 SQL Server 7에는 동일한 툴이 별도로 제공된다. 이것은 두 개의 데이터베이스/서버 간의 모든 객체를 전송하는 것을 지원하지만 반드시 서로 네트워크로 연결되어 있어야 한다.

 

5. 다른 회사에서 판매중인 DBMS 관리 프로그램에는 다음과 같은 것들이 있다.

 

Data Junction (http://www.datajunction.com)

SQL Mover (http://www.sqlmover.com)

InfoPump (http://www.platinum.com)

DBArtisan (http://www.embarcadero.com)

 

원본출처 : http://korea.internet.com/channel/content.asp?nid=1237&cid=113#start

[Top]
No.
제목
작성자
작성일
조회
193SQL SERVER DTS [3]
정재익
2001-12-07
14862
192SQL SERVER DTS [2]
정재익
2001-12-07
12649
191SQL SERVER DTS [1]
정재익
2001-12-07
20436
190MS SQL 서버 몇가지 팁 (FAQ)
정재익
2001-12-07
22117
181T-SQL 에서 사용되는 함수들 - 텍스트 및 이미지 함수
정재익
2001-12-03
9506
180T-SQL 에서 사용되는 함수들 - 보안 함수
정재익
2001-12-03
8113
179T-SQL 에서 사용되는 함수들 - 행집합 함수
정재익
2001-12-03
8620
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다