데이터베이스를 물리적인 위치를 변경시키는 다양한 방법

Database를 다른 위치로 이동/복사하고자 하는 경우에 다음의 세 가지 방법을 사용할 수 있다.

-Database Backup을 수행한 다음에 Restore 작업을 수행하면서 이동이 가능하다.
-Database를 detaching하고 Database File들을 원하는 위치로 이동한 다음에 다시 attaching함으로써 이동이 가능하다.
-BCP, DTS를 사용하여 이동이 가능하다.

어떤 방법을 사용할 것인지는, SQL Server 버전, SQL Server가 사용하는 Character Set/Sort Order, Database Size, 운영 여건 등의 여러 가지 요소들을 확인한 다음에 결정해야 한다.

위의 세 가지 방법 중에서 두 번째 방법을 사용하여 데이터베이스를 이동하는 방법에 대해서 자세히 알아보자. 동일한 SQL Server 내에서 Database의 파일 위치를 이동하는 경우에는 관계 없지만, 서로 다른 SQL Server간의 이동을 위해 두 번째 방법을 사용하고자 하는 경우에는, Source Database가 존재하는 SQL Server와 Destination Database가 존재할 SQL Server의 버전이 동일해야 하며 양쪽 SQL Server가 사용하는 Character Set과 Sort Order가 동일해야 한다.

데이터베이스를 분리하고 다시 연결하는 방법

SQL Server 7.0과 2000에서 Database의 위치를 이동하고자 하는 경우에, sp_detach_db와 sp_attach_db를 사용하여 작업하는 것이 가능하다.

이용하기전 온라인 도움말의 sp_detach_d, sp_attach_db 예제 구문을 보면 이해가 쉬울 것이다.

다음과 같이 작업하면 된다.

아래의 예문들은 Database 명이 "userdb" 라고 가정하고 작성된 내용이므로, "userdb" 라고 기술한 위치에 실제 작업할 Database명을 기술하면 된다. 작업에 앞서 기존내용들을 백업한 후 테스트 해보기 바란다.

-작업할 Database file의 위치를 확인한다.
Use userdb
Go
Sp_helpfile
Go

-해당 Database를 SQL Server에서 분리한다. 이 작업을 수행하기 위해서는, 해당 Database를 사용하는 Process가 없어야 한다. 현재 해당 Database를 사용하는 사용자가 있다면, 현재 수행중인 작업들이 종료되기를 기다렸다가 작업하시기 바란다. 그리고, Query Analyzer 등에서, 작업할 Database에 연결한 사용자들이 있다면 모두 그 Database에서 빠져 나가도록 한 다음에 작업을 수행해야 한다. 기다리는 것이 지루하다면 서비스를 잠시 멈췄다가 사용할 수 있다.
sp_detach_db userdb
go

-위의 Scripts를 수행한 다음에 Results창에 다음과 같이 메시지가 나타나는지 확인한다.
Successfully detached Database 'userdb'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

-만약, 작업할 Database를 사용하고 있는 사용자가 있으면, 다음과 같이 에러 메시지가 발생하면서 작업이 중단된다.
Server: Msg 3702, Level 16, State 1, Line 0
Cannot drop the Database 'userdb' because it is currently in use.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

-해당 Database가 제대로 분리(detaching)되었는지 확인한다.
sp_helpdb userdb
go

-제대로 분리되었다면, 다음과 같은 형태의 메시지가 리턴 될 것이다.
Server: Msg 15010, Level 16, State 1, Procedure sp_helpdb, Line 51
The Database 'userdb' does not exist. Use sp_helpdb to show available Databases.

-이동하고자 하는 위치로 Database file들을 이동/복사한다.

-이동한 Database file을 원하는 SQL Server에서 다시 부착(attaching)해 준다.
sp_attach_db N'userdb', N'E:\mssql7\Dbdevice\userdbdata.mdf', N'E:\mssql7\Dbdevice\userdblog.ldf'
go

-위의 Scripts를 수행하면, 다음과 같은 메시지가 리턴된다.
Successfully attached Database 'userdb'.

-해당 Database가 SQL Server에 제대로 부착되었는지 확인한다.
sp_helpdb userdb
go
2005/06/15 14:32 2005/06/15 14:32
우선, win2k에서 제어판의 국가별 옵션에서 일본어를 추가해줘야 합니다.

디비 생성시 japanese_unicode_cs_as_ks_ws로 설정하고

Sql서버의 테이블 관련컬럼의 데이터 타입을 유니코드 데이터 타입으로 설정하시기 바랍니다.
예)nchar, nvarchar등으로

자세한사항은 아래 페이지들을 참고하세요..

http://sqler.pe.kr/prolec/pse03.asp

http://www.microsoft.com/korea/msdn/library/techart/IntlFeaturesInSQLServer2000.htm
2005/06/15 14:14 2005/06/15 14:14
출처 : http://support.microsoft.com
요약
이 문서에서는 Microsoft SQL Server 7.0 또는 Microsoft SQL Server 6.5 설치를 Microsoft SQL Server 2000 버전 8.0으로 변환하는 방법에 대한 질문과 대답을 설명합니다.
추가 정보
질문: SQL Server 7.0 데이터베이스를 분리하고 SQL Server 2000 서버에 연결할 수 있습니까?

대답: 예. SQL Server 7.0 데이터베이스는 SQL Server 2000과 호환되지만 예외가 있습니다. 이 예외 목록을 보려면 SQL Server 2000 온라인 설명서의 "SQL Server 7.0에서 데이터베이스 업그레이드" 항목을 참조하십시오. SQL Server 7.0 데이터베이스를 SQL Server 2000에 연결하면 SQL Server 7.0 데이터베이스가 SQL Server 2000 데이터베이스로 자동 업그레이드되고 SQL Server 7.0 설치에서 더 이상 데이터베이스를 사용할 수 없습니다.
질문: SQL Server 2000 데이터베이스를 분리하고 SQL Server 7.0 서버에 연결할 수 있습니까?

대답: 아니요. SQL Server 2000 데이터베이스를 SQL Server 7.0 서버로 이동하는 유일한 방법은 데이터 변환 서비스(DTS), bcp 또는 링크된 서버 간의 쿼리 사용 같은 방법을 사용하여 데이터를 변환하는 것입니다.
질문: SQL Server 7.0 데이터베이스 백업을 SQL Server 2000 서버로 복원할 수 있습니까?

대답: 예. master, model, msdb 및 배포 데이터베이스 이외의 SQL Server 7.0 데이터베이스는 SQL Server 2000과 호환됩니다.
질문: SQL Server 2000 데이터베이스 백업을 SQL Server 7.0 서버로 복원할 수 있습니까?

대답: 아니요. SQL Server 2000 데이터베이스를 SQL Server 7.0 서버로 이동하는 유일한 방법은 DTS, bcp 또는 링크된 서버 간의 쿼리 사용 같은 방법을 사용하여 데이터를 변환하는 것입니다.
질문: SQL Server 6.5 데이터베이스를 SQL Server 2000으로 복원하거나 연결할 수 있습니까?

대답: 아니요. SQL Server 6.5 데이터베이스를 SQL Server 2000으로 이동하는 유일한 방법은 업그레이드 마법사를 실행하는 것입니다.
질문: 업그레이드하려면 SQL Server 7.0 서비스 팩이 필요합니까?

대답: Microsoft 고객기술지원부에서는 최신 서비스 팩을 설치할 것을 권장하지만 SQL Server 7.0을 SQL Server 2000 버전 8.0으로 업그레이드하는 데 서비스 팩은 필요하지 않습니다.
질문: SQL Server 2000 버전 8.0으로 업그레이드하는 데 어떠한 SQL Server 6.5 서비스 팩이 필요합니까?

대답: SQL Server 6.5를 같은 컴퓨터에서 SQL Server 2000의 인스턴스로 업그레이드할 때 먼저 SQL Server 버전 6.5 서비스 팩 5a 이상을 적용해야 합니다. SQL Server 6.5를 다른 컴퓨터에서 SQL Server 2000의 인스턴스로 업그레이드할 때는 먼저 SQL Server 버전 6.5 서비스 팩 3 이상을 적용해야 합니다.
질문: SQL Server 6.5 데이터베이스를 업그레이드하는 프로세스에는 시간이 얼마나 걸립니까?

대답: SQL Server 6.5 데이터베이스를 SQL Server 2000 버전 8.0으로 업그레이드하는 데 필요한 시간에 영향을 미치는 요소는 여러 가지가 있습니다. SQL Server 2000 데이터베이스에서 SQL Server 6.5 데이터베이스의 각 개체를 다시 작성해야 하며 모든 행을 전달해야 합니다. 각 데이터베이스의 복잡성에 따라 행과 개체의 수가 다른 두 개의 10GB 데이터베이스를 변환하는 데 필요한 시간은 크게 다릅니다. 또한 하드웨어 플랫폼, 프로세서 수, 디스크 하위 시스템 및 RAM의 양은 업그레이드에 필요한 시간을 결정하는 데 중요한 역할을 합니다. 설치하는 동안 "데이터 유효성 검사"를 선택하면 두 가지 요소에 의해 업그레이드를 수행하는 데 필요한 시간이 증가합니다. 업그레이드 프로세스에 필요한 일반적인 시간은 다음과 같습니다.

데이터베이스 크기 업그레이드에 필요한 예상 시간
400MB 20분 미만
1GB 1시간 미만
10GB 4시간 미만
50GB 12시간 미만
100GB 24시간 미만

질문: 설치 업그레이드 프로세스를 실행하는 동안 SQL Server 7.0 서버에 연결할 수 있습니까?

대답: 아니요. 설치 업그레이드를 수행하면 SQL Server 7.0 서버가 중지되고 시작되므로 사용자는 연결을 유지할 수 없습니다. 사용자가 연결을 유지하고 있을 때 업그레이드를 수행하려면 SQL Server 2000의 개별 인스턴스를 설치한 다음 데이터베이스 복사 마법사를 사용하여 Microsoft SQL Server 7.0의 각 데이터베이스를 Microsoft SQL Server 2000의 해당 인스턴스로 복사해야 합니다. 데이터베이스 복사 마법사를 사용하면 프로세스에서 서버를 종료하지 않고 SQL Server 7.0 데이터베이스를 업그레이드할 수 있습니다.
질문: 업그레이드 프로세스를 실행하는 동안 SQL Server 6.5 서버에 연결할 수 있습니까?

대답: 아니요. 업그레이드 프로세스 동안 SQL Server 6.5 서버가 중지되고 시작되면서 개체가 스크립트되고 데이터가 추출됩니다. 또한 데이터 전송이 시작되면 SQL Server 2000만 실행되고 SQL Server 6.5에는 액세스할 수 없습니다.
질문: 업그레이드를 수행하기 전에 SQL Server 6.5 서버를 어떻게 구성해야 합니까?

대답: SQL Server 2000을 실행하는 새 컴퓨터로 기존 SQL Server 6.5 서버를 업그레이드하는 경우 두 컴퓨터 모두 MSSQLServer 서비스에 대해 도메인 사용자 이름과 암호를 사용하도록 구성해야 합니다. 또한 도메인 사용자 계정은 두 컴퓨터에서 모두 Administrators 그룹에 속해야 합니다. 한 컴퓨터 업그레이드는 로컬 시스템 계정으로 충분합니다. 여러 도메인에서 업그레이드하는 경우 업그레이드를 시작하기 전에 도메인 간에 트러스트 관계를 설정해야 합니다.
질문: 둘 이상의 6.5 SQL Server 서버에서 하나의 SQL Server 2000 서버로 데이터베이스를 통합할 수 있습니까?

대답: 아니요. 업그레이드 프로세스는 업그레이드 중인 서버를 추적하여 하나의 6.5 SQL Server 서버의 데이터베이스만 업그레이드할 수 있도록 합니다. 여러 서버의 데이터베이스를 통합하면 사용자 로그인 ID, 사용자 계정 및 개체 사용 권한에 문제를 일으킬 수 있습니다. 다른 6.5 SQL Server 서버의 여러 데이터베이스를 통합하려면 단일 SQL Server 서버로 통합할 모든 데이터베이스를 이동하고 SQL Server 2000으로 업그레이드하기 전에 응용 프로그램이 올바르게 작동하는지 확인하십시오.
질문: 데이터베이스를 하나 또는 몇 개만 SQL Server 2000으로 업그레이드할 수 있습니까?

대답: 기존 SQL Server 7.0 인스턴스를 SQL Server 2000으로 업그레이드하면 SQL Server 7.0이 SQL Server 2000으로 대체되기 때문에 항상 모든 데이터베이스가 업그레이드됩니다. SQL Server 7.0 데이터베이스의 일부만 업그레이드하려면 SQL Server 2000을 별개의 인스턴스로 설치하고 데이터베이스 복사 마법사를 사용하여 데이터베이스를 업그레이드해야 합니다. 자세한 내용은 SQL Server 온라인 설명서의 "SQL Server 7.0에서 데이터베이스 업그레이드" 항목을 참조하십시오.

SQL Server 6.5를 업그레이드하면 SQL Server 데이터베이스 하나, 일부 또는 전부를 SQL Server 2000으로 업그레이드할 수 있습니다. 서버의 모든 데이터베이스를 업그레이드하기 전에 개별 데이터베이스를 테스트나 실습 목적으로 변환할 수도 있습니다. 그러나 문제 발생 가능성을 최소화하기 위해 서버에 있는 모든 프로덕션 데이터베이스를 동시에 변환하는 것이 좋습니다. 기존 SQL Server 데이터베이스의 하위 집합만 변환하려면 동시에 모두 변환해야 합니다.

모든 SQL Server 6.5 데이터베이스를 동시에 업그레이드하지 않는 경우 몇 가지 문제가 발생할 수 있습니다. 뷰, 저장 프로시저, 트리거 등 다른 데이터베이스의 내용에 의존하는 개체는 개체 또는 종속 데이터베이스가 없는 경우 만들어지지 않습니다.

추가 개체를 포함하도록 SQL Server 6.5 model 데이터베이스가 수정된 경우 다른 모든 SQL Server 6.5 데이터베이스와 동일한 시간에 또는 마지막으로 변환해야 합니다. SQL Server 6.5 model 데이터베이스에 추가되는 기본이 아닌 개체의 결과로 SQL Server 6.5 데이터베이스에서 만든 개체는 업그레이드 프로세스 동안 스크립팅됩니다.

model 데이터베이스가 이미 변환된 후에 다른 SQL Server 6.5 데이터베이스가 업그레이드되면 SQL Server 6.5 model 데이터베이스에 따라 기본이 아닌 개체가 포함됩니다. 개체는 처음에 SQL Server 2000 model 데이터베이스에서 만들어질 때 새로운 SQL Server 2000 데이터베이스에 추가되기 때문에 작성 스크립트는 데이터베이스에 이미 있는 개체를 만들지 못합니다. 따라서 model 데이터베이스를 마지막으로 변환함으로써 데이터베이스 구조의 모든 변경은 새로운 SQL Server 2000 데이터베이스에만 적용됩니다. SQL Server 6.5로 변환된 데이터베이스의 모든 기본이 아닌 개체는 이러한 데이터베이스를 변환하는 동안 스크립트에서 만들어집니다.
질문: 같은 컴퓨터에서 SQL Server 7.0 또는 6.5와 동시에 SQL Server 2000을 실행할 수 있습니까?

대답 : SQL Server 6.5 및 SQL Server 7.0은 서버에 기본 인스턴스로 설치되며 특정 컴퓨터에서 한 번에 두 버전 중 하나만 실행할 수 있습니다. 그러나 SQL Server 2000에서는 SQL Server 데이터베이스 엔진의 여러 인스턴스가 동일한 컴퓨터에서 동시에 실행될 수 있습니다. SQL Server 2000을 명명 인스턴스로 설치한 경우 컴퓨터에 이전에 설치된 SQL Server 6.5 또는 SQL Server 7.0 기본 인스턴스와 함께 실행할 수 있습니다. SQL Server 2000을 기본 인스턴스로 설치한 경우 컴퓨터에 이미 있는 SQL Server 6.5 또는 7.0 기본 인스턴스가 업그레이드됩니다. SQL Server 6.5를 실행하는 컴퓨터에서 이렇게 될 경우에 업그레이드한 후 vswitch 유틸리티를 사용하여 SQL Server 2000 기본 인스턴스와 SQL Server 6.5 기본 인스턴스 간에 전환할 수 있습니다. SQL Server 7.0 기본 인스턴스가 업그레이드되는 경우에 업그레이드한 후 SQL Server 2000 기본 인스턴스에 액세스할 수 있습니다.

SQL Server 데이터베이스 엔진의 각 인스턴스에 인스턴스 간 공유되지 않는 시스템 및 사용자 데이터베이스의 고유한 집합이 있다는 것을 알고 있어야 합니다.

자세한 내용은 SQL Server 온라인 설명서의 "SQL Server의 인스턴스 및 버전 작업" 항목을 참조하십시오.
질문: SQL Server 6.5 변환 동안 아래와 같은 내용의 오류가 나타나는 이유는 무엇입니까?



@@servername이 유효하지 않습니다
대답: 이 오류 메시지는 업그레이드 중인 SQL Server 6.5에 이름이 지정되지 않은 경우 발생할 수 있습니다. 이 문제를 해결하려면 6.5 SQL Server 서버에서 다음 단계를 수행하십시오.


ISQL 또는 ISQL/w에서 다음 쿼리를 실행하여 서버에 이름이 있는지 확인하십시오.SELECT @@servername

서버에 이름이 없는 경우 다음 저장 프로시저를 실행하여 이름을 추가하십시오. sp_addserver , local

질문: SQL Server 6.5 서버를 업그레이드하면 다음과 같은 내용의 오류 메시지가 나타나는 이유는 무엇입니까?

기본 데이터베이스를 열 수 없습니다


@@servername을 쿼리하는 동안 오류가 발생했습니다
대답: 시스템 관리자(SA)의 기본 데이터베이스를 아직 복구하지 않은 경우 또는 그렇다고 의심되는 경우 업그레이드 마법사는 이러한 오류 메시지 중 하나를 표시합니다. 기본 데이터베이스의 문제를 해결하고 업그레이드 마법사를 다시 실행하십시오.
질문: SQL Server 6.5 서버를 업그레이드하면 업그레이드 마법사가 응답을 중지하는 것 같습니다. 그 이유는 무엇입니까?

대답: 변환 프로세스 동안 응용 프로그램이나 서비스가 ODBC를 SQL Server 6.5 서버에 연결하는 경우 SQL Server 서버를 완전하게 종료하지 못할 수 있습니다. SQL Server 6.5 서버가 완전히 중지되었는지 확인하지 못하면 변환 프로세스는 다음 단계로 진행하지 못합니다. 변환 프로세스는 응답하지 않는 것으로 나타나며 이 경우 결국 프로세스가 실패합니다. 이 문제를 해결하려면 업그레이드를 수행하기 전에 ODBC에 연결되었거나 SQL Server를 사용 중일 수 있는 모든 응용 프로그램과 서비스를 닫으십시오. SQL 추적이 버전 6.5 SQL Server 서버에 연결된 경우 비슷한 문제가 나타나게 됩니다. 서버는 실제로 응답을 중지하지 않지만 일단 발생한 작업이 아주 많은 CPU 시간을 빠르게 사용하여 속도가 급격히 느려집니다.
질문: 업그레이드 프로세스 동안 발생할 수 있는 오류 기록은 어디에서 볼 수 있습니까?

대답: 업그레이드 프로세스 동안 자세한 로그가 생성되어 SQL 디렉터리에 저장됩니다. 업그레이드 프로세스 동안 오류가 발생하면 프로세스 끝에 대화 상자가 표시됩니다. 이 대화 상자는 오류 파일의 내용을 표시합니다. 이 출력 파일은 Program Files\Microsoft SQL Server\MSSQL\Upgrade\__
2005/06/15 14:13 2005/06/15 14:13